How to get started in Programming.
First of all, I’m a beginner and thus you should take this with a grain of salt.
There are some lists floating around the web encompassing freely available courses to acquire the same knowledge you would get as if you were to attend a CS degree. Unfortunately, after doing a quick search I couldn’t find that one blog post where someone completed the courses in about a year and structured it so that the material keeps building on the previous knowledge.
There is this one. It is overwhelming and does not provide that learning structure mentioned above.
That is undoubtedly the best option and it requires time and dedication. That knowledge is what will make you a software engineer.
A good and fast way to get started is by understanding how a computer (machine) works. A high level programming language like Python or Java or Ruby or Haskell or Clojure and so forth, abstract the need to write code directly in a machine readable way. Machines only understand one thing, and that is binary. As time progressed, programming languages evolved into assembly language and so on until, but not limited to high level programming languages.
When a self taught person starts out, one usually picks a high level language and misses out on how it actually works, making it difficult to actually grasp. In my personal case, programming was quite complex, it is overwhelming and the resources are vast. Sure, you can grab a language like python and write some code, but it was a long process to start making sense on how a program actually works. Let me be clear, the complexity wasn’t how to write a program, but understanding what is happening behind the scenes.
# Program to extract url's Page being the webpage to extract from. # From udacity's intro to programming course. page =('<div id="top_bin"><div id="top_content" class="width960">' '<div class="udacity float-left"><a href="http://udacity.com">') def get_page(url): try: import urllib return urllib.urlopen(url).read() except: return '' def get_next_target(s): """ Extracts the first and the second url """ """ finding the quotes for this use case """ start_link = s.find('<a href=') if start_link == -1: return None, 0 else: start_quote = s.find('"', start_link) end_quote = s.find('"', start_quote + 1) url = s[start_quote + 1 :end_quote] return url, end_quote def print_all_links(page): while True: page_url, end_pos = get_next_target(page) if page_url: print page_url page = page[end_pos: ] else: break print_all_links(get_page('http://xkcd.com/352'))
Sure, you could probably read the code and have an idea what it does, but that is Python. How it works and how to get there is a different story.
Once you have a better understanding of what is happening behind the scenes, how a computer or machine manipulates data, it will make coding a lot easier.
A good course to get all of that is The computing Technology inside your Smartphone. However, most of the online courses implement math, some more than others. If your background in algebra is somewhat lacking, do take a refresher. Not only will help with any computer course, there is a wide range of benefits learning algebra, trigonometry, calculus, discrete mathematics and physics (physics is needed if you are interested in game development). Learning these subjects not only helps you with programming, but changes the way you think, a skill that will serve you for the rest of your life. But you do not need to know any math to be a programmer. The computing Technology inside your Smartphone course does not require algebra, just to be clear.
Before coming across that course, which gives a good understanding how a machine works, I took Introduction to Linux which helps understanding file systems. A file system is merely how a computer is organized. The course is designed for people with zero knowledge - and I mean zero. But don’t skip anything, even if you already know it. Sometimes there are hidden gems between content we already know.
After that, learn a Version Control System (VCS). This can be git, mercurial, bazaar and a few others you can choose from. If you are a sole developer, git may not be the best option, but it is one of the most widely used. A good course on git can be found here. Not only will you learn how to use a VCS, but it helps building upon the introduction to linux course.
Once you have done that, to help further understand this whole world of programming, take Intro to HTML and CSS. Unfortunately, the course is not an introductory course into HTML and CSS as one would believe. It does teach a lot of useful concepts, but it does not teach HTML and CSS and you will have a hard time. To counteract that limitation, read the first seven chapters of this online tutorial.
Once you have those under your belt, then I would recommend Programming for Everybody(Python). It is undoubtedly one of the best courses for non-programmers. The professor for the class wrote a book for that class which is freely available, make sure to read it from top to bottom, left to right and tuck it under your pillow while you sleep to get the good old osmosis working.
Then you can take Intro to computer Science which will seem a bit simplistic after having taken Programming for Everybody, but it does offer a different perspective and there are hidden gems in the content, which will help cementing the previous knowledge.
There’s is a lot more, but since I haven taken those courses yet, I can’t recommend them yet. However, there is a three part course which I can’t recommend enough.
Systematic Program Design - Part 1: The core method
Systematic Program Design - Part 2: Arbitrary sized data
Systematic Program Design - Part 3: Abstraction, search and graphs
The first part starts on June 2. My recommendation, take those three courses and then follow along with the ones mentioned earlier.
Lastly, one of the best ways to learn is reading books. Yes, entire books! You could go through this book which is the interactive version. You could do a search to find a freely available pdf. revised / updated version. I haven’t read the book yet, but it is one that is usually recommended for non-programmers.
Hope this helps.