Live data from Hacker News

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

news.ycombinator.com

11–20 of 27 posts

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

#11
It seems to me that you are making the same general argument that Steve McConnell (of Code Complete fame) made in his 2003 book "Professional Software Development", namely that CS programs serve a different purpose and clientele than a Software Development or Software Engineering program would serve. So, rather than evolving a CS curriculum, another option would be to introduce parallel software engineering programs. Honestly though, for a professional developer who sees this as a career, I'd argue you are better off doing CS at the undergrad level, then pursuing something like a Masters in Software Engineering. CS at the undergrad level gives everyone the foundation they need, regardless of what the pursue professionally after that.

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

#12
I'd love to get y'all's feedback on a related question: did you receive any training in your CS degrees that had anything to do with testing, dev-ops, continuous deployment, and the like? I teach in an MIS department and have started to include some of these concepts in the capstone course, which was originally more of a project management course.

From talking to the employers who hire our students (and the CS department's students), I got the impression that CS students are taking four years of programming classes but are never taught how to write tests or even to use version control. Is that the way it is? Is that the way it should be?

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

#13

I'd love to get y'all's feedback on a related question: did you receive any training in your CS degrees that had anything to do with testing, dev-ops, continuous deployment, and the like? I teach in an MIS department and have started to include some of these concepts in the capstone course, which was originally more of a project management course. From talking to the employers who hire our students (and the CS depart…

I went through Georgia Tech, and there is never any formal introduction to version control. If you're exposed to it, it's from a job or a friend (who in turn got it from a friend or their job). If you don't know it exists, you'll never seek out and learn it.

Testing was used in some courses. We had a software development class that involved UML, TDD, and everything "proper". Testing is also provided as a way of pre-checking your homework by some TAs. They might give you a basic set of tests for your linked list homework (adding, removing, etc), but then their grading script will check off by 1s, etc. It's not necessarily taught how to write said tests in those classes.

Continuous deployment is never touched. If you co-op/intern you might be exposed to it.

No one that I knew of learned anything related to "ops", unless they happened to take an interest in it.

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

#14
post #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?

Haha, yes, new to posting at least.

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

#15
post #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…

I absolutely beg to differ on your first point. You don't use actual performance measurements in Data Structures courses, no matter what language you use. You aren't instrumenting your code or counting bytes or anything. You measure the concepts by analyzing with Big-O notation. If you really wanted to, you could teach a Data Structures course using just paper, pencil, and pseudo-code.

Pretty much any language will work fine for teaching data structures.

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

#16
post #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 appl…

Yes, very aware. What I suggest was just an off the cuff idea to help spark ideas. CS is still too new to not have some evolution left in the curriculum. This really isn't controversial.

You are like the guy back in 1975 saying "...We don't need no stinking change from Assembly to C, this isn't a 'Learn How To Program Degree' don't you know..."

Assembly is fine, it's just not relevant anymore to a CS major. C and Java are still good but they are becoming less relevant was time marches on. Blah blah blah. Is thing on?

In fact, if waited and just said the same thing in 7-14 years or so, everybody would be saying ".. for Data Strucutres?...no sh*#t, who programs in C or Java anymore?!?..."

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

#17

I'd love to get y'all's feedback on a related question: did you receive any training in your CS degrees that had anything to do with testing, dev-ops, continuous deployment, and the like? I teach in an MIS department and have started to include some of these concepts in the capstone course, which was originally more of a project management course. From talking to the employers who hire our students (and the CS depart…

If people's comments here are any indication, yes, SADLY, that is kind of the way it is.

Does it have to be? Definitely not.

There are tons of ways to inject practical skill building moments into an otherwise rigorous and principled CS degree.

For example, Professors could force students to turn in their coding assignments by Git Pushing to a repo. Since they have to do that anyway, they might as well version their assignments as they work on them. Boom! Some exposure to version control.

Or Professors could provide students with a suite of unit tests that their assignments will have to eventually pass. Now the students are coding to test cases from the very start of an assignment and probably picking up some practical knowledge about testing platforms.

Both of these tactics could be injected into just about any course, from Compilers to Data Structures.

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

#18
The main disagreement I have is the assertion that the majority of jobs (at a nationwide level) is for web based languages. While it is trending in that direction from what I see the majority of jobs are still Java and C++ with a bit of C thrown in. And while there may come a time when Javascript overtakes Java and C++, I don't think we are there yet, at least not nationally.

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

#19
post #10

Earlier quoted context omitted.

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…

I absolutely beg to differ on your first point. You don't use actual performance measurements in Data Structures courses, no matter what language you use. You aren't instrumenting your code or counting bytes or anything. You measure the concepts by analyzing with Big-O notation. If you really wanted to, you could teach a Data Structures course using just paper, pencil, and pseudo-code. Pretty much any language will w…

Pretty much any language will work for teaching data structures badly.

If your instructor is showing you a cool animation of a list with less than 30 elements being sorted by X algorithm, he's doing it badly. Or at least if that's all he's doing. There are by the way many schools that do just that, under the rationalization that the point of the class is to have the student practice what he learned at Programming 101. I attended such course in the day, and then went to teach the same course some years later, but I don't think the results were any good.

IF he have you run your algorithm against input taken from /dev/random, first 100KB, then 1MB, then 10MB, then 100MB he's a little less bad. IF he makes you do the whole sequence a dozen times an plot each resulting data points in a graphic with logarithmic scale, he is not bad at all.

Then you can start to discuss Big-O notation, but for the resulting graph to make any sense you need that the program written by the student to have a relatively strong correlation with what the computer is actually doing. It will not do, by example, if the runtime environment decides to implement you list as a dictionary object instead of a raw array. Also, having a relatively precise clock like Java's currentTimeMillis will reduce the possibility that you embarrass yourself if the practice do not seem to match the theory.

If the course is being taught at graduate level, you may want to run a second experiment, this time with input sizes of 1KB, 256B, 64B, 16B. At this point you will be able to discuss stuff like the Little-O notation, the constants involved in both notations, and how those are derived from Limits of the time function.

For this you will absolutely need the best clock available in your hardware, so C because a must. It will also help if you can run cc -s on your code and see what assembly is behind your code. I know it is overly ambitions, but that's how I would like to have learn about this stuff.

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

#20

Earlier quoted context omitted.

I absolutely beg to differ on your first point. You don't use actual performance measurements in Data Structures courses, no matter what language you use. You aren't instrumenting your code or counting bytes or anything. You measure the concepts by analyzing with Big-O notation. If you really wanted to, you could teach a Data Structures course using just paper, pencil, and pseudo-code. Pretty much any language will w…

Pretty much any language will work for teaching data structures badly . If your instructor is showing you a cool animation of a list with less than 30 elements being sorted by X algorithm, he's doing it badly. Or at least if that's all he's doing. There are by the way many schools that do just that, under the rationalization that the point of the class is to have the student practice what he learned at Programming 10…

[deleted]
Post reply on HN