329 comments

[ 2.8 ms ] story [ 298 ms ] thread
I think the best path is to learn to code, and then learn CS. The concepts are so much more concrete at that point.
Everything here can be earned elsewhere for far less money. In fact, if you get an entry-level job you can learn all this while getting paid!

IMO the advantages of CS college are this:

- You can reach a higher salary.

- It's easier to learn hard math/CS ideas in school than on your own.

- It's easier to make friends in college than elsewhere.

Many self learners have no clue about processes, threads, memory allocation. Nor do they care about algorithmic complexity.

They end up using a list for a map etc.i.e. there are foundational gaps in their knowledge. A CS program ensures that there is at least an attempt to build a foundation.

> Many self learners have no clue about processes, threads, memory allocation.

This all also applies to “many CS graduates”. My systems-programmer wife has given up asking basic systems questions to new grads in technical interviews because she just expects to get blank stares at this point.

Stuff that was expected knowledge of anyone programming computers in any capacity up through the 1990s is now a mystical secret known only to gurus.

Someone who takes hard college courses in operating systems, database implementation, networking, distributed systems, etc. can obviously learn a lot of useful stuff. But those are often not required for a CS degree.

It is possible to scrape through a program without much curiosity or real understanding. Thus defining a clear gap in the workforce that those with CS degrees (and who actually paid attention) can fulfill. Specifically, building the tools, algorithms, and systems that the code monkeys will add features to. Which part of the food chain one wants to show up in has surprisingly little to do with how much one gets paid, but since it doesn't matter, I know where I'd rather be.
Like I said a CS program at least attempts to bridge this gap. Courses are there. Most self learners are unaware or just want to learn React.
If they don't have much worn experience I always look through their transcript.
You can't say that for a fact, and you are probably wrong on that generalization.

That same thing that drives people to be good in programming happens with it without schooling. And most of it happens to be experience.

You can either pay for experience, or you can get paid to get experience.

At the end of the day bad programmers from whatever walks of life are going to use list where maps should be used, and not understand algorithmic complexitie of the code they write.

Processes, threads, and memory allocations are all system level operations and a programmers depth of knowledge of them are highly dependent on where in the stack they are working.

In fact. I would wager that most self tough programmers are a cut above the average college grad, and way more suited to actually gettng work done. Thry have already shown they are self motivated and don't require hand holding to get the job done. Besides they will also be less stressed from not having all that debt.

Your second point is only true if you add a constraint to learn alone, nothing wrong with seeking out other self learners. Salary is generally true but that really depends on your negotiating skills.
It's a lot easier to learn complex math and CS topics with a guide than with other people at the same level. There's a reason study groups often end up in the math lab asking for guidance.
> You can reach a higher salary.

I'm not sure about "reach". From what I've seen it's more of a "You can start with a higher salary". After a decade of work barely anyone cares about your university. There are some exceptions of course - R&D departments at corps like degrees for example.

You'll likely deal with each of these no matter which route you go; these things just occur naturally. School provides a little safety margin, but at a cost. And there's a different cost to not going to school. Choose your own adventure.
That isn’t compelling as far as a CS degree goes. You could change the title to “learn to code and get a degree in literature” and the same time pressure, communication, networking, etc. points would stand true.
Exactly what I thought as well. There are many articles out there that make compelling cases for getting a CS degree. This isn't one of those.
Why teaching yourself to code is better than a CS degree

* Far cheaper, no debt accumulated

* Follow your bliss in learning what you want, but still with the option to absorb the best of the CS textbooks.

* Not compelled to learn languages and platforms behind the curve.

* Less able to lean on teammates, you learn to solve problems more independently.

* There's no illusion that your education has an end date, and that you can stop. Ever.

You missed a few:

* Poster candidate for Dunning-Kruger

* Cheap and fast but low quality

* Single pointed focus. More likely to be a one-language savant

* Degrees are for chumps: this is a delusion.

Much like Apple products, when people go to college they feel the need to defend that idea to the death. As surely they couldn't have been so silly to pay 100k to have someone stand in a big room and read the internet to them.
>Cheap and fast but low quality

He didnt say fast, he said cheaper.

Purchasing book written by somebody who has 10 15 20 years of XP in industry may, indeed have higher quality.

>More likely to be a one-language savant

Languages aren't like like pokemons, so you dont have to "catch them all"

Knowing more langugages outside the most mainstream like python js java and so on, of course may help you, but it ain't requirement if you want to be good at CS / SE.

I am sorry but no.

All of that can be learned during your first internship where you get paid instead of paying.

I would argue college delays maturity and does not foster it. Hanging out with a bunch of people that are the same age, same life stage, etc. doesn't exactly add life experience. Continuing to do "hoop-jumping" work just like we all did in high school also doesn't seem to be novel. Perhaps its the keggers and binge drinking that bring the maturity the author references?

As for prestige, if its a top 10 program sure, otherwise (and often even then) don't waste your money.

