5 ms·
In a perfect world we would get rid of the CS major entirely and teach only math. Students interested in a computer career would take a maths course with a CS f
by dissenter 19y ago
In a perfect world we would get rid of the CS major entirely and teach only math. Students interested in a computer career would take a maths course with a CS focus: very hard math and then data structures & algorithms, theory of computation, and some electives. Good programming is all about good design, and the way you learn good design is from spending a lot of time thinking about really hard math.
When two programmers are skilled in mathematics, there's no disagreement on the right way to do something since they both realize there is only one right way to do something. Minimal footprint, minimal dependencies, ease of change, minimal variable names, canonical structures, efficient run times...How can people have arguments over object-oriented programming semantics? The very notion is absurd.
When math is taught well computer programming falls out of it as a corollary. Courses like operating systems and programming languages are absolutely ridiculous. A bright student can pick up all of the useful concepts in an afternoon or two. At best they're excuses to have large programming projects.
The CS curriculum as designed is little more than a vocational school, one whose difficulty is increasingly ratcheted down to get somebody, anybody, to do the work that grows each year in complexity and tedium, owing to the previous class of terrible coders it was necessary to graduate. The demands on the software haven't gotten any more taxing, the existing codebase has just managed to grow in size without any new intelligence being added to its construction.
When you think about it, the CS curriculum, its practical side anyway, is basically just a massive toolset designed to cope with the fact that its students are bad at math. Constructs like object-oriented programming, they start out with the assumption that you won't see the canonical way to do something, and then everything that follows thereafter is damage control. How to program at the lowest common denominator.
That books on design patterns exist, and are so widely celebrated, is perhaps the most damning indictment of the field I can think of. If you can look at a design pattern book and learn something, it means you are missing the strong inner core of understanding that allows another, better designer to look at the table of contents and go 'duh', and that inner core is absolutely necessary to construct any sort of code that is going to work together with other code in a completely seamless, mathematical sense.
The curriculum, and these techniques, are heavily influenced by economic forces---this is not a secret. (Programmer churn, outsourcing, the never-ending cutbacks in the cost center.) You need to have all your programmers speaking the same language, and it's a lot easier to have them speaking OO than math. And so you get a product that sucks, and we're all using an internet in 2007 that still looks like a Model T, and everyone gets excited when they can update a calendar without refreshing their browser. You've got to be kidding me.
- pg 19y agoGood programming is all about good design, and the way you learn good design is from spending a lot of time thinking about really hard math. An interesting idea, but empirically false. Design sense is a necessary condition for being a good hacker, but not a sufficient one. As for the second half, I agree one can learn about design from studying math, but most of the people I know with a great sense of design didn't acquire it that way. If you said "A sense of design is a big component of being a good programmer, and you can learn a lot about design by studying math," you'd be right.
- breck 19y agoI'm guessing the philosophy you're describing here is the one you subscribe to. How has it worked for you? I'm generally curious. What are your personal accomplishments that would bolster your argument that this way is the best way to learn CS?
- alxv 19y agoYou sound like someone who hasn't programmed much in a real-life scenario. Programming is far from being black and white as mathematics can be. From my own experience, programming is a mash of creative arts and psychology with a mathematics flavor . Most of the time, a programmer is just calling other people's API (which is unfortunate, in my humble opinion). So, what is the usual skill usage of a programmer? 50% Knowing the programming language you use and its libraries. 20% Communication. 10% Debugging efficiently. 10% Creativity and taste. 10% Algorithms and mathematics. Of course, these percentages depends on what you're doing -- e.g., a programmer working on a numerical-analysis application will need mathematics much more often than the average web-developer.