Learning to Program: Where to Start

This article is specifically about programming for desktop applications, if you’re interested in web development instead check out this article.

Learning to program can often be difficult to get started with. There are lots of different resources available and you’re probably going to want to start with something fairly simple like Python, I know It’s the very stereotypical recommendation for beginners but there’s a good reason for that. It’s one of the easiest languages to both learn and use that also has real world practical use from making scripts for automating simple tasks to video games.

Python does have the issue of being a bit of a mess due to changes the developers made when creating Python 3 which is the latest iteration of the language. There were a number of issue in the language which they decided to finally fix but this resulted in a lot of older tutorials and  libraries becoming broken or incompatible and many of them still haven’t been updated.

Ruby is a programming language like Python in its design and how it works but without a lot of the issues that Python has right now. Ruby has a lot more of a focus on Object Oriented Programming however which some people like but others really hate it. Also larger Ruby projects can run pretty slow which won’t bother you too much at first but eventually you’re probably going to want to make something bigger and you’ll find that Ruby is running just a bit too slow for your liking.

Another language I’d recommend is C++. Now a lot of people like to say C++ is too tricky for beginners but I think people who say that are exaggerating. C++ is an expansive language which you can reasonably use to make almost any kind of program you want and make it pretty good on top of that, though I will concede it can be pretty intimidating at first and it is harder to learn than the other languages I’ve mentioned so far. Also C++ was my first language and is my personal favourite one as well so I’m probably more than a little biased towards it.  

Setup/Getting Started

When you’re getting started with a new language you may need to go and install it before continuing with anything else. Some languages will have already come with your operating system and so you won’t need to bother installing them like for example C++ which comes with every major OS. Installing a language usually just involves going onto its website, downloading it and then going through a fairly intuitive install process.

Next you’re probably going to want to get an IDE for your language. IDE stands for Integrated Development Environment and is an application that will allow you to easily write and compile source code for your language of choice. A lot of beginners think that IDE’s and compilers are the same thing but they are in reality very different. The compiler is what actually takes the source code and converts it into a program that your computer can run, while the IDE is in essence just a package of helpful tools like compilers and code editors all bundled together to make your life easier.

If you’re looking for something free and open source I’d recommend that you go and install Eclipse. Eclipse is software whose goal is to act as a sort of universal IDE for all languages, it achieves this by having a number of plugins which install IDE’s for most major programming languages, all of which are completely free and open source.

 

Another good free IDE is Code::Blocks which works with C, C++ and Fortran. It’s easy to use and get started with but it doesn’t get regular updates, its latest one was posted over a year ago, and a lot of people feel that some of its features are a bit lacking at times.

Jetbrains is a company that make different programming tools and IDE’s. Their IDE’s are extremely well made, come with a good amount of resources and are probably among the best I’ve used. The only problem is that they cost lots of money and I know you probably don’t want to be paying around $100 per year for an IDE which is perfectly understandable. Their Python IDE does have a free community version which I would highly recommend you use if you want to do Python but beyond that and their IDE for Java which also has a community edition the best you’re going to get is a 30 day free trial for the others.

Of course there is also Visual Studios 2017 which you can get a free version of. It’s a great IDE  for when you want to hop right into making games and GUI applications with C++ or C# as it comes with a huge amount of different tools to help in those areas. However I’d say stick with one of the smaller IDE’s for now as it is a pretty huge download and you won’t want to start out making GUI’s or games right off the bat so all of that extra stuff won’t do you much good when you’re just starting out.

Another good application to pick up is Programmers Notepad. This is only a source code editor so it can’t actually compile any programs but if you ever just need to quickly look at or edit some code it’s quite useful since it’s very lightweight and opens quickly. Also it supports lots of different languages ranging from Assembler to Visual Basic.

Online Tutorials and Resources

Once you’ve got everything set up you can get started. There are lots of different tutorials out there for pretty much any language you want to learn so if you start one tutorial and don’t like it you can easily just go and pick up another one without a problem.

A lot of languages like for example C++, Python or Ruby include in their online documentation a tutorial that’ll guide you through the basics of how to use the language. These tutorials are good because you can be reasonably certain they contain correct info since they’re written by the same guys who do the documentation. Also all of the languages resources are right there for you to access easily which is a plus. These documentation based tutorials can be pretty dry and hard to digest at times but I’d still say you should give them a look through.

Code Academy is a website with dozens of different free tutorials about programming. Most of these are specifically related to developing web applications but they do also have ones on Python, Ruby, and Java as well. These tutorials are short, to the point, and mostly involve you learning by making code yourself as opposed to them just explaining it to you which is always good. The website also has a system which gives you achievements for completing the different coding exercises on there which is something a lot of people enjoy having. The tutorials are pretty limited in scope though since they’re all only around 4-10 hours but they do provide a pretty solid foundation for you.

LearnCpp.com is a tutorial specifically for learning how to program C++. The author explains the basics of the language and object oriented programming in an easy to understand fashion and also includes helpful quizzes at the end of each section. The tutorial is also regularly updated with new information and the author tries to answer reader questions in the comments section. Overall I’d say that LearnCpp is one of the better tutorials out there for the language.

