Live data from Hacker News

Why I am Not a Professor, or The Decline and Fall of the British University

lambdassociates.org

81–90 of 127 posts

Re: Why I am Not a Professor, or The Decline and Fall of the British University

#81

Earlier quoted context omitted.

No. Java and Python and Scala are not improvements. Why? They're too easy. Pointers are hard (relatively). Compiler design is hard. Complexity theory is hard. A loss in any one of these sections is a loss to the degree as a whole. The ACM ICPC helps a little in promoting intelligent problem solving (every CS student should be able to write a program to use Dijkstra's algorithm in under 20 minutes from memory ), but i…

I would agree that low-level programming should be taught at some point. But one course is sufficient and it could be one that is taken in second or third year. Low-level memory issues should be avoided whenever possible by using a higher level language. There's a reason why garbage collection was invented.

Depends on what you're studying. System programming is and should always be done in C/assembly. Personally I am doing virtual machine design in C at the moment.

Re: Why I am Not a Professor, or The Decline and Fall of the British University

#82
post #78
post #75

Earlier quoted context omitted.

You make a good point - I was thinking that Java shouldn't be taught in introductory CS classes for people planning to be a CS major, but obviously didn't get that across. It would be fairly easy for someone to learn Java once they've been taught C. Professors should not have to spend time going over pointers and memory management in an OS class, however.

I think OS classes are the best place to cover pointers and memory management. Assuming you are covering how how an OS works vs an intro to UNIX class. Granted in our OS theory class we spent most of our time using / talking about ASM, but C could also work fairly well.

This course has four purposes. First, you will learn about the hierarchy of abstractions and implementations that comprise a modern computer system. This will provide a conceptual framework that you can then flesh out with courses such as compilers, operating systems, networks, and others. The second purpose is to demystify the machine and the tools that we use to program it. This includes telling you the little details that students usually have to learn by osmosis. In combination, these two purposes will give you the background to understand many different computer systems. The third purpose is to bring you up to speed in doing systems programming in a low-level language in the Unix environment. The final purpose is to prepare you for upper-level courses in systems. This is a learn-by-doing kind of class. You will write pieces of code, compile them, debug them, disassemble them, measure their performance, optimize them, etc.

http://www.cs.northwestern.edu/~bmd/cs213-f03/docs/syllabus....

Re: Why I am Not a Professor, or The Decline and Fall of the British University

#83

Earlier quoted context omitted.

They should learn both. Any CS student who does not understand simple hardware concepts such as page faults does not deserve a degree. Similarly, every CS student should learn functional and imperative programming. Period.

But this would produce a generation of students that know how to do things that we already know how to do really well already. Maybe it would be better if we skipped page faults and taught things that would advance CS. CS has moved on to more interesting areas that simple page faults. Think about how massively parallel systems run, or how distributed databases handle consistency, or high volume scaling, or NLP or any…

Page faults illustrate the idea of the memory hierarchy, which is one of the most important architectures in computer science. Programmers who don't understand the memory hierarchy write slow code. You also can never do "massively parallel systems run, or how distributed databases handle consistency, or high volume scaling, or NLP or any of the other areas of CS that are far more interesting that page faults" without virtual memory, paging, and page faults.

Re: Why I am Not a Professor, or The Decline and Fall of the British University

#84
post #74

Earlier quoted context omitted.

Recursion is only considered an "advanced" algorithmic technique because people are taught to think of it that way. Recursion is actually pretty straightforward once you have a bit of practice using it.

Well, yes, most things do become easier with a bit of practice. If a functional language was taught in beginner CS classes I think it would be easier for students to see how it works. It certainly "clicked" for me once I'd learned a bit of Scheme in my first AI class.

Intro CS courses at MIT, CMU, and Northwestern are taught in Scheme.

Re: Why I am Not a Professor, or The Decline and Fall of the British University

#85
post #66

I think most people are missing the point here. What he is saying is that CS (and the university model itself) has stopped being a correct vehicle for preparing students for a technical society. I happen to agree with the guy. The model is broken, and we should move on to something much more libertarian, where the individual is in control of its own learning.

As a completely self-taught software engineer, I'm inclined to agree. Except for one big doubt: A large percentage of people do not excel on their own. They rely on social standards to specify what counts as "good enough" and to provide them a roadmap through the learning process.

Of course, that's what vocational schools are for, not universities. Universities got confused when they started pretending to offer job training.

Re: Why I am Not a Professor, or The Decline and Fall of the British University

#86

Earlier quoted context omitted.

