Packers vs. Mappers
There was a thought provocative essay, called "Programmers Stone" written in 90s. It was rather long, but its opening was outstanding. Author discussed two different mind-sets - packers and mapper. No we can call them coders and programmers.)
The wast majority belongs to the first category, so they set rules and influence fashion. That is why almost everything eventually becomes Java - explicit typing, redundancy, forced description of every single little detail - all the packer's mindset likes and welcomes.
Even a guidelines for Common Lisp are heavily influenced by packers (corporations are hiring them to code from 9 to 5).
The all small marvels which together create the pure artistic sense of using Lisp packers want to throw away and replace with strict typing, ugly constructs, fixed rules, concrete recipes.
Don't use dynamic lists, they say, use fixed structures. Don't do recursion, use loops. Don't use nil, it is tricky. Do not return multiple values, it is confusing, and so on.. Everything with is unique and liberating, gives you more freedom of expression, leads to more compact, more natural idioms considered harmful.
They want it back to the realms of strictly controlled, imperative packing world, where they feel safe and confident, performing their restricted, repetitive tasks according to fixed rules.
On the other hand, going into unknown, exploring, observing, figuring-out, describing and prototyping on the go, this very moment - the attitude that is alien to packers and hated by them.
The very essence of an art is an intense awareness, attempting to catch this very moment and act in a harmony with it on the spot. It is about flowing, being flexible and spontaneous. It has nothing to do with restricted, fixed, repetitive behavior, which characterizing stupidity.
To learn the art of programming you should learn the artistic Lisp - its Scheme dialect, with remarkable general ideas, wise conventions, and very few, carefully selected special forms.
After you will *realize* the beauty of one general application rule *together* with prefix notation *and* common underlying list structure, after you *internalize* that having *less* pre-defined special forms is much better than having lots of confusing special cases, that you could extend this core language with any function you wish. After you will *realize* that code is data, represented as lists, and together with the list-aware reader it gives you almost algebraic transformations for free, that the-empty-list is a nice thing and recursion *is* much more natural way to think, then, you will look at world of packers very differently.
Scheme language is a natural programming language for an artists, people with taste and drives, with the passion for exploration and going into unknown, open-ended problems, for people with different mindset.
For safe packing with primitive, fixed hierarchies there is imperative Java.