Consider getting a “DIY” degree online instead of a traditional CS major
pashabitz.comI think the biggest disadvantage of a DIY degree is that there's no one requiring you to take classes that don't interest you. Thing is, when I was studying, I was grossly incorrect about 1) which classes I would come to enjoy, and 2) which subjects I would actually use every day at work. There were lots of things I studied only because someone was making me, but that I found to be incredibly fascinating or useful once I had learned a little about them.
That's the biggest thing I think someone would give up by not pursuing a traditional degree.
These articles are essentially an instance of the fallacy that all labor is equivalent.
If you are self-motivated and intelligent enough to learn the equivalent of a CS degree on your own, then the upper bound on your career trajectory is often significantly higher than "senior software engineer".
So even if you can self-learn, the article is still bad advice. Better advice would be "if you can learn this on your own, maybe aim higher than code monkey jobs".
Go ahead and major in CS because it'll be easy and enjoyable and a good fallback. But also pick up a second major in pre-med/pre-law/econ/finance/engineering/etc. Or get involved in research projects, etc.
So, yes, this is bad advice for weak students. But it's also often bad advice for strong students, who should be aiming high.
I’ve met some really great self-learned programmers. Never had anyone self learned even been able to make a basic inductive proof, but they will still call themselves kings in CS.
Got a bit sick of the attitude that CS is programming. Switched to Data Science and after a while I’m starting to see Data Scientists that can’t do even basic math. With 6 lines of copy pasted code they’ve made a dnn. They know how to separate into test sets and that’s it. I really feel we need certifications that people actually respect because this is just the ultimate lemon market.
Now my colleagues are just PhDs and I couldn’t be happier. But still I do worry about the field. What will math heavy fields do in the future? Slap theoretical in front of the course as to not make self-learners self-conscious?
I suspect every technical field experiences this. For example, a surprising number of mechanical engineers I’ve worked with don’t know the difference between longitudinal stress and hoop stress derivations and the resulting impacts on design, yet they regularly design pressure vessels.
I think the reason has multiple dimensions:
1) most jobs, outside of fundamental R&D don’t require deep levels of understanding because they are more in the vein of “get ‘er done” type of work. Truth is, PhDs are over qualified for many (most?) jobs
2) some people simply want a credential and do a brain dump immediately after university
3) as you alluded to in a different comment, hiring managers often don’t have the technical chops to separate the wheat from the chaff
Haven't data scientists been watered down to effectively glorified data analysts who use programming languages and libraries as tools?
It’s just a lemon market that seems to get worse with time, everyone says that they can do anything to get a foot in the door.
Heck one of my friends has more than double my salary because he said he was a specialist in a marketing software he never heard of before the interview. Now, a year later no one is the wiser and he can buy a new Tesla twice a year (still jealous).
I think a lot has to do with bosses that never started from the bottom so they aren’t great at interviewing, because they have no clue about non-management things. Then they have no clue how productive people should be or even what to measure besides “Sprint points”.
It really depends on the project. My company is hosting multiple ML/AI projects, some with datascientist that are, as you said, glorified data analysts. Usually MBAs or mixed cursus, but also CS guys (my favourite clients as they will never tell you "i can't ssh onto my server" after executing `chmod -R 777 /etc/`).
And some with genuine DS/statisticians. Also the first kind of project almost always end up hiring statisticians in the end, so realistically, having "glorified data analysts" that can sell to the consortium or kickstart project is enough.
That's not true.
Many people can self-learn. Those same people often cannot perform well in school because school is rigid and authoritarian.
I'm definitely one of them and my career refutes your idea quite heavily. I'm absolutely not the only one.
Doubling down on debt and the system with another advanced degree is dangerous advice.
If you cannot self-learn, you find out relatively fast and with little cost. Not true for the above advice.
> Many people can self-learn. Those same people often cannot perform well in school because school is rigid and authoritarian.
So... labor isn't uniform?
> Doubling down on debt and the system with another advanced degree is anti-advice.
Becoming a medical doctor is anti-advice? Is attending Harvard Law or Stanford's CS PhD program also anti-advice? I know this is a tech forum, but jeeze. The lack of appreciation for the world of fulfilling career choices outside pounding out code and managing people who pound out code is a bit concerning.
I guess there's a small population of people who aren't good at school but can self-learn how to program. I agree that for those people a DIY CS degree is good advice.
However, I also think that there's a substantial intersection between people who would get bored doing generic software dev and people who can self-learn CS.
> Many people can self-learn. Those same people often cannot perform well in school because school is rigid and authoritarian.
Are you still talking about college here? For a lot of classes, I commonly skipped class and taught myself the topics. In some fields like math that was practically the system even if you attended: Step 1: attend lectures that go too fast and lose you at some point, providing little more than a roadmap to use. Step 2 go home and teach the material to yourself. Step 3 attend exams to quantify how well you did.
i've seen this comment a couple times on HN and find it funny. My classes and lectures were mostly about what was not in the book and if you tried to read the book and take the test you'd get around a 50%.
Really depends on the field. Parent comment is pretty accurate for most pure mathematics courses. Not so much in other fields (even non-pure math)
Getting the pre-reqs for medical school out of the way when you’re in college the first time is an incredibly smart move, even if you don’t go on to pursue Medicine. I looked into attending med school 10 years after getting my BBA in Accounting, and it turns out I need a ridiculous number of pre-reqs just to qualify for applications. Something like 60-90 hours (prob. closer to 90 for me as even my basics like business calculus doesn’t meet the math requirements of a BS - engineers who took engineering calculus don’t have to worry about this).
It’s too much for me to seriously consider going back for medicine, tbh. I’d have about 3 years of part time classes at community college or online, maybe less if you could squeeze more in each semester.
Law school requirements where I live aren’t as significant, in fact I don’t think there are any. So I have considered sitting for the LSAT... Family of doctors and lawyers so the thought of going back to school is always on my mind.
In my view, the two college topics everyone should take is Physics and Constitutional Law (or equivalent in another country). Both will literally radically change how you look at the world, and provide a foundational basis for conversation in nearly any field.
You can say the same thing about any single lower undergraduate subject.
I took a class in Library Science. It didn't change my outlook on anything. It only confirmed my belief in the wastefulness of certain general ed requirements.
Economic history didn't do much for me, either. (Now, granted, that could be eye-opening, for at least some people, if taught well and with solid content. But in my case, for that class... meh.)
It didn't change my outlook on anything
Someone can say this about any single lower undergraduate subject :)
p.s. Library Science course would have been an eye-opening experience for me, given my fascination with books and libraries when I was a teenager.
I’m not sure how fascinating it gets beyond the Dewey Decimal system, lol. There’s probably some cool stuff with document preservation and archiving. But so much of library science seems outdated now that most information is on the internet.
What they really need is a better system for internet research, the UIs those systems use last time I worked in a library on a project was terrible.
Counterpoint: my 2 favorite classes in undergrad were both general education courses - "World Regions" (had a super charismatic professor so wouldn't necessarily recommend this course at any random university) and "Morality & Justice".
"Contemporary Moral Problems" with a professor who resembles Captain Kangaroo (https://en.wikipedia.org/wiki/Captain_Kangaroo).
Did you really mean "World Regions", or instead "World Religions"?
Yes "Regions". The course covered geopolitics, current events, etc. The course and professor were famous at the university. The course material itself was interesting because it covered current events in detail, but the real reason for the class's popularity was that the professor was incredibly entertaining. Attending a lecture was sort of like watching an episode of Stephen Colbert, except deeper with more focus on learning than just pure entertainment.
Hageography ;-)
should we (could we) compress higher education ?
I found a lot of redundancy by splitting things in modules. (uml, oop, sql felt like 3 sides of the same hypercoin, granted the first 2 may disappear from books soon).
algorithmics and mathematics (and other topics) may be merged into one ?
or maybe that would be pedagogically detrimental.. I feel that it would allow more time to spend on a concept since you don't have to see bits scattered in different courses.
I'm not sure how oop and sql would be the same thing - they are famously incompatible (object/relational impedance mismatch). UML is just a graphical notation, I would agree it doesn't make sense as a separate course.
When you say algorithmics and mathematics, do you mean all of computer science and all of maths? Do you think a single course should cover, say, Dijkstra's algorithm and partial differential equations?
Usually, each course already covers a wide array of concepts. I can't think of a single concept that was explored by different bits in different courses. The closest I can think of are 2 courses I had, one of which was focused on analytical solutions for linear algebra (matrices), and the other focused on numerical solutions to the same problems. Even then, the split did make sense, since they were focused on different concepts (mathematical objects, their properties and how to work with them in the first case, computation and more applied mathematics solutions for the second).
No student learns everything that university teaches; there is simply not enough time. It would be ideal if each student received a perfectly customized curriculum; but that is simply not practical to do. Instead, universities have a modular system; where different students can mix and match modules to cover what they are interested in. Similarly, different majors can mix and match required module to cover the material that is nessasary for said majors.
In the case of subjects with a very large number of students, it is possible to produce specialized modules, so you might have a university offer a separate probability-for-scientists and probability-for-mathematicians classes that it considers to be interchangable, but differs in how it covers the subject/what background it assumes.
It turns out the brain actually likes to see concepts broken into pieces and spread out all over the place. To use your example, a better way to learn those things would have been a couple of projects where you used them all together, over and over.
Was Library Science required, or was it a general requirement that you picked Library Science for?
(Having a hard time seeing Library Science as a specific requirement.)
FWIW I completed my undergraduate degree in 2019, and I was required to take library science specifically. It was a half-semester course that taught students how to use the library.
I guess the value is it means the students have no excuse to not know how to find library resources, but I feel like most people in the class were generally familiar with the idea of a library and how to use it.
This sounds somewhat similar to other "college success" first year courses that are more about how to do research papers than anything else.
A proper introduction to Library Science is about how to run a library...
Good point. It would be an utter disappointment for me to take this class only to sit through explanations on how to find a book in a library (something I was able to do when I was 8).
It filled a general ed slot, I think. Or else I just wanted a super-easy class. It wasn't required.
And yes, it really was "how to use a card catalog". (Hey, I'm old. It really was cards.)
If you go into something with a set of beliefs and are only looking to confirm them, you probably won't gain anything.
I could say it about Macroeconomics and English 102 but only because I had awesome teachers.
I can say that one of my Calculus classes and my other English classes made me want to quit school. The teachers were horrible; either arrogant and condescending or incompetent at teaching (which made us a bad pair because I was an incompetent student at times).
I found an Anthropology class very eye-opening, helpful to become aware of one's own ethnocentrism.
I'd echo the vote for Physics.
I think everyone should take statistics and probability. Same reason, to change your world view.
I think Ethics/Ethical Theory class from a philosophy department should be added as well.
Why? The engineering department version of ethics was a required class at my undergrad and it was a total waste of time.
Henry Petroski claims that engineering ethics was founded on the principle that an engineer should not compete with another engineer on the basis of price.
A good philosophical ethics class is mostly uncomfortable...
Adam Smith:
> People of the same trade seldom meet together, even for merriment and diversion, but the conversation ends in a conspiracy against the public, or in some contrivance to raise prices.
Can you explain why you think so? I feel it would be a complete waste of time for me to study anything like this in college. And it seems it is an absolutely inadequate foundation for “conversation in nearly any field”.
The course I think everyone should take is a logic course. Our philosophy department gave one and it was amazing.
They went over fallacies, truth tables, tautology, and other things.
I took that with a great professor that wanted you to learn and be able to make strong arguments. You had to be able to break apart anything thrown at you and call out what it was.
Everyone would be able to see how others are trying to take advantage.
The other is also doable. How to phrase things in a way to get what you want. I think he’d approve...
I would add ethics to that list also.
Quoting the very first sentence: “DIY” CS degree: take the same courses you would at your own school
My question is:
Are those courses actually available in MOOCs? Is the feedback sufficient from the MOOCs for the more technically difficult courses?
I cannot imagine taking, for the first time, a course like CS Theory, but maybe a follow-on course, as a MOOC. So much of what we learned was because of feedback during the semester and tailoring to our level by the professor. If you're talking about an online course with 20-40 participants in a cohort with a dedicated instructor/professor, then it could've worked online. But most MOOCs are not set up that way (from what I've participated in).
On top of that, lacking discipline, I can't imagine anyone in that class but 3 of us choosing to take it voluntarily if alternatives had been provided.
I'm pretty sure I'd be much better off had I taken my first course in CS Theory on Udacity [1] or Coursera [2] rather than at UCSB where it was extremely confusing and/or boring.
[1] https://classroom.udacity.com/courses/cs313
[2] https://www.coursera.org/learn/cs-algorithms-theory-machines
I think computer science is the university subject with the best availability of publicly available online courses.
Available courses range across the entire undergraduate curriculum from distributed systems to operating systems to cryptography. The number of different courses available within each area varies a lot, and some only have 1-2 options, but at least they are available.
The situation is much more stark in other subjects, such as mathematics. Many upper-division courses aren't available, so the best you can do is find a book for self-guided study.
In a few weeks I'll have completed every MIT course required to earn an undergrad EECS degree minus the physical education credits. It took me about two years. Some of the courses on their OpenCourseware[1] were a bit out of date and I supplemented the MIT courses with a few additional courses from Harvard (I'd read on HN that CS50[2] was worthwhile and was not disappointed) and Stanford[3]. I did not spend even one penny. Then again, I also won't get that very expensive piece of paper we call a "degree" so it's definitely a tradeoff. I'd already paid for several expensive pieces of paper so it didn't seem necessary to me but I can definitely appreciate that having at least one matters. MOOCs give you the same knowledge but they really don't at all give you the same credentials. It's silly but it's reality.
Most of the more popular courses have discord or slack where you can work with other participants. A lot of the CS courses have automated the grading of problem sets. CS50 uses GitHub to submit and grade assignments, for example. There were a lot of frustrating moments for sure but I definitely spent a lot more time with the material and learned a lot more than I would have if I had been given more "support" like you get in a typical classroom. There's definitely a tradeoff. It worked great for me but I had a genuine interest in the topics. I'm also 32. I don't think for a second I could have managed to get as much out of MOOCs as an 18-22 year old.
A minor complaint given that the superb education cost me exactly $0.00 but there are a lot of really good free courses available but you have to hunt for them. For example Paul Hegarty teaches a really great introductory course on developing for iOS with Swift and it's freely available to everyone but it's not listed on Standford's online catalog and the iTunesU version is woefully outdated. The latest version[4] is available on YouTube and even has a dedicated website. I can't even remember how I found the newer course. I also stumbled across "The Ethics of Technological Disruption"[5] by looking at Stanford's YouTube channel playlists. Like the Swift course, it wasn't listed in the university's catalog of free courses.
All that is to say, it's entirely possible, if you're willing to put in the effort not only once you're in the class, but sometimes just to get there as well.
[1] https://ocw.mit.edu/index.htm
[2] https://cs50.harvard.edu/x/2020/
[3] https://online.stanford.edu/search-catalog?free_or_paid%5Bfr...
You should write up a simple blog post that lists all the courses. Just a link and a sentence or notes (e.g. where the discord / other crucial resource is) for each course, and it would be a fantastic roadmap for others hoping to follow your footsteps!
What other classes that you've tried would you recommend?
I really liked all of the MIT philosophy courses[1] I've taken. Introduction to Philosophy of Language in particular was really interesting. I also took Yale's "The Science of Wellbeing"[2] after reading about it on HN. It's great, but not exactly a traditional class where you learn some piece of information and then move on. It's more like going to the gym where you're meant to continuously put what you've learned into practice. Now that I think about it perhaps I should take it again!
[1] https://ocw.mit.edu/courses/find-by-number/
[2] https://www.coursera.org/learn/the-science-of-well-being
As the article mentions, you have to be disciplined for this to work. It would require a huge amount of discipline to get into a subject that might be, superficially, uninteresting. You also loose the passion and excitement that a good teacher conveys.
Maybe there are people disciplined enough. ¯\_(ツ)_/¯ personally I need an external push.
I found that I lost discipline in college. Could I have motivated myself outside of college? No, it was my parents and the daily routine of high school that imparted discipline. You have to break free from your family, but a daily routine can be had at any number of jobs that don't require a degree.
It might make more sense for a certain person to work in the real world for a couple years to get their head screwed on right, before attempting an education. If that imparts enough discipline to allow cheaper alternatives than college, more power to you.
> 1) which classes I would come to enjoy, and 2) which subjects I would actually use every day at work.
Another thing that is easy to misgauge - how much work it takes to understand a topic. All told, across several classes, I probably spent a full semester studying mutual exclusion, critical sections, deadlock and so forth. I would not have known it would take several months of study to start getting a handle on that topic - although I see it all the time when debugging an error (created by myself or others) which turns out to be code that has a race condition.
That's how higher education suppresses those in poverty further. That time and money not related to the direct earning of income is only achievable by those already well off. All of the 'extra classes' that are important can be combined into dedicated courses that have significantly more relevance to the job market.
Which classes ended up being useful to your work that you didn't expect?
* Truth tables and Karnaugh maps blew my mind, as did the rest of Boolean math. I loved finding a way to formally think about things I'd vaguely and unrigorously thought about before, and the notion of mathematics without numbers opened my eyes.
* I loved political science and sociology classes. I would not have predicted that.
* I use my physics classes all the time, but never in ways I would have anticipated. "Hey, I wonder how high we are. Here's a rock we can toss down into that pond. Get your stopwatch!"
* I very rarely find myself working with finite state machines, but when I do, it's nice to feel comfortable reasoning about them.
* Big-O notation? All the freaking time. That's an enormously powerful tool for thinking about how systems will scale with the number of users, for instance.
> I very rarely find myself working with finite state machines, but when I do, it's nice to feel comfortable reasoning about them.
When you recognize a state machine somewhere it makes the code and everything around it so much simpler.
It really, really does. It's not the correct tool for every job, but when it's right, it's very right.
> Truth tables and Karnaugh maps blew my mind, as did the rest of Boolean math
Indeed, DeMorgans law is something I use regularly, but many devs don't know it
(^A.^B) = ^(A+B)
^A + ^B = ^A.^B
I didn't realize how much I used this or other forms of boolean expression simplification/translation until this comment tbh. Really goes to show that while much of formal CS won't be used in industry, some of it in random places can be surprisingly useful.
That's an incredibly powerful simplification in the right places. It's so satisfying when you can remove a bunch of "not"s from code and get something that's mathematically identical but a whole lot easier to read.
Heh! I also used it recently (and successfully) to argue with a particular vendor whose query language did not respect that transformation. I re-wrote a "not A and not B" expression to "not (A or B)", and the query broke. It was nice to be able to point them to the Wikipedia article and say "no, if your query language doesn't treat those as identical, then it's a bug and would you please fix it now?"
^A + ^B = ^(A.B)
oops
When was the last time you worked with many CS students versus amateur developers and could really compare?
These are shallow takes because they're always reflections on personal experience and not really a view of others. Or when it is about others, it's extremely shallow - this article's take is "is salary times expected employment probability minus degree cost positive" which is basically saying nothing at all.
MOOCs like EdX and Coursera have deeply harmed CS degree quality. The most striking evidence for this isn't the crummy completion rate or as you're eluding to, lack of coercion or whatever. It's that in my experience with Harvard and Stanford interns, whose curriculum these MOOCs copy, the quality of the student declines with the number of years they have spent in their institution's CS program. In other words, freshmen and sophomores outperform seniors and just-recent grads!
This is crazy, how could that be? By putting everything on rails. In MOOC CS50x and CS50, as long as you follow all the steps in the videos, you will complete the course with an A+. After the first few problem sets you're conditioned that if you're thinking too much you're doing something wrong because it's supposed to be on rails, it's supposed to be easy enough that you can just complete it by reviewing or copying. There is no space in that class for thinking, you should not be puzzle solving, the things that look like puzzle solving only look that way, they are not actual puzzle solving. It is an amusement park ride for entitled and mediocre people disguised as an elite university course.
This makes sense for what the goals are. It's not really about education. It's about the psychic pleasure of feeling like you learned something challenging. It's about preparing someone for a corporate gig, where in reality it is really bad if a junior person is doing any thinking - they really should be going out there and cramming, copying something or asking someone for the right answers! David Malan and Andrew Ng gave people want they wanted, that is capitalism, that is okay, it just isn't necessarily education.
How is performance defined? What am I asking these students to do? Something original. Like at the end of the day you want people to sit in front of computer and solve an original weird problem, MOOCs will unprepare them for that.
> When was the last time you worked with many CS students versus amateur developers and could really compare?
I work in a very technical area where you need to have taken a PDEs course to even understand what's going on. The only amateur developers who can even carry on a conversation about the work have math or engineering phds.
> There is no space in that class for thinking, you should not be puzzle solving, the things that look like puzzle solving only look that way, they are not actual puzzle solving. It is an amusement park ride for entitled and mediocre people disguised as an elite university course.
Being a generic software developer cog in a giant corp sounds soul-crushing. I think smart students who have the drive and intelligence to learn CS on their own should seriously consider if that's the type of job they want.
It's easy to skip a lot of fundamental classes and classes which are less interesting. Lots of people would skip "Boring" topics like data structures and databases and focus primarily on just piling into learning Swift or Kotlin to build apps on the platform of their choice.
Math is another biggie I think a lot of people would skip. While I'm not quite sure everyone needs 3 semesters of calculus to be an effective programmer, I think it is helpful to understand at least the basics of calculus and trigonometry.
There are also a lot of aspects of formal schooling that help you prepare for work/ life later on. If you see a degree on someone's resume, you know they've done a least a little bit of collaborative work and building an app to someone else's specs.
I absolutely, 100% regret not studying computer science in college, or at least learning CS fundamentals earlier in my career.
I spent years struggling to write quality code, and I couldn't figure out why: I knew syntax inside and out, but still struggled with tasks my peers could do while watching YouTube videos and chatting with their friends.
It's like I could spell but didn't know the first thing about grammar.
I eventually went back and took some classes online to fill in the gaps, but I feel like I would be much further in my career had I just went ahead and done it in the first place.
> It's like I could spell but didn't know the first thing about grammar.
That's a great analogy and I think often missed by many people. Spelling and arithmetic seem obvious as limitations in more complex fields (where communication and mathematics are involved). No one would say: "I can spell 'journalist' so I should be the editor-in-chief of the Washington Post." or "I can add 2 and 2 so you should hire me as an electrical engineer." (certainly not once they've grown up a bit, at least)
You have to advance to grammar, geometry, algebra, and more to find success in those fields.
But with programming, many people seem to stop at the point where they can program, and don't realize how much more there is to it (or not until much later). Programming is just the spelling/arithmetic level. Being able to design systems, select between different data structures and algorithms, understanding what a state machine is and how to structure your program using that concept, etc. These are the algebra and calculus of the field.
> understanding what a state machine is and how to structure your program using that concept
I don't really understand this when people say it. My first instinct is that you're talking about keeping functions as pure as possible.
The other thing I think of is simply understanding all (Or most) of the possible states in your program, which seems like common sense.
A lot of programs, or critical parts of them, are really just state machines. A concept exercised especially in freshman/sophomore CS and EE courses. If you understand them well enough, you can make implicit, ad hoc state machines explicit. This leads to much cleaner and more maintainable code. This is an ad hoc state machine not far from what I've seen in real code:
ok_to_change was added after someone realized how much redundancy was in the tests. But the whole thing was a state machine and could've been expressed better as such. There are lots of ways to do it. You could make a more explicit state variable (or function that returns the current state from a set of variables), use lookup tables, or have functions that call each other to represent the current state of the system (mutual recursion is nice). But by making it an explicit part of the system design it usually leads to clearer, more concise, and more consistent code (IME).ok_to_change = var1 && !var2 && var3 < 10; if(ok_to_change && ...) ... else if(ok_to_change && ...) ... else if(!ok_to_change && ...) ... ...A state machine is more about modelling and restricting the transitions between states of your program. This is a great way to make complex algorithms tractable and less bug prone.
> It's like I could spell but didn't know the first thing about grammar.
Love this analogy for programming...
It also reminds me that English and Public Speaking are very important skills I picked up in college which are easily neglected in a DIY program.
What English skills did you acquire at uni? My English has always been quite good and I don't feel like formally studying English has helped me that much.
Perhaps I've just forgotten about how much I've actually learnt though.
A lot of people are not good at English, though. Especially public speaking.
Yes, definitely. That's why I'm curious about the specifics of what they learned rather than just "English".
My writing has been pretty decent since high school, but I did pick up some public speaking skills in college.
If you have great English/ Public speaking skills this isn't so important. But I know a lot of people have really mediocre communications skills.
Being on a student newspaper probably gave me some of the most valuable skills that I acquired in school.
I believe that could also be the case because of the amount of practice your colleagues could have had during college.
It's not knowing what you don't know. Sure, you can stumble into things, reinventing the wheel from time to time, but life gets a lot easier when you know what wheels are going in. I'm put in mind of Konrad Zuse finding out that Boolean algebra was a thing while he was wrestling with the mechanisms needed to make his first machines - just knowing that there was an established formalism and a calculus for binary made a huge difference in how and how quickly his work progressed. If he'd also learned about recurrence relationships, Z2 nd Z3 would probably have been Turing-complete by design rather than merely in potential restrospectively.
Practice isn't enough. Deliberate practice that pushes your boundaries with feedback is the critical part. That's much easier to get in a school, or a professional environment if you have a good mentor, which constantly pressures you to go deeper into the field and try new things than solo practice. Working on your own it's tempting to reach a level of comfort and not go further, or to reach a point where your skill level seems "good enough".
There's a reason why whiteboard interviews are so popular: they seek to find candidates that have strong CS fundamentals. It's much easier to jump from languages to frameworks or ecosystem once you have a strong grasp of fundamentals than it is if you only learned how to make apps using one framework.
I've seen self taught students really struggle with introductory courses because they assumed they would breeze through fundamentals because they already knew how to build web-apps.
Honestly, I would say skip calculus and go for linear algebra instead.
Really, 90% of the advanced mathematics I do is linear algebra, and I don't have a code-monkey job. Linear algebra has so much mathmetics bang for very little complication bucks.
Take them both.
Those subjects are the foundations on which practical and applies computer science and programming are built. Not having a thorough understanding of them is like building a house without an understanding of its foundation. Don't be surprised if your magnificent Swamp Castle burns down, falls over, then sinks into the swamp if you don't know about foundations.
If you want to do Machine Learning or 3-D Graphics, you'll need more than 3 semesters of calculus, though.
As someone who doesn't particularly like math but thinks robotics is cool, I had the horror of having to encounter this type of thing: https://www.rosroboticslearning.com/jacobian
Robotics also requires a thorough understanding rotations and transformations (and its time derivatives), thus requiring a bit of Lie algebra. The calculations itself aren’t that complicated, but the concept is still quite confusing for beginners and quite intimidating if you go deep down into theory.
In addition, almost any control system with feedback requires some variant of PID control. “I” as in integral and “D” as in derivative makes it hard to get away from calculus concepts
I took a grad robotics course while in grad school for another degree. Doing all the translation matrix multiplies by hand was so much fun before something like Matlab existed. (As was going to the computer lab at 3am to do the simulations because that was the only time there was time available.)
For ML you really need both a class on probability theory, linear algebra, and/or a dedicated ML class. Lots of ML math ends up being the same principals over and over again. They may be borrowed from bigger subject matter, but often times you don't need to be an expert in those to get far. That said, if you're an ML researcher, then you definitely benefit from a very solid math/physics background. But if you're an ML researcher, chances are you did not only undergrad but a PhD as well, and you're not just considering an online certificate.
You need to know what grad is, that's Calc III. Is SVD even covered in Linear Algebra I? Convergence rate is also something you should understand.
This stuff is all pretty deep into undergrad curricula.
Data Structures is one of the best CS classes I've taken so far. I can now easily solve problems that would have seemed nearly impossible beforehand. I enjoyed it so much that I'm planning on taking an optional class next semester that goes over lesser-known and more advanced algorithms.
Once you know a lot of these algorithms, it becomes painfully obvious which developers haven't learned about them. For instance, I know someone who works as a driver for UPS and they have a piece of software that automatically plans a route to each delivery and pickup. There's a lot of variables such as certain packages that have to be delivered before noon, business deliveries that have to be done before the business closes, etc. The software they are currently using is not efficient at all. It will have them deliver to a building, drive down the street and deliver somewhere else, and then drive back and deliver to the building next to the first one. It's so painful to hear about this software because I've solved a very similar problem in under an hour at a programming competition using Dijkstra's Algorithm and Traveling Salesperson. Obviously, my solution didn't have nearly the same level of variables, nor was it held to "enterprise" standards. However, considering the level of inefficiency the software constantly produces, I'm convinced that it isn't using any standard algorithms but instead some hacked-together solution from a programmer who hadn't learned the established way to solve similar problems.
I guarantee that UPS has had teams of computer scientists, mathematicians and probably statisticians working on package scheduling and routing over the decades. The traveling salesman problem, which UPS package routing is, is an NP-hard problem, which means that guaranteeing an optimal solution is going to take an exponential amount of time. There is no "established" way to exactly solve NP-hard problems with large inputs in a reasonable amount of time. Rather, there are approximate approaches which use domain-specific information to inform what kind of heuristics one can use to achieve a tolerable result.
Totally agree with you. Oddly enough I am currently doing a market research project on commercial applications for Quadratic Unconstrained Binary Optimization (QUBO) and also Constrained Binary Optimization. Anyway we were talking about UPS, and just for reference if I search my 3 degree network on LinkedIn for the combination of CPLEX (an IBM optimization package) and UPS I got almost 400 hits. Now admittedly some of those people used to work at UPS, some work there now. But there are clearly many, many computer scientists, operations research scientists and mathematicians working on these and other optimization problems at UPS.
On the other hand the grandparent comment just illustrates how even with all those optimization resources individual "decisions" may still be stupid in the moment even though the overall solution is "good enough".
Yeah, UPS is pretty famous for how much effort they put into optimizing routes: https://www.ups.com/us/en/services/knowledge-center/article....
I highly doubt someone could beat them in an hour at a hackathon by just saying “shortest path first” and calling it solved.
I know this personally because I took Computer Information System in college and not Computer Science. So we covered databases, but more or less glossed over a lot of important algorithms which I'd have loved to have later in life.
Though there is some benefit to having a business degree as well so it's not all bad.
The author has a surprisingly naive vision of education, in spite of being a hiring manager.
I've recently finished a well-known online course, with almost maximum grade, and even if the quality of the course is good, there is definitely no comparison with a real-world college course.
Due to the nature of online courses, grades are automated, and definitely don't match the dynamics of a real-world course (eg. better solutions = better grades). It's also practically impossible not to pass.
Cheating is also a factor. I joined purely for learning, but I don't doubt that there is plenty of people taking shortcuts. I've witnessed somebody blatantly cheating exams without even recognizing it was cheating, and against the honor code.
Maybe, in a future where people must take the exams in qualified centers, with the papers/projects reviewed by professors, the points above would change - but the price would necessarily rise considerably.
Other aspects: as somebody wrote, top universitory teacher doesn't imply best teacher; forums are polluted with garbage/trivial questions due to mass (free) enrollment, causing valid questions to drown in the noise; face time, community, college life, structure are all one big package, which I think it's fundamental for the average young adult.
Finally, I'm very skeptical about the impressiveness of the DIY degree. I have the suspicion that only a few "learning freaks" (I don't mean it in a derogative way) would end up taking it - motivated people who decided not to take a degree [in their past], within constraints of limited time, would likely choose different, but still valid, learning routes.
All in all, I'm actually a big fan of MOOCs (loved the course I took), but they shouldn't be compared to traditional education.
What course did you take?
NAND2Tetris, Part I :-)
The difference I mention between real-world and MOOC is that in the former, [I suppose that] the teacher(s) will give better grades to students who come up with better chip designs.
I paid the course for financial support, and challenge, but it can be finished identically without certification; as I wrote, specifically for this course, grades are practically - but not theoretically - binary: the projects work, or not.
Regarding the lack of a degree, the author writes "I believe it matters less over time." This is a narrative I've been hearing for twenty years.
Can we point to any published stats about tech companies, in the US or elsewhere, hiring a higher fraction of engineering candidates with less than a bachelor's degree?
Similarly, can we point to any published stats illustrating the growing ability of startup founders without an exclusive education background to get funding? (No, "dropped out of Stanford to go work with Joe Lonsdale" doesn't count.)
CS degree demands are absolutely quite biased towards US company mentality. I self taught at 18 and have never had anyone from a European company, some of which would certainly be called globally known, mention my CV doesn't list any education, ask about it in interviews or subsequently mention it during employment, and i know a fair few people at those jobs had similar stories.
To be fair I'd note a number of people I got to know did have degrees in other STEM fields.
My only run in with a similar issue was not being suitable to be presented as CTO for one company because it was STEM related and everyone else has PHDs.
In my experience it has been the opposite. US companies are quite liberal about education requirements: lots of experience + no degree, some experience + unrelated degree, STEM degree, or CS degree. My experience (French and German companies), you either have the degree that matches the position or you have an overwhelming amount of experience they can't ignore you. I was turned down many times over not having a CS degree from top US university (majority of Americans go to local state colleges).
Majority of Americans don’t have a degree. Though yeah of the subset that do have degrees, most aren’t going to top ranked schools like you said.
A lot of it comes down to familiarity. Most French companies know of Ivies, Stanford, and MIT. Most Americans couldn’t tell you of a French university beyond La Sorbonne (Paris IV).
In my time there I learned a lot about the difference between university and grand écoles.
Some people are able to learn in the field and grow accordingly... especially if your specialty ends up being something like Linux kernel engineering where you can learn from how others do it. That said, most people aren't super talented sponges that can excel and push themselves without proper structure and guidance. You might have an exceptional mind; we also need solutions that address the rest of us, and I'm not so sure that a MOOC is long-term a great solution for most.
Unless you want to work in internet facing stuff, there are many places where IT is part of another domain. For example, bioinforamtics, simulation, finance, etc. Many of those requires computer science + a good understanding of maths (calculus is useful in many geo stuff, discrete maths is useful in many computing tasks, entropy is useful to understand where you are when you compress data, etc). So, many of the maths courses that usually go with a computer science degree are helpful. Unfortuntaly, understanding maths by oneself is not easy and online courses quality greatly vary (I've tried to understand expectation-maximization algorithm using various online courses and it's not easy : sure, you'll get the big picture, you'll understand how to apply the algorithm, etc. but if you want to understand why (not how) the algorithm actually works, then that's another story, maths are necessary and the way they're explained is very different from courses to courses, and with different level of quality.)
It also helps to not reinvent the wheel : many problems were analytically solved long before most of us were born.
Indeed.
My advice for a career in computing is "either become world expert in some durable technology with a high barrier to entry, or else find a secondary specialty" (math, finance/econ, natural sciences, an engineering discipline, pre-law are all good choices).
My advice for a career doing generic undifferentiated software development is "don't", or at least "move into management during your 30s".
As someone who more or less did a generic CS degree in their undergrad, how would I go about correcting for the lack of a secondary specialty? Would I have to get a masters later on? Focus on taking jobs at companies in specific domains?
Most job requirements specify a suitable undergrad degree or equivalent work experience. At some point what degree you have doesn't make any difference any more. It's what experience you have, be it through research or on-the-job.
So either route is open to you. Do you have something particular in mind?
I see. At the moment, I'm not super sure hence why I'm hesitant to say that I'm going full throttle on anything but in terms of domains I'm interested in exploring further:
1) "Civic tech" which I hesitate to define since it's so nebulous that I imagine my definition differs from that of other folks but the way I think about it is that it either involves government modernization (a la the Canadian Digital Service), companies that provide services to the government (a quick Google search brings up https://home.promise-pay.com/ as an example), or companies that help communities/cities function better (this one is probably the most controversial criteria but when I include it I'm thinking of Sidewalk Labs). I suppose the secondary "specialty" would have to do with public policy but from perusing the careers pages, it seems that in general experience is all they're ultimately interested in (at least for the software engineer positions I would be gunning for) but I would suspect some domain knowledge is what they would prefer in addition to that. So far, I've just been exploring this domain via involvement with open-source projects within this space.
2) Cybersecurity: I'm not sure if this qualifies as a secondary domain since it's still very "computer sciencey" and is quite broad in and of itself but I suspect that it's a much wider space than civic tech which is why I find myself torn between which one is worthy of further exploration. Within this space, I would probably be either be interested in application security positions (https://www.facebook.com/careers/jobs/123558231663498/ as an example) or "secure software development" positions which I understand are positions that involve building software that operates in the context of improving the security posture of a company (ex. software that conducts static analysis of source code to find potential vulnerabilities). To determine whether I am interested in this domain, I've just been going through application security resources (currently, the Crypto 1 course from Stanford but I'll be following that up with other resources from https://github.com/paragonie/awesome-appsec). With regard to next steps after that, I've been thinking of https://www.edx.org/masters/online-master-science-cybersecur... but I'm a bit conflicted given that I've received conflicting opinions on the usefulness of a masters within the field of cybersecurity.
TL;DR: "Civic tech" and cybersecurity are the 2 I'm considering. I'm unsure which domain is worthy of my entire attention but I've been immersing myself in each to a varying degree via related activities.
You can look at our equivalent, the UK Government Digital Service which hires a lot of tech people. You could probably learn the relevant stuff on the job.
Cybersec I have zero qualifications in, but it seems also like a lot of practical jobs (e.g. pen testing, white-hat stuff) are also more experience focused. Presumably it does help to have some background on the theory, which you might get asked in interviews. But presumably there's a large spectrum of work here, from very theoretical audit/provably secure-type stuff, to more practical work where you try and identify obvious holes in software.
With regard to the GDS:Is the GDS available to Canadian citizens? I know that we're classified as Commonwealth citizens but I saw that Commonwealth citizens only have access to non-reserved posts and I'm not sure if the GDS is reserved or not.
With regard to cybersec:Yeah, that's more or less in line with other folks have said to me. I think with this I'll just keep reading books until I get a sense of what my niche is.
Thanks for your advice!
As a hiring manager, I can tell you that degree standards are going up and up. When I was starting as a dev a quantitative degree was totally optional - fortunately for me. Now it's common to have an MA/CS, somewhat likely a BS/CS, and the absolute least a BS in any quantitative field.
In fact I recently hired a dev with an associate's degree after interviewing many people with much better educations, but his chances on getting the job were very small. My inbox was flooded with resumes and filtering out weak educations was an efficient use of time.
Seriously, you will have a much much harder time making a living with a DIY degree.
Huh. I'm surprised to hear this. I have a liberal arts degree, and I had zero issue getting a job after going through a bootcamp 6 years ago. My brother-in-law did the same 3 years ago. My husband last year. He literally doesn't even have a degree...
There are oceans of people with those same bootcamp credentials. For hiring managers willing to hire bootcampers, but you are just one drop in that ocean.
Over time you will have a harder time finding work, you'll get lower salary offers, and you'll be passed over promotion.
If that's the credential you have, it'll have to do. But if you're choosing whether to pursue a full-blown degree, the answer is clear. Yes, absolutely, yes.
Is a "weak education" == no quantitative degree?
Does this hold even after you get a few years of work under your belt?
In my experience, there are some good people with CS degrees, but there are a _ton_ of duds. If I had to choose between someone who's parents paid for them to get a CS degree and someone motivated and interested enough to teach themselves CS and math in their free time, I'd 100% be more interested in the latter.
Credential rankings, from best to worst:
MS CS
BS CS
BS not CS
Bootcamp, associate's degree, liberal arts <-- weak
It's true that motivated, passionate and smart are the most important things, but there are plenty of people who are those and have a degree.
Yea, that makes sense. Ironically, in my anecdotal experience, working at more of a mid tier company, I find people with better credentials to often be less motivated than those with weaker credentials.
One theory is that the more motivated and to some extent talented individuals seek out more prestigious companies. In which case, the credentials become a much weaker signal if you aren't one of those places.
They glossed over some really big considerations. First, you have to be really self motivated to accomplish this. I don’t know too many 18 year olds that would push themselves enough to get as much out of a purely online program as compared to an in person program. Second, a DIY degree is not a “real” degree and will be looked down upon by many employers. That’s not to say that you won’t learn as much in a DIY program (if you are self motivated), but you’re going to restrict your job prospects.
I do agree with the idea that you might as well try it now. I wouldn’t recommend someone pay full tuition for an online class that was created in a hurry by a professor that didn’t want to do an online class. But you have to be prepared for the idea that you won’t like a DIY degree and will end up starting a regular degree next year. If you’re smart about it, you’ll make sure the classes you take note can transfer the credits- these types of courses are more expensive (hurting some of the DIY value proposition) but it’s a good insurance policy against having to start at square one next year.
Another disadvantage you should consider if you're international wanting to work in the US is that it's hard to qualify for the H1-B visa if you don't have a degree. The alternative to a degree requires work experience, but the equivalence is to the tune of 3 years of work experience for each year of CS education.
This.
A lot of countries have immigration policies that still require degrees for visas. Given how global the world is becoming, it's important to have the option to be geographically flexible.
I agree with almost all the comments here. The standardized curriculum (or, as some people put it, making you take even the classes you think you won't enjoy), and the coaching (having someone hold you accountable to deliver) is a key aspect of schools.
I will add that so is the job pipeline. I think having companies come, sign up dozens of students and recruit wholesale completely changes your odds of ending up at one of the top companies (for whatever your definition of top is: whether you want to write algos at a hedge fund, perform tech diligence for a consulting firm, work at the big tech companies, etc)
I have a hard time buying into this idea. I do agree that traditional college is prohibitively expensive. But it's also a requirement of most companies that you have a degree. That's because it's hard to prove to an employer that you have the skill set they need and a diploma is good proxy.
I'd argue that this is less true for the specific field in question (computer science). Most companies looking to hire a developer aren't looking for a jack-of-all-trades hacker, they're looking for someone with a specific skillset, and in my experience it's not very hard for one good developer to recognize another good developer, especially with the way most CS interviews are conducted: problem solving, whiteboarding code, mock design sessions, etc. If you're a developer and you can't satisfy yourself that another developer being interviewed has the skills you need, you need to work on your interview questions.
That being said, it's almost certainly easier to land an interview in the first place with a good degree. I'm in Atlanta, and every company I've worked for here has almost automatically granted an interview to anyone with a degree from Georgia Tech.
I think the diploma is important for your first job. Or if you're not good at the job.
Once you're in and do good work, you should be fine for a good career.
Many Indian companies (basically US companies with Indian Dev Centers) are still hell-bent on Degrees. I personally know people who have either not taken into consideration because they don't have a Masters (Data Scientist role) / Bachelors (Web Dev role) or their Salary was negotiated below Market-salary due to this fact.
These things are definitely good for knowledge but for employment (Local or International) - Degree - that too from a prestigious Institute (as most Job requirements mention) is very much required!
From what I've been told the quality of education varies enormously from institutions to institutions in India. [0][1].
I suspect the diploma is used as a filter for the large amount of applications companies receive.
[0] https://restofworld.org/2020/india-engineering-degree/
[1] https://economictimes.indiatimes.com/jobs/only-6-of-those-pa...
Better teaching is dubious to me. First, it’s not a given that instructors from Harvard or Stanford are necessarily better teachers. They are hired and promoted in large part due to their research agenda and history of funding projects with large grants. You can be the worst teacher ever, but if you are pulling in millions in grant funding (of which the University gets a significant percentage) then you are likely to get tenure at many top academic institutions.
But let’s just say the best lecturers really are at these places and you can watch their lectures via a MOOC. Remember the M stands for “Massive”. How much time do you think the average student gets to spend 1:1 with the instructor? The best students that graduate from from my department are those who seek me individually for 1:1 help, who put in extra effort over summers and the semester to join my or other research projects, and who stand out by becoming involved with department activities. They tend to get glowing recommendations, and connections to startups and industry partners with which t he faculty member has contacts.
There are a number of projects being worked on in my department with inroads to Facebook, Microsoft, Google, etc. When I pass a recommendation over for a student I know well, they get seriously considered. Is there an equivalent benefit for a MOOC?
I don't think anyone is arguing that taking MOOCs and taking classes in person are exactly equivalent. I think the argument is that you may be able to get what you wanted by taking the correct online classes and not attending college (which is incredibly expensive).
From my personal experience in academia, both as a student and as a lecturer I honestly think most students don't really benefit from being present in person.
Also, about the inroads to places like FAANG, almost all of those companies require you to go through the entire interview process even if someone recommends you and landing interviews isn't that hard. I actually know plenty of people who self-studied their way into those companies without degrees.
If you do manage to stick to the program and go through everything on your own (which requires an incredible amouunt of discipline) in my opinion the biggest issue you would face right now is bias and stigma.
Maybe DIY degrees using MOOC make sense to replace "amphitheater style" universities but I really don't see how it could be any better than the education at most serious institutions.
Courses in sciences are often split between lectures, that might be "amphitheater style" for introductory courses (think 8.01 or most introduction to programming), lab work and recitations that are typically done in much smaller groups with a T.A to work on problem sets. MOOCs have no obvious alternative to the last two. In my experience it's relatively easy to work through a course by skipping lectures and reading from the textbook than to skip recitations and lab work.
That and group projects, that are often a requirement to graduate, makes MOOC-only a tough sell for me.
Lectures in big rooms can be trivially replaced. And, arguably, are improved upon by even a relatively modest digital effort. You get time shifting, acoustics and video can be better, you can rewind, and you can get the best lecturer to do it. 8.01 or 18.01 or 6.001 (Intro to physics/calculus/algorithms) doesn't really change YoY.
You could do that on VHS tape if you wanted to.
The hard part is problem sets, recitations, grading, peers, etc. And MOOCs do very little there. Automated grading is better with programming than it is wirth other things. But it's still just looking at the result.
There's always MOSS to spot suspicious entries. [0]
I'm not even really worried about cheating in this context (although that matters when you get to certification--a lot). I'm thinking more of: It gets the right result but it does so in a really crappy way. (And, yes, in some circumstances you can measure CPU time but you still mostly in RIGHT/WRONG grading.)
It's an other reason I wouldn't trust a fully DIY degree.
I disagree with the article. Universities already offer DIY degrees. They are called General Studies or Liberal Arts degrees. They offer, in my opinion, a much better education than a CS degree.
CS should be a trade school because programming is an unlicensed skill like carpentry or plumbing opposed to a licensed profession like medicine, law, engineering, or even truck driving. You can teach yourself programming and be just as employable as somebody with a CS degree, so why not get a real education while also teaching yourself the necessary technical skills. Why spend that kind money on something you can teach yourself? I don’t have a CS degree and it hasn’t prevented me from getting any job or from being a senior developer.
I think you can go a long way towards grokking data structures and algorithms by solving problems on competitive programming sites. I don't have a CS degree, but some time ago I became somewhat addicted to SPOJ (an "online judge" with problems taken from ICPC and the like) and solved hundreds of problems, filling the many gaps in my knowledge with lecture notes from .edu sites.
Definitely made me a better programmer (even though I've never actually used stuff like dynamic programming in the "real world").
YMMV, but if you find a real university course and not a mooc that does not have public solutions, and you complete it, if you email the instructor they may give you a sort-of letter of competency, if you approach them straight and show them you have completed all the work, and tell them why you need need their recommendation. I hesitate to write this from frauds spamming professors demanding letters but somewhere is somebody who was me 10 years ago who had no legitimate work history, no university class credits but put in the work, and might need this advice. It has to be an esoteric theory subject that does not have easy to find answers, in my case it was the experimental dbms that a well known professor was designing that I had contributed to with PRs. He provided this recommendation and it was responsible for where I am today. Just saying if you really are a self-learner, and not some fraud doing bare minimum effort and just wanting money, specifically you are actually interested in the content of these kinds of courses and solving the hard problems in this field, you can indeed become successful teaching yourself ... to a point of course, you need to work somewhere and learn from people who have been to school but getting your way in, it is possible.
Sadly the certificates matter.
After 3 years I've finally convinced my employer to drop the "bachelors degree" requirement from all our job ads but I can't see it making any difference. The way people are hired is totally broken and being able to flash your credentials hugely increases the salaries of most people.
If you don't agree look up how much actuaries get paid. The maths isn't all that hard and 5/7 of the exams to qualify as an associate are just maths and stats.
Would you care to elaborate on how hiring is still broken?
Has anything actually changes with the pool of candidates and hires the company is making?
Very few of the metrics that are assessed during interviews are quantified (making bias correction very hard).
It's highly unusual (except maybe at Google) to compare how well someone is doing in a job to how well they were thought they would do that job.
The idiosyncratic nuances of most jobs is hugely underestimated (in the sense that the more specific the prior experience the more it should be discounted).
My suspicion is that we'd all do a lot better if we took all the candidates that applied that we thought "would do" and then drew lots.
We'd probably do even better if we agreed "no fault" severance packages in advance that could be triggered by either party.
You'd be in good company. Honestly for lots of people especially those who want a career change and aren't 18, going back to college for four years and the debt that goes along with it doesn't make a while lot of sense.
Heck, even if you are 18 you could learn to code in a year or two and then be earning good money by the time you are 20.
I've published over 90 success stories of devs without CS degrees over at www.nocsdegree.com if you wanna take a look
I don't know what degree courses are like elsewhere in the world, but in the UK they tend to be single-subject (eg "Applied Biology") studied over 3 years. Depth, in the UK, is more important than breadth - a view I strongly disagree with.
Luckily, I failed my A levels so was spared the trauma of studying Biochemistry for 3 years. I finally got my degree with the Open University - an 'Open' degree[1] which allowed me to pick and choose my education from a wide variety of subjects[2]. The OU have been practicing distance learning since they started in 1969[3] - I have fond memories of watching their broadcasts on BBC2 when all the other channels were closed down for the night.
[1] - What is an open degree - http://www.open.ac.uk/courses/combined-studies/degrees/open-...
[2] - In the end I settled for equal measures of computer science and creative writing - perfect for writing job specs.
[3] - Wikipedia - https://en.wikipedia.org/wiki/Open_University
This is what we attempted with http://www.coursebuffet.com/degree
It is somewhat on hiatus right now. Goal was first eliminate most of the searching. Here is a path laid out, with a some choices but still don't have to think how to replicate a degree, its done for you.
It needs major update, sorry for broken links.
This is great.
Some time ago, I looked at my alma mater’s course list to complete a CS major (I was an Econ major) since I was curious to see how useful those classes might have been to me now as a SWE. Not very much, IMO.
If I were to mentor someone entering college right now (or lets say in 2 years when the pandemic is over), and they knew they wanted to become a software engineer, I’d recommend only taking maybe 5 CS courses at most, and taking a number of courses on art/design, psychology, statistics/data analysis, creative writing, anthropology, and communications.
They may later decide they want to be in a leadership position, so having a background that would allow them to be able to talk to product leaders, designers, marketers, etc. would be valuable.
If cost isn't as much of a motivator, and you just want the fastest way to get into the industry, I would recommend a brand name coding bootcamp instead. The time span is much shorter, many companies already have a sense of your expected skillset, your salary hit on your first job is often not that much (maybe nothing) and should be gone by your second job.
Getting a brand name CS degree definitely has its advantages, allowing you easier access to even higher-paying engineering jobs, and can really help build the foundation for you to become a much better engineer. But it's really just a better starting point (assuming financial aid), and your path from there is much more dependent on how you invest in your own career.
I really can't recommend bootcamp; They almost always teach "tricks" rather than systematic thinking and consider CS fundamentals to be in the way of practical "applied" learning.
It's pretty depressing once you get a few resumes that all have the same portfolio, because the whole bootcamp was about building their portfolio website.
New grads also all have the exact same resume as well. I'd go through OCR and interview 16 carbon-copy resumes every day.
I'm not convinced that bootcamp grads are particularly worse at CS fundamentals than many college grads. If you care, you'll put in the time to learn using the infinite amount of free classes and resources out there. If you don't, being forced to take the minimum number of core classes and get passing grades in them doesn't change much about how you think and approach problems.
> If you care, you'll put in the time to learn using the infinite amount of free classes and resources out there
Exactly. But a lot of bootcamps out there are advertised more as a get-rich-quick scheme than learning a career. That seems to attract the wrong types of candidates.
But I agree, passing grades from mediocre schools is absolutely not a good filter.
what exactly is a "brand name coding bootcamp"? i dont have a particularly high opinion of General Assembly and its one of th ebiggest.
Hack Reactor, App Academy.
Don't do this. The value of a degree is largely in what it signals, and you have no signal if you don't have the degree. I know some very smart people without degrees. I also know a lot more losers who didn't have the discipline to finish school because it bored them or just weren't smart enough to finish. And when someone only knows that you don't have a degree and knows very little else about you, they are going to automatically place you in this latter category.
Tech career tips for the 21st Century:
* Skip the degree. It's expensive and you'll never recoup the cost.
* Choose a sub-field carefully.
1. Avoid dead-end niches. An expert in the Linux kernel or Rust compiler is just that; there's nowhere to go from there.
2. The same goes for embedded systems and the like. Nobody cares if someone knows everything there is to know about car engine management systems.
3. Check the job openings. Some things are hotter than others.
4. But don't count them too much. Five or ten years ago, being able to spell "Hadoop" or "TensorFlow" meant that everything that came out of your pie-hole was gospel. Now, not so much. Look for things that are hot, but relatively unknown.
5. Bonus: UI/UX is a dandy choice; everyone needs them and the framework developers have gotten the formula down: change things often and deprecate fast.
* Remember, it's a career, not a job.
1. Always be hunting the next job.
2. Never stay at one place too long. If you can't change projects every 6-8 months, make sure you change jobs every 12-18 months.
* Network, network, network. No, not that HTTPS/BGP/OSPF crap. See point A1. Remember, who you know trumps what you know every time.
2. Embedded isn't going anywhere. If you want a career, not just a job, embedded is going to be here in 20 years. As opposed to the "hot" things... where will they be?
> Remember, it's a career, not a job.
...how do the suggestions you made factor into "building a career"? TBH your suggestions sound more like "remember it's just a job" advice than "how to build a meaningful and high-impact career" advice.
I don't see how you either reach "principal" or reach executive positions by hopping through commodity IC roles in "whatever's hot".
> Skip the degree. It's expensive and you'll never recoup the cost.
Counterpoints: the vast majority of people in the industry will have technical degrees. A degree makes getting that first job much, much easier. In fact going to the right schools with good internship connections can be the easiest and most direct way to get a job at FAANG. Finally college can be an enriching and fun experience. If you are already going to make enough of money to live/retire well, you may consider it well worth it to trade 4 extra years of career/income for the social/academic experience of college.
BTW I majored in history before getting a job in the industry
your comment in a nutshell:
I don't think you could be wronger. In a few years the no-code movement is going to completely demolish front-end development but there's still going to be a lot of high paying jobs for embedded linux experts. You'd be surprised how few people there are that can even plug in a raspberry pi.- Linux kernel = dead end - Embedded = dead end - Front End/UI/UX = great opportunitiesWow I think I disagree with all your points. Whatever works for you I guess but this is definitely not genetically the advice
From me, it's sarcastic. I've done pretty well doing the exact opposite of each of those points.
On the other hand, that's a collection of suggestions I've seen often here on HN.
"Look for things that are hot, but relatively unknown."
What?
I.e. up-and-coming as opposed to well established.
If you study and make 1 project for each subject of https://teachyourselfcs.com/ you can go toe to toe with any Stanford or MIT computer science undergraduate. You will have spent an order of magnitude less and will have an order of magnitude more experience. But you won't be able to slack or coast through, and you will mostly still be excluded from elite institutions just as you were before you began.
If your only interest is studying computer science, even at the expense of all the privileges university education incidentally provides, then I don't see any downsides.
> If you study and make 1 project for each subject of https://teachyourselfcs.com/ you can go toe to toe with any Stanford or MIT computer science undergraduate.
That better be a hell of a sequence of projects.
I don't get the point of calling it a "degree" if one of the cons is "you don't get a degree".
How is it different from just "learning online" ?
I've helped hire people and I might be in the minority but after you worked in the industry for a few years, your degree is meaningless.
Agreed, I removed where I went to college on my resume a few years ago to make room for actual work stuff, no one has even asked me if I went to college. I also review resumes and unless it's a junior position I don't even really pay attention to where they went to school.
As someone who's very gainfully employed with no degree, but went back to school anyway, here is my perspective:
If you're really good hacker you'll find a lucrative job, as long as you have the basic soft skills to work with people, even without a degree. If you're just an average coder you're not going to get a job that pays well without one, and if you do get a job it will not pay as well, and you will be the first on the chopping block.
I have managed to secure some pretty lucrative and rewarding jobs, but I went back to school at a brick and mortar anyway, because I want the education and I want to do academic research. I'm currently working full time while I attend part time and also do research, so it's working out.
For the DIY degree: I can promise you that even if you do enroll at a 4-year, you're going to end up doing this DIY degree in your spare time. You're gonna sign up for courses that make you facepalm and wish you were just reading Ed-X. I studied for a lot of my classes by watching the OCW lectures on the same material.
Now, with school going online, you're also gonna find some schools don't have high quality lectures on video. Some professors are passionate and do... one of mine has a fully loaded youtube channel. Others don't even get the basic mechanics right, and you can't hear them during the videos because they don't have a good microphone.
The difference is the 4-year gives you connections to research, academia, and industry, as long as you do it right. You show up and talk to the professors after class and during office hours, be a good student, and ask good questions. You can even do this with online courses: go to the office hours on zoom. You can't do that with MOOCs as well, the professor probably isn't going to have that much time for you (it is called massive for a reason.)
If you are the rare person who actually does what I'll call "homeschool college" and finish an entire degree worth of MOOCs, more power to you. If you have the gall to put it on your resume, you already know you're eccentric. If the stars align and some weirdo hires you for it, congratulations, you won. You are in the statistically improbable category and for the amount of time you're going to spend on this DIY journey, you could have popped by the local university and met a lot of interesting people while you did this.
IMHO, you are best off if you do all of the following (any order is fine)
* become a really good programmer who can build incredible things and make awesome contributions on teams, writing great docs, help and lead others
* get a 4 year degree and do it right: don't go there to check a box or go to a diploma mill, meet the professors and network, find something you are truly interested in
* never stop learning, reading, working on projects, or perusing MOOCs etc
There shouldn't be a significant obstacle to doing all 3 in my experience. I started in a a really deep rut and if you manage to bang out 1/3 the other 2 start to become easier. For example, you can find yourself in a career that pays for school, or a school that helps you find a career. The possibilities are endless.
> get a 4 year degree and do it right: don't go there to check a box or go to a diploma mill, meet the professors and network, find something you are truly interested in
The academic environment of university is extremely bland and uninteresting to me.
Especially the way you're tested. It doesn't promote understanding, it promotes memorization.
Going through the boring stuff was worth it to me to get into research. The stars can align and you might meet a professor with interests that are exactly the same as yours. I'm really fortunate to have that, and I never expected it to happen. I thought I was going to have to suck it up and learn to love something.
What you're describing with being tested and memorization sounds mostly like the first 2 years of college to me. What lies at the end of the road is literally the total sum of human knowledge and the advancement of it. I think 2 years of drudgery is a small price to pay for that.
Funnily enough, I lasted 2 years before deciding it was a waste of my time.
What do the final 2 years contain that makes up for the first 2?
So I actually went ahead and decided to build "curriculum" that I would be happy to study, instead of trying to take potshots at the idea. For reference, I'm a to-graduate-undergrad who's studied a pretty theory CS-heavy course curriculum. I work [in terms of research] in compilers, formal verification, and dabble with some NLP on the side. I personally find knowing pure math, theory CS, and algorithms/data structures (the ones that are derided often here on HN as "leetcode") to be an _insane_ force multiplier.
If I had to recommend online courses, here are the ones I would recommend. Unfortunately, one does not get access to exercises and folks who are willing to verify your work. Math.stackexchange is unfortunately far more active than cstheory.stackexchange. I don't really know of an effective way to "bootstrap" this, except for implementing a lot of the things that show up in computer science.
I'm collecting links of courses that have videos, lecture notes, and exercises, which I would be happy to learn from [or have learnt from in the past].
Theory courses that are must-know:
- Linear algebra: https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra...
- Basic Combinatorics: https://www.coursera.org/learn/combinatorics#syllabus
- Introduction to Algorithms by Erik Demaine: http://courses.csail.mit.edu/6.006/fall11/
- OR, Introduction to Algorithms by Robert Sedgewick: https://www.extension.harvard.edu/open-learning-initiative/a...
- Complexity theory/theory of computation: https://web.cs.ucdavis.edu/~rogaway/classes/120/spring14/
- Structure and interpretation of computer programs: https://ocw.mit.edu/courses/electrical-engineering-and-compu...
Computer engineering courses that are must-know: I do not immediate know of good online courses, so I list the topics below
- Operating systems:
- Networks
- Computer graphics [Is a great applied course to see linear algebra in action]
- Distributed systems
- Compilers
- """Machine learning""": Scarce quotes since there's a divide between old-school machine learning and newfangled deep learning. Is useful to know ideas from both.
Advanced good-to-haves:
- Advanced Data structures: http://courses.csail.mit.edu/6.851/fall17/
- Graph theory: https://www.coursera.org/learn/graphs#syllabus
- Abstract Algebra: https://www.extension.harvard.edu/open-learning-initiative/a...
- Nand2Tetris, where one builds a computer "from scratch": https://www.nand2tetris.org/software
- As much math, physics, and computer science as can be learnt!
Is Linear Algebra that useful to the typical working programmer? Or is it perhaps only particularly useful for machine learning and similar?
To me, combinatorics, probability and statistics are much more used day to day.
With Covid prevalent in the United States, I don't know what the situation would be for students looking to take the fall 2020 semester.
In college, we were told to spend at least three hours studying for every hour in the class. So I am not sure what people mean when they talk about "DIY degree". Over 75% of a standard BSCS degree is already "DIY". What we get in the other 25% is lectures, office hours, discussions with the professor before and after class, discussions with other classmates, access to a library with many volumes on math and computer science, access to computer labs. Also verification that someone had learned these things. We can look at their GPA and transcript as a loose indicator.
I have worked with programmers who went to boot camps, did "DIY degrees" etc. None of them would be able to tell me what a pushdown automata was, or how to deal with critical sections, or had ever written programs in Lisp, or could derive 8x, and so forth. I am sure there are a few out there who could, and there are certainly a number of people who somehow got a BSCS and who don't know these things. Nonetheless, people without a degree usually don't learn about the pumping lemma, or
> you’ll end up with a very impressive “DIY degree”. As a hiring manager, if I saw this on a resume (I haven’t yet) - I would be very impressed.
Well, with the US unemployment rate, this is a great time to test this hypothesis. From personal knowledge, only one of the college graduates in IT I worked with is unemployed (he has a specialized role, does not live in a major tech hub, and his job search has locally been in his local area), several of the boot camp grads I worked with are not working in IT at the moment. In times like these, when you're sending your resume in to the position alongside one or two dozen people who have a degree, it is better to have a degree.
> No college life: you will be missing on the college experience. This one is a big one.
This is the biggest one.
After dropping out of high school, I never attended another school. The amount of socialization and long-lasting human connections that I missed out on is incalculable. Not to mention exposure to different subject matter. Macintosh had great fonts because Jobs took a calligraphy course on a whim. You might discover a hidden passion for entomological forensics. You might join a friend for a gap year trip, meet an amazing person, get married, move to Spain, get divorced 3 years later, become an accountant. Or experience the rush of unity and purpose from joining your classmates at a protest march. Or attend your dorm mate's band in some dinky basement and fall in love with beatboxing to electro swing. Screw education; go to college to wade hip deep into new experiences.
$40K to be totally immersed in innumerabile possibilities that will effect the next 80 years of your life? Compared to ~$15K for an economy car, or ~$250K for a house? Sounds worth it to me.
...that said, if you have economic hardships, self-study is completely feasible, and you can have a great career with no degree. It will still take you years to really get going, but it can work.
I don’t understand the requirement for college degrees for most jobs.
Regardless of your major, a college education will now cost over $100,000. That is at least $25,000 per year.
Unless you get grants, scholarships, or some financial aid, then the brunt of this is going to be paid in loans. Loans that cannot be discharged in bankruptcy.
Now, do you want a 19 year old to be making a life decision to go into such a heavy debt burden, of which they cannot escape?
Some low level business jobs earns less than $50,000, but yet, these jobs still require some college degree. Simply because the company is lazy, and wants the best worker they can get, without having to actually pay for it.
The low earnings, the tax rate, and the cost of living to pay for an apartment to live near that job, makes the numbers illogical.
I think America, and the world, would be better served, if we went towards some kinds of journeyman and tradecraft system instead. Businesses can instead hire people with a minimum of a high school education, and train them for the jobs. Those businesses can apply for some kind of federal or state assistance if they need to, to get credit for doing this.
That $100k figure really isn't true at all. To pick a school, Washington State University is $13k/year in all academic fees. Even if you take 5 years to graduate, that's still about $65k in fees.
Yes, if you include room and board into the equation it gets around $100k, but you don't get to not pay room and board by not going to university.
$65k is easily worth it if it increases your payback $10k/year over a 40 year career.
I agree that an apprentice system would be nice but having participated in an "apprentice like" training system for technical consultants it is MUCH harder to create such programs than you think.
In our case we are training people who already have college degrees and some programming experience. The rule of thumb is that we can't get them consistently billable for at least 4 months after hiring, they'll add overhead to projects for a year, and they won't pay back the cost of training them for at least 2 years. And that is with a well-structured and experienced program. How many businesses are willing to to deal with unproductive employees that long, even if they are potentially subsidized?
Loans can be at least partially discharged in bankruptcy, so that is incorrect. They are more stringent, but with the current public perception of college loans, judges are more likely to agree that the conditions this must meet are true.
Secondly, college is free for a lot of people, as in some states anyone making less than $20k/yr goes to a state university for free. This isn't incredibly obvious, and some grants received may be relatively unknown, such as a grant from a college that's not on their website of $7k a year for low-income students.
You also can't generalize everyone's feelings. Some people aren't compatible with trades.
I would be so much more supportive of the recent trades push if it wasnt riddled with misinformation.
Saw a guy I knew in school post a pic where there were two people. On the left was a person who was clearly supposed to represent some sort of business man, perhaps and executive. The image claimed this man made made $120k per years and had $100k in student debt. On the right was a linemen. The image claimed there made $130k a year with 0 debt.
The average salary for a lineman? Decent, but definitely nowhere near $130k. Both BLS and Glassdoor have it around $65k. There seems to be some myth going around that certain trades are an instant path ot size figures. Sure, after many many years of experience, in a specialized trade and/or in an expensive state with strong union protections you can maybe make six figures, but most trade apprenticeships I've seen dont pay much better than entry level office admin jobs I see.