5 ms·
This is one of a very very small number of programming-related articles I've ever been glad to read. Programming should be taught as an approach to problem-solv
by thaumaturgy 15y ago
This is one of a very very small number of programming-related articles I've ever been glad to read. Programming should be taught as an approach to problem-solving and structured logical thinking, not as an approach to a particular language.
If you can understand the core concepts of programming, the individual languages begin to matter a lot less. Python is great. Java is great. C++ is great. But they are just tools for solving classes of problems; if you don't understand how to, as the author says by way of example, deconstruct problems and understand the advantages and disadvantages of various solutions, then the software you write will never be as efficient or as elegant as it could be.
There is a compelling argument that, in the age of nearly limitless computing resources, it doesn't matter anyway. You will in all likelihood be a glue programmer: you'll rely on APIs and libraries, most of which have been written by someone else, and you will simply string them together by applying the functions that most obviously address whatever problem you're trying to solve. Who cares, really, if you're using Quicksort or heap sort, you're just going to call sort() on your array (or map, or key-value store, or whatever), and define a callback function that will evaluate any two given values in the array to be sorted, and that's it. Who cares if one requires a little more memory than the other, or a little more time to execute?
Just knock it out, and then get back to arguing online about the One True Language, or the One True Framework.
But, I've been programming for about 25 years now, in dozens of languages, and I can't help but feel that this language-specific approach to programming is producing anemic programmers.
Programming can be a craft; in can be done well, and elegantly. I can hack together a decent, reasonably strong wooden workbench for my shop, but it doesn't possess the same craftsmanship as a dedicated wood worker. It does the job, but it is ugly and uninspiring, and nobody admires it.
So, I guess I think that programming is similar, and moving from SICP to teaching Python or Java is just another representative sample of a disappointing sea change away from what I've come to know and love about programming.
- d0m 15y agoIt's not "what the school wants to teach" but more "what the student needs to know at the end of the semester". I love SICP -- for me it was a revelation which opened a new world, and is still my favorite book -- but not everyone is like that. 90% of my colleague in my university would hate that book.. (As they hated the dragon book and anything less practical). So, as they say, "Hate the game, not the gamers". What a school teaches is a reflexion of what is needed in the society and sadly what the students want. I do hope however that great professors will still strongly suggest the book to students who want to go one step deeper. p.s. A new version of SICP could include a couple of pages on python; i.e. make a list comprehension, yielding, etc. :)
- derleth 15y agoIf you make a degree a prerequisite to getting a specific job, or even a specific job at a specific (higher) pay scale, you always end up with people treating traditional four-year programs like trade schools. Especially if you also make people think of trade schools as where you go if you only barely passed high school, or if you failed high school and wound up with a GED. (And we could recurse and talk about how one-size-fits-all high schools aren't the only option, either, but we won't.) Now you have four-year programs becoming the only option. This leads to a mix of philosophies, and by 'mix of philosophies' I mean 'raucous all-out war between two different groups punctuated by useless tracts calling for peace like this one.' The two different groups are the people who want to understand the theory at a respectable university level and the people who are on a fetch quest to get the paper to get the best ending (uh, job). Neither group is wrong, but one group would be much better served by a non-stigmatized trade school system. This fight invariably leads to the airing of two philosophies: One, the student-as-customer philosophy, says that as long as tuition costs money the schools damned well better dance to the students' tune chop chop. They're more sympathetic than that once you realize how eager companies are to shitcan anyone who doesn't have enough letters after their name, which might actually be the real problem. The other, the university-as-noble-institution philosophy, says that universities are places apart from the world where real research can be done and grants can be funded and, incidentally, there are these undergrad things running around that the exterminators refuse to extirpate so we might as well rope some researchers into making them the next generation of people educated enough to further our culture and, incidentally, keep our technical society from collapsing. In this model, the students don't get to influence pedagogy and coursework and so on because they, as per hypothesis, aren't educated enough to know what they want: If they were they could teach themselves and save everyone a lot of money. Like I said, neither philosophy is wrong. It's just that one of them should be in a completely different set of institutions.
- jgracin 15y agoI wholeheartedly agree. The schooling system was set up more than 60 years ago. Any social system instituted by man is time limited. With time, people (because we're intelligent) try to maximize the benefits while minimizing the effort, and this compromises the system. Sixty years ago, finishing high-school was a major accomplishment, opening lots of opportunities. One went to college because he/she wanted to learn stuff which will be useful on his/her voyage to the frontiers of human knowledge. Intellectual curiosity is the main motivating factor for this kind of people. College education today assumes the same role that high-school education had 60 years ago, and it's NOT because there's more stuff that has to be learned. (I think 12 years of education is more than enough to keep the world spinning. We're just doing it wrong, but that's another story. Paul Lockheart's Mathematician's Lament is a great read on this subject, feel lucky on Google). The question is, what will provide today what colleges provided 60 years ago? I don't mean to sound catastrophic. Top-class research is being done today as well. It's just that we're making things unnecessarily hard for everybody.
- jimbokun 15y ago"You will in all likelihood be a glue programmer: you'll rely on APIs and libraries, most of which have been written by someone else, and you will simply string them together by applying the functions that most obviously address whatever problem you're trying to solve." If you come out of a curriculum where all you learn is how to string together APIs and libraries, it's pretty much guaranteed you will end up with a job doing that, because that's all you will be qualified for. If you want a job where you are pushing the envelope of what's possible with computers, you're going to be much having taken SICP.
- Goladus 15y ago> If you come out of a curriculum where all you learn is how to string together APIs and libraries, it's pretty much guaranteed you will end up with a job doing that, because that's all you will be qualified for. If all you learn is how to string together APIs and libraries, then it probably wasn't a "curriculum" at all. But emphasizing certain technology domains other than programming and computer science does have its advantages, especially for program meant for engineers more than computer scientists. It's hard to argue against the merits of SICP and I'm not going to try, but if your goal is to produce engineers that push the envelope of next generation technology beyond just computers (eg robotics, optics, advanced human-computer interfaces, gene sequencers, advanced materials, etc.) then "stringing libraries and APIs" together might be more exciting than one might assume.
- saraid216 15y ago> if your goal is to produce engineers that push the envelope of next generation technology beyond just computers Then computer science isn't where you belong. There is a solid argument for teaching everyone the basics of programming, and this is it. I can hammer a nail into a wall, too, but that doesn't make me a carpenter.
- Goladus 15y agoIf computer science is all you want to study, then an engineering school might not be the best place for you. You're probably better off at a small liberal arts school. At Schools like MIT and Berkeley, computer science is an optional specialization in the EECS program. If you look at the MIT course maps for the three main degree paths (EE, EE+CS, and CS) you'll see that 6.01 and 6.02, the replacements for 6.001 (the SICP course) are foundational for all 3 specializations. http://www.eecs.mit.edu/ug/ug_6-1.html http://www.eecs.mit.edu/ug/ug_6-1.html http://www.eecs.mit.edu/ug/ug_6-2.html http://www.eecs.mit.edu/ug/ug_6-2.html http://www.eecs.mit.edu/ug/ug_6-3.html http://www.eecs.mit.edu/ug/ug_6-3.html