If you’re more interested in video tutorials than written ones I’d recommend you check out the ProgrammingKnowledge youtube channel. They make videos on a fairly wide variety of topics like the basics of Python or shell scripting for example. The videos are pretty informative though rarely the speaker will start to waffle on about nothing, especially in his earlier videos, which can be annoying. He’s also not a native english speaker so his speech is a bit accented but is usually perfectly understandable. It’s a great channel which also has a website as well where they post even more tutorials and projects, but be weary of some of their older stuff as it’s fairly low quality in terms of audio.

If while going through one of these tutorials you find yourself unsure or confused about a specific concept or how to do something you should try going on stackoverflow.com, a website primarily focused on helping people with questions about programming. You can either ask a question or look through ones which other people have asked to try and see if yours has already been answered. The user base is helpful but they also like to keep the website clean and well curated so try make sure your questions aren’t poorly worded and that it hasn’t already been solved.

Getting Started with Github

Github is a website where you upload code and share it with other people. It also has a bunch of additional features which allow you to easily work with a team on a programming project even if you’re not all in the same place. Github is actually just a repository for Git which is software that allows you to track changes made to files and coordinate work done to the files with other people.

Of course since you’re just starting out you’re probably not a part of a big team of programmers working on a project but Github is still useful. It contains the source code for thousands of people’s projects which you can study if you need to.

On Github they have some documentation that details what the site is for and how to get started using it. Also on Code Academy they have a tutorial about how to get started using Git, the software that Github uses. Again it may not sound like it’s that relevant to you right now but looking at other people’s code is an important part of learning how to program so I recommend you take the time and sign up for the site.

Book Recommendations

Books are actually one of the best sources of information on how to program. This may seem a little weird for a skill entirely based on using a computer but trust me you’ll find information on programming in books published in 1999 that you still couldn’t find anywhere on the internet today.

If you’re planning on getting into C++ you should definitely pick up the fourth and latest edition of “The C++ Programming Language”. This is a reference book written by the creator of C++ Bjarne Stroustrup which he updates every few years as the language evolves and changes. The book is huge and contains information about every facet of C++ that you’ll want to know about and you can trust that the information in it is valid since it’s literally written by the guy who made the language. One thing to be wary of with this book is that C++17 will be coming out sometime in 2017 and with that the next edition of the book will be published so you may want to wait until the fifth edition comes out and buy that instead.

“The Pragmatic Programmer” is a book all about how to write well made efficient code both alone and as a part of a team. This is not a book which is specific to any programming language and all of the advice it gives is applicable for any language that you may be working in. Even though the book was first published back in 1999 the tips it offers all still hold true today and of course not everything in there is going to be correct for every situation you’ll find yourself in while programming I will say that you’ll probably be a better programmer for having read it.

 

“Automate the Boring Stuff with Python” is a book that I’ve actually not got around to reading yet but many people recommend it as one of the best books on Python available. The book starts out with a short tutorial explaining how to use Python but it’s not really meant to be teaching you the basics of the language. Instead it goes on to show the reader how to easily automate a wide amount of different processes with Python and then how to use these automation scripts to make useful programs like a web scraper for example.

Tips and Tricks

I highly encourage you to take handwritten notes on any programming tutorials that you do, it will be helpful in remembering and you’ll be able to flip back to them later on as a reference. Be sure to actually hand write the notes as opposed to typing them as that helps cement it in your memory a lot better. Also try and make the notes extensive and not just quickly written down as again this will help you remember it better and make the notes a more useful reference for the future.

Try going through other people’s source code and fiddling around with it. This’ll help you gain a better understanding of how the language actually works in practice and learn new things about it If you find something in the code you don’t understand try looking it up as it may be something your tutorial won’t end up covering.

Make a lot of comments on your code. When I was first starting out I was dumb enough to think that commenting my code was a waste of time and boy did I regret that decision when I later had to go back and edit a project six months later with no comments in it. I had completely forgotten my thought process for how I set everything up and it was basically like looking at code written by a stranger that was just handed to me. Commenting is important not just for other people to be able to understand your code but for you too.

Don’t overwhelm yourself by trying to learn two languages at the same time. You really need to pick one and stick to it until you’ve at least got the basics down before moving on to the next one or else you’re just going to end up barely knowing them all.

Try not to go too long without programming, you will start to forget things you’ve learned if you don’t keep putting them into practice regularly.

Do lots of different projects regularly. Making actual applications is one of the best ways to learn and plus you’ll have fun doing it and eventually you’ll make something that you can actually use in a practical way which is always rewarding.

Don’t get into the habit of just looking up a problem and copy pasting the solution into your code without understanding it. It’s fine to use the internet if you’re stuck but do not implement a solution until you fully understand what it does and how it works and why it works. I cannot stress this enough, people who get into the habit of using code they don’t understand go on to be very bad programmers, you need to understand how all of your code actually functions if you want to learn.

What’s Next?

If you’re interested in making GUI applications on windows or making video games using the unity engine I would highly recommend you go and learn some C# eventually as it is a great language for these and easy to get into. C++ and Python are also good for desktop applications or games though I would recommend using C++ over Python for any larger projects personally. Python and Ruby can both be used to make useful scripts for a lot of different purposes and lastly if you hate yourself you can try moving on to learning Java.

Good Luck!

If you have any questions or comments email them to me at nick@crumbsofcode.com