Hacker News new | ask | show | jobs
by d0m 5433 days ago
It'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. :)

4 comments

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?

I'd argue that such a programmer does not need a degree in computer science to do this work. How do I know? Because I don't have a degree in CS, and that's mostly what I do. And if I can sit down and learn, say, C# for a job, certainly someone that has come out of a good CS program can, too. A CS degree shouldn't be about learning a single language (or three).

I agree that a programmer doesn't need a degree in CS, but to have a CS degree doesn't mean you're a programmer. A topic earlier showed that 26 of the ACM Turing Award winners had degrees in mathematics, and a lot of the theoretical CS is math anyways.

If a student in college wants to acquire a CS degree, they should be exposed to fundamental ideas in CS, not just what they'll need to be a professional programmer.

A topic earlier showed that 26 of the ACM Turing Award winners had degrees in mathematics

The field of computer science didn't exist when they went to college. They invented it, hence the awards.

This is really the root of the problem. Computer science/programming is immature as a profession. There are not clear, broadly accepted rules for what roles exist and what requirements there are for one to fill the role.

Looking at building houses (just the construction side, not the mechanical systems), we have: - Architect - Structural Engineer - Architectural Technologist - Carpenter plus construction employees not officially certified. Each of these has a specific test, both written and practical (apprenticeship), and specific roles in the building process.

In software, we have no standardized tests, so companies substitute "BSCS" for "Software Engineer" in the requirements. And there is only ever one role officially defined; there is no separate "Software Programmer". Internally every companies has "Software Engineer I", "Software Engineer II", etc however this is rarely exposed in job postings and requirements and is never standard between companies.

The software industry could solve all this hand-wringing by creating a set of standardized roles, testing to create Certificates of Qualification for each, and getting HR departments to require these. And it would be possible, even with an established industry. Canada has added several new Professionals over the last decade, working with the existing industry to define the job, requirements, and build a phase-in plan that allowed the industry to continue operating.

I am horrified by the idea of a body moving at government-speed dictating the norms I have to follow when my competitors move at internet-speed.

Disclaimer: I am a professional engineer trained to design and build computers rather than program them.

Wouldn't your competitors have to follow the same norms?
> a lot of the theoretical CS is math anyways

It's a specific field within mathematics, with its own emphases and body of knowledge, much like how podiatry is distinct from general human physiology.

Really, though, all mathematicians specialize once they reach a certain level, for the same reasons all physicians specialize. It's just that you only happen to know the name of one of those specialties.

> I do hope however that great professors will still strongly suggest [SICP] to students who want to go one step deeper.

Surely anyone studying comp sci at MIT should want to go one step deeper? If not, WTF are they doing there?

So basically you and 90% of your colleagues hate computer science. You want a vocational education in software development, which is something different.
No, I said SICP was by far my favorite book. I already knew how to program before joining the university.. my goal there was to go deeper than what I already knew.

However, the big majority of my colleagues there didn't want that. They really enjoyed "Design patterns", "C++".. but hated anything potentially more abstract (Like compilers, Algorithm). Note that I'm talking about software engineering.. and not about computer science, which is really different imo (as engineer might have a more practical mind).

Who offers a vocational education at an university level? Not everybody who is smart wants to be an academic.
What does your comment have to do with what I wrote? No one is denying that many people really want a vocational education. No one is claiming that smart people should want to be academics. The point is that what people want is not computer science. Civil engineers do not enroll in physics programs and then complain that their physics professors are not teaching them anything about practical bridge construction.
Then the problem is with college departments and administration who fail to create separate programs distinguishing between CS and SE.
I'd argue that that would be a really bad idea. You can't be a good software engineer without having a good grasp of Computer Science.
There's nothing to stop them from having a lot of overlap. Much like how Computer Engineering overlaps quite a bit with EE.
Community colleges offer an excellent education in the programmer vocation.
If 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.

I 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.

Great point. Bookmarked.

To see how to do trade schools without the stigma, look at Germany. They do it Right.