Self-taught is wishful thinking. We've had the ability to self learn for ages yet most people don't. My local trade school has had a learning center for anyone to go to and learn from hundreds of professions for at least 40 years yet very few people take advantage of the opportunity. It might even be harder to self learn now since it takes very little to quit. It's just too hard for most people to work their way through the courses alone. It's too easy to quit for whatever reason.
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.
> the constant push we get to finish and the fact that we enrolled in a class and in school and have to finish...not having elite level self-control
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.
As so many programming positions pay 3x that amount in a year - and more, over a course of a career, I would say yes. You will earn it back in four months of working.
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.
With a college education, you are paying for someone to curate content, present it in a way that builds on itself, and provide a reasonable amount of depth and breadth of knowledge. Maybe some of this is solved with modern online courses, but the sheer amount of noise seems high. Free books aren't free -- they cost dozens of hours of your time. It's very easy to become discouraged or paralyzed by choice.
It's no only the university course / curriculum, but the environment is also very important. You have colleagues with whom you can discuss and learn. Online forums are still not as good as that!
Got a degree in the UK and since attaining it have never shown it to anyone. My greatest learning was from creating a Travian-like web game because it was fun and exciting.
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
IF you have fucking amazing people skills AND a passable ability to self-learn THEN compsci degree skills are incidental and you'll pick up enough to pass. Most people don't.
Also most self taught programmers are dogshit at math/theory and it reflects in their code.
If you can afford it before you start your career, and if it's a good comp sci program, and if you take it seriously, then it's very much worth $40K. Or in my case well north of $100k.
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.
14 comments
[ 2.2 ms ] story [ 37.0 ms ] threadAnyone 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.
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.
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 most self taught programmers are dogshit at math/theory and it reflects in their code.
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.