Note he said "coding" and "writing apps for the app store", not "getting a coding job". Apple's website still asks for 4 year degrees for their engineers (at least the ones I just now looked at).
The reality is that "has 4 year degree" is a rapidly deteriorating signal that many businesses still use to separate the wheat from the chaff. All of the smartest people I know don't have 4 year degrees. And they weren't able to beat the "HR boss" when trying to get new opportunities.
I think it's plainly clear that you don't need a 4 year degree to learn how to code. But you do need it if you don't want an uphill battle in landing a good job, especially at large corporate jobs.
When I hire, I could care less if someone has a degree and having more than a bachelor’s degree is many times an anti-signal unless they compensate for it in other ways. It’s hard to tell from my vantage point, however, if my case is merely anecdotal.
I do hiring also at my job. I can see why filtering on 4 year degree is attractive to some - it's a bit daunting when on day one of opening a req, you get 25 applications. When you get up to 40, you start looking for signal within the noise, and your brain picks up patterns like "has degree."
We resist the temptation to pick up on patterns within the resumes which admittedly was difficult at first. The number one signal we've found to make reliable hires is "has this person directly worked in our industry before" which may be evidence of a bad onboarding/training program on our part, because I don't see our industry as being that difficult. I really don't know, hiring is very, very hard.
How much does it end up being? Well, assuming you've already caught on to the age bias in the industry, you probably have long since stopped putting your graduation year on your resume. That makes you right side up on the age bias piece, because otherwise I'm pretty sure you will have a difficult time landing a job at most places. (This is the trick I learned for my resume, as a grad from a similar amount of time ago)
On teams I've sat in on, it's not like they just go "oh non-grad, this goes to the garbage can". But if you wind up with 10 equally exceptional resumes knowing you only want to bring out the top 5, and a couple of them don't have a degree, some team members will want the degree holders to be brought out. They look for more signal, even though it isn't necessarily there. And I mean, if you have 10 exactly equal candidates (which is a bad hypothetical honestly because it'll never happen), maybe you do want the more accomplished people to be given a shot. But how it works in reality is that the degree may give like a slight bump to under accomplished individuals. Which is why we had to ban education from consideration at my current employer.
Age bias is over rated. I’ve had no problem finding jobs. It’s never taken me over three weeks to find a job and I only started job hopping at 35. I found a job in 4 days just by meeting a recruiter for lunch and this was at a subsidiary of a what was then a Fortune 10 company.
Most “ageism” comes from people who haven’t kept their skills current with market demands and haven’t kept their network strong - of both former coworkers and local trusted recruiters.
I don’t put my graduation year on my resume, but seeing that my managers have always been older than me it wouldn’t make a difference. I also don’t put that I did C and FORTRAN on DEC VAX and Stratus VOS mainframes because it isn’t irrelevant when I am applying for a jobs as eithera full stack developer/architect or some type of buzzwordy “consultant”.
I would prefer to hire people with 10-20 years of experience. The only challenge on this is when the candidates want to do management work only and not get their hands dirty anymore. On a personal level, I totally understand. As someone doing the hiring, I think a lot of candidates are missing out on opportunities to use their depth of experience as a result. It does take a lot of energy to stay hands on though.
It does take a lot of energy. By the time I got competitive with the Microsoft stack and server side rendering, the world was moving on to client side frameworks and Node (at least the smaller companies I prefer).
Instead of trying to keep up with the front end technologies I spent the last year and half moving toward cloud architecture on AWS, learned Python for scripting and spent some time as a dev lead in preparation for being an overpriced “cloud consultant”/“digital transformation consultant”.
Now I am ramping up on Node, React, and the Docker ecosystem to keep competitive as a developer. It does get tiring.
But I spent some time in semi management two years ago as the dev lead and realized that wasn’t for me and from seeing how much we were paying the “AWS consultants” who were just a bunch of old school netops guys who passed a certification, I realized where the money was.
I don't have a degree and it hasn't caused me any problems getting coding jobs in silicon valley. It never even came up.
My jobs have mostly been at startups, so maybe it is an uphill battle at big corporations like you mentioned, but I'd be surprised if lack of degree was a sticking point for a talented coder trying for a job at Apple/Google/Facebook.
I've hired dozens of programmers and never once looked at what college they went to or if they went to college (or where they live, just what time zone they're in).
In web/app coding, all that matters is what you've done in the last 1-4 years. Anything beyond that is too dated to be relevant.
It's been a highly successful recruiting practice. There are so many brilliant self taught developers that would get overlooked if I only looked at college graduates.
> I'd be surprised if lack of degree was a sticking point for a talented coder trying for a job at Apple/Google/Facebook
Google contacted me for a position years ago. I later found out they hire only 1 of 1000 applicants. I talked to the recruiter (before I went back to college) and she said most Google programmers not only have Bachelors, many of them had masters degrees and doctorates.
One of the questions involved context switches. I never even heard of context switches again until I went back to school and took my computer organization and architecture class.
> any problems getting coding jobs in silicon valley. It never even came up.
I have been working in IT professionally for over 20 years. Read about what was happening in 2000-2001. In a scenario like that, when startups are going bust, are not being funded, the economy is in a recession and many programmers are employed, having a Bachelors that can get you into a Fortune 500 company that requires it helps.
Also - although I have met CS graduates who can not code, most of the "talented coders" I have met have a college degree. I can count on one hand the ones I can think of who are not (and I include on my hand John Carmack, who I don't even know, but I know he is a talented programmer with a college degree).
I'm not trying to be combative, but why would they include it on the requirements then? Do they wave the requirement only for exceptional software developers? Or maybe it creates enough friction for non-higher-educated people to not consider applying, thereby creating the same effect of only hiring degree holders?
If one uses a soft education req as a substitute for exceptional ability, then that would run counter to what Tim Cook is saying, unless "has education" is a signal for a quality a person may have that is external to coding ability?
And even if the education part is injected by HR (because I understand, some HR departments love to inject requirements) and is truly not necessary, what kind of implicit bias does that add to interviewers when they wind up interviewing mostly degree holders?
I started working as a software engineer without a degree. I don't know about apple in particular but my current job had a degree listed as a requirement but didn't actually care when I applied.
I'd wager that having a degree listed as a requirement reduces the amount of lowest quality applicants and that's the only real reason why some significant portion of companies don't actually care if you have the degree.
Economic signaling theory plays out dynamically. Whatever makes a strong signal today will eventually become diluted unless explicitly kept from having that happen.
Degrees, amazon ratings, Unicorn status, you name it.
I don't see how coding is any different than being an auto mechanic in the long run. The only skills that will truly bring value long term it feels are project management and the ability to motivate a wide variety of individuals to work together efficiently.
Proficiency in coding isn't the interesting part of solving problems with software, though. Or as I sometimes say, "That's not programming, that's just typing".
I'm glad you have that much respect for the word "programming." I hate it when people try to define a hierarchy out of words, like programming < development < engineering < architecture. Using different words for programming in the large and programming in the small, or programming well versus programming poorly, has aided and abetted so much bullshit and earned us nothing. Programming can be and should be like writing, a word that manages to span Virginia Woolf writing Mrs. Dalloway to me writing this comment without being any the worse for it.
Writing a program is like writing. Engineering a system is not like writing.
That's not to say there's not a lot of bullshit around the terms programmer, developer, engineer, and architect, but there are different skill sets when it comes to programming vs engineering.
I don't think you're doing justice to the diversity of challenges that can be involved in writing. Writing has high-level structure as well as low-level structure. Someone can be skilled at constructing a sentence but not a book and vice-versa. I could go on, but tl;dr there are a lot of considerations that affect whether a piece of writing "works" and correspondingly large sets of skills, processes, and approaches.
The word "program" already implies that there is critical thinking and planning, which is not a judgement about its quality. If can be called programming, good or bad, someone put some thought into it.
I just solved a system-wide, time-consuming problem by making it cease to exist. Rather than writing code, I rendered a lot of existing code irrelevant (it has architectural implications as well).
According to the typists, that's not "programming", because I didn't "code" anything. Feh. The actual implementation will touch hundreds of lines of code across numerous programs, but it's trivial. A monkey could do it, if told how. I'm gonna tell the monkeys and let them do it.
Realizing a better solution for a thorny problem? That's interesting. That's the real fun of programming.
This. Most disciplines can be self-learned if material are available readily and there is no "trade unions" to act as barrier of entry of the profession.
Right. A four-year degree isn't necessary to be proficient at coding. It isn't necessary to be proficient at debugging, either, which I think is one real test of how good of a programmer you are, the other being architecture and making good design decisions.
That last one doesn't require a degree, either, but it requires more experience with larger and more ambitious projects than either coding or debugging does. And that's what a four-year degree should provide experience with: Giving people larger and more complicated projects in a setting where their errors will be corrected and it won't cause a huge amount of pain for anyone else if the project collapses or is never really finished.
And I think Cook basically agrees with me:
> "I think that's an old, traditional view. What we found out is that if we can get coding in in the early grades and have a progression of difficulty over the tenure of somebody's high school years, by the time you graduate kids like Liam, as an example of this, they're already writing apps that could be put on the App Store."
It's entirely reasonable to begin working on ambitious projects in high school, at ages 14-18 for those who are unclear on the education system being discussed here. People have the mental maturity to tackle big things at that age if they're motivated and given sufficient guidance.
And that concept of tackling big projects involves working in a team, with coordination between team members, which is another part of being a mature programmer.
And Apple will be able to reasonably pay you 20% less if you don't have a degree and knowingly have fewer reasons to leave or potential opportunities that could cause you to leave than those with degrees...
Source - as someone who effectively "dropped out" for a few years but decided to finish and undoubtedly has benefited from my degree.
This is the coup de grâce from all the big tech corps: the commoditization of their most expensive recurring cost, the cost of skilled labor.
This is the reason for the strong push for programming in early education in the past few years, with companies like Apple and Google setting up education camps and code literacy programs for kids. This is the purpose for pounding home the message "anyone can code!" over and over again. Its been happening in many countries world-wide, not just the US.
Along with the boom in coding bootcamps and open courses online, they hope to dilute the skilled labor pool to such an extent that programmers will no longer have any negotiating power and salaries can start to decline.
The big tech companies only do what is in their own self interest. This is not to say that there won't be people benefiting from this as a second order effect. People without other prospects of employment (either because of location or circumstance) will have a chance to earn a good living and escape poverty or upgrade their social class. But this will come at the expense of practitioners already heavily invested in the industry.
You're definitely reading too much into this. We learn algebra and calculus, how many actually go on to become mathematicians and dilute the field of mathematics? Physics? Biology? You teach kids coding because we are surrounded by computers. No more, no less.
I keep seeing the “push for coding in early education” like it’s a new thing. I had a programming course in 1988 in 8th grade and my senior year in high school. They were both AppleSoft Basic courses.
I think the "push for coding in early education" is a very recent development, particularly in America, for those in poorer areas or minority groups.
Anecdotal but I'm currently in my early 20s, from one of those areas, and I didn't know that schools existed where you could learn coding before college.
> I keep seeing the “push for coding in early education” like it’s a new thing.
After your generation public schools started dropping all of the useful labor-skills courses. No woodworking shop, no auto repair, nothing was taught anymore that could result in a splinter or a finger-chopping.
The extent of my public-school coding education started and ended with cheating my way through math by programming a TI-82.
The parent post sounds borderline conspiracy theory. Working in big tech, I see a lot of volunteer opportunities to promote STEM among the youth because it's obvious that those CS jobs provide good salary and great living conditions, and people wanna share their passion. What I haven't seen are internal memo, OKRs or shareholder messages stipulating a strategy to commodize CS to reduce labor costs.
1. Salaries are reported to Wall St
2. Profits go up, stock goes up. Costs go down, profits go up.
3. Wall St and investors want higher profits
4. Salaries depend on supply and demand. Demand is high and supply is stagnant then cost goes up.
5. Companies push for increasing supply of workers.
It's economics and business not a conspiracy theory. Doesn't Apple apply the same logic for all the components to make an iPhone? Even going as far as doing their own chips to have a hand in increasing supply. This is the same Apple (along with Google and the rest) involved in this lawsuit https://en.wikipedia.org/wiki/High-Tech_Employee_Antitrust_L...
I've been a professional programmer since age 15, now age 34 and homeless in San Francisco/Mountain View, unemployed and seeking in tech for 2 years, salary cuts and decreased respect and more training my replacements at each stop since 2015. Teaching "opportunities" are everywhere, but I prefer to wait tables and do independent software research in lack of a suitable paid position in software development.
OKRs to reduce labor costs are an interesting concept, though. What forms of results would you be looking for? I've never worked under a productive OKR or KPI system, so the more detail in your thought process the better.
> Working in big tech, I see a lot of volunteer opportunities to promote STEM among the youth because it's obvious that those CS jobs provide good salary and great living conditions, and people wanna share their passion.
Will these be the same people complaining about age discrimination in 10-15 years when their employer replaces them with an 18 year old with no college degree, at one quarter of their salary?
A pessimist might say that’s a case of digging one’s own grave.
It's indisputable that 1.) more people looking for programming work will lower salaries and 2.) we are seeing an increase in people seeking these jobs, and 3.) big tech companies are investing in code camps and young adult CS education. Regardless of whether people volunteering to share their passion (a motive I don't doubt for a minute), there's no way this shakes out as anything but a boon for, say, Google, and a net loss for programmers in general. And I don't mean protectionist oldheads who are already pulling down 6 figures, I mean everyone. A kid learning to code will not get salary he was promised in a decade.
The Apple brand since the launch of the Mac in 1984 has been "the computer for the rest of us". That has always rubbed a certain kind of tech person the wrong way and it still does to this day.
The democratization of computers and technology necessarily means more people using and making them. No doubt you'd be making a lot more money if you were one of the few in the computer priesthood.
It may be bad for those people specifically, but that doesn't mean it's bad overall.
I'm not so sure. Programmers have been automatizing every job including programming itself for ever and, so far, it only created more demand for programming. Maybe lots more programmers means we can attempt things that are not possible now and actually means the old programmers will earn as much as ever.
Well, that’s not the goal here, either. The goal is to turn coding into 21st-century factory assembly work: a miserable grind that people do for subsistence wages when they have literally nowhere else to turn, all while making sure that there is nowhere else to turn. I cringe at the cheerleading that HN does when people discount the value of a four-year-degree; if a four-year-degree isn’t “necessary” then by extension, it’s effectively useless. Of course - one of two things is true: coding is actually not that complex and most anybody can just “pick it up” and become effective without much in the way of formal training or education, or it does take years of a combination of practice and study to do correctly. If the former, then it doesn’t much matter what I think - if the latter, then it doesn’t much matter what Tim Cook says (at least out loud regardless of what he actually thinks).
There's fundamental reasons why programmer compensation is high. It's hard to replace the work of one good programmer with many mediocre ones, and measuring the amount of programmer output is difficult.
These factors lead to tournament-style compensation. Instead of paying workers in proportion to their output, rank-order them and have a compensation bump on promotion that is large enough to incentivize efforts to compete for it. If workers are risk-neutral, this is as efficient of a way to compensate as piece work is, and has the additional benefit of only requiring employers to rank-order their employees, rather than generate an objective measure of their productivity.
Professional sports is the best example of this phenomenon - no matter how many applicants a team gets, they can only have five players on the court at one time. NBA player salaries are not materially threatened by additional entrants. Instead, the additional competition largely gets channeled into making it harder to remain an NBA player.
This makes a lot of sense, which is probably the reason why Microsoft has implemented such a system in the past. Unfortunately, it does have the unfortunate tendency of creating toxic workplaces, which hampers productivity.
Explicit stack-ranking is the myopic version of this - I'm more talking about the pretty standard "if you distinguish yourself at work you can get a promotion with an associated pay increase" that goes on at pretty much every company. It's not called a rank ordering, but there's only so much room for employees to distinguish themselves, so in practice it's roughly the same for those above the cutoff.
We are a long way from diluting the IT labor pool to the point where it systematically depresses wages.
Assuming some sort of relationship between potential talent as a programmer and natural attraction to programming, then programming is already tilted toward the talented. Trying to recruit more programmers with early-education programming is going to add more mediocre/bad programmers than good ones.
And you need the good ones. Work that can be done by mediocre programmers will eventually be replaced by software doing what they used to do - software written by the more talented programmers. And the supply of good programmers is necessarily limited.
"... What we found out is that if we can get coding in in the early grades and have a progression of difficulty over the tenure of somebody's high school years, by the time you graduate kids like Liam, as an example of this, they're already writing apps that could be put on the App Store."
FYI - Apple student discounts are only for college students. High School (and elementary school) kids get none. Source: bought a MacBook for my kids and they learnt to code with it.
A four year degree isn't necessary for coding proficiency, nor is it proof of coding proficiency. It is, however, a strong social proof for other things that matter a great deal.
To complete a four year degree requires a commitment, a life-altering personal financial cost, and most importantly, a willingness to abide by the rules and procedures of a complex organization, even when they don't make much sense or directly contribute to the core competency. It shows a willingness to submit to authority, a willingness to get often arbitrary work done on schedule with acceptable quality, and other traits and experiences that matter a great deal for becoming a functional employee in a corporate workplace.
Coding competence is nothing if the coder can't follow instructions, complete work on schedule to spec, or tolerate doing things that seem arbitrary and useless.
A degree isn't about proof of being a viable programmer. It's about proof of being a viable employee.
To complete a four year degree requires a commitment, a life-altering personal financial cost
Only if you choose for it to be. There are cheaper ways to get a four year degree - like going to a state school or even cheaper, go to a 2 year school, stay at home and then transfer.
*It shows a willingness to submit to authority, a willingness to get often arbitrary work done on schedule with acceptable quality, and other traits and experiences that matter a great deal for becoming a functional employee in a corporate workplace.
All of that can also be learned by working on your typical minimum wage job that a lot of teenagers have.
Eh. A college student has a lot more independence and responsibility than a minimum wage burger-flipper. Moreover, they're given problems that presumably require a modicum of intelligence, literacy and numeracy, and other skills that go above and beyond following simple instructions. Minimum wage jobs tend to be structured so they can be done by functional illiterates/innumerates, and happen in closely supervised, time-bound environments. Contrast this to the freedom a college student has to do many things other than their homework.
edit: More to the point, even assuming four years of flipping burgers is an effective way to learn the behaviors for a corporate IT job (which is questionable), it is not perceived as useful by the hiring managers, virtually all of whom have college degrees. A college degree is a social leveling-up, particularly in liu of professional experience in the field.
For someone with 5+ years of relevant technical work experience, a college degree matters a lot less. For entry level, it's absurd to argue that four years of french fries is equally effective for social proof, and unwise to argue that it's equally effective for actual practice.
"To complete a four year degree requires a commitment, a life-altering personal financial cost, and most importantly, a willingness to abide by the rules and procedures of a complex organization, "
In many countries it really doesn't involve taking on life-altering debt. For many other students, their parents can pay. As far as the aspects of formal discipline and authority are concerned, there are many programmes in which those just aren't an issue. Well prepared students will just experience the academic side of college as a continuation and development of their secondary education.
You make four-year degrees sound like a tough military boot camp that weeds out weaker candidates. That's probably true of some institutions, either from the academic or the disciplinary angle. But if you consider how many people overall successfully graduate, having a degree just isn't a very informative signal.
It's still informative. If someone wants a technical job but doesn't have a degree in the field, it's totally legitimate to wonder why. Especially when, as you point out, it ain't that hard to get one.
This matters a lot less for candidates with years of relevant experience in the field. We're talking about unproven candidates here.
> It is, however, a strong social proof for other things that matter a great deal.
> a willingness to abide by the rules and procedures of a complex organization, even when they don't make much sense or directly contribute to the core competency. It shows a willingness to submit to authority, a willingness to get often arbitrary work done on schedule with acceptable quality, and other traits and experiences that matter a great deal for becoming a functional employee in a corporate workplace.
This is one of the main theses of the book "Disciplined Minds" by Jeff Schmidt. I highly recommend it if you're interested in following this line of thought further.
All those personality traits about following rules and doing arbitrary work sounds way better tested by McDonalds than a university, because university experiences are too diverse despite this portrayal of school life as rigid, capricious, and authoritarian.
As someone who worked at McDonalds for four years (from ages 16-20), I assure you that I do not lack ambition or creativity. Working such a job while going to college can actually show more tenacity, but mostly it was just about surviving.
I think my point is more about working four years at McD when you're 16, vs working four years at McD when you're 26. At 16-20, it demonstrates some commitment. At 26-30, it demonstrates complacency.
McD 'university' grads make a lot of money as managers and their school is free. Costco is another one of these companies where you can work at lowest level and move to upper mgt so staying there 4 years doesn't always mean burger flipping.
Many companies have incentives or a form of tuition reimbursement/schooling they're willing to pay for to put good people through a college or trade program, with the understanding that they stay at work for the company for X amount of years. It's been a thing for a long time, so the old school thoughts of "no ambition" often times don't have an applicability to today as it used to.
I've seen someone get put through management school for McDonalds and they went from 'order taker' to owning their own franchise in about 10 years. That's ambition.
Basically, the entire director level of McDonalds is immigrants and first generation Americans. The kinds of people who didn't grow up hearing "staying at McDonalds for four years is proof of lacking ambition and creativity".
> It shows a willingness to submit to authority, a willingness to get often arbitrary work done on schedule with acceptable quality, and other traits and experiences that matter a great deal for becoming a functional employee in a corporate workplace.
And then some of us mess that up by going to grad school.
I feel like this comment reflects a growing embrace of, for lack of a better term, state-ism in the tech industry that makes me feel really sad.
As an engineer working at my second job in the FAANG group, I always loved the tech industry because it was at least better than other industries about pursuing individuality, creative thinking, self-determination, etc., even if it couldn't always succeed in realizing true "meritocracy" or whatever.
Lately, though, it feels like all the money and attention on the industry is making it hard to distinguish Bigh Tech companies from Big Law. Who actually wants their hiring criteria to include "a willingness to get often arbitrary work done on schedule with acceptable quality"? Seriously?
Maybe that's inevitable, but that just makes me so sad if so. And honestly, having met a fair number of "industry pioneers" who were very early workers at some of the most important (and successful!) tech companies around today, I'm fairly sure they agree with me more than the growing conformist movement.
No company would actually phrase it as "a willingness to get often arbitrary work done on schedule with acceptable quality", but in all but the most raw of startups, that is what they mean. That's the reality of having a "job".
If you can't abide working that way - and it's totally reasonable to feel that way - you need to find a different career path through the industry than "Senior Web Engineer" or whatever the title is.
Apart from the nefarious reasons mentioned elsewhere, I really don't take his pronouncements on programming seriously. Calling Swift a language for kids to learn coding is, er, interesting.
Well, what you could learn at a four year degree program:
- Space-time complexity of algorithms
- Statistics
- Management
- Parallel and concurrent programming
- Formal reasoning and logic
- Linear algebra
- Machine and operating system architecture
- Communication theory
- History of computer science
- Database implementation
- Quality assurance
- Technology assessment (impact on society)
- Effective team work
- Multi-disciplinary design and architecture
- Presentation skills
- Research skills
Could go on, just a few of the things I learned during my degree program. All of which I value of myself and others, although they don’t always come up. Coding is just a tool in a large toolkit. Unfortunately it is undervalued to do it right, badly taught and reinvented hundreds of times.
B) is relevant for your typical yet another software as a service CRUD developer or the typical “dark matter development” that will never see the light of day outside of a company.
I have a 20+ year old degree and most of what you list. I learned on the job.
For me the hardest and most interesting part working at Google was statistics, although I have a Masters degree in CS, and I was very good at math in high school.
A lot of the really interesting work at Google is data mining and modelling, and for that you need some level of statistics understanding. Of course for developing an app, it's not needed (could be a counteractive skill as well in iterating fast).
Sure, I'm more commenting on the general feeling on the whole thread that having a CS degree should be dropped as a (soft) requirement for working at Apple/Google/Amazon, and coding can be learned from coding / working with colleagues.
This is all true, but math has to be learned by getting a deep understanding of concepts that build upon eachother over many years, and understanding it is an important skill with large scale systems, so they can't be treated equally with other coding jobs.
Yes, statistics is a corner stone. I've come to appreciate it during my career as a software engineer as well. It's not just at Google but across many (competitive) companies.
Developing an app... How is one going to be competitive doing that? It's dime a dozen, unless it provides something algorithmically interesting. And that is generally only possible when you have large amounts of data.
In my opinion, the real skill is not in coding, but in data. Understanding the flow, the quality, the entropy, the structure, the meaning, the value, the meta. And code is data, and as such subject to the same understanding.
> Developing an app... How is one going to be competitive doing that?
I tried to do it with a friend and failed. With apps looks are the more important than UX, and I was mainly working on usability features. Also market research and understanding your target audience without data is really important.
At Google, understanding the user / customer was really easy, it doesn't need that much empathy: just give the user more quality clicks by changing the ranking and give the advertiser more conversions per dollar spent.
By the time I graduated from college, I had been a hobbyist for a decade. I was a good programmer and created a C based data entry system that double the size of the company six months out of college.
But, after changing jobs and staying at a company too long, I became an “expert beginner” and in hindsight was a horrible engineer.
Learning how to engineer happened on the job working with more experienced architects and managers, changing jobs 5 times, and by reading and studying a lot. There is nothing magical about college that you couldn’t learn on the job.
Ad A) Most of that I 101'ed at the university. There are elements that I would never have learned on the job.
Ad B) Quite a bit, actually. I am assuming the SaaS CRUD developer is facing a high number of users (>50 req./s).
- Space-time complexity of algorithms. Needed when reasoning about caching, cache-coherency, in-memory searches, CPU/Core allocation
- Statistics. Very useful to understand the QoS the SaaS application is delivering to the end-users. 101 Stats is enough, but very useful in the toolkit.
- Management. Not just to manage yourself, but to be able to understand the needs of the managers, the structure of the company and the long-term goals and strategy.
- Parallel and concurrent programming. This depends. In SaaS applications I've seen some simple concurrent programming when it comes to request pipelining.
- Formal reasoning and logic. Not really needed.
- Linear algebra. Not needed.
- Machine and operating system architecture. Could be very useful for high-throughput applications. What is the effect of the scheduler? The paging system? The L1/L2 cache?
- Communication theory. Could be useful, not needed.
- History of computer science. Personally, I think this one is really needed for CRUD developers. They'd stop repeating the same stupid traps all the time.
- Database implementation. Although you don't need to implement a database, understanding how a database works and its query optimizer, is gold.
- Quality assurance. When dealing with a programmer + PO team only, the devs need to do the QA as well. It's a learned skill, but easier to master after a 101.
- Technology assessment (impact on society). Maybe not needed, unless you are into ethics.
- Effective team work. Very useful.
- Multi-disciplinary design and architecture. Could be very useful when developing SaaS applications for different domains. Understanding and working together with stakeholders from your target domain is a strong advantage.
So I’m going to start off by admitting all of my biases.
I was a hobbyist Basic, 65C02 assembly language in middle/high school, graduated undergrad with a degree in CS from an unknown state school, MBA drop out (but I did learn a lot).
I also spent my first 12 years professionally as a cross platform C bit twiddler, became your standard “enterprise developer” and then moved into development+cloud architecture.
- space time complexity of algorithms. True that was a big deal when I was writing C programs that churned through what was then a lot of data, but, how many “Enterprise developers/architects” are writing code that is algorithmically complex and not just translating complex business rules into code?
Even then when I’m determining why a system is slow, it could involve many layers of the stack from a too heavy payload going over the network, bad caching, incorrectly size servers, incorrectly placed servers, bad sql queries, etc.
Machine and operating system architecture. Could be very useful for high-throughput applications. What is the effect of the scheduler? The paging system? The L1/L2 cache?
I have some understanding about architecture and OS. But how useful is that from a CS level? Can’t you just look at your various metrics and see where your bottlenecks are? Again my degree was over 20 years ago. I would have had to learn that on the job. My operating system class was taught on some SUN Sparc workstations. My first job was writing FORTRAN and C on DEC VAX and Stratus mainframes. I’ve had to learn each operating system and platform on the job.
Database implementation. Redshift (a columnar OLAP database), optimizes differently than a regular OLTP RDMS, which is different than something like ElasticSearch. Would you have learned any of that in college a decade ago?
Technology assessment (impact on society). Maybe not needed, unless you are into ethics.
Is that really taught in undergrad? I had a few classes like that in grad school.
Multi-disciplinary design and architecture.
Is that taught in undergrad? That was taught a little bit in grad school. But I’ve learned a lot more from working at 5 companies in 10 years (or 7 in 20).
Presentation Skills
I struggled for years with presenting ideas to non technical leadership but I am passable now. But that came more just by seeing how managers did it.
I also started with GWBASIC, QBasic, Turbo Pascal, x86 assembler as a hobbyist. Followed during undergrad by C, C++, PHP, early Python, LISP/CLOS, Clean, Haskell and some Smalltalk. I started my full-time career as a Java programmer, but did part-time jobs in C and Perl during my grad years. Now I am mostly act as a tech lead / architect, but enjoy some Scala programming and fiddling with types and category theory. Erik Meijer is my hero ;)
Many programmers indeed just copy whatever business rule they see into Java / C# code. However, on occasion they write an optimizer or a system churning through large amounts of data. Having that background sets the engineer apart from the coder.
> Even then when I’m determining why a system is slow, it could involve many layers of the stack from a too heavy payload going over the network, bad caching, incorrectly size servers, incorrectly placed servers, bad sql queries, etc.
Well, each of these are studied at grad school: networking, caching systems, SQL optimizers. It really gives a head start and I'm grateful for that.
Re OSes. Most OSes have the same paradigms. I've been taught from the book Operating System Concepts by Silberschatz, Galvin and Gagne. It details the many concepts adopted by the various OSes over time. OS specific is not really interesting afterwards.
Re Redshift / ElasticSearch. Columnar DBs were still new, so yes, you do need to learn at the job. Still gives you a tremendous head-start though, understanding row-based DBs.
Technology Assessment and multi-disciplinary design was part of my Bachelors program, albeit 101.
Presentation skills: I am very happy we were taught these skills extensively. Proved absolutely valuable, even though I constantly improved on them during my career.
Overall, the skills are not so much to understand why a system does what it does, but to quickly understand a new technology from its basic functions. So when Rust comes along, I can quickly assess that it will be useful in a microservices setting due to not having a run-time, predictable behaviour and fast startup times. When MongoDB is pushed, I am not one of the many followers blindly believing its marketing lies.
I am a coder without a degree and have not received negative feedback from companies that I have applied to, though I have not been at it for very long. No one has asked about a degree or what I did instead of going to college or why.
That is, until today - and I am glad it came up. I had been corresponding with a recruiter for a government job (TTS) and after exchanging a handful of emails over the course of two days and scheduling a meeting she finally looked at my resume (which I sent with my first email), told me that I am not qualified and cancelled our meeting. I have a feeling that this job would have been a nightmare. As Eugene McCarthy said, "The only thing that saves us from the bureaucracy is its inefficiency."
I have spoken to some highly insightful people during interviews this week and they generally seem focused on my ability to do real work that produces real results. Most interviewers seem to want to cut through the hiring pretense and get to looking at and talking about my code while assessing my communication skills. It has largely been a positive experience. This application for a job with the TTS may have been my first interaction with a professional email-sender (aside from recruiter spam) and it was shockingly unproductive.
The coworker who taught me the most about how to treat others with respect was a reformed convict who did six years for armed robbery. Some of the best communicators I have worked with barely spoke English. If someone told me that the best coder they know does not have a degree it would not surprise me at all.
True. BUT most people need some kind of structured teaching environment. They need to be nudged to move forward. Or else most people fall into the hole of never learning because they find the subject too hard or dull to move forward.
I wish anyone that preaches that you don't need a four-year degree would also make sure to point out that very few people have the self-control to follow through when they have to do it on their own.
This really isn’t some new revelation. Steve Wozniak was building and programming the Apple 1 after being expelled from college, Bill Gates dropped out to create Microsoft. These are 2 amazing programmers who have been quite successful,
I have also heard both of them speak about how important education is. I can’t imagine they required degrees from the folks they worked with but they both value the benefits that an education can provide.
When I got my BSCpE, there were no language classes. There was an OOP class, but no "Welcome to C++. Here's how you write a function." classes. It was just understood that you either had to learn quickly on your own or you knew how to code already (which I did).
So, technically, Tim is right. But man, I am so glad I got an engineering degree. I learned some really cool stuff (that wasn't strictly coding).
107 comments
[ 3.2 ms ] story [ 199 ms ] threadThe reality is that "has 4 year degree" is a rapidly deteriorating signal that many businesses still use to separate the wheat from the chaff. All of the smartest people I know don't have 4 year degrees. And they weren't able to beat the "HR boss" when trying to get new opportunities.
I think it's plainly clear that you don't need a 4 year degree to learn how to code. But you do need it if you don't want an uphill battle in landing a good job, especially at large corporate jobs.
When I hire, I could care less if someone has a degree and having more than a bachelor’s degree is many times an anti-signal unless they compensate for it in other ways. It’s hard to tell from my vantage point, however, if my case is merely anecdotal.
We resist the temptation to pick up on patterns within the resumes which admittedly was difficult at first. The number one signal we've found to make reliable hires is "has this person directly worked in our industry before" which may be evidence of a bad onboarding/training program on our part, because I don't see our industry as being that difficult. I really don't know, hiring is very, very hard.
How much does it end up being? Well, assuming you've already caught on to the age bias in the industry, you probably have long since stopped putting your graduation year on your resume. That makes you right side up on the age bias piece, because otherwise I'm pretty sure you will have a difficult time landing a job at most places. (This is the trick I learned for my resume, as a grad from a similar amount of time ago)
On teams I've sat in on, it's not like they just go "oh non-grad, this goes to the garbage can". But if you wind up with 10 equally exceptional resumes knowing you only want to bring out the top 5, and a couple of them don't have a degree, some team members will want the degree holders to be brought out. They look for more signal, even though it isn't necessarily there. And I mean, if you have 10 exactly equal candidates (which is a bad hypothetical honestly because it'll never happen), maybe you do want the more accomplished people to be given a shot. But how it works in reality is that the degree may give like a slight bump to under accomplished individuals. Which is why we had to ban education from consideration at my current employer.
Most “ageism” comes from people who haven’t kept their skills current with market demands and haven’t kept their network strong - of both former coworkers and local trusted recruiters.
I don’t put my graduation year on my resume, but seeing that my managers have always been older than me it wouldn’t make a difference. I also don’t put that I did C and FORTRAN on DEC VAX and Stratus VOS mainframes because it isn’t irrelevant when I am applying for a jobs as eithera full stack developer/architect or some type of buzzwordy “consultant”.
Instead of trying to keep up with the front end technologies I spent the last year and half moving toward cloud architecture on AWS, learned Python for scripting and spent some time as a dev lead in preparation for being an overpriced “cloud consultant”/“digital transformation consultant”.
Now I am ramping up on Node, React, and the Docker ecosystem to keep competitive as a developer. It does get tiring.
But I spent some time in semi management two years ago as the dev lead and realized that wasn’t for me and from seeing how much we were paying the “AWS consultants” who were just a bunch of old school netops guys who passed a certification, I realized where the money was.
My jobs have mostly been at startups, so maybe it is an uphill battle at big corporations like you mentioned, but I'd be surprised if lack of degree was a sticking point for a talented coder trying for a job at Apple/Google/Facebook.
In web/app coding, all that matters is what you've done in the last 1-4 years. Anything beyond that is too dated to be relevant.
It's been a highly successful recruiting practice. There are so many brilliant self taught developers that would get overlooked if I only looked at college graduates.
Yes, for the pedantic I know whether qsort() actually implements the quicksort algorithm is implementation defined.
Google contacted me for a position years ago. I later found out they hire only 1 of 1000 applicants. I talked to the recruiter (before I went back to college) and she said most Google programmers not only have Bachelors, many of them had masters degrees and doctorates.
One of the questions involved context switches. I never even heard of context switches again until I went back to school and took my computer organization and architecture class.
> any problems getting coding jobs in silicon valley. It never even came up.
I have been working in IT professionally for over 20 years. Read about what was happening in 2000-2001. In a scenario like that, when startups are going bust, are not being funded, the economy is in a recession and many programmers are employed, having a Bachelors that can get you into a Fortune 500 company that requires it helps.
Also - although I have met CS graduates who can not code, most of the "talented coders" I have met have a college degree. I can count on one hand the ones I can think of who are not (and I include on my hand John Carmack, who I don't even know, but I know he is a talented programmer with a college degree).
If one uses a soft education req as a substitute for exceptional ability, then that would run counter to what Tim Cook is saying, unless "has education" is a signal for a quality a person may have that is external to coding ability?
And even if the education part is injected by HR (because I understand, some HR departments love to inject requirements) and is truly not necessary, what kind of implicit bias does that add to interviewers when they wind up interviewing mostly degree holders?
I'd wager that having a degree listed as a requirement reduces the amount of lowest quality applicants and that's the only real reason why some significant portion of companies don't actually care if you have the degree.
Frequently the people writing the job requirements, and the people who you’ll be interviewing with, are not the same people.
Degrees, amazon ratings, Unicorn status, you name it.
I architect, you code, (s)he debugs.
You can throw in "design" and "model" as well.
That's not to say there's not a lot of bullshit around the terms programmer, developer, engineer, and architect, but there are different skill sets when it comes to programming vs engineering.
According to the typists, that's not "programming", because I didn't "code" anything. Feh. The actual implementation will touch hundreds of lines of code across numerous programs, but it's trivial. A monkey could do it, if told how. I'm gonna tell the monkeys and let them do it.
Realizing a better solution for a thorny problem? That's interesting. That's the real fun of programming.
That last one doesn't require a degree, either, but it requires more experience with larger and more ambitious projects than either coding or debugging does. And that's what a four-year degree should provide experience with: Giving people larger and more complicated projects in a setting where their errors will be corrected and it won't cause a huge amount of pain for anyone else if the project collapses or is never really finished.
And I think Cook basically agrees with me:
> "I think that's an old, traditional view. What we found out is that if we can get coding in in the early grades and have a progression of difficulty over the tenure of somebody's high school years, by the time you graduate kids like Liam, as an example of this, they're already writing apps that could be put on the App Store."
It's entirely reasonable to begin working on ambitious projects in high school, at ages 14-18 for those who are unclear on the education system being discussed here. People have the mental maturity to tackle big things at that age if they're motivated and given sufficient guidance.
And that concept of tackling big projects involves working in a team, with coordination between team members, which is another part of being a mature programmer.
Source - as someone who effectively "dropped out" for a few years but decided to finish and undoubtedly has benefited from my degree.
This is the reason for the strong push for programming in early education in the past few years, with companies like Apple and Google setting up education camps and code literacy programs for kids. This is the purpose for pounding home the message "anyone can code!" over and over again. Its been happening in many countries world-wide, not just the US.
Along with the boom in coding bootcamps and open courses online, they hope to dilute the skilled labor pool to such an extent that programmers will no longer have any negotiating power and salaries can start to decline.
The big tech companies only do what is in their own self interest. This is not to say that there won't be people benefiting from this as a second order effect. People without other prospects of employment (either because of location or circumstance) will have a chance to earn a good living and escape poverty or upgrade their social class. But this will come at the expense of practitioners already heavily invested in the industry.
Anecdotal but I'm currently in my early 20s, from one of those areas, and I didn't know that schools existed where you could learn coding before college.
I was in Massachusetts, which you’d expect to be pretty good about this stuff at the time.
After your generation public schools started dropping all of the useful labor-skills courses. No woodworking shop, no auto repair, nothing was taught anymore that could result in a splinter or a finger-chopping.
The extent of my public-school coding education started and ended with cheating my way through math by programming a TI-82.
It's economics and business not a conspiracy theory. Doesn't Apple apply the same logic for all the components to make an iPhone? Even going as far as doing their own chips to have a hand in increasing supply. This is the same Apple (along with Google and the rest) involved in this lawsuit https://en.wikipedia.org/wiki/High-Tech_Employee_Antitrust_L...
OKRs to reduce labor costs are an interesting concept, though. What forms of results would you be looking for? I've never worked under a productive OKR or KPI system, so the more detail in your thought process the better.
Will these be the same people complaining about age discrimination in 10-15 years when their employer replaces them with an 18 year old with no college degree, at one quarter of their salary?
A pessimist might say that’s a case of digging one’s own grave.
Make it so anybody can be a taxi driver.
The democratization of computers and technology necessarily means more people using and making them. No doubt you'd be making a lot more money if you were one of the few in the computer priesthood.
It may be bad for those people specifically, but that doesn't mean it's bad overall.
Gras means fat in French. You probably mean coup de grâce.
Well, that’s not the goal here, either. The goal is to turn coding into 21st-century factory assembly work: a miserable grind that people do for subsistence wages when they have literally nowhere else to turn, all while making sure that there is nowhere else to turn. I cringe at the cheerleading that HN does when people discount the value of a four-year-degree; if a four-year-degree isn’t “necessary” then by extension, it’s effectively useless. Of course - one of two things is true: coding is actually not that complex and most anybody can just “pick it up” and become effective without much in the way of formal training or education, or it does take years of a combination of practice and study to do correctly. If the former, then it doesn’t much matter what I think - if the latter, then it doesn’t much matter what Tim Cook says (at least out loud regardless of what he actually thinks).
These factors lead to tournament-style compensation. Instead of paying workers in proportion to their output, rank-order them and have a compensation bump on promotion that is large enough to incentivize efforts to compete for it. If workers are risk-neutral, this is as efficient of a way to compensate as piece work is, and has the additional benefit of only requiring employers to rank-order their employees, rather than generate an objective measure of their productivity.
Professional sports is the best example of this phenomenon - no matter how many applicants a team gets, they can only have five players on the court at one time. NBA player salaries are not materially threatened by additional entrants. Instead, the additional competition largely gets channeled into making it harder to remain an NBA player.
Assuming some sort of relationship between potential talent as a programmer and natural attraction to programming, then programming is already tilted toward the talented. Trying to recruit more programmers with early-education programming is going to add more mediocre/bad programmers than good ones.
And you need the good ones. Work that can be done by mediocre programmers will eventually be replaced by software doing what they used to do - software written by the more talented programmers. And the supply of good programmers is necessarily limited.
FYI - Apple student discounts are only for college students. High School (and elementary school) kids get none. Source: bought a MacBook for my kids and they learnt to code with it.
Talk is cheap...
To complete a four year degree requires a commitment, a life-altering personal financial cost, and most importantly, a willingness to abide by the rules and procedures of a complex organization, even when they don't make much sense or directly contribute to the core competency. It shows a willingness to submit to authority, a willingness to get often arbitrary work done on schedule with acceptable quality, and other traits and experiences that matter a great deal for becoming a functional employee in a corporate workplace.
Coding competence is nothing if the coder can't follow instructions, complete work on schedule to spec, or tolerate doing things that seem arbitrary and useless.
A degree isn't about proof of being a viable programmer. It's about proof of being a viable employee.
Only if you choose for it to be. There are cheaper ways to get a four year degree - like going to a state school or even cheaper, go to a 2 year school, stay at home and then transfer.
*It shows a willingness to submit to authority, a willingness to get often arbitrary work done on schedule with acceptable quality, and other traits and experiences that matter a great deal for becoming a functional employee in a corporate workplace.
All of that can also be learned by working on your typical minimum wage job that a lot of teenagers have.
edit: More to the point, even assuming four years of flipping burgers is an effective way to learn the behaviors for a corporate IT job (which is questionable), it is not perceived as useful by the hiring managers, virtually all of whom have college degrees. A college degree is a social leveling-up, particularly in liu of professional experience in the field.
For someone with 5+ years of relevant technical work experience, a college degree matters a lot less. For entry level, it's absurd to argue that four years of french fries is equally effective for social proof, and unwise to argue that it's equally effective for actual practice.
In many countries it really doesn't involve taking on life-altering debt. For many other students, their parents can pay. As far as the aspects of formal discipline and authority are concerned, there are many programmes in which those just aren't an issue. Well prepared students will just experience the academic side of college as a continuation and development of their secondary education.
You make four-year degrees sound like a tough military boot camp that weeds out weaker candidates. That's probably true of some institutions, either from the academic or the disciplinary angle. But if you consider how many people overall successfully graduate, having a degree just isn't a very informative signal.
This matters a lot less for candidates with years of relevant experience in the field. We're talking about unproven candidates here.
> a willingness to abide by the rules and procedures of a complex organization, even when they don't make much sense or directly contribute to the core competency. It shows a willingness to submit to authority, a willingness to get often arbitrary work done on schedule with acceptable quality, and other traits and experiences that matter a great deal for becoming a functional employee in a corporate workplace.
This is one of the main theses of the book "Disciplined Minds" by Jeff Schmidt. I highly recommend it if you're interested in following this line of thought further.
I've seen someone get put through management school for McDonalds and they went from 'order taker' to owning their own franchise in about 10 years. That's ambition.
And then some of us mess that up by going to grad school.
As an engineer working at my second job in the FAANG group, I always loved the tech industry because it was at least better than other industries about pursuing individuality, creative thinking, self-determination, etc., even if it couldn't always succeed in realizing true "meritocracy" or whatever.
Lately, though, it feels like all the money and attention on the industry is making it hard to distinguish Bigh Tech companies from Big Law. Who actually wants their hiring criteria to include "a willingness to get often arbitrary work done on schedule with acceptable quality"? Seriously?
Maybe that's inevitable, but that just makes me so sad if so. And honestly, having met a fair number of "industry pioneers" who were very early workers at some of the most important (and successful!) tech companies around today, I'm fairly sure they agree with me more than the growing conformist movement.
If you can't abide working that way - and it's totally reasonable to feel that way - you need to find a different career path through the industry than "Senior Web Engineer" or whatever the title is.
- Space-time complexity of algorithms
- Statistics
- Management
- Parallel and concurrent programming
- Formal reasoning and logic
- Linear algebra
- Machine and operating system architecture
- Communication theory
- History of computer science
- Database implementation
- Quality assurance
- Technology assessment (impact on society)
- Effective team work
- Multi-disciplinary design and architecture
- Presentation skills
- Research skills
Could go on, just a few of the things I learned during my degree program. All of which I value of myself and others, although they don’t always come up. Coding is just a tool in a large toolkit. Unfortunately it is undervalued to do it right, badly taught and reinvented hundreds of times.
A) couldn’t be learned on a job
B) is relevant for your typical yet another software as a service CRUD developer or the typical “dark matter development” that will never see the light of day outside of a company.
I have a 20+ year old degree and most of what you list. I learned on the job.
A lot of the really interesting work at Google is data mining and modelling, and for that you need some level of statistics understanding. Of course for developing an app, it's not needed (could be a counteractive skill as well in iterating fast).
This is all true, but math has to be learned by getting a deep understanding of concepts that build upon eachother over many years, and understanding it is an important skill with large scale systems, so they can't be treated equally with other coding jobs.
Developing an app... How is one going to be competitive doing that? It's dime a dozen, unless it provides something algorithmically interesting. And that is generally only possible when you have large amounts of data.
In my opinion, the real skill is not in coding, but in data. Understanding the flow, the quality, the entropy, the structure, the meaning, the value, the meta. And code is data, and as such subject to the same understanding.
I tried to do it with a friend and failed. With apps looks are the more important than UX, and I was mainly working on usability features. Also market research and understanding your target audience without data is really important.
At Google, understanding the user / customer was really easy, it doesn't need that much empathy: just give the user more quality clicks by changing the ranking and give the advertiser more conversions per dollar spent.
But, after changing jobs and staying at a company too long, I became an “expert beginner” and in hindsight was a horrible engineer.
Learning how to engineer happened on the job working with more experienced architects and managers, changing jobs 5 times, and by reading and studying a lot. There is nothing magical about college that you couldn’t learn on the job.
Ad B) Quite a bit, actually. I am assuming the SaaS CRUD developer is facing a high number of users (>50 req./s).
- Space-time complexity of algorithms. Needed when reasoning about caching, cache-coherency, in-memory searches, CPU/Core allocation
- Statistics. Very useful to understand the QoS the SaaS application is delivering to the end-users. 101 Stats is enough, but very useful in the toolkit.
- Management. Not just to manage yourself, but to be able to understand the needs of the managers, the structure of the company and the long-term goals and strategy.
- Parallel and concurrent programming. This depends. In SaaS applications I've seen some simple concurrent programming when it comes to request pipelining.
- Formal reasoning and logic. Not really needed.
- Linear algebra. Not needed.
- Machine and operating system architecture. Could be very useful for high-throughput applications. What is the effect of the scheduler? The paging system? The L1/L2 cache?
- Communication theory. Could be useful, not needed.
- History of computer science. Personally, I think this one is really needed for CRUD developers. They'd stop repeating the same stupid traps all the time.
- Database implementation. Although you don't need to implement a database, understanding how a database works and its query optimizer, is gold.
- Quality assurance. When dealing with a programmer + PO team only, the devs need to do the QA as well. It's a learned skill, but easier to master after a 101.
- Technology assessment (impact on society). Maybe not needed, unless you are into ethics.
- Effective team work. Very useful.
- Multi-disciplinary design and architecture. Could be very useful when developing SaaS applications for different domains. Understanding and working together with stakeholders from your target domain is a strong advantage.
- Presentation skills. Could be useful.
- Research skills. Not very useful.
I was a hobbyist Basic, 65C02 assembly language in middle/high school, graduated undergrad with a degree in CS from an unknown state school, MBA drop out (but I did learn a lot).
I also spent my first 12 years professionally as a cross platform C bit twiddler, became your standard “enterprise developer” and then moved into development+cloud architecture.
- space time complexity of algorithms. True that was a big deal when I was writing C programs that churned through what was then a lot of data, but, how many “Enterprise developers/architects” are writing code that is algorithmically complex and not just translating complex business rules into code?
Even then when I’m determining why a system is slow, it could involve many layers of the stack from a too heavy payload going over the network, bad caching, incorrectly size servers, incorrectly placed servers, bad sql queries, etc.
Machine and operating system architecture. Could be very useful for high-throughput applications. What is the effect of the scheduler? The paging system? The L1/L2 cache?
I have some understanding about architecture and OS. But how useful is that from a CS level? Can’t you just look at your various metrics and see where your bottlenecks are? Again my degree was over 20 years ago. I would have had to learn that on the job. My operating system class was taught on some SUN Sparc workstations. My first job was writing FORTRAN and C on DEC VAX and Stratus mainframes. I’ve had to learn each operating system and platform on the job.
Database implementation. Redshift (a columnar OLAP database), optimizes differently than a regular OLTP RDMS, which is different than something like ElasticSearch. Would you have learned any of that in college a decade ago?
Technology assessment (impact on society). Maybe not needed, unless you are into ethics.
Is that really taught in undergrad? I had a few classes like that in grad school.
Multi-disciplinary design and architecture.
Is that taught in undergrad? That was taught a little bit in grad school. But I’ve learned a lot more from working at 5 companies in 10 years (or 7 in 20).
Presentation Skills
I struggled for years with presenting ideas to non technical leadership but I am passable now. But that came more just by seeing how managers did it.
Many programmers indeed just copy whatever business rule they see into Java / C# code. However, on occasion they write an optimizer or a system churning through large amounts of data. Having that background sets the engineer apart from the coder.
> Even then when I’m determining why a system is slow, it could involve many layers of the stack from a too heavy payload going over the network, bad caching, incorrectly size servers, incorrectly placed servers, bad sql queries, etc.
Well, each of these are studied at grad school: networking, caching systems, SQL optimizers. It really gives a head start and I'm grateful for that.
Re OSes. Most OSes have the same paradigms. I've been taught from the book Operating System Concepts by Silberschatz, Galvin and Gagne. It details the many concepts adopted by the various OSes over time. OS specific is not really interesting afterwards.
Re Redshift / ElasticSearch. Columnar DBs were still new, so yes, you do need to learn at the job. Still gives you a tremendous head-start though, understanding row-based DBs.
Technology Assessment and multi-disciplinary design was part of my Bachelors program, albeit 101.
Presentation skills: I am very happy we were taught these skills extensively. Proved absolutely valuable, even though I constantly improved on them during my career.
Overall, the skills are not so much to understand why a system does what it does, but to quickly understand a new technology from its basic functions. So when Rust comes along, I can quickly assess that it will be useful in a microservices setting due to not having a run-time, predictable behaviour and fast startup times. When MongoDB is pushed, I am not one of the many followers blindly believing its marketing lies.
That is, until today - and I am glad it came up. I had been corresponding with a recruiter for a government job (TTS) and after exchanging a handful of emails over the course of two days and scheduling a meeting she finally looked at my resume (which I sent with my first email), told me that I am not qualified and cancelled our meeting. I have a feeling that this job would have been a nightmare. As Eugene McCarthy said, "The only thing that saves us from the bureaucracy is its inefficiency."
I have spoken to some highly insightful people during interviews this week and they generally seem focused on my ability to do real work that produces real results. Most interviewers seem to want to cut through the hiring pretense and get to looking at and talking about my code while assessing my communication skills. It has largely been a positive experience. This application for a job with the TTS may have been my first interaction with a professional email-sender (aside from recruiter spam) and it was shockingly unproductive.
The coworker who taught me the most about how to treat others with respect was a reformed convict who did six years for armed robbery. Some of the best communicators I have worked with barely spoke English. If someone told me that the best coder they know does not have a degree it would not surprise me at all.
My point is 4 year degree is useful if you learn and use your educational resources well.
Anyway, this guy is making my job safer :)
I have also heard both of them speak about how important education is. I can’t imagine they required degrees from the folks they worked with but they both value the benefits that an education can provide.
So, technically, Tim is right. But man, I am so glad I got an engineering degree. I learned some really cool stuff (that wasn't strictly coding).
The corollary is also true, I've known some programmers with doctorates that were absolutely worthless.