“Google” programmers. How one idiot hired a couple more idiots
pvs-studio.com
pvs-studio.com
They usually cannot write code from scratch, or when they do it contains a huge amount of plumbing copied from other familiar codebases without any reason for its purpose. It's kind of like they can read a foreign language, but they cannot speak it. Or maybe a parrot who can produce the sounds without the meaning.
I do think Google has caused some of this. But the other secret, I think it's how most people program by default. Animals largely learn by copying. The deconstruction of concepts to primitives, and synthesis of these primitives into new ideas if a very academic way to approach things. Centuries have proven this approach is superior, but it takes a huge amount of effort, and many things are lost in this process. (Ever do a physics problem with spherical cows?) With the rise of self-taught programmers, you will see more take this copying approach than the academic redistillation.
Blank source files are scary yo.
There are a near infinite number of choices that can be made when confronted with a blank file. And the ramifications of those initial choices will live on, possibly for decades! (I spent 10 years at Microsoft where it wasn't uncommon to come across 20+ year old code still in use.)
More than once I've initialized a new project, started at my blank folder structure, and spent a few minutes thinking "here we go again".
Boy do I miss those days now that I work for larger companies and with larger teams where the opportunity to do that is pretty rare. Give me a blank slate all day for any project.
It’s pervasive in lots of aspects of my life beyond programming, where I get anxious having to make decisions. I will drag my feet to have to make a final decision, even if it’s a restaurant choice. I’d much rather have the obvious right choice in my face than have to pick between multiple good choices.
I face this same anxiety when staring at a blank source file too.
(Yes, I’m working on finding a therapist, but even picking one gives me the same anxiety)
This means you become partly responsible for the quality of the product you pay for. If the burrito is bad, you are to blame because you chose the ingredients. I think that makes me anxious when in Chipotle's.
In programming it does slow your progress if you have to frequently spend time deciding which choice is the best. Not only anxiety but also plain lost time.
Barry Schwartz, is that you?
I so much hate those project generators. First thing I do when I generate some create react app is going through it and delete stuff. Everything. To start from absolute minimum.
I can accept some project generators being an option. But I never understood people who make it default way to go.
Your post was kind of eye opener for me.
I hate deciding where the ubiquitous "utils" folder should go in any given project!
They are. But the more programs you write, the better you get at it.
It also helps to devise a personal architecture or two for different projects. I have some that I lean on, and that means I can bootstrap myself fairly quickly. It took a while to get there though.
True
> I do think Google has caused some of this.
I think it a lot of it is the frameworks and people constantly trying to shortcut the method of building something with code. We have so many frameworks, tools, plugins and other stuff that it makes it easier NOT to learn anything deeply any more. Pick a JS Framework and I'll give you a dozen plugins or tools that have already been built to write your code for you. All you, as a developer have to do is string them together.
By building all of these shortcuts, no one really needs to learn Angular, you have their site as a reference and tons of material to help you. Developers actually learn in the absence of knowledge where they have to sit down and learn it without knowing there is a crutch or fallback if they get stuck. I think today's developers just get as far as they can and then start googling for a solution because they know that someone has already built a date picker in ten different languages, thousands times already. Why go back and reinvent the wheel when you don't have to?
Because it creates lazy developers.
An entirely other issue is why learn some framework inside and out if its going to be obsolete in a few years? Remember when everybody loved Backbone and Express? You tell someone in the Dev community today you use either of those and you'll get laughed right out of the bar.
I think its just a lot of things that work against developers learning more than then they really need in any given situation.
If you're copying and pasting your core expertise from stack overflow, then, I hate to break it to you, but you'll never successfully differentiate your product.
Very rarely do you see a startup hiring to solve brand new technical problems. At the end of the day, most engineering work boils down to implementing CRUD apps with textbook architecture.
If this was true, it would bring a significant economic advantage to a startup if it would not use leetcode style questions for job interviews, but instead ask hard questions about these textbook architectures.
Find the most readable color of a font for a given background on most displays. You could do extensive research on colors for something that on the first look sounds rather trivial or find a very thoroughly worked out solution on stack exchange.
It is difficult enough to advertise self-made software when many people are looking for off-the-self solutions. So being fast and therefore affordable is quite important.
I mostly develop for embedded systems on custom hardware so ready to use solutions are rare. But if I want to visualize process data in a browser? Please give me all your thousands of dependencies Javascript.
An algorithm I implement from scratch? Very rare. This takes time and thorough testing compared to something that is already solved.
Though I'd agree that no engineers should be copying code without understanding its intent and interfaces.
Programming isn't my day job, but I do frequently write code from scratch (and refactor it, heh). I interviewed for one entry-level programming position; they did not appreciate my technique.
And interactivity can be an extremely effective way of experimenting and learning how things work and fit together so that you can rapidly develop a mental model of your core primitives and how to put them together in different ways.
It's also part of the appeal of TDD. Small iterative loops with rapid feedback.
I am a self-taught programmer. I copy, but I also innovate. I don’t follow at all the academic approach (I never studied CS or was very good in school). But I don’t paralyze when I can’t find anything to copy from like a Roomba stuck on a rug.
Do you have a term for me?
Also, academic research on computer science, as I lack much of the basics.
I am happy building websites and web apps.
But I am confident enough to know I can innovate and create complex solutions for the kinds of problems I face.
I'm guessing the reality in your case isn't quite as severe but that's sort of where some "jigglers" sit.
When I hear "I don't follow at all the academic approach" what I'm hearing is you don't even know what is actually taught in a CS degree. Might be wrong but that's what I'm hearing. A lot of it isn't really that academic but sure some of it is. I'm self-taught and I worked as a programmer before I got my CS degree (as a teenager) but my self studies included CS topics (algorithms and data structures etc.) and I never copied any code or "jiggled" anything when I got started, everything was written from zero. What I did occasionally do is implement algorithms (i.e. the algorithm is known, write the code, which I guess is a form of copying).
On the plus side you've obviously acquired some good skills doing all this and you are likely smart. If you're happy with where you are (let's call this a "Software Integrator" maybe) that's fine. If you want to become better you probably should put in the time and learn some of the things you've been avoiding either formally or on your own (unlike when I was a kid there's endless resources now).
This is accurate. I don’t. My impression is “algorithms and data structures”, which is fuzzy for me. I don’t care at all about algorithms. Data structures I think I should know more about at some point.
I considered studying CS after starting working with software development, but decided I don’t want to. Kind of related, but I also decided that I don’t want to study leetcode too, even though there is a financial incentive to do it.
I am happy being someone that some arrogant developers like to call “web developer”, “programmer” or, at most, “software developer” as opposed to what a “software engineer” is. I understand the difference that those people try to point out. And I agree there is a difference and I don’t care to be on the side of line that I am. It does bother me that every time I see someone making a point of showing where the line is, it’s from a point of arrogance, entitlement. This does bother me, and I felt that tone in the comment I replied to.
If I see an engineer constantly do this, I would think that they are insecure and are constantly attempting to prove that they are "real" programmers (whatever that means).
The way I see it, we are here to solve business problems and the chances of your problem being so unique that similar solutions don't already exist is rather low.
Let's face it, the majority of software work is pluming work and wiring APIs these days. Very few people are tasked with implementing their own sorting algorithm and even if they are, you can bet that they will scaffold from another algorithm to get started..
Yes, one should not blindly copy and paste from Stackoverflow but researching, refactoring, thinking about the task at hand and using existing tools and libraries are all part of the process.
And yes, I learn most effectively by copying too. Showing me a couple of working project and letting me implement a bunch of simple tasks by jiggling existing ones usually works for me way faster than throwing manuals and tutorials at me. Manuals have its place - when I know enough to know what to look up - and so do tutorials, but "learn by copying" is the most optimal way of getting bootstrapped for many people, including me. There's nothing wrong with that, if you don't stop at that stage but continue learning.
Trial&error mode works well when working with randoms, e.g. exploration, research, acquiring information, identifying unknowns. Literate mode works well when working with exacts. Identifications for example produce exacts from unknowns. Enough facts enables you to build stuffs out of it like Lego. This is where literate mode works well.
Jiggle programmers that does not quite grow out of their jiggling mode is because they stay in trial&error mode and does not slide slowly into the literate end of the spectrum. After acquiring some facts, they don't deduct or intuit from them. They don't attempt to philosophize a bit.
A problem as simple as "how to do X after the window loads" for example, some programmer can find `window.addEventListener("load", X);` in stack overflow, but the main differentiator lies whether after fixing the issue, they care enough to at least wonder about what's the meaning of `window`, `addEventListener`, `load`, "why is the call shaped that way", "what is Event and what is Listener". Those who do slide slowly into their literate mode.
It is also not less dangerous to be stuck in the literate mode. Although this happens rarer, often to more experienced people.
We're all jiggle programmers then. Once the applications architecture is established, we hang new feature on it by following that architecture.
Very very few of us get to only write code from scratch every day. Most of the time, when I'm writing from 0, I'm working on a R&D PoC. If I'm not doing that, I'm jiggle programming a new feature into an existing architecture.
> With the rise of self-taught programmers, you will see more take this copying approach than the academic redistillation.
I was self-taught before university. I learned on a C=64 and then an early x86 back in the day. If you didn't figure it out on your own, you hoped you would see it in a magazine or book some place. I learned a lot about how computers worked at a fundamental level from the C=64. I don't think self-taught is the issue. I think it's how much the person really wants to know about computers and CS.
My current project is boring (especially since i finished the code logic like 9 months ago), but since I'm paid to upgrade/deploy the stuff I'm not that disfranchised. (I won't lie and say I'm as productive, I'm clearly not)
I don't think I'm really able to work alone or unpaid. Which is weird, because I really, really enjoyed the two dozen school projects I've done, especially those who took 2+months
In my opinion the way to get them through it is loads of pair programming and stopping them and reminding them they haven't stopped to think about the entire context when you catch them doing it (or when they come to ask for help in the ideal case).
I'm not sure if I ever went through this phase, but not everyone has the luxury of developing their programming skills at a leisurely pace from highschool all the way through college.
Strong junior programmers usually fail by rewriting everything from scratch, having no concept of DRY, libraries, or how to effectively break logic into methods. But inability to generate their own code is not a common failure mode!
It's only weak junior programmers (that is, people who simply are not going to become strong developers) who approach a problem and, in the absence of the ability to write code from scratch, try to find something to copy-paste.
This has been my experience too. It's also common (maybe even nearly universal) for devs to go thru a stage where "rewiting" feels like the path of least resistance. This is usually (not always) wrong, but until you've ramped up in several very different codebases it's difficult to see how something so foreign can end up being as productive as what you're used to.
It's messier than simply that too. Even though I may be the inferior coder to them, I am not necessarily without any capacity to reason and improve on something.
So what happens is I pick something up that someone else wrote, and I see things I think should be done differently, and much of that is probably perfectly true and correct, as far as it goes.
But also, even while some of my ideas were correct and better than what's in there, at the same time it's also true (ends up turning out to have been true, but I only recognize it later) that much of what I didn't like and ripped out and re-wrote, was actually just me not actually grasping the thoery of operation of the original code.
My new replacement may still work and may even look more organized or more easy to follow, but turns out not to handle some edge cases the original code not only handled, but did so in some elegant trick way that isn't obvious from reading it, but ends up handling more conditions in fewer lines, fewer cpu ops, fewer memory ops, fewer db/net calls, etc.
I live with myself by deciding it's good enough that I at least recognize this process and am generally improving day by day. That has to be all anyone can really expect.
I'd also wouldn't frown on just calling them developer. They just need a senior developer to tell them not to rewrite everything.
Anyway, regardless of whether they're really strong or not, the couple I've mentored have become tremendously valuable to my company, with performance outstripping my own (I think because of the higher tolerance to shitty repetitive frontend work).
Sure, technically you are a Junior again if you use a new technology, but assuming the MO of the language is not completely unlike one you're familiar with (for example OOP vs functional vs whatever).
I mean, at least that's what I need to do - but maybe "how was this syntax again?" paired with "I don't like these docs" might only superficially be copy/pasting from SO, because you know what you're writing, but you don't have the words of the language...
My impression is that a trend started in the 90s which has taken over the industry where programmers that are capable of building things from scratch and keeping everything in their heads are much less valuable compared to those who are "weaker" but much more capable of communicating and cooperating.
There's a difference between programmers-who-google, and programmers that can only google, and I don't think the author is on a path to identifying one from the other, but rather has decided that googling things is wrong.
I've conducted a lot of programming interviews, and I've always let candidates google and even encourage them to ask me for my thoughts and opinions. It's clear from what they ask, what they search for, and how they apply that information, how they go about solving problems and whether they truly understand the problem they are solving. Also by being present the whole time it's also obvious if the candidate works at the level of copy/pasting answers from the internet.
The best engineers know how to ask questions and search for things in order to boost their productivity, while knowing enough about the problem to not be limited.
> I gave tasks and a computer to a candidate and left them for half an hour to an hour.
Of course they're going to Google - it saves time, and the interviewer clearly doesn't give a shit about how you arrived at the solution because he literally just left the room.
If he's complaining because his employees haven't memorized some niche part of documentation by heart and - gasp - need to look something up, then he's the former
But if he's complaining because employees don't understand basic fundamentals like scope, then he's entirely in the right
Actually edit:
> I started with offering my help. Can't solve a problem? Come get me. I will come over, sit on your chair, and finish your task. You'll sit next to me and memorize the way the work should be done.
I don't like this, It seems like bad management with subtle insecurity. imo it would be better to show the employee how to go about solving the problem themselves so that they can do it and feel confident in their own abilities, as opposed to just doing it for them
Don't know how to drive? Watch me and memorize what I do.
Don't know how to play chess? Watch me and memorize what I do.
Don't know how to swim... etc.
Though there are some jobs where you absolutely must watch someone before you even attempt to do it yourself (e.g surgery), it's not typical and probably not needed for something like programming where you can view the source. And it'll certainly prolong the learning process compared to having people do it themselves.
The solution to that isn't to have the instructor drive them to the store and back. The right way to approach that is to have the instructor watch them drive and give them tips and feedback in real time. Observe and correct. With programming then they're running the keyboard themselves and they're the ones actually doing the work, which is going to reinforce the learning in a way that just watching isn't going to (similar to how note-taking helps to reinforce memory and learning in lectures).
This takes a whole lot more patience though since you can't just sit down at the computer and start bashing keys yourself but have to "use your words" and requires some ability to instruct.
And I've done quite a lot of this kind of mentoring at my last job and this was the approach I've most often taken.
Where I found it more useful to drive the keyboard myself was in sessions where I was working on solving problems that were at my level where I didn't know the solution. That way they could watch my entire thinking process as I figured it out in "real time" and see where I went down avenues that didn't work out and how I thought about finding the right solution, along with the workflow that I used.
I wouldn't expect anyone to be able to replicate that after they were done watching me, that is more to show where there's more room to climb.
The manager's options are more nuanced then either you do it, or I do it for you.
> I kept freaking out and yelling in chats
> The people could have lacked a kick in the butt
> remote work was to blame — it made it hard for me to use my charisma
Employer of the year award?
I heavily rely on StackOverflow like most devs but I’ve never been able to straight rip something from SO that didn’t fall under the following categories:
- Extremely simple, but I missed something causing me to have to Google the error
- One-liners to short functions that do some common tasks for me, and is faster for me to copy rather than write.
- Language specific syntax for when I’m switching to a language I’m not as familiar with.
I’ve never been able to copy paste any meaningful code off of the internet. As in, code that could reasonably be significant in the project I’m working on. How would you even find code that complex anywhere? Are people genuinely upset that someone would copy simple stuff off SO instead of writing it on their own?
I encourage my younger colleagues to do the same. SO can be a great starting point, but it's in your best interest to take what you've found and then consult the docs/source (depending on what you're working on). Many times you'll find a better fit for your particular solution than what was presented on SO, and at the very least you come away with a more complete understanding.
If you have a solid grasp on something trivial you've copied, I might jest a bit, but have no real problem that it was yanked. If you don't understand it and it 'just worked', that's gonna set off some alarms.
But at a higher level there's principles that you need to understand in order to write robust code where you can't google the answer. And most SO/wikipedia answers to anything non-trivial will not be robust. And then there's the "ungoogleable" problems where you just need to roll up your sleeves and fix it. That can sometimes be broken down into tasks which are google-able by asking what kind of tool you need in order to investigate the problem -- and then using google to go find a tool that does that and learn about it.
Here's how I would say it:
- You can only get so far with Googling. You can find an awful lot of solutions to little problems, that's for sure. But you need to understand how to integrate whatever you find, and that's not always trivial.
- There's no level at which Google isn't a necessary tool for coding. Top programmers will Google stuff, just like a top author might open a dictionary.
- The CS fundamentals, basically DS&A, sometimes surface in order to bite you, and if you haven't come across them, they will do so silently. You can't google it if you don't know what Big-O is.
- The engineering fundamentals (perhaps loose coupling? perhaps requirement scoping?) will certainly bite you, and they are also not something you can google.
- When you're interviewing, you can test for simple things that can be googled. You can chat about the other things without being able to test them.
> I thought the remote work was to blame — it made it hard for me to use my charisma
Pure narcissism
(Although, there could be another level of irony, i.e. he is narcissistic, and worries you might think so, so he deploys irony to persuade you that he isn't by making a narcissistic-seeming comment in a self-undermining fashion—but I doubt it in this case).
In my experience, much British humor tends to follow a similar model (and Russian too perhaps), but I've observed that it's common for people who don't share that type of humor to misinterpret it.
It's much harsher in Russian than the English translation. Compare:
> You'll sit next to me and memorize the way the work should be done.
and
> А ты, бездарь, сиди рядом и запоминай, как работать надо.
which literally translates to "And you, bungler, sit and watch how the work is done [right]."
And I utterly fail to see any self-deprecating piece that would turn this into a joke. If anything, author treats those "Google"-programmers as trash.
Even as a joke, I would say it's very poor and distasteful one, especially for a public blog post.
See, if I'd say that I'm an idiot for not realizing someone is trash (or some stronger expletive) - yes, that would be ironic, but all the irony would be in the invisible quotes around the "idiot", with none around the "trash". A totally opposite effect.
And the author talks about "Google" programmers in a clearly derogatory manner. It is not just in the title (which would've been okay on its own because it uses "idiot" for both sides).
For example, I'm fond of pointing out that I'm aware that American scientists have mathematically proven that it is not possible to determine sarcasm from the written word.
That is clearly sarcastic because thinking that you could mathematically prove that is just not grounded in reality and nothing anyone would seriously suggest, so it provides a 'tell' that it is sarcastic. Read sarcastically it is self-referential and makes perfect sense.
Another classic example is _A Modest Proposal_ where its so over the top that it has to be sarcastic.
Just posting something "edgy" without any kind of a "tell" isn't really sarcasm.
I can't really find much of a 'tell' in this whole article. The whole article is consistent with him being a total narcissist. And the way that goes around "correcting" people by forcing them to watch him solve their problem the "right" way is something a narcissist would do that someone who was actually instructing and teaching someone else wouldn't do. So if I read it like he's just a narcissist then its all consistent. If I try to read it like he's being ironic, then he's at a minimum both really bad at sarcasm and irony and still really bad as an instructor.
> Of course, I realized that it was not about them. I was the problem.
> They only followed the laws of their own world. And I was the fool for not seeing these laws — I did not understand them, did not realize their seriousness. The seriousness of superficiality.
You get very few signals just looking at the finished result. You should let the candidate ask you questions and progressively improve the solution. And you should progressively make the task more complex, because it’s not a binary evaluation. A good code interview must rank candidates.
Really good cooks have experience around cooking dishes and know that they can substitute somethings, they can cut down on the butter and it will taste just fine, or that it needs a bit more ginger than the recipe asks for.
Really good chefs can be handed a recipe and transpose it to use different ingredients or meet different needs (Vegan? no problem! Gluten free? Gotcha!, Etc.) They know their transposition will work because they understand the chemistry that is creating the texture and flavor of the dish they are preparing.
I tend to think if software engineers as the folks who understand the principles behind computation, data structures, and languages which informs their choice of algorithm, or their effort to transpose an algorithm to meet the current need.
I think of coders as the folks who understand how the code they are looking at works and can adapt it to their needs, as long as those needs are not too far different than the original purpose the code was written for. In that case they go out and search for a different chunk of code to start from.
I tend to think of software engineers as people who understand requirements and can turn them into working code and deliver it successfully by understanding the principles behind computation, data structures, and languages which informs their choice of algorithm, or their effort to transpose an algorithm to meet the current need.
I tend to think of coders as another name for software engineers, also programmers and software developers, all the same. I understand algorithms, data structures, patterns, UML, etc. and I choose to call myself, unofficially, a coder. It uses less syllables.
Big oof.
> I understand when you surf the net to figure out how a new technology works. Or when you need to use some exotic feature and not to bloat your head with unnecessary information. But basic things! How can you copy-paste basic things from the Internet?!
I'd say basic things are the unnecessary information that you shouldn't bloat your head with. You don't need to remember if it's "split()" or "splice()" or "slice()" because you can Google it in a second, but you do need to remember how advanced concepts work.
Lots of bad takes in this article.
Sure, maybe they're not experts in every API - but they proved for months their productivity, in easy and hard tasks (by your admission).
As an engineering manager I've dealt with covid performance issues in three different companies (two of which were already remote pre pandemic).
Incidentally I've dealt with performance problems for depressed people a few times in my career and COVID performance issues felt exactly like those. It just happened to the majority of people.
Turns out that if you do everything possible to remove everything that's good out of people' lives, their performance suffer!
I really don't understand how you can go from what happened to you to "my engineers know to code only with Google" but you should really rethink that.
I wish you and your teams well.
> In addition, our superiors did me a disservice — they asked me questions like the following: " Has productivity growth stagnated because of remote work?" Of course, I was saying yes.
The author took no responsibility in the situation.
IMHO you don't pass junior level without the ability to efficiently google for solutions at the right zoom level. This starts with understanding what you are reading and the best way to use that information, whether it be integrating a library, integrating a small snippet, disregarding as inapplicable, or mixing and matching ideas from multiple sources.
The very specific conclusion that the author jumps to lacks nuance. It's hard to say based on this whether the programmers are as bad as the picture he paints, or if it's primarily a management failure.
He did not know how to program at all.
The teachers were lazy and repeated the same exams and activities year after year. Too many students took the easy path and either copied the answers from previous years or would google some snippets.
Worst: teachers didn't care if the code would compile, they would grade the effort.
In the end students would pass the year with positive grades (public university) and my brother would graduate next year without knowing how to write code on his own.
I hope that not too many students follow that lazy path.
If you don't learn it yourself you won't get far. But with the density of tests today I understand that students focus elsewhere.
Computer Science is not just programming, but nearly everyone expects you that you can do it (in any environment for that matter).
> I thought the remote work was to blame — it made it hard for me to use my charisma
And other "gold" hidden in this article.
The premise is also ridiculous. Everything went amazing for 6 months, then the pandemic hit, people worked from home, and suddenly couldn't google anymore? Or does the author have a linear scale in mind, where the longer the project goes, the more understanding it requires?
For a novice who is struggling, they might literally just copy-paste the solution, but for someone more advanced, I expect they will read it, try to gather the bits of nuance (some of it may be realizations like "oh, I need to use len-1 here because this bound is inclusive", or maybe something more practical, like, "oh, I need to decide if my debounce function should fire on the leading or trailing edge of the debounce.")
If they're literally copy-pasting the whole solution nearly verbatim, without really knowing what's going on, then maybe it's just not a very good interview question.
I thought the remote work was to blame — it made it hard for me to use my charisma."
What now?
And we all know that everything is true. The amount of programmers who write things from scratch is tiny, and ironically it is usually a thankless task.
Often, you get ahead by stealing or churning around other people's code and being a ruthless politician.
I knew someone looking for work at the time and asked for a link to the job description so I could forward it along.
In the description included the phrase “without Googling” for a majority of tasks. It’s not as if the role was especially demanding or contained a ridiculous amount of esoteric knowledge; it was the equivalent of a help desk position. I can’t imagine ever doing help desk, much less ever again (fuck that stress) or for someone who thinks it’s a role where you will never need to Google anything.
I pointed this out to my friend with a frown on my face, but left it up to him if he wanted to apply. He read the job description and said “yeah no. That boss sounds miserable to work with”. My interactions with that manager were quite minimal, but judging but the attrition we noticed on the help desk team, I think he was right.
"Can I just google it?"
"Sure. That's just not worth very much to me that's all."
Now if they don't like that, which of course they may not, at least you don't have to struggle with the changing norms or fairness or anything like that.
Put that way it's very cut & dried and up to them, as long as you're at least willing to help them succeed if any decide they want to take up the challenge.
Mean time you can still get some product out of them, and they can still just google if that's all they want to do, but there is no reason to pay them like rock stars if they're not. And that's your answer to your bosses too.
And you can keep an eye out for better developers at the same time with some budget available to pay them, or maybe identify at least one potential for training up from within your existing team. There probably is at least one who would take to it even if they aren't impressive today.
This is laughably untrue and, oddly enough, the part of this post that left me most bothered.
Whether that's a good way to spend 5 years - I don't know. But in practice it turned out that way.
I've seen countless arguments about higher edu and whenever somebody says that school didnt teach him x,y,z,
then people often try to counter it with something like
"ohh, uni's goal is to teach you how to learn and make aware of how big some domain is!
what you're talking about is trade school!" (it's terrible counter in my opinion)
BTW as bad as the "jiggle programmer" there's the "superenterprise software engineer" who can't ship code because they spend way too much time writing stuff from scratch, making sure it follows all the good principles and software patterns, and that the code is super optimal and covers all edge cases.
There are no technical details on language/framework/problem domain. No code examples.
Surely those "Google" (or jiggle as another post said) programmers had some understanding of coding.
Otherwise they would get the wrong Stack Overflow answer and things would inevitably go horribly wrong.
They were doing the right thing for the business for many months. They might not have been able to program from scratch but that is not required most of the time these days.
That is if it is stupid and it works it is not stupid.
You only learn stuff (become a good programmer) if you are forced to. Examples when you learn is when debugging, or working with constrained resources, you are forced to optimize or scale up, your service goes down, data gets corrupted, you are getting hacked, etc.
One of them was clearly glancing at code from the internet on video as they worked through the problem. The other produced a lovely recursive solution (when recursion was not called for); but googling for solutions to the problem produced nearly verbatim code as the first hit. Neither of them could discuss their solutions at a high level.
In general, please don't blindly follow the advice of random people on the internet (including me!). There is plenty of advice around from reputable people with experience building and scaling high performing teams. My latest favorite is "An Elegant Puzzle" from Will Larson.
But my friend is old school and can't bring himself to be so hacky... But this means his co-workers close more tickets and it looks bad for him.
And then productivity and moral levels after you let go your good devs that suck at interviewing.
There might be some substance to his gripes (I doubt it), but his method of interacting with other humans sounds frightfully flawed.
And it's just more of the pompous assumption that somehow the actual mechanical writing of code is the hard part of this job. It's not. The hard part is business requirements, task management, figuring out what the next and right thing to do is. Very rarely is our job a simple matter of writing code, the actual programming is often only a small part and most people's productivity issues tend to boil down to handling and understanding ambiguity or conflict in the business requirements, or motivation around them, or dealing with piles of legacy crap that needs to be cleaned and managed before moving on... not the coding itself.
A bunch of junior or new hires get sent home to do remote work combined with a guy who admits he "yells in chat", yes that sounds like a disaster.
And honestly it wouldn't surprise me if that's where the whole thing was falling down, not the competence of the programmers he hired.
“I don’t work alone. There’s a lot of stuff in here that I don’t even understand. I’m really a systems management guy, I farm bits and pieces out to people who are much more brilliant than I am. But none of them really knows what the project is. I say build me a laser this, or a molecular analyzer that - and they do, I just stick them all together.”
I recently had to build an e-commerce portal for our customers to be able to order 3D printed parts on-demand. Did I write my own algorithms for rendering 3MF files and calculating the volume of a mesh? Nope, I just used three.js and a mesh volume algorithm I found on Stack Overflow and problem solved.
Most of the skills you mention (business requirements, task management, spelunking legacy crap, etc) only really matter in large organizations, where human coordination costs and tech debt management dwarf actual development costs.
In a well-run small org, ICs can get by without them by having an occasional coffee/lunch/beer with the CEO/CTO/Sales head.
In a small company a frankly larger percentage of company revenue can be wasted through crappy project and product management. Coding it poorly is often the least concern at places like this. It's getting the right thing to market.
That's how most mid level, and large companies work. You are not hiring an engineer with 2yoe to 'coordinate business values', unless you work at some scrappy startup.
The original article has a good point: Young engineers are so used to google for everything, that they often don't understand the code, or framework they are working with.
Back in the day (prior to StackOverflow), we called them "Framework, Glue and Paste Engineers". Basically people that used frameworks without understanding what they did. It was fine for basic stuff, until the point you crash servers because you have no clue what did Hibernate do under the hood with those queries.
Anyway.... the article is clearly aimed at more junior hires.
Out of curiosity(from lack of experience working for a company), what are some things that lead to this situation?
Maybe the internet is creating a situation where the workplace is no longer populated by a Dickensian cast of oddballs, but I feel like super polite workspaces where nobody ever calls people out and everyone is given pats on the back lack something as well. And under the surface is often disdain that is never voiced, just acted upon.
Finally found a Russian lang forum where it seemed someone asked and a long response. I used to google translate. Half the response was the author insulting the guys mother followed by a detailed profanity laden answer.
This is HN and I do not want to make a personal attack or anything against you. But this comment is clearly discriminatory and, frankly, what ever a light version of "racism" is. Please stop generalising millions of people based on some anecdote and spread it online. Eastern Europeans are already marginalized in the Western software world, and English is a non-native language to them. They are as diverse as you and me
* it is true we are more blunt than a lot of our Western colleagues
* blunt does not mean impolite -- I always try to say what I mean with plenty of layers of courtesy, but I do not mince what I mean
* the guy in the article seems like an asshole by Eastern European standards too (mentioning "my charisma" is pretty egoistical no matter how you spin it)
> Eastern Europeans are already marginalized in the Western software world
Not completely wrong but I'd say the software industry is the place I have felt the least marginalized. I left Eastern Europe and finding a job in the software industry was very painless for me, while other places would wish for perfect command of the local language, or discriminated against me almost explicitly. Which leads me to your next point..
> English is a non-native language to them
While true, it is rather annoying to have people hold this over your head when you speak and think in English for decades. I'm more well-read than half my native English colleagues who haven't picked up a literature book since high school, yet being "non-native" means that I constantly have people doubting my ability to speak English. At least I no longer have to hand in TOEFL exams to prove I can speak the language that I think in 24/7, including when I'm talking with my workmates, girlfriend, showering, taking a shit etc..
OTOH, Dutch are notoriously blunt as well.
We've had this before on HN. Student and work culture is changing from "Work it out for yourself because you're a skilled professional who understands how to solve real problems" to "Copy it from someone else without understanding anything about it because that's what you did to get your expensive degree."
It's not so much Google programming as Lego programming. And it's a terrible way to approach any kind of engineering, at any level.
Of course it's fine to import good existing solutions if you know what you're doing with them. But Lego programming is not that.
It doesn't matter how humorous or humble the author might be, these alone worry me. Y'know, me, that arrogant guy who likes grapes.
In any case it's clear the original author does not live in a tech job market anything like North America, where a request to "re-interview" someone would be met with a confused stare followed by a middle finger.
Leading a team or joining a new one? It's translating what the company needs into the set of instructions. Ambiguity in that process leads to stalled juniors, even if they're excellent coders. I've been there, both as the frustrated demoralized junior and, later in my career, as the team lead trying to make that process work.
Yes, I'd be concerned if someone literally cannot write compilable code in the programming language you're working in. But usually if someone makes it far enough to be employed there's something else going on if they're producing serious garbage. Skill, attitude, motivation, team morale, or bad instructions and bad leadership. Honestly, my experience in seeing teams dysfunction is that it's best to start from the end of that list and move backwards.
Also, we need to deliver a swift kick in the nuts to this unlimited growth philosophy. People under you NEED to plateau, that is their comfortable level of productivity. You don't force growth, that is something that comes naturally and at an unpredictable pace.
That said, I still bridle at the term "software engineer"; I mostly accord with Alan Kay's quote "Software engineering hasn't happened yet."
Problem solving skills required and a bunch of questions. What really do you need, how important is each part of it, and who are the other people I need to talk to help make this happen? Being able to ask those questions and produce code from the answers is what we get paid the big bucks for.
At least for now.
v/s
"Don't you know, you missed something? look again!"
I think the interviewer is the problem....
Sounds like a joy to work with.