Originally Posted by 'magwo',index.php?page=Thread&postID=187997#post18 7997
For the purpose of becoming a better programmer, I would recommend learning a functional language such as Scheme, Lisp or Haskell.
In my experience, programmers who have at some point in their career/education/hobbies embraced a functional language, write better code.
People who have really understood functional languages tend to write maintainable, flexible and easily debuggable code. They may not write more correct code as in program correctness, but the "debuggability" of the code that they write makes mistakes and bugs much less problematic and costly to fix.
While people who only ever programmed in stateful languages, "imperative style", tend to write long and messy functions that are very prone to error when you maintain and refactor the code.
For example, consider recursion. To a programmer experienced with functional programming, this is the "easy" solution - the naive implementation. But to the imperative style programmer, recursion is scary and complex, and usually doesn't even come to mind when he/she writes code.
When a functional style programmer writes code in a function, he sees functions in hiding. When an imperative style programmer writes code in a function, he sees steps.