I look at this from the other side as well. I've worked with brilliant people with ivy league CS degrees who wrote much messier and less maintainable code than me, an autodidact designer/js dev with 1.5 years of experience. Maybe I'm wrong, and there was something in their code that I wasn't seeing, but I don't think so.<p>There can also be a bit of an attitude, like the person is thinking "of course this is good, I went to Stanford". But maybe that's my imagination. Another explanation is that these people are just so good that they are able to read messy and convoluted code no problem, and us mortals need to step up our game.<p>On the other hand, these people would easily be able to reason about complex performance and security issues beyond me. I think that the hardcore CS issues are a science, while writing clean code in a web framework, browser, and API design is more of a craft.<p>If you hire too many computer scientists, your code base could be full of fascinating technical tricks, but creaky and hard to work with. Too many craftsmen, and you'll get stuck on simple problems. It's a balance.<p>EDIT: Downvotes? Please explain. Perhaps I am not able to fully comprehend the issues at hand.
Speaking from experience, this is true. You also don't really know when true CS is useful until you run into it.<p>I graduated with the equivalent of a minor in CS. When I started coding for an web-based gaming start-up in 2007, it was mostly irrelevant. You don't need a CS degree to learn Ruby on Rails, nor is it necessarily useful (beyond your basic intro courses) to have taken CS courses.<p>Flash-forward a year, after we raised our seed round. Our online game had grown in complexity quite a bit, and we found ourselves having to deal with things like complex image rendering, AI, and pathfinding. While it's possible to get a decent grasp of these topics through Google and O'Reilly books, it's definitely an order of magnitude more difficult than figuring out a new web framework. As mentioned before, I only have a minor in CS so my exposure to these topics was minimal, and there were definitely nights where I found myself wishing I had taken another AI or advanced algorithms course.
I've always thought of computer science as a branch of mathematics. To me coding or programming is applied (or engineering) computer science, it's an engineering field (hence the term software engineer). Just like there is theoretical physics (a basic science), and also applied/engineering physics (e.g. mechanical engineering). They are related fields, but specializing in one does not mean you will be good at the other (it certainly helps).<p>The terms coding and computer science do get used interchangeably by a lot of people though, since most may not understand the difference. I've learned to live with it (occasionally I point out the difference, if I think the person misusing the terms actually cared to know).
My 2 cents on the computer science degree versus coding... (Full disclosure - I have a CS degree from a large public school)<p>1) Many of the top coders, programmers and data scientists that I know don't have CS degrees. (The top coder I know never finished school. He could move from Assembler to C to Objective C effortlessly, and could do everything from games to operating systems. He wasn't lacking for theory or versatility)<p>2) Despite this, a Computer Science is more difficult rigorous than most non-engineering degrees. Even at open admissions schools, getting a CS degree means being forced to solve difficult problems.<p>3) Because of #2, a higher % of CS majors make good programmers than most any other major. (I've seen English majors make good programmers, but at a much lower %)<p>4) Despite #2 and #3, there are still many unqualified CS majors.<p>5) There is no typical CS programs. Some are very flexible, some very structured. Some have an engineering focus, some are part of liberal arts schools. Some are too narrow, some are not specialized enough.<p>6) A few years after college, your grades don't matter. A few years after that, the school doesn't matter. A few more years and your major doesn't really matter. At that point, it's all what you've done with your time. (Though it can help to say, "I have a CS degree. I used to be technical.")
Fundamentally,computer science = data structures + algorithms.<p>in a data structure class,you learn the basic structures like PODs,structs,vectors and linked lists.<p>in algorithm class,you learn various basic sorting algorithms plus the big O notation and thats pretty much it.<p>Then you will take a few physics classes,then chemistry classes,then maybe calculus one and two,then probably discrete mathematics class,one or two writing class,if you a lucky,maybe a single semester of operating system class.<p>you may learn the basics on haskell in one class,the basic of java in another,maybe assembly in another class and you get your degree.Basically,you will leave school knowing only the basics of a bunch of things but not enough of anything.<p>The above it how it felt to me as a CS major.
I think this distinction is incredibly crucial. There has been so much talk about how a CS degree is useless (and I for a moment bought that garbage as a holder of a CS degree), but it is completely untrue.<p>As you work with more and more people in this industry, you frequently run into people without a degree, or, more importantly, no true know how, as I do stand by the fact that it's not required to have a degree to learn this stuff, who behave as if they are experts regardless of their poor mental model of how computers work.<p>It's important for these people to know what they don't know. Reminding people that Code is not CS is a good way to make that happen.
Yeah, a CS degree isn't suuuper-helpful for organizing a coherent program around a snazzy framework for the latest web technologies. It's for when you need to do something like, oh, "figure out how to upgrade the work-management system so you can move from coarse-grained lock system to a finer-grained lock system with zero downtime." Then you think back to your old courses covering Parallelism and the like, and plan it out.
> Treehouse CEO Ryan Carson declares “A computer science degree is a rip off…I know because I have one.” Perhaps his CS degree was from a college which didn’t have a very good program or maybe his focus has been web development where you rarely need computer science.<p>According to wikipedia:<p>> In 2000, he graduated from Colorado State University with a Computer Science degree<p>I suspect, like with most fields, that the school definitely matters (and that he may not have arrived at the same conclusion had he attended a school with a better CS program)
The first thing anyone in this discussion has to realize is that different schools can have vastly different computing science programs. While there is conceptual similarities between most computing science programs, they can vary drastically in breadth and depth. And what one gets out of a program can also depend on the path the individual student takes.<p>If you feel you got nothing out of your education or that your education was mostly worthwhile, that may not reflect on computing science in general but just of one particular implementation of it.
The value of a degree is what you make of it. I think the most important aspect of college/grad school/etc. is that you have the opportunity to push the bounds of your mind. I spent 4 years in grad school for math at an excellent program, and to most people, it would probably be considered a waste since I use almost none of it in my daily work (programming). However, the value for me has been to push the limits of my ability to abstract concepts, and see how other similar high level minds perform.
When I was 16, I was obsessed with 3D graphics (hilariously primitive back 30 years ago). I learned programming to create , rotate, translate, and shade objects in 3D space. I learned computer science to understand how you manage vector lists, matrix math, and strange recursion algorithms. I learned that programming is computer science applied. Sort of like how math is a tool to apply calculus to real work problems. One won't work without the other. Saying "code != computer science" is a misrepresentation of the symbiotic process that's going on in the human mind. I think a fair statement is: programming(code) is the first level of computer science knowledge.
Coding / programming is <i>part</i> of computer science. CS includes maths, electronics, micro electronics, logic gates, how hard drives work, and what not. CS is about computing and computers as a whole. So, coding is only a part of it.<p>In fact, I see this title as the wrong way round, it should be: computer science is not coding. Too many people think codes know all about computers. In my experience, they dont. They have a limited skill set. Just like support staff who usually cant really code.<p>Having a CS degree myself, I have always felt at an advantage over people who, for example, only program but know knaff all about hardware, OS's, servers, etc, and support people who only have things like MCSEs, and don't know the low level fundamentals.<p>For me, having a CS degree makes me a jack of all trades, all be it, master of none.
The truth is that the world needs a lot more software engineers than computer scientists. Yes, there are a lot of hard problems that are best solved by government or academic research, but there is a lot more software eating the world. And to develop the vast majority of that software, you don't need much academic CS knowledge.<p>I know, because I have a mastered in CS and considered getting my Phd. I decided to join industry instead, because I wanted more money. I hardly use any of my CS knowledge on a day to day basis working as a web developer. Yet I make $160k in my mid 20s while my 60 year old professor has never cracked 6 digits... It's sad in a way, but to each his own I guess.
A 4 year degree is only valuable if you actually had the mental maturity to take advantage of it at the time (I didn't). Unfortunately, that doesn't seem true with the majority of the kids graduating from high school. They see it as just another hoop to jump through.<p>If someone told me now that I can spend 4 years just learning things, have access to intelligent people, and great resources/facilities without worrying about a gap in my cv, I would jump at that chance.<p>I am going to hacker school in Feb, so hopefully it will be kind of like that. Albeit for a much shorter amount of time (3 months).
Like many things in programming, it all boils down to the samn damn arguments that musicians have. Sure, you don't <i>need</i> a music degree to be a musician. But I'm damned proud that I have one, because it's helped me advance the one thing in life that I love doing more than anything else further past most people my age. I have a B.M. in Jazz Studies with a concentration in Vocal Performance.<p>The only way you can reasonably believe that college was "a rip off" is if you didn't have ANY fun that whole time. If you can honestly say that, then I am sorry. You allowed a part of your adolescence become robbed by people who told you what to do. But if you had even an ounce of enjoyment throughout college, if the idea of learning computer science made you smile even one bit, then it was absolutely not a rip-off or a waste of time.<p>"Your time was not wasted if you were happy" - John Lennon
This is like saying speaking fluent English doesn't make you a genius, and being a Genius doesn't mean you will speak fluent English.<p>Having a CS degree won't make you a genius, or guarantee you write beautiful code.<p>There are 3 factors at play. Brains, Fluency, and Theory.<p>If you have good theory you won't spend 100 years trying to figure out things people already have figured out.<p>If you have good Fluency you will write like people in that language write. "Your code is very Pythonic".<p>If you have brains you may solve a problem no one thought was possible.<p>I don't have a CS degree, but I'm a "grey beard" as a result I have good theory. I don't speak Python as a first language, or the language I think in, so I don't have good fluency. As a certified Genius I have a big brain and often solve things people didn't think were solvable. So I make up for a lack of fluency.
This. If you're judging Computer Science by coding, you are making a huge mistake. Computer Science does not teach you how to code. I remember the only time my university teach me how to code is during our introductory course. Computer Programming 1. And that's it. You're on your own in your coding.<p>Computer Science is more than just coding. It involves graphs, complexity, math, theories, and much more. Which is a lot. And is hard.<p>Like math, anyone can do math. But not anyone can be a mathematician. Anyone can code, but not anyone can be a computer scientist.
I agree that the distinction needs to be made, although the exact difference between the two, as many of the comments have already stated well, is hard to define. A good post.<p>Nowadays academia is under ever increasing pressure to produce fit-for-work experts, and seen from such a perspective it really can look pointless. I personally strongly disagree with such a view. IMO, it should appear to be pointless! It should broaden your thinking and introduce you to the cutting edge of the field, not just specialize you for a certain line of work. There should be programs which will do only such a specialization, but a full-on CS course is supposed to be more. In the end, how well you will work will depend on a lot more than just the school, but a good school will help.<p>The Law of Leaky Abstractions is, perhaps, a good argument for why it is useful to learn all that theory even though in practice it is rarely needed. Sometimes, you just need to know what is going on behind the scenes.<p>P.S. I always have the feeling that the Dunning-Kruger effect is strongly present in these discussions. The first programmer that I heard claiming that a degree is useless is also the guy who didn't know what a DB transaction is for and when he should use it. It's not a huge deal, we fixed the bug, taught him, and then he knew. But - not knowing such basics, how could he possibly know what else he is also oblivious about?<p>We need good schools to teach us that we don't know shit.
I have a CS degree from a minor state school. It was okay, not as rigorous as the programs of a few friends who went to much more respected schools, but not bad either. I happened to have an excellent CS teacher in high school. Honestly, almost all of the CS I've employed in 15+ years as a professional programmer, I actually learned in high school.<p>Personally, I would advise young folks who are already passionate about programming and technology to either go all-out in a true engineering field <i>or</i> pursue something that will equip them with a very different skillset. For example, if you have programming skills but get a degree in business and focus on accounting, you could easily be the most productive member of your department. Meanwhile, you'd have the savvy and knowledge to spin up your own side business doing software consulting or, say, mobile apps.<p>I would go so far as to say that, assuming you are motivated and already coding and have a decent math background, a CS program isn't worth it unless it's from a really, really good school.
The difference between software development and computer science is the difference between being able to assemble a car from spare parts, and being able to design the pieces like a new engine or gear box.<p>The two skill sets don't overlap entirely. However having the latter generally makes mastering the former somewhat easier.
"So, please, go do that hour of code if you haven’t already. Who knows? Maybe you’ll want to become a software developer, but even if you don’t, it’s worth the effort, and might even be fun!"<p>I need someone to please explain this last bit to me. He seems to suggest that it's pretty easy to become a software developer. This idea seems to be pretty common across hacker news. That all it takes is a little bit of research, and anyone can get a job as a software developer. Is this true? I've been trying to change my current career path from engineering to software development, and I cannot seem to get any conversations started. Does anyone have experience changing their early career paths and how they went about implementing the necessary steps?
Well, it's true. Code is not computer science any more than paint and brushes are artistic paintings or nuts and bolts mechanical engineering.<p>People learn what they learn, formally or informally, and then they either develop a passion for what they learned, or not. Not everyone who studies art can produce artwork most would enjoy, much less a masterpiece. And, in this regard, having encyclopedic knowledge in the field isn't a solution.<p>What I am saying is that it is about the person, not the encyclopedia. Developing artistry requires knowledge, passion and dedication. Knowledge alone isn't the entire equation. Knowledge without passion and dedication is useless, no matter where it comes from. And this might very well be the reason a lot of CS grads falter.
| Also most software has advanced features that require you to do things that use coding skills — setting up mail filters, creating spreadsheet formulas, even styles in Microsoft Word.<p>I've worked with many people who, while presumably listing Microsoft Office skills on their resume, spend time with repetitive tasks in Excel that could be done in minutes or seconds with a formula and a click-and-drag.<p>I've found that the hardest part is finding the best way to tell them that there is an easier way without being condescending or making them feel foolish. I usually go with "Hey, um, can I show you something?" But ideally this opens the window to realizing that you can make Excel (and computers in general) do stuff for you.
If you code and develop in it, you're bound to hit computer science whether officially or informally. Because if you don't, you aren't really coding: you're just staying at your comfort zone and that's no more coding than learning to play a dozen songs with piano and just playing those over and over is not really playing piano.<p>On the other hand, if your background is top-notch computer science you just may suck at coding ― which would be just ok except that I suggest that not many advances in computer science happen unless the dilemmas at hand stem from practical programming problems, after which they can be explained and modelled theoretically and theoretical solutions be devised.
People who claim they'll never use computer science in their job as a programmer remind me of the people who say they'll never need math after school.<p>It reminds me of the old xkcd: you can get by without it, but the fun things in life are always optional.
"[Computer science] is not really about computers -- and it's not about computers in the same sense that physics is not really about particle accelerators, and biology is not about microscopes and Petri dishes...and geometry isn't really about using surveying instruments. Now the reason that we think computer science is about computers is pretty much the same reason that the Egyptians thought geometry was about surveying instruments: when some field is just getting started and you don't really understand it very well, it's very easy to confuse the essence of what you're doing with the tools that you use."
-- Hal Abelson
Do you need a CS degree to become a programmer? Of course not, I don't have one but I can program.<p>Does a CS degree make you a better programmer? Most certainly it will! It will give you an optimal background on which you can build solid knowledge. But you can't be 100% sure about that either.<p>Can you learn everything and more than a CS laureate by yourself? Of course you can, especially today that information (mostly about technology) flows free online. You can order books from amazon (Knuth anyone?), etc.<p>As my genius Math professor once said: "When you come to the oral exam session, I will ask you a question. In 99% of cases, the answer is: it depends..."
True but:<p>Code people, should be open to learn theory when needed.<p>CS people, should be open to understand that writing code is not marginal and takes a lot of time to master.<p>Probably more cooperation would be needed.
My father sent me a link to lifehacker, and was surprised to find I really enjoyed it. I thought it was humourous yet well designed and it explained loops well.<p>The example I tried involved moving angry birds and zombies around on the screen, and it required a bit of thought. It wasn't rocket science, but it wasn't a walk in the park either. This movement will be successful as long as the right resources are available.
I had penned my views on this (very similar!) here a while ago :
Code - It's not just it !
<a href="http://priyankasriraghavan.blogspot.in/2013/07/programming-musings-code-its-not-just-it.html" rel="nofollow">http://priyankasriraghavan.blogspot.in/2013/07/programming-m...</a>
What I learned while getting my CS degree:<p>The physics of microelectronic devices
Machine language
C
Data structures
Sociology
Psychology
Anthropology
Literature
Politics and Activism<p>College is an opportunity to learn. Whether you seize it or waste it is up to you.<p>[edit: just want to add that the OP makes a great point]
Computer science == models of computing. One of those models is language. We can run machines without codes, but with feelings and images. We, human beings, are just complex finite automata with very complex states and meta-states.
I did an undergrad in CS (Columbia) - in retrospect I should only have minored in CS.<p>I'm not sure it's worth the workload!<p>You will have _no_ free time and get reamed in GPA<p>Very math-heavy and the project based classes were brutal.
engineering or applied physics are the correct degrees. i've never been impressed with CS guys. In my time they were washouts from the better degrees.
I think Dr. Nassim Taleb, author of Fooled By Randomness put it the best. Real knowledge is gained from tinkering, trial and error. A degree from a recognized academic institution is largely a social credit that is earned through memorization and the ability to recall and recite those references.<p>I studied Economics, so I had to figure out how to code (still at it) by relying on the internet and experimenting. Doing things that seemed interesting. I didn't study CS because at the time it seemed impossibly hard, so instead I focused on learning by reading books, experimenting.<p>I have friends with computing science degree yet they cannot code or have shipped software. Ironic that they cannot work as a software developer but it's the same reason I feel about my Economics degree (not working as an investment banker as I'd dreamed but thank god). Rather their theoretical knowledge in computing science degree seemed to limit their true potential to realize coding involves a different part of the brain then the ones used to pass final exams.<p>I often find the computing science questions in job interviews puzzling. How does the ability to recite an algorithm from the textbook translate into being able to ship code? How does one learn how to play a concerto by simply reading a book listing instructions and being asked to recite specific pages? It's my belief that coding (in terms of shipping software) is a highly organized and rational form of art. You are writing words but it's strictly limited to what the creators of the programming language have selected. How you form the sentences that the computer can understand really comes from trial and error until you've become familiar with it.