top | item 17649301

Computer science as a lost art (2015)

247 points| jxub | 7 years ago |rubyhacker.com | reply

141 comments

order
[+] wrs|7 years ago|reply
Well 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.

[+] learc83|7 years ago|reply
I'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|7 years ago|reply
I'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.

[+] scarface74|7 years ago|reply
Computer science graduates also need a lot of training. If not more, a boot camp graduate has already been exposed enough to modern tech stacks to at least come in as a junior. Too many CS grads have little practical experience to hit the ground running on even the simplest real world projects. Yes I have a CS degree.
[+] lostcolony|7 years ago|reply
I 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|7 years ago|reply
There’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.

[+] sircastor|7 years ago|reply
For a counter example, I'll say that we've got 3 Bootcamp graduates on our team at work and they've all been very good. They've all moved into languages beyond what they learned in their courses. One has become a major platform contributor and has been a driving force in decisions being made. Another has been working with hardware and system deployment. They're all very driven, I've been quite impressed.

Now the caveat to my statements there are that all three already had degrees, in disparate fields unrelated to CS/CE. It's an example of capable individuals being able to learn practical skills in anything.

[+] ng12|7 years ago|reply
I also think bootcamps are not very selective once you get in. In my experience it's very hard to fail out of them and there's a huge amount of hand-holding. Compare this to a CS101 course based on SICP and it's easy to see how CS degrees select for people who are able to thrive when thrown into the deep end.
[+] amorphous|7 years ago|reply
What 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.

[+] Nursie|7 years ago|reply
My 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.

[+] Ntrails|7 years ago|reply
> 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. :(

[+] carlmr|7 years ago|reply
Yeah, I think it's also wrong. Most of the time I don't need any of my university knowledge at work. But it has helped me out many times just knowing that there is a better algorithm, or knowing how something works below, or knowing some extra math.
[+] yontherubicon|7 years ago|reply
So, 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|7 years ago|reply
Read carefully "Structure and Interpretation of Computer Programs" (e.g. online for free), preferably do exercises. You'll get a solid start.
[+] westoncb|7 years ago|reply
I think the best way to learn architecture is to try (and initially fail) to do some projects which make demands on your architecture abilities. I'd recommend writing some frameworks or engines (without worrying about fully completing and releasing them!). Where I learned the most about designing reusable systems was building a game engine, then actually building a game or two on it and seeing what was painful and what worked and taking notes, then building another engine based on my experience, and repeating. I built three engines by the end, and made maybe four or five (little) games off of them.

I never released any of them and none are useful for anything any longer. None probably reached more than 75% completeness. But by trying to build games on them I saw with such clarity things that worked and didn't, and I got deep practicing in thinking about more 'general' forms/concepts/structures. I wrote a framework for writing 3D model loaders after, and the lessons carried over. I was utterly lost when starting the first game engine; with the model loading framework I had to think deeply, but I new where I was going.

Here's something to consider. If you try to just start writing 'a game engine,' (or whatever engine/framework) that could mean about anything (from 1 day of work, to 20 years of work). But, if you consider some concrete ideas for particular games you'd like to make, think about what they have in common, and then try writing a piece of software that takes care of the common parts, you'll have constrained the problem to something workable with definite goals, and a way of testing your success after.

This is at the heart of any sort of 'abstraction' you develop: you want to code several things which have a bunch of overlapping aspects, so you write something that captures the common parts, and then arrive at the several things you actually need by instantiating your abstraction with different parameters (I mean that in a very general sense, not with specific reference to OOP, though it provides means of instantiating abstractions with various parameters too, of course).

I'd say being able to do the above effectively is the cornerstone of being able to do architecture well. A bunch of other stuff comes after, like knowing when to not create abstractions, and all sorts of knowledge about doing things well for systems in particular domains (e.g. architecture for an interactive 3d simulation vs. web apps have very different patterns that have surfaced as effective).

[+] User23|7 years ago|reply
The best introduction I’ve ever read is Michael Sipser’s Introduction to the Theory of Computation. It is eminently readable. It somehow manages to be logically rigorous while remaining approachable. I couldn’t recommend a book more strongly for someone such as yourself. As a bonus it’s not even particularly long.
[+] learc83|7 years ago|reply
Depends on what you mean by architecture. But if you mean what you'd learn in a Computer Architecture and a Computer Org class, this course/book is good.

https://www.nand2tetris.org/

[+] thrav|7 years ago|reply
Georgia Tech’s OMSCS program has been great so far, outside of the super rigid proctoring policies they have for testing that cost me 2 letter grades in my database class.

Some classes are better than others, but it’s extremely valuable to have a program that you’re following with deadlines and measures. If you have a desire to learn the stuff, you’ll get a lot out of it.

When I get busy personally or at work, I kinda phone it in and just do enough to make grades, but when I have the latitude to dive deep I’m learning a ton.

It’s also very affordable, fitting within most workplace education allowances, if you have one.

[+] stcredzero|7 years ago|reply
It 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.

[+] fru311|7 years ago|reply
I 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.
[+] ereyes01|7 years ago|reply
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'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|7 years ago|reply
Disclaimer: 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.

[+] spraak|7 years ago|reply
> 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|7 years ago|reply
I 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.
[+] saurik|7 years ago|reply
> 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.

[+] ericpauley|7 years ago|reply
I'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.
[+] white-flame|7 years ago|reply
Bootcamp 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.

[+] neil_macintyre|7 years ago|reply
> 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). To compare look at the University of Bristol's Curriculum:[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.

[+] shagie|7 years ago|reply
I 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.

[+] toomanybeersies|7 years ago|reply
I 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.

[+] Taniwha|7 years ago|reply
English (and NZ and Aussie) universities have 3 year courses because high school kids pass minimum national requirements exams before they enter, US high school graduation is not uniform across the country, or even across states - in essence those minimum requirements ensure that students entering Uni have already met what in the US would be the General Education requirement
[+] AnimalMuppet|7 years ago|reply
CLEP tests may be the answer. At many schools, you can get out of many liberal arts classes if you can pass a two-hour test on the topic. You get college credit as if from the class, too. And the tests are far cheaper than the classes.
[+] tabtab|7 years ago|reply
As 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|7 years ago|reply
I'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.

[+] j1vms|7 years ago|reply
> 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.

[+] Xeronate|7 years ago|reply
College 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.
[+] xor1|7 years ago|reply
I 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.

[+] richpimp|7 years ago|reply
I 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.

[+] 3pt14159|7 years ago|reply
I 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|7 years ago|reply
I 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|7 years ago|reply
I'm missing the part where this is in disagreement with OP. It actually seems to be saying almost exactly the same thing.
[+] woah|7 years ago|reply
You could write almost the exact same post about a philosophy degree
[+] rb808|7 years ago|reply
Bob Martin has a great talk 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.

[+] projektir|7 years ago|reply
Ugh.

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.

[+] NTDF9|7 years ago|reply
I'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.