But this would produce a generation of students that know how to do things that we already know how to do really well already. Maybe it would be better if we skipped page faults and taught things that would advance CS. CS has moved on to more interesting areas that simple page faults. Think about how massively parallel systems run, or how distributed databases handle consistency, or high volume scaling, or NLP or any…

Page faults illustrate the idea of the memory hierarchy, which is one of the most important architectures in computer science. Programmers who don't understand the memory hierarchy write slow code. You also can never do "massively parallel systems run, or how distributed databases handle consistency, or high volume scaling, or NLP or any of the other areas of CS that are far more interesting that page faults" without…

You're confusing what's important to you with what's actually important.

"Programmers who don't understand the memory hierarchy write slow code" is just nonsense.

Most programmers today use languages where they aren't even aware of, or able to manipulate in any way how and when memory is managed. And this trend will continue as the hardware their programs run on are increasingly virtualized.

Let's face it, virtual memory is a done deal, its now fundamental until we find computer hardware architectures that don't ever have address spaces that exceed the physically addressable memory. With virtualized kernels, possibly its a better solution to boot operating systems that have no concept of constained memory resources, and let the virtualizer do the paging.

Re: Why I am Not a Professor, or The Decline and Fall of the British University

#87
post #80
post #6

And here we have the reason why just about every single CS department in the US teaches Java instead of C or Scheme.

I think comments like there are border-line trolls in a community like HN. The languages used in various parts of a CS curriculum are one component to the whole. Holding up that component as the reason that the sky is falling is, at best, disingenuous. I can construct terrible CS curriculums that start with C, and terrific ones that start with Java. If those who construct the curriculum want the beginning courses to…

You have to meta it one level. The reason C was taught was because it was close to the machine without actually being assembly language. That's pedagogically useful because it exposes the student to all the properties of the Turing machine without having to be too specific about implementation (not that MIPS assembly isn't also a good choice). Similarly, the reason to teach Smalltalk is to teach OO, the reason to teach Lisp is to teach Lambda Calculus. The only reason Java is taught is because students demand it because they've heard that if you know Java you can get a good job.

Now, that doesn't imply that Java shouldn't ever be taught. But the reasons for choosing any language should be academic reasons. Particularly, it is bizarre to see academia trailing industry in language adoption.

Re: Why I am Not a Professor, or The Decline and Fall of the British University

#88
post #69

Earlier quoted context omitted.

But this would produce a generation of students that know how to do things that we already know how to do really well already. Maybe it would be better if we skipped page faults and taught things that would advance CS. CS has moved on to more interesting areas that simple page faults. Think about how massively parallel systems run, or how distributed databases handle consistency, or high volume scaling, or NLP or any…

You need to understand what has come before so that you can build upon it effectively. Taking past progress for granted will not help develop the future; if anything, you'll get a lot more reinvented wheels. Among the higher-level problems you mentioned, how many of them are interrelated? I'd rather see professors cover material that is useful in 80% of cases, even if they are well-trodden topics - students can speci…

simply not true.

you do not need to understand how your compiler works, or how De Morgans law is responsible for all those NOT gates in your CPU to produce useful and meaningful CS.

Re: Why I am Not a Professor, or The Decline and Fall of the British University

#89
post #87
post #80

Earlier quoted context omitted.

I think comments like there are border-line trolls in a community like HN. The languages used in various parts of a CS curriculum are one component to the whole. Holding up that component as the reason that the sky is falling is, at best, disingenuous. I can construct terrible CS curriculums that start with C, and terrific ones that start with Java. If those who construct the curriculum want the beginning courses to…

You have to meta it one level. The reason C was taught was because it was close to the machine without actually being assembly language. That's pedagogically useful because it exposes the student to all the properties of the Turing machine without having to be too specific about implementation (not that MIPS assembly isn't also a good choice). Similarly, the reason to teach Smalltalk is to teach OO, the reason to tea…

You claim that "the only reasons Java is taught is because students demand it," and it appears your objection is based on this claim. Do you have any support for this claim outside of your personal belief? My undergrad made the switch to Java right before I graduated, and they are a counter-example to your claim.

Also, I doubt your claim about C is true. C was used because it was close to the machine without actually being assembly. I suspect C was then taught because it was used everywhere.

Re: Why I am Not a Professor, or The Decline and Fall of the British University

#90
post #74

Earlier quoted context omitted.

Well, yes, most things do become easier with a bit of practice. If a functional language was taught in beginner CS classes I think it would be easier for students to see how it works. It certainly "clicked" for me once I'd learned a bit of Scheme in my first AI class.

Intro CS courses at MIT, CMU, and Northwestern are taught in Scheme.

MIT recently switched to Python. That fact is the other favorite cause for this discussion.
Post reply on HN