I have only met one self-taught person who reads anything like this. My experience is exactly the opposite. Most self-taught programmers are great at programming and solving business problems, but tend to be less technical and think academic stuff is a waste of time.
The academic stuff is invaluable, but people only get a small nibble of it in their degree programs. That's why I value the knowledge over the education/process.
So maybe getting the degree isn't necessarily the best path to get into our industry.
I also agree with that. The vast majority just aren't interested or did the minimum to pass classes, without really absorbing it.
What I disagree with is the self-taught correlation. The people who can do what you describe overwhelming are academically curious and have degrees.
Most people I've met in the industry that did not have a formal education (or an interest in one) would end up scratching the surface and not really dig deeper. The best programmers I know did go to great college programs. Not that the programs made them great programmers, but they acquired a breadth (not depth) of knowledge that prepared them for a lifetime of learning.
Without formal education it's very hard for you to know what you DON'T know. You can go very far in this industry without ever touching a book, giving people the assumption that it's a waste of time. Bootcamps prepare people for work leave it at that, where many people stagnate.
College has quite a few problems, and for some really driven people it's not necessary, but on average it works.
On the other hand, if you're talking about people who decided in the last decade, as tech salaries exploded and other industries dried up, that they could just learn to code without a formal education because everything is on the Internet anyway, they seem to largely be bare-minimum "I understand roughly how a browser works and damn near nothing else about computers and networks and distributed systems" types.
And the quality of a brand-new college grad is almost always lower than a multi-decade veteran, regardless of where they went to school, but that doesn't mean the education was valueless. That doesn't seem like a revelation.
The kind of person who'd shine as a self-taught developer, would be on their way to be distinguished engineer if they'd just done a CS degree to go with it. A degree does not kill the energy and initiative that makes for a top-tier self-taught engineer. But, it grounds your foundations, opens doors and lends you much needed prestige. All of these together will put a person on course for exceeding any 'merely self-taught' or 'merely MIT educated' engineer.
Your best self-taught Computer Music hires would likely have been even better if they'd done CS. And if they're good enough to be practically guaranteed 6-figure salaries, then the debt of university education is hardly a risk at all. Hell, they could pay off their debt just from internship-salaries and signing bonuses.
what makes you think so?
how would those basics of basics of computers and stuff would help you to become distinguished engineer?
self-taught people with huge curiosity are well aware of this stuff because this material is available on the internet freely
A self taught person doesn't even know that these things exist unless they also have an excellent mentor at the beginning of their career in the industry. The material may be freely available but it's not stuff that they will consider unless they also have a penchant for boring theory.
Please, I thought somebody will mention some arcane, rare topics that self-taught person may have no opportunity to hear about, but definitely not those really popular topics.
People talk about those 2 all the time, especially in context of interview for big_tech
>A self taught person doesn't even know that these things exist unless they also have an excellent mentor at the beginning of their career in the industry.
You don't need to learn those at your year #0, year #1 or whatever, it heavily depends. But if you worked for e.g 5 years and didnt need those then still nothing prevents you from learning.
Anyway, almost all graduates barely have any proficiency in multithreading, let alone distributed systems.
>The material may be freely available but it's not stuff that they will consider unless they also have a penchant for boring theory.
I thought we were talking about people with drive, with passion, people who are potential candidates for being distinguished engineer, not average person.
Agreed. These are it something many “self taught” developers I know have never heard of. For fucks sale with all the complaining about things like leetcode and other interview styles. do you seriously believe self taught people have never heard of these things?
Unfortunately, it seems in recent years “self taught” became synonymous with “some guy who decided to do a bootcamp because he heard there was money in learning to code”.
These are both extremes but still, the average self taught developer is not the one who interviews for big tech exactly because he has never heard about invariants.
Those who value the auto-didact most are often those who value the individual pursuit of curiosity and idiosyncrasy. The eager student hunts down or pillages knowledge wherever they can find it. In the extreme, the auto-didact is self-mentored. Individual interests and unguided exploration of existing literature builds a personalized ontology of problems and solutions and ways of thinking. The distinction of important vs mundate, as well as specialization, is more idiosyncratic. The auto-didact may belong to a school of thought with one member.
The underlying experience is when these groups meet is almost culture shock. It could lead to great collaboration or to a meltdown, depending on the temperaments of the individuals and their willingness to embrace or interact with the "other"...
I was perfectly aware of them as a 15-year-old teenager decades ago.
Think of your own situation -- did you learn what you know about JITs by taking formal classes?
The reality is that these are arcane topics for 99% of the programmers out there and even more of the self taught ones.
> did you learn what you know about JITs by taking formal classes?
No, but JITs or emulators are not fundamental topics.
One example I can give is this: solid knowledge of data structures, together with some theoretical 20-years-old knowledge of query plans and normalization, meant I could understand a database's EXPLAIN output and quickly learn materialized subqueries and denormalization the first time I needed them. Even obsolete knowledge has a core that is still valid, and experience is also about being able to recall it and apply it. If you have done some CS at school, you will be faster at this because you have more dormant concepts that you can recall.
Now how the fuck do you complain about something if you’ve never even heard of and “don’t know exists”. No one who’s never heard of algorithmic complexity or invariants aren’t going to complain about them because, perhaps to your amazement, they simply have no idea these things exist. But maybe that concept is a bit too complex for you.
Stack Exchange, Quora, Reddit are all full of pages like https://softwareengineering.stackexchange.com/questions/2083... (sometimes with a mocking tone).
The initial assertion was:
> A self taught person doesn't even know that these things exist
Not “a self taught person doesn’t understand these things”, not “a self taught person doesn’t appreciate the usefulness or application of these things”, or whatever else you’re trying to argue.
Finding out which is which, when left as an exercise to the reader, is not terribly efficient.
If you know how to do that, with some effort you can learn everything you want (in CS). I know I've done iy.
Because that's what "self-taught" means, and unless you can identify the things specifically that can't be practically learned by a determined person without going through a 4 year CS program, you're basically making things up to retrofit to your bias.
I don't know why so many people seem to believe that foundational CS knowledge can only be gained through doing a CS degree. The Internet was built by "computer people", and computer related resources were among the first things to be highly available and easily found on the Internet.
Maybe what you claim are true in a "literal" sense but I doubt it's very useful. Basically what you're saying is that assuming a person's that did not have a CS degree has a CS skill level X, then if they spent 4 more years studying CS they would presumably have a skill level > X. TBH at the highest levels I'm not sure whether this even holds, since once you get to a certain point, the depth of your knowledge and skill has to be complemented with some breadth as well. Often interdisciplinary knowledge brings new insights.
Yes ;) -- you can't teach "Stanford", "MIT", or "Harvard".
Not just the prestige, but the really strong networks you build. It helps you be 'I know a guy who knows a guy' distance from VCs, experts and hiring managers at top labs.
A lot of my close friends went here, and they're able to catch up over phone with people who leave my linkedin requests on 'pending', and this is with folks who've achieved exactly the same as me at the same age.
It is a force multiplier beyond comprehension.
Going to those places to get a VC to email you more easily is better achieved by getting into an yc or some other incubator.
Not saying that it’s fair, college costs too much in the US, and employers overindex on good schools. but I don’t get the argument that a self taught person should be treated equally hiring-wise
But this:
> I don’t get the argument that a self taught person should be treated equally hiring-wise
.. this is a totally different question.
If two candidates performed at the same level in interviews/tests/whatever, and one of them has a CS degree while the other does not, IMHO the proper interpretation is that, assuming that their performance scores in the hiring process reflects candidates' actual abilities, is that the candidate without the CS degree is a better learner (of CS related topics).
Put it another way, if a person who only spent a couple months in boot camp performs on a similar level as a CS graduate in interviews, it really means the former learns at a terrifying speed, and has huge potential. It also helps that many people like you would prefer to pass on the candidate without the formal qualifications, so there's even less competition for the candidate even though they at least have the same level of technical ability.
This line of reasoning depends heavily on whether your interview process can actually gauge the technical ability of the candidates. If it can't, _then_ assuming the one with a CS degree has better skills is more reasonable. But at that point, you might want to fix your hiring processes instead of arguing this point.
For one, self-learning just damn hard. Staying motivated to put in self-guided 8+hours everyday without natural peers, external structure and good external evaluation is just hard. You can sustain it for spurts, like 1 summer or in my case 1 whole year, but it erodes your mental health.
It is never clear when a topic is especially important. I can't go to office hours to clarify certain doubts. I can't take on especially daunting tasks that I could with a group of peers together. Worst is that env setups themselves lead to you getting stuck doing accessory work, instead of focusing on the main topic you do want to learn. Honestly, finding top quality coursework (MIT OCW is gold), assignments and notes was trivial. It was everything else that was really hard.
My self-learning tendencies didn't magically go away when I started my masters. I still leveraged all of them and I still do. But, it did solve a lot of my the challenges that came with being self-guided.
Learning for learning's sake, or because you want to get a job as a dev: that I can see being a grind, with motivation being difficult to find.
But if you have a idea for a product, and you want to make it concrete - the motivation is easy. I think most of the self-taught developers I know (myself included) started that way: they wanted to make something, and so they learned how to make software on the fly, while building their thing.
UT Austin's degree requirements are https://www.cs.utexas.edu/sites/default/files/images/BS%20Ch... and course descriptions are https://catalog.utexas.edu/general-information/coursesatoz/c...
That's about 16 required classes including Linear Alg., Statistics, A Child's First Programming Class, Data Structures, Discrete Math, Algorithms, Architecture, Operating Systems, plus another 8 of your own favorite upper division electives (CS 340 and above).#,##
Then there's the question of what you mean by "studying". Just reading the books isn't really going to work. That's 50 semester hours---weekly class wall-clock time---and the ol' rule of thumb was 3 hours studying per hour of class time###, for 15 weeks or 3000 hours. But you might be able to do it in less.
So, it's doable, certainly.
A formal degree program has two advantages:
1. Having somebody to advise you on what's important and what's not. Not all of the chapters of SICP are equally meaningful, and having someone who already knows this shit and can say, "pay attention to this chapter, it's important," or "skip those exercises, they're not worth it," or even "forget that section, it's outdated; here's a paper" is quite useful.
2. Feedback. Even if you have the answers to the exercises, having someone to look at your crappy program or broken proof#### and tell you "you are missing this, try that instead" will speed up understanding considerably.
And that's aside from answering questions and making a second pass through some material when you're sitting there staring like you've been hit with a captive bolt gun. It's significantly more efficient to get to understanding than working on it yourself.
And then there's the requirements for things that you would not, yourself, choose: Spanish? !@$&%){ Calculus? Those damn writing requirements? Ethics and leadership? You touch on this yourself: many of the self-taught people I've seen have been depth heavy with little breadth.
Which brings me to another point. Those computer people who built the internet typically already had degrees in physics, math, EE, or something else. And, they also tend to have that depth to breadth problem. (Then there was the afternoon I spent explaining to a former Aerospace Engineer (and quite good programmer) why string = string + character was so slow. And why it wasn't slow on that other implementation.)
# This has actually been dumbed down since I went through in 1986-1990; it used to also include a full class on formal logic, automata theory, and basic electronics. So, hmph. But then I didn't take physics, chemistry, or biology, so yay.
## Stay away from CS 340. It sounds like fun, but it seems to be taught by Warren Hunt...
### Hahahahaha, wheeze... Ah, weekend nights in the computer lab...
#### They're the same thing, remember? :-)*
Even then I regularly find that so-called "fundamentals" are missing, the number of times I've had to explain page tables, how the kernel shares memory and other core details is surprising. Everyone drives Big-O notation left/right/center but can't tell what a page fault is or why algorithms with higher complexity wipe the floor with better "ideal" algorithms under actual operating constraints. I've found that engineers who have drive or innate curiosity will poke in those areas but getting a degree doesn't automatically confer that knowledge(or guarantee that it sticks).
Also, if you're getting into systems programming I care about 0% about "prestige", it's a domain that is even more binary(things work or they blow up spectacularly[1]) than some other programming domains. I care that someone understands the fundamentals, can apply reasoning and drive a hypothesis with data more than what college they did/didn't attend.
[1] https://www.usenix.org/system/files/1311_05-08_mickens.pdf
Why is C / C++ education so important?
Personally, What helped my during my studies were type theory, PL, complexity theory, etc. Had I gone into systems development, then my compiler courses would probably be of most value (which are standard curriculum in any CS degree).
One of the best courses I had was taught by Bruce Dawson, it was an entry-level "image processing" course but really it was a tour-de-force on cache hierarchies, modern computer architecture and how to build efficient real-world algorithms and not things that just scored well on the complexity scale. The first assignment was a simple bit-blit, he grabbed a random assignment from the class and in about ~30 minutes walked us through a multi-order-of-magnitude performance improvement with just small adjustments that made the program more cache-aware and also showed how you empirically test for performance improvements instead of doing it in a theoretical manner.
Back when I was in college(which was admittedly a long while back now) those sorts of things just weren't taught and that class was by-and-far an outlier from traditional coursework. My experience has been that even though there's a lot of talk about "fundamentals" in a CS degree it's touched at such a shallow layer that practical application of any of those fundamentals are missing and it doesn't "stick".
I've met all of a handful of people who can tell me what restrict does(much less how to use it), what a cache-aware data structure is or why we care about value types. ABI is just a 3-letter word to a large majority of people because they just don't have to deal with it(but are then oblivious when it blows up, I.E the number of times I've seen STL in what are supposed to be ABI-safe boundaries). That stuff is all foundational at the systems level. I've had much better luck with breaking people of their assumptions(I.E. Big-O) and working up from first-principals of how computer architecture works and structuring systems in such a way that take advantage of that instead of a theoretical ideal.
To me, this is a bit muddy:
Yes, when doing systems level development, you need to understand the system you are targeting. Not all CPUs have a concept of cache misses or page tables. At my uni this was taught through computer architecture and operating systems classes.
These courses incidentally also included C, though they didn't need to. The reason that did was because they were precedents for the compiler course and prepared the students to understand compilers (I TAed in said courses). Later courses at my uni would be algorithms engineering that taught students how to make, well, cache aware implementations.
Understanding how a given hardware architecture works on how to most efficiently utilise it has nothing to do with C / C++. Many courses at most (European?) universities will happily teach you everything you need to know, but C / C++ are probably not even mentioned in the teaching material.
Actually, I just checked: https://kursuskatalog.au.dk/en/course/117933/Computer-Archit... and no: No mentions of C or C++
So I do understand you would be disappointed if you went for courses on C / C++.
My point is if you're not using C/C++/Rust what are you using that exposes those concepts? Not saying you can't do those things in other languages(I've shipped cache-aware datastructures at scale in Java using ByteBuffers + flatbuffers) however you're having to reach through abstractions and/or other limitations. Say nothing that on most OSes that C tends to be the OS ABI as well.
Assembly? Why bother with a language and a compiler, when you can instruct your CPU directly.
Obviously you also learn to compile C to assembly and inspect the code.
Surely using Python to code OS course assignments does not make much sense. But that choice comes naturally with the course in question. Courses about a specific language are set out to become dated from the start.
There are many others like me who would and could do it, but lack the financial or social resources to put it into action. If I lived in Europe I could have my education paid for.
4 years instate tuition is around $15k * 4 = $60k total. That's not cheap, but not that expensive either.
If you are smart enough to end up an excellent software engineer, then you should be able to get decent enough SATs and Grades to get into your local flagship state school.
So, that means either financial aid, or a scholarship. Are there any scholarships for low income white guys? My guess is no, because we are assumed to be on top of society already. I'd be considered an older student too since I'm in my late 30s.
Based on my own cursory search, there are no real opportunities for me to reach higher education without putting myself into potentially life-ending debt. I'm even in a state that's renowned for CS (Washington) and I have not found anything.
A lot of programs seem to be targeting mostly high school students or minorities.
It's great that those groups are getting help, but I cannot help feeling left out. Is my desire for education or a better life less valuable or less important because of my identity?
Of the programs listed on that page, I have a chance at maybe two: the State Work Study, or the College Grant. The College Grant seems to look at a lot of variables, so the level of coverage may not be as "free college" as advertised, though I do make less than 200% of federal poverty at present.
The others which advertised helping disadvantaged people seemed more focused on helping women, minorities, and foster children. Fair, of course, but still doesn't seem like they'd be interested in helping someone like me.
It seems like a wonderful environment for non-white, non-male students to get a leg up. Lots of stuff to help them.
I wonder if there's a male outreach program to get enrollment and graduate rates up for men, since they've been falling for at least a decade...
Low income? Go into sales or work in an oil field or go be a lineman for a year. Save $100k, go to school after.
If you live in Washington state, I know you know linemen are in demand.
If you’re able-bodied: this is a viable path. Risky? Yes, but that’s life.
I don't know what a lineman is, but I'm definitely not up to hard labor; recovering from tendonitis I got from a recent agricultural job.
Is electrical easy enough on the body? I've daydreamed about a dual CS/EE but I imagine the grit required for that path is far beyond the resources available to me.
Thanks for the recommendation, though, I'll look at it.
You seem to be really focused on this specific "low income white guys" thing, but you are missing forest for the trees.
I cannot speak for every single state in the US, so I will just give one example. Georgia (since I attended college there as a "low class white guy", so i am very familiar with this specific one) has HOPE+Zell Miller scholarships. The former covers 90% of in-state tuition at any public GA college, the latter covers 100%. For the first one, you need a 3.0 GPA, for the other you need 3.3. Both are available to every state resident, including "low class white guys". This allowed me to graduate pretty much debt-free from a great school.
I presume a lot of states have some similar scholarships/programs. And that's on top of federal financial aid+other forms of financial assistance.
I realize it comes across that way, but I'm keenly aware that most assistance for college, in the States at least, is highly based on unchangeable traits of each student. It's worth considering that when you are a student who will be unfavored due to those traits. What forest do you think I'm missing? Do you think my sex and ethnicity won't be taken into consideration? It is for other students, why would I be any different? Is it because it's somewhat uncomfortable to talk about a crack in the system where people are assumed to have favor and resources to gain an edge, but in reality don't? If the bias was as strong as is perceived, we wouldn't be having this conversation because I'd have graduated in my 20s.
Everyone deserves an education. We should be more like Europe in actually investing in our people.
By and large my experience with these graduates is that their awareness of the field does not extend much beyond what they learned in school and what the current hype technology is (today it's ML). If you got enormously lucky, they worked or interned somewhere special and were able to expand their skillset.
Consistently, the absolute best developers I've worked with tend to be self taught and especially people with Computer Music degrees. It turns out that learning DSP is a skill that pays huge dividends elsewhere in this field. I've also worked with CompSci Ph.D.s that can't build their way out of a wet paper bag.
As far as the degree programs go though, Waterloo is excellent. I would even say above the rest. Even MIT. I am consistently impressed with their graduates that I've had the privilege to work with.
And as for my own journey, I have my weak spots. I also tend to read more papers and technical books than most of my peers by a significant margin. I think that's my edge.