4 ms·
The writer of this blog post and some of the comments here seem to be conflating two terms: "Computer Science" and "Programming". I'd like to suggest that mayb
by tytso 15y ago
The writer of this blog post and some of the comments here seem to be conflating two terms: "Computer Science" and "Programming".
I'd like to suggest that maybe we should consider two completely different things. Just as there is a huge different between someone who can play a musical instrument, and someone who is well versed in musical theory, there is also a huge difference between a _programmer_ and a _computer_ _scientist_.
You can learn how paging in a virtual memory system works, and how a garbage collector works, without necessarily being able to code up a program that plays "twenty questions". And similarly, someone be able to code up all sorts of interesting programs, without necessarily understanding "big O" notation. Their programs might not be the most efficient in the world, but it's certainly possible to do all sort of programming without being exposed to the formalism that comes from taking CS classes --- that's what most high school students who taught themselves how to write Basic, or Pascal or C programs generally have done.
If you decouple the two, then you could imagine having a series of classes which are "programming labs", for which you could test out of the first 1 or 2, and which would be mostly about the skill of programming, and different series of classes that are about _computer_ _science_, and which don't necessarily require that much programming expertise.
- Fluxx 15y agoFrom what I've heard, other engineering disciplines (civil, industrial, etc) curriculum is based on actual real world work experience and jobs. They prepare you to work as an engineer. CS, on the other hand, tends to prepare you very poorly to work as a programmer. Being a programmer is about 25% CS fundamentals and 75% other stuff - understanding requirements, writing maintainable and easy to understand code, being productive, testing, bug fixing, estimation, refactoring, reading documentation, pair programming, prioritization of work, managing your task list, handling failure, working with 3rd party vendors, etc. All that stuff is not taught and should be. A good video sort of on this subject that I recommend is this one: http://confreaks.net/videos/282-lsrc2010-real-software-engineering http://confreaks.net/videos/282-lsrc2010-real-software-engin...
- absconditus 15y agoThat is because computer science is not engineering just as biology is not practicing medicine.
- Goladus 15y agoProgramming is a fundamental tool of computer science. Sure, you can learn how paging in a virtual memory system works by reading wikipedia, but a computer scientist should really be able to write one of their own if they had to.
- absconditus 15y agoWhy? Would you consider Knuth less of a computer scientist if he were unable to implement some modern operating system component?
- mturmon 15y agoKnuth was the author of TeX and Metafont, and I'd be hesitant to suppose him to be unable to implement anything. Not just being snarky here. I think even theorists have an implementor somewhere underneath.
- Goladus 15y agoKnuth, the guy who wrote The Art of Computer Programming? I'm not sure I can make sense of that question. No one can know everything, but if your specialty is, for example, virtual memory paging algorithms you should be able to write programs that implement and comprehend those algorithms, even if it's not production-quality code. If you are on the more practical side you should be able to read and hack on the existing code, even if it's not the central focus of your job. I'm sure it's possible to find people who can be considered computer scientists but don't code very well or at all. But those people are rare exceptions, and aren't evidence that programming isn't an important tool in computer science.
- tytso 15y agoYou mean Knuth, the guy whose algorithms ignore the effects of caches? http://queue.acm.org/detail.cfm?id=1814327 http://queue.acm.org/detail.cfm?id=1814327 There is a place for academia and mathematic approaches, and there is a place for real world experience and technical abilities. Ultimately someone who is good at being programmer does need a leavening of academic background, and someone who is a successful academic needs to know something about real computers instead of the academic over-simplified illusory world that contain friction-less pulleys and massless ropes.