Now, you should definitely get a CS degree or similar if you want to be a programmer. I would have done a lot better having one even though I got by without it. Also, my career path was ridiculous and is entirely non-replicable.
I agree completely. As a dropout, I've had people bother me asking how they should go about a career in tech, and I will tell them unambigously "for the love of god, please go to school".
Self-studying enough to be competitive with classically-trained people is really hard, and while I've done ok, it's not something I'd recommend for most humans. I like to think I'm fairly competent now, but even after doing this stuff for nearly a decade, I will still occasionally turn up blind spots of fairly-critical information that I never learned about because it was never immediately interesting to me.
Being self-taught is fun, but without credentials you end up having to work at companies that are willing to take chances, and as a result of that these companies have a propensity towards going bankrupt, or being run by scumbags who will run away with all the investor money (true story). I'm not even 100% sure what advice I could give people trying to imitate my career..."Hey kids, repeatedly fail upwards until you accidentally end up working for a company that happens to get acquired by Walmart which will somehow legitimize your experience".
This is one of the notable difference between my pre- and post-degree careers: a degree opened the door to jobs with stable Megacorps. I still get the opportunity to work on cool, cutting-edge stuff, while also having a good salary & health insurance with reliable raises, decent vacation, and a lot of intangibles (nice equipment).
Plus, if you enjoy programming, CS is an incredibly fun degree (when you take the right courses).
That said, it was a rocky and scary road to get to this point; if you get your degree you can often start out immediately with some stability.
I never took CS, as I was a math major before dropping out. Honestly, math is still more of a passion for me than CS (despite me loving programming), and I consequently do have some regrets about how I handled school; specifically, I'd like to get a job doing research, but as it stands that would require me first finishing my bachelor's, then getting at least a masters, and probably a PhD. Doing night school for a bachelor's is definitely doable, but I don't think I've heard of a single success story of people trying to work full time (which I would need to do to pay my mortgage and support my wife) and doing a PhD. If I had finished school the old fashioned way, I could have conceivably gone straight to grad school before entrenching myself into my current (admittedly comfortable) lifestyle.
I worked full time during the second half of my PhD, paid a mortgage, supported a wife, and had a daughter.
If your wife doesn’t have a paid job and so doesn’t have any income, in order to look after the children, then no.
And in some countries it's also an incredibly affordable degree. I was able to pay off all my student debt with part time jobs between semesters.
If anyone asks me if they should go to school, do a bootcamp or learn by yourself I always tell them that "don't take my word for it but I'd personally never go to school to learn and get job as a programmer if that's what you want". Seeing as I've "made it" so to speak coming from a another field, without any kind of degree whatsoever, with no prior work experience in IT, I personally don't really see the value of going to school unless you really want that experience or if you're the type of person who needs a structured way of learning.
My career path is also strange to most people since I started out in sales and marketing, then went into finance as a glorified salesman and eventually got fed up with sales hussle and learned web development on the side. So from that I decided to learn how to code and web development to actually landing a job as a web developer took roughly two years.
I believe that with my soft skills from sales and finance and a decent portfolio made the decision to hire my over let's say someone straight out of college with no other credentials a no brainer.
Sure, I run into those "blind spots" from time to time but so far everyone I've ever talked to who has been in tech and specifically in development positions says the same thing, they all have the imposter syndrome and it won't go away.
You have to ask yourself what would be more effective:
4 years in college (spend $170k) or spend 4 years learning on your own (free), working on open source projects (free), and/or getting an entry level job (earn 120k or more)?
Also, why the constraint of "out of state" tuition? In-state tuition for CUNY schools is ~$7,000/year. 4 X 7,000 = ~$28,000. Is that a lot of money? Sure, but it's less than my first year's salary as a dropout, even without your inflated numbers.
I mean ideally before you entered school you should have had some type of idea about programming. I know many people who started writing code very early but even if that wasn't you you should have at least gave it a shot before you dedicated a major to it right?
Therein lies the problem, if you're intelligent enough to start learning on your own, at what point does the opportunity cost of college outweigh the benefit? If you don't have the initiative or desire to start on your own, then you probably won't make it very far in this field anyway because it requires constant learning and experimenting on your own.
I guess that's why so many companies look for "self-starters"
Systems Engineering is what you want my friend. Companies are totally willing to be adventurous in their hiring when staffing roles like SRE, since SRE requires skills that schools haven't figured out how to teach.
FP has been academic for most of its life, but until semi-recently they didn't teach it much in undergrad. My interest in it more or less coincided with the advent of MapReduce and as a result suddenly FP is all the rage, which worked out well for me.
I guess that would be the advice I could caveat my previous comment with; if you decide to not go to school, try and find a current blind-spot in the current education system and fill that.
Please note the SRE book has been raising awareness of these facts with the public, so the opportunity window is likely to shrink over time as more people try to get in.
I know enough algorithm stuff to pass a lot of whiteboard interviews (and I certainly know a lot more now than I did during that anecdote), but I'm not sure I could write a min-heap or merge sort without looking a bunch of stuff up first. I don't think I'm stupid, it's just that I don't typically write explicit merge sorts or min-heaps in day-to-day code, and it hasn't been sexy enough for me to write my own, but I do think having an understanding of the mechanics is useful and important.
Ad stated "3-5 years of professional experience", I had _zero_ experience.
Ad stated "Masters degree, or Bachelors for very experienced candidates"
Ad had a laundry list of software and tools, I had experience with one CAD program.
But what the hell, I didn't have anything to lose, and the company was located a 10 min walk from me. So I applied.
Got called in for interviews, which lasted a couple of rounds, but managed to land the job. I know people with very similar stories.
So yeah, my advice would be for people to just apply, if they see something they'd like. Worst thing is you don't get the job, companies won't ridicule or blackball you for applying.
I have had an experience to the contrary. Of course, it's a good sign you don't want to work for such a company anyway.
I don't know. I have to say "me too" here and I've encountered enough of us over the years that I think it's just a big lie. There are a certain number of high paying companies that perhaps overvalue a college education and algorithmic competence.
But overall I think about half of the colleagues I've worked with either had no degrees or had degrees that didn't do them any favors in this career. Our career paths are certainly replicable.
In fact, I'm always impressed by the people I meet that don't have the education but have incredibly strong CS fundamentals.
It matter a lot more for juniors who lack any sort of experience. I think it make good sense for young people to get a degree but it makes less sense for seasoned professionals to go back and get one.
If you don't have a degree but have experience, don't let the degree requirement stop you from applying.
Making it explicit that you will accept "experience and a good resume" in place of a CS degree might increase the diversity of your applicant pool.
I might attempt to make that more explicit next time but it's a slow process.
Last time I was applying for work, I sent out 150 applications/resumes, every single one I look at the list of requirements, if I don't meet one of them, I don't apply because it's a waste of my time.
Sending in a resume or filling out an application is pretty low risk. If a company absolutely won't hire you without a degree, you just won't hear back. Big deal.
I would just say, "Degree in CS related area or related experience highly desirable".
I once got a job with zero qualifications for it -- in fact, the interview was almost entirely just me asking the interviewers how to do the job! They had other applicants but I guess my total and complete lack of experience didn't scare them off. The job was initially daunting but otherwise a fantastic experience overall.
I've gotten many jobs and not met all the requirements. If you're good in something they want, but miss something they want, they might hire you.
Especially if you're the best candidate among all the candidates, none of which often have all the requirements.
Not applying certainly takes you out of the pool.
If you're not confident in your fundamentals then you won't apply because you can't tick all the boxes.
If you ARE confident in your fundamentals then you'll apply and probably get the job and the posted 'requirements' won't even factor into it.
Knowing that is the difference between 150 applications, and just 1.
Unfourtuantly, these features are often inversly correlated.
Also, remember that the people who actually decide who to hire are often as frustrated with the process and its artificiality as the applicants.
I did an interview with one of the FAANG.Co once and ended up arguing with the technical interviewer because he was a douche. When I found out he would have been on my team I told the recruiter I wasn't interested anymore. They ended up turning me down anyway because I didn't get along with the guy. Basically he was asking me to implement a JSON parser in brainfuck, not a legit use for either of our time.
When I interview people, I ask straight forward, probing questions looking for how the candidate approaches the problem and the path they take to the solution. I don't ask trick questions, I don't mislead the candidate, and I help them as much as I can to get to a solution on their own. However, I look for and probe for information throughout the process. It's relatively easy to discern whether someone knows what they're talking about and can apply it versus someone who crammed for the interview. Moreover, if someone did cram for the interview and was able to apply the knowledge that quickly - great, I want to work with people like that.
Had someone asked me to implement a JSON parser in brainfuck - I would have got up and left. More generally - if someone asks me to use a _specific_ language in an interview; it's not someplace aware enough to know that 99% of the time the language is unimportant and not somewhere I want to work.
With all that being said - technical interviews are not "the worst thing ever". They serve a vitally important task of ensuring I work with competent and personable people.
sure is emotionally charged, but I don't know that it is myopic. I have thought many many years about the contents of a technical interview. Taking a step back from the argument I recall decades ago noticing that, I believe it was the bureau of labor statics, software programmers are considered "unskilled technical labor." I was initially offended by this. I have now come to the realization that this is generally true. Skill is not required to make software, nearly anyone can do it. Leading back to the argument though, what makes someone good at being a software developer is not technical skills. It is general competency, critical thinking, and being a good communicator.
> Had someone asked me to implement a JSON parser in brainfuck - I would have got up and left. More generally - if someone asks me to use a _specific_ language in an interview; it's not someplace aware enough to know that 99% of the time the language is unimportant and not somewhere I want to work.
to be fair that wasn't the exact request. It was more along the lines of "using whatever (approved) language you'd like, implement x with that assumption that your base language can only loop and increment." x in this case was something like do division. Which I know is possible, but also something I would never need to do and as such the solution wasn't immediately available to my brain.
> With all that being said - technical interviews are not "the worst thing ever". They serve a vitally important task of ensuring I work with competent and personable people.
was definitely hyperbole, but my point is that a technical interview doesn't serve the purpose that you lay out for them being vitally important. A non-technical interview is far better and easier to evaluate a persons competency, problem solving, communication, and "personable people".
Point being an entry level person with competency and problem solving skills can be taught technical skills very quickly and/or learn as they go. Non-entry level, well, their resume should tell you they have the technical skills assuming their references check out. So I really think we should stop wasting time and talent on "technical interviews"
This sounds like a great interview question. It calls on the candidate to show they understand what a turning complete system is and then put that knowledge into practice to create the fundamental building blocks that are normally given to you.
You used hyperbole to make it out to be something it definitely wasn't.
> Which I know is possible, but also something I would never need to do and as such the solution wasn't immediately available to my brain.
In fact, you do need to do it, you needed to do it for an interview. The fact that you see it that way might underscore a personality trait that the interviewers might not have liked. Thus giving credence to the interview process immediately.
> A non-technical interview is far better and easier to evaluate a persons competency, problem solving, communication, and "personable people".
No it's not. It's far better at providing a "comfortable" place for someone to chat without actually proving anything. A good technical interview is problem solving _with_ time to chat and prove understanding of concepts.
> Point being an entry level person with competency and problem solving skills can be taught technical skills very quickly and/or learn as they go.
This is clearly false otherwise we wouldn't be starved for competent technical candidates. There're thousands of companies looking for qualified candidates and they can't find them.
> their resume should tell you they have the technical skills assuming their references check out. So I really think we should stop wasting time and talent on "technical interviews"
Resumes are worthless - doubly so now that politicians have made lying OK. The majority of people I've interviewed lied on their resumes, either as small white lies, or as large ones. And personal references are also garbage - there was a recent radio host that called random numbers and asked for a "reference" for a candidate they were interviewing. People went out of their way to talk up the fictional candidate.
> Leading back to the argument though, what makes someone good at being a software developer is not technical skills. It is general competency, critical thinking, and being a good communicator.
Yes to critical thinking and communication. You just aren't going to get a good read on a candidate without asking thought-invoking questions. You've either never had a good interview or you don't interview well and disparage the process to feel better.
So, you lie about your actual requirements (how hard is it to add the classic “or equivalent experience” qualification?) and expect potential applicants to intuit your hidden meaning?
As with any kind of transaction in business, the terms of employment are negotiable. A job posting is simply an initial ask.
Ethics are another question, but the rationale is clear.
After all, it's the law that fails to recognize that 7 years of experience in different environments may trump having a degree. Policy makers recognize this and allow the situation to exist because they know that you're not going to get residence for the 7-year-no-degree dude, you're going to get it for the 5-year-Masters-from-CMU fellow and it's better to have that guy in than out.
As a hiring manager you probably dream of finding more people like your best performers, yet this makes it harder.
I agree there is value in a theoretical foundation and would also encourage people to pursue it.
However it seems like a separate point from the reality of the market today. Even historically, could you have lost out on a chance to hire Faraday or Ramanujan because they were scared off from applying by boilerplate text?
To be fair, I may have lost people with lower confidence in their abilities and a greater fear of failure. That doesn't sound like a great loss. I'd rather encourage people to have confidence and get over their fear than lower the requirements.
It's not as if these aren't important requirements; everyone in the department has a CS degree right now. If we put background in a technology, it's because we use that technology. But I'd open to the possibility that an applicant who isn't a perfect match might still be a great candidate. That's all. I suspect most hiring managers feel the same way.
That HBR article I linked in the other thread actually addresses that. Their survey indicates that people are deterred less by lack of confidence in their abilities, and more by lack of confidence in your process to assess their abilities in the absence of a credential. The top-given reason (from both women and men) for not applying was “I didn’t think they would hire me since I didn’t meet the qualifications, and I didn’t want to waste my time and energy.”
Now maybe you're actively looking for people who hustle and won't take no for an answer (which isn't quite the same thing as "confident in their abilities"). Maybe that's your team culture, or your company culture. That's certainly your choice if so.
So if you don't have a degree, you probably shouldn't let that hold you back. And maybe because you don't have a degree you should hustle a bit more than those who do. Again, that shouldn't be controversial.
1) Are there diamonds to be found in the hiring pool of candidates without a CS degree?
2) Whats the most efficient way to hire people in an era where a hiring managers or company HR can receive thousands of resumes for a position?
You're refuting my point on the basis of (2) for which I made no claim. To that point, yes obviously any process chosen has to be practical and take into account many requirements.
However (2) is an issue whether or not you screen based on CS degree. Moreover, it doesn't necessarily get worse.
Any major change to evaluation process should be holistic and take into account number of evaluations, time and money invested to evaluate, and where resources are spent in the process. You could come out the same or better in time and complexity, hence "process optimization".
Lots of approaches have been tried and some are anecdotally successful. The biggest obstacle I've seen to improving process is scaling it up to large numbers. What's optimal for organizations of every size and requirement set can't be written in stone.
I would just hope that whatever the policy at my organization would have been, still someone would have whispered Faraday's name to me, along with countless other folks who wont be famous but who we've all seen make great contributions.
Then don't list it as a requirement..?
These days, even job descriptions at a lot of the FAANG and other big tech companies phrase it as "CS degree or equivalent experience required". Hopefully that's a practice that will trickle down to smaller companies over time.
It's worth pursuing a CS degree if you're the sort of person who will be accepted by one of the best schools. If the schools that teach computer science won't accept you, then please don't let it turn you off to the idea of computer science. If you can code, you're already a programmer, no matter how young you may be. If you've got grit and a positive attitude, you can absolutely be successful.
I'm wondering for how long Americans are going to be exploited like that. I mean getting a degree is never a bad idea but in my country (Poland) unis are FREE yet I never went to one and roughly 80% of my programming friends never did or they studied something entirely different. And we're working everywhere from big banks in London through Swiss pharma companies, European Commission in Belgium, to Opera or Google. I never got asked if I have any formal education after my first 2 years in IT. The best programmers I know are mostly all self-taught. Almost all the successful ones are. The "educated" ones often become corporate slaves making pennies in places like Samsung's R&D. I know American unis are top-notch but I suppose it's still better to start learning on your own than to pay hundreds of thousands of dollars for something else than TOP5 or TOP10 unis. And most likely it's even not worth (money-wise) paying that much for those. I suppose we will need not thousands but millions of coders in next decades, right now I'm getting like 50 messages from headhunters any given day, I don't think even if we tried it will be virtually impossible to push so many people through education system at that pace.
Also, especially programming is virtually impossible to learn in any other way than coding for years. It's really handy to have some strong technical background but once you put the time and work in it will work out regardless. Of course again it's better to have the education, but hey, if costs as much as a house maybe it's not the best idea after all. Furthermore ot everyone has to be an architect or CTO (BTW I still know extremely good architects and CTOs without degrees).
tl;dr there are possibly millions of degreeless programmers in Europe, can't wrap my mind around the US education situation, could someone clarify why are things the way they are?
I have recently started getting doors shut for me because of lack of degree. I have 20+ years of experience though and in many of those cases am/was already doing the job they would be hiring me for. I don't know that I'd be doing any better now if I had the degree. I'm at the top in my market already, in fact most opportunities for me tend to not work out because my base exceeds their willingness to pay (without regard for the lack of CS degree).
A CS degree teaches you so much more than what is needed for a software engineering job (it goes far beyond SE and teaches you about compiler design, networking, OS algorithms, analysis of algo, etc)
I have a 4 year degree in CS and a masters in CS. Despite over 15 years of SE experience, I haven't had much use for 80% of the stuff a CS degree teaches you.
However, as the poster has said, it's very useful for getting your foot in the door.
(That said, I also paid off what little student loans I had much quicker than some of my friends, so...)
By the senior levels you can't really tell the difference between someone with or without a CS degree. Experience definitely beats textbook knowledge after a couple of years.
In actuality the things you learn in a 4 year CS program that you wouldn't get elsewhere (algorithm performance, theory, etc.) don't apply to all professional engineering jobs (especially at the junior level). Triplebyte has some great data on how bootcamp grads fair against CS grads (https://triplebyte.com/blog/bootcamps-vs-college) and my takeaway from this (and from personal experience) is that at the junior level it almost makes no practical difference.
After college/university you begin to forget a lot of the specific textbook stuff and begin to replace it with the put-food-on-your-table practical stuff.
Even in school, Big-O is used almost exclusively, very rarely do you see Big-Omega, Big-Theta, Little-O, etc. Even though in algorithmic analysis these are all used to give a more accurate characterization of the algorithms behavior.
Its funny, too, because the professionals (that are admittedly very smart) that like to talk down about Big-O as if it was a waste of time, seem to not realize there is a whole taxonomy of tools for analyzing and characterizing algorithmic complexity...
"The execution time of algorithm A scales up with the number of items, while algoritm B's is constant."
"The execution time of algorithm A is O(n), while algorithm B's is O(1)."
I've spent so much time trying to chase down bugs caused by junior programmers because something that worked fine with 100 rows in db, slows to a crawl when we move a feature out of beta and we suddenly have 1000 rows.
If they had some idea that the query they were writing was O(n^3) they could have done a quick estimate and saved us all the trouble.
You can learn it in like 30 minutes, and understanding the concept behind it (not just the notation) is the core of understanding why some algorithms work better than others.
I did Chem engineering in college, but have been programming since I was 17.
Now I've moved to electrical design Engineering since it seems to be a hybrid of engineering and programming.
So far my job is understanding everything that goes into my complex system. I'm not sure if this or embedded programming is my future. What is more valuable?
Traditional engineering skills are very undervalued in this industry and I've met very few "engineers" in this field who understand engineering basics like control systems. IMO that's very valuable for building the systems we build -- I can't tell you how many half-baked implementations of some of the parts of PID I've seen kicking around.
And I say that as a completely self-taught, college dropout senior developer.
In fact, I have a perfect counter example. At reddit, to even out load on our databases, we built a system that would take into account current load on the database when choosing which read slave to select. As it turns out, this doesn't work well, because you overwhelm the slave with the lowest load because the the reaction time is too slow compared to the request time. We had to tweak it to account for this.
Had we known control theory, we would not have made this mistake. On the other hand, that mistake didn't cause us that much damage and we were able to devise a solution that ended up being right. :)
I do a lot of embedded work without a CS degree. Every board and chip is different, so you learn by doing. But,at the same time a lot of hardware is basically the same. You have some low power cpu and a bunch of standard peripherals. Once you know how most of them work, it's just engineering to figure out what libraries you need.
There's lots of work in embedded that's for sure. There's also a huge amount of variety depending how close to the metal you want to be.
While the guys without a degree are able to have a quick discussion, and come up with an approach they think is best.
I don't have a degree but made it far enough in school to take algorithms and we didn't learn A*.. I think there will always be holes in someone's knowledge since schools have different requirements.
Agreed. Absolutely correct!
They may read a textbook to teach themselves but it'll be different than the textbooks they make you read for a CS degree.
This typically is a benefit, many fresh CS grades I've seen are not as comfortable developing in their first job as a lot of self taught developers.
Yeah, that looks pretty terrible.
Ironically, it probably hurts companies more than candidates.
If you really look into it there are some good ideas out there on how to do better.
One big problem seems to be that alternate approaches break down when scaling up. For example they can't be easily automated, or cant be easily handed to human recruiters with little tech understanding than are culling tons of candidates each day.
Screening based on college reminds me of screening based on an "IQ test", it may have some correlation to good candidates so people think it's good. However the correlation is weak and highly inefficient. Hard to imagine the productivity and opportunities lost compared to a high-correlation more fair process.
For me, hiring, the criterion is more like "could get a degree". Whether or not you actually have the degree doesn't matter to me. Someone who isn't smart enough/motivated enough to get a degree, if they wanted to and had the time/money, well I'd probably not hire that person. Perhaps this is what folks are really getting at when they say you need a degree?
I've made a job board for people without CS degrees. Since I am going to be applying for jobs soon and I am career-changer I figured I would make a solution for myself. It's really annoying to get to the end of a great looking job ad only to find they insist on a CS degree.
All of the job positions are fine with applicants being either self-taught with a good portfolio or having done a coding bootcamp. Let me know what you think!
You're right: Nobody cares you don't have a degree. It's not impressive, it is just normal. What I have a problem with is the huge chip on people's shoulders about "not having a degree" and insisting on dissing anyone who chose to go a different route.
I have a CS degree, I went to school on a scholarship, did not have these massive loans and "wasted years" everyone keeps harping on about. I volunteered my time, I was on the programming team, I did internships, I got amazing insights and advice from my professors. I went to school at night and worked during the day.
I consider my CS degree the best decision I ever made. I found the training and education I received extremely valuable. However, not all degrees are created equal. I went to a really great school. Probably would have had a different experience if I went to whatever crappy state school was nearby.
I also don't think it is necessary to have a degree to be a great programmer. What I DO think is necessary is study and honing your craft. Experience for software development is worth much less than people give it credit for.
Hacking sucks. Just hacking at stuff for years on end leads to you being an expert beginner. Do you have 10 years of experience? Or have you done the same thing for 10 years. This applies to everything: You can get twice as far in half the time if you don't have to figure everything out for yourself, and listen to and learn from experts.
What I look for in a developer: READS BOOKS. ( Audio books count )
That's the only thing. I'm sorry, if you are not reading and studying to keep up, you are getting left behind. There are so many brilliant people writing amazing books on a huge array of subjects. If I could get every one of my developers to read ONE book in on software design a year, I would die happy and the entire industry would be 10 years ahead.
They don't even have to be technical books. I just want to see intellectual curiosity and a commitment to self improvement.
- 0: In the vein of Clean Architecture, The Pragmatic Programmer, The Mythical Man Month, Designing Data-Intensive Applications, The Google SRE book, etc.
I strongly disagree with this. You can read all the books you want, but when it comes to making a decision about a set of tradeoffs, there is no substitute for the experience of having made a similar decision in production before and having seen what works well and what doesn't. So many of the nuances of real-world production systems get lost in books and articles that it's hard to know when it's appropriate to apply that knowledge.
That said, I concede that "experience" doesn't necessarily have to be your own—you can learn from the experiences of your co-workers, friends at other companies, or random people on HN, you just have to take everything with a grain of salt.
> Hacking sucks. Just hacking at stuff for years on end leads to you being an expert beginner.
Solo tinkering is a poor substitute for the experience of building production systems with a team, but it's a great way to stretch the breadth of your experience. I have learned lots of different programming languages, platforms, and concepts in this way that have all made me a better programmer all around, even if nothing tangible came out of any of it.
What I feel matters more than books, experience, and everything else, is simply being plugged in to an environment where you can socialize with the folks who've received the most outstanding training, and by osmosis, having the neural network between your ears attuned to their biases and areas of focus.
Higher education does a good job at this. So does working for a big company.
Glad to see I’m not the only one who winces at this. As bad as intellectual snobbery is, reverse/anti-intellectual snobbery is worse: “we don’t take to all yer fancy book learnin’ in these here parts!” It often seems to be lost that the difference isn’t between somebody with a four-year-degree and somebody with 10 years of experience, but between somebody with a four-year-degree AND ten years of experience and somebody with ten (or even fourteen) years of experience and no degree at all. With machine learning finally coming into its own, software development is getting to be more mathematical, and what you learn in college actually is pretty useful.
It sounds like you went to college and I think that's great, I hope you learned a lot and got a lot of value out of it, but try not to disparage the people who decided not to stick around and are working in the same jobs as you because they were smart/pragmatic enough to see the college experience for what it was.
Personally I thought college was a huge waste of time and money. We live in the day and age of the internet and yet we're paying tens of thousands of dollars to learn things that we can teach ourselves for free and the only reason we do it is because we're too afraid not to. Doesn't that sound ludicrous to you? It did to me, and that's why I saved hundreds of thousands of dollars on my student loans by switching to drop out. And before you hit me with the "It was all about the experience" argument, I'd agree, you paid for a very expensive life experience.
I'm now happily employed as a lead software developer making great money. If I need to brush up on my data structures and algorithms for an interview you know what I do? I go online. If I ever want to delve into machine learning you know what I'd do? I'd go online. Need to brush up on some math? You guessed it.
Strictly speaking I think you made a bad investment by going to college, does that make me an "anti-intellectual snob"? And as a follow up, does it make you "wince" when you see how much you paid to learn what I learned for free?
Also, this is exactly what I'm talking about. Huge chip on your shoulder about something that has nothing to do with you. You are so mad about someone else thinking their college experience was worth it.
Don't disparage people who felt like their education was worth it.
You have no idea about other people's life experiences and how they came to the conclusions they have come to.
So maybe accept that some people got a lot out of college and your experience is not universal.
Second I don’t know where you’re getting tuition plus room and board for 30K unless you had some sort of scholarship (which, not to drag race into it, seems to be increasingly difficult to get if you’re a white male).
Third I made it a point not to disparage you, I specifically said that I think it’s great if you feel like you got a lot of value out of your college experience. I don’t think anybody should disparage anybody, that’s the point. I’m not “anti-intellectual” because I made the financial decision to opt out of college.
Theory matters, classic example here, and if pointing out that people are making well understood mistakes because they haven't studied it is disparaging, so be it.
I don't think college is bad, I think debt is bad and for the vast majority of people entering software development the key is to get things done in a timely and efficient manor, I think it's pretty safe to say you'll never get the opportunity to apply category theory during your daily standup meetings with your scrum team as your managers are trying to meet deadlines for their clients, it's the unfortunate world we live in, if everything was free and nobody had to work hell stay in college your whole life. I wish I had that luxury.
Theory tends to bite when something breaks, though.
And yes, you can often Google the problem, but you're definitely doing better if you're the person whose answer everyone is searching for.
> That's certainly impressive, though 99% of developers aren't in the business of making high level language design decisions like that.
I think they do, though, because they get an incomplete spec and have to fill in the blanks.
"Agile languages" can be characterized as having concrete types: strings, ints, floats, lists, maps, sets. And the 99% of developers are using these languages and creating data structures using those types, and sharing those data structures, often via JSON.
This results in what I call "data pasta" being shipped back and forth between systems. And those ad hoc structures are effectively codified when they become APIs or are saved in NoSQL systems.
Does a CS degree help with this? I'm mostly aware of the problem because I've done it and then tried to clean it up in systems I work on. So the theory helps, but you need some practical guidance.
What the dichotomy of CS degree or self-taught misses is that the CS degree is aimed at learning the math, and while the math can guide best practices, you don't actually study best practices.
> I don't think college is bad, I think debt is bad
Yeah, I graudated in '03, so debt hadn't blown up. Even if we stop shoveling money into universities, not working for four years is still a massive opportunity cost, and a partially completed degree is worthless, exposing students to a tremendous risk.
And so it makes a lot of sense for people to do bootcamps to get their start in the industry, and regardless of whether you're self-taught or not, it seems like you could benefit from some formal training before you take on a senior role.
My degree had some courses on software engineering, but they were focused on requirements documents and UML diagrams and other high level stuff, which I wasn't going to see for year to come.
So maybe a software engineering course for people with industry experience could go over best practices and justify them through the math.
I find it very unlikely I would have learned the things I know had it not been for university.
Besides, I don't live in the US (thank god) so I was actually paid by the state to study.
Oh no my social media comment was read as "smarmy" by some internet drone. Yawn
I went to a bottom-ranked state school and loved it.
Money well spent.
I actually considered taking my newfound web development knowledge (this was in the mid-late 2000s coming out of the Web 2.0 craze) and starting my own website business, but the advisor at the community college recommended I go ahead and get the four-year degree, which I absolutely realize was a good decision.
I'd go as far as to say it's a bad sign if you can draw direct linkages between what you learned in university and what you do day-to-day in your job. That's not really the intent of a degree in comp sci.
Aside from single-row pulls (and even still), should someone that doesn't understand basic big-O be allowed to write any code that accesses a database?
Recently, a guy in my neighborhood who works at the school I went to tried to talk me into going back and finishing up. He talked to the dean and said they could waive four of the eight classes I had left to do! So now I only have four classes left, all doable online, most of them easy generals like arts and letters...
That sounds pretty tempting and everything, but part of me has also enjoyed achieving success outside of the path that our society more or less mandates as a requirement. I almost want to skip the degree to continue showing that it isn't the paper that matters, but the line of work that you pursue and the effort you put into it.
Am I crazy? Should I just go get the silly degree?
I used it to get my TN1 work permit. If you ever find yourself emigrating, even temporarily or even on a client project, that degree will get you across most borders to work. If you don't have a degree, it is much harder.
I used it on my IRAP grant application. If you ever want a grant from the government for a startup research project, and it requires a qualified individual, the degree is proof you're qualified.
It isn’t as if people are sitting around saying “wow look at archeantus doing all that stuff without a degree, he is sure telling them.”
Do whatever feels right for you, not others.
If the only thing between degree-you and non-degree-you is "4 easy online classes" would you be doing this for the accomplishment or the piece of paper?
>> Should I just go get the silly degree?
I loved school, valued my time there, feel it's had tremendous value in my life and am really proud of my degree. None of that seems true for you, so why not spend the time, effort and money doing something more important?
But that's just my opinion. Do whatever feels right for you.
Side projects, my obvious passion for coding, and eventually, of course, my experience got me where I’m at, making a triple-digit salary as a senior iOS developer at a major bank here in Canada.
I’m so very glad I avoided the horrors of student loans that half the people my age I know are going through.
I was able to see ‘higher education’ as the debt trap it was like I can see the sky is blue on a clear day.
At the age of 18, it was:
1) make $50k a year doing something I’ve been doing for ten years every day, know how to do well and love, or
2) go $50k in debt every year for four years paying to struggle through the school system - I hardly passed high school, the way school works just does not click with me or many others.
If you are a coder without a degree, even if it says a degree is required - just apply. This is how I got to work as an iPhone developer at LEGO, Winners, Universal Music, et cetera, until the list of these names became so notable they’d essentially be dumb to not at least look my resume over.
The other most solid piece of advice I can give - just keep doing side projects. If you’re going for your first job, an impressive side project is actually a way better way to get their attention than the dozens of people who will apply with degrees. It’s different, it will always be different, because you made it your way.
A degree isn’t anything unique, and is not actually any serious indication of actual programming talent. A degree in CS basically gives your potential employer the promise that you at least understand the fundamentals of computer science enough to slog it through school. Whoop-de-do. You meet the basic requirements and can even be considered.
Coded a custom instant messenger client while you were in your teens? Played around with ROM hacking, assembly language? Created a Mario fan game? Show them this.
You, your passion and your side projects are. I know this from the utmost experience - because those examples I just gave, I did all of, from the ages of 9-16, which got me doing web sites for real estate agents at 16, which got me working in software at Chase banks at 18. I’ve never looked back and watched my salary and experience grow year by year. :)
I hear about them every day because I sit next to the HR manager, and hear the horror stories of the blank faces when basic concepts were asked. The phrase ‘how did they even make it through a CS program?’ is common.
Fortunately, I have a ton of experience with threading and data structures, I wouldn’t personally make such generalizations - I knew this would be among the first responses I got from someone with a degree.
No, our lack of degree doesn’t imply we lack fundamental concepts - any more than a degree assures you do - and, I don’t know about you, but most of the full-time employers I’ve had would happily pay for a coding boot camp for me on a topic of my choice. shrugs
That's true but entirely beside the point. Being given the opportunity to learn CS concepts and failing to do so is separate from never having been exposed to the concepts in the first place. They don't even know what they don't know.
> No, our lack of degree doesn’t imply we lack fundamental concepts
It doesn't guarantee that they lack fundamental concepts but I would say better than 95% of the time, they do.
Self-learners aren't doing that.
Tbh I wonder constantly if I should get a CS degree. I’ve been working for 4.5 years now and while I feel competent it’s hard to determine the value of things like this.
I can profile my code and optimize it, I can determine if a request is blocking and I can fix it using whatever tools are provided in the language or it’s ecosystem so what good does it do me to “know how threads work”?
Hope I’m not coming across as combative, I really genuine want to better understand this perspective of “developers should have CS degrees”
What about thinking for yourself when those tools have limitations ? For example, when you have a "heisenbug" very few tools can help you fix it. However, if you understand how threads work, what data they share, you have a higher chance of solving the problem. Your profilers etc. are useless in this scenario.
I realize this is HN so the notion of "why do I need this" is king. It's hard to show someone the world outside when they are so closed in their bubble.
I do see validity in what you’re saying but I fail to see how it’s as important as you seem to make it out to be. Is it really worth tens of thousands of dollars of debt and 4 years of time spent just to be able to debug stuff faster than your average bear?
I can't make the CS education choice for you. And I have no personal beef with you or anyone who is self taught. You asked me a question and I replied with a context and situation. Cheers.
Geez, how about even a network call that doesn’t interrupt a UI thread?
1. Realise I need to learn x, out of interest, necessity, etc.
2. Start reading a book on x, the book assumes I have an understanding on y and z as well, which I don't, so I realize I should learn those first.
3. Buy a book on y or z
4. Repeat step 2, but for whatever I just started reading on.
Feel like I had to comment since I'm self taught and I just read "Java Concurrency in Practice". :D
It's easy to learn those topics independently with self-study. But learning linear algebra or stats on your own is much more difficult. People might claim that this isn't useful for most programmers, but it is absolutely is for a growing subset of them.
Many self-taught developers in the industry share this story. They didn't go to college, but they did invest thousands of hours into learning before entering the job market. Very different story than your typical bootcamp/udemy student, or a typical college freshman for that matter.
However, I have luckily had the same experience as you. It's never held me back.
I swear, the side project thing is everything. Even with a degree, you should have a side project to differentiate yourself from the two dozen other people applying with a degree.
The case officer for my visa application still decided to deny my Work-to-Residence visa, because BEng is on his list, and MEng is not on his list.
The degree didn't matter for the company or the interview, but immigration care a lot about paperwork like this. I guess you started in Canada and didn't try moving overseas.
Is it the one that forced me to upgrade their app to a version that didn’t support scheduled payments anymore?
Nowadays, I don’t even put education “requirements” in job descriptions, and even if you mention your school during an interview, I don’t really care for it, to be quite honest. At the end of the day, our real technical/programming interview (no whiteboard nonsense) will tell me the things that I need to know about your technical abilities.
I remember interviewing one candidate with a CS degree from RIT, and I honestly spent a good portion of the interview genuinely feeling like this poor individual just flushed the tuition $ down the toilet, because he was just failing the interview miserably! Funny thing is, he knew a lot of theory, but when it came time to produce, it didn’t work out too well for him. (He could use whatever set-up that he preferred, Google usage was obviously allowed, he was given space to work without disruption at various points, and most importantly, the problem was a legitimate problem that we had to solve at the company.)
All of this to say: Just apply! If you have the skills and a company doesn’t give you a chance because of a stupid degree requirement, they aren’t a good fit for you and don’t deserve you! Cross them off of your list, move on, and apply to another company.
Plus, you do realize you're categorically ruling out a company by projecting one trait onto their entire culture, for the crime of using an arbitrary signaling factor?
I usually don't do that, but I can't tolerate this kind of rigidness with old habits.
If it were a junior role, and they only had bootcamp experience, then I'd consider it.
I work at a large bank and we don’t screen candidates for degrees.
The job I accepted is the one job that didn’t even mention my lack of a degree and gave me practical coding problems.
A good interviewer prefers it if the candidate does not have the algorithm memorized. The whole point is to gauge their problem solving skills. Reciting something from a textbook doesn't tell the interviewer much. The reason you didn't get a favorable reaction in that situation could be because not knowing the algorithm was perfectly acceptable in that situation. It's expected that you figure it out instead of challenging the validity of the question.
Its worth noting that I received offers from over 50% of companies I interviewed at and I certainly am not bad at coding - this was just a particularly bad interviewer using a very bad problem. With this company, I actually told them I wouldn't accept an offer even if they did give me one because the interview was so bad.
I understand that whiteboard can be frustrating and hard, but it sounds like your interview was the exact kind of interview people try to make
In the past when I've been the hiring manager, I've had inexperienced interviewers ask my candidates questions like this for all kinds of positions - when you look at who does well in other interviews and gets an offer (and performs well), it basically never correlated at all to performance in whiteboard-only CS-focused interviews.
In this case I was interviewing for a full-stack senior position where there would almost certainly be zero systems-level coding, so the interview should have been a throwaway at best.
Space constraints do come up frequently and being able to reason about them is important.
My CS degree only taught me what a linked list is, not how to reverse one.
It's not a great question to ask because it's such a common one and many people will have learned an algorithm from a text book, but if you haven't memorized the solution it's simple enough to understand the requirements yet difficult enough to work out that you can get a good amount of insight into how a job applicant can solve rather than memorize problems.
After all, being able to separate candidates who can solve unseen problems from those who can't is one of the goals of interviews
> Every single place except for one asked me about college or why I dropped out.
In the 26 years and 8 companies I've worked at since, along with hundreds of interviews, I've never been asked that question. In fact, my educational background has never come up.
Granted, 26 years is a lot longer than 8 years, but I'm quite surprised to hear your report. 8 years is, objectively, a good bit of experience.
I signed up for the newsletter to this site, I like the idea of companies flat out saying a degree isn't required - otherwise I feel like I'm being judged negatively for not having one.
Obviously every company is different and I'm glad you're company doesn't screen for this. I was surprised to see JP Morgan don't, for instance.
That said, slick looking site. Best of luck.
I hold a 4 year degree in Graphic Design and sort of fell into programming. I was working at a small print company as the only graphic designer and was being "groomed" to take over the management position. I was asked often to provide quotes, make orders, take calls from customers, etc. We didn't have a good system in place for quoting or keeping track of our workflow so I started building a dashboard with PHP. In the end I really loved the work I was doing, it felt good knowing I was providing a ton of value. When they asked me to take the management position I told them that I was going to work for another company as a web developer (they loved the dashboard there as well). I worked in that position for 2 years making similar dashboards/internal applications when the company decided it was time to start a Software Department and hired another developer to work beside me.
I've now been with the company for 5 years but things are starting to get a bit rocky with the lack of meaningful work to do. I'm dreading the interviewing process as I feel inadequate not having a formal CS degree - despite several years of experience in software development. We've made cool things (surgical training simulators, dashboards for manufacturing, custom BLE Mesh network, mobile applications to name a few) but I feel they may just be overlooked by the recruiters.
We got him doing assembly code. He was lots better at that.
But what you will need is the knowledge that you would have otherwise gotten with a CS degree. If you don't know a priority queue from a linked list, or you can't name an example of an O(nlog(n)) algorithm, then you're going to struggle in way more than just the interview; this crap comes up in real life more often than might be obvious.
Luckily there are more than enough free places to learn this stuff. It's far less structured than a college, and requires an absurd amount of discipline to do on your own time, but nothing is missing. Beyond the ad-hoc content, several top-tier universities put their CS courseware online for free, and you can totally get the same CS education that others pay $200K for. You don't get the paper that says you did it, but you don't really need it.
Getting through the resume barrier is a bit more tricky, but here's a tech recruiting open secret: Stack Overflow. It's gold for recruiters, and extremely heavily used. They find people who consistently post strong answers on topics relevant to the company they're recruiting for and directly recruit them to interview. Skip the job listings. If you have a strong S.O. profile and provide enough information for recruiters to track down who you are, you'll get no end of attention.
That and GitHub. Write some code that demonstrates good design and put it up. When I was doing talent vetting for small firms, a person's Github page was a far more valuable signal than their "qualifications".
At first glance the name seems a bit odd. That is quickly overwhelmed by the benefit of being easy to remember and being very short. It doesn't get much easier than noc sok (knock sock as someone else noted) when trying to remember the site later. Plus, this is a site for developers (for now anyway), they will appreciate the benefits of knock sock as a memory device, far outweighing the no-cs-ok vs noc-sok issue. And there's no bad connotation with noc sok (the classic ExpertSexchange issue).
Some really quick feedback: I think multi-tag search is a must. As an example, I typed "nyc js" and got nothing, despite there very much being plenty of jobs in NYC with JS requirements.
That's not to say there aren't doors that are closed to you, but by and large the industry just doesn't care.
The better you are, the truer this becomes. I know a highschool dropout I'd consider at least a 95th percentile developer, he turns down offers for work on a regular basis.
Yeah, that's a good point about the filter! Will change that :)
But I don't have one - I studied for a different BA degree, found computers, neglected classes, and then proceeded on to 27 years of programming. I'm nearly 100% self taught.
And here's the weird part. At the handful of companies I've worked at there has most certainly been mild disdain for those with degrees. Nothing overt, but it was understood that if you didn't have the passion to teach yourself, and went to school to learn your programming, you were somehow inferior. We did have lots of people with degrees who turned out great, but they were always considered the exceptions, not the rule. I found this fascinating. Nearly all the senior developers, even lead developers, had no degree.
But I made a comment on another job board show hn that's relevant here: https://news.ycombinator.com/item?id=20973309
> What's the relationship with the employers? I find the main issue with job website that are posted here is that there is usually zero relationship.
Meaning it's mostly information copied from the career page of companies. That's why most these job boards disappear after a couple years.
> I suggest if you gather enough interest here today, use it to get actual connections with employers, even if it's a handful.
(Off topic: This is a case of “naming is hard but not for the reasons you think.” Naming is hard in part because being picky about names has a social cost. My being picky about the name here, perfect example. How do you (other HN readers) feel about me being picky? I suspect many of you would think I’m kind of annoying for making a big deal of it. Just saying this is a big part of why good naming is hard.)
Not that you often need a while loop, it's just interesting that modern web development has shifted to be so functional that you could be a professional programmer who does not fully grasp a while loop.
I also don't see what this has to do with FP. I bet there are few people who understand map/reduce functions and don't get for/while loops, unless they are literally just memorizing tutorials without understanding them.
Let’s say my terminating case is that a number no longer has a remainder when divided by X, that confuses people, different from terminating at the end of the array.
I get that a business that needs autodidact polymaths to run it is by definition going to have trouble scaling, will probably fail because nobody else could understand it, and that it is probably not a very good business, but this describes the vast majority of businesses, which fail in their first few years anyway. The outcome of blowing your capital on mediocre staff vs. unproven mavericks is the same.
However, expecting unconventional outcomes while only risking conventional failure seems a bit self fulfilling.
But how about that last 10% of jobs? Does the degree open doors to cutting-edge, exciting opportunities that aren't available without it?
I'm in the process of deciding whether or not to drop out right now. I know that I have what it takes to self-study and get to a similar level of knowledge as a CS grad, but I'm wondering if not having a degree will preclude me from the less common, more exciting jobs that I'm most interested in.
a) skills acquired through a CS program
b) skills acquired on the job
c) skills acquired in a programming bootcamp
d) skills acquired studying on your own (MOOC, books, videos, documentation, etc.)
To build the first iterations of a product, you may need only c) and d).
Once that product gets traction, things get exponentially more difficult and problems can get very abstract. That's when a) and b) makes a difference.
Most software engineers can create a simple Twitter clone, but only a small tiny fraction can make it work at Twitter scale.