Live data from Hacker News

Ask HN: How would you evolve modern computer science curriculum?

news.ycombinator.com

1–10 of 27 posts

Ask HN: How would you evolve modern computer science curriculum?

#1
Follow up to "Ask HN: What programming languages are used in CS courses these days?" https://news.ycombinator.com/item?id=7950439

From the answers to that question, you can see that the core computer science curriculum has barely changed in 30 years. As for programming languages used, Java has been the mainstream for over 10 years now and C/C++ is still hanging tough after breaking into higher education 20+ years ago.

In '96-'99, the core courses I took (Data Structures, OS, Compilers, Computer Arch, etc.) served me well and I was glad to get a mix of Java and C/C++ at the time. If I was starting my undergrad today however, I'd be a little disappointed to know not much had changed since then. I'd argue a good bit of the curriculum is nearing its shelf life or, to carry on the spoiling food metaphor, at least needs to be put in the freezer for preservation.

Got me thinking about how things could evolve. Some examples:

Data Structures => Javascript or some other web-able Ruby that 70% of folks will actually get a job in. The concepts are what matter in DS, but while we are at it how about a more relevant language choice? Points to those school already using Python for this!

Operating Systems => Teach it in C still, keep it hardcore low level, and probably make it an elective for the minority of folks who want to do performance OS work.

"Browser/Internet as the OS" => Replace the traditional core OS class; class project would basically be this: http://runtimejs.org/

Databases => Replace with a new core course for "Data Science"; make Databases an elective.

So, how would you evolve modern computer science curriculum if you could?

Re: Ask HN: How would you evolve modern computer science curriculum?

#2
I would suggest more bridges to other programs. One could argue this exists ad-hoc with double majors, and minors, and similar, but it could be done better with more proactive thought and combined classes.

Some areas that could be combined: CS & Linguistics, CS & Physics, CS & Math, CS & Biology, CS & Chemistry, CS & Philosophy, CS & Psychology, CS & Business, CS & Geography...

These are done a little here and there, but I would like CS to cross the disciplinary divide more. Technology is eating everything, so why not teach it that way?

Re: Ask HN: How would you evolve modern computer science curriculum?

#3
It sounds like all your changes would be more appropriate for a vocational school software engineering program.

For instance your data structures remark. A data structures course would be fairly odd to teach in something like python where you have no pointers or low level control of memory like C or C++. If all you care about is high level structures then that's not really in the spirit of a CS degree data structures course in my opinion.

Re: Ask HN: How would you evolve modern computer science curriculum?

#4
post #3

It sounds like all your changes would be more appropriate for a vocational school software engineering program. For instance your data structures remark. A data structures course would be fairly odd to teach in something like python where you have no pointers or low level control of memory like C or C++. If all you care about is high level structures then that's not really in the spirit of a CS degree data structures…

I definitely think the rigor and theoretical basis should still be maintained; definitely NOT saying CS programs should make themselves more vocational though I do see plenty of room for more practical interdisciplinary degrees to spring up.

Not sure about the assertion that Data Structures can only be taught properly in a low level language. Any rigorous course would be pretty much orthogonal to the language's peculiarities. You could implement RED-Black trees in Javascript as easy as any language. The cool thing, for any language you pick, as a side effect you'll get to dive deeper in that language's particular features and idioms while also learning the Data Structures theory. So why not Javascript or Python or Haskell or...? I could imagine some cool projects coming out of this one, like implementing your own efficient Shadow DOMs using the various tree structures that get covered.

Re: Ask HN: How would you evolve modern computer science curriculum?

#5
I would say that it is a good thing that the core courses are static in time. It means the field is mature enough to support an undergraduate program at all. Physics and Chemistry majors spend most of their time at school catching up to the historic state of the art up to early 20th century. If they want to know the most up to date advances they have to either pursue a self directed continued education, or enroll in a graduate level program.

As a matter of fact, a rapidly changing curriculum would be at least a yellow flag. In the worst case, it's the pseudo sciences that go up and down, chasing the passing fade du-jour. This is more like a smell test than an objective indicator. The correlation is there, but it is not well understood. Not necessarily every rapidly changing curriculum is a pseudo-science, but a closer look is probably due.

