10 ms·
Let's Not Call It "Computer Science" If We Really Mean "Computer Programming"
- taybin 14y agoI was with him until he started complaining about being asked how to implement a hashmap and how this implied that the interviewer had reimplemented Java.utils. How would you know when to use a hashmap and when to use a list if you don't know anything about big-O notation?
- nixarn 14y agoAgreed. The Data Structures courses we had were among the best courses we had. I think it's great to learn how to implement them once.
- didgeoridoo 14y agoI think he addresses this point pretty well -- you can learn good programming practices through apprenticeship/experience without understanding the deeper fundamentals. You won't be creating the next MapReduce, but you'll be able to remix and hack up existing functionality in new and creative ways.
- sophacles 14y agoFrom the other end though, this can result in a lot of cargo-cult programming. "this is how to do it" can create a ton of redundancy (the bad kind) if the underlying mechanisms are not understood sufficiently.
- beersigns 14y agoEven having the underlying ability to understand something sufficiently doesn't imply you'll automatically do so. There are plenty of times even a properly educated person on the subject matter at hand will miss opportunities to apply their knowledge. Recognition of a given scenario is a test of your analytic ability, not sheer know-how.
- lukejduncan 14y agoI like the question. I would never expect a candidate to know a perfect implementation but they better understand the general concepts. It's hard to tell the tone from his writing, but if a candidate was snarky about "why not java utils" I'd be less inclined to want to work with them. The question can be answered many ways without being hostile to the interviewer.
- gnaritas 14y agoYou can have an intuitive sense of how many operations you're performing without knowing big-O notation.
- carb 14y agoOf course, but part of the benefit from studying CS is that you'll be able to recognize intuitively when there is or there should be a better solution. Let's say you want a data structure that performs three operations. Insert, Delete, and Find (as in, 'is this in the database?'). The intuitive sense may come from saying, "Linked-Lists would be horrible for this! Each operation would be slow." (O(n)) The practiced programmer may say, "I can keep the data sorted and use an Array. Those would probably be faster." (O(lg n)) However, if you learned a little more CS and how hashes work, you would know that they are constant time for all three operations. You never had to waste time thinking about which choice to make because you know how hashes are implemented and that they specialize on those operations running in constant time. Besides, big-O notation takes no time at all to learn. I learned it's theory as a freshman in high school during algebra II when we wanted to know which of two polynomials grew faster. Take the most significant part, rip off the constants, and that's its growth rate.
- lordlicorice 14y ago"Take the most significant part, rip off the constants, and that's its growth rate." Well, it's an upper bound on its growth rate. And only after some possibly-gigantic n.
- carb 14y agoYeah I understand. I was describing how I did it in Algebra II. They would give up f(n) = 5x^3 +4x + 8 and we would know that it was O(x^3). We also understood that it was as n -> infinity, hence why f(n) = 2x^4 would have a larger growth rate than g(n) = x^2 + 5000. When you're talking about scalability when programming, you're going to have to understand big-O, how constant factors come into play (why Floyd-Warshall at O(n^3) is often better in practice), and how big-\Theta works. If not, you're eventually going to make a mistake and slow everything down.
- derekerdmann 14y agoThat's why schools like RIT have a Software Engineering program. Learn the basics of CS, then go build real software with it.
- CrLf 14y ago"It helps to know some music theory if you write and perform music, but a lot of very successful songwriters and performers get by very happily with just enough music theory." This is an absolutely bogus comparison. Music does not need to be maintained, music does not need to be troubleshooted or debugged (and thus, reasoned about), music does not solve a problem(1). Music is an artistic expression, while computer software isn't. (1) Writing soundtracks for movies, for example, can be considered solving a problem with music. It also requires music theory knowledge because soundtracks have to convey particular emotions at particular moments.
- tjr 14y agoI found the comparison pretty useful. I used to compose music solely by playing around on an instrument until I hit upon something that sounded good, but I had no idea why it sounded good. I can still compose that way, but after studying music theory, I can compose directly from my head to a sheet of paper without any instrument, as (1) I can now envision in my mind what the music would sound like, and (2) I understand and can employ reusable patterns and concepts of composition that I know will sound good and work together. Similarly, when I started programming, I had little overall vision for what I was doing. I just started writing code, and stopped when I had built up a pile of spaghetti statements that did what I wanted them to do. Now, with better understanding of design concepts and reusable patterns, the development process is much more clean and structured rather than poking around with guesswork.
- cperciva 14y ago"It helps to know some music theory if you write and perform music, but a lot of very successful songwriters and performers get by very happily with just enough music theory." This is an absolutely bogus comparison I disagree. There are very successful songwriters and performers who have no training, but almost all of the good songwriters and performers did have (usually classical) musical training. The same is absolutely true in software: There's a lot of very popular crap out there, but the software which is universally recognized as good -- code like TeX -- almost always comes from authors with solid computer science training.
- 14y ago
- JoeAltmaier 14y agoWriting applications: go ahead, program by the seat of your pants. Architect a solution to a big problem: theory comes in very handy.
- debacle 14y agoThe theories behind computer science have little very application in large software engineering. software engineering != computer science
- JoeAltmaier 14y agoThat's preposterous. Computer science is directly applicable to understanding issues of scalability, searching, hashing, database properties, network routes and looping, the list goes on and on. Computer science is a lot more than proofs.
- debacle 14y agoNone of those things deal with maintainability, design by contract, interface design, etc. When you're writing a multi-million dollar piece of software (20+ man-years), the technical problems are the easy ones to solve. Actually putting the thing together is the hard part.
- JoeAltmaier 14y agoWell said. Computer Engineering is a lot more than programming languages. But does it take a college education to get there? Or a seminar on the latest tool chain.
- sp332 14y agoThe theories behind computer science are used all the time in large software engineering. They're just not the interesting part.
- swa14 14y agoHell, software engineering isn't even engineering. 'you will discover that software engineering has accepted as its charter "How to program if you cannot.".' http://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD1036.html http://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD1036... "Software engineering" has little to do with engineering and its principles and everything with applying buzzwords to squeeze the most money out of whomever was suckered into paying for the project.
- portmanteaufu 14y agoI follow the author's point, but I feel as though he's as guilty of dismissing valuable knowledge as the academics he condemns. I recently completed a graduate degree at a university that offered both a "Computer Science" program as well as a "Software Engineering" program. This is only my opinion, of course, but the difference in depth of understanding between the students in each field was very stark. The SoftE students dedicated several semesters to development best-practice-type classes: generating JavaDocs, curating JUnit tests, writing and revising good requirements, and UML modeling. They would essentially walk away from their program as expert Java users with little to no idea how Java itself (let alone the machine underneath) functioned. The CS students knew the inner workings of a computer program from code to compiler to stack, but would have to learn the bookkeeping side of development on the job. Both paths have their strengths and weaknesses and you've got to learn some degree of each to be a meaningful contributor.
- speg 14y agoI like to think of it like this: Scientists: Focus on developing new theories, solutions to abstract problems, etc. Engineers: Build tools based on the theories created by the scientists. Developers: Build products based on the tools the engineers made.
- wissler 14y ago(Natural) Scientists: study nature. Engineers: study how to build. This may include original theorizing pertaining to methods of building -- they don't just ape scientists' theories, they create their own. Engineering is itself the science of building. Developers: Engineer vs. developer is an arbitrary division. In truth there is a continuum from the most scientific of engineers, who use abstract theorizing to create new technologies, down to someone comparable to the person who installs your water heater.
- arethuza 14y agoSo where do mathematicians fall in that spectrum?
- loboman 14y agoWell it's not a spectrum really, you need a mix to do anything. Scientists need developers (or need to be developers too) if they want to do experiments related to their theories, or if they want to push them to the world. Developers need to understand what scientists say, or they need to be partly scientists, to be able to build up their own small theories whenever a problem is difficult enough. And so on. Back to your original question, maths is an extremely useful tool both for CS research and development. A pure mathematician is providing material for all of CS to work. But CS people, programmers, and so on need to know some math too.
- rlpb 14y ago"Of all the mathematical sciences, computer science is unquestionably the dullest." Really? I find it the most interesting. Which is, I think, what led me here.
- alecbenzer 14y agoSigh. I keeping seeing all these cs vs programming articles. I'm really waiting for a "fuck just programming, cs is fucking awesome" one, because all the ones I've read so far sound like "haha, stupid math nerds and their cs. just learn to program" (a bit of mis-characterization of this article, maybe, but I get annoyed when people say something I like is "unquestionably" dull)
- RegEx 14y agoKnowing HN, someone will surely deliver, and the front page will have 4-6 variants of "Why you should/shouldn't learn computer science"
- alecbenzer 14y agoAfter I wrote out "fuck just programming, cs is fucking awesome", I immediately thought it sounded like a good name for a blog post :) Is my hipster showing?
- RegEx 14y agoYes. Unfortunately, I have only but one fuck to give, so I find your title a bit overwhelming ;)
- eli_gottlieb 14y agoI've been mentally composing a blog post entitled, "Programming is hard, which is why I don't want to do it" about the differences between "real programming" and computer science. The thesis is that "real programming" involves solving problems that are inherently simple but have loads of incidental state and details to mentally keep track of, whereas computer science involves solving streamlined, semi-pure instances of inherently hard problems. I prefer computer-science because I don't like loading five windows and 18 tabs worth of incidental state into my working mind just to get any work done at all, but I greatly enjoy cutting away every impurity and irrelevant detail to forge a creative solution from the ore of a truly difficult problem.
- arikrak 14y agoGreat article. Most students would probably prefer practical programming experience but they get CS degrees since that is all that is being offered at their college. The schools meanwhile couldn't care less about what's practical and they refuse to become a "trade school" so they instead require the students to learn difficult and often unnecessary material. Besides making it more difficult for the students who do succeed, it ends up scaring off many people from a career in software development all together. I think its time for some disruption in the education system...
- JimboOmega 14y agoI can't tell you how much I learned on the job vs. what I learned at school. I don't think the difficulty barrier is the issue. The issue is the code you write out of school. Your sense of style is driven by the fact that the TA would mark you off if you didn't write a comment before your function. Your experience working with other developers is confined to that one terrible semester long project with the one idiot and the other guy who wouldn't do anything until the week it was due. I don't mind so much that I had to learn QuickSort every year for 6 years or so. I do mind that I left school not really grokking a thing about object oriented notation. I left school thinking objects were nice and they could have methods, and you could create other objects that got those objects for free - maybe some sort of polygon class with subclasses "square" and "triangle". But in practical terms of course it was one huge main() function for most of the "hard" problems they had us solving. I understand not wanting to be a "trade school". Computer science is harder than that. You want people who can understand big-O notation. But teach them how to code, even just a little bit.
- wissler 14y agoFeynman had it right: http://www.youtube.com/watch?v=lL4wg6ZAFIM http://www.youtube.com/watch?v=lL4wg6ZAFIM
- Peaker 14y agoI agree it's more of a mathematical discipline than a science. But it isn't just "studying man-made creations". It's about studying computation in general. Not just man-made machines that compute.
- tensor 14y agoComplexity theory is based on the idea of a turning machine, a man made thing. Mind you, information theory, which is often considered computer science, certainly applies to nature itself. Of course, it would be easy to claim that information theory isn't actually computer science. Personally, I consider most of computer science more math than science. In fact, I sometimes tell people I do math! (This is a great way to avoid further questions at borders or awkward parties.)
- reitblatt 14y agoNot really. Complexity theory deals with many different forms of computation, from Turing Machines to RAM models to circuits to quantum computers. These are all particular concrete artifacts that we use to study the fundamental notion of computation itself. Saying that complexity theory studies "man-made things" is like saying that chemistry studies man-made molecules. It's technically true, but it confuses the methodology with the object of study: studying particular chemicals vs the underlying laws governing them or particular models vs the underlying laws of computation.
- jes5199 14y agoa Turning machine is not a man-made thing! Turing-complete systems exist in natural reality, and a the Turing machine is just a way to explain them.
- tikhonj 14y ago
- tseabrooks 14y agoSo, I agree with this article in spirit. Lots of programmers could've benefitted from a more programming centric approach rather than a CS approach. However, this bit gave me pause. " I cannot tell the difference by watching them develop software." I can't disagree with this more. While this may be true of students who were middle of the road students in CS programs. I can't definitely tell the difference between people with a formal cS background and those without in my daily work. I work with a handful of extremely talented self taught programmers but there is definitely a difference between the way they attack problems and think about coding versus the CS folks. Not to even mention the programmers I've worked with who have EE degrees. Those guys think about things and code in an entirely different third way. All of these people / approaches are necessary... and none of them are better than the others... but pretending like they don't do things different because you want to feel like you don't need a CS degree is disingenuous.
- gnaritas 14y agoI'm curious about what you think those differences are, and how you think it hurts or helps.
- jerf 14y agoIt is hard to answer this because a lot of the trite answers are indeed false. A computer science student may be more able to tell you whether an algorithm is O(n^3) or O(2^n), but the normal (and experienced) programmer will be able to tell you either is "slow" and fix it just as quickly. But there is a style of thinking that can come out of a study of computer science that can be very difficult to obtain on your own, and enable you to build larger and better systems than all but the very, very, very best of self-taught programmers, and while it's hard to put that difference into words, it's mostly the study of maintaining invariants in the code from both a theoretical and a practical standpoint. Or, if you prefer, a way of thinking that helps create and enforce a mathematically-strong form of conceptual purity in your code. Those who don't have this background, and I very much include people who took the courses but just sort of skated through without absorbing anything, will often have problems with any API I create that requires certain constraints, such as being careful at what point they access local information vs. remote information. Their use of the APIs will be sloppy and hacky, because they don't really understand how they work or what they are for. The constraints I am thinking of are purely technical, a particular server/client split, so when I say you can not do X it is not merely me being an academic prick, it is because it is actually impossible to do X because at the time your code runs you are literally in the wrong place. Explaining this fact is easy, but explaining how the system conceptually wraps around this constraint and works the way it does is a challenge. And APIs designed by such people, while they may get the job done, tend to be very brute force (for lack of a better term) and to lack any sort of firm foundation, such that the moment a requirement even slightly changes we have to make massive (and often hacky) changes to them. Unfortunately, it is impossible to provide examples in the scope of a single post, because all small examples will not show the issue. It's a larger pattern of issues that tend to start interacting with each other, which is where the real problems emerge. It is also the case that a proper path chosen through a computer science program will take you through some eminently practical theory that will make you a vastly more powerful programmer, and is very hard to pick up on your own. By far the biggest example of this is compiler theory. If you are currently in college and still have the opportunity to take your local compiler course, take it. I don't write very many "compilers", but I have now written quite a few "interpreters" and it has enabled me to complete projects that could not have been completed any other way. Getting a formal grounding in signal processing is also a good idea, that one can be hard to pick up later and has surprisingly useful intuitions for a lot of high-speed networking tasks. A formal grounding in networking can be good, though a lot of courses unfortunately seem to just march through TCP and the OSI model, which you could relatively easily just read about. The fastest way to obtain this basic understanding if you are a good programmer but lack the formal education is one of really, honestly working through SICP (and not just reading it), or becoming fluent in idiomatic Haskell, with special concentration any time someone talks about "enforcing invariants via types". (Personally, I believe Haskell has completely supplanted Lisp as "the language to learn to expand your mind even if you have no intention of using it", but be sure you stick with it for a bit. Learning how to string together a couple maps and a fold is not where the interesting stuff is, it's what the interesting stuff is made out of.) Also, break yourself of the subconscious idea that academic === useless. As someone who tends to straddle the border I will completely agree it isn't all useful, but it isn't by any means all useless either. And just let me reiterate as my closing point that it is absolutely possible to go through even a very good Computer Science program and fail to absorb the useful lessons it has. Presumably these are the people claiming it's "useless". I have to admit I tend to not have a high opinion of people who managed to go through a solid program and come out with nothing. (There are also some complete wastes of programs, so YMMV.)
- pnathan 14y agoIt's worth noting that a sharp high schooler can learn to program - many do. It's a rare, rare high schooler that can learn how to use computer science. Most CS grads don't. And we wonder sometimes why our software is so cruddy.
- lrem 14y agoWell, a sharp primary schooler can too... Bah, my first CS teacher claims now that it's crucial to start in primary school if you care about getting anywhere in IOI.
- tikhonj 14y agoI don't think it's crucial to start early. Rather, there's a correlation--the sort of person to become a really good programmer or really good at CS is also very likely the sort of person to start programming at an early age.
- khyryk 14y agoYou make it sound like one needs to be Michelangelo before they can even attempt to.
- kateray 14y agoUpvoted just for the title. C'mon, value judgements of CS vs programming aside, there needs to be a broader awareness of the difference between the two.
- andyjohnson0 14y ago“Computer science is no more about computers than astronomy is about telescopes.” - Edsger Dijkstra
- flyhighplato 14y agoI agree that modern "computer science" educations often don't teach enough to allow you to make great software, nor enough to open your eyes to the grander concepts. But you can't take that to mean that there is some subset of concepts that are useful to you and that this is all you need to know to hone your craft. I do not like these strange lines in the sand that are drawn between engineers and scientists. These distinctions are artificial and a curious mind shouldn't be trapped on one side or the other.
- tomstuart 14y agoI agree that a lot of people only need to learn how to program, but I find computer science genuinely fascinating and mind-expanding, so it's a shame that more programmers don't feel like they're able to access it, either because of unfamiliarity with formal mathematics or a justifiable aversion to the "category theory or GTFO" attitude. <plug> Which is why I'm writing http://experthuman.com/computation-book http://experthuman.com/computation-book. </plug>
- zerostar07 14y agoI have always considered computer science to be information science and be a part of mathematics and not a separate science. But then again, as a physicist i might be wrong. It's not meant to be diminutive at all (i am after all a programmer) but i consider programming to be a tool, like maths (and consider the two to be inseparable).
- tomstuart 14y agoMathematics ("the systematic study of quantity, structure, space, and change") and computer science are both formal sciences (http://en.wikipedia.org/wiki/Formal_science http://en.wikipedia.org/wiki/Formal_science). You can always broaden the definition of mathematics to encompass all formal sciences but it's useful in practice to be able to differentiate them: a mathematician is a different thing from a computer scientist, even if they both spend all day pushing symbols around inside imaginary formal systems instead of predicting and measuring the physical universe.
- SiVal 14y agoI really wish we in the English-speaking world would stop calling it computer science and call it informatics, as is done in some parts of the world. Linear algebra, when applied to any practical problem, is almost always done by computer, yet linear algebra isn't called computer matrix equation science. The terms linear algebra and informatics make it clear that these are mathematical fields that can be studied for their own sake or as tools for practical applications in other fields. People who majored in informatics would study such things as information theory, approaches to AI/machine learning, models of human cognition, communications (as in signal/noise, data compression, etc.), and so on, and would undoubtedly be required to take programming classes, where programming would be considered a tool to help people learn informatics. People who majored in programming (wherever that was done, including industrial training and apprenticeships), would be required to take some informatics classes, where informatics was treated as a tool to help them learn to be better programmers. Just changing the name to informatics would go a long way, in my opinion, toward clearing up the mess. Employers who demand CS degrees as if the degree meant "better-trained programmer" might think differently if they were called informatics degrees and stand in contrast to programming degrees (or certifications) that emphasized practical industrial software dev. And informatics departments would be freed up to be a more general resource to more than just programmers.
- raldi 14y agoIndeed, don't call it computer science unless you're making computer hypotheses that you then test via computer experiments, using the computer scientific method.
- JoshMock 14y agoGreat article. This expresses better than I ever could have at age 20 why I quit my CS degree since I already had a job. At the time, the university was experimenting with a "software engineering" degree, but it was new and not yet accredited so it was too early to know if it was worth it.
- sakopov 14y agoWhen i was in university majoring in Computer Science i had about 5 programming classes in all 4 years of school while the rest were theory, applied statistics and mathematics. So to call it "computer programming" is a major overstatement to me.
- adestefan 14y agoThis depends heavily on the school. When I got my CS degree from a liberal arts school in 2002, my experience was similar. I had lots of discrete math, linear algebra, data structures, algorithms, and language theory courses.
- tikhonj 14y agoThis definitely varies per school. At my university, almost all of the CS classes involve a significant amount of programming. (For reference, all the EE and CS people have one major.) We have a slightly weird structure: everybody takes the same intro courses but then you can do whichever advanced courses you like. So this means that everybody (even pure EE people) get programming courses going from Scheme (SICP) to assembly. (And the CS people like me also have to do a bunch of EE.) Then, most of the advanced CS courses all involve a healthy amount of programming. The only exception is the algorithms/theory sequence, but most people don't do all of it and everybody (except EEs) do some other programming courses as well. I think the main difference is that the program I'm in is part of the engineering college of a school that takes engineering rather seriously.
- alan_cx 14y agoHere in the UK, when I did my Computer Science degree, about a third to a half was programming. The rest of it was basically hardware and mathematical type theory. There was more but the point is, it covered computing in the whole. How CPU's actually work, how data is organised on a disk, what is actually going in in CAT5 between cards, etc. AI, Databases, servers, etc. The was another course, CS Software Engineering, or "programming" for the rest of us. They did our programming stuff, and then some. The two courses sort of forked. Programmers did more programming, we did electronics, hardware etc. Funny thing was, the CS students became better programmers than the CS-SE people did. I think it was because they understood computers, and not just programming. Next odd thing was that the CS guys often become programmers, and the CS-SE guys ended up in support roles. Even when the CS-SE guy were programmers, they worked in herd like environments, where as the CS programmers ended up on some very interesting projects, like avionics. Later on, when I did some support roles, I found that the programmers knew less about computers than secretaries. Web designers/coders were worse. Not saying this is any sort of trend, and I did do my degree 15 odd years ago. But I found it interesting.
- antoko 14y agoWould be interested to know the course requirements for the CS vs. CS-SE If they had more relaxed A-level grades for the CS-SE students (or it was under-subscribed and filled through clearing) then the students on the course were just a lower standard of student rather than the course itself being deficient.
- UK-AL 14y agoComputer Science is neither about hardware. I built a basic CPU, but i'd class that as digital electronics. Building a a very simple CPU isn't really that hard either.
- deleted 14y ago[deleted]
- zeteo 14y agoThis is practically a high brow version of "math is hard, let's go shopping": hash tables are hard, let's use java.utils. Yes, you can write a lot of programs with a few primitives you've learnt in high school and some random bits of practical wisdom you've picked from co-workers. But you're horribly limited as well. (To pick a simple example: if you don't understand how hash tables work, then you probably also use naive O(n^2) algorithms where O(n log n) is possible with little extra effort.) It's a personal decision to stay this way, but it's quite awful, for other people who may look up to you, to quash their interest to become more educated by proclaiming higher knowledge is "dull" and useless.
- jeffdavis 14y agoWhile we're at it, why is it called Computer Science? I think "Computational Mathematics" or something would make more sense.
- sn6uv 14y agoComputational maths (research area of mine) is its own field, and is very different to computer science. A introductary (undergrad) computational mathematics course at my university covers; numerical solutions to PDEs, Inverse problems, Regularisation problems, numerical optimisation etc.
- jeffdavis 14y agoI should have looked for a name conflict first, I suppose, but my point is that "science" doesn't seem like the right word to describe most of CS. I'm not saying it's incorrect, but it just doesn't seem to fit well.
- qznc 14y agoIn Germany it is "Informatics" a portmanteau of "information" and "automatic", since the field is about automatic information processing in general.
- badhairday 14y ago"Developers will need some theory, and I'm painfully aware, too, of the degree snobbery that most employers harbour. So I propose that the right course would be a 5+ year apprenticeship with part-time degree study - CS in the classroom 1 day a week, software development in the office the other 4." I disagree with this statement. My program at school supplements 6 months of formal learning with 6 month long internships. I don't feel like 4 days a week is enough to get the benefits of working to supplements formal learning. I defiantly need 6 months in a job to learn something valuable, and towards the end of my internships is where I feel like I've learned enough to contribute just as much as any of my teammates and coworkers can.
- losethos 14y agoHiring based on IQ is fairest. God says... Though baptism once Wills selves time worship nurse blamest oops ecclesiastical whereupon sinking theft's witness arranged filth stores determined sickness might instance harmonious blessings Guatemala regeneratedst General quiet quicken follows feeds Apostolic God says... 11:11 And they smote all the souls that were therein with the edge of the sword, utterly destroying them: there was not any left to breathe: and he burnt Hazor with fire. 11:12 And all the cities of those kings, and all the kings of them, did Joshua take, and smote them with the edge of the sword, and he utterly destroyed them, as Moses the servant of the LORD commanded. 11:13 But as for the cities that stood still in their strength, Israel burned none of them, save Hazor only; that did Joshua burn. 11:14 And all the spoil of these cities, and the cattle, the children of Israel took for a prey unto themselves; but every man they smote with the edge of the sword, until they had destroyed them, neither left they any to breathe. ---- Commodore 64? God said 640x480. Higher values are impossible without GPU support -- there's not enough horsepower ever with 8 cores to do more than 640x480@60fps. God says... incredible retire Led listening presides lessons inclined plain subtle gross hey_thats_right lashest comforted corner electronic appeareth tears scanning guppy sweetnesses intent following place asterisk you_are_my_sunshine climate concerning hateful lifted potentially Had rebelled rais'd cultivated rush unholy raise slumin thunder You_can_count_on_that sickly blesseth farther could Louisiana thirdly ever led desert overpass oppressed distributed mourners arrogant Who mget talent FTP boundary forsaking army thank madest appropriated pressed whatcha_talkin'_'bout deep composing evaporates wear doctrine encumbrances Shine blindness travailing pitying themselves gross straightening kingdoms proved Body then pick_me_pick_me Manichees' medicine I_was_sleeping purest gainsayer freeman despair desiring mockery limbs Faithful forsook past slackened talking feigned sensation talk_to_my_lawyer discoursed robing Terence stretched wavered cogo Instructor tabernacle ascension returns protesting nasty desperate propound
- dons 14y ago> the UML meta-meta-model that's not computer science; that's software engineering "theory". Algorithms; data structures; type systems; however ...
- vbtemp 14y ago#1 (My Ad-Hominem Attack) Who is this guy? Why does he go on to trash comp sci if he never studied it? #2 "Of all the mathematical sciences, computer science is unquestionably the dullest. If I had my time again, despite discovering just how much I love writing software, I still wouldn't study computer science." I stopped reading after this point. Why does he state as a matter-of-fact that computer science is unquestionably the dullest? It's actually quite captivating and quite profound. Cryptography, machine learning, computability theory - all leading ultimately to the question of what, exactly, is knowledge and what can we know. I can't stand the broader attitude of this, which essentially boils down to "I'm a hotshot programmer therefore anything academic or computer-sciencey is stupid". A lot of people in general could be a little more humble and recognize the fact there's a lot of things that they don't know they don't know.
- SoftwareMaven 14y agoStarting with your ad hominem, I think you took exactly the wrong things away from this article. Regardless of his writing style, his points are dead-on: 1. Computer science doesn't teach programming (with the corollary that computer scientists specifically don't want to teach programming). 2. Most people going into computer science want to learn programming. 3. Many people get fed up with the rigors of computer science (because they recognize it isn't teaching them programming) and move on to other pastures instead. I've always believed that there should be a "Software Engineering" curriculum in the engineering department and a "Computer Science" curriculum in the math department. That we blur the lines hurts both fields, as programming students demand more programming in CS, at the expense of the underlying theory; and math students demand more theory, at the expense of being able to actually code up a solution. At the end of it all, though, there is a strong value for some computer science in all programmers. It is amazing how often solutions get re-invented, though it happens far less now with the combination of open source and Google.
- alexsb92 14y agoAt the university that i attend (University of Waterloo, Canada), we actually do have a Software Engineering program which is part of the Engineering department, and a Computer Science curriculum which is part of the Mathematics department. The SoftEng degree owners can even qualify to become professional engineers. I'm also 99% sure that the two degrees are also common at quite a number, if not the majority of big technical universities in Canada.
- ank286 14y agoTo a computer scientist, programming is merely a tool to help bring their computer science ideas to life. Writing a bunch of APIs and calling them will only take you so far. After a certain point, theory will prevail because math (computer science is applied math) is the truth. Also the "computer programming" major is called Infoscience majors at the top engineering schools, those students are laughed at, you don't have to be smart to grind through those classes ie you don't build mental toughness towards theories.
- Morcane 14y agoIf 'hardcore' CS students laugh at others because they 'are not prepared for mental toughness' (el-oh-el), they're not really smart (CS) students.... Such arrogance in today's youth, it's astounding.
- scott_s 14y agoI agree with his main point, that we should have an entirely separate "software engineering" major which would stress the process of software development and prepare students for being professional software developers. Then, computer science programs would mainly be for students who wanted to do research in computer science - much like the difference between various engineering disciplines and physics. But he comes dangerously close to the "computer science is math" notion that assumes CS is just theory. It is not. I wrote an entire blog post in response to this (surprisingly common) sentiment: http://www.scott-a-s.com/cs-is-not-math/ http://www.scott-a-s.com/cs-is-not-math/ HN discussion: http://news.ycombinator.com/item?id=3928276 http://news.ycombinator.com/item?id=3928276
- mahyarm 14y agoMy university had a software engineering and computer science majors. Practical difference was that the SE majors took the standard 1st & 2nd year core engineering classes, which meant more physics and DSP classes. After that both majors took mostly the same classes. CS majors took a bunch of SE classes and vice versa. I could theoretically go back to school take about 8 classes and get a SE major.
- dxbydt 14y agofwiw, an opposite take, from a decade ago. at my cs pgm, the assistant professors were supposed to make a presentation on day 1 so the grad students could make an informed decision which prof to work with, which subjects to sign up for. the software engg prof was a glib, entreprenurial hotshot who said "my students have been placed at netscape, sun, microsoft, oracle". he talked about industry partnerships, internships, 1000s of lines of production code, maintenance, unit tests, refactoring... the db prof said "i have personally placed all my students in oracle". he talked about rdbms, schemas, superkeys, boyce codd normal forms, how "everything was ultimately data, so you'll never be jobless if you became a dba". the algorithms prof was a shy lanky dude who went straight to the blackboard and wrote "computers are to computing what telescopes are to astronomy". at that point none of us knew who dijkstra was, so we just looked at each other like "huh?". he then turned to us and said "99% of cs is about searching and sorting. sort algorithms. search algorithms." then he drew a table which listed performance of quicksort, shellsort, heapsort, insertion sort, and two algorithms of his own invention. he talked about Big O notation, theorems, discrete math, taocp. our heads were spinning, and when he left there was a huge collective sigh of relief. at the end, the student breakup was like 49-49-2. So only 2% of the class signed up for algos. Like most indians, I come from a poor household & my main concern was coin. So I signed up for Software engg. After 1 month, I dropped the course and went crawling back on my knees to the Algo prof, and begged him to take me on. That single decision changed my whole life. In that 1 month, I had found out something about myself - that I was a royal prick. I was personally not cut out to do scut work.I had zero interest and respect for maintenance, unit tests, requirements & specs, UML modelling, refactoring, waterfall method, agile, kanban...I found that whole discipline filled with unproven subjective airheaded garbage, essentially a fad. To this day when a recruiter mentions the word "unit tests" on the phone, I just hang up. Just pure instinctual reflex. It takes all kinds...
- j-b 14y agoDegrees don't matter so much. Can you learn? Are you smart? Can you ship good code (given enough training)? Real programming skills comes through experience and domain knowledge. I am less interested in the educational background of developers that I've hired than I am of their future growth potential which has more to do with personality than IQ.
- bluekeybox 14y agoThe rift between CS and SE is unfortunate. To use Greek terms for different kinds of knowledge, computer science is logos (reasoning from first principles). Software engineering is metis (practical, local knowledge). They complement each other. I suspect that the only reason there is such a rift in the first place is because the sources of funding for people employed in CS and SE are different. CS is funded via (predominantly) government grants. SE, clearly, is typically funded privately. Like China commenting on diplomatic rows between North and South Korea, I'll say: both sides need to learn how to work with each other.
- kelvin0 14y agoBasically, we should only learn the 'real' programming skills and forget that the whole state of computing technology rests on the shoulder of giants who created these algorithms and did all this research for 'real programmers'. Oh, we certainly don't need CS, because it gets in the way of writing code. Seriously, I understand what the author is trying to convey, but IMHO he goes too far on the bias against CS. It is a serious handicap to program anything worthwhile and using APIs and frameworks without understanding (at least to some degree) what they do ... my .2 cents
- kelvin0 14y agoBasically, we should only learn the 'real' programming skills and forget that the whole state of computing technology rests on the shoulder of giants who created these algorithms and did all this research for 'real programmers'. Oh, we certainly don't need CS, because it gets in the way of writing code. Seriously, I understand what the author is trying to convey, but IMHO he goes too far on the bias against CS. It is a serious handicap to program anything worthwhile and using APIs and frameworks without understanding (at least to some degree) what they do ... my .2 cents
- jes5199 14y agoI interview a lot of people who want programming jobs. What I find is: almost nobody can program, and almost nobody knows basic CS 101 data structures. It does not matter if you are a self-taught programmer with ten years of experience in the best companies, odds are that you cannot solve a trivial coding exercise. It does not matter if you have a masters degree in Computer Science, odds are that you cannot successfully build a tree structure. I have no idea how these people keep their jobs or how they graduated, but this is the norm. People who can do CS at all, and people who can code at all, are both rare. Or at least, are rare in the pool of people applying for work.
- FreebytesSector 14y agoIf a person is a self-taught programmer with ten years of experience working in a good company, then you are obviously programming for that company in a sufficient capacity even if you are unable to solve puzzles offered up by human resource managers that found them on Google by typing in "Questions for Programming Interviews." Programming is not about being able to solve brain teasers. Programming is about being able to deliver quality code. If the language handles most of these data structures for you or if you have used them before without actually considering it, then you obviously know their importance even if you cannot put it into words under stress. Do not degrade people that cannot repeat verbatim some useless information they read in a book or solve brain teasers in minutes (unless they had already seen those puzzles.) Being able to work hard, clean, in a team, and supply a functional product on time according to specifications are the most important traits.
- papsosouid 14y agoYou are the only one who said anything about brain teasers and puzzles. The parent lamented the fact that so many programmers can not solve basic programming problems. Fizzbuzz for example. If you can't write fizzbuzz, you are not qualified for a programming job. It has nothing to do with computer science, or brain teasers people googled, and everything to do with writing actual working code to accomplish a trivially simple goal.
- csallen 14y agoThe reality is that there are many different responsibilities that, confusingly, fall under the singular title of "programmer". If you're the tech cofounder at a startup, you're probably focused on building a new product that customers love from scratch. You're going to need a very different set of skills and abilities than, say, Microsoft engineer #10000 who is maintaining some old codebase. Or even engineer #100 at Google who's trying to scale to hundreds of millions of people. Etc. What's weird is that people hardly ever mention these differences. They just say things like, "All programmers should know advanced algorithms"... or data structures, or compilers, or UX design, etc. Even if people/companies don't say this explicitly, they say it implicitly when they quiz for specific material in interviews for jobs that don't rely on that type of material. If you're exceptionally good at what you do, but you constantly hear that you're inadequate because you don't have this skill or that knowledge, it's easy to doubt yourself. But you shouldn't. The fact is there's nobody who knows all of this stuff, or even most of it. And there's no job that's going to ask you to do most of it (I say this as the sole tech person at a startup where I have to do sysadmin, back-end coding, front-end coding, and design single-handedly). Just find what you love and get good at it.
- milesvp 14y ago>Time spent learning the UML meta-meta-model and Object Z >is, for 99.9% of developers, time completely wasted I thought it was interesting that the poster used these examples for CS. I didn't take a single course at university that dealt with either of these topics. Everything I dealt with in comp sci was algorithms & complexity theory, coupled with a smattering of, "this is how computers actually work". Far as I can tell op is talking about computer programming subjects, and not computer science subjects.
- btb 14y agoIMO CS is necessary to advance the state of the art. And while I completely agree that many computing/programming tasks currently do not necessarily require a CS degree, there is no guarentee that will always be the case. As for my myself, I studied roughly 3 years of computer science before I dropped out to work full-time, so I only have a half-finished bachelors degree. I wont say I regret it, because the last 5-6 years of being partner in a startup and earning a good pay-check have been fun. But I very much do regret not being able to completely grasp all the new interesting research papers that are coming out. Nothing is more frustrating than reading a research paper, and knowing enough to be able to grasp that this algorithm could improve some part of your system, but then being unable to decipher/implement it, because one have forgotten(or not learned) parts of the mathematical notation/background. In other words being able to see the solution, but the solution being juuust out of your grasp. I hope down the road to be able to compensate for this problem by hiring smarter guys than myself that DID finish their CS degree :) Also another benefit of studying CS is that around year 2-3 you will be introduced to some subject matter that I at least personally am pretty sure I would never have heard of otherwise. I found stuff like operations research and integer programming very interesting. I havent yet have had opportunity to use any of it in the "real world", but its nice knowing whats out there, who knows it might come in handy a few years down the road in some other venture.
- nivertech 14y agoWhat's wrong with "Software Engineering"?
- cliftonk 14y agoContrarian take on the issue: I wrote a Quake 3 mod in C++ (directional damage modification, server/client magazine+reload, and a few other things not-so-difficult things) in high school around age 17. I then did a CS undergrad at a top 6 university. I learned more about programming writing that mod than my combined experiences at school.
- jarek 14y agoYep, because programming and computer science don't have a lot of overlap. But I bet you could have written a mean linked list after the CS degree.
- joe_the_user 14y agoI've studied theoretical math and computer programming. Coming from theoretical math, I feel like the reason that computer science is dull that as a part of math, it is mind-bendingly difficult. The almost no "substantial" theories of computer science because they would have extraordinarily encompassing abstract statements about what is possible to compute, essentially to even think about. P =? NP is a good example. Unlike other Millennium Math Problems, there has essentially been no positive progress on the question. The only theorems are about how this or that tool won't help us. And P=? NP is a simple, even "obvious" statement from the right standpoint. Essentially, most of the generic theories of CS are constructions to show something either possible or impossible. I'd wonder if you could teach CS as something like the ragged edge of mathematical logic. Might make it authentically interesting ... for a few people but it would probably wind-up being less practical. Sigh...
- swa14 14y agoCS to a programmer is no more "theoretical" than anatomy is to a surgeon.