Coding Resources for Beginners

This post  has nothing to do with Germany or life as an ex-pat, and instead is about a sort of hobby/interest I have developed recently. There will likely be more of these in the future as I (hopefully) advance in my skills and have more insight to share.

Over the last several months I have slowly begun trying to learn how to program (coming from a completely non-coding background). To accomplish this, I have primarily relied upon online resources, and as a result, I've come a cross a ton of different websites and online courses geared toward helping absolute beginners learn these skills. When I share this personal project of mine with others, they are often interested in learning these skills for themselves and ask if I can recommend a starting point. So, I thought it might be helpful for me to create a list of online resources I have found in hopes other people find this helpful as well. 

This is not meant to be any sort of authoritative list. It's simply listing what I personally have found most helpful or interesting given the way I have approached this topic. I am focusing on learning Python right now, so most of my resources are related to that. I'm sure I will expand this list as I move onto other languages. 

Another important note: everyone's learning styles are different, and just because one website's style doesn't click with you doesn't mean another website won't. So if you visit one of these pages and find it does absolutely nothing for you, don't despair -- try somewhere else and see if that makes more sense to you. Your brain may process the challenge of programming differently than other people's, but that doesn't mean you can't learn it. It just means you need to find the right resource for you. And don't ever use the excuse of not being good at math or science as a reason why you just can't learn these things. The crux of programming is understanding logic, not math, and even liberal arts majors -- like myself!! -- can handle that :) 

Final disclaimer, I haven't used all of these sites myself. I'll indicate within the post which ones I can actually personally vouch for.  Also, all of these resources are free unless otherwise noted. 

All-Purpose Resources:

If you're not sure what you want to learn, or you just like the idea of getting exposed to a little bit of everything, these are some great first places to start. If you're looking to really get the fundamentals of programming, however, I would skip down to the next section of Python-specific resrouces.

CodeAcademy --

Best for: Getting your hands dirty right away

This is one of the most popular websites today for learning how to code. They offer an exhaustive list of tutorials for major programming languages like Java, JavaScript Python, and Ruby, as well as for HTML and CSS. They also have project-based modules to teach you how to make an interactive website, for example.

CodeAcademy is great for just getting your hands dirty and familiarizing yourself with syntax and how to make things happen. I think it is less effective at helping you understand what it actually is that you're doing -- i.e., why typing this magic combination of letters, numbers, and punctuation marks gets you this result, and why some slightly different combination does not. I think it is a great starting point, but I personally think it needs to be coupled with other resources that give you a better foundation (i.e., the Programming for Everybody Course I mention below). 


Free Code Camp --

Best for: People interested in web development; project-focused learning

Free Code Camp is a very interesting concept to me.  The aim of it is to teach learners the skills they need to be "Full Stack Web Developers" (putting that in quotations because I realize for beginners these words have basically no meaning) through an exhaustive series of interactive lessons. The goal behind it, which I think is quite cool, is that after completing some 800 hours of lessons and projects using HTML, CSS, JavaScript, AngularJS and more, you would then have a chance to work with an actual non-profit organization to help design and execute a p project that helps them improve their services. The course presumes no prior experience with any of these languages or concepts and will take you through everything step-by-step, slowly building up your ability to solve coding problems independently.

I personally have worked a fair amount with Free Code Camp, though my involvement in it recently has fallen off due to a lack of time. I am hoping to get started with it again soon, however. One particularly positive aspect of Free Code Camp is their emphasis on building a community of learners. There are chatrooms where learners can turn to when they get stuck and find people willing to help them troubleshoot and debug. It's still a growing community, but I think it shows a lot of potential. 


Reddit's /r/LearnProgramming Subreddit --

Best for: Seeing what resources are out there and what people find most helpful

Reddit's LearnProgramming community can be a valuable place to turn for learners, though I think it is more useful as a waypoint to other online resources for learners than as a resource for learners in and of itself. People are constantly recommending websites, online courses (e.g., MOOCs) and other sources of information, as well as providing feedback on their experiences with these resources. It's a great way to find out both what the latest developments are and what the most-recommended sites are. 

Additionally, sometimes creators behind these websites and courses will promote their own pages there and offer discounts or free access to paid content to users of the subreddit -- for example, I cam currently taking the "Automate the Boring Stuff with Python" Udemy class for free thanks to a coupon code posted in /r/LearnProgramming by the creator of the course. It can sometimes be difficult to find content relevant to you and your specific interests, but it's definitely a community worth keeping an eye on, especially if you're already a regular Reddit user. 

