Hacker News new | ask | show | jobs
by jgg 5868 days ago
A nice start would be actually teaching Computer Science. Computer Science is a branch of mathematics, with both theoretical and applied aspects. This does not mean that learning Java syntax constitutes as "applied". I think it should be expected that CS students pick up languages on their own in order to complete and understand theory-based assignments. Anything else is probably just pandering to people who shouldn't major in CS. This doesn't mean programming projects are entirely out; if they serve to reinforce understanding something like logic programming or pointers, then by all means they're useful. The "open source contribution" and whatnot should be done on your own time, and doesn't belong in the curriculum, period.

Remember, you don't major in Physics to learn which brand of concrete you need to build a bridge. Not teaching a concept because it isn't "used in industry" is a sickening corruption of what academia is supposed to be about.

See my comment here: http://news.ycombinator.com/item?id=1345596

4 comments

I agree to a large extent, but not 100%. Here is why.

You correctly said that Physics majors do not study which details of bridge building. Indeed this is part of a different major (Civil Engineering, I suppose).

In contrast, Computer Science is a very broad discipline. Large portions of it are science; large portions are engineering (or similar to engineering, if we exclude Computer Engineering per se). A good student, or a student with a good mentor, should be able to choose a more theoretical (scientific) or more practical (engineering) path and work on the curriculum accordingly. I understand that it is not always possible (in some places, for example, students cannot choose classes), but at least a student should be able to choose where to focus.

A small point about "picking languages on their own". I think basics of languages can be taught to freshmen, at least selectively, to help those students who may be lacking in previous exposure to computers in high school. (Depending on the university, this may or may not be an issue.) Teaching basics of C or Java or, I don't know, Python, whatever, this way does not turn a university in a Java school or anything like that. Indeed it may be as useful as remedial classes in calculus.

I totally agree that CS should be about CS and not software engineering -- with the caveat that more schools should have actual software engineering programs for those that "shouldn't major in CS". Currently, CS tends to be the preferred major for people who really want to become software engineers, which is as silly as pushing people who want to be mechanical engineers or civil engineers to instead get degrees in physics, or only giving a biology education to would-be doctors and veterinarians.
There's always this tension between the pragmatists and the theorists. I figure we just split it in two. CS focuses on research and theory. CP(rogramming) focuses on the pragmatic and artistic nitty gritty of building software. Now, I personally wouldn't advocate majoring in programming, because you really should just R the F'ing M, and make stuff on your own. But it's hard to argue against its validity as a major when there are tons of students clamoring to pay for it, and there are already so many way softer majors. There would obviously be a lot of overlap between the two.
>CP(rogramming)

It's called "Software Engineering" and some schools (like RIT) already have separate degrees for it.

Yeah, I should have assumed there'd be degrees available in Software Engineering. But "Software Engineering" is such a misnomer. [rant on how we don't know how to "engineer" software]. My "Software Engineering" courses were straight up awful. The degree I'm imagining would focus on the way software actually gets written -- the wrestling with problems and the straining toward creative insight. And you'd do a fuck-ton of coding on interesting and substantial projects.
> wrestling with problems and the straining toward creative insight

That sounds like engineering to me -- when it is based on some determinate material with at least a few known logical principles -- which software is.

I'll just quote pg from "Hackers and Painters"[1], because he said it better than I can:

> I've never liked the term 'computer science.' The main reason I don't like it is that there's no such thing. Computer science is a grab bag of tenuously related areas thrown together by an accident of history, like Yugoslavia. At one end you have people who are really mathematicians, but call what they're doing computer science so they can get DARPA grants. In the middle you have people working on something like the natural history of computers-- studying the behavior of algorithms for routing data through networks, for example. And then at the other extreme you have the hackers, who are trying to write interesting software, and for whom computers are just a medium of expression, as concrete is for architects or paint for painters. It's as if mathematicians, physicists, and architects all had to be in the same department.

> Sometimes what the hackers do is called 'software engineering,' but this term is just as misleading. Good software designers are no more engineers than architects are. The border between architecture and engineering is not sharply defined, but it's there. It falls between what and how: architects decide what to do, and engineers figure out how to do it.

I guess what I'd like to see exist is a "Programming Arts" degree. Or just a "Hacking" degree.

[1] http://www.paulgraham.com/hp.html

Engineering aggregates known solutions to solve specific problems. Science clarifies questions worth asking.

There is a difference.

Something like say a masters in applied programming could be the solution. That way if you feel after your degree that you would like to spend some extra time learning specific languages you can, if should be moved away from the basic computer science theory.
Strongly agreed. In some senses, the intermingling of science/engineering is/was due to strong economic forces that placed such a high value on software engineering. As of 10 years ago, the world needed more software engineers than it had; today this is questionable.

I think the field would be better off if it recontextualized itself as a form of applied mathematics, with computational complexity at its core. Mathematicians are used to being the weirdos, and have far more experience escaping the whims of industry.

"As of 10 years ago, the world needed more software engineers than it had; today this is questionable." My perception is that a lot of software engineers are needed. At least they are needed more(in numbers) than computer scientists.
Yes: economically we also need ditch diggers in more numbers than classic literature experts. That doesn't make society better off if all the top universities start funneling money into ditch digging just because they can get away with it.

Note: I have a lot of respect for software engineering, just making a point with an extreme.