Good Resources For Beginner Programmers

There's so much info out there. I once purchased a book on Java programming but found myself using online sources when I got hung up in the book--discovered there are several online tutorials. I could have saved myself some money had I just searched Google.
 
Try to borrow a copy of Knuth 'The Art of Programming'. I have Vol 1 and it is the best book I ever bought.
 
Try to borrow a copy of Knuth 'The Art of Programming'. I have Vol 1 and it is the best book I ever bought.

The Art of Programming Vol 1 by Donald E Knuth, which I found out covers topics such as algorithms and some other computer programming and mathematical concepts, after a little research, looks like something I should look into reading when I have mastered the basics of a computer programming.
 
There's so much info out there. I once purchased a book on Java programming but found myself using online sources when I got hung up in the book--discovered there are several online tutorials. I could have saved myself some money had I just searched Google.

Buying a college level books on programming can be very expensive but they most likely delve deeper into programming topics than a free online tutorial does.
 
I would recommend learning Java or Python as a first computer language because both languages are high level languages and are also object oriented languages, which I think are the easiest types of computer languages to learn.
 
God help us all. People ask whether the world will end with fire or ice. I say with Javascript.

I have not worked much with JavaScript yet but judging by your post it must be either very difficult or very problematic. I believe that jQuery is supposed to make things easier or less problematic when it comes to coding in JavaScript.
 
Some good computer languages for beginner programmers to check out are C , C++, C#, Java, Python, Ruby, JavaScript, and Swift.
 
It is best to start out coding with free resources like websites, online articles, or online videos because good programming books can be expensive. You also want to make sure you use resources for beginners if you are starting out because certain resources can be geared towards intermediate and advanced learners.
 
I don't know if anyone is actually reading this thread for advice on programming, but here's my take:

There are many programming languages that may be suitable for beginners, depending on your interests. For example, C requires a lot of attention to detail but could work as a first programming language if you have a certain kind of nuts-and-bolts mentality (basically, you could find C very interesting or tedious and boring, depending on what you find interesting). Or there may be a programming language that is obviously suitable for some specific kind of programming (e.g. Javascript if you're especially interested in running code in web browsers). Otherwise picking one of the high-level language like Python is a good place to start.

There are less mainstream languages -- like Lisp, Smalltalk, and the ML/Haskell family of languages -- that can expose you to very different ways to think about programming and could also be good choices as a first languages. Some of the ones I've mentioned have tutorials and even entire books that are freely available online:
  • Lisp is an extremely powerful dynamic language with powerful metaprogramming capabilities (capabilities for programmatically generating and manipulating code). You can get a good general introduction to Lisp by reading the book Practical Common Lisp, which the author has made freely available online on his website: http://gigamonkeys.com/book/.
  • If you're more theoretically/mathematically oriented, you might like Structure and Interpretation of Computer Programs, which uses Scheme (a variant of Lisp intended for teaching and research). Someone created a PDF version, which you can find at https://github.com/sarabander/sicp-pdf.
  • Smalltalk is a dynamic, pure object-oriented programming language that emphasises an interactive, image-based approach to programming. (I.e., the normal way to develop in Smalltalk is to start an interactive, usually graphical Smalltalk system like Squeak or Pharo, and then use its tools to inspect, modify, or create classes or run test code.) One introduction I've found is Pharo by example, available here: http://files.pharo.org/books/updated-pharo-by-example/.
  • Haskell is a statically-typed, compiled language that emphasises a functional programming style (you express a program as the composition of functions that deterministically map arguments to return values, with no side effects) and a type-inference system (the compiler figures out many of the datatypes of your program automatically). I'm not sure this is the language most people would find most interesting to start with, but there's a book on it here: http://learnyouahaskell.com/.

By contrast I don't recommend the C++/Java/C# family of languages, especially for beginners, and I recommend avoiding them if possible (admittedly, you may be forced to use them in certain circumstances, e.g. you may need to use Java if you want to write some kinds of Android app).

Here's a talk by Rob Pike where he explains the problems with these languages, especially for casual/personal programming, among his reasons for co-developing the Go language:
(Summary: basically they're tedious, repetitive, verbose, and boring.)

You may also want to spend some time browsing Yossi Kreinin's "C++ Frequently Questioned Answers" (http://yosefk.com/c fqa/index.html) before deciding you want to invest a portion of your life learning the intricacies and quirks of C++.
 
Last edited:
By contrast I don't recommend the C++/Java/C# family of languages, especially for beginners, and I recommend avoiding them if possible (admittedly, you may be forced to use them in certain circumstances, e.g. you may need to use Java if you want to write some kinds of Android app).

Why would you not recommend Java, C#, or C++ as a good beginner language?
 
Why would you not recommend Java, C#, or C++ as a good beginner language?

I don't think they're very good languages in general -- not just specifically for beginners. I think this is nicely summarised by the talk by Rob Pike I linked to. Basically, they're not very flexible or fun to use compared with the choice of programming languages available today, or even the programming languages that were available back in the 1980s and 1990s for that matter. (For example, two of the languages I mentioned in my previous post, Lisp and Smalltalk, are both older than C++. Smalltalk originated in the 1970s as an experiment in graphical, interactive, object-oriented development. The Lisp family of languages has a history going back to the second half of the 1950s, where it was first invented as an alternative notation and model of computation than the Turing machine.)

The issue is not (mainly) that I think these languages are too complicated or difficult for beginners*. If you're a beginner then you could probably start to learn to program in Java or C#, or maybe even C++ if you're dedicated enough, even with no prior programming experience. I just think you wouldn't be seeing the best examples of what a good programming language can do for you.

These languages (especially Java) also heavily emphasise (a certain style) of object-oriented programming very early. Object-oriented programming is useful for some things, but not for everything, and you could end up with a warped and imbalanced perspective on programming if you take these languages to represent the norm. I think it is also important to see how object-oriented programming is handled (often much more flexibly) in other languages.

There's a page by Peter Norvig where he gives good advice for people who want to learn programming at http://norvig.com/21-days.html. One good piece of advice (under "Language Choice") is to pick a language with an interactive mode, which isn't really supported with Java/C#/C++:
Peter Norvig said:
Which way would you rather learn to play the piano: the normal, interactive way, in which you hear each note as soon as you hit a key, or "batch" mode, in which you only hear the notes after you finish a whole song? Clearly, interactive mode makes learning easier for the piano, and also for programming. Insist on a language with an interactive mode and use it.

----------

*C++ is notoriously complicated and difficult to use (see the FQA I linked to for a good critique, or these interview critiques), but you won't see the worst of it until you start to learn the more advanced C++ features and try to use multiple features together in the same code: they have a tendency to not interact well and tread on each other's toes. So the complexity of C++ is actually a bigger problem for people who are not beginners: the more you know about C++ and the more you want to use its features together to express abstract and complex ideas, the more of a headache it becomes to make it all work safely and correctly.
 
Last edited:
Back
Top