Hacker News new | past | comments | ask | show | jobs | submit login

CS is more than abstract theory. It gives you a foundation that you otherwise are unlikely to get. Self-taught means learning things useful for your existing job or things you find interesting. I'm work almost exclusively on the frontend, but my CS degree gave me enough foundation that I'm fairly familiar with compilers (I wrote one in college for a required course).

I don't necessarily enjoy writing compilers. But the fact remains that I can write a compiler. I can program in C or C++. I do understand pointers. None of this may hold any real value, but I wouldn't be able to do any of them if not for the degree.

> But the fact remains that I can write a compiler. I can program in C or C++. I do understand pointers. None of this may hold any real value, but I wouldn't be able to do any of them if not for the degree.

I liked your initial point, but the argument weakens... People absolutely have learned all the above things (and very well), on their own, outside of a CS degree, and I bet you could've.

I wasn't advocating that people don't. There are absolutely vastly better compiler programmers than I am that have never taken a formal class.

My point was that I wouldn't have learned it because I don't enjoy it. And sometimes, professionally, we get to do stuff that isn't fun. The nature of being self-taught is heavily biasing the things that interest you. College forces you outside of the box. Outside of the box happens to be those things for me, but they'll be other things for other people.

Sorry if that point wasn't clear.

As a self taught developer I can say your point assumes self teaching is all about following your interests. This is simply not true. Self teaching is a combination of following your interests and figuring out your areas of weakness and attacking them. Part of my self learning involves browsing college degree requirements or graduate programs to identify must know topics, I learn them regardless if I have a particular interest. If college is the only thing forcing you to think outside the box, what hope is there for your long term learning.

My point assumes people bias their learning towards their interests. That isn't an opinion, that's just human nature. That's not to say you can't learn things that don't interest you, but if you aren't going to do it formally you certainly have to be driven by filling those gaps and most people aren't.

Learning to think outside the box and learning about specific specialties that you don't find interesting aren't even remotely the same thing. If you read what I wrote, you'll notice the example areas I gave. None of them were "thinking outside of the box", they were fields that didn't interest me.

The value they bring is that I learned a common language. I can talk to ML engineers or Compiler Engineers in a common language because I have experience in those fields that I wouldn't had I taken a different route. That isn't even remotely a requirement for my field. It's just useful for discussions with other people.

Maybe you'll spend hours and hours learning compiler design and implementation so you can have a friendly conversation with a colleague at lunch, but I'm not going to. Formal education forced that on me. That's been healthy for my professional networking, but that's about it. I still consider it useful, but had I skipped the CS degree I wouldn't do it. Nor would most people.

At the same time people who are self taught typically have more time and energy to attack things in more depth. My cs classes are pretty 'standard' and on my free time I can go on long tangents where I really learn. I learned about assembly programming and the bacics of how cpu's work from self learning rather than getting a very simplified understanding from a class. There are many things in cs that can not be learned in 1 semester and people who are self taught have the ability to take things at their own pace and jump to different topics, something that busy college studens have little time to do

It sounds like you're speaking for yourself more than for anybody else.

No, I'm speaking about human nature. Most people don't learn things they dislike because it fills a knowledge gap. How many people do you know with hobbies they hate?

It's natural to gravitate towards things that interest you. Some people are driven by gaps and learn things regardless, most people do not. That's not even controversial.

I didn't know we were talking about hobbies.

That's literally what it is when your self-taught. You generally don't get a programming job then learn to program.

Would just like to say that this is a fantastic point, and really makes the case for a formal education. It takes a special kind of self-motivation (which I readily admit I do not have) to diligently learn those uninteresting-but-necessary parts of the CS curriculum.

and many people throughout history have also learned math on their own, this doesn't devalue the worth of a math degree.

There is actually a difference between being self-taught as you describe it, and being an autodidact.

The latter is able to identify holes in his own knowledge, and find appropriate material to educate himself on. That ability is what defines an autodidact in the first place.

This is also the very same thing you get taught in basically all sciences: How to aquire knowledge about a subject matter you yet know nothing about.

So, an autodidactic Programmer without a degree will most certainly have similar knowledge as a CS graduate, simple because that is how such people "tick".

It's just that not every self-taught programmer is an autodidact. And in that case I agree with your argument.

Exactly this. The way I think of it: It expanded the space in which I can search for solutions. I have enough underlying detail of the computer science map to pinpoint where fruitful design opportunities lie, and what patterns are likely to fit, /and/ which concepts would make a poor mapping for a given problem, leading to bad abstractions.

> But the fact remains that I can write a compiler. I can program in C or C++. I do understand pointers.

EDIT: Note - I see your replies and reasoning with others on what you meant; I do agree with you there, too.


I know you can do all of them without a CS degree.

Where a CS degree really helps, though - and this is something that I know I lack (but real-world experience has taught me enough that I can get by) - are what could be almost considered CS fundamentals:

* Data Structures

* Sorting Algorithms

* General Algorithms

Fortunately, in the day-to-day realm of most programming, you don't need to implement any of them from scratch, and most of them you can learn the basics of (or "best common examples") fairly quickly, which is where I am at mostly.

The problem happens when you run into a situation that isn't seemingly addressed by that level of knowledge (which again, thankfully, in most day-to-day work is extremely rare); by having that prior exposure via a CS degree, you would at least potentially know some words or phrases to look up to refresh your memory on concepts.

Further, you would also have the knowledge (or refreshing of knowledge) to be able to understand any new developments that may have occurred since you were taught (and so could easily read any research papers on the topics).

If I were in such a situation, I would need to break out some google searches on various xyz (ie structures and/or algorithms), use whatever understanding I have to understand those to a level to be able to pick out potential candidates to study in more depth, and maybe hope to run across more recent stuff that may be better (and pray I could understand it enough to implement it).

The one upside in this day and age, though, is that for all of these, for virtually any language I currently understand, someone has likely written an implementation of it - which can be extremely helpful both in the solution to a problem, and in understanding that solution.

But a CS degree would make things much simpler, were it something I had time to pursue. I could probably find the time, but the cost vs benefit ratio no longer works out to my favor, beyond self-edification, given my age and current life obligations.

The failing here is that you have put a (rather low) ceiling to what an auto-didact can achieve. There are no hard limits to a self-taught scholar of computing, certainly not things as elementary as data structures and algorithms.

In a cs degree building a compiler would not give you any points what so ever. Writing about Operational semantics would:


Writing a compiler is just the side effect of showing it could be useful. It’s not hard programming equals cs. It’s the science part of computer science that matter.

Is there any reason to suspect a self-taught developer couldn't also self-teach themselves simple compiler writing?

I suppose I'm an evidence proof of the contrary.

I'm about 3/4 of the way through writing a book on implementing interpreters and compilers [0]. My day job is as a software engineer at Google working on the Dart language.

My highest attained degree is a high school diploma from a shitty public high school in southern Louisiana. I went to LSU for a year and a half and dropped out.

[0]: http://craftinginterpreters.com/

No, and my post never implied anything like it. On the contrary, my point was that I was forced into it by degree requirements. I'd know nothing of compiler design or implementation today without being forced to learn it. It's a valuable skill to be sure, but not one I'll ever use professionally because I find it frustrating and boring.

And that's my point. If you're self-taught you have to be willing to learn things you find completely uninteresting (or boring, hard, whatever) if you want to be as well-rounded as a CS graduate. Most successful self-taught programmers do exactly that. Most people don't.

> If you're self-taught you have to be willing to learn things you find completely uninteresting (or boring, hard, whatever) if you want to be as well-rounded as a CS graduate.

Not necessarily, you could also just find all that CS stuff interesting.

Applications are open for YC Winter 2020

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact