15 ms·
Computer science as a lost art (2015)
- anfilt 8y agoHe calls it a rant, but I would say its just being honest.
- tabtab 8y agoAs soon as higher-level programming languages such as COBOL, Algol, and FORTRAN came out; many clerks in the mid 1960's onward learned programming without knowing about the hardware guts or theory. Thus, the layering of specialties had already begun.
- frostburg 8y agoI'm not that sold on this. Programming in ASM isn't really "harder" than programming in Haskell, it's just slower - it requires discipline, but not the ability to grasp abstraction that some more modern languages need. I think that issues like knowing "how do compilers actually work" or "this thing is actually the halting problem, let's stop" are more relevant than how removed from latches and memory controllers one is.
- supermdguy 8y ago> Programming in ASM isn't really "harder" than programming in Haskell, it's just slower - it requires discipline, but not the ability to grasp abstraction that some more modern languages need. Reminds me of this comment: https://news.ycombinator.com/item?id=17403233 https://news.ycombinator.com/item?id=17403233
- tabtab 8y agoThat story reminds me of a guy who made a CRUD application (tracking, reports, & statistics) out of MS-Excel VBA. I was asked to start supporting it, and did a lot of similar head scratching. Amateur programming can be worse than no automation at times. He wasn't bitter, however; just confused about my assessment about it being time-consuming to support. I had to explain that typical programmers use abstractions to make code maintainable and not rely on our ability to read, well, spaghetti code fast. I've met some programmers quick at deciphering spaghetti code, but I confessed I wasn't one of them. I used the analogy of taking a custom-built amateur car with a custom-built engine to a generic auto-mechanic and expecting them to figure it out as fast as a regular car. That story seemed to click.
- skolemtotem 8y agoAssembly offers just as much capability for abstraction as any other language, and I think that it demands more "ability to grasp abstraction", because you pretty much have to build those abstractions yourself.
- lapinot 8y agoAkwardly, i agree on the facts but the sentence doesn't feel right. Would you agree with this rephrasing: asm is simple in terms of number of abstract concepts needed to define its syntax and semantics (and as far as i know this is good since it's intended as a mother-of-all lingua franca), but of course every language out there is turing complete (and has some mechanism for syscalls); so in the end the only way to build haskell-like abstractions in asm is actually to code up GHC and then code in haskell. Which i wouldn't call at all programming in asm (just like i'm not commuting circuits by typing on this keyboard). Nor do i think this is actually what asm is used for (when written by humans). My guess is that asm is used for programming close to the metal--crucial parts of firmwares, drivers--in situations with simple logic and in which abstraction would actually get in your way (who care about types or functions when you just need to write some values into some memory location).
- tabtab 8y agoI don't necessarily disagree, but typically an organization wouldn't let a non-degreed employee use or touch ASM (fair or not). It looks dodgy from a P/R perspective. I also forgot to mention that many engineers and scientists used FORTRAN and BASIC back then without knowing much about the guts of computers. It's largely why such languages were made.
- j1vms 8y ago> without knowing about the hardware guts or theory. And so it should be (for the vast majority of the HW's users). The better the work done by the people below, the more hermetically with which the abstraction can be interacted from above.
- wrs 8y agoWell stated. I recently went through (the recordings of) MIT’s intro course for electrical engineers, in which somewhere the professor says students may wonder why they have to do all this calculus and learn FET models and so on — in real life don’t you just wire chips together? And he points out that MIT degrees are for the people who make the chips.
- booleandilemma 8y agoIt’s kinda like that Asimov story, Profession: https://en.m.wikipedia.org/wiki/Profession_(novella) https://en.m.wikipedia.org/wiki/Profession_(novella)
- stcredzero 8y agohe points out that MIT degrees are for the people who make the chips. You never know when background knowledge and first principles might come in handy. One of my favorite YouTuber practical engineers has this story about going on a boat trip. The new coffee maker on board was freaked out by the noise from the inverter and kept shutting itself off. A total disaster! There would be no coffee the whole trip. So he turned on the blender while making the coffee, and the coffee maker started working. How did he know? He knew what kind of motor was in the blender, and knew its windings would increase the inductance of the circuit the kitchen appliances, filtering out the higher frequencies put out by the cheap inverter. This guy isn't an electrician. ("Elekchicken") His day job is just to put pieces of "industrial lego" together -- just like how so many programmer jobs now are mainly about gluing libraries together. But he never shies away from knowledge of first principles, and he demonstrates all the time why such knowledge is valuable.
- sheetjs 8y agoBackground knowledge and first principles also come in handy with more mundane work. Arguably our most prominent contribution to OSS (outside of our own projects) was in React. We're credited in the codebase when the approach was used: https://github.com/facebook/react/blob/v16.0.0/src/renderers/shared/utils/adler32.js#L17 https://github.com/facebook/react/blob/v16.0.0/src/renderers... As discussed in the original PR https://github.com/facebook/react/pull/4400 https://github.com/facebook/react/pull/4400 the original checksum used a naive adler-32 algorithm, but with some basic math you can find a much more efficient implementation that eliminates most of the mod operations without risking a hidden deoptimizing overflow. It's not everyday that you get to use your background knowledge, but when you do it feels great!
- fru311 8y agoI would suggest that if someone isn't interested in technical fundamentals, they should consider a degree in human computer interaction and design. The things you can create with shallow technical knowledge continue to become more commoditized, but understanding problems that people have and designing a solution that makes them happy is a good way to create value.
- yontherubicon 8y agoSo, for the dogshed builders among us, what might be the recommended pathway to learn some architecture--beyond the obvious academic options? I'm sure this has been covered to death on HN already, but if anyone has a link bookmarked and feels like sharing?
- avmich 8y agoRead carefully "Structure and Interpretation of Computer Programs" (e.g. online for free), preferably do exercises. You'll get a solid start.
- pjc50 8y agoSICP is a Lisp textbook. This will be controversial, but I think it has little application outside of the Lisp world, however much it is venerated.
- Bjartr 8y agoSICP for python: https://wizardforcel.gitbooks.io/sicp-in-python/content/ https://wizardforcel.gitbooks.io/sicp-in-python/content/ LISP was the medium, not the content
- stutonk 8y agoYeah, it only teaches you about term rewriting, boolean logic, iteration vs. recursion, algorithm complexity, higher-order functions, data structure design, closures, generics, statefulness, environments, mutability, concurrency, stream processing, modularity, interpreter design and implementaion, lazy evaluation, nondeterminism, logic programming (i.e. search/constraint), low level computer architecture, memory models, and the design and implementation of virtual machines, garbage collectors, and compilers. Just a total waste of time unless you're doing Lisp.
- otras 8y agoAlong those lines, the accompanying MIT class (MIT 6.001 Structure and Interpretation, 1986) is available on YouTube[0] and MIT OCW[1]. It's worth watching, if only for the following: "I'd like to welcome you to this course on Computer Science. Actually that's a terrible way to start. Computer science is a terrible name for this business. First of all, it's not a science. It might be engineering or it might be art. We'll actually see that computer so-called science actually has a lot in common with magic. We will see that in this course. So it's not a science. It's also not really very much about computers. And it's not about computers in the same sense that physics is not really about particle accelerators. And biology is not really about microscopes and petri dishes. And it's not about computers in the same sense that geometry is not really about using a surveying instruments." [0]: https://www.youtube.com/watch?v=2Op3QLzMgSY https://www.youtube.com/watch?v=2Op3QLzMgSY [1]: https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/ https://ocw.mit.edu/courses/electrical-engineering-and-compu...
- User23 8y agoGermane meditations from the pioneer of kvetching about the standard substandard approach to programming: https://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD1036.html https://www.cs.utexas.edu/~EWD/transcriptions/EWD10xx/EWD103...
- NTDF9 8y agoI've worked with plenty of competent developers who don't have degrees. Most crud jobs don't need degrees anymore. But, any serious business that's going to churn a lot of data, needs fast pipelines, needs to invent entire new markets or ideas will heavily rely on people with patience and training in scientific process.
- stcredzero 8y agoIt means that a person can get the little things done while knowing very little. But it also means that this person probably will never learn enough to get the big things done. To be honest, I get secretly frustrated with the lower-level people who now exist in giant hordes. (I rarely tell anyone that.) To me, they are like people who have decided to learn 5% of their field in order to get a few things done, have some fun, and make a living. These people use tools to create little applications for everyday use. But remember: The tools themselves are also software. But they are a level of software far beyond anything these people could dream of creating. They use languages, editors, compilers, and operating systems; but they don't have the first clue about how to create any of these things or even how they really work. The most disturbing thing to me, based on interviews I've conducted, is that this seems to include some large fraction of people graduating with a Computer Science degree from supposedly top tier schools with high GPAs that supposedly mean something. If you want to make really interesting exciting things that have never existed before, if you want to make a tiny little difference in the industry and change the world just a little bit, then you do need that degree. If you want to make the tools and libraries that the lower-level people use, you do need that degree. The tools and libraries aren't sentient AI yet. If you want to use the tools and libraries at a high level, then you really need to have some knowledge about how they work. The disturbing thing I might be seeing, is that something like 40% of graduates from even good schools have that Computer Science degree, yet really only have that 5% knowledge, yet have been led to think that they know more.
- thaumasiotes 8y ago> people graduating with a Computer Science degree from supposedly top tier schools with high GPAs that supposedly mean something Who claimed that a high GPA from a top tier school meant something? Top tier schools are notorious for giving As to everyone. The point is that you got in.
- white-flame 8y agoSurely that's a transitive point. If the fact that they got in is supposed to be meaningful, then surely the high GPA is just some arbitrary slice of that meaningfully distinguished group. Yet they're still often clueless.
- learc83 8y agoI've worked for years as a self-taught developer before going back to get my CS degree, I've taught at a bootcamp, and I've hired bootcamp graduates. Bootcamps can be valuable, but they are in no way comparable to a 4 year degree from a decent CS program. The top performing bootcamps are either functioning as an extended job interview that you have to pay for, or they are very good at selecting experienced students who only need a 12 week course to be ready to be productive developers. In my opinion, the reason we've seen bootcamps close or fail to expand is that there is a limited supply of these types of students. For the vast majority of people a 12 week course, no matter how intensive, is a good introduction, but a lot of training is still necessary to be useful. If you are prepared to invest in that training, they can be great hires. However, you need to be aware that it's likely going to be months before you get real productive work without hand-holding. It takes most people a lot longer than 12 weeks to be comfortable with the basics of moving up and down through levels of abstraction.
- syndacks 8y agoI'm a self-taught web dev, and I want to further my CS education but can't go back to school for various reasons. I've seen various syllabi eg teachyourselfcs.com and though they seem legit (and I've dabbled is some courses) I don't quite see the application/direct benefit professionally. Let me phrase in another way; when I got started it was easy to see why I needed to learn front-end and back-end to make a web app (for a CRUD job). Now I want to go further, but where? I think it would be helpful to see what jobs I could get by furthering my CS fundamentals, and not just "Senior Software Engineer". So, as someone with your unique perspective, what do you recommend? Should I really slog through ye olde CS curriculum in hopes that one day I'll be able to apply some of it? Can you recommend another approach? Again, put another way, some of these "top performing bootcamps" sharpen your React skills and whiteboarding skills, which have a career/market value. But they don't appeal to me because they don't seem academically/CS focused. I hope this duality/constraint came across. Any guidance appreciated.
- siscia 8y agoI always enjoyed teaching what I know. Why you don't send me an email (on profile) or a DM on twitter @siscia_ ? Twitter I believe is the fastest. Anybody else, feel free to do the same :)
- andrewmcwatters 8y ago> If you want to make the tools and libraries that the lower-level people use, you do need that degree. No, you need to somehow invest more time to build more features than another sucker out there. That's almost entirely it. Period. Shit is just fast enough these days, and if your industry cares about performance, well then maybe understanding something about caching that can be learned in less than a day from a blog article will help you with 80% of your problems. There's plenty of work out there that craves better solutions, and a degree is absolutely not even a nice to have at this point. Let me repeat: there are fundamentally basic applications and software solutions that various industries are dying to have exist, millions of dollars on the line if you know what industries in question, that simply just take a damn long time to implement but every individual piece is so far removed from so much as a basic comp sci 101 algo class, that you're literally just talking about business logic at that point.
- wavefunction 8y agoThis is completely untrue. I have in the past and continue to create web components that "hard CS" folks would scoff at and also quietly use in their own projects if my work weren't owned by my employers. I've built chunking hi-def megapixel web camera services a decade ago when browsers were limited to 20mb uploads. I've suggested building simple structured data protocols based on xml for a high-rate foreign exchange brokerage client-server architectures. We wanted to secure traffic between the client and server so I suggested self-signed certificates. I'm not stupid but I'm not a "10x developer" either. I work as a software developer because it's the most lucrative, accessible and interesting opportunity for a non-credentialed individual like myself. I've met folks with Masters in CS that unfortunately didn't merit a basic certificate in the same.
- tonyarkles 8y agoThat’s all true. The flip side is that there’s also problems that do actually require specialized training. An example that comes to mind for me from a few years ago involved real-time simulation of a constellation of satellites. The accuracy was on the order of meters. I ended up implementing RK4 as a solver, and had to use pretty complex differential equations (2nd order effects matter at that resolution). The project also involved real-time bitstream generation and modulation at 10MS/s. That was a mixture of understanding DSP and some clever hacks to get the performance we needed on the hardware we had. Oh, and concurrency without race conditions, because we needed to use every core we had to make it all work. Yes, there’s lots of business problems that can be solved by programming without much computer science. But there’s also a huge pile of problems where it’s not even clear that it’s possible to solve using current tech. I, personally, much prefer the latter, but to each his or her own.
- blahville 8y agoDoes not compute. I agree with the author's sentiment, but also note that it is precisely that--personal preferences masked as universal truths (aka business as usual). "shopping carts and web forms and pretty pictures" versus "mak(ing) a tiny little difference in the industry and chang(ing) the world just a little bit"? One could argue that certain "pretty pictures" have changed the world far more than any bits and bytes ever could, when considering the long history of art and visual expression. (Besides the notion of anything in this industry accomplishing that representing human vanity--we're more of a minor irritant to the world, to be shrugged off and forgotten in the course of time.)
- Xeronate 8y agoCollege is only one way (albeit a good one) to get a firm grasp of CS. I'd argue putting in 1000s of hours of work is another.
- neil_macintyre 8y ago> He's a freshman at Kennesaw State right now, but he really struggles with the idea of taking two years of classes that he has very little interest in. If it is just the idea of having to take a load of liberal arts classes that perturbs your son and not the low level courses like chip design, logic, algorithms and data structures, calc and stats, one alternative to consider is to study internationally. English universities, for example, offer a bachelors in computer science in three years. Unlike a "8- to 16-week full-day immersive courses that focus solely on technology" they have a curriculum almost exactly the same a US computer science course minus the 3 English classes, 3 history and political sciences classes, 2 economic courses and an art course that a college like Kennesaw has a graduation requirement: Kennesaw State Curriculum (http://ccse.kennesaw.edu/cs/docs/BSCS_2016-2017.docx http://ccse.kennesaw.edu/cs/docs/BSCS_2016-2017.docx). To compare look at the University of Bristol's Curriculum:[https://www.bris.ac.uk/unit-programme-catalogue/RouteStructure.jsa;jsessionid=55C3E695CF3A9FA6C9333C0391AC0FBE?byCohort=N&cohort=Y&routeLevelCode=1&ayrCode=19%2F20&modeOfStudyCode=Full+Time&programmeCode=4COSC019U https://www.bris.ac.uk/unit-programme-catalogue/RouteStructu...] I know this is not an option for everybody - many people need to stay close to home for personal or financial reasons, but is definitely something to look into. With regards to finances, English university for international students even with 1 year less of study still cost a lot. However, I am pretty sure that the course structure is similar at most European universities some of witch offer really low fees to international students.
- toomanybeersies 8y agoI have a BSc in Computer Science. I managed almost completely avoid taking any papers outside of the science and engineering departments. The only non STEM paper I took was a commerce paper about eCommerce. Looking back now, I actually regret only doing STEM papers. I got stuck in a bubble of dealing with the same people (or the same types of people) in all my classes, and really got no breadth to my degree. I'm not saying that people should be forced to take arts papers for a science degree, but in retrospect I think that I should've taken some.
- shagie 8y agoI wish more programmers took a few writing classes so they would appreciate how to write an email with the correct punctuation. I've seen far too many emails where the author didn't appear to understand how to formulate a complete sentence or understand where to put a paragraph break. I wish more freelancers took a class in business accounting so they'd have an idea of how to do it and what a good (or bad) contract looks like... or understand the value of their time. There are far too many that decide to become "freelancers" and yet have no idea on how to do the basic business items that come with being a freelancer. I wish more programmers took a class that had a public speaking component. Reading powerpoint slides as a team presentation is boring. The work environment isn't just "I write code" but also a transferring of knowledge from one person to the rest of the team. I wish more programmers took some classes in history, or physical sciences - things outside the major. I've had more than a water cooler conversations where a person doesn't understand how the length of the day impacts the temperature, or is surprised at the similarity of events today and those of thirty some-odd years ago. This concerns me, not for the skills of work, but rather the understanding of the world outside of the office. To these things, English composition, human communication, contemporary economy, arts and culture, political science and history... oh, those are are excellent class titles to help fill out those I wish items.
- oyebenny 8y agoMy Alma mater on HN? Weird!
- abhiminator 8y agoCurious to know what's weird about KSU showing up on HN. Is it an anomaly?
- ThJ 8y agoAs a person who never had a degree but whose knowledge goes above and beyond what 90% of the market needs and well into CS territory, this article insults me. It's also a painful reminder of similar prejudices in people who are looking to hire. I often end up doing the kind of basic development the author talks about and I'm not happy about that. Why not just take a CS degree? Because I'm a poor fit for the education system. That's why I dropped out of high school in the first place. Also, I feel like I've paid my dues already. I've been learning about computer software (and hardware and electronics) for 27 years. I haven't stopped at merely what I needed to know to do my job. I have done a lot of self-study. I routinely roll my own libraries and write embedded code, and I had a patch submitted to the Linux kernel a few years back. I also design analog and digital circuits on my spare time. I feel it's not about having a degree at all, because I'm living, breathing evidence of that. I've met people with CS degrees who can barely write a line of code. Maybe they didn't go to a good college. Maybe they did, and it's possible to pass the exams by cramming (followed by forgetting). Saying that you can't do advanced stuff without a CS degree is snobbery.
- westoncb 8y agoAbsolutely agreed. I eventually finished a CS degree, but what I learned from it was a little speck next to what I'd learned outside of it (even measuring right after graduation). I believe the only thing of lasting value I got from the degree was that I saw more of a 'roadmap' of CS topics that I didn't know existed before, which were a starting point for me learning more about them on my own. HN has done that more successfully than the university since though ;)
- flatline 8y agoThe author did disclose his bias up front and was responding specifically to a question about a traditional degree vs. a bootcamp. I personally still think that general education holds a lot of value. Of course it’s not for everyone, and I think it’s a problem that it is marketed as such. Nonetheless, there is a lot of value in liberal arts, in learning to think not just about software but other things. Good developers, scientists, mathematicians, artists, etc., etc., pull inspiration and insight from fields beyond their own. And we don’t apply software in a vacuum, we apply it to real problems in some field, typically other than software. I think a broad knowledge is part of where the “advanced stuff” comes from, and degrees are tailored to impart some of that over, say, a four week coding course.
- projektir 8y agoUgh. I think what people writing articles like this tend to miss, is that it's much easier to be super deep in a field when the field is limited and low-entry but you're already in it. Because there's not really as much going on and there's not much else to do but learn C or some text editor on a super deep level or what not. What else are you going to do? Look at the stuff "deep" people are generally into, it mostly revolves around POSIX some way or another. And databases, but nobody wants to talk about that. But today, there are hundreds of languages, a whole bunch of frameworks per language, various tools, constantly changing standards, etc. The available landscape is absolutely staggering. If you want to deeply focus, you need to pick what to deeply focus on, which is a rather tough choice and a questionable one, because the thing you focused on might become obsolete. > if you want to make a tiny little difference in the industry and change the world just a little bit, then you do need that degree And what sense does THIS make? Among the people who I know who _do_ deeply get into some specific CS topic, many are those who do not have degrees, because they're often people who are not fans of structure and ended up doing what they want, as opposed to what might be beneficial for career purposes. This just seems to be heavily misguided elitism. If you really want to know why the quality of software, and basically everything else, has gone down, just look at market incentives and you'll find that to be an utterly boring question.
- throwawayjava 8y ago> What else are you going to do? Look at the stuff "deep" people are generally into, it mostly revolves around POSIX some way or another. And databases, but nobody wants to talk about that. Self-driving cars (controls, perception, planning, safety, sensor design, localization, mapping, integration, security, etc.), human-competitive NLP/image classification, advanced robotics (repeat list from cars here but for things in the air, off-road, on the water, in the water, in orbit, in deep space, ...). Those are all examples of real things that real people get to work on every day. Operating systems topics don't even scrape the top 20 of stuff I think of when I think of deep expertise. And even if we limit ourselves to the sort of things you mention, most people who work deeply on languages, tools, and standards view these as manifestations of their deep exploration rather than the focus or subject of the dive. For example, TensorFlow. The framework very much is the product. But even if some other framework won the day tomorrow, the people who worked on TensorFlow would not have "wasted" their time thinking deeply about how to build the system. This is why researchers whose original contributions were made in the 70s and 80s none-the-less continue to establish themselves as desired experts in new technology trends (e.g., Leslie Lamport and cloud computing or Martin Abadi and ML frameworks). Because they were focused on ideas and fundamental problems. The problems never disappeared, just changed form. And ideas have a lot more staying power than their manifestation in code. Most people working deeply on systems today are not "revolving around POSIX in some way". See the proceedings of OSDI. And most deep experts choose other topics, most of which your post doesn't mention: graphics, programming languages (making them and analyzing programs written in them), compilers, security, robotics, user interfaces, NLP, ... Your definition of "expert" seems to revolve around using things, mostly things based on ideas and techniques that were well-understood already 20 years ago and that are related to building a particular type of software system. Which, if anything, seems to deepen the author's point. Someone gets to fill the AI research labs, staff the self-driving car companies, work at NASA, build core infra at large tech companies, and build the foundation for the next 20 years of trendy growth areas. It's possible to get to those places without a degree, of course, but a degree is by far the path of least resistance. And in most of these cases, learning the material from the degree isn't optional; you're probably going to have hard time doing that controls engineering job at a self-driving car company if you never made your way through a calc sequence, some physics, and an algorithms course. It's also worth noting that very often, building wordpress plugins pays more than doing all of those things I mentioned. I guess it's all about what you want to spend your life doing, which is exactly what the author says at the end of the article.
- jteppinette 8y agoI dropped out of a Computer Science program at KSU. It’s been great.
- sus_007 8y agoWhat have you been doing since then ? Are you pursuing self-study ? I'm curious .
- jteppinette 8y agoI am always working on side projects that usually become businesses or lead to a consulting/full time opportunity. I’m currently working at Apple as a tech lead. I worked my entire way through school doing IT (6 months) then software engineering (2.5 years) before I was offered my first full time by some coworkers that went to a startup. The full time offer also lined up with my term as president of my fraternity ending, so it was time to get out.
- spraak 8y ago> If you want to make really interesting exciting things that have never existed before, if you want to make a tiny little difference in the industry and change the world just a little bit, then you do need that degree. If you want to make the tools and libraries that the lower-level people use, you do need that degree. I wonder if the author considers Node.js to be really interesting and exciting and never existed before. Ryan Dahl doesn't have a CS degree (but does have a mathematics degree). Another (pretty cliché) example: Bill Gates never finished his degree and went on to create many great, exciting and interesting things.
- chrisco255 8y agoI think exceptional genius combined with exceptional work ethic can overcome any shortage of credentials or education, period. But for the great majority of folks, a formal CS education will give you a great advantage over a bootcamp graduate, or even a self-taught hacker. The thing is, if you're smart enough and contrarian enough, you're not going to listen to anyone's advice on this topic anyways...so those of you who do care what other people think, I think it's best to get a CS degree. Boot camp just doesn't cover enough bases. It's important to learn fundamentals. The fundamentals change much less often than languages or frameworks or platforms.
- ericpauley 8y agoI'd imagine not, I wouldn't either. Node is just a few basic apis on top of Javascript. The real magic is in V8, which was created by engineers with advanced degrees and deep understanding of language-theoretic and compiler concepts.
- saurik 8y ago> I wonder if the author considers Node.js to be really interesting and exciting and never existed before. Node.js was neither new nor interesting, and certainly was never "exciting" (note that this is coming from someone who now does a lot of node.js development). To start with, it is highly relevant to note that node.js ignored fundamental things that were learned in CS going back to at least the 80s involving the duality of events and threads, leading to an entire generation of people who actually believed that callback hell was somehow a good thing to encourage :/. The big thing, though, is that it definitely wasn't hard to do, and it certainly wasn't the first project to do it :/. I mean, my own personal website was built using a JavaScript on the server framework I threw together in a weekend using Rhino and Jetty years earlier, and I had myself gotten the idea from people who really know what they were doing: the people working on Apache Cocoon. In Cocoon, they not only had correctly handled the callback hell problem, they had generalized it so far you could write programs on the server that made "requests to the browser" in the form of rendering a page that were expressed as function calls that would return when the user clicked links and submitted forms, inverting the normal flow of control to make it easier to build complex interactions. So yeah: they had all of this stuff working almost a full decade before node.js existed at all, much less finally was able to use async/wait to manage callbacks. When they ran into evented hell, they didn't sit around for years building shitty workarounds: they implemented continuations for Rhino and contributed it back so they could do it correctly. The real thing to realize is that sometimes, shitty things can have more impact than great things, and things that are none of interesting, exciting, or new can have a greater impact than things that were all three of those things if they have better community management or business acumen behind them. However, we should call a spade a spade, and not pretend that those people are as good with software as someone who has spent years studying foundations, in the same way that the world's greatest software developer shouldn't pretend to be a great business or marketing person because they threw together a good enough website using a template and made some sales of their product on some app store.
- xor1 8y agoI know someone currently doing a CS MS so she can get into tech. She is good at math, so all of those classes are free As for her. She has other people help with her programming homework assignments, sometimes even having them do the entire thing for her. I know because she told me this herself, and even asked me to do some for her. As long as she gets near 100% on homework, it's nearly impossible to get less than a B in any programming class. She has an adderall prescription so she can cram for tests, which have way more multiple-choice questions than should reasonably be expected. She's currently on her second internship. They're both at employers that don't screen candidates on actual programming ability (they just looked at GPA, resume/application, and then a soft interview), and the current one has a reputation for being a very meh internship, though good resume padding. The last time I helped her, her code was fine for someone who had just started learning two years ago, but I don't think she is going to progress to the point that you'd expect someone with a Master's to be at simply because she isn't doing her own homework. I don't have a CS BS or MS, but there have been a few times where I feel like I need to get one just in case the market tanks again and they become a significant hiring criteria. But at the same time, I have to wonder just how many people currently enrolled in MS CS programs throughout the nation are doing something similar, and devaluing the worth of the degree (on paper, to potential employers) to the point that some could even look at it negatively.
- white-flame 8y agoBootcamp vs CS degree really has to do with what sort of work you want to do, which is a missing variable in this article. There's plenty of programming work out there that doesn't require any deep understanding of CS. You're not going to be creating algorithms when using existing frameworks to write yet another web thing, phone app, or internal businessy database-based system. A bootcamp can get you started doing practical things. Yes, you won't have deep knowledge, but really you don't need deep knowledge for most employable work. Code doesn't need to be hyper-optimized at the scale you're working, and it's easy to learn common pitfalls & best practices from applied practice, reading, and mentorship. And I say all this as an oldish fart who understands the chain from designing bespoke high level language environments down through to transistors. We don't need to count bytes & clock cycles anymore; people can let the machine & its provided environment simply work for them and learn the top-level interface.
- ereyes01 8y agoWe've reached an era where the average worker's serviceable time long outlives the competitive edge they've gained from their education/training in their formative years. The accelerating pace of economic and technological change is faster than ever, and this condition is unprecedented in human history. I've become more and more convinced that this is the defining problem of our times- we're becoming victims of our own success. The author of this post feels like a dinosaur, and I would bet that many young people in our field who give in to their natural instincts and specialize in something will emerge on the other end feeling the same, at a much younger age than the author, and maybe unable to find equal or better work than before. In other professions, the difference is more stark, and I think this is a major catalyst for the political/populist zeitgeist of the day. Entire industries have disappeared in a historical blink of an eye, and their former struggling workers are up in arms fighting powerful forces of nature trying to turn back the clock and stay relevant / valuable. Bringing this back to CS, it's interesting to use this lens to determine whether the degree is worth pursuing anymore. On the one hand, it's fundamental and it encompasses the building blocks of how computers work and what they can do. On the other hand, programming techniques haven't changed very much and are quickly becoming commoditized and more accessible. As the author notes, it's true that you don't need to know as much as you used to, to build a useful program anymore. Like it or not, that's a fact, and economic forces are exploiting this more and more. I think our human-being wiring is optimized to learn when young, and then "grow up" and become efficient at repeatedly applying our skills to obtain the expected outcome. Increasingly, I feel like the winning (or at least a better) strategy is to stay "young" as much as possible, since the chance you will need to reinvent yourself seems to only rise. This sounds great when you're actually young, but as time passes you get worse and worse at it, despite needing to remain "young" and malleable, and despite the mounting competition from actual young people. So given all this, saying people "need" a CS degree seems like punching and kicking at giant waves you'll never beat. And I say this as someone who deeply loves both CS and academia. Stay "young" as best you can and try to keep riding the next wave you can find.
- flukus 8y agoDisclaimer: My only formal training in this field was TAFE in Australia, which involved an 18 month course and is roughly analogous to a trade school or community college, before that I was a high school drop out. > We've reached an era where the average worker's serviceable time long outlives the competitive edge they've gained from their education/training in their formative years. The accelerating pace of economic and technological change is faster than ever, and this condition is unprecedented in human history. I think when change is this fast understanding the basic building blocks is more important than ever. These don't change quickly, some haven't changed since the industry was born. So much technological change is just reinventing concepts that have existed for decades and once you realize you're staring at an old concept in a new package keeping up is much easier. The question then is what educational format teaches these fundamentals the best. For some of them it probably is a computer science course but for others it might not be. One of the best classes I had was building our own database (TAFE was pretty hands on) and from what I've seen this was a lot better than how it's taught in many universities. We had to start at the file level and think through the various steps to make a half decent database, like what is required to handle index lookups efficiently, how to retrieve records in order, etc. It gives you a much more intuitive grasp of what steps a DBMS has to go through on your behalf. In my first real job after graduating I had to explain to someone with a CS degree why storing dates as strings was inefficient and making our monthly billing took half a day to generate instead of half a second. Foundational knowledge is important but the where/when and how we obtain this knowledge could do with a shake up, you can produce a lot of valuable output without an upfront 3-4 year investment, but it doesn't seem like there are a lot of opportunities to gain it after becoming a full time worker.
- devxpy 8y ago> If you want to make really interesting exciting things that have never existed before, if you want to make a tiny little difference in the industry and change the world just a little bit, then you do need that degree. If you want to make the tools and libraries that the lower-level people use, you do need that degree I don't know about you, but I need some solid evidence that you did anything close to that so I can consider you seriously.
- amorphous 8y agoWhat I miss in those kinds of discussions are the intangible benefits of having studied a subject in depth to acquire a degree. The person that entered university is different from the one that came out of it. The way to tackle problems, to think scientifically, the ability to see the broader picture are some of the advantages of good education that are easy to dismiss since they are not immediately visible. There has been a similar thread on HN where someone with a bunch of degrees said: "I haven't used anything from my studies in my work". But this person might be blind to the fact how the education shaped her mind. Understanding goes beyond mere knowledge.
- Ntrails 8y ago> There has been a similar thread on HN where someone with a bunch of degrees said: "I haven't used anything from my studies in my work". But this person might be blind to the fact how the education shaped her mind. I tried to read thought my uni notes on metric spaces a couple of years ago. I don't even understand them anymore. Littered with idiot comments like "obviously -> " despite it being nothing of the sort. University me was a douchebag. :(
- aaron_m04 8y agoI'm guessing you don't use metric spaces in your day to day work. Take a look at notes from a subject you are actively using, and I think much of it would be obvious.
- Nursie 8y agoMy degree continues to inform me, years later, because we looked at some of the theory and at a lot of generally applicable ideas, not just tech specifics. In some ways it's frustrating that we didn't look at more tech specifics... but in others, I was given the time and the tools to pick things up quickly. I've worked with a couple of good people without degrees, I'm not saying it's impossible, just that I've found it very useful. I don't think I'm alone in this! (Also, c'mon, a degree is not just about the qualification or the education, it's about meeting peers and forming life-long bonds, and having fun too :) -- edit -- Oh, and on-topic, I think it's good to test your boundaries - reverse engineering an embedded board with a multimeter, a line-levelling serial adaptor and a soldering iron, and then getting it to boot linux with some custom kernel bring-up code, was one of the most rewarding things I've done in recent years. Learning a little bit more about something that's a black box at the edge of your understanding is always good.
- michaels9876 8y agoVery fun to read and sounds very true. In my experience though, I found no correlation between programmers with a CS degree and being a good developer/architect. I will say that those of us who didn't graduate (including me, I dropped out) often feel they have something to prove and will work harder.
- tonyedgecombe 8y agoIf you require programmers to have a deep understanding of computer science then you will never have enough programmers. This is good for those people with the qualifications but not necessarily good for the rest of society which ends up with an unmet need.
- 3pt14159 8y agoI mostly disagree. Software, like electronic engineering, is about abstraction, but it differs in a critical way: It's self-modifiable. Kids can think they're making computer games using little apps, but what they're doing is more akin to making a map for Starcraft than it is to actually making a game. If anything I'd argue that getting a CS degree or similar (math, engineering, philosophy) will arm your mind with the tools it needs to really compete over the coming decades. If you want a simple middle class life a bootcamp is perfectly fine. Lots of people make money writing CSS. There is nothing wrong with it. But I would never tell a bright youngster that CS degrees (and similar) are a waste.
- BanazirGalbasi 8y agoI don't think they were saying CS degrees are a waste at all, in fact I think the message is exactly the same as yours. Going to a bootcamp teaches you to use some specific tools and let you make basic projects. Getting a CS degree lets you learn how those tools work and even how to make better ones if you're good enough.
- TheCoelacanth 8y agoI'm missing the part where this is in disagreement with OP. It actually seems to be saying almost exactly the same thing.
- woah 8y agoYou could write almost the exact same post about a philosophy degree
- lostcolony 8y agoI was involved in the hiring and filling of > 50 developer positions at a company, while being a tech lead. We tried hiring a few people with just bootcamps. Only a few (so hardly a representative sample), but none of them worked out. As soon as they had to try something even the slightest bit different than what they'd done in the bootcamp they were lost. There were people with degrees in unrelated fields who then did a bootcamp who were good, and almost all of the CS/CE/EE people we hired were good. I'm not saying this is always the case, but the two years of CS fundamentals seem to be valuable, AND the two years of unrelated core classes seem to be valuable. It might just be how it forces you to engage with and learn things you don't care about (because there will be times in any job you have to do that), or the people skills of having to learn to deal with professors and other students, or the pattern of constant learning and adapting it ingrains upon you, or something else entirely, but per the link, I don't think a bootcamp should ever be viewed as sufficient preparation for a career in development. It's fine in tandem with other things, but it's extremely limiting on its own.
- nojvek 8y agoThere’s something to be said when you spend years building complex things from the ground up My fav set of classes that changed the way I think account things in CS. It was at UNSW in Australia. Fundamentals - we started with C. I hated C segfaults but realized the power of pointers, structs and how memory kind of worked. We built a little 8bit machine code and a little VM. Datastructures and Algos - hashes, b-trees, graphs etc. it was eye opening to hear how this had been invented before I was born and the latest and greatest databases still use their variants. We built a crawler and search engine with our own hand written database. That’s where I learnt about mmap. A lot of fun. Compilers - The whole, lexer, parser, checker, emitter pipeline. Write your own subset of C to jvm compiler. We did a simple lisp interpreter too. Advanced graphics - we built our own little 3D game engine using only OpenGL calls. Microcontrollers - literally programmed in assembly to operate a simple lift. Learnt about electrons and gates and how they make machine code work. Connecting compiler knowledge with microprocessor internals was a holy mind opener moment. There’s something to be said about “we’re gonna build mystery thing X from the ground up and connect theory to practical”. Sucks that Australia has very poor VC funding and startup ecosystem. UNSW produces some phenomenal graduates that are quickly stolen by US tech giants.
- richpimp 8y agoI see pros and cons to both sides (4 year university vs boot camp). I have a CS degree, whereas our front end developer came from a boot camp. For my part, I have found the underlying theory to be helpful in ways I couldn't have comprehended while at school. Understanding binary made understanding octets in IP addresses and subnet masking much easier. Taking a class that involved programming sorting algorithms by hand in C++ was very beneficial, even though I have no need to do this in my day to day work. Learning about logic gates has even been helpful. Basically, I'm better equipped to have a fundamental understanding of how software and hardware works, even if it's a very basic understanding. What I lacked coming out of school, though, was having a clear road map of how to just build something in a modern stack on day one at a job. My compatriot is in the opposite boat. He came out of boot camp with a clear understanding of how to build web applications using Angular. He could hit the ground running, and did from day one. However, he lacks the underlying theory that helps to understand how things work. Does he need these things to do his job? No, but I do believe it makes for a more well-rounded developer to have this knowledge. Fortunately, he's got a great attitude and aptitude, so he's been picking these things up as he goes. I'd rather see something more in the middle, where one can get the theory coupled with the real-world programming skills. Maybe my CS program is to blame, and others exist that do a better job of this. Looking back, my senior "full-stack" project was very limited. I would have benefited from a little more meat to the project, and also having some more of the ancillary things taught, such as anything to do with networking in a more practical rather than academic way.
- rb808 8y agoBob Martin has a great talk https://www.youtube.com/watch?v=ecIWPzGEbFc https://www.youtube.com/watch?v=ecIWPzGEbFc, which illustrates a lot of history of computers. He asserts that the number of devs is doubling every 5 years which means that half the developers have < 5 years experience. The industry has lots much of its scientific discipline which has to return, or regulations will force more structure. Anyway he's a great speaker and this is one of my favorites.
- Jarwain 8y agoMirror: https://web.archive.org/web/20180731000241/http://rubyhacker.com/blog2/20150917.html https://web.archive.org/web/20180731000241/http://rubyhacker...