What do I need to start programming?
This is one question that sounds simple on the surface, but it’s one that brings a multitude of different answers and probably more questions as you dig deeper. Really, the only thing that you need to start programming today is a strong desire to learn about computers and how they tick. Of course a computer is helpful, but you no longer need a high-powered workstation to with learning most computer languages these days.
An aside: The biggest piece of advice that I can give is to make sure that you are getting into the field because you genuinely love working with computers and technology. Don’t get into the field only because you want to make money. While it is definitely possible to make money in the field, having that as your primary motivation will probably bring more misery than anything else.
What Programming Language should I Learn?
In the long-term, I’d tell you that learning the techniques and theory behind software development are more important than picking a specific language to stick with for your entire career. If you have a firm grasp on those base techniques, then it should be relatively easy to learn a new language as you gain that experience.
In the short-term, you’ll have to pick one or more languages to get started with. There are a lot of “robust discussions” about which languages are best to start with, but I will give my opinions here:
C++ – I started with this language, and I think that it’s a great language to learn about functions, pointers, classes, and other object-oriented language techniques. Be prepared for a steeper learning curve than a language like Python, but C++ is lean enough to run high performance applications (games for one).
C#/Java – These languages build on the concepts of C/C++, but also provide very high level libraries for performing functions like string manipulation, cryptography, network access, and many more. With Microsoft recently open-sourcing the .NET platform and creating a free community version of Visual Studio, I personally like C# over Java. However, if you’d really like to get into Android application development, then Java may be a better choice. Google also makes heavy use of Java for their server apps.
Python – I’d be doing you a disservice if I didn’t mention Python as good starter language. Often used for scripting, the language can teach you many of the concepts mentioned above. The syntax is not a C-style syntax, so you will need to learn those differences if moving to another language in the future (brackets vs indentation for one).
OK, What Software do I Need?
No, the answer really isn’t that simple, and it depends on which language you are going for. At the very least, you’ll want a good text editor like Notepad++, Komodo Edit, or Sublime to edit your code files. If you are a Linux command-line guru, or don’t mind a steeper learning curve, then you can give vi or Emacs a try as well. As you move to bigger projects, you may find that you want a full environment, called an integrated development environment (IDE), to help manage your projects.
Now that I have the tools I need, where do I start learning?
There are many free resources available online that just weren’t around when I started learning software development (get off my lawn?). One incredible resource that has sprung up over the last few years is Code.org. They have a wide variety of tutorials that covers all age ranges. They also have resources that help guide you to the many other classes that are out there. I have listed a few other resources below that may help on your quest:
CodeAcademy – Their free interactive tutorials provide a good way to learn web programming basics. The best part is that everything is browser contained, so you won’t have to run out and install a text editor or IDE right away.
Free University Podcasts – If you’d like to see how a university approaches Computer Science classes, check out these podcasts from Harvard, MIT, and Stanford. This isn’t an exhaustive list, but should be a good place to get started.
Stack Overflow – Once you get started with software development, you will undoubtedly have questions. This is still my go-to site for all questions, basic and advanced.
Go forth and program! Feel free to ask any questions below, I’ll be glad to answer them.