Vladimir_M comments on I want to learn programming - Less Wrong

7 Post author: benelliott 26 March 2011 10:40AM

You are viewing a comment permalink. View the original post to see all comments and the full post content.

Comments (53)

You are viewing a single comment's thread.

Comment author: Vladimir_M 26 March 2011 09:01:07PM *  1 point [-]

One thing I'd emphasize is that absolute beginners are often intimidated by the tools themselves. Faced with the incomprehensibly obscure console commands or IDEs with myriads of mysterious-looking buttons and dialog boxes, it can be hard to figure out how to even start writing simple beginner-level programs, especially if the language itself requires that even the simplest programs must include some obscure-looking code for initialization, declarations, imports, etc. Thankfully, these days you can probably find good tutorials on the web that should make these initial steps less scary.

As for the beginning language, that strongly depends on what your goals are. To become a good generalist, I would recommend learning C and assembly (for whatever architecture; x86 is probably not a good choice for beginners compared to e.g. MIPS), and also studying the inner workings of compilers (i.e. how parsers, optimizers, and code generators work, and also how various high-level language constructs map onto the concrete memory layout and machine code patterns). When faced with a novel language, this should allow you to immediately figure out what's the rationale behind its various features that would otherwise look arbitrary and strange. Also, in my experience, moving from C to almost any imperative language, including object-oriented languages, is a fairly easy transition. (I have very little experience with functional languages, but these also have to run on top of virtual machines written in imperative ones.)

Of course, if you have more specific goals in mind, like focusing on web programming or numerical calculations, a different and less generalist approach is probably advisable.