back

by rvz·6y ago·view on hn ↗
> 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.

5 comments
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.

>> 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.
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 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.

> > 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.
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 regret how my natural curiosity ended up leading me into what became my profession. Undoubtedly, I would have been better prepared if I had taken a disciplined approach to learning programming from the beginning.

On the other hand, if I'd had that kind of discipline in the 1980s, then I probably never would have discovered that I liked programming in the first place.

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.
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.
>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.
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.

> 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.

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".
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.
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.
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.