Stories from developers without CS degrees
nocsdegree.com
nocsdegree.com
My experience does not match your claim: I've found no relationship between having a CS degree and having a strong grasp on "foundations" (which foundations?). The strongest indicators that I've found for whether someone can do complex, research-level work are:
* Being able (and willing) to try at a problem, even with partial information. Even more critically: being able to subdivide a problem such that they can solve some of it and be forthright about being unable to solve the rest.
* Just knowing a lot of productivity- and thought-enhancing stuff. My best interviewees are active and vociferous readers, both of technical and non-technical materials. They almost always end up treating interviews as conversations, ones where both parties end up learning a bit.
There might be a selection bias at play here. Someone who was able to create its own degree from scratch and learn enough to pass your interview should adopt the same mindset when tasked with a new problem. You are selecting for folks who require less hand holding.
> Not to mention that what someone learned in uni a decade ago is probably not applicable anymore whatsoever (in tech)
Not if they had a good degree. Sure the tools change and whatever language/framework too but the fundamentals don't.
Applying a a systematic approach to debugging, algorithms, automata and complexity are still very much the same than they were a decade ago.
Going to college forces someone to learn full time, and that's the real value. Sure you can learn on your own part time but it'll take wayy longer than dedicating a few years to the problem. So in that regard, I wouldn't advise a prospective CS student to go do something else and learn software "on the side".
Working all night to meet a deadline is applicable. You learn dedication at university.
University also teaches you to take a risk on something long term. You pay a bunch of money, and work hard without compensation for a number of years, hoping it will pay off somehow. Your risk not making the grade and dropping out, losing the investment of time and money.
I remember one assignment which was implementing floating-point addition in 68K assembly code. (Third year course on machine architectures.) Code was executed on an emulator that could provide cycle counts, and there was a cycle count maximum to meet on certain test cases.
Now the permanent lesson here wasn't 68K coding, and that's not what the experience memorable. Rather, the day before the assignment was due, the prof surprisingly dropped the cycle count requirements to significantly lower values. Everyone had to scramble to squeeze their code down, even those who had not procrastinated at all and completed their code days in advance. We learned about dealing with a change in external requirements close to the deadline, and still making it.
It's not dedication. It's simply a deadline that you must meet or face failure otherwise.
>University also teaches you to take a risk on something long term. You pay a bunch of money, and work hard without compensation for a number of years, hoping it will pay off somehow. Your risk not making the grade and dropping out, losing the investment of time and money.
Actually university is opposite of taking a risk. It's a safe choice. You get a degree - you get a good job. It's something that always drilled into everybody. Taking a risk is doing something that is opposite of common sense.
Not a given. A kid just has to walk down that hallway where the yearly grad photos hang, and take note of how less populated they are than just that one lecture he or she just came out of.
But I personally won't know: I didn't graduate from high school, never got into university, yet now I am senior director level overseeing architecture at rather large company.
I guess I made safe choice back in high school when I decided not to go to finals at math and instead to go to first day of full time employment with city level isp
Everyone I know, including myself, who came to software engineering outside of the standard academic route needed to make a huge commitment. Pretty much everyone who goes down this path faces a large cost in terms of the time commitment required to learn a new discipline, the price of training materials (boot camps, online courses, etc), and the opportunity cost of leaving an existing job to take a chance on a new entry level one.
I personally switched to software development from a decent but mind-numbing career. The first couple years were really rough as I lived off of dwindling savings trying to learn and pick up enough entry level work to get by.
Going the computer science degree > intern or entry level position > good engineering job route is both difficult and full of valuable experiences, but it's also the most cookie cutter approach with the clearest guardrails.
The notion that only the most dedicated people can make it through the experience of a comp sci college course in their early 20s is hogwash in my opinion. I have a 4 year degree in an different field and that was a MUCH easier path than breaking into the software dev business with a self taught and boot camp background.
"Someone on this job has to know WTF is going on. And that person needs to be you."
It was construction management, but yeah. It applies to Project management as well.
I think the grind and knowledge gained in multiple sectors was worth it, but it was a long road. I've been programming on and off my whole life so I think it really depends on the person, but not having any degree it is doable. Would I do it differently after looking back? Absolutely, but I doubt I would get a CS degree.
Moral of the story, if you want it bad enough and go out there and make it happen, you can find a place in this industry with a high school education. Just demonstrate knowledge and keep on learning.
One of the reasons we see fewer older developers is that software development wasn't a major career in the 80's and even early 90's. Nothing like it is today in terms of numbers of people. So, there just weren't as many people doing it. Now that they are older the number of younger people dwarf them, in part, because the number of jobs has gone up.
Older developers are there. I know a number of them.
There are also company differences. Some companies don't like to hire older developers. Some of these companies want people to work around the clock and older developers tend to have families and hobbies. It's harder to have an influence on them to work a major number of hours.
Then there are older developers who do not want to change. I know some of these. As technology changes a breakneck speeds they don't want to move on from what they did to something new. This can cause issues and give the age group a bad name.
I find the most successful older developers are those who use their experience to do a good job and what needs to be done while adapting as things change.
I'm not good with people, so I doubt I'll ever be in a position to do so, but the ideal team composition to me needs a mixture of naive geniuses and people who've been around the block enough to know when to say KISS.
We have web,app, and even game dev. Personally I work in Data Engineering/Machine Learning/Applied Stats space with some app dev work as well. I'm learning to wear a lot of hats as we segment into small groups and it effectively feels like a bunch of different startups in a "closed" economy of the company.
Also why don’t you move to management? I’m soon to be 35 and I’m taking a director role now primarily because it’s somewhat the natural progression path.
A lot of the experience you gain isn’t purely tech focused and it’s a shame to let that experience go to waste.
Some amount of what you hear about age discrimination is older candidates are less familiar with CS fundamentals because you don't use them all that often on the job, whereas fresh-out-of-school candidates still remember them.
This isn't to say the typical software engineering interview is effective or ineffective, just that preparing for what you know you'll be tested on helps a lot.
If you can kind of transcend past manager to "architect" then it seems to be much more "cool" to have older staff. If you're doing something highly cyclical (or prone to fads) like designing websites it would have to be an uphill struggle. Experience is hard to measure and value, in some areas more than others.
Obviously the company matters a lot too, e.g. maybe avoid IBM... I suppose you'd have to spot whether the management are likely to believe that youth guarantees innovation (to quote James Bond of all people).
Where are you working? At a large company? Maybe a change in your environment can bring new perspectives and chances.
And yeah, management track involves a lot more politics and organizational stuff than I really want to take on, at least within Google. I could see going mgmt track at a smaller company, but without recent experience they wouldn't hire me on that path.
If it makes you feel better, I have a CS bachelor's and I still get imposter syndrome on a fairly regular basis
Thing about having no CS degree is, in some ways I really _am_ an impostor here, in a company where masters and phds are commonplace, in a company was founded by two academics who never worked in the industry, etc. When I first joined I was blown away by how much of Google seemed academia-like... internal conferences with poster boards, peer and code review processes like a doctoral thesis committee, campus cafes, academic publishing all over the place, etc. etc. Hell there's even the equivalent of residences (GSuites, Google managed rental properties for traveling googlers)... It's toned down some as Google has ballooned in size, but still.
I hear this a lot. The difference is that I objectively am an impostor. I've worked with plenty of Stanford/Berkeley CS grads and can conclusively say that I am a worse programmer than them and will never be as good. My concern is that eventually the number of those people will be so great that mediocre devs will be pushed out of the market. I'm honestly incapable of passing these Leetcode/Google style algorithm interviews which are skewed towards CS grads, and that's increasingly becoming the standard for every company regardless of size.
CS degrees train people to think that that kind of thing is what programming is ("why else did I pay thousands for this degree?"), and then they go out into the industry and propagate that in interview processes, and believe that failing these tests in an interview is an obvious indicator that someone is "lying" about their programming ability.
The reality is that for many of us programming is a far more experimental and experential process, and I will use all sorts of algorithmic and data structure techniques but will go read or acquire that knowledge in the process of creating. It's not something I feel comfortable doing on a whiteboard in front of a person or group of people.
Don't be too discouraged the vast majority of programmers are not going to be from elite institutions ever
Almost everyone is completely incapable of passing a Google interview. That's because they're astronomically hard and they only take the very very best people who are at the top of their fields. I've no hope of passing one either.
But so what?
There's always going to be some place that you aren't going to be able to get a job no matter how good you are. Look somewhere else - there's so many more options.
But correct answer to the question isn't actually necessary. They're looking for your thought processes, and what it reveals about your knowledge and/or techniques, not necessarily correct answers. Some questions don't even have "correct" solutions.
I would disagree with that. It's because coding problems are a very specific skill. It's essentially being good at riddles with extra esoteric knowledge thrown in.
Imposter how? Did you lie on your resume? To your co-workers?I would assume not. You were judged on (presumably) the same criteria as anyone else, and found to be at an acceptable level. Maybe other people are better than you, and that's fine. But if you weren't "good enough", they probably wouldn't keep paying you, and your manager would probably say something. It's kind of the point of performance reviews.
Interviews for senior level positions should contain almost no technical questions at all - you can tell pretty quickly if someone knows what they're talking about by digging into their experience with earlier projects. How was a solution architected? What other ways did they consider? Why did they go the route they did? And my favorite, "think about the most complex project that you had a hand in architecting (for architects) or developing (for developers), and teach it to me." You can immediately see where they focus, what things they gloss over, and if you have time and it's an engaging conversation, changing one of the core pieces and asking how they'd change the design can be a lot of fun (for an interview, anyway).
I think of programming as a creative process. And like any creative process, set and setting are extremely important.
Salaries won't race to the bottom, because 1. there is still a demand, and 2. someone from a boot camp doesn't have the knowledge and understanding that a more senior person does. Can they learn that? Of course they can, but then they will become more valuable and expect more money. Companies that hire the cheapest person possible almost always end up at the same conclusion. You pay peanuts, you get monkeys.
Story time. At a previous company I worked with a number of smart people. Education wise, I didn't hold a candle to them. One went to a top engineering school in the U.S., one had a master's degree in CS, and one went to one of the top rated CS programs in the world. (They are all several years my junior.) All of a sudden our boss calls me in a panic, because some update that was done was failing and causing our clients to not submit data. After asking questions about what's happening, level of impact where it was occurring, I briefly look at the error log and say, "There's the problem, and this was the update that caused it." How did I know, because I smarter? No. I had more experience, I've seen more things. I've solved more problems. Their degrees didn't teach them anything about how to handle that situation. This is why not having a CS degree isn't a death knell of a career, and new people entering the field aren't either.
In fact, every once in a while on here you'll see somebody post a sort of ironic list of the things that they don't teach you in a CS curriculum: databases, networks, version control, debugging, command-line terminal usage, web security, usability... in short, all the things that you actually need to know in order to be a proficient software developer.
Still, nearly everything (computer related) that I learned in my CS degree was stuff that I never would have come across on my own, like calculus, linear algebra, statistics, complexity theory, numerical analysis. It sort of "ties together" the practical stuff, but you don't need to know any of it to be effective. I'm glad I did it because it's neat stuff and a different perspective. In a way, the nice thing about having a degree is knowing that you don't know what you might be overlooking in not having one.
That said... why not just go and get one now? You'll feel a little weird being 10 years older than everybody else and it'll look weird at first putting "15 years experience, graduated last year" on your resume, but you're nearly guaranteed a perfect GPA at this point. In a few years, you'll have the "checkmark" you need and you'll know what you were (or weren't) missing.
I tried. CS classes were a total walk in the park. But I simply could not do the math. I hired tutors, I quit my job and studied full time, I've never tried so hard at anything in my entire life. I bashed my head against a wall for almost 2 years trying to pass calculus, and failed it 3 semesters in a row before giving up. It's why I have the utmost respect for people with engineering degrees now.
I know a number of software developers who are sustaining. They aren't going up the ranks or down the tubes. They are happily sustaining. They do good work and are content.
As we are sold that we always need an upward trajectory... it doesn't work out that way. As you get older you find there is no more up. The purpose of always going up runs out of steam.
> It seems like you either hit the startup equity lotto, or burn out by 40.
Is this a SV or startup mentality?
Most successful startups have an average founders age at founding of like 45. It's not the young in age who are more likely to found successful startups.
If you burn out by 40 it may mean you have an unsustainable lifestyle.
I see so many takes like this, but I'm not yet convinced that this is gonna doom salaries long term. I haven't noticed a difference in the recruiting communication I receive in terms of salary, and my current salary is above average. Companies would be insane to ask current employees to take a pay cut to go remote unless they want people to leave.
As long as companies are focused on hiring the best people they can find, they're going to be motivated to continue supporting market rates.
Software was always an outlier in professional fields, as most industries require some form of degree or certification, so I think it's good to get ahead of the curve.
I star
Nothing. Based on numbers I've seen, there are probably a lot of companies out there where I'd take 75% of what their devs are making today if it means I can be permanently remote. Probably 50% if I could move freely internationally. Now multiply that by how many people are eligible once you expand your hiring range from driving distance to national/international.
If you want to be an aeronautics engineer, or a civil engineer we don't require you to go get a degree in physics, sure you'll have a lot of classes that deal with physics and you're expected to be familiar with the basics, but you aren't going to have physics as your major. So why the heck do we keep pushing people to CS when their going into Software Engineering?
If you think as CS education is still necessary and valuable in your work as an SWE please tell me why, I am curious to understand why if people feel it was useful I want to know why.
EDIT: I appreciate the answers I've gotten, as clarification I have noticed several people cite how their degree helped them get a job, or move positions, and I agree that it does that; however I feel a degree in Software Engineering would be just as valid, in these situations. My question is more about is a does a CS degree or an SE degree help make one a better engineer?
Even jobs that specify "Software Engineer" first ask for CS degrees (or equivalent)
The reason for this is that they want people that know computer science (algorithms and such) but people that are not actually scientists.
It's worth pointing out that here in Google Canada we were recently instructed to start referring to ourselves as Software Developers again, as "Engineer" is at least partially a protected term.
That's a good thing.
It's the same thing in the medical field where everyone had the same core courses in med school before choosing their specialty.
I don't think "Front-end engineers" is the correct term to designate someone with a 6 month bootcamp on their resume, because it really breaks all assumptions I've made above.
There are people in FAANG the dont even have any post secondary making > 500k a year as "Software Engineers". How this works without total chaos is that each company has a rigorous testing procedure for candidates.
This cataclysm has yet to reach the field of medicine or law but it is sorely needed. (I say this with family in both).
I understand the difficulty and that the term "engineer" probably should never have been used as a substitute for "skilled knowledge worker" but I would expect this kind of deracination to continue till the economic calcification is no more.
That's what I expect from a credible credentialing organization, to be able to tell me that person X meets a minimum bar. Right now they get a bad press because, especially in the medical field, it's more about gate keeping and lobbying than actually enforcing standards and protecting the public.
I would argue that surely someone making that type of money at a world class organization like Google would have no problem passing any engineering exam.
There is just no way I would have ever learned the things I learned in my CS degree on my own. My degree reshaped my brain. It forced me to be good at math. It forced me to think like a programmer.
I failed my first 3 CS classes, but I kept going and ended up graduating top 5% in my CS graduating class. I would never have learned how to program without this degree I am absolutely convinced. Like yeah maybe I could hook some stuff up to an array in python and struggle through a for loop.
The CS degree gave me confidence, expertise in solving CS related problems, and for better or worse the market expects me to have this degree and it helped me land a job where I already make 50% more than median household income in my city at only 27.
I would take that student debt again in a heartbeat.
Two of my friends with 4 year college degrees recently quit their jobs and went back to study CS. I told them to avoid bootcamps, why?
I've been a part of the hiring process and people from bootcamps are usually not very good, but occasionally they are. To me the bootcamp education doesn't guarantee a CS related role. You could end up with nothing.
Even my friends who STRUGGLED through a CS degree and are AWFUL programmers were able to leverage their degree into roles like Project Manager or Product Owner which have great outlooks and solid pay.
On the other hand, I've seen places where the "Software Engineering" is about requirement, methodologies and tools and has no math nor algorithms. That's akin to an aeronautical engineer without a solid background in classical mechanics.
I dropped out of traditional college. Last class I remember they were talking about what a GET and POST request were. I had been a professional web developer for years at that point. I felt it was a waste of time.
In WGU I had a similar easy class, stuff that was "way below me". Not to worry, I passed the class in a day and stopped worrying about wasted time.
I recently did a C++ assignment that was filled with artificial requirements making it artificially difficult, yet I learned some things about pointers and figured out the basics of CMake for the first time. Useful stuff. Now I'm doing a similar assignment with Java. I knew I would have to set aside my distaste for things like Java (gross!), and with that mindset things aren't so bad. I'm actually enjoying JavaFX.
WGU's calculus class was harder than calc 1 at my brick and mortar university, but easier than calc 2. Once again, I knew most of the material and passed after only a few weeks of review.
I do agree that a CS degree doesn't teach as much as it sometimes gets credit for. I do believe WGU's CS degree is as good as many brick and mortar CS degrees, but with minimal "bullshit", though there is still some.
So if you are from a country where developer salaries are low, or that isn't conducive to start a company if that's your thing, then a degree can have a huge impact on your life regardless of what you actually learnt.
For the record I would subscribe to the liberal education viewpoint of college but question why that can't be had for free with the resources of the internet at this point.
Note: By liberal education I do not mean politically liberal but rather a term encompassing a full rounded individual akin to a renaissance man, that is familiar with and can discuss language and mathematics just as well as art history or philosophy.
How well is remote schooling working during the pandemic? Now imagine that, but with no teachers at all. Teachers are an important part of the education process.
Whereas those that view college as a tool of securing employment complain about the classes and feel they are a waste of time, resulting in them not getting much out of it anyway.
I agree teachers are important, but does a teacher have to be someone that sits and lectures in a classroom? If I am interested in OS theory I can join the Linux mailing list, ask questions on Linux development forums, heck if I ask a good question I may even have Linus himself take a minute to respond to my question.
Beyond that from my understanding many of the "teachers" at the college level are Grad students assigned to teach a class and that professors view it as a chore.
Not that I am totally against teachers or traditional education, I just think that one can acquire all of the benefits of a liberal education without ever needing to set foot in a classroom in this day and age.
This is a common (and, I suppose, understandably so), but mistaken HN trope: that developers who went to college learned how to program from their professors whereas the non-college types are the scrappy, pull-yourself-up-by-your-bootstraps autodidacts. In reality, I've never even heard of anybody who's completed a CS degree (or any other degree) who works as a developer who didn't also learn independently exactly the same way people who didn't get a four-year degree did. The CS curriculum seems to expect this and instead of focusing on the things that you can realistically learn on your own, focusing on the things that you're probably not going to come across on your own.
This is an excellent point. Almost nobody has an idea of the true depth and breadth of most subjects or how to sequence that learning.