I am writing this after doing programming very badly for quite a period of time and learning mostly from publicly available course contents of university courses (mostly the USA).<p>Observations:<p>1. Universities pick the most popular language of the time and teach a course on intro to prog/compsci in a very unstructured way. Now the choice is Python.<p>2. The upper level courses are really good. The lower level courses are that bad.<p>Now, let me explain.<p>Whenever someone asks for a suggestion for how to learn programming or start with learning computer science, the commonest suggestion is to look for MIT's 6.0001 or Harvard's CS50 because they are popular.<p>Hear me out. When an apprentice goes to an expert car mechanic to learn the mechanic doesn't list the car parts and functions and then leave the apprentice on their own. Of course he lists parts and functions but along with that he solves real issues with cars and asks the apprentice to watch over and learn. While solving a problem the mechanic points out why a part is there and what its function is and why and how it malfunctions and how to narrow down to the exact part. Similar for a resident surgeon. The difference between teaching grammar versus how to speak and articulate your thoughts in a language.<p>A good essay on a similar note: <i>https://jsomers.net/i-should-have-loved-biology/</i><p>My complain is that intro to CS courses don't teach problem solving and hence computing (or programming) as a means to do so. The courses mentioned above start with a language and discusses a set of features each lecture and solves some minimally interesting problems in each class. Not the other way round. Like I have a problem, this is how I approach solving it. So I need these kind of functionalities to solve it and our language of choice gives us this. If the language doesn't have the feature we build it up from the basic constructs (a very good point to demonstrate we can build almost everything we need from basic constructs).<p>Similar things happen in Data Structures and Algorithms classes. Instead of teaching why this data structure came to being or how to design algorithms the courses focus more on listing them and analysing them. Where is the fun in that for a beginner?<p>Maybe SICP is an exception but it is really not an intro to programming book. It requires quite a bit of mathematical maturity. And also it is no longer used in any university.<p>I am not talking about the art component of programming. It is acquired through experience and practice only. Not in any other way. Once an art form becomes useful and maintainable it becomes another rule in the rule book.<p>Upper level courses are good because the students taking them are already supposed to know the lingo and it is just a way to communicate ideas for the students to play with. Just like teaching an able cycler how to do certain tricks.<p>P.S:<p>1. Now, I am not a computing expert or a education researcher. I just blurted out what I faced while learning. What I think would have been a better way to introduce such a wonderful field.<p>2. Another point: You want more people in your field (CS). Open up your core course contents and share them to the world. It's 2022. What is the benefit of closing the entry and keeping the upper gates opened? (I have seen upper level instructors are more generous in sharing course content).
I think part of what you are missing _is_ present in courses given live in classrooms. Unfortunately, the "funny" and background stories translate badly to a written word (they are more like non-fiction prose, and can thus be long and overshadow the rest of the material), and would make the course material hard to use for reference (eg going back to it to look something up).<p>There is always an opportunity to improve any course, but I think the main improvement needed is in the materials being given online.<p>Hopefully, universities will open up their live courses to the public, even if the public is excluded from grading and homework reviews.