There's plenty of people for whom it's not at all obvious - in particular, people who're being sold educational materials and courses so they can get those big tech salaries.
Edit note: Some of the points in this article are really good so this is mostly just a rant on coding bootcamps from a bitter Computer Science grad who had to work 20 years to get where I am :)
Meanwhile to some of these points... we had a client recently where we built their mobile app. Large app, over $50,000 with a full API backend. Not a simple hello world. And then they hired someone straight from a boot camp to manage their mobile app, API, website, everything. And gave that person a Director title.
Yes, I know, titles are cheap at startups. But I guess you can learn to code in three months and not only get a job but apparently be director level.
Until you have to hire more team members in which case you may have a problem. That is how companies get absurd things like three different technology VPs and a CTO in a 10 person company. (exaggerated obviously)
Or your environment is an absolute flaming disaster but your manager gives you a bad review because they don't understand why someone would want to write unit tests to run across distributed databases to confirm consistency and correctness. So, your environment remains in a broken state, reports have wrong numbers, and development moves at a snails pace because of constant issues. And the person that actually knew enough to identify and fix the problem is fired for insubordination.
Not saying I disagree but... out of curiosity, what do you think we should charge for an API + native iOS app + app landing page / website + QA? I know you don't know the details of the specification but ballpark.
1 dev for backend and api, 1 dev for phone app, 1 qa, outsource landing page. 3 months for the project. Monthly spend: 3.5 x n where n is a proxy for quality and probability of successful project completion; $5k, $10k, $20k.
not sure that many of them are truths. Seems more like like millennial speak. "Things are hard!" no...relative to you and your experiences it might be the hardest thing you've gone through, but in absolute terms, they aren't hard. Learning programming has never been easier. Us oldtimers can tell you stories about "Hard".
As a millennial I reject that categorization and we need to stop using it. Millennial is too broad. I'm a millennial and I learned to program in the mid 90's from actual paper books. I share almost nothing in common with the people graduating college right now.
Edit: Also, for every "life is hard" millennial I have met many hard working, extremely intelligent, and charitable ones. Some of whom need to work multiple jobs dealing with the fact that our generation has almost no upward mobility unless you do something like learn to code. The fact that a terrible houses cost amounts of money that years ago would get you a mansion (even when adjusted for inflation) and where spending $100k on college does not even remotely guarantee you a job. Where pensions don't exist and retirement is a pipe dream. Every millennial I know over 25 has been laid off, some multiple times.
Edit 2: furthermore, in the United States, my generation has never known a time where we were not at war. And we are the ones being sent to those wars.
I wasn't the one generalizing all millennials. The post I was replying to was. My post is specifically about not generalizing.
Also, to think one person (the president) can magically fix decades of compounding problems is naive. It's also naive to think we are isolated from the rest of the world and we can magically unlink our economy from it. With that said, about 50% of millennials voted last election and 83% are registered to vote. So I'd say a large number of us did vote for the person we think will change things.
Edit: and almost without exception the millennials I know who didn't vote did it because they felt neither candidate was acceptable.
you were claiming that a generalization doesn't hold for specific cases... which will never invalidate a generalization, because a generalization works "in general" not for specific cases :)
you only get to vote for the president?!
do you live in a democracy where you can vote to get things changed? or perhaps people in america just like it that way.
maybe it is naive, but other democratic countries are moving ahead with more progressive ideas.
> you were claiming that a generalization doesn't hold for specific cases... which will never invalidate a generalization, because a generalization works "in general" not for specific cases :)
Very true
> you only get to vote for the president?!
We vote for the president, senate, congress, and local representatives. We rarely vote for individual issues (like say Brexit) on a national level, those are usually decided for us.
> do you live in a democracy where you can vote to get things changed? or perhaps people in america just like it that way.
maybe it is naive, but other democratic countries are moving ahead with more progressive ideas
America is a Constitutional Republic not a true democracy. We don't even get one vote per person. Our votes are broken up into statistical areas that are winner take all. And I can assure you that many Americans don't like it that way but it is very difficult to change in a two party system. Which is why many people (millennials more than any other group) are pushing to end the 2 party system.
Actually it is harder to learn certain types of programming now than ever before due to the proliferation of incidental complexity and tooling. Take web development frontend for example. Back in the 90s, you could get away with knowing basic HTML and a bit of JavaScript becaus CSS didnt even exist yet. Frameworks were certainly not a thing.
Other forms of systems programming that involve concurrency etc are also newer.
So is cloud. The list goes on...
Every generation faces issues and programming IS hard. It is unfair and condescending to write this office as a millennial concern.
To be perfectly honest, even though you may have a good point, I feel so alienated by the phrasing I'm having a very hard time seeing through it.
What are you saying below that insult and pontificating? "It used to be harder"? "I am better"? "Old people are better"? Honestly I'm not being facetious, I just can't give this comment a constructive spin. What is the essence?
simple, hard is a relative term. Because someone has a harder environment doesn't make them better? not sure how you came up with that implication, if anything, it might make them worse off. Starting programming these days, you have a massive boost over starting it 40 years ago.
It's not a truth that programming is hard. It might "feel" hard for some, might not be for others. Learning programming is really easy these days, and I'm sure will get even easier.
The hardest thing these days seems to be making choices between the absolute abundance of creations that are available in the world of programming.
That is a decent point. To write even a basic web app properly you need to know a half a dozen libraries. To deploy it you need to know even more plus probably know about infrastructure and networking. Then to write the frontend you need to know several specifications and libraries for that as well.
For many applications parallel and concurrent processing is not a nice to have but mandatory and apps can be distributed across hundreds of machine.
I remember reading RFCs when I was getting started. You could learn all of HTTP by reading two RFCs. Now you have to read a dozen if you want comprehensive knowledge of just HTML.
you don't, install meteor, you can be writing a simple deployable web app in no time. Easier than I've ever known it, to the point I've helped non programmers get started with it and they can get productive with it pretty easily and deploy things for real use.
Very few apps need to be distributed across hundreds of machines, but even there, there's so much tech available to make it pretty easy. No need to deal with the details of the nightmare that was RPC / DCOM / CORBA
Meteor just defers the problem until you need to scale. It is also pretty hard to do security well with Meteor (not impossible, it can be done effectively, just really easy to mess up if you don't pay attention).
You also may be right about hundreds but a great many apps need to be distributed across more than two.
Edit: also, for the record, as a millennial I did have to deal with DCOM. Although granted most are shielded from it.
so, it easy until you are super successful and need to scale big? ok...... this is fantastic :) Security isn't that hard, it has a user system built in, which gives you a boost, the problem you are trying to tell be about is, it's really easy to do things client side that you may not be careful enough....
But yes, in the future I expect we have better ways to approach security that will make it easier too.
The security issue is that by default it is easy to accidentally make it so that any user can see and edit every other user's data.
The one Meteor project I worked on at scale we specifically wrote integration tests to try to read and write other user's data just to make sure we didn't have a hole open up. Because we did have a whole open up and we learned from our mistake.
Part of the problem of Meteor is that it is "magic" in a lot of ways. Because so many things are so easy, when something doesn't work the way you want (like there is a performance issue) it is often difficult to figure out.
Learning programming has gotten easier(for the better), because of better tools(finding bugs, debugging etc), better resources(you can google almost any beginner questions and very high probability, you find your solution). However, over the years problems we solve have been way bigger. But if you can solve these problems, then learning the programming aspect of it has actually been easier and better than in the past.
I agree. But the sheer volume of technologies, requirements, and tools makes it a net loss in my opinion. I just recently built my first Android application and even with years of cross platform development experience it was still daunting. Thanks to all the available online resources, I built my application without actually learning how anything really works. So I finished an app, it works, but I still don't consider myself an Android developer. I feel a lot applications are built this way.
Maybe building toy application has gotten significantly easier but actually building a useful application on an active platform is much more daunting.
And really debugging a desktop application 20 years ago wasn't much different than it is now. But now I have to connect through emulators, browsers, etc. There's so much more crap in the way.
how's it a net loss? you said you recently went from zero to a deployed android app? you got software working on a platform you don't even understand fully and have it published to a network of millions and millions of people? How is that not EASY? That wasn't even possible not so long ago.
Was it easier than building a Windows app in Visual Basic in the 90's? No, it wasn't.
But you make a good point. But it wasn't easier because the tooling was better (it wasn't) or the debugging was better (it wasn't) or the whole ecosystem makes more sense (it doesn't). It was easier because I could google for every problem, error message, code snippet, or issue. And that Googling was absolutely necessary.
What's interesting is that I really didn't learn much. Without any access to the Internet I couldn't reproduce it.
I think the conclusion isn't that programming is easier, it's that the Internet is awesome. The Internet makes everything easier -- cooking, car repairs, home renovations, physics, chemistry, etc.
No, it isn't just because of the internet. You can download all the docs and source, and you can learn it in as much detail as you want. Googling was necessary because you were a beginner.
And the tooling has gotten better, without them you wouldn't be able to debug, test your android app without ever owning a phone. This applies to other fields as well. The thing where internet does help is participating in discussions, whether you are a beginner/expert.
> You can download all the docs and source, and you can learn it in as much detail as you want.
That doesn't mean the technology is easier that just means the reference material is more accessible. In fact, I'd argue that in a lot of cases the technology is harder and therefore more reference material, stack overflow answers, and source code reading is necessary.
> Googling was necessary because you were a beginner.
Of course. But many of the answers I found were sort of black magic. The Android project layout is at least 5 times more complicated than it should be. And even many of the answers were not that old and already out of date. I definitely felt that many of the issues I encountered could not have been just figured out my own.
When getting your developer tools and documentation required a CD there was a lot more care put into everything. It feels these days that everything is built on an ever shifting house of cards.
Can we stop with this "programming is hard" business? In a CS program, the programming classes are going to be the easiest ones you'll do. The hard stuff is the math, theoretical computer science and algorithms.
Your statement is valid but your conclusion is wrong. The programming classes will be the easiest one but the average graduate still produces absolutely terrible code, in my opinion. Even my own code from when I was a student wasn't what I would accept as a manager now.
Software development is so difficult that it's hard to teach and most students don't get it -- consequently the classes are far easier than they should be.
A large number of CS graduates can barely program at all.
Being a good developer requires a lot of experience.
The lack of emphasis on software engineering/programming/implementation at my program has been an ongoing complaint of mine. I went to school as an adult, so I know what the workplace needs and I know a lot of universities are missing a critical component of that.
Do you have any preferred resources for getting up to speed on the software engineering side of things? I'm picking up stuff here and there, but always looking for more or for convergence.
I went to a very good school for my computing science degree and they spent a good amount of time on software engineering.
But one of my coworkers is going to a terrible school and I'm literally appalled at their degree program. Without going into too much detail, it's just awful. Anyone taking that program would be better off taking their time and money and learning on their own.
My coworker is very talented developer; she gets A's without going to class and she is specifically going to this school to get an easy computing science degree while working full time.
A good school should teach the foundations of software engineering; what I learned in school was a good foundation for everything I've done since. We learned about agile. We did an entire semester long waterfall project (teaching by explicit example why the waterfall method is terrible). I suspect it's even better and more modern now.
I don't know if there is a good convergence of information. I don't think there is no one-true-way to do software engineering yet everyone proposes their own singular method. The best way to go is often to pick a little bit of experience from everywhere.
Okay I'm being serious here. I'll comment on the main points because I feel like they're pretty much all wrong.
"Learning programming is hard" I just kinda rolled into it as I grew up.
"Self-directed learning is hard" It's automatic for me. I'm interested in things.
"Attending one workshop or a couple won’t turn you into a professional developer." Well yeah. Does anyone think a couple workshops turn you into a professional blacksmith?
"It takes time: You won’t become an developer in 3 months." Fair enough, though I think if you study full-time, have fun doing it, and have a friend helping you a few evenings a week, you can probably be good enough for a junior position by 3 months.
"Finding your first developer job is hard." Is it? Haven't heard that from people.
"Finding any kind of first job in tech is hard." Yeah this definitely isn't.
"Tech interviews are terrifying." Not really. I'm generally nervous for interviews, but not more than is healthy I think.
"Job search in tech is extra long and frustrating." What planet are they on? I hear bad stories about people that did psychology as a study, but tech?!
"Some people won’t make it." Fair enough.
I've stopped reading there because I just can't see what the author is getting at. Is this just me? Or is it perhaps applicable to Silicon Valley specifically, where developers are abundant (are they?)?
To be honest, I think in this case it might be just you. Not everyone - and perhaps in this case not most people - experience(s) the things listed here same way you do. (As a corollary, just because you find something obvious doesn't mean most people or everybody does.)
Plus, you're not really disagreeing with the points raised. You're just providing one point of anecdata, your personal experience, and saying "yeah this can't be right."
Agreed, learning programming (even in great classes under great guidance) is obtuse if not largely inaccessible to lots of people I know or have heard of.
Getting a job maintaining a horrible legacy application or doing soul crushing consulting gigs and GOOD money is easy. Getting a job with a really good tech-driven company and a GREAT pay is hard.
"It’s all about connections" I have restarted life in several different regions and countries with absolutely NO connections, and I always found fair IT jobs with fair salaries.
The magical place where people all over the world unite.
"Job search in tech is extra long and frustrating." What planet are they on?
You might be on to something here. Could it be.. we all live in different places, with different cultures, mindsets, experience, perception, laws, one in a city, one in the middle off nowhere.
I specially like your last point, and you will make even more money if what you produce makes them smarter.
It is all the point of IT: increase the human capacities (computation, data handling and understanding, productivity, communication...). People who already master all of that do not need you so much.
And, depending on where you work, you'll do the plumbing on top of horrible old legacy code you're not allowed to change.
So, more akin to "fixing old, encrusted and leaking led pipes with duct tape. Because, yeah, steel and PVC might work without poisoning you or bursting each month, but we haven't tested them, so...".
The number one tip I always give is to write down everything you think off when you get off topic and start drifting around. I don't know what's happening neurologically, but it trains you to snap back once your train of focus breaks, it might not work for everyone, but I got pretty good results. It's also helped me with forgetfulness.
I use apple's native note application, but evernote looks about the same or better.
The number one tip I always give is to write down everything you think off when you get off topic and start drifting around. I don't know what's happening neurologically, but it trains you to snap back once your train of focus breaks, it might not work for everyone, but I got pretty good results. It's also helped me with forgetfulness.
Another way that might help some people is to write down whatever you are about to drift into, the keep focus until timebox is finished (pomodoro technique).
The best explanations I have are:
As far as I am aware ADDers tend to have shorter stacks (3-4 compared to 5-7 shortterm memory slots).
(My theory.) Many productive ADDers are keenly aware of this and the fact that if it slips now it might never come back until it is too late. This causes stress and you want to follow the train of thought even if it is unrelated to what you should do now.
(I.e.: oops, I see something that reminds me that I need to call <x> today, I know I'll forget it as soon as I focus on my code again. Write one line: call <x> about <y>. Continue work. When your timer finishes: do call <x> immediately after stopping work (somewhat different from pomodoro but adapted for this kind of ADD).
So in short: if you can, write down the interruption, then finish whatever you were doing but use a "timebox" to remind yourself to stop, "snapshot" your work (comments, journal, commit as far as possible) and then take the call, stretch, grab the water or coffe you tried to interrupt yourself with and be on track again.
Of course this is the ideal flow. I have sympathy for people with ADD as it seems they have to work harder and smarter to get the same results as others.
You have to take into account a person's expectations of themselves as well as the scope of what they are trying to learn. If your expectations are overly ambitious, it's hard. If you are trying to learn to code some narrowly scoped solution, then its simple.
Obviously, or the author wouldn't have written it in reference to their own struggle. On top of that, it's easily demonstrable that others struggle with self-teaching: if learning alone is so easy, why are coding bootcamps and workshops and university degrees so popular?
Good point. I always pinned it down to people lacking self confidence. I assume programming can be pretty scary when your bulk experience has been non-stem.
Teaching yourself is hard; if it wasn't, we wouldn't have schools or tutors, or at least as many of them. Most people aren't autodidacts. One's IQ and Conscientiousness probably dominate one's ability to do it, but even so, things like genuine interest play a big part too. Try teaching yourself a subject outside of tech sometime and see how far you go without that much interest. Then there's a time and energy component. A lot of people wake up and go to work, then come home worn out, or at least at less energy than earlier in the day, and they probably have other things to do for their remaining 1/3 of the day besides devote it to self-study.
At least for programming, self-learning most things is super cheap, so the cost barrier isn't as big, but again, self-learning is hard, which is why so many pricey bootcamps have popped up.
Who would be peddling the myth that programming is easy? Those who sell boot camps of course but who else?
I like to liken it with playing an instrument. It's easy to make sounds but how long before someone will pay you to play for them? That's programming (and sports, and cooking, and any other craft that is superficially easy but deep and complex crafts to perform professionally)
I sometimes do. I understand and agree with the authors point. On the other hand, I feel like I'm well paid in a very comfortable job for doing stuff I already liked doing. I will likely never get fired from this job and have numerous other offers without looking. From that perspective, a job in programming is "easy".
I'm not missing that there are hard things and to be honest, today is a particularly difficult day, but I understand when people say it's an easy career path.
Yeah I also think I have an easy life/career but I'm already an experienced dev. That we get paid handsomely to have a comfortable career is, I think, a sign that the job is hard, not easy. Pro athletes live pretty comfortably too - it's getting there that's hard.
Yes, and when someone is a great musician they "make it look easy." And to them, it is easy, because they put in so many hours practicing. Once you've achieved an advanced level it becomes easy, but it's never easy to get to that level.
Part of the issue is there is a lot of dissonance behind the word "programming". People tend to conflate it with "Software development". I think it is more understandable if you consider programming in similar terms to what people mean when they use the words "writing" or "mathematics".
Writing, as an occupation is difficult not everyone can be a professional writer. However people can be taught writing fundamentals relatively easily.
In the same way becoming a professional programmer is difficult, learning programming fundamentals not as much. For whatever reason because of all this dissonance people think learning programming means immediately going out and developing software. Writing isn't taught by cranking out a novel.
You can go to a summer school aka a bootcamp to improve you're written English. I would not expect to become a journalist or an author or copy editor immediately afterwards. Maybe there is some dishonesty on the part of the people who run bootcamps I'm not sure...
I don't know if I ever describe programming as easy, but I know I've told people that coding is "the easy part" of software development. (The hard part is the software engineering. Any idiot can write code, but it takes a particularly attentive, practiced idiot to implement 100kloc in a maintainable, efficient manner.)
Hard? I never finished a paid project in Grad school because of a compiler error (PL/I 'copy like' bug).
On my first job they gave me a paper tape containing the binary to control a robot... no source available... and I had to fix a bug that caused the robot to do something wierd (atan 0/0) on a computer with no "developer software" (aka no compiler, libraries, etc. ... just a raw machine with a front panel of switches).
On my second job I spent a couple days trying to figure out how a tape drive delivered duplicate records (worn tapes caused hardware 'reread').
On my third job I spent a week tracking down a memory error in a mainframe memory that caused many crashes on a computer used by over 70 programmers (every crash resulted in hex listing of 4 megabytes of memory (2 ft stack of paper) delivered to me).
On a later job I had to hand-recover a hard drive that contained all of our software when the "extended second drive" died, causing the machine to fail to boot (had to write code to read the raw drive by controlling the electronics).
I was nearly fired because a C compiler contained a bug that took me a week to find (bad code generation). The boss thought I was unable to program and had no idea what a compiler was, only that my project was late.
One boss was newly promoted. She forced me to end a several-year research project, threatening to fire me if I didn't. She was fired for the threat but I still lost the project.
One boss decided to fire me so he lied on my performance report. He falsely quoted comments from other managers. Even when the other managers called HR and gave me glowing reports HR refused to change the result. Prior to that all of my reports were highly rated.
At one job the whole project (fixed cost, 5 programmers for 5 months) ran long (10 programmers 18 months) and they fired all the programmers.
One of my open source projects forked twice in one week over a dispute about goals, with the side-effect of destroying the community.
One of my jobs was to take over code from a programmer that died. He used the GCC -MM option to automatically generates C++ makefiles for code which generated C++ and then generated makefiles from that code. Not a line of comments anywhere.
That C++ code generated classes DURING THE CALL SETUP of a procedure (who knew you could do that?) so classes that occur nowhere in the software "appear" magically at runtime. Again, no comments anywhere.
I spent a day applying the brand-new "Design Patterns" to our software on my whiteboard. The chief designer saw it, got angry, and I got fired.
I was hired to move teaching software (400 Flash Videos) from laptops to the new iPad... and then Jobs announced that the iPad would never run flash. Goodbye job.
I maintain open source software that has run on Unix-based systems since the early 80s... and then stopped working because GCC switched to a "new C standard" that changed the meaning of "inline", breaking the build everywhere.
I was hired to write "pinch zoom" for a touch display and camera setup. The camera driver only worked on Linux, the touch display driver only worked on Windows. Neither manufacturer would port their driver, nor release their driver source code.
My AI project required recognizing lugnuts... did you ever try to find "big data" for lugnut images? Or try to create a "big data" dataset?
I taught Data Structures at a University. At a Google "job interview" I failed to remember the complexity of an algorithm... and never got the job offer.
I have many more "war stories" but they all have one thing in common. Programming isn't hard, in fact it is often the only joy on the job. But being a programmer is really hard for a lot of reasons you won't find in boot camp.
I love programming. I turned down 8 job offers to become a manager (or, as I say, "retire into management"). I love programming. I do it every day. And eve...
> I taught Data Structures at a University. At a Google "job interview" I failed to remember the complexity of an algorithm... and never got the job offer.
The large majority of applicants at the big firms are not hired so this may be entirely unrelated to your outcome. But surely somebody who has taught data structures could analyze an algorithm rather than needing to simply remember the runtime complexity, right?
Yes, I can derive more than just the worst case complexity (which was all he wanted) as I did in class. But the interview was short and the interviewer had clearly just graduated from college where Data Structures was probably his last class. I can't really call it an interview as none of the interviewers bothered to look at my resume despite having brought a copy with them. It was really just a "pro-forma pop quiz" and a waste of time. They did give me a free Google t-shirt as consolation prize.
I'm trying to teach myself foot juggling (a.k.a. keepie uppie), fundamentally it's not hard, it just takes a lot of practice. Many of my friends growing up were really good at it. I could never understand how they were so good and I couldn't do it at all.
I'm not sure whether programming is hard or not, but when my friends were practicing keepie uppie in their back yards, I was practicing programming
There are concepts that are hard to understand in the abstract, but one of the things that a good programmer has practiced is how to understand those kinds of concepts
10,000 hours is an overly literal idea, but IMVHO the core requirement for a large amount of intentional practice is the most significant hard truth about programming
I think the biggest source of confusion is the question of semantics. When people sit down, even here in this thread, there's this distinct undercurrent where neither side has a clear idea what the other means by "hard" and "easy".
Programming is "easy" in the sense that you don't need to be a savant to do it. A lot of software development is built ontop of very well designed tools and abstractions which means you can work (in some fields) with computers without having a college understanding of higher level maths or electrical engineering. Programming is "easy" in the same way any trade is easy. With instruction and practice most (if not all) people can learn to some degree of professional competency. In the same way one might learn to become a plumber or an electrician a student can learn to be a "developer" (this I'd argue is separate from a "computer scientist").
On the other hand programming is "hard". It is "hard" in the sense that it's completely alien from most people's day to day. In the same way most people don't think about what it takes to wire a house to code, operate a lathe, or fix a broken pipe, most people don't ever need to think about SDLC or debugging strategies. Programming is "hard" because if you try to learn from fundamentals you quickly exit the nice tools and abstractions that make the professional world go and into the maths that are considerably less trivial. Programming is "hard" because of a cult of people determined to ignore the above reality and tune interviews to be time intensive and rely almost exclusively on your knowledge of university concepts as opposed to day to day tooling.
I think it's important to remember that the field is still very nacient and the responsiblities under "programmer" still vary widely from job to job and industry to industry. Until this matures, a better jargon is developed for describing roles, and a more realistic attitude is reached in terms about what skills are needed for said roles I don't see how we can avoid sending mixed messages like the ones that frustrate the OP.
I don't know if anything similar exists in other coutries, but in France there is a growing "workshop" trend - which are basically short web curriculums (a few weeks learning Rails, jQuery, Symfony or others) - to turn anyone into a "developer". I've heard many salesmen or others saying "I will learn it". They don't realize how hard it is. You can't simply write any program with pyramids of jQuery callbacks. You need automated testing, fuzzy string matching, automata theory, murky x86_64 assembler and much more.
"Job search in tech is extra long and frustrating:
For tech jobs add about 3-5 more interviews + technical tests, online and onsite, if you even make it past the first step because a lot of times you will never hear from a company after sending in your application, or the company will stop responding to your emails at some point in the interview process. The tech hiring process also seems to take about 3 times longer than in other industries. Brace yourselves!"
Sadly this is a very common refrain. And unfortunately this is now true even if you have years of experience. Hiring is just plain broken. Full stop. This is also a fairly recent development in the industry. The hiring process was not broken like this 8 or even 5 years ago.
It's sad that an awful and unprofessional experience is now the norm and something that should be expected. I blame recruiters for much of this unprofessionalism but I also blame the companies that either permit such unprofessional behavior or else are simply unaware at how bad or broken their process is.
Its strange that the industry seems to have whipped itself into such a neurosis about the possibility of "false positives" that it has created a uniquely miserable experience that seems to embrace absurdity and disrespect as a matter of course.
The fact that industry seems to collectively trend hop - Whiteboarding! Take home projects! Hacker Ranks Tests!
This "everyone else is doing it" mentality only serves to perpetuate this.
> It's sad that an awful and unprofessional experience is now the norm and something that should be expected.
That's because there are a lot of awful, unprofessional programmers out there trying to get jobs and we need a way to filter them out. Even then these methods only filters out the worst of the worst, the developers that can solve fizzbuzz level problems. We either have to put up with this or have some sort of industry certification.
>The hiring process was not broken like this 8 or even 5 years ago.
All of this was happening 8 years ago, it was even worse then with "why are manhole covers round" levels of stupidity.
>"That's because there are a lot of awful, unprofessional programmers out there trying to get jobs and we need a way to filter them out."
And asking people to "to reverse a binary tree via Hackerank or asking people to spend 4-6 hours on a "homework assignment" does very little to filter awful or unprofessional people.
>"All of this was happening 8 years ago, it was even worse then with "why are manhole covers round" levels of stupidity."
No that was the beginning. The beginning of the "Google does this so we should too" mentality.
That's because there are a lot of awful, unprofessional programmers out there trying to get jobs and we need a way to filter them out.
Agree. After being told a couple of times how happy <company> are to finally see a real, competent programmer when I enter the room and just answer simple questions I've come to accept that there must be a few people out there pretending to be programmers in their applications.
Even then these methods only filters out the worst of the worst, the developers that can solve fizzbuzz level problems.
Well, the problem is that the sum of these methods (clueless(?) recruiters, keyword filtering etc) often filter out me before I even get to an interview.
The ones who hire me tend to be very happy though :-)
> After being told a couple of times how happy <company> are to finally see a real, competent programmer when I enter the room and just answer simple questions
One of the more depressing experiences I've had is heading into an interview (on the interviewer side) after seeing someone completely fail a fizzbuzz test. Everyone looks at each other thinking "well maybe if they knock it out of the park during the interview...". It's like dating as an extremely lonely person.
> Well, the problem is that the sum of these methods (clueless(?) recruiters, keyword filtering etc) often filter out me before I even get to an interview.
I've never had a problem with this, except maybe lately with angular. I structure my resume to include the keywords but in a format actual hiring managers want to see, eg, Experience with a number of MVC frameworks including ASP MVC, Monorail, Ruby on Rails (ROR). I don't know if that's the reason it's never been an issue for me, but I hope it helps.
>"One of the more depressing experiences I've had is heading into an interview (on the interviewer side) after seeing someone completely fail a fizzbuzz test. Everyone looks at each other thinking "well maybe if they knock it out of the park during the interview...". It's like dating as an extremely lonely person."
This is exactly the situation that a recruiter should be preventing. That person shouldn't have made it through door. Your process was broken.. Unqualified people applying for jobs is not unique to the tech industry.
The interview was immediately after the technical test, it's either that or you have to schedule people to come in again, which wastes the time of the good candidates.
From the outset, Programming is hard. Anyone who says it is easy is missing the salient point of programming.
That salient point is that you as the programmer have to gain an understanding of the target field you are programming for. Programming is about solving problems for someone, not just writing code to a specification.
A lot of the comments, so far, are talking about programming languages, programming tools, programming frameworks.
These are NOT programming, these are the tools you use to program an adequate solution to your problem. Unless you are continually gaining knowledge in every field that you are programming for, you are staying a novice. This does not mean that you have to be a subject matter expert, but it does mean that you have to gain enough knowledge in that field to be able to provide a solution for the subject matter experts (or others that will be dealing with your solution in that field).
Too often, I have found that "so-called gun programmers" have not only NOT understood the the field they are providing a solution for, they dictate what that field is supposed to "put up with".
I have spent nearly 40 years programming and I have come across many people who can churn out code much faster than I, but many of those cannot provide an adequate solution for the problem at hand. They cannot and have not been taught to think outside the "box".
I have also worked with many who cannot churn out the code but what they do give you is (at the minimum) an adequate solution to the problem at hand. They effectively solve the problem as it actually is.
Many years ago now, I took over the maintenance of a small system that was being used by 6 or so people. By the time I was finished, it was handling 60+ people simultaneously in at least 7 different fields for a single telecommunications project. The reason I tell this is for the following:
The base system in use was that venerable old girl, MS-Access 2000. This was one of the constraints of the system.
The original programmer was a highly paid foreigner (British) who basically told the subject matter experts that this was how they would have to work.
Part of the process I undertook was to find out what and how they needed to work and rebuilt the system to do it appropriate to the needs of the project. The satisfaction and appreciation was very encouraging.
Once this was seen, each of the other functional areas wanted to get on board. The application was then expanded to include these additional groups.
I got various complaints from various people about how hard some of their tasks were because MS-Access could not do want they needed. They had been told this by management. Finding out what they needed became the incentive for providing a solution. That meant for one person, I cut their after hours report production down from 3 to 3.5 hours every night to about 3 minutes (included production of reports, formatting, emailing to international management, emailing to national management and local report printing). His wife and daughter were very happy to get him home at night at a reasonable hour.
Programming is understanding the problem at hand and providing a workable, efficient solution using the tools at hand. This means that you have to be able to understand the subject field with enough detail to provide that solution and make it easy for the end user to use.
Early in my working life, I had people who encouraged this mindset and multi-discipline learning. Not everyone is capable of this, or even wants to do this. This then leads to the shmozzle that is the industry today and its continuation is the outworking of many of the major IT industry players who are interested only in the easiest way to make a profit.
Programming is hard because you have to become a "jack of all trades" as well as an expert in your own. You have to be able to document all the assumptions that have controlled your development activity, the "whys and wherefores", the paths taken and in some case the paths no...
88 comments
[ 1131 ms ] story [ 4631 ms ] threadThere's plenty of people for whom it's not at all obvious - in particular, people who're being sold educational materials and courses so they can get those big tech salaries.
Meanwhile to some of these points... we had a client recently where we built their mobile app. Large app, over $50,000 with a full API backend. Not a simple hello world. And then they hired someone straight from a boot camp to manage their mobile app, API, website, everything. And gave that person a Director title.
Yes, I know, titles are cheap at startups. But I guess you can learn to code in three months and not only get a job but apparently be director level.
Truth be told: Titles are meaningless, the only thing that matters is the pay.
Giving impressive titles is simply a very cheap and efficient way to make naive young employees feel important and valued, while really they are not.
#ForwardDeployedEngineer
3 x 3.5 x $20k = $210k
With that said though, it didn't take us three months. But we had slightly more people than you gave too.
Edit: Also, for every "life is hard" millennial I have met many hard working, extremely intelligent, and charitable ones. Some of whom need to work multiple jobs dealing with the fact that our generation has almost no upward mobility unless you do something like learn to code. The fact that a terrible houses cost amounts of money that years ago would get you a mansion (even when adjusted for inflation) and where spending $100k on college does not even remotely guarantee you a job. Where pensions don't exist and retirement is a pipe dream. Every millennial I know over 25 has been laid off, some multiple times.
Edit 2: furthermore, in the United States, my generation has never known a time where we were not at war. And we are the ones being sent to those wars.
I don't live in the US... perhaps vote for someone who will help change it to a better system?
Also, to think one person (the president) can magically fix decades of compounding problems is naive. It's also naive to think we are isolated from the rest of the world and we can magically unlink our economy from it. With that said, about 50% of millennials voted last election and 83% are registered to vote. So I'd say a large number of us did vote for the person we think will change things.
Edit: and almost without exception the millennials I know who didn't vote did it because they felt neither candidate was acceptable.
you only get to vote for the president?!
do you live in a democracy where you can vote to get things changed? or perhaps people in america just like it that way.
maybe it is naive, but other democratic countries are moving ahead with more progressive ideas.
Very true
> you only get to vote for the president?!
We vote for the president, senate, congress, and local representatives. We rarely vote for individual issues (like say Brexit) on a national level, those are usually decided for us.
> do you live in a democracy where you can vote to get things changed? or perhaps people in america just like it that way. maybe it is naive, but other democratic countries are moving ahead with more progressive ideas
America is a Constitutional Republic not a true democracy. We don't even get one vote per person. Our votes are broken up into statistical areas that are winner take all. And I can assure you that many Americans don't like it that way but it is very difficult to change in a two party system. Which is why many people (millennials more than any other group) are pushing to end the 2 party system.
Other forms of systems programming that involve concurrency etc are also newer.
So is cloud. The list goes on...
Every generation faces issues and programming IS hard. It is unfair and condescending to write this office as a millennial concern.
What are you saying below that insult and pontificating? "It used to be harder"? "I am better"? "Old people are better"? Honestly I'm not being facetious, I just can't give this comment a constructive spin. What is the essence?
It's not a truth that programming is hard. It might "feel" hard for some, might not be for others. Learning programming is really easy these days, and I'm sure will get even easier.
The hardest thing these days seems to be making choices between the absolute abundance of creations that are available in the world of programming.
I disagree. If only because as programming has gotten easier, what constitutes even a simple app has gotten a lot more demanding.
For many applications parallel and concurrent processing is not a nice to have but mandatory and apps can be distributed across hundreds of machine.
I remember reading RFCs when I was getting started. You could learn all of HTTP by reading two RFCs. Now you have to read a dozen if you want comprehensive knowledge of just HTML.
Very few apps need to be distributed across hundreds of machines, but even there, there's so much tech available to make it pretty easy. No need to deal with the details of the nightmare that was RPC / DCOM / CORBA
You also may be right about hundreds but a great many apps need to be distributed across more than two.
Edit: also, for the record, as a millennial I did have to deal with DCOM. Although granted most are shielded from it.
But yes, in the future I expect we have better ways to approach security that will make it easier too.
The one Meteor project I worked on at scale we specifically wrote integration tests to try to read and write other user's data just to make sure we didn't have a hole open up. Because we did have a whole open up and we learned from our mistake.
Part of the problem of Meteor is that it is "magic" in a lot of ways. Because so many things are so easy, when something doesn't work the way you want (like there is a performance issue) it is often difficult to figure out.
Maybe building toy application has gotten significantly easier but actually building a useful application on an active platform is much more daunting.
And really debugging a desktop application 20 years ago wasn't much different than it is now. But now I have to connect through emulators, browsers, etc. There's so much more crap in the way.
But you make a good point. But it wasn't easier because the tooling was better (it wasn't) or the debugging was better (it wasn't) or the whole ecosystem makes more sense (it doesn't). It was easier because I could google for every problem, error message, code snippet, or issue. And that Googling was absolutely necessary.
What's interesting is that I really didn't learn much. Without any access to the Internet I couldn't reproduce it.
I think the conclusion isn't that programming is easier, it's that the Internet is awesome. The Internet makes everything easier -- cooking, car repairs, home renovations, physics, chemistry, etc.
Software development is a bit harder.
And the tooling has gotten better, without them you wouldn't be able to debug, test your android app without ever owning a phone. This applies to other fields as well. The thing where internet does help is participating in discussions, whether you are a beginner/expert.
That doesn't mean the technology is easier that just means the reference material is more accessible. In fact, I'd argue that in a lot of cases the technology is harder and therefore more reference material, stack overflow answers, and source code reading is necessary.
> Googling was necessary because you were a beginner.
Of course. But many of the answers I found were sort of black magic. The Android project layout is at least 5 times more complicated than it should be. And even many of the answers were not that old and already out of date. I definitely felt that many of the issues I encountered could not have been just figured out my own.
When getting your developer tools and documentation required a CD there was a lot more care put into everything. It feels these days that everything is built on an ever shifting house of cards.
Software development is so difficult that it's hard to teach and most students don't get it -- consequently the classes are far easier than they should be.
A large number of CS graduates can barely program at all.
Being a good developer requires a lot of experience.
Do you have any preferred resources for getting up to speed on the software engineering side of things? I'm picking up stuff here and there, but always looking for more or for convergence.
But one of my coworkers is going to a terrible school and I'm literally appalled at their degree program. Without going into too much detail, it's just awful. Anyone taking that program would be better off taking their time and money and learning on their own.
My coworker is very talented developer; she gets A's without going to class and she is specifically going to this school to get an easy computing science degree while working full time.
A good school should teach the foundations of software engineering; what I learned in school was a good foundation for everything I've done since. We learned about agile. We did an entire semester long waterfall project (teaching by explicit example why the waterfall method is terrible). I suspect it's even better and more modern now.
I don't know if there is a good convergence of information. I don't think there is no one-true-way to do software engineering yet everyone proposes their own singular method. The best way to go is often to pick a little bit of experience from everywhere.
"Learning programming is hard" I just kinda rolled into it as I grew up.
"Self-directed learning is hard" It's automatic for me. I'm interested in things.
"Attending one workshop or a couple won’t turn you into a professional developer." Well yeah. Does anyone think a couple workshops turn you into a professional blacksmith?
"It takes time: You won’t become an developer in 3 months." Fair enough, though I think if you study full-time, have fun doing it, and have a friend helping you a few evenings a week, you can probably be good enough for a junior position by 3 months.
"Finding your first developer job is hard." Is it? Haven't heard that from people.
"Finding any kind of first job in tech is hard." Yeah this definitely isn't.
"Tech interviews are terrifying." Not really. I'm generally nervous for interviews, but not more than is healthy I think.
"Job search in tech is extra long and frustrating." What planet are they on? I hear bad stories about people that did psychology as a study, but tech?!
"Some people won’t make it." Fair enough.
I've stopped reading there because I just can't see what the author is getting at. Is this just me? Or is it perhaps applicable to Silicon Valley specifically, where developers are abundant (are they?)?
Plus, you're not really disagreeing with the points raised. You're just providing one point of anecdata, your personal experience, and saying "yeah this can't be right."
"It’s all about connections" I have restarted life in several different regions and countries with absolutely NO connections, and I always found fair IT jobs with fair salaries.
You are on the internet.
The magical place where people all over the world unite.
"Job search in tech is extra long and frustrating." What planet are they on?
You might be on to something here. Could it be.. we all live in different places, with different cultures, mindsets, experience, perception, laws, one in a city, one in the middle off nowhere.
cap'n out.
People look down on IT people.
Your boss wants to outsource your job.
You'll be mostly doing "plumbing" with data.
You'll make far more money from a dumb audience than a smart one.
It is all the point of IT: increase the human capacities (computation, data handling and understanding, productivity, communication...). People who already master all of that do not need you so much.
And, depending on where you work, you'll do the plumbing on top of horrible old legacy code you're not allowed to change.
So, more akin to "fixing old, encrusted and leaking led pipes with duct tape. Because, yeah, steel and PVC might work without poisoning you or bursting each month, but we haven't tested them, so...".
I have diagnosed and unmedicated ADD and I can still self-learn without too much difficulty.
Again, I don't wanna sound too full of myself, but is any of this stuff really as hard the author implies?
I use apple's native note application, but evernote looks about the same or better.
FYI: it'll take a couple weeks to start working
Another way that might help some people is to write down whatever you are about to drift into, the keep focus until timebox is finished (pomodoro technique).
The best explanations I have are:
As far as I am aware ADDers tend to have shorter stacks (3-4 compared to 5-7 shortterm memory slots).
(My theory.) Many productive ADDers are keenly aware of this and the fact that if it slips now it might never come back until it is too late. This causes stress and you want to follow the train of thought even if it is unrelated to what you should do now.
(I.e.: oops, I see something that reminds me that I need to call <x> today, I know I'll forget it as soon as I focus on my code again. Write one line: call <x> about <y>. Continue work. When your timer finishes: do call <x> immediately after stopping work (somewhat different from pomodoro but adapted for this kind of ADD).
So in short: if you can, write down the interruption, then finish whatever you were doing but use a "timebox" to remind yourself to stop, "snapshot" your work (comments, journal, commit as far as possible) and then take the call, stretch, grab the water or coffe you tried to interrupt yourself with and be on track again.
Of course this is the ideal flow. I have sympathy for people with ADD as it seems they have to work harder and smarter to get the same results as others.
At least for programming, self-learning most things is super cheap, so the cost barrier isn't as big, but again, self-learning is hard, which is why so many pricey bootcamps have popped up.
I like to liken it with playing an instrument. It's easy to make sounds but how long before someone will pay you to play for them? That's programming (and sports, and cooking, and any other craft that is superficially easy but deep and complex crafts to perform professionally)
I'm not missing that there are hard things and to be honest, today is a particularly difficult day, but I understand when people say it's an easy career path.
The hardest truth is that innate talent and intelligence matters, and that some people just can't do it, while others will breeze through it.
Writing, as an occupation is difficult not everyone can be a professional writer. However people can be taught writing fundamentals relatively easily.
In the same way becoming a professional programmer is difficult, learning programming fundamentals not as much. For whatever reason because of all this dissonance people think learning programming means immediately going out and developing software. Writing isn't taught by cranking out a novel.
You can go to a summer school aka a bootcamp to improve you're written English. I would not expect to become a journalist or an author or copy editor immediately afterwards. Maybe there is some dishonesty on the part of the people who run bootcamps I'm not sure...
But I tried helping out a friend with simple assignments and the concepts are just way off too what someone is used to.
Same with someone doing wordpress, I do the servers myselve. Which is way too much info to share... ( Other OS)
On my first job they gave me a paper tape containing the binary to control a robot... no source available... and I had to fix a bug that caused the robot to do something wierd (atan 0/0) on a computer with no "developer software" (aka no compiler, libraries, etc. ... just a raw machine with a front panel of switches).
On my second job I spent a couple days trying to figure out how a tape drive delivered duplicate records (worn tapes caused hardware 'reread').
On my third job I spent a week tracking down a memory error in a mainframe memory that caused many crashes on a computer used by over 70 programmers (every crash resulted in hex listing of 4 megabytes of memory (2 ft stack of paper) delivered to me).
On a later job I had to hand-recover a hard drive that contained all of our software when the "extended second drive" died, causing the machine to fail to boot (had to write code to read the raw drive by controlling the electronics).
I was nearly fired because a C compiler contained a bug that took me a week to find (bad code generation). The boss thought I was unable to program and had no idea what a compiler was, only that my project was late.
One boss was newly promoted. She forced me to end a several-year research project, threatening to fire me if I didn't. She was fired for the threat but I still lost the project.
One boss decided to fire me so he lied on my performance report. He falsely quoted comments from other managers. Even when the other managers called HR and gave me glowing reports HR refused to change the result. Prior to that all of my reports were highly rated.
At one job the whole project (fixed cost, 5 programmers for 5 months) ran long (10 programmers 18 months) and they fired all the programmers.
One of my open source projects forked twice in one week over a dispute about goals, with the side-effect of destroying the community.
One of my jobs was to take over code from a programmer that died. He used the GCC -MM option to automatically generates C++ makefiles for code which generated C++ and then generated makefiles from that code. Not a line of comments anywhere.
That C++ code generated classes DURING THE CALL SETUP of a procedure (who knew you could do that?) so classes that occur nowhere in the software "appear" magically at runtime. Again, no comments anywhere.
I spent a day applying the brand-new "Design Patterns" to our software on my whiteboard. The chief designer saw it, got angry, and I got fired.
I was hired to move teaching software (400 Flash Videos) from laptops to the new iPad... and then Jobs announced that the iPad would never run flash. Goodbye job.
I maintain open source software that has run on Unix-based systems since the early 80s... and then stopped working because GCC switched to a "new C standard" that changed the meaning of "inline", breaking the build everywhere.
I was hired to write "pinch zoom" for a touch display and camera setup. The camera driver only worked on Linux, the touch display driver only worked on Windows. Neither manufacturer would port their driver, nor release their driver source code.
My AI project required recognizing lugnuts... did you ever try to find "big data" for lugnut images? Or try to create a "big data" dataset?
I taught Data Structures at a University. At a Google "job interview" I failed to remember the complexity of an algorithm... and never got the job offer.
I have many more "war stories" but they all have one thing in common. Programming isn't hard, in fact it is often the only joy on the job. But being a programmer is really hard for a lot of reasons you won't find in boot camp.
I love programming. I turned down 8 job offers to become a manager (or, as I say, "retire into management"). I love programming. I do it every day. And eve...
The large majority of applicants at the big firms are not hired so this may be entirely unrelated to your outcome. But surely somebody who has taught data structures could analyze an algorithm rather than needing to simply remember the runtime complexity, right?
IDK but it sounds like he failed to remember it on the spot and didn't get a chance to analyze it.
I'm not sure whether programming is hard or not, but when my friends were practicing keepie uppie in their back yards, I was practicing programming
There are concepts that are hard to understand in the abstract, but one of the things that a good programmer has practiced is how to understand those kinds of concepts
10,000 hours is an overly literal idea, but IMVHO the core requirement for a large amount of intentional practice is the most significant hard truth about programming
Programming is "easy" in the sense that you don't need to be a savant to do it. A lot of software development is built ontop of very well designed tools and abstractions which means you can work (in some fields) with computers without having a college understanding of higher level maths or electrical engineering. Programming is "easy" in the same way any trade is easy. With instruction and practice most (if not all) people can learn to some degree of professional competency. In the same way one might learn to become a plumber or an electrician a student can learn to be a "developer" (this I'd argue is separate from a "computer scientist").
On the other hand programming is "hard". It is "hard" in the sense that it's completely alien from most people's day to day. In the same way most people don't think about what it takes to wire a house to code, operate a lathe, or fix a broken pipe, most people don't ever need to think about SDLC or debugging strategies. Programming is "hard" because if you try to learn from fundamentals you quickly exit the nice tools and abstractions that make the professional world go and into the maths that are considerably less trivial. Programming is "hard" because of a cult of people determined to ignore the above reality and tune interviews to be time intensive and rely almost exclusively on your knowledge of university concepts as opposed to day to day tooling.
I think it's important to remember that the field is still very nacient and the responsiblities under "programmer" still vary widely from job to job and industry to industry. Until this matures, a better jargon is developed for describing roles, and a more realistic attitude is reached in terms about what skills are needed for said roles I don't see how we can avoid sending mixed messages like the ones that frustrate the OP.
"Job search in tech is extra long and frustrating:
For tech jobs add about 3-5 more interviews + technical tests, online and onsite, if you even make it past the first step because a lot of times you will never hear from a company after sending in your application, or the company will stop responding to your emails at some point in the interview process. The tech hiring process also seems to take about 3 times longer than in other industries. Brace yourselves!"
Sadly this is a very common refrain. And unfortunately this is now true even if you have years of experience. Hiring is just plain broken. Full stop. This is also a fairly recent development in the industry. The hiring process was not broken like this 8 or even 5 years ago.
It's sad that an awful and unprofessional experience is now the norm and something that should be expected. I blame recruiters for much of this unprofessionalism but I also blame the companies that either permit such unprofessional behavior or else are simply unaware at how bad or broken their process is.
Its strange that the industry seems to have whipped itself into such a neurosis about the possibility of "false positives" that it has created a uniquely miserable experience that seems to embrace absurdity and disrespect as a matter of course.
The fact that industry seems to collectively trend hop - Whiteboarding! Take home projects! Hacker Ranks Tests!
This "everyone else is doing it" mentality only serves to perpetuate this.
That's because there are a lot of awful, unprofessional programmers out there trying to get jobs and we need a way to filter them out. Even then these methods only filters out the worst of the worst, the developers that can solve fizzbuzz level problems. We either have to put up with this or have some sort of industry certification.
>The hiring process was not broken like this 8 or even 5 years ago.
All of this was happening 8 years ago, it was even worse then with "why are manhole covers round" levels of stupidity.
And asking people to "to reverse a binary tree via Hackerank or asking people to spend 4-6 hours on a "homework assignment" does very little to filter awful or unprofessional people.
>"All of this was happening 8 years ago, it was even worse then with "why are manhole covers round" levels of stupidity."
No that was the beginning. The beginning of the "Google does this so we should too" mentality.
Agree. After being told a couple of times how happy <company> are to finally see a real, competent programmer when I enter the room and just answer simple questions I've come to accept that there must be a few people out there pretending to be programmers in their applications.
Even then these methods only filters out the worst of the worst, the developers that can solve fizzbuzz level problems.
Well, the problem is that the sum of these methods (clueless(?) recruiters, keyword filtering etc) often filter out me before I even get to an interview.
The ones who hire me tend to be very happy though :-)
One of the more depressing experiences I've had is heading into an interview (on the interviewer side) after seeing someone completely fail a fizzbuzz test. Everyone looks at each other thinking "well maybe if they knock it out of the park during the interview...". It's like dating as an extremely lonely person.
> Well, the problem is that the sum of these methods (clueless(?) recruiters, keyword filtering etc) often filter out me before I even get to an interview.
I've never had a problem with this, except maybe lately with angular. I structure my resume to include the keywords but in a format actual hiring managers want to see, eg, Experience with a number of MVC frameworks including ASP MVC, Monorail, Ruby on Rails (ROR). I don't know if that's the reason it's never been an issue for me, but I hope it helps.
This is exactly the situation that a recruiter should be preventing. That person shouldn't have made it through door. Your process was broken.. Unqualified people applying for jobs is not unique to the tech industry.
That salient point is that you as the programmer have to gain an understanding of the target field you are programming for. Programming is about solving problems for someone, not just writing code to a specification.
A lot of the comments, so far, are talking about programming languages, programming tools, programming frameworks.
These are NOT programming, these are the tools you use to program an adequate solution to your problem. Unless you are continually gaining knowledge in every field that you are programming for, you are staying a novice. This does not mean that you have to be a subject matter expert, but it does mean that you have to gain enough knowledge in that field to be able to provide a solution for the subject matter experts (or others that will be dealing with your solution in that field).
Too often, I have found that "so-called gun programmers" have not only NOT understood the the field they are providing a solution for, they dictate what that field is supposed to "put up with".
I have spent nearly 40 years programming and I have come across many people who can churn out code much faster than I, but many of those cannot provide an adequate solution for the problem at hand. They cannot and have not been taught to think outside the "box".
I have also worked with many who cannot churn out the code but what they do give you is (at the minimum) an adequate solution to the problem at hand. They effectively solve the problem as it actually is.
Many years ago now, I took over the maintenance of a small system that was being used by 6 or so people. By the time I was finished, it was handling 60+ people simultaneously in at least 7 different fields for a single telecommunications project. The reason I tell this is for the following:
The base system in use was that venerable old girl, MS-Access 2000. This was one of the constraints of the system.
The original programmer was a highly paid foreigner (British) who basically told the subject matter experts that this was how they would have to work.
Part of the process I undertook was to find out what and how they needed to work and rebuilt the system to do it appropriate to the needs of the project. The satisfaction and appreciation was very encouraging.
Once this was seen, each of the other functional areas wanted to get on board. The application was then expanded to include these additional groups.
I got various complaints from various people about how hard some of their tasks were because MS-Access could not do want they needed. They had been told this by management. Finding out what they needed became the incentive for providing a solution. That meant for one person, I cut their after hours report production down from 3 to 3.5 hours every night to about 3 minutes (included production of reports, formatting, emailing to international management, emailing to national management and local report printing). His wife and daughter were very happy to get him home at night at a reasonable hour.
Programming is understanding the problem at hand and providing a workable, efficient solution using the tools at hand. This means that you have to be able to understand the subject field with enough detail to provide that solution and make it easy for the end user to use.
Early in my working life, I had people who encouraged this mindset and multi-discipline learning. Not everyone is capable of this, or even wants to do this. This then leads to the shmozzle that is the industry today and its continuation is the outworking of many of the major IT industry players who are interested only in the easiest way to make a profit.
Programming is hard because you have to become a "jack of all trades" as well as an expert in your own. You have to be able to document all the assumptions that have controlled your development activity, the "whys and wherefores", the paths taken and in some case the paths no...