Quote 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.
While I, just like any one else, will agree with you that its good thing to obtain proper coding habits from the start, and while its possible that its easier to do so with languages such as Lisp, one simply have to start some ware, a book about a language that was written by its maker is a good way to start in my eyes, if you can recommend a good quality (epic and above =p) of books in regards to ether Lisp or the other two you mentioned I might (80% actually) go for it first, as I to believe that proper programing habits and efficiency in code is of great impotence, but I have to start some ware =p

Going Lisp>C>C++ is sort of long trip, but I got a year to "kill" so I don't count out any thing, all advises are welcome!