For the past few months I have been teaching refugees from Syria how to program at the Redi school here in Berlin. The school has attracted a lot of attention since it began, with even Mark Zuckerberg paying a visit earlier in the year.
This experience, and others in my past, have caused me to think a lot about educating beginners, and the most effective ways to do so. At Redi we decided on Ruby (and Rails), but quickly realized that whilst it’s levels of abstraction and helpers appeal to experienced developers, they confuse beginners.
It’s been interesting to watch the recent rise in popularity of functional languages, which have reversed the rise of ‘do what you want’ languages with languages that force you to be more careful and considered. This of course brings many performance and stability advantages, but are still not very suitable for beginners.
I am working on a more in-depth article on the subject and would love to hear your thoughts on what languages are good for beginners to learn and why. I look forward to your responses!
When I learnt BASIC I thought how stupid it was as a language - a huge backward step into chaos. Of course I already knew several other languages by the time BASIC was first invented. It might be different now but back then BASIC created the second worst convoluted code messes that I have ever seen (a close second to CoBOL alter goto statements).
My first language which I taught myself before ever gaining access to a computer to try it out was ForTran. The first language that I was actually taught in a class was Pascal and after learning that I could see all the flaws in BASIC when it was introduced.
It’s a course in design, and helps beginners to program within the context of computation design.
I suggest, what most beginners never get from the language approach to programming is an appreciation for computation design. I have worked with many colleagues who still suffer from a lack of good design training in their formative years as programmers.
Dare to take a deeper look at this course - it may surprise you
This has been one of my concerns with modern teaching techniques (and a core point in what I am writing) is that they are very focussed on practical ‘take homes’ and that theory gets lost. Understanding principles and design patterns is super important or coders will keep re-inventing the wheel.
I started to learn Python, having no real knowledge of any other language. I didn’t get very far before I got overtaken by life, but I hope to get back to it at some stage. I found it quite easy to grasp as a beginner; it remains to be seen how easy I’ll find the more advanced stuff.
I think Ruby is a great language for beginners to learn. There’s a great book called Learn to Program by Chris Pine that walks you through from the very beginning. It’s also available for free online: https://pine.fm/LearnToProgram/
Ruby on Rails has a lot of ‘magic’ going on in the background that can be confusing for beginners. I’d recommend using Sinatra for building web apps instead. You can start with really simple applications and it helps you understand the concept of HTTP a lot more.
I’ve created a few resources that are on SitePoint Premium that you might find useful for this.
Hope that helps. Good luck, it sounds like a great project!
For absolute beginner, I would start with teaching them constructs of programming like data structures, loops, etc… There is a great site called code.org that helps beginners learn programming and it is fun to do.
problem solving - once you know that half of programming the actual syntax of any programming language is relatively trivial. Plus if they are not good at problem solving then they will never be good programmers regardless of what languages they learn.
Something i found hard when at school was learning ‘principles’ without any context. Maths in particular was taught in a ‘you need to learn this because you need to learn this’ instead of ‘you need to learn this as you can apply it to X and Y in the real world’. Using Pythagoras to work out the length of the hypotenuse for example. without any context it is mostly pointless and i could use a ruler to find out how long it is. But when you realise that is can be used to work out the length of beam required for building a roof at a specific angle it gives it a use and a meaning that my brain can latch on to.
Some people won’t need this but i did. Although i do find logic much easier to do than maths. But again teaching the principles with a real world example for me would be important.