Have you ever wondered if programming would be something you could be good at or have fun with? Or even if it might be the start of a career change for you, if only you could find a way to learn it?
June 2015 might be the month to start coding. At least, that is waht I think after seing what online courses are starting or have started around the beginning of this month. There are four courses that I would like to recommend to any how has an interest in learning programming:
- Systematic Program Design – Part 1: The Core Method starting June 2 on EdX.org by Gregor Kiczales
- Programming for Everybody (Python) starting June 1 on Coursera.org by Charles Severance
- Introduction to Computer Science and Programming Using Python starting June 10 on EdX.org by Eric Grimson, John Guttag and Ana Bell
- An Introduction to Interactive Programming in Python (Part 1) started May 23 by
These four courses are aimed at beginning programmers but with different goals and methods, so it might be helpful to know a bit about them, to have a way to choose, which course or courses might be appropriate. This overview I try to give will be somewhat subjective, because I have used all four to teach myself programming.
Introduction to Computer Science and Programming Using Python
This course (formally known as MIT6.00.1x) is the first half of the course taught at MIT as a beginning course for Computer Science, so a little mathematical background is officially required, but not so much that someone who never did math since leaving school(me, for example) would not be able to follow. When I first used this course, a friend, who is a computer scientist, saw the videos I was watching and recognised them: she had used these videos as additional material to study while taking computer science at University. Some of them are probably the best videos out on the web to learn basic principles of computer science and I found them to be challenging in a fun and friendly way. You will have to install the programming language and some other tools on your computer, but there are detailed instructions on how to do so. This course is a lot of work, espacially if it is the first contact to programming, that you have, but you will learn a lot of useful skills. The course site lists these:
- A Notion of computation
- The Python programming language
- Some simple algorithms
- Testing and debugging
- An informal introduction to algorithmic complexity
- Data structures
As you see these are somewhat abstract learning outcomes and it will take some additional learning to put these ideas into practical application.
The course is taught by Eric Grimson, John Guttag and Ana Bell, very experienced teachers and computer scientists.
Programming for Everybody (Python)
Programming for Everybody is in some ways the opposite of the MIT course. It is not designed as a course for beginning Computer Scientists, but as a course for everybode who wants to learn how to program. There are no prerequisites to understand the material, it has a free online textbook and it is using practical examples to convey the concepts. All the programming can be done in the browser, this is not something I found very important until someone in a forum (not sure where exactly) complained about not being able to follow a course that required the installation of programs, becouse this person did not own a computer and so was doing all of the coursework on a libray computer. So if you have your own computer, installing software like a programming language will/should not be a problem, but for a course to be open to everybody, taking into account the people who are not so fortunate is a necessary thing. This is exactly where this course is great. Charles Severance (also known as Doctor Chuck is not as famous a computer scientist as Eric Grimson (MIT6.00.1x) for example, but he is well known for his interest in education and has a huge impact on the world of online learning through his research, publications and software development (that is how I first heard about him in my job). He also gives another course on coursera that is quite good, interesting and fun Internet History, Technology, and Security that is alway open and self paced. This course is designed to be welcoming, open and friendly.
An Introduction to Interactive Programming in Python (Part 1)
Interactive Programming is also a course for beginners using language Python like the first two. It is a short and intensive course, that requires no programming experience, but it cannot hurt to have at least a little. Like MIT6.00.1x it will require you to put in some amount of work and time, but if you are able to do it, it will be worth it. While this course has a much steeper learning curve then Programming for Everybody, it is shorter and has a great learning outcome if you succeed, as the course page says:
What is the coolest thing I’ll learn if I take this class?
You’ll be able to build your own games in Python.
And of course, building your own game is a very cool thing.
This course is also like Programming for Everybody very practical and can be done in a web browser.
The instructors Joe Warren, Scott Rixner, John Greiner and Stephen Wong are all teaching a Rice University and are also givin a second course An Introduction to Interactive Programming in Python (Part 2) that build upon the first course and starts in July. These courses are held more then once a year, so if you need some time after the first to let the experience sink and play with what you learned, you can take the second course later.
I like this shorter format, because between work and home life, short periods of time like 4 or 5 weeks are, at least to me, much more manageble to fit in.
Systematic Program Design – Part 1: The Core Method
Systematic Program Design is the course I like most out of these four, but it is in many ways very different to all of them.
The first uncommon thing about this course is the use of a programming language, that virtually nobody knows, a teaching language based on the DrRacket language environment. So while the other courses teach a commonly used programming language alongside with the craft of programming, this course focuses on the craft.
The second uncommong thing is that it builds upon its own concept of program development, as layed out in the book “How to Design Programs”:
“The first innovation is a set of explicit design guidelines. Existing curricula tend to provide vague and ill-defined suggestions, such as “design from top to bottom” or “make the program structural.” We have instead developed design guidelines that lead students from a problem statement to a computational solution in step-by-step fashion with well-defined intermediate products.”
How to Design Programs
And this is more important then it might look at first glance. It changes programming from something, that you have to have a special sense for, or where you need to have smart ideas on a regular basis, to a craft that can be learned exactly like any other craft. You don’t need to be a genius to learn woodworking, for example, only maybe if you want to become a world renowned master woodworking artisan. Programming is often pictured as being different, as needing a special kind of mind: mathematical, genuius and inspired, but the methodology in this course shows that it is not so.
When the course page says:
“The series is designed for beginners who have never programmed before. But many experienced programmers have taken these courses, and reported that it made them better programmers. So you can take these courses as a first course, or later in your career.”
The second part about experienced programmers is equally important as that it is designed for beginners. So while you will not learn a popular programming language in this course, you will really learn how to design programs.
This course is based on a university course that is much longer, but for the purpose of online teaching is broken into three parts:
- Systematic Program Design – Part 1: The Core Method | June 2, 2015
- Systematic Program Design – Part 2: Arbitrary Sized Data | September 2015
- Systematic Program Design – Part 3: Abstraction, Search and Graphs | October 2015
I have already said, that I like this shorter format better, so I welcome this change. This course has been taught on Coursera.org a few times, but in the original length, which lead to me starting this course, breaking of at some point because life got in the way and starting againg in the next offering. The smaller parts will be better for learners who are not students, I think.
The teacher Gregor Kiczales has been working on this course materials and teaching with them for a long time. He contributet to something called the Common Lisp Object System and wrote a book called The Art of the Metaobject Protocol, both are way above the understanding of a beginner, but great works.
It is impossible to say that one course is the best for everyone, because learners are quite different from one another and an approach that works great for some people will fail with others. So if you want to learn a thing like programming, you have to take a guess at what will work for you based on your experience with yourself and what you are interested in. And maybe you will find, that paced courses like the ones on Coursera.org and EdX.org are not your thing at all, that you learn better, entirely on your own pace. Of course there are resources for that, but that will be the content of another blogpost, this one is long enough.
If you try one the courses: Have fun!
(featured image by Kovah)