That was probably the state of the art of Computer Sciences ~65 years ago. The Foundations were already known, but the field was still too much of a virgin land to be settled by undergraduates. It was rather a diverse group of mathematicians, scientists and (mechanical and electric) engineers who were just exploring the territory. It eventually coalesced into what we have today, so it is a good thing that the pace has slowed down by now.

Re: Ask HN: How would you evolve modern computer science curriculum?

#6
You recommend teaching Javascript or Ruby in an undergraduate Computer Science Data Structures course. Are you aware of the fact that Computer Science, as a major, is not "Learn programming"? It is learning the theory and science behind Computers, computing and programming. What you suggest is more applicable for CNIT or Computers, Networking, and Information Technology; A major where one would learn more how to apply the theories and concepts of programming. But even then, you're suggesting SCRIPTING languages for PROGRAMMING. The only thing a scripting language is good for in the education system is conveying concepts such as abstraction ( because that's practically all they are ). Java is a way better language for that.

I think instead of attempting to revamp the CS curriculum, we should work harder to portray CS for what it is, which is not "Study this and be a programmer for the rest of your life". People who come out of CS go on to do a wide array of things, programming is just a basic and necessary skill for learning and understanding computing that one picks it up. And knowing the theories and concepts really well makes good programmers, same as how knowing the fundamentals of Mathematics would produce someone who could be a good accountant or something similar.

Re: Ask HN: How would you evolve modern computer science curriculum?

#7
post #3

It sounds like all your changes would be more appropriate for a vocational school software engineering program. For instance your data structures remark. A data structures course would be fairly odd to teach in something like python where you have no pointers or low level control of memory like C or C++. If all you care about is high level structures then that's not really in the spirit of a CS degree data structures…

My school here in India is planning something which resonates with your idea. The problem is that industry largely uses high level languages. So they created CS and CSE(engineering).

Re: Ask HN: How would you evolve modern computer science curriculum?

#8
I think you guys are not actually reading what I wrote - I'm all for the rigor, I'm all for the theory. There is just no reason to not make things more relevant and practical since you have to pick a language/focus/domain for any given class anyway - no matter how theoretically focused it is.

For the Data Structures comment, please see the second sentence that begins with "The concepts are what matter in DS...". What I am saying is, how about a new language? It would be super cool to have to rectify Data Structures theory with the real world issues of something like Javascript.

For the other comment about keeping things static, you know there was a time all these course were taught in Assembly. So are you arguing we should have never even evolved past that?

Anyway, I was hoping more for fun/brainstorming/idea generation. How might I have worded it differently to get that instead of shallow objections?

Re: Ask HN: How would you evolve modern computer science curriculum?

#9
post #8

I think you guys are not actually reading what I wrote - I'm all for the rigor, I'm all for the theory. There is just no reason to not make things more relevant and practical since you have to pick a language/focus/domain for any given class anyway - no matter how theoretically focused it is. For the Data Structures comment, please see the second sentence that begins with "The concepts are what matter in DS...". What…

"How might I have worded it differently to get that instead of shallow objections?"

Bwahahaha! [snort] ahehehe.. heh. ahem.

You're new here, aren't you?

Re: Ask HN: How would you evolve modern computer science curriculum?

#10
post #8

I think you guys are not actually reading what I wrote - I'm all for the rigor, I'm all for the theory. There is just no reason to not make things more relevant and practical since you have to pick a language/focus/domain for any given class anyway - no matter how theoretically focused it is. For the Data Structures comment, please see the second sentence that begins with "The concepts are what matter in DS...". What…

The problem is that web programming is a very abstracted and high level concept. When you take a data structures course, you learn in languages where memory usage can be easily measured or guaranteed, such as Java or C, and the runtime can be more concretely measured. This is important because the fundamental importance of data structures is their memory vs time trade off. Javascript is just not the language for this. Neither is Ruby, Python, Haskell, Perl, .

I understand that you're trying to push for teaching a language that might have more modern, real world applications, but CS is not ( at least in the undergraduate world ) about learning the modern or bleeding edge. Leave that to post-graduation, in your free time, or during a graduate program.

The best you can do is extending the CS curriculum to teach "Introduction to Web Programming" or the like utilizing Python and/or Javascript, or offering it as an elective. The closest thing to replacing Java in CS undergraduate curriculum is Go or Rust or some similar, newer language, but the jury is still out on how useful as educational tools they are.

Post reply on HN