Disclosure: Current engineering lead with multiple Degrees (1 Summa Cum Laude) and a bootcamp CS education at one point (which wasn't all that valuable).

I don't think the article made the best points in favor of a CS degree. I went to a top 40 program and I took a lot of CS and hardware classes and what I did learn, crucially, that is more difficult in the workplace, is how complex systems work and how to approach complex systems. Now, you could accidentally learn that on the job, or intentionally if you choose to, but you can also sort of skate by in a fog of ignorance for many years without ever learning the fundamentals. But look, we learned how RAM works, how networking and IP works, how to build a peer to peer file sharing network, how to design a simple microprocessor, how operating systems and threads and processes work, many of the fundamental data structures and algorithms that software is built on, etc. Learning all that provides a very strong foundation for learning any other software system. That's very hard to do without a program like a good CS curriculum.
I think that is fair but remember over half of the classes you took in the pursuit of a CS undergrad were not CS classes. Of the half remaining maybe half of them were truly vital? Even the example of building a microprocessor (or your own compiler as a right of passage) totally useless to 99.5% of practitioners in industry. That is a quintessential "hoop-jumping" class. Did you also learn the proper way to heat sand to extract silicon to make your own transistors? At some point we have to climb up the abstraction ladder and academia is always a rung or two behind and moves too slowly.

I would contend there are 6 classes worth of truly important information for practitioners to be equivalently informed as your top 20% CS undergrad.

That was my experience in college. Most of my classes were fluff and filler. Of course, I finished college in my 40s after taking a 20-year break to raise my kids, so my perspective is probably a little different than most.
It's not a hoop jumping class. You are learning how the machine actually works. And I've used those hardware skills to design my own circuits, so I don't find it useless at all. It's very empowering and it opens up possibilities for my career that I wouldn't otherwise have. If I want to go into robotics or some more hardware intensive discipline, I've got a good foundation for that. I wouldn't be starting from zero.
Which six classes?
Thats the trick right

I would say: 1. The standard Data Structures and Algs class. 2. Discrete Math (if needed) 3. Systems design 4. A Nand To Tetris type survey class 5. Databases 6. Networking

Bonus: An ethics class. Because the tech world needs more people with functioning moral compasses.

"College degrees far outweigh teaching yourself to code (Or coding bootcamps), as they provide you more skills than simply knowing how to code."

But the majority of the skills listed are not intrinsic to computers, computer science, or software at all.

"There are many skills that Developers now require besides just coding. They need time management skills, organisational skills, people skills, translating skills, negotiating skills.. the list goes on. These skills are often gained through completing an undergraduate degree."

Most people will get experience in exercising and developing those skill sets with almost any degree program.

"Certainly there is some level of prestige that comes with having a degree... it is, in a way, a validation stamp that says… “Yes - you have the skills to be a Software developer”."

Umm... not really. We've probably all met people with CS degrees who were not really all that capable of doing day to day development.

Totally agree with your last statement. I've fired more CS degree programmers than self learners.
Same here. There are comments further down, which also assert this. This is probably because there are more developers in the market (overall) that have degrees than not, along with a lack of passion to expand their skills.
yeah, I was going to pound this home a bit more, but was seeing some other people already did.

Coming back to this, one of the defenses I've had from CS people who couldn't do day to day development all that well is "well... that's not what CS is for - it's really for diving deep in to the theories behind problems... " - or some other relative claptrap. On its own - yeah, there's a class of problems that are served well by people with a CS-focus. Just don't try to drop them in to a "developer" role and assume that they'll be "just as good or even better" than someone who's simply been doing development perhaps with minimal schooling or just self-taught. One skill isn't really a superset of the other, but some people tend to think of them as such.

Agreed. The main point is that a CS degree is not a proxy for success in all things that require code. I like to keep in mind that a BS in CS only demonstrates the ability to study, memorize and be quized on your memory. Using a set of axioms to build something unique is totally different.
College was pretty awful at teaching any of those soft skills. I was good at mostly turning in Algorithms homework on time and not failing tests, so I did fine. You totally can graduate with decent grades from a good school without making much progress on soft skills.
Most programs aren't going to 'teach' you these things, either (counter to the point of the linked post). You are likely to be put in situations where you have to work with other people on a project (short in-class assignments or longer term projects). I had some of these in various classes (writing, ethics, political science, etc). None of these projects ever involved any directed learning on the soft skills themselves - you just had to 'do it'. "Improving" by whatever metric you want to use was a byproduct of the exercise, not the goal.
I'm currently pursuing my CS degree after a couple of decades working as a programmer. The big difference is that you will miss "why" and learn mostly "how", unless you have a very inquisitive mind. On the other hand, not everybody can afford years of no income or crippling debt.
I imagine other students would be extremely grateful to have your experience to know the motivation behind some of the seemingly arbitrary ‘whys’ they are required to learn.
I worked for almost a decade before going back, and I had the same experience.

As for debt, there's no need for crippling debt though if you go to a state school and are planning on working as a programmer.

(comment deleted)
I agree with you; I have a CS degree, and when I work with those who learned the programming mechanics (aka making code work) - are often skipped other topics that came in handy for me making other decisions. I can understand why code is slow (eg: BigO for cpu or memory), what structures and algorithms to use in different scenarios (Data Structures & algos), how things are working (Computer Architecture, Programming Languages [theoretical construction of languages], Compiler design), and Automata. Absolutely, these can be learned by oneself - but I find they rarely are.

Edit after thought: Of course, when to use an Array vs a Linked List in your specific language (for example), might not matter if you're doing web apps of medium scale taht one can throw more EC2 instances at

This edit is the critical leap, 99% of software engineering doesn’t benefit from this depth. For sure there are positions that do but they’re the edge case.
Is there any part of a CS degree that educates students on how networks operate or what a protocol looks like on a wire? Most of the new grads I work with seem to think of all of that as a black box and are completely stuck when things aren’t working.
There are certainly classes that cover networking.

IP, TCP, DNS, and HTTP were covered in classes I took.

As for actually on the wire. I haven't studied anything about how ethernet actually works. I assume its kindof like i2c, but I don't know more than that and haven't needed to.

So if college was so invaluable teaching networking, how do you think people who went to school before http existed learned? Just like everything else, you can learn as needed.
> So if college was so invaluable teaching networking,

I never said or implied that college was invaluable for teaching networking. I just answered a question about what was taught.

My undergrad had a good computer architecture class, but it didn't cover networking. That's definitely a pretty big hole in my knowledge. A networking class would absolutely have slotted in quite easily to the CS curriculum.
This would have been a great class to replace the "How to Double-click a Mouse 101" class that my college required all students to take.
My CS degree had it as an elective. It was the class I did the worst in, and I now work primarily with network protocol implementations. Good foundation though, even though the prof was terrible at designing assignments.
Mine here in the UK covered quite a lot if networking protocols, so yes, there are some out there. In fact, it's never occured to me that this wouldn't be covered. I'd be pretty disappointed if a new grad couldn't figure out how to how to at least approach diagnosing an issue :(
> These skills are often gained through completing an undergraduate degree.

Disagree.

An apprentice or even a bootcamp grad can learn these skills in their current job or in a online MOOC course without a degree.

What the author fails to mention is the amount of student debt that comes with the CS degree. In some cases a CS degree isn't worth the debt if the curriculum doesn't align with the market or if the university is less prestigious. It's no good becoming a graduate and leaving with no experience + £50k in debt and convincing employers that you are "qualified" for the role.

Given that most or if not all of these CS and soft skills can be learned online for free, students utilising free courses can find work debt free with the same skills as a CS grad with the added bonus of hands-on experience if they are apprentices. Unless you are after a research position, it is economically better to teach yourself for a typical developer position these days.

>can be learned online for free

Can is the key word here. Most people don't have the discipline to go through a CS curriculum on their own.

From my experience, if people don't have the discipline to self-study some specific topic then they'll have a hard time in CS. The problem is CS is constantly changing and you need to be routinely upgrading your skills as time progresses to stay competitive in the marketplace.

I would even go as far as saying that being able to self-study on your own is an essential life skill, up there with learning how to read/write. That's how important it is. You need to learn how to do it. It is important. Personally, I think overtime it will become easier to self-study topics due to advancements in edtech technology.

There's a huge difference in degree between the ability to keep up to date in CS once you have a foundation and building that foundation from scratch.

I worked for years as a programmer before going back for a degree, and I've hired and worked with many people with and without the degrees.

I've yet to run into someone who self studied their way through the equivalent of a CS degree. I'm sure they exist, but they're pretty damn rare.

I've bumped into quite a few in the bay area, sometimes they're even people building the infrastructure for huge companies like Twitch or people who have made significant contributions that have advanced the field in one way or another.
As I said. They exist. You're going to run into many people of extraordinary ability living in the world's tech hub. But again, the vast majority of people don't have the discipline to self study their way through an entire CS curriculum.
My 300 and 400 level coursework has helped me repeatedly throughout my career, 14 years later. The two themes that keep coming back: What is a computer, and what is a network? And: massive exposure to relevant languages, data structures, algorithms, and math I would not have bothered to study independently.
> The problem is CS is constantly changing and you need to be routinely upgrading your skills as time progresses to stay competitive in the marketplace.

CS moves slowly, tooling moves fast.

(comment deleted)
(comment deleted)
The fundamentals of CS are pretty static and haven't changed for decades. Tooling and ecosystems move fast but they are all based on the same principles and usually written by someone who studied them. You can usually tell who has a CS degree, for instance by how fast someone picks up a library. e.g "oh, so this is just an implementation of a state machine but with x".
The whole “constantly changing” thing is not true when it comes to computer science theory.

What you are talking about is essentially programming as a trade. That’s not what a CS degree or any degree is for, really.

The best programmers have a deep understanding of how computer software works.

The dev tools are used in those degrees just as tools to achieve something else. I remember taking a compiler course (as in, we got to write optimising compilers as an assignment) with people who didn't have a good grasp on how to really use those tools in detail. You were just expected to pick it up on the way. It was treated as a basic skill.
> The best programmers have a deep understanding of how computer software works.

That's a value judgement that is not reflected in the market, fwiw.

Beyond all that, a lot of people already have an unrelated degree. Going back to school for CS makes even less sense if you already have a college degree, even in an unrelated field, and have some coding knowledge or job experience.
I - disagree here. My CompSci background gets me called in to deal with the hard stuff that others skip bc the theoretical parts of CS are not present.

As mentioned in a further comment below - I can understand why code is slow (eg: BigO for cpu or memory), what structures and algorithms to use in different scenarios (Data Structures & algos), how things are working (Computer Architecture, Programming Languages [theoretical construction of languages], Compiler design), and Automata. Absolutely, these can be learned by oneself - but I find they rarely are. I know what is happening at a network layer, OS layer, memory layer, application layer, and system layer, and code layer.

I can grok a new language quickly, by learning some very key aspects of its language design from my Programming Langs class (the "meta" of ProgLang design), etc.

I’ll agree with your disagree. Other than APCS in high school, and some discrete math and number theory in college, I learned to program myself. By reading a lot I picked up most of the things on your list above.

But where I really perceive my limitations from lack of formal education is where math comes into play. I get the gist of how cryptography or machine learning works, but I don’t think I’d be able to work in those areas for a living even if I spent some time brushing up on my skills and doing self-study. I never developed the intuition for the relevant math, and that makes it extremely difficult to pick up the material just by reading. And doing an entire self study course sequence of the missing material seems like too much of a hill to climb.

Do you think most people with a CS degree retain sufficient skills in this area to be effective? Maybe PhDs.
Exposure to the CS curriculum at least gives you a leg up in asking questions and working out the shape of your lack-of-knowledge.

Like, knowing that automata and complexity theory exists and remembering roughly how it works means that if something that needs that comes up, at least you have a sense of what you forgot about it.

For instance, having taken a database class where we worked in the relational algebra has helped me fluently write okay SQL even if I couldn't write out a sentence in the relational algebra to save my life.

I’ve never taken a relational algebra class in my life and neither have most dba’s. They learned sql by learning sql.
That's of course a perfectly good way to learn SQL and probably much cheaper. I'm not saying that you need relational algebra to write a query, that would be silly. I just mean that learning that stuff does stick with you.
>> I never developed the intuition for the relevant math

in my opinion, the best way to develop an intuition for the math is through manual calculation (by hand) and by implementing the algorithms/math in code, wax on wax off.

Since everyone making a living in those areas is reusing libraries now many people's knowledge is limited to things they have heard repeated, they don't necessarily have an underlying intuition about the math.

Rayiner, that is really impressive. I personally know I loved programming - but would not have had the fortitude to make it through the theoretical comp sci classes had I been self directed. But oddly enough for me, I favored the theoretical more than the practical classes.
> I know what is happening at a network layer, OS layer, memory layer, application layer, and system layer, and code layer.

Yep. For me, the biggest reason I think a degree is necessary is because it is comprehensive. Self taught people are going to inevitably have multiple holes in their understanding. And worst of all, they will be ignorant of where those holes lie and how large they are.

In my experience, self-taught engineers are self-taught because engineering is a passion and they spend their lives doing it.

I can see the "I want to earn more money" boot-camp types having holes in their knowledge, but those who read engineering books and stay up all night coding always seem to have the deepest understanding of all because they live for it.

It'll get complicated talking about age too, because we don't want to pretend older people are "better", or risk turning into an agism-in-technology rant, but it has to be said that the older self-taught people probably started with 8-bit home-computers back in the early 80s.

At that time there was no formal courses, and their knowledge probably covers everything from assembly language all the way up - because most people who weren't just playing games started tinkering with BASIC then moved to assembly.

That low-level understanding of the whole system is invaluable, and really hard to self-teach yourself these days when computers are so complex and mysterious.

This is exactly me.

In 1984, when the Mac came out, I was a starving artist in Denver. I had a lot of college at that point, but no degree. I had foolishly wanted to learn everything interesting, so I had a year of art school and three years of coursework in biology, physics, and mathematics, but I was working in labs and retail by day, and by night as part of a songwriting partnership that ultimately went nowhere.

I was fascinated by MacPaint and wanted to learn how to do that. I had some FORTRAN and some BASIC from coursework, and a little FORTH from a friend, but they hadn't captured my imagination. MacPaint did.

I couldn't afford a Mac. They were 2500 dollars. In 1984 that was half of my annual income. (Yes, I realize that's unbelievably low. Starving artist.)

With help from the woman who became my first wife, I got hold of a Commodore 128. I started by typing in BASIC programs from Compute magazine. One of them was an assembler, and that's where things got really interesting.

I did end up writing an absolutely terrible paint program, but what really obsessed me for months was writing variations of Conway's life. The one I spent a lot of time on was a version that ran multiple sets of rules on the same field at the same time.

The color of a live cell was determined by the set of rules that governed it. Live cells of different colors could see each other for the purposes of liveness analysis, which is how the rulesets interacted. They were otherwise independent of each other. I spent countless hours poring over whatever references I could find about how to make things faster and more comprehensible, and tweaking the rulesets to see what happened. I would leave a program running overnight to see what it looked like in the morning. Often it was a boring disappointment. Sometimes it was spectacular. The rush of the spectacular ones kept me going.

I wrote other programs, too, trying to understand how window and graphics systems and compilers and interpreters worked. I worked in bookstores and read everything I could get my hands on about programming. In those days, retail bookstores paid crap wages, but allowed the staff to borrow all the books they wanted. It was a good deal, from my point of view.

In the fall of 1987, my mother sent me an ad that Apple Computer ran in the Mensa Bulletin, looking for hires. I applied and, to my utter astonishment, Apple hired me, and that started my profession as a programmer and a technical writer.

The way I got the job prepared me well to take advantage of Apple for learning more. I came into the company ravenous to learn all I could about programming. The company had three institutions perfectly designed for an autodidact like me.

First was the corporate technical library, a huge collection of technical books available for employees to borrow. Their policy was that if you wanted to borrow a technical book and they didn't have it, they would order two copies: one to lend, and one for you to keep. I got a lot of expensive technical books for free.

Second was the software library. They wouldn't give you a copy to keep, but they would order software that you wanted to check out, and they would let you renew the checkout for as long as you needed. They also maintained copies of basically every piece of software Apple had ever developed, released or not. My first hands-on exposure to Smalltalk was a check-out copy of Apple's implementation of Smalltalk-80.

The final pillar of my self-education was Apple's competitive intelligence lab. It was essentially a hardware library with instances of more or less every interesting hardware architecture you could imagine. They had a Cray Y-MP. I learned Lisp and emacs on Unicos running on the Cray. I used to sign up for time on the Xerox machines to play with Smalltalk and Interlisp and the Star Office system.

I agree with those who say that teaching yourself leaves holes. I've been identifying and filling in those holes ever since 1987. On the other hand, I can't say I...

Any knowledge of whether Apple still cultivates and encourages personal curiosity and self-started learning in the same way these days?

That sounds idyllic.

No, sorry; I have no idea. I left in 1997 to join a startup and haven't been back since.
> > I know what is happening at a network layer, OS layer, memory layer, application layer, and system layer, and code layer.

> Yep. For me, the biggest reason I think a degree is necessary is because it is comprehensive. Self taught people are going to inevitably have multiple holes in their understanding. And worst of all, they will be ignorant of where those holes lie and how large they are.

This is not my experience. Self-taught people are often much more aware of the potential for knowledge gaps, because they've had to learn what to learn. Part of self learning effectively is appreciating the complexity of a topic and choosing what to focus on, rather than just be lead through it by a teacher.

Their default position is one of humility, rather than the often common attitude of "I have a CS degree so I know what is happening at a network layer, OS layer, memory layer, application layer, and system layer, and code layer". (Hint, you don't).

Yes - I do. ;) However, it may be because it is my passion and work.
Seeing that I graduated in 1996 from a no name college, do you really think that my degree helped me? By the time I went to school, I had already been writing assembly.
Paper vs knowledge - knowledge beats paper.
This, mostly. The author is correct that the skills required can be obtained by getting a degree, they can also be obtained on the job post 3-month boot camp. Sure somebody who has made it through a 4 year degree has some extra skills in “seeing things through” but that is survivorship bias, somebody who has completed 4 years of being an engineer has the same skills, plus 4 years of actually relevant experience and raises.
Fyi, student debt is not a thing outside US.
A CS degree means better HR screening pass rate.

Isn't this obvious...

True story, I am self-taught but have some impressive projects listed on my resume, some even open-source. It's more often than once that I've finally get an interview just to learn that the recruiter has removed these when anonymising my resume.
these have nothing to do with coding skills!

any degree will get you those skills. project planning, deadlines, networking, dealing with people, etc. college will always give you access to people.

what is missing is basically easy & sometimes free access to knowledge. god i miss having access to nearly any library and all these books, and all these publications you can print for free. i still have a trove of PDFs on a USB stick somewhere...

and also all the discounts you get on most software. poor student me would have never had the monies to buy full visual studio back then...

I'm a self-taught programmer and finishing my BS in Software Engineering right now. Something I never appreciated in my career or my first go at college was the value of access to academic papers. There is so much knowledge available in academia that's locked away from the general public. Quite frankly a lot of that knowledge ends up duplicates effort because you can't get to it otherwise.
i agree. academia needs to make this knowledge available to the public. who knows what a genius out there who doesn't have access to this knowledge can do with it? maybe we will be far ahead of where we are now, but i am just dreaming now...
A CS degree helps you get an interview. That's pretty much it.
It's funny the article never mentions learning actual code and learning essential algorithms as part of what makes CS degrees a good choice.

What it does mention:

Struggling as a community; learning independently plus from people who are learning independently of you; networking with people who are committed to the same career path as you; and confidence that comes from having a degree. (I'm paraphrasing extensively)

Since this is something that all college degrees offer especially under bad professors and terrible academic programs, I think the lesson here is heavy goalpoints combined with little guidance makes for successful students and career paths when backed with prestigious degrees.

Talking with co-workers who completed 4 year CS degrees, I feel like I got a much better value out of my now defunct 2 year trade school.

Mind you this was 15 years ago, but I came out of it with a decent enough working knowledge of C, C++, VB.Net and Java - and basic understanding of SQL, PLScheme and functional. On top of that there was a solid year of data structure class.

Trade schools have been largely demonized and shut down in the last couple years, but I can say honestly I would not be where I am today without it.

I never would have cut it in college, I did really mediocre in grade school, I had trouble focusing on things I didn't care about. However, in trade school I flourished, largely because I actually cared about what I was learning. I graduated with a 4.0 and I make six figures now.

I genuinely see college requirements as a horrible way to filter useful but unbalanced people like myself out of the work force.

Same here, getting close to hitting 7 figures. Never stepped foot in a university but I was coding from 13 and working part time from about that age. Uni just seemed like a waste of time as the CS curriculum was already out of date for modern development in the country I'm from (this was mid 90s and internet was taking off).

I would not recommend this career track if you're the kind of person that wants to climb a career ladder and go into management on the business side of things, there are definitely useful skills to acquire on the legal and softskills side. Having any degree will just check a box and help people without a clear view of what they want out of the future. It can also help if you want to put yourself through being just another number at a FANG organisation.

Too stubborn and arrogant to allow someone to tell me I'm incapable of being a success without a piece of paper.

(comment deleted)
Regarding the management comment. I took the trade school route and after being an IC for a while I currently lead a team of engineers - without a degree. Maybe it would have helped though. I've had to read CS books everyday and still do.
The most valuable lessons I got from University were:

- Time and space complexity (Big O, Little O, big Omega)

- Algorithms and data structures (linked lists, heaps, trees, graphs, search algorithms, sorting algorithms)

- Artificial intelligence (neural networks, evolutionary computation, decision trees)

- Electrical engineering logic gates and circuit analysis (gives a good basic understanding)

- Discrete maths (De Morgan's laws)

- Database design

The database design course I did was heavily centered around relational databases but some of the core concepts of this course ended up being very valuable for any kind of DB and also for areas outside of the DB. It taught me a lot about useful software engineering concepts such as identifying functional dependencies in the data, achieving good separation of concerns, establishing a clear data flow, one-source-of-truth principle, indexing of data, etc...

Unfortunately with 95% of programming you just reuse libraries created by someone else and modern programming language come with much of the data structures built in.
I had to learn all that stuff, and it has been nearly 20 years since I took many of those classes. Except for the database design, which I use regularly, I've forgotten it all. Which is really frustrating, because I put a lot of time, effort and money into learning that stuff.

The other day one of our network guys asked me what a Red-Black Tree is. I couldn't explain it. I got an A in my algorithms and data structures class, but I haven't used it so I forgot it.

(comment deleted)
While I agree trade schools are not considered enough for the value they can add, your comment strikes me as reinforcing the college degree path.

1. Beyond a few general requirements, most CS programs do let you focus on what you’re interested in, and to much greater depth and pragmatic application than trade school. “Focusing on things you don’t care about” is a very minor part of college technical programs unless you make up your mind to solely care about some small niche.

2. “I never would have cut it in college” is not a free pass from needing a well-rounded education, appreciation of art, literature, business, ethics, etc., and good writing, communication and organizational skills well beyond what’s taught in trade school. This is becoming increasingly critical in business software settings, where developers are often working directly in tandem with product managers.

I could see trade school working for very specific niche areas, like DBA for a single specific enterprise database system, or breadth of knowledge in devops compatibility across multiple cloud vendors.

But I can’t see trade school as a reliable way to get necessary experience for general software architecture applied to business problems and fundamentals for the social coordination of multi-system software projects.

You personally might have had the raw talent and gumption to parlay trade school into that sort of career skill, I’m just saying it’s not likely to work out as well for a random student in today’s job market.

> Beyond a few general requirements, most CS programs do let you focus on what you’re interested in, and to much greater depth and pragmatic application than trade school.

Not that few. Here's what mine has:

- Writing x 2

- Discrete Mathematics (a few concepts in there are really needed - the rest is mostly not)

- Public Speaking

- Humanities x 4

- Calculus x 2 (I doubt even 10% of SW folks use this)

- Linear Algebra (as few as calculus use this)

- science course (e.g. chemisty, bio, phys - you pick) x 2

- Non tech seminars x 2

- Probability and Statistics (I'd argue one should take this, but I'd still wager less than a quarter of developers use this)

What's worse: The majority of the above are in the first two years - so if you don't have the discipline to do courses you feel are irrelevant, you just want get to the fun stuff. Only 6 out of the first 20 courses are related to computers.

> “I never would have cut it in college” is not a free pass from needing a well-rounded education, appreciation of art, literature, business, ethics, etc., and good writing, communication and organizational skills well beyond what’s taught in trade school. This is becoming increasingly critical in business software settings, where developers are often working directly in tandem with product managers.

Look - I think I gained quite a bit from the well rounded education I got. And my general advice is that people should go for it. However, I also have the reality of experience: Most of my peers who have degrees are poor at writing, poor at communication, poor at ethics, and poor at business skills. I see nothing differentiating them from trade school folks in this regard - and these all matter in the work place.

So yes, I gained quite a bit from those courses. But the reality is most grads do not.

The courses you list are mostly very necessary for well-rounded knowledge and ability to synthesize research and share knowledge (like in a team project), and doesn’t seem to be a high course load. Putting it in the first two years also suggests the later years allow you to be more specialized on CS.

Linear algebra, discrete math & probability really are needed all the time.

> The courses you list are mostly very necessary for well-rounded knowledge and ability to synthesize research and share knowledge (like in a team project),

I can only repeat what I said:

Look - I think I gained quite a bit from the well rounded education I got. And my general advice is that people should go for it. However, I also have the reality of experience: Most of my peers who have degrees are poor at writing, poor at communication, poor at ethics, and poor at business skills. I see nothing differentiating them from trade school folks in this regard - and these all matter in the work place.

> Linear algebra, discrete math & probability really are needed all the time.

Why?

One can understand O(N) enough to do over 90% of SW jobs without taking these courses. You just need a bit of dedicated instruction for it.

And while linear algebra is crazy important for some disciplines, it's simply not needed for over 90% of SW careers.

And I do think a good understanding of statistics and probability can really help you, I also see that most CS majors take this course and have forgotten almost everything they learn in it by the time they graduate. I think some parts of the SW industry are such where you really would benefit from it - roughly 25%. I also think that percentage will increase with time, so I would encourage everyone to learn it - degree or trade school.

Don't get me wrong. I spent over a decade in university doing math heavy stuff. I love it. I can also say from my experience in industry is that very little of this differentiates good from poor performers. Or rather, the main factor is motivation and internal drive. Those who have it learn it with or without a degree. And those who get a degree (even with a good GPA) but lack the motivation forget it ridiculously quickly. I still recall my shock in my first industry job where almost everyone had graduated with a good GPA and a top school and had forgotten most of their linear algebra, discrete math and probability within 2 years of working. And more importantly, they fought hard to avoid doing such problems.

If we were talking, say, electrical engineering (electronics/control theory/EM/communications), then I would heavily tout the degree. It's a ton more math heavy than a CS program, and it requires a lot more discipline to do that on your own, and I've not heard good experiences from trade school on those.

To add, as much as I love university... it was mostly a waste of time for me. Paradoxically, the humanities are now more interesting because I am older and seeking to understand what the fuck is reality.

I'm of the opinion we need to split school in a way where young people focus first on how to be useful, then be useful for a period of time. From here, humanities are more relevant once one has enough wealth and time to appreciate it.

> Paradoxically, the humanities are now more interesting because I am older and seeking to understand what the fuck is reality.

I’m in the same boat as you, I for myself am a former CS student now approaching 40. Up until my late 20s - early 30s I was really trying to absorb almost anything I could that was CS-related and which I reguarded as interesting (for example I used to spend time reading lambda-the-ultimate even though I had never written a compiler and most of the stuff written in there was way over my head), but since then I’ve started realizing that reality (and human interactions) is (are) a lot more complex and difficult to understand compared to anything CS-related. I have since started using some of my CS “skills” in order to further understand said “reality”, as part of some personal projects of mine.

Focusing exclusively on how to be useful to corporations or governments will cost society too much. We have to also focus on how to be useful to effect change, exemplify upstanding moral and ethical behavior, question authorities, etc. How to be good friends, good parents, good civic participants. How to express sympathy, how to understand cultures and ways of life different from our own, and we need to start this learning process early in life!

If someone doesn’t start undertaking study of the humanities until “one has enough wealth and time to appreciate it” this would be a disastrous outcome for the future of hunanity, let alone also frankly something of a wasted life for people who pursue it in that order.

Here, I mean useful period and I include carpentry in that along with car repair or dealing with the electrical box. That is, have a reasonable fallback or be at least useful to neighbors in times of need.
I think some of those should be mandatory for CS programs. From my own experience:

writing: it makes a huge difference to me if some open-source project I'm supposed to be using has good documentation or not, and there are a lot that don't. Poorly written specifications are also a huge waste of everyone's time. Of course you need the right kind of writing class to make a difference here.

Linear algebra: there are different ways to teach this; the prove-stuff-from-first-principles approach which I agree is more suited to mathematicians, and the here's how you use matrices for real stuff which I used a lot in my last job. The moment graphics become involved, it's a big topic.

Prob/stat: this really depends what field you're in but for machine learning it's essential, and that's quite hot right now. I mean this in the sense of understanding what's going on and being able to interpret results, not in the sense of being able to copy a tensorflow command from stack exchange.

public speaking: if you want to rise in the organisation, or just get your ideas heard at team meetings, then it's not a complete waste of time. There are lots of more important factors, but being able to get a point across well is a small factor in your favour.

discrete mathematics: there's only a little bit of this that you'll actually need, but I got from lowly intern into proper projects at one company because I fixed a bug that had been causing random weirdness for ages at the company and it turns out someone implemented Java .equals() in a non-transitive way for one domain class and that was messing with the ORM.

The problem with a lot of universities is they want to teach CS in a way that turns out CS researchers (or at least grad students), which is an overlapping but not the same skill set as good developers.

- Probability and Statistics (I'd argue one should take this

Well, one needs calculus por statistics.

While I agree that the soft skills will help you break the ceiling of being just a developer in a corner somewhere (art not so much), college in my experience is only useful to get you that first job. Especially if you spend your entire career as an “enterprise developer”. You can pick up the other useful skills on the job with time.
> Trade schools have been largely demonized and shut down in the last couple years,

I didn't know this and I find it incredibly surprising. I've literally never heard anyone say anything bad about trade school ever. In fact, I almost always hear about it in contrast with college, which is said to be an expensive waste of time that turns kids into gay communists.

It depends a lot on the school and parents. I had considered a trade school since I like to build shit, but i was pushed away from it.
Good bootcamps are an alrighty substitute, no? Most of them are a bit of a scam but they do get you up and running pretty quickly with a top-down approach.
Self-taught programmer here, in industry for 10 years now.

> Deadlines

I have these at work.

> Teamwork

I have this at work.

> Communication

I do this at work.

> Prestige

I have this from doing a good job at work.

> Networking

I do this at work.

Sounds like I'll be fine without a CS degree.

Well someone has to write shovelware and preach about how code documentation and design patterns are a waste of time.
Completely disagree. Programmers come from many different backgrounds. Having a non-CS degree is a strength because it means you see the world from a different perspective and have different skills. For instance programmers with a physics background are highly desirable in several spaces. And there are many people with no degree who make very successful careers.

What matters most is your passion for programming. Because if you are curious enough you will learn all that you need.

This article doesn't answer "why a CS degree is better" but instead "why any degree plus programming knowledge is better" than just programming knowledge. Of course it's better if your time was free, but is a 4-year college degree better than 1-2 years learning to code? That's a huge tradeoff that you'll have to evaluate for yourself. I think not considering this tradeoff is like comparing apples to oranges.
This article is just a list of unfounded assumptions about the side-skills that CS programs teach . In my experience working with fresh CS grads and PhD students, these skills are not taught with any consistency and have to be picked up in the first six months to a year of full-time work. At the end of the day, an academic program is just a loosely connected set of courses that don't even do a great job teaching the subjects they're focused on, so we shouldn't have high expectations of how well the courses teach skills they aren't focused on!

The kind of full-immersion one-on-one mentoring you get as a junior member of an effective team is going to have a much larger impact that anything you do in your formal education. And that's a good thing too, because I've worked with numerous CS grads who:

• are weak communicators, especially in writing

• are not effective in a team, either for interpersonal or technical reasons (ie writing unmaintainable code)

• are not particular fast or effective, especially in situations where projects and priorities are not fully specified

Now, to be fair, some fresh grads are great on all these points. Just as I've worked with ones who are incompetent, I've also worked with some who are as effective as senior engineers right from the start. But that is not entirely common and almost always a function of things they did on top of getting a CS degree. It's hard to reason about counterfactuals, but I am sure that the same fresh CS grads who are incredibly effective would still be roughly as effective even if they had taken a different path to becoming a professional programmer.

And even if there is any systematic difference between junior programmers with and without degrees, I am absolutely certain that it gets completely erased after several months of working and mentorship in a professional context.

(comment deleted)
I graduated with a physics BS a little over a year ago.

My experience has been that it has taken a lot of effort and time to try to learn things, and keep up with everything. Also, I think my resume just gets straight up tossed out a large fraction of the time compared to CS majors.

Maybe there's other issues, but I've had people look over my resume and things like that.

Additionally, my lists of technology are pretty weak (I'm trying to work on it, but my company doesn't use a lot of mainstream technologies if any).

I did not have any internships in CS.

I don't know how bootcampers and other get jobs at FAANG companies in 6 months, because I can't even get a non technical phone screen with them.

I even did triplebyte without too much success.

That being said, I accept there are probably other issues and things I need to work on, and I'm trying to work on them as much as I can.

But, I have spent a lot of time reading about topics, asking my friends questions, reading conversations in group chats that are technically oriented and looked up things from them to learn. It has been a hell of a journey.

Trying to move to a company that uses more mainstream technologies. So I can have a resume that will actually get me calls back.

This is a bit of a ramble.

Also, considering the article. I don't think I really had to learn any of those things in school well. Maybe if you do clubs and things, but I don't think it's much of a result of the curriculum IMO as far as teamwork/communication go. I know CS majors have senior design where the work in teams, but I think a lot of them suck at the teamwork part.

Current weaknesses of mine: Socket programming, messaging, multi threaded applications, I don't know SQL (beyond basic queries)/database schema design (we don't SQL it at work)

I still barely know what dependency injection, factories etc are. I only learned what a "god object" was today.

I'm trying really hard. I want to have a really good job since I know the benefits in terms of rewards of me studying hard are HUGE.

The article should mention breadth.

University education forces you to take courses that may be outside of being directly related to your field.

My computer engineering degree also included classes in the following subjects, some mandatory, some chosen by me:

- Film history

- Multiple English/Literature courses

- Geology

- Physics

- Chemistry

- Macroeconomics

- World History

All these subjects made me a more well-rounded person, not to mention the diverse relationships with people that didn’t just come from my particular small town.

Is your point that a uni degree in general is better than nothing?
My point is that it’s better than coding bootcamps or otherwise being self taught in CS.
why does it need to be mandatory? There are ways to self teach those too!
Universities are such a waste of time for the whole society.

Having lectures in 21st century is already pointless (we have video on demand). And what is worse, we force professors to teach basic stuff to undegraduates when they could spend time doing their research. And general education requirements? Ugh.

Let's be real, most of programming-related jobs don't require knowledge of a 4 year undegraduate degree in CS even taking career progress into account (most modern jobs that only hire college graduates don't require undergraduate degree level knowledge).

Is this true throughout a developer's career, that they don't require any knowledge from the undergrad level to do better?
As a developer progresses further in his/her career, it becomes more and more true.
In my experience it depends more on the passion of the individual. Finding amazing self taught devs is a real score. The most creative coders I’ve worked with were self taught (not from code camps), likely due to the intense amount of commitment and interest required to teach themselves on that level.

Not saying CS degrees aren’t creative, IMO they just seem a little more prescriptive in their solutions to problems.