Python-Specific Resources

One of the first questions beginners will ask is, what language should I learn? You'll get many different answers depending whom you ask, but in general, Python is seen by many as a great starting point, since the syntax (i.e., how line of code are written and formatted) is not very difficult to understand, and there is huge range of possible applications for programming in Python. Python is what I am currently working on, so that means my resources for other languages are quite limited right now. 

Programming for Everybody (Getting Started with Python) -- and

Best for: Learning the very basics of programming, specifically Python

This was basically my gateway into programming. I recommend it strongly for all absolute beginners, because the material is very specifically presented for an audience with no prior knowledge of programming and really tries to help you understand what it means to program and write in the Python language. 

Since I first took the course, they changed the structure and broke it into 4 different modules as part of an overall specialization. It's a bit confusing, but you can take all four segments for free (the specialization page makes it seem you have to pay to take all four). Additionally, if you go to the PythonLearn website, there are YouTube versions of all the lessons, and you can also access the textbook for free on the website. The only advantage of the Coursera course is the access to weekly assignments to test your learning and the forums, where you can ask questions when you get stuck. There is also the option of getting a certificate for your Coursera participation if that is something appealing to you. 


Learn Python the Hard Way --

Best for: Learning the basics of Python thoroughly and systematically

This is an online textbook that walks you through getting started with Python. It offers clear walkthroughs of basic programming concepts, but also isn't afraid to challenge learners to find some things out for themselves or do a bit of independent research. This isn't meant to intimidate you, however -- learning how to seek out answers to your programming problems is a critical part of learning to program. The online textbook is available for free, through there is an option to purchase the book and gain access to videos and additional support material. 

Several people recommended this resource to me when I expressed a desire to learn Python. I didn't end up making use of it because I was satisfied with the foundation the Coursera class gave me, but I think it is still a valuable resource and I will probably go through it sometime int he future to see if it fills in any gaps in my knowledge. 


Automate the Boring Stuff with Python --

Best for: Learning the basics of Python and how to immediately apply that to everyday tasks

This is an online textbook that is available for free; and there is a corresponding Udemy course with video tutorials that is not free (though I found a discount code offered within /r/LearnProgramming that allowed me to enroll in the class for free). The title pretty much says it all -- this book can help you learn how to write programs in Python that can automate tedious tasks for you. Think tasks like going through hundreds of spreadsheet lines to remove one row, for example. 

I am currently in the middle of the Udemy course so I can't speak to the content too much right now, but the concept is incredibly useful, since many people don't realize that it's possible to write programs that can do in 30 seconds what would have taken you hours to do by hand. 


PythonTutor --

Best for: Understanding how computers actually process and interpret lines of code

This site is not a stand-alone resource for learning Python, but it does something that I think is incredibly useful: it offers a visualization of how a computer actually executes a program. You can paste a few (or many) lines of code into their visualizer, and it will show you step-by-step how the computer reads the code -- i.e., the order it looks at the lines, and what information it actually is understanding from these lines. This can be exceptionally helpful for troubleshooting if you're not sure why your program isn't working the way you expected it to, and it is also helpful just for understanding the flow of a program, since you will quickly see it's not always the case that a computer acts on lines of code solely in the order they were written.

R-Specific Resources

R is a programming language used for handling statistical analysis and data visualization. I personally do not yet have experience with R, but I am interested to learn, and I know many of my peers are as well since it is so commonly used in research and data analysis. As I haven't used either of these resources myself, I can't speak to their quality, but I plan on exploring them soon. There does seem to be a dearth of resources targeted specifically toward absolute beginners, so right now these two are the best places to turn, as far as I can tell. 

Swirl --

The tagline of Swirl states that it "teaches you R programming and data science interactively, at your own pace, and right in the R console!" Meaning, it aims to teach you how to use R using the language itself. The website walks you through everything you need to know to install and start the program, and once you have it loaded you can choose from one of their many course offerings. 


Try R (Codeschool) --

This seems to be a tutorial in the style of CodeAcademy, i.e., more learning by doing than actually learning about the fundamentals of the language in a systematic way. Since I haven't gone through the modules I am not sure how helpful it is, but I have seen it positively recommended in a few places.