7 ms·
It was a great post right up until the part where he started talking about computer science. It left me with the feeling that either Zed did not study computer
by wheels 16y ago
It was a great post right up until the part where he started talking about computer science. It left me with the feeling that either Zed did not study computer science, and is just talking out of his ass, or went through a very bad computer science program and has generalized that all of them must be that bad.
How arrogant can you be? There's nothing for you to learn from 100 years of algorithms, complexity theory, language or operating systems design? Nothing?! All you need is code?
- StupidDorks 16y agoThis poster is really The Idiot! What abotu AI, Machine Learning also CS lies on a fine line between engineering and Computer Science, thus like other engineering problems there is a focus on solving real life problems rather than philosophical paradoxes!
- hga 16y agoThe termination with extreme prejudice of 6.001 suggests that some people mostly agree (http://www.wisdomandwonder.com/link/2110/why-mit-switched-from-scheme-to-python http://www.wisdomandwonder.com/link/2110/why-mit-switched-fr...). Certainly there's an ever increasing role for people pasting together big libraries and frameworks without a deep understanding of what goes on behind the curtains....
- deleted 16y ago[deleted]
- prosa 16y agoIn any successful field of engineering, the job growth explosion will be among the assembly-line workers. Cars and aircraft, now solar panels and semiconductors. Extrapolating from that to say that an engineering education is worthless is a huge extension of reasoning. Those assembly-line jobs only exist because of years of research by well-educated engineers. If your school's Computer Science curriculum is a series of courses on the LAMP stack, that's one thing. But in the fields like algorithms, distributed computing, machine learning and information extraction, to name just a few, there is plenty of room to build a career around a degree.
- alexgartrell 16y agoI think that there's a big factor that goes largely unacknowledged. Lots of non-Computer Science students have to take introductory programming. Given the choice between teaching a mechanical engineer something like scheme, which he will in all likelihood never use again, and python, which is a lot more widely useful, the choice is clear. Introductory programming is all about what functions, variables, etc. are. I doubt many intro-level students ever grasped the fact that they were working on more or less the raw AST or the "code as data" thing anyway.
- hga 16y agoBZZT! 6.001 was never a service course and while it was taught the EECS department even stopped teaching their service course due to lack of resources (MIT doesn't let departments get too big for a long time until they're sure they aren't going to suffer a crash like Aero/Astro, which of course turned out to be very wise after the dot.com bust). Other departments taught and still teach their own relevant for their fields programming service courses, and surprise, surprise, the EECS department has started teaching a Python based service course ... although partly because the new 6.01 course doesn't have the time budget for students to learn Python's syntax and other irregularities (you can't take 6.01 without proving you can program in Python, as I recall). ADDED: that said, there are a lot of students outside the EECS department who are very upset they can no longer take 6.001, which in times past quite a few did.
- snikolov 16y agoI think characterizing the courses that replaced 6.001 as exercises in "pasting libraries together" is unfair. The new introductory courses 6.01 and 6.02, are focused on introducing fundamental EECS design principles, in the context of mobile robotics and digital communication systems, respectively. Having just taken 6.01 and 6.02, I have mixed feelings. One the one hand, you had to write relatively little code within some larger skeleton that had been written for you. But the code you had to write emphasized important engineering design principles without making you write an entire mobile robotics system from scratch (which is not the point of the class). On the other hand, the problems were somewhat contrived, and didn't allow much room for creativity. There was only really one way to fill in the blank code. This required understanding the structure of the rest of the code to figure out exactly the way in which the professors might want you to write the missing code. The intention seems to be that this is a valuable skill, but for me it was at the cost of stifling any creativity. Time and again, I would be partnered with someone (we had randomized partners for 6.01) and I would say "this is interesting, maybe we can solve it like this" (and I would start proposing some ideas), and my partners would say something like "I don't think that's how they want us to do it." A lot of times, they were right --- and this was a successful strategy for the class. Ultimately, the final robot did cool things, but I didn't feel like I made a creative contribution to those cool things in any way.
- hga 16y agoAgreed with the first point, 6.01 and 6.02 are as you point out a lot more than that. It sounds like from what you're saying that the software component of them are as Sussman has commented, mostly "exercises in 'pasting libraries together'" with little deeper understanding of what's going on. And if you don't take 6.004 ("Computation Structures", from CMOS circuits to designing your own RISC processor)---it's not required for everyone anymore, right?---then one might graduate with an EECS degree without ever gaining that deep understanding of what's going on that starts with 6.001. The real shame, or at least what I've guessed, is that when you take the new 6.005 which is supposed to teach most of the rest of what 6.001 taught which isn't covered in 6.01/2, you'll be doing it in Java, a language which for this purpose isn't even wrong. I'd be very interested in your comments on 6.005.
- snikolov 16y agoEliminating 6.001 also seems to me a part of a trend to allow more freedom in the EECS curriculum. Aside from eliminating 6.001 (which is the most talked about change), computer science students now have more freedom to take computer science courses (rather than certain required electrical engineering courses) and vice versa. For example, in the old curriculum, electrical engineers had to take 6.001 and computer scientists had to take 6.003 (signals and systems). IMHO, the more freedom, the better. If you are concerned about having a well rounded education in EECS, then you can sit down with your advisor, or talk to your friends, and ultimately decide to take the old curriculum anyway. On that note, it would have been nice if they kept 6.001 for those who still wanted to take it.
- hga 16y ago"Eliminating 6.001 also seems to me a part of a trend to allow more freedom in the EECS curriculum." What the elimination of the required for everyone 6.001-4 (EECS's Unified???) says is that the department no longer believes there's a broad core of materiel everyone needs to learn. As described to me, a MIT EECS degree used to mean that an EE wouldn't freeze up when asked to do some embedded programming and a CS wouldn't freeze up when having to integrate digital electronics into a project. Today, a MIT EECS degree means something different. This new thing may be better, may be worse, which will depend on lots of things and the judgment of history. And agreed on the dropping of 6.001. If I had been able to finish my degree in Chemistry (finances prevented that) 6.001 would have been all I would have really wanted to take out of the department's offerings. It certainly was and it a tremendous and pioneering crown jewel of CS (and just happens to cover or provide the foundation for just about all of CS that I'm really interested in). And the promise of teaching a 12 unit version of it (the old version was 15 (that means number of hours per week it in theory consumes)) somehow dropped by the wayside....
- stcredzero 16y agoI had the best of both worlds in a way. I did my entire CS degree in my last year, after sampling a lot of random stuff for 3 years. Also, I had known how to code since age 11, so I didn't need to learn it in college. I will say, however, that there's a lot of CS ignorance in the industry. Even really paying attention to a weekend course about "two dozen good things to know as a programmer" would put someone ahead of about 1/2 of all the big-company coders out there. As an industry, we could probably reap billions of dollars of increased ability over a 4 year span from adopting this sort of continuing education becoming common. (Doctors have this sort of continuing ed.) Once, at a company I worked for, there was a project that lost millions because they didn't know you can't translate one context free language into another with only Regular Expresions. (Before I got there.) And I keep on being some kind of guru because lots of corporate coders don't understand that naive Array add operations are O(n^2). (FFS!) I also think I'm 1 of only 3 in my group who has any inkling of what you need to deal with concurrency. Arrgh! I need a new job!
- ErrantX 16y agoWell, I agree with his first part; and here is why. I've employed a goodly few programmers - invariably the least good are CS majors, the best are usually engineers or physicists. The reason is that CS is a theoretical degree, and far too many people do it assuming they will become a "programmer of value", rather than a potentially important CS researcher. I've had applicants bore be with details of compiler theory they learned, or algorithm programming they worked on and so forth. All interesting stuff I admit - but the question of "can you write a program" is skipped around :) Compare that with a degree like engineering (any engineering really). They have learned one skill, that is driven home over and over: how to solve problems. The actual knowledge from their degree is irrelevant (you don't generally learn all that much at university) it is their analytical and solution skills that are key. There is nothing wrong with this setup. The problem is that CS is treated like an Engineering degree rather than a Mathematics major. Really it should be the latter; if you wish to do research in CS, teach it, work in sort of related fields (CS Majors make good traders, for example, like mathematicians) then CS is the way forward. If you want to be an industry programmer it isn't. What we need is an intermediary; an Engineering degree that hands you some basics of CS and a whole lot of critical thinking. The whole aim of a degree like that is to point you in the right direction and let your interests develop into a career. This needs to replace CS as the majors for most people - and I think, actually, it would make them happy :) Hackers are an odd exception; personally I think a good hacker would get much from any of the degrees - theoretical or not - though it is worth remembering that a good hacker will generally be a good programmer anyway because they can hack around, and solve, problems. (Just to point out: I disagree with all of what Zed has to say about CS itself - clearly there is a lot to learn there, if you go for the right reasons) University is a great choice for someone to further their education; not because it will teach you much (if you expect university to be the peak, or even the start, of your education you've failed already :P). But because it teaches you the ability to learn for yourself, think critically, break the discipline cycle that school drilled into you, get drunk, make important friends, find people to bounce ideas off.. the list goes on. Somewhere down the bottom is "sit in lectures and learn stuff". Learning is easy; the rest is far more important! :)
- ComputerGuru 16y agoWhat we need is an intermediary; an Engineering degree that hands you some basics of CS and a whole lot of critical thinking. The whole aim of a degree like that is to point you in the right direction and let your interests develop into a career. You may not have it in the states, but the rest of the world does. I graduated a five-year (160 credit hour) curriculum in "Computer Engineering" which is a bundle of low-level courses (circuts, electronics, assembly, microelectronics, digital integrated circuits), programming courses (c++, c#, object oriented software development), software lifecycle courses (software engineering, project management), math, pure engineering courses (statics, electromechanical systems), and more. It's recognized as an engineering degree by the Engineers Guild, and has given me, above all, the "Engineering Sense" that I apply daily in my development work.
- benatkin 16y agoWhat if all but about a dozen with a great reputations (MIT and others, as he said) and about a dozen hidden gems have the problems Zed describes? Or do you have a solid argument against it? Also, the dozen hidden gems don't do the people asking Zed for help any good, because they're hidden. They're great for the people that happen to be going to them, but if an outsider thinks one might be a hidden gem, it's not a great risk. My computer science education at a small state university exhibited all the problems Zed describes, and more. For all classes, except those taught by two or three of the instructors, there was very little culture. We were taught what was a subset of what was in the books, designed to help mediocre students pass. Learning extra was not encouraged. How the knowledge came about, or is used practically, is glossed over. Half of my classes were Computer Science, but what I remember is mostly from non-CS courses. And on top of it, a lot of teachers gave me pointless exercises and confusing tests and some had grading that wasn't at all straightforward. Less dedicated students who knew how to game the system did much better than me, grade-wise.
- hga 16y agoAnd you know, it doesn't take much to teach context and (domain specific) culture while the professor is teaching the basic course. Look at these quotes from my favorite chemistry professor: http://en.wikipedia.org/wiki/Daniel_S._Kemp#Quotes http://en.wikipedia.org/wiki/Daniel_S._Kemp#Quotes Ummm, well, OK, except for the first one they aren't so great, but let me relate this tremendously useful and memorable anecdote he told us in first term organic chemistry: There was a company manufacturing a molecule and at some point their yield randomly started going to hell, an impurity wasn't getting removed. They just about went crazy trying to figure out what changed until they set up 24x7 cameras, reviewed the footage and found out that a night watchman was relieving himself into the vat. But here's the neat part: it was only when he did that that they got pure product and the cause of their new problem was his semi-retirement and not working as many nights as he had been. Their real problem, of course, what that they didn't truly understand their process, they didn't realize they needed to e.g. include some urea or whatever to complex with the impurity and help it get washed out.
- strlen 16y ago> .. went through a very bad computer science program and has generalized that all of them must be that bad. I had the same feeling. I attended a program at a school which (at least at the time) wasn't extremely selective (the school as a whole admitted 60% of applicants and was extremely generous with financial aid) and highly industry connected (located in Silicon Valley with alumni all over the local technology companies). Nonetheless, the first language students learned was C, followed by Haskell. Compilers, discrete math, operating systems, EE courses were all required. Upper division courses would expose students to other languages (Scheme, C++, Java) and I only remember one undergraduate class requiring a single Java based lab assignment. Graduate courses either required C (I focused in systems and networking) or were language agnostic.
- drtse4 16y agoSadly, the post is just a rant in my opinion. The desire to know, to improve yourself, etc... can't be linked directly only to the fact that you are attending university x pursuing a degree in y. You can have it, you can develop it or you don't have it. The environment can help to improve the development rate, but if you don't have it you can't develop it even if you follow some "humanistic" courses. While i agree that these "java schools" are nearly useless, even if i don't know deeply the usa scenario, i guess that is still possible to skim out this kind of places and choose a university with a more well-rounded curriculum. And just looking at communities like HN, everyone can notice that even CS majors can have a multitude of multi-faceted interests.
- nellboy 16y agoZed is an angry man with a chip on his shoulder. His words should be taken with a large pinch of salt.
- DanielRibeiro 16y agoAfter reading this post, I can't help but remember 3 people: 1. Alan Kay on ACM (http://queue.acm.org/detail.cfm?id=1039523 http://queue.acm.org/detail.cfm?id=1039523): Once you have something that grows faster than education grows, you’re always going to get a pop culture. 2. Paul Graham: I’ve never liked the term “computer science.” The main reason I don’t like it is that there’s no such thing. Computer science is a grab bag of tenuously related areas thrown together by an accident of history, like Yugoslavia 3. Edsger W. Dijkstra: Programming is one of the most difficult branches of applied mathematics; the poorer mathematicians had better remain pure mathematicians. How I finally disagree/agree with the author: if you plan to take a bad CS course, you are probably better off just getting a job. If you going for a good CS course, don't think you will learn just programming. You will learn it, not all of it, and it will probably be one of the least important things you'll learn.