Is it still worth spending $40K+ on a CompSci degree in the age of self taught?
medium.com
medium.com
Anyone can drop in for free into any college class now without enrolling there's nothing stopping them, since most professors don't care as long as they don't have to deal with the student, but people don't. We mainly pay for the degree for prestige, the paper diploma and the constant push we get to finish and the fact that we enrolled in a class and in school and have to finish.
Self-taught is a way to never get through a degree and never get a job for most people.
40k+ is the cost of not having elite level self-control. A price worth paying for most.
Especially for the slightly more esoteric things relating to programming, like the mathematical underpinnings, principles of programming languages, pushdown automata, big O notation for algorithms, somewhat complex tree data structures etc. On your own, with things coming up in the real world, the temptation would be to always learn more about the latest Javascript framework and what have you.
I had a class where I had to do a homework where I described the Completely Fair Scheduler of Linux and how it works. With self-study, there never would have been a night that I would have seen that as being a priority over other things, but being as it was needed for class, I found the time to learn how the CFS worked.
The general pattern I see that distinguishes the self-taught or "picked it up along the way" programmers from the formally trained programmers is the theoretical base. I taught myself programming in high school and probably could have gotten a job by teaching myself the LAMP stack and skipping college. Which I did, except I still went to college.
My degree covered:
1. Linear algebra, multivariate calculus, some more heavy duty stuff for fun, discrete math, graph theory, algorithmic analysis and techniques for performance modelling
2. Computer architecture - building my own CPU, instruction pipelining, caches, branch prediction, interrupts, etc...
3. OS fundamentals (processes, threads, memory virtualization, paging, I/O, memory mapping, file system fundamentals, etc.)
4. Functional programming patterns
5. Network stack - BGP, TCP, SSL, HTTP, DNS, etc. Had to implement several of those protocols as homework.
6. Machine learning basics
7. Patterns for distributed applications (async I/O, modeling server load, techniques for decentralized decision-making, re-entrant operations...)
8. Relational algebra and database algorithms
9. Cryptography basics
I would never have picked all of that up after four years on the job because it's just really hard to fully immerse yourself in theory heavy subjects when you have a day job. The day job heavily incentivizes you to get better at what you already do. The degree lets you spread out.
I think the best way to describe how I feel about it is this: if you think in terms of iterating on various skills, the four year degree is probably the best way to make sure you never have to do the first round of reps again.
Also most self taught programmers are dogshit at math/theory and it reflects in their code.
Now I'm in the position of hiring I really don't care what papers you've got and feel that if you even mention them then it's probably cause you've not got any experience yet worth talking about.
I'd recommend the same thing to everyone who wants to learn: make something that excites you and you'll naturally learn
Also people talk about the downturn in tech around 2000-2001 - I was working then, and startups and dot-coms were going broke left and right. I interviewed at traditional companies - some required a degree, and if they did not they at least asked about it. It doesn't matter when times are good, but when the economy goes south, and, let's say, you're 50 years old with two kids and you're laid off - then it matters. And by that point it is harder to jump into, then when you're in your late teens or twenties (and has less lifetime return).
I'm not really sure what "self taught" means. You are supposed to spend at least three hours studying for every hour in class. So in that sense, it is only a question if you go to college and are 75% self-taught, or don't go and are 100% self taught. With those being the hours spent, you are only going to class for one year any how, and studying for the other three years.
I don't know why the blog post focuses so much on the first paycheck. Your pay will go up over the years. Even beginner programmers get paid decently for a new graduate.
In terms of understanding things like mu-recursive functions as a model of computation, mathematical ideas - so that the idea to use a Goedel number or exponential decay might occur to you - these things you are much more likely to find in a CS grad then one who is not. A CS grad might not know these things, but a non-CS non-grad is even less likely to know them.
Also - a beginner might not know what they should learn. Most beginners want to start by knowing which computer language to learn. Lots of CS programs start off teaching calculus, discrete math, graph theory, theory of computation, and then you start with learning a programming language in a introductory course to algorithms and data structures. It's not just not knowing something - it's not knowing what you should know. I spent more time than I thought I would studying critical sections in class at college. Otherwise I may have thought it was something I could understand in a day or two, which it is not.
Also, it speaks of different circumstances. But one does not have to shell out all the money up front. If needed, you can find work, preferably in technology, find a good public school nearby and take one or two courses at night (or on weekends) every semester.
Skill in knowing the ins-and-outs of the latest Javascript framework is ephemeral. I have years of Solaris knowledge and experience, much of which is useless unless by chance someone has an old Solaris server around they need to find the LUN numbers from. But knowing the fundamentals is useful for a long time. And the earlier in your career you learn them, the better.