How many women, minorities, and other people in the US chose not to study CS for a major because the ACM won't hear any criticism about H-1B visas or outsourcing?
We in the US are not properly funding and supporting public education. We need to increase this at all levels. To be successful at Computer Science and Programming, students need access to the systems to do this development as well as teachers. Our teachers are woefully underpaid, in general, which means we’re not necessarily getting the students access to the best learning.
H1-B isn’t the culprit here, but I do agree that we need to better fund our education system, all the way back to public pre-schools and on through public universities.
> Our teachers are woefully underpaid, in general, which means we’re not necessarily getting the students access to the best learning
Throw as much money at the problem you want. But until the philosophy of education changes, you won't be any better at creating successful computer scientists and programmers.
Our entire education system (even at the University level, which waters down curriculum to keep butts in seats) is now driven by a philosophy of maximizing equity, not opportunity. Writing software is a skill that requires high aptitude, and the needs of high aptitude learners are almost ignored by those deciding education policy and spending. The budget, teaching strategy, and curriculum focuses almost entirely on appealing to and raising the lowest common denominator.
In fact, aptitude is generally associated with the ultimate evil of the social justice crusader: privilege. It will (continue to) be shunned and bullied accordingly.
Good... the industry for developers has been slowly moving in a direction that seems to be trying to turn us into glorified auto mechanics. This is unacceptable. Let's keep supply tight!
The systems we can build today with a small team are much more complicated than what we could do ten years ago. It's just that we also somehow managed to solve essentially the same problems we solved ten years ago with much more complex software.
> handle faults in ways that were impossible in the past
Like what? Earlier systems worked if your computer worked. Adding a server is a DRM move and doesn't help the user with reliability - usually the opposite.
My experience is that in most situations larger teams ship slower, precisely because of the collaboration costs you mention. There are ways to reduce the dependencies, but most organizations can't get there.
We also didn't improve our standards in any meaningful way.
Most software is complete shit, and we're lucky when the end user doesn't notice too much. As a software engineer, I'm appalled by the average "web app" both in terms of how the product functions and the code making it happen. Accessibility is still a complete afterthought and the documentation on accessibility standards is too confusing.
The only reason many of us are still around is that no one has truly figured out a good replacement for the average software developer yet. The closest we have is things like Wix and Squarespace. The junior and mid level developers of today are ripe for obsolescence and it's a matter of time before someone finally figures out how to give small companies the power of software development without all of the overhead they currently endure.
The world also doesn't need that much software, hence we don't necessarily need more software developers all the time. Software scales with problems to be solved, not with population. Those paying our bills need to figure out just how much of their money they are wasting on what is essentially the same kind of software development that took place 30 years ago.
The scary part is that researchers have been working on making software more reliable for the past ~50 years, with really good results. Industry? Nah, except for a few niche cases, we've been adopting a worse is better approach, thank you very much.
It's only been a few years since developers (outside of these niches) stopped laughing when hearing about sound static type checking, static analysis, model checking, object capabilities, abstract interpretation, message passing APIs, getting rid of NULL, reactive programming, stream programming, let it fail, transactional memory, linear types, etc.
Of course, at the same time, we moved everything to web programming, where everything is broken for different reasons. Research has been studying that for a couple of decades, too, so I figure we should start using more robust paradigms within 10-20 years.
If anything we've made it harder. You want a senior engineer who also can run k8s and is well versed in a multitude of languages. Don't get me started on tooling, especially in the JS landscape. I'm amazed engineers pick it up without having grown up with it.
"Glorified auto mechanic" is exactly how I'd describe how software development is viewed in Europe. There is a much bigger emphasis on "just" buying software from Microsoft and SAP to "solve" problems.
It's not so much different in America other than that we get paid more. Most companies "hire some geeks" to solve what they see as just a different kind of plumbing without physical pipes. The average person doesn't respect software engineering so it's no surprise that management doesn't either. So that extra pay we get is mainly to compensate for the mental abuse we're guaranteed to endure.
Also, most developers in America don't make that much more than European developers. It's just that we happen to be willing to pay seasoned developers quite a lot more. Most junior and mid-level developers here don't make much more than $90k, and many of the companies that are willing to pay at least that or more are located in areas where the cost of living makes that salary abysmal.
Also, most developers in America don't make that much more than European developers. It's just that we happen to be willing to pay seasoned developers quite a lot more. Most junior and mid-level developers here don't make much more than $90k
But the ceiling for top developers in most of the world is below that. Even here in the UK, where salaries are starting to get pushed up a bit, there are still only a few employers who would beat that today, and mostly in places like London where cost of living is also relatively high. Hardly anyone is making the kind of money that you see devs with as little as 5 YOE routinely making with half the companies in SV, even people with multiples of that experience who would be staff/principal level in a big US tech firm.
It reminds me of the ancient joke about how in Germany if you tell your neighbour you are an engineer he will introduce you to his daughter, in the UK he will ask you to fix his microwave.
Except these days it seems the whole of Europe undervalues software engineering.
Auto mechanics at least have the common sense to repair things the same way, so that the next mechanic can work on the next fix in a few hours instead of first having to spend 10 weeks getting into the “mindset” of the previous mechanic.
Seriously, it’s not best practices when everyone apply them differently.
There are many, many ways to write even a small piece of code/functionality and small sub-optimal choices can lead to tons of entropy down the road. To compound this, almost every solution is going to be different, and there just isn't a '300 Page Manual on Servicing Your Jaguar' equivalent for every possible software solution.
While I get the gist of what you're saying, I think building and repairing physical things is different from building and repairing more abstract things.
...but software engineers are not "repairing" things, we're building systems. Mechanics repair things in a similar way because there's literally repair manuals from the manufacturer that tell them how to repair your vehicle because _the manufacturer_ has thought of how to repair things.
You'd be surprised how much variation there is in the solution when it comes to autofabrication, and yes there's similar amounts of "figuring it out" that there is in the software world.
Quite frankly the automechanics <-> software engineer analogy is apples to oranges.
I mean, mechanics aren’t exactly happy that it’s become like that though.
Used to be that they could repair every car, but now they are tied to brands because they need certifications and special tools. Not because the manufacturer needed the tools to build the car, but because without them, anyone could repair it.
My overall point was how the roll of a mechanic is not really the right comparison to a software engineer.
There's always been factory repair manuals, and while repairs used to be something that were more common across brands and something more accessible to the weekend wrench turner, that doesn't change that the manufacturer had explicit guidance that was there to follow.
The "specialization" aspect of things from a mechanical standpoint is a by product of additional complexity and advanced proprietary systems. Consumers (and regulators) ask far more of a modern car than what could be delivered with simpler, purely mechanical systems. Whether it's safety, emissions, reliability, or just features, as those evolve and progress, repairs and maintenance get more complicated and involved.
>> We're building systems
> Someone has to maintain them
Software maintenance and vehicle maintenance is fundamentally different. Vehicles have wear items that need replacing (brakes, hoses, tires, etc), consumables that need to be changed (oil, lubricants, belts, coolant), and parts that are subject to mechanical wear. Systems don't have any of those things.
The closest analogs I can think of would be upgrading a dependency or maybe bug fixes.
While some bug fixes might be small changes to fix typos or incorrect logic, some bug fixes may be significant enough to necessitate redesign of subsections of the software. You wouldn't expect your mechanic to redesign your car's brake system because you found it wasn't stopping as quickly as you'd like it.
It’s not even that though. We have open source projects with multiple private companies are supposed to work together.
Which they do, but it took years of setting up governance to get people to agree on what the best best practices were. I mean, at that point it’s not really best practices anymore, because that implies that they have a broad adoption.
>Good... the industry for developers has been slowly moving in a direction that seems to be trying to turn us into glorified auto mechanics. This is unacceptable. Let's keep supply tight!
I'm not sure what this is supposed to mean. My brother is an auto mechanic and the type work he does constantly blows my mind. Diagnostics, transmission/engine rebuilds, you name it; especially with these newer models.
With the exception of a few, there's nothing special about what we do. I don't see how we're any different than "glorified auto mechanics".
Are the stakes really lower? A simple brake job gone wrong can literally kill people. I can't remember the last time I miscalculated profit/loss for a client where the result was a fiery death.
Maybe a better way to say it is, software development usually has a bigger financial consequence. And that consequence scales along with the skill and judgment of the developer.
I wouldn't be so fast to say there is nothing special about what we do. It may seem that way because we are in it day in and day out...but in the same way that I am fascinated by the work that others outside of my industry do(farmers, mechanics, small business operators)...they are fascinated and often dumbfounded by what I do(and I am no rocket scientist).
Auto mechanics are in much greater supply than and make a much smaller salary than software engineers, and repair/diagnostic work is much different than the design work that seems to be less and less of my job. We're more and more in a place where we're just stringing together other people's rent-seeking SaaS services and putting up with all the resulting bullshit, rather than actively making our lives as developers easier by making stuff that results in less work.
That, and our employers are taking 99% of the value we create, when that figure should be closer to 90%
Clearly have not been abused by a company wanting you to do 5x as much work as one developer should. We need many more software engineers and many more innovations in the industry so software engineers don't suffer from chronic burnout and being underpaid.
The skill required to be an auto mechanics is hugely underrated by people that doesn't know how to work with cars. They are one of the few craftsmen jobs still left.
The issue isn't whether auto mechanic satisfies some platonic ideal of a professional, the issue is how one is treated by society or by their employers. I know little of the experience of auto mechanics, but I don't think its a stretch to say that society treats them as interchangeable cogs moreso than, say, doctors or lawyers.
Sure, you can see it that way. Or you can see it as attempting to make a different point casually without having to avoid everyone's personal landmines and bugaboos.
My comment was in response to you apparently not understanding the distinction being drawn by the OP between software development as a relatively high status profession and the relatively low status auto mechanic career. The OP was alluding to the waning status of being a software dev since the 2000-2010 heyday. Injecting your opinion regarding my take on the status of the auto mechanic profession was entirely unwarranted.
I understand the comment - my point was that I don't consider being an auto mechanic to be a low status, or shameful profession to begin with - hence my original reply to begin with. I believe it is you who did not understand the point of my original comment. Oh well.
Oh, so you were in fact feigning ignorance as some kind of bad Socratic method? I figured as much, but I like to give people the benefit of the doubt. It's also a mistake to assume a casual example to make an entirely unrelated point is representative of someones views.
Its funny, I had the hardest time finding a software job last summer and ended up taking a job in an unrelated field to get some money coming in. Perhaps the market is heating up now?
To people complaining about H1Bs, one thing to consider is that if importing workers is no longer an option, employers may think about remote work or offshoring, transferring jobs out of the country entirely.
It is still very tough to outsource software development. Because of the nature of these sort of contractual arrangements, you end up moving the challenge from the implementation to the design spec and acceptance criteria.
In a more traditional software org, the implementer does a lot of this work, but this doesn't really happen with outsource contracts in my experience.
Offshore contract shops have a very poor track record in my experience. By contrast, what I have seen work very well is when a company hires an H1B worker, invests in their professional development, promotes them to some sort of manager, then that person goes back to their home country and establishes a unit of the company there, hires a team and leads it. I know multiple large companies that ended up having this be a key part of their strategy.
and they often do it! at my first job (ultimately owned by ThermoFischer now) in 2008 there was quite a bit of development done at consultancies in India, and in house.
It's a myth. There's no shortage of developers, programmers, etc. There's a shortage of willingness to pay for them.
Want to attract and retain qualified developers? Pay them. If you offer 5% salary increases when moving to your competitor means a 25% salary increase the developers will move.
Can't afford it? Maybe you should cut those that suck off developers' teat.
Doesn't supply/demand directly affect salary?
If there is a shortage you have to pay more for it.
The fact that developer can make so much is because there is a shortage.
You are confusing the top pay in the SV with developer pay. Even in SV the cash pay is low and a bump is given in funny money that may or may not end up being there.
Average developers are not making $250k/year cash + guaranteed bonus + bonus + options.
I dont know. My company is paying devs 30-40% more than business people. Both had more or less the same 5 year education, both contribute in one way or another to the busines machine. And yet we have problems to find devs, there is a huge shortage.
When I am looking at my friends and group them into devs and non-devs: devs make significantly more money, I am really jealous of that, because I am a business guy myself.
In my eyes devs are overpaid: because there are not enough of them in the market they can be picky and choose. The more people study CS, the more supply will close this gap again.
In the project that I am working in the business people and devs all contribute a lot of hard work and many hours to the success - why are the devs paid so much more?
> In the project that I am working in the business people and devs all contribute a lot of hard work and many hours to the success - why are the devs paid so much more?
Because you clearly are struggling to hire developers at the prices you want to pay and you are not struggling to hire "business people" at the prices you want to pay.
In either event you are paying developers shit. When an average junior developer starts getting paid what an average finance banker gets paid post school and in 10 years an average developer rising at the average rate in an org gets paid what an average person in finance who is rising at an average rate in finance org, then maybe there would be something to write about.
In my opinion, the position of software developers is similar to stonemasons and blacksmiths historically. Skilled professionals to be depended upon. All play(ed) an important role in economics, religion, politics, and society in general.
Everyone and their dog is studying to become a software engineer, why's the shortage?
Most who set out to do it give up but you'd still think there would be a lot of developers by now.
The demand for software is still in the "looks infinite" regime of the s-curve. There is an endless number of manual business processes that could benefit from software.
There's a strange case (of most professions) where being below average usually means you create more work. And as long as you continue that work with others who aren't very good, the work keeps compounding. This isn't purely technical of course, and involves lots of politics and bureaucracy, but it's how you end up with massive $100M software projects that completely fail.
So the shortage is not only in having enough developers but having enough good developers. And that's tough given how vast the industry is, and how fast it moves.
> Everyone and their dog is studying to become a software engineer...
The thing is... this was true in the 90s, was true in the 00s and was true in the 10s. Yet we are here, shortage in developers after 30 years of everyone and their dog studying software engineering.
In my class (2016), there were still lots of people who felt silly about the web, which is where most of the work actually is. I would guess about half of my graduating computer science classmates went on to not work in the industry, because they had their hearts set on jobs that just weren't really available to them (they wanted to work at Blizzard and wouldn't consider anything web or web-adjacent). Perhaps they've reconsidered at this point, but if this pattern held anywhere else then this trend makes perfect sense to me.
I would tend to agree. When I was in college about 6 years ago, web/backend work was not seen as "real CS work". Everyone wanted to do something more than work on a CRUD app, but here we are.
The web does have a stigma, but given how much money pours through the eCommerce industry it's a surprising outcome. I guess it's not that sexy, but it is where the money is. For a while everyone wanted to be an app developer, but that's a real crapshoot too. eCommerce is honest, stable work with relatively low risk for the developer. The domain is well defined, the technology is mature, the companies are already stable and doing business.
The funnel for junior software engineers is big but the tip of the funnel is narrow. Most of those who zip through it either went to a name-brand school or got hands-on experience with internships first. Everyone else is just trying to get lucky. On the cscareers subreddit there are a ton of people who either went through bootcamps or taught themselves how to code who have been searching for a role for a year - in the mean time doing personal projects, or trying to pick up some contract work - but no takers for full time salaried work.
The true "shortage" is really for developers with 3+ years experience who can "hit the ground running". Most companies will only make limited commitment to junior engineers, favoring mid and senior level developers.
> Team A hired a junior dev, onboarded them, six months later they were productive and left for another job. Between the costs of hiring, onboarding, and lost productivity for the rest of the team, and wages for the employee, we've realized a net loss of of $150,000. The lead and manager are saying if we were to hire another junior dev, it would set the project *back* by another quarter from its current delayed estimates.
> Team B is still looking for a mid or senior to hire, but unlike team A they are only slightly delayed from the readjustments after taking into consideration not hiring someone.
Yes, they'd like to have someone hit the ground running... but they'd really rather not incur losses and slipping estimates from losing employees.
There's a sense of entitlement from many employers. They expect that the people they want will be available at short notice at the wages they want to pay. And that they won't have to fight to keep them. That seems to no longer be the case.
In my experience, I've never seen a Jr. engineer (as in first non-internship job) quit in 6 months. Thinking back, they've all been around for over a year, although they don't always stick around as much as more senior staff - which is fine.'
If they are regularly turning over that fast that's a red flag that there's problem inside your org that need to be addressed.
I work in the public sector in the midwest... though I've also been in the private sector out here too.
You've got a small, IT team which includes some bespoke software to keep local companies running... you know, the web pages or data processing requests. There's a SaaS product that's the regular income, but its not that much. You're paying competitively for the area - about 2x the average per capita income for the area for a junior dev (per capita income is $28k, you're paying $55k - compare; per capita income in Minneapolis is $40k (Glassdoor: https://www.glassdoor.com/Salaries/eau-claire-software-devel... - make sure to look at the 0-1 years of experience)). Your clients are local companies in the neighboring counties.
There's a new junior hire from the local college... and a few months later, their interviews for Amazon in Minneapolis pan out and they're gone.
There's no way that you can compete with Amazon in Minneapolis.
Is that a red flag that the small company can't pay Amazon wages? Should the small company close up shop instead?
Do they try hiring another junior dev from a local college... to have them move to Minneapolis also? Or do they just put out a req for a mid or senior who wants to live in northern Wisconsin where you can go fishing after work on a small lake and settle down?
All of the "you're not paying enough" means that the small companies are expected to pay big tech wages... and they can't.
They close up shop and now the other clients are going to need to go to the larger consultancies for their work... or not do it at all.
Yes, this is globalization played out with software developers... even if its just companies that are a few hours away by car for a move.
This boils down to "can / should every developer be expecting to get wages equal to Amazon?" Can the company afford to pay the junior dev $70k? $80k? $90k?
Likewise, "can you hire a junior dev with no real history of employment and have them stick around for a year when given alternative offers from a tech company?"
If the answer is "no", then why are people complaining that these companies aren't hiring junior devs and training them and instead deciding to not incur extra costs while they wait for someone who will add to their team for a few years rather than a few months?
I was a team A hire, and I did leave after 6 months. I probably would have stayed longer, but the only job willing to hire a junior paid 20k less than Glassdoor said juniors get in my area, and lied to me about when my first raise would come.
My experience has been that many, many untested juniors, whether they come from a 4-year CS program or a bootcamp, simply can't take a simple problem, break it down, and solve it with code on their own.
I completely understand hiring managers that limit themselves to looking at devs with 3+ years of experience, because it tends to filter out folks that just can't do the basics of the job despite their credentials.
Personally, I do like to hire juniors and help them grow their skills and their careers, but I need to see at least basic coding skills and a problem-solving mindset up front to make it worth the risk and the investment of time.
Another point is that software engineering (currently) has a situation where the higher the supply goes the higher the demand is. Once an organization starts digitizing their processes, there is a higher additional benefit to hiring another software engineer, because that second one has access to data that previously not accessible programmatically. Previously information that was kept in excel spreadsheets or on paper is now on servers.
You would think that it would eventually lead to some stopping point, but there are additional funnels and issues. For example, finding professors in university to teach software engineering is hard, because all of the people graduating from their universities in software engineering know they can make much more money in the industry than in education. Places like Stanford or MIT (who are already trying to be selective on purpose) can afford it, but community colleges or even high schools can't give them 1/3 of what they would make otherwise.
The cited BLS distinguishes between "Software Developers" and "Computer Programmers". It says Software Developer employment will increase by 22% over the next 10 years, while Computer Programmers will decline by 9%.
I have always been a bit perplexed by the distinction. What are examples of "Computer Programmer" jobs in the US? Why would you want two distinct classes of "software creators"?
I generally think of a 'developer' as someone who can deal with more of the software development process (i.e. identify the requirements, break down the problem, define the tasks, perform the tasks) while a 'programmer' is someone you hand off defined tasks to be implemented. YMMV as everyone seems to have their own definition.
This has to do with the history of the classification. At one point, there was Application Developer and System Developer as two classifications.
There was also a distinction at one time between what amounted to "people who wrote code" and "people who designed software". The writing code was the 'lower' of the two and the 'design' description included overseeing the other classification.
You can see this by poking at the Wayback for this page:
So, it really is a change of "this is how businesses and government see the "Computer and Mathematical Science Occupations". Lumping it all together isn't necessarily the right answer. The titles that we've got that don't actually map to what we do doesn't help.
Guessing a bit, but Software Developer is probably the new Computer Programmer. It may just be a shift in terminology by human resources departments and the net change in jobs for 'people who design and write software programs' is somewhat less than 22%.
In my experience, there's the "software developer" and the "formware developer," and as more companies go through a real "Digital Transformation," they begin to require their programmers to do more advanced tasks that go beyond form-based CRUD applications.
I would concur. My inbox is flooded with companies looking to hire now (lots of remote), even presenting salary and benefits in the initial communications. The salary ranges seem to have gone up as well from what I was previously seeing.
> How Can Companies Improve Their Retention and Hiring?
The answer to this question in the article -- make sure you've thought about what a technical career track that includes advancement is within your organization -- is part of the picture, especially at the senior level.
If you want advanced skills, be ready to advance people.
And that may even include preparing staff/extrasenior engineers to actually train juniors and even seniors in skills that you want rather than expecting skilled labor to show up preformed at your doorstep so you can externalize the cost of thinking through how your talent supply works (as attractive as that option will always remain... if one can get away with it).
Absolutely. So many software companies are dead ends from a personal achievement level, and have zero mentorship. Moving company is the only way to progress your life in many cases.
It's not always an easy problem to solve though, you need a domain and software platform challenging enough to have room for growth and advancement, without shooting yourself in the foot by making it too difficult to hire developers for. Some domains just aren't that challenging, and building simple and robust software is usually preferred to building over-engineered and challenging software. You may just genuinely have a boring software company that can't hold on to certain types of developers very well.
> These graduates enter either a managerial track, such as Project and Program Manager or Staff Software Engineer, or they enter a technical track, such as Senior Software Engineer and Software Development Engineer II and above.
At least at my company, Principal Software Engineer is considered a technical/individual track role, and my assumption was that Principal/Staff Software Engineer at most companies were. Is that not the case?
The shortage is artificial. Companies do not want inexperienced developers, and they are unwilling to invest in the education and experience of developers. They want someone that already has all the credentials they want, on paper. Regardless of if they're actually good or not. That's a natural result of favoring short term goals over long term investment and the ever increasing corprotization of development jobs. If anyone but your actual dev leads are creating and hiring for dev jobs - you're apart of the problem.
Propaganda like "job shortages" are a nice way of saying "we need to import more workers", whilst rejecting hundreds of domestic applicants.
> That's a natural result of favoring short term goals over long term investment
It’s extremely hard to justify investing in junior engineers when the trend in our industry is to jump between jobs every 1-3 years. What’s the point of hiring and training/mentoring anyone if the industry average tenure is less than, say, 5 years?
I think calling it artificial is going a bit too far.
At least from my perspective, our entire industry is relatively new (if you look purely at the average / median years of experience in out industry).
5-7 years is often considered “senior”, while in other industries it can take 10-15+ years to really be considered “senior” in your role.
It’s not surprising that many companies want “senior” level experience since “senior” really just means “not a beginner” at many companies. And not surprising that companies are reluctant to hire junior devs when jumping between jobs is so commonplace.
You're both looking at the same problem but one is describing the horse and one is describing the cart, we're not sure which goes first but only one of us has any agency to tip the scales and that's employers. Employees will do whatever is best for them, but an employer can attempt to make sure what's best for them is to stay at their company.
> It’s extremely hard to justify investing in junior engineers when the trend in our industry is to jump between jobs every 1-3 years.
Employees job hop to get raises and title changes. If employers were more willing to invest in anyone, not just Juniors, this wouldn't be as much a problem.
Some people do want to job hop a lot, but many don't. This industry is actively hostile to the people who might otherwise be loyal to their employer, because it does not reward loyalty at all.
Yes this! Both most recent companies I’ve been at have/had problems retaining good people, especially past 4 years. At this point I think there must be some adage among leadership that is better to get fresh meat after a while.
That said I have known peers to go in and say they are looking at leaving and all of a sudden a solution is found…
There are many things companies can do to improve employee retention. Regular raises, promotions, internal transfers for people who like new challenges, pension plans, etc. Instead quotas for churn are somehow popular.
Completely agree. I recently dipped my toes in the job market pool and was shocked by the total dominance of foreign workers over IT. To make matters worse, the IT recruiting industry appears to have been taken over by Indians. What gives?
Which in turn implies a "developers are equally valuable to all companies".
There are companies where the value of a programmer isn't the same as the value of a programmer in another company.
There is no way for small SaaS company with revenue of a few million overall can compete with the amount that a tech company with the revenue of a million per employee is the norm.
and conversely "..at a capability we have". Sloganeering like you did is very popular on fora like HN, but the reality is quite different. There is 110% employment in tech even if you a C-grade programmer you have a job, the rest are insufferable, incompetents who are unemployable at any wage.
I couldn't disagree more. The shortage is very real, the current crop of "American programmers" are a bunch of incompetent, entitled brats who seem to think everything is owed to them. Many of these unemployed "American Programmers" are the dregs, the bottom decile of programming talent which no company can employ. And their unemployability is exacerbated by their attitude problems.
note: I am a 3x entrepreneur and my opinions are based on my 2 decades of experience in IT.
> "are a bunch of incompetent, entitled brats who seem to think everything is owed to them"
> "their unemployability is exacerbated by their attitude problems"
I'm trying to remain polite about this, but with the tone and attitude you strike, I'm having a hard time taking your opinion for anything other than bitter frothing. Maybe you can elaborate on why you believe they're entitled, have attitude problems, or are brats.
Thank you for being polite, but IMHO my post wasn’t tonally any different than the GP, ergo your indignation is misplaced.
Since you asked, I speak with the experience of starting 3 businesses across Pharma, Defense and Media industries. I have also been involved in hiring multiple people across sectors, both in tech and non-tech jobs. As you also know, for defense that involves White-as-Wonderbread US citizens only, I also have interviewed almost exclusively from a certain complexion-gender combination club. Thus have formed my own pattern recognition, with an n of several hundred. If you are open to listening I can share a few illustrative anecdotes. Admittedly my posts are just opinions as I can only offer my own perspective. Although this study, and multiple others, seems to support my viewpoint.
Well, it's all relative. Assuming all corporations are equally amoral (or close enough), defense means war profiteering, whereas (traditional) media is a blight on our society that has largely abandoned any pretense of social function and actively holds us back by playing on our collective fears.
On the other hand, pharma as a concept certainly needs to exist to save lives. As a Canadian, pharma is not so bad here, but I believe their existence as a for-profit* entity is contrary to the purpose of universal healthcare, which I think is a common enough sentiment. American pharma, however, actively profits from the inequality inherent to the (rather evil) lack of universal healthcare system. Any positives for society seem strictly incidental, as exemplified by the price of insulin.
I could not agree with you more regarding media. And no, not "big media" just media. It's absolutely miserable and has let us all down.
I also agree with your point regarding profiteering. This behavior can be observed in many industries, not just pharmaceutical, but it seems a more egregious violation when it affects our health or the well-being of someone we know.
Your comment grabbed my attention because I couldn't immediately think of anything to support the sentiment of it being immoral to work in the pharmaceutical industry so I was naturally curious to find out.
Thanks for taking the time to share your perspective.
1. Some unemployed devs don't find their work and successfully make their own business. Many work on the OS software you use. It's odd why you would think otherwise if you have that level of experience.
2. I know a number of good developers that are respectable, they just don't have the work experience in the form of "Worked at X for 2 years". A quick gander at github can reveal a number of highly skilled projects done out of self creation and not sourced from a company.
3. I haven't come across many "self entitled" programmers, but certainly many self entitled managers and business owners whom wave their hands around in the air acting like they know something they don't. Too many MBA's and people running companies they know little to nothing about, and base their "practices" almost entirely off confirmation bias. Managers and owners are by their nature more prone to incompetant brattiness - humans like to think power = competance.
4. Software dev has become more like making music - everyone does it, very few get a record deal and make good money. Whether the music is 'good' isn't much of a relationship with having a job in it or not. Plenty of bad devs with good resumes.
A quick breakdown from my recent experience hiring for 5 software developer positions.
Entry Level Engineers - Easy to find but expensive to train
Mid level engineers - Difficult to find but minimal training required
Senior engineers - Extremely difficult to hire almost no training required
For a software team to be successful you need at minimum a strong mid level to keep everyone moving in the right direction but it's preferable to have a senior level engineer.
I'd recommend everyone heavily invest in growing the people they have instead of playing the 'lets hire a senior lottery'.
How many times do you want to train entry level employees over the course of a project for a few years?
How much will that training cost in terms of time spent hiring and onboarding over the duration of the project?
What is the productivity loss of doing the "lets hire a senior?" ... and not incurring the other expenses of training entry level who leave after a year?
That's part of the problem isn't it, so many software companies are short projects, not long term businesses. You can't afford the investment, because you'll never benefit from it by the time the project is done. You also can't start with a junior and teach them the platform, because the platform isn't even built yet.
I wish there were a simple answer but it's a complicated cost benefit analysis that has to be done for each organization taking into account their objectives. But most organizations don't have that many options because salaries are pre-defined and inelastic.
There really aren't that many options
1. Invest in training the people you have
2. Offer some novel incentives 4 day work week or something.
3. Compete on salary by paying more
In a lot of organizations 2 and 3 can't be changed by the people doing the hiring.
I have 20+ years of career in R&D, consulting, startups and multinationals, publications in 1-tier conferences, lots of Java/PHP, a bit of Cloud, Big Data and ML experience. I grew up to IT Director, downshifted to SSE at a unicorn.
I've been searching for a new job for over half a year in Europe. Mostly remote. I am willing to do legacy programming. My only requirement is to work on a product creating real value. But I always bump into artificial niches: GDPR/CCPA/KYC compliance, all sorts of crypto, yet another social network, data mining users, traiding floor software... Exactly the sort of things I am tired of.
There is no shortage of software developers, but a big shortage of decent work.
139 comments
[ 374 ms ] story [ 3521 ms ] threadH1-B isn’t the culprit here, but I do agree that we need to better fund our education system, all the way back to public pre-schools and on through public universities.
Throw as much money at the problem you want. But until the philosophy of education changes, you won't be any better at creating successful computer scientists and programmers.
Our entire education system (even at the University level, which waters down curriculum to keep butts in seats) is now driven by a philosophy of maximizing equity, not opportunity. Writing software is a skill that requires high aptitude, and the needs of high aptitude learners are almost ignored by those deciding education policy and spending. The budget, teaching strategy, and curriculum focuses almost entirely on appealing to and raising the lowest common denominator.
In fact, aptitude is generally associated with the ultimate evil of the social justice crusader: privilege. It will (continue to) be shunned and bullied accordingly.
It's simply that demand is skyrocketing, but we didn't make software substantially easier in the last decades.
Larger teams also ship faster, there's a lot of complexity to enable that collaboration.
Like what? Earlier systems worked if your computer worked. Adding a server is a DRM move and doesn't help the user with reliability - usually the opposite.
My experience is that in most situations larger teams ship slower, precisely because of the collaboration costs you mention. There are ways to reduce the dependencies, but most organizations can't get there.
Most software is complete shit, and we're lucky when the end user doesn't notice too much. As a software engineer, I'm appalled by the average "web app" both in terms of how the product functions and the code making it happen. Accessibility is still a complete afterthought and the documentation on accessibility standards is too confusing.
The only reason many of us are still around is that no one has truly figured out a good replacement for the average software developer yet. The closest we have is things like Wix and Squarespace. The junior and mid level developers of today are ripe for obsolescence and it's a matter of time before someone finally figures out how to give small companies the power of software development without all of the overhead they currently endure.
The world also doesn't need that much software, hence we don't necessarily need more software developers all the time. Software scales with problems to be solved, not with population. Those paying our bills need to figure out just how much of their money they are wasting on what is essentially the same kind of software development that took place 30 years ago.
I think, we didn't scratch the surface of the true demand yet. But, yes, we should get dramatically better in so many ways.
It's only been a few years since developers (outside of these niches) stopped laughing when hearing about sound static type checking, static analysis, model checking, object capabilities, abstract interpretation, message passing APIs, getting rid of NULL, reactive programming, stream programming, let it fail, transactional memory, linear types, etc.
Of course, at the same time, we moved everything to web programming, where everything is broken for different reasons. Research has been studying that for a couple of decades, too, so I figure we should start using more robust paradigms within 10-20 years.
Also, most developers in America don't make that much more than European developers. It's just that we happen to be willing to pay seasoned developers quite a lot more. Most junior and mid-level developers here don't make much more than $90k, and many of the companies that are willing to pay at least that or more are located in areas where the cost of living makes that salary abysmal.
But the ceiling for top developers in most of the world is below that. Even here in the UK, where salaries are starting to get pushed up a bit, there are still only a few employers who would beat that today, and mostly in places like London where cost of living is also relatively high. Hardly anyone is making the kind of money that you see devs with as little as 5 YOE routinely making with half the companies in SV, even people with multiples of that experience who would be staff/principal level in a big US tech firm.
Except these days it seems the whole of Europe undervalues software engineering.
Seriously, it’s not best practices when everyone apply them differently.
While I get the gist of what you're saying, I think building and repairing physical things is different from building and repairing more abstract things.
You'd be surprised how much variation there is in the solution when it comes to autofabrication, and yes there's similar amounts of "figuring it out" that there is in the software world.
Quite frankly the automechanics <-> software engineer analogy is apples to oranges.
Used to be that they could repair every car, but now they are tied to brands because they need certifications and special tools. Not because the manufacturer needed the tools to build the car, but because without them, anyone could repair it.
> we're building systems.
Someone has to maintain them.
There's always been factory repair manuals, and while repairs used to be something that were more common across brands and something more accessible to the weekend wrench turner, that doesn't change that the manufacturer had explicit guidance that was there to follow.
The "specialization" aspect of things from a mechanical standpoint is a by product of additional complexity and advanced proprietary systems. Consumers (and regulators) ask far more of a modern car than what could be delivered with simpler, purely mechanical systems. Whether it's safety, emissions, reliability, or just features, as those evolve and progress, repairs and maintenance get more complicated and involved.
>> We're building systems
> Someone has to maintain them
Software maintenance and vehicle maintenance is fundamentally different. Vehicles have wear items that need replacing (brakes, hoses, tires, etc), consumables that need to be changed (oil, lubricants, belts, coolant), and parts that are subject to mechanical wear. Systems don't have any of those things.
The closest analogs I can think of would be upgrading a dependency or maybe bug fixes. While some bug fixes might be small changes to fix typos or incorrect logic, some bug fixes may be significant enough to necessitate redesign of subsections of the software. You wouldn't expect your mechanic to redesign your car's brake system because you found it wasn't stopping as quickly as you'd like it.
Which they do, but it took years of setting up governance to get people to agree on what the best best practices were. I mean, at that point it’s not really best practices anymore, because that implies that they have a broad adoption.
I'm not sure what this is supposed to mean. My brother is an auto mechanic and the type work he does constantly blows my mind. Diagnostics, transmission/engine rebuilds, you name it; especially with these newer models.
With the exception of a few, there's nothing special about what we do. I don't see how we're any different than "glorified auto mechanics".
You don't really mean this, do you?
That, and our employers are taking 99% of the value we create, when that figure should be closer to 90%
now you're talking about "society," but you were the one who compared them to cogs to begin with, lol.
In a more traditional software org, the implementer does a lot of this work, but this doesn't really happen with outsource contracts in my experience.
That's what I was getting at. If it was feasible, it would have been done completely by now.
Or IN the country, depending on where the place-of-birth lottery put you.
Want to attract and retain qualified developers? Pay them. If you offer 5% salary increases when moving to your competitor means a 25% salary increase the developers will move.
Can't afford it? Maybe you should cut those that suck off developers' teat.
Average developers are not making $250k/year cash + guaranteed bonus + bonus + options.
When I am looking at my friends and group them into devs and non-devs: devs make significantly more money, I am really jealous of that, because I am a business guy myself.
In my eyes devs are overpaid: because there are not enough of them in the market they can be picky and choose. The more people study CS, the more supply will close this gap again.
In the project that I am working in the business people and devs all contribute a lot of hard work and many hours to the success - why are the devs paid so much more?
Because you clearly are struggling to hire developers at the prices you want to pay and you are not struggling to hire "business people" at the prices you want to pay.
In either event you are paying developers shit. When an average junior developer starts getting paid what an average finance banker gets paid post school and in 10 years an average developer rising at the average rate in an org gets paid what an average person in finance who is rising at an average rate in finance org, then maybe there would be something to write about.
So the shortage is not only in having enough developers but having enough good developers. And that's tough given how vast the industry is, and how fast it moves.
The thing is... this was true in the 90s, was true in the 00s and was true in the 10s. Yet we are here, shortage in developers after 30 years of everyone and their dog studying software engineering.
The true "shortage" is really for developers with 3+ years experience who can "hit the ground running". Most companies will only make limited commitment to junior engineers, favoring mid and senior level developers.
Yes. Corporate management wants instant gratification. Not sending people to training classes. World's smallest violin plays.
> Team A hired a junior dev, onboarded them, six months later they were productive and left for another job. Between the costs of hiring, onboarding, and lost productivity for the rest of the team, and wages for the employee, we've realized a net loss of of $150,000. The lead and manager are saying if we were to hire another junior dev, it would set the project *back* by another quarter from its current delayed estimates.
> Team B is still looking for a mid or senior to hire, but unlike team A they are only slightly delayed from the readjustments after taking into consideration not hiring someone.
Yes, they'd like to have someone hit the ground running... but they'd really rather not incur losses and slipping estimates from losing employees.
There's a sense of entitlement from many employers. They expect that the people they want will be available at short notice at the wages they want to pay. And that they won't have to fight to keep them. That seems to no longer be the case.
If they are regularly turning over that fast that's a red flag that there's problem inside your org that need to be addressed.
You've got a small, IT team which includes some bespoke software to keep local companies running... you know, the web pages or data processing requests. There's a SaaS product that's the regular income, but its not that much. You're paying competitively for the area - about 2x the average per capita income for the area for a junior dev (per capita income is $28k, you're paying $55k - compare; per capita income in Minneapolis is $40k (Glassdoor: https://www.glassdoor.com/Salaries/eau-claire-software-devel... - make sure to look at the 0-1 years of experience)). Your clients are local companies in the neighboring counties.
There's a new junior hire from the local college... and a few months later, their interviews for Amazon in Minneapolis pan out and they're gone.
There's no way that you can compete with Amazon in Minneapolis.
Is that a red flag that the small company can't pay Amazon wages? Should the small company close up shop instead?
Do they try hiring another junior dev from a local college... to have them move to Minneapolis also? Or do they just put out a req for a mid or senior who wants to live in northern Wisconsin where you can go fishing after work on a small lake and settle down?
All of the "you're not paying enough" means that the small companies are expected to pay big tech wages... and they can't.
They close up shop and now the other clients are going to need to go to the larger consultancies for their work... or not do it at all.
Yes, this is globalization played out with software developers... even if its just companies that are a few hours away by car for a move.
This boils down to "can / should every developer be expecting to get wages equal to Amazon?" Can the company afford to pay the junior dev $70k? $80k? $90k?
Likewise, "can you hire a junior dev with no real history of employment and have them stick around for a year when given alternative offers from a tech company?"
If the answer is "no", then why are people complaining that these companies aren't hiring junior devs and training them and instead deciding to not incur extra costs while they wait for someone who will add to their team for a few years rather than a few months?
Whose fault is it that I left after 14 months?
I completely understand hiring managers that limit themselves to looking at devs with 3+ years of experience, because it tends to filter out folks that just can't do the basics of the job despite their credentials.
Personally, I do like to hire juniors and help them grow their skills and their careers, but I need to see at least basic coding skills and a problem-solving mindset up front to make it worth the risk and the investment of time.
You would think that it would eventually lead to some stopping point, but there are additional funnels and issues. For example, finding professors in university to teach software engineering is hard, because all of the people graduating from their universities in software engineering know they can make much more money in the industry than in education. Places like Stanford or MIT (who are already trying to be selective on purpose) can afford it, but community colleges or even high schools can't give them 1/3 of what they would make otherwise.
https://www.bls.gov/ooh/computer-and-information-technology/...
I have always been a bit perplexed by the distinction. What are examples of "Computer Programmer" jobs in the US? Why would you want two distinct classes of "software creators"?
There was also a distinction at one time between what amounted to "people who wrote code" and "people who designed software". The writing code was the 'lower' of the two and the 'design' description included overseeing the other classification.
You can see this by poking at the Wayback for this page:
* 2012 - Programmers & Developers ( http://web.archive.org/web/20120416044322/https://www.bls.go... ) (and a catch all "Web Developers" with a bunch of other stuff - maybe a holdover from the webmaster?)
* 2014 - Programmers & Developers & Web Developers ( http://web.archive.org/web/20140627205116/http://www.bls.gov... )
* 2021 - Programmers, Developers, & Web Developers and Digital Designers - http://web.archive.org/web/20210331093730/https://www.bls.go...
----
Another way of looking at this is https://www.bls.gov/oes/current/oes_stru.htm#15-0000 and the history of that page (which goes back even further).
Back in '07 ( http://web.archive.org/web/20070111041207/https://www.bls.go... ), there were Computer Programmers; Computer Software Engineers, Applications; and Computer Software Engineers, Systems Software.
So, it really is a change of "this is how businesses and government see the "Computer and Mathematical Science Occupations". Lumping it all together isn't necessarily the right answer. The titles that we've got that don't actually map to what we do doesn't help.
The answer to this question in the article -- make sure you've thought about what a technical career track that includes advancement is within your organization -- is part of the picture, especially at the senior level.
If you want advanced skills, be ready to advance people.
And that may even include preparing staff/extrasenior engineers to actually train juniors and even seniors in skills that you want rather than expecting skilled labor to show up preformed at your doorstep so you can externalize the cost of thinking through how your talent supply works (as attractive as that option will always remain... if one can get away with it).
It's not always an easy problem to solve though, you need a domain and software platform challenging enough to have room for growth and advancement, without shooting yourself in the foot by making it too difficult to hire developers for. Some domains just aren't that challenging, and building simple and robust software is usually preferred to building over-engineered and challenging software. You may just genuinely have a boring software company that can't hold on to certain types of developers very well.
At least at my company, Principal Software Engineer is considered a technical/individual track role, and my assumption was that Principal/Staff Software Engineer at most companies were. Is that not the case?
Propaganda like "job shortages" are a nice way of saying "we need to import more workers", whilst rejecting hundreds of domestic applicants.
It’s extremely hard to justify investing in junior engineers when the trend in our industry is to jump between jobs every 1-3 years. What’s the point of hiring and training/mentoring anyone if the industry average tenure is less than, say, 5 years?
I think calling it artificial is going a bit too far.
At least from my perspective, our entire industry is relatively new (if you look purely at the average / median years of experience in out industry).
5-7 years is often considered “senior”, while in other industries it can take 10-15+ years to really be considered “senior” in your role.
It’s not surprising that many companies want “senior” level experience since “senior” really just means “not a beginner” at many companies. And not surprising that companies are reluctant to hire junior devs when jumping between jobs is so commonplace.
Employees job hop to get raises and title changes. If employers were more willing to invest in anyone, not just Juniors, this wouldn't be as much a problem.
Some people do want to job hop a lot, but many don't. This industry is actively hostile to the people who might otherwise be loyal to their employer, because it does not reward loyalty at all.
That said I have known peers to go in and say they are looking at leaving and all of a sudden a solution is found…
There are companies where the value of a programmer isn't the same as the value of a programmer in another company.
There is no way for small SaaS company with revenue of a few million overall can compete with the amount that a tech company with the revenue of a million per employee is the norm.
Firms don't want to pay the wages of experienced developers.
Firms don't want to train inexperienced developers.
Thus you find the young developer who thinks that old developers have it made and the old developer who wishes they were young.
note: I am a 3x entrepreneur and my opinions are based on my 2 decades of experience in IT.
> "their unemployability is exacerbated by their attitude problems"
I'm trying to remain polite about this, but with the tone and attitude you strike, I'm having a hard time taking your opinion for anything other than bitter frothing. Maybe you can elaborate on why you believe they're entitled, have attitude problems, or are brats.
Since you asked, I speak with the experience of starting 3 businesses across Pharma, Defense and Media industries. I have also been involved in hiring multiple people across sectors, both in tech and non-tech jobs. As you also know, for defense that involves White-as-Wonderbread US citizens only, I also have interviewed almost exclusively from a certain complexion-gender combination club. Thus have formed my own pattern recognition, with an n of several hundred. If you are open to listening I can share a few illustrative anecdotes. Admittedly my posts are just opinions as I can only offer my own perspective. Although this study, and multiple others, seems to support my viewpoint.
p.s. Truth hurts.
On the other hand, pharma as a concept certainly needs to exist to save lives. As a Canadian, pharma is not so bad here, but I believe their existence as a for-profit* entity is contrary to the purpose of universal healthcare, which I think is a common enough sentiment. American pharma, however, actively profits from the inequality inherent to the (rather evil) lack of universal healthcare system. Any positives for society seem strictly incidental, as exemplified by the price of insulin.
I also agree with your point regarding profiteering. This behavior can be observed in many industries, not just pharmaceutical, but it seems a more egregious violation when it affects our health or the well-being of someone we know.
Your comment grabbed my attention because I couldn't immediately think of anything to support the sentiment of it being immoral to work in the pharmaceutical industry so I was naturally curious to find out.
Thanks for taking the time to share your perspective.
2. I know a number of good developers that are respectable, they just don't have the work experience in the form of "Worked at X for 2 years". A quick gander at github can reveal a number of highly skilled projects done out of self creation and not sourced from a company.
3. I haven't come across many "self entitled" programmers, but certainly many self entitled managers and business owners whom wave their hands around in the air acting like they know something they don't. Too many MBA's and people running companies they know little to nothing about, and base their "practices" almost entirely off confirmation bias. Managers and owners are by their nature more prone to incompetant brattiness - humans like to think power = competance.
4. Software dev has become more like making music - everyone does it, very few get a record deal and make good money. Whether the music is 'good' isn't much of a relationship with having a job in it or not. Plenty of bad devs with good resumes.
Entry Level Engineers - Easy to find but expensive to train
Mid level engineers - Difficult to find but minimal training required
Senior engineers - Extremely difficult to hire almost no training required
For a software team to be successful you need at minimum a strong mid level to keep everyone moving in the right direction but it's preferable to have a senior level engineer.
I'd recommend everyone heavily invest in growing the people they have instead of playing the 'lets hire a senior lottery'.
How much will that training cost in terms of time spent hiring and onboarding over the duration of the project?
What is the productivity loss of doing the "lets hire a senior?" ... and not incurring the other expenses of training entry level who leave after a year?
There really aren't that many options 1. Invest in training the people you have 2. Offer some novel incentives 4 day work week or something. 3. Compete on salary by paying more
In a lot of organizations 2 and 3 can't be changed by the people doing the hiring.
I have 20+ years of career in R&D, consulting, startups and multinationals, publications in 1-tier conferences, lots of Java/PHP, a bit of Cloud, Big Data and ML experience. I grew up to IT Director, downshifted to SSE at a unicorn.
I've been searching for a new job for over half a year in Europe. Mostly remote. I am willing to do legacy programming. My only requirement is to work on a product creating real value. But I always bump into artificial niches: GDPR/CCPA/KYC compliance, all sorts of crypto, yet another social network, data mining users, traiding floor software... Exactly the sort of things I am tired of.
There is no shortage of software developers, but a big shortage of decent work.