New Book Describes 'Bluffing' Programmers in Silicon Valley (theguardian.com)
Long-time Slashdot reader Martin S. pointed us to this an excerpt from the new book Live Work Work Work Die: A Journey into the Savage Heart of Silicon Valley by Portland-based investigator reporter Corey Pein.
The author shares what he realized at a job recruitment fair seeking Java Legends, Python Badasses, Hadoop Heroes, "and other gratingly childish classifications describing various programming specialities." I wasn't the only one bluffing my way through the tech scene. Everyone was doing it, even the much-sought-after engineering talent. I was struck by how many developers were, like myself, not really programmers, but rather this, that and the other. A great number of tech ninjas were not exactly black belts when it came to the actual onerous work of computer programming. So many of the complex, discrete tasks involved in the creation of a website or an app had been automated that it was no longer necessary to possess knowledge of software mechanics. The coder's work was rarely a craft. The apps ran on an assembly line, built with "open-source", off-the-shelf components. The most important computer commands for the ninja to master were copy and paste...
[M]any programmers who had "made it" in Silicon Valley were scrambling to promote themselves from coder to "founder". There wasn't necessarily more money to be had running a startup, and the increase in status was marginal unless one's startup attracted major investment and the right kind of press coverage. It's because the programmers knew that their own ladder to prosperity was on fire and disintegrating fast. They knew that well-paid programming jobs would also soon turn to smoke and ash, as the proliferation of learn-to-code courses around the world lowered the market value of their skills, and as advances in artificial intelligence allowed for computers to take over more of the mundane work of producing software. The programmers also knew that the fastest way to win that promotion to founder was to find some new domain that hadn't yet been automated. Every tech industry campaign designed to spur investment in the Next Big Thing -- at that time, it was the "sharing economy" -- concealed a larger programme for the transformation of society, always in a direction that favoured the investor and executive classes.
"I wasn't just changing careers and jumping on the 'learn to code' bandwagon," he writes at one point. "I was being steadily indoctrinated in a specious ideology."
The author shares what he realized at a job recruitment fair seeking Java Legends, Python Badasses, Hadoop Heroes, "and other gratingly childish classifications describing various programming specialities." I wasn't the only one bluffing my way through the tech scene. Everyone was doing it, even the much-sought-after engineering talent. I was struck by how many developers were, like myself, not really programmers, but rather this, that and the other. A great number of tech ninjas were not exactly black belts when it came to the actual onerous work of computer programming. So many of the complex, discrete tasks involved in the creation of a website or an app had been automated that it was no longer necessary to possess knowledge of software mechanics. The coder's work was rarely a craft. The apps ran on an assembly line, built with "open-source", off-the-shelf components. The most important computer commands for the ninja to master were copy and paste...
[M]any programmers who had "made it" in Silicon Valley were scrambling to promote themselves from coder to "founder". There wasn't necessarily more money to be had running a startup, and the increase in status was marginal unless one's startup attracted major investment and the right kind of press coverage. It's because the programmers knew that their own ladder to prosperity was on fire and disintegrating fast. They knew that well-paid programming jobs would also soon turn to smoke and ash, as the proliferation of learn-to-code courses around the world lowered the market value of their skills, and as advances in artificial intelligence allowed for computers to take over more of the mundane work of producing software. The programmers also knew that the fastest way to win that promotion to founder was to find some new domain that hadn't yet been automated. Every tech industry campaign designed to spur investment in the Next Big Thing -- at that time, it was the "sharing economy" -- concealed a larger programme for the transformation of society, always in a direction that favoured the investor and executive classes.
"I wasn't just changing careers and jumping on the 'learn to code' bandwagon," he writes at one point. "I was being steadily indoctrinated in a specious ideology."
Older generations called this kind of fraud "fake it 'til you make it."
gotta make all this words about being a rookie
This is how business work. Everyone lying about their capabilities and to prospective clients about product capabilities. Its all BS.
I never bluff. I've got a big dick. I don't need to bluff.
Many of these languages have an interactive interpreter. I know for a fact that Python does.
So, since job-fairs are an all day thing, and setup is already a thing for them-- set up a booth with like 4 computers at it, and an admin station. The 4 terminals have an interactive session with the interpreter of choice. Every 20min or so, have a challenge for "Solve this problem" (needs to be easy and already solved in general. Programmers hate being pimped without pay. They dont mind tests of skill, but hate being pimped. Something like "sort this array, while picking out all the prime numbers" or something.) and see who steps up. The ones that step up have confidence they can solve the problem, and you can quickly see who can do the work and who can't.
The ones that solve it, and solve it to your satisfaction, you offer a nice gig to.
I happen to be working my way through the book now. So far, the author is spot on. I recall my last brief engagement in SF was bordering on nightmare. Lots of overly-earnest coders and marketing drones trying to appear like they were doing something meaningful, or at least not awful.
I am of the opinion that at least 70, probably 80, maybe even 90 percent of professional programmers should just fuck off and do something else as they are useless at programming.
It doesn't matter if many tasks are automated. The real value is knowing how to control the tools, the algorithms, the bots, and the people.
Saw this all the time, it's due to the ones who run the show. Their special class prefers to hire only from their group. Most don't even need qualifications. All they need was provided at birth.
than spending weeks interviewing "good" candidates for an opening, selecting a couple and hiring them as contractors, then finding out they are less than unqualified to do the job they were hired for.
I've seen it a few times, Java "experts", Microsoft "experts" with years of experience on their resumes, but completely useless in coding, deployment or anything other than buying stuff from the break room vending machines.
That being said, I've also seen projects costing hundreds of thousands of dollars, with years of delays from companies like Oracle, Sun, SAP, and many other "vendors"
TL;DR: caveat emptor applies to hiring. At the heart of the issue is an overall inability for the job market to price the economic output of "developers" of different skill levels, not to mention the delta between economic value and market value based on the developers skill. A lot of developers' economic value is actually lower than market value (they get paid more than their worth) while for some, the opposite is true. The inability of the labor market to consistently align economic and market value, and the variance in that gap, is what's really causing the angst. What we need to do is devise a better way to demonstrate economic value and work to tie market value to it.
I'm not a great coder but good enough to get done what clients want done. If I'm not sure or don't think I can do it, I tell them. I think they appreciate the honesty. I don't work in a tech-hub, startups or anything like that so I'm not under the same expectations and pressures that others may be.
Debate is a form of harassment. Do not question my truth.
OK, so yes, I know plenty of programmers who do fake it. But stitching together components isn't "fake" programming.
Back in the day, we had to write our own code to loop through an XML file, looking for nuggets. Now, we just use an XML serializer. Back then, we had to write our own routines to send TCP/IP messages back and forth. Now we just use a library.
I love it! I hated having to make my own bricks before I could build a house. Now, I can get down to the business of writing the functionality I want, instead of starting from scratch.
Just because you use components, doesn't mean you're not really programming. Trust me, if you're faking it, you won't succeed with components either.
And a rather small part at that, albeit a very visible and vocal one full of the proverbial prima donas. However, much of the rest of the tech business, or at least the people working in it, are not like that. It's small groups of developers working in other industries that would not typically be considered technology. There are software developers working for insurance companies, banks, hedge funds, oil and gas exploration or extraction firms, national defense and many hundreds and thousands of other small niche companies that most consumers have never heard of. To view Silicon Valley as the place where everybody in tech wants to be is to observe the tip of the iceberg while ignoring the enormous mass that exists beneath the surface. More and more software development and writing code are becoming an everyday part of every business and just as the large home building corporations have not put the small craft builders out of business so too will there always be talented individuals dedicated to the craft and laboring behind the scenes to write the code that keeps everything running smoothly. There will be new and powerful tools, like AI as a service, that will take over and automate some tasks but like a conductor there will always be a developer, baton in hand, orchestrating the symphony.
Fiddling with JavaScript libraries to get a fancy dancy interface that makes PHB's happy is a sought-after skill, for good or bad. Now that we rely more on half-ass libraries, much of "programming" is fiddling with dark-grey boxes until they work good enough.
I'm not putting a value judgement on such work or library-centric architectures here, only making an observation about what's valued by those who hand out paychecks and raises.
Table-ized A.I.
I've been out of the lop for a while so don;t know if these are still a thing, but my company made us write our own business cards. I put down worker bee and they changed it to something like "senior system software engineer".
I was like, huh? In the years that I worked there I never opened the box.
This is the reason I wish programming didn't pay so much....the field is better when it's mostly populated by people who enjoy programming.
"First they came for the slanderers and i said nothing."
That seems about right to me.
I have a lot of weaknesses. My people skills suck, I'm scrawny, I'm arrogant. I'm also generally known as a really good programmer and people ask me how/why I'm so much better at my job than everyone else in the room. (There are a lot of things I'm not good at, but I'm good at my job, so say everyone I've worked with.)
I think one major difference is that I'm always studying, intentionally working to improve, every day. I've been doing that for twenty years.
I've worked with people who have "20 years of experience"; they've done the same job, in the same way, for 20 years. Their first month on the job they read the first half of "Databases for Dummies" and that's what they've been doing for 20 years. They never read the second half, and use Oracle database 18.0 exactly the same way they used Oracle Database 2.0 - and it was wrong 20 years ago too. So it's not just experience, it's 20 years of learning, getting better, every day. That's 7,305 days of improvement.
I'm sorry. But this smells of complete bullshit. You can't bluff your way through coding any more than you can bluff your way towards being a spinal surgeon. You either have the skills or you don't and everybody who matters knows what you bring and what you don't bring.
> The people can do both are smart enough to build their own company and compete with you.
Been there, done that. Learned a few lessons. Nowadays I work 9:30-4:30 for a very good, consistent paycheck and let some other "smart person" put in 75 hours a week dealing with hiring, managing people, corporate strategy, staying up on the competition, figuring out tax changes each year and getting taxes filed six times each year, the various state and local requirements, legal changes, contract hassles, etc, while hoping the company makes money this month so they can take a paycheck and lay their rent.
I learned that I'm good at creating software systems and I enjoy it. I don't enjoy all-nighters, partners being dickheads trying to pull out of a contract, or any of a thousand other things related to running a start-up business. I really enjoy a consistent, six-figure compensation package too.
The legend of the code ninja and rockstar programmer is ruining this field. There is still a role for the genuine master craftsman but most roles can be satisfied by less than this. Stop believing the mythology; much of engineering has always been cut and paste. Silicon Valley is no different.
Obviously thevauthor is someone who doesn't appear to have solid development skills, as he is talking completely out of his ass. He has no business writing a trash book like this, since he doesn't seem to be remotely qualified to speak on the subject. I think he faked it so long that the Dunning-Krueger effect took hold, and now he thinks he actually knows what he's talking about. I've been in this industry for over 20 years now. Yes, I've had to develop new skills as the technology evolved, but not because some AI automated my job away. That is utter horseshit right there. There is no AI on the planet that could have written even 0.1% of the work I've done. That 0.1% that it MIGHT be able to do is such straightforward, menial shit, I'd expect a complete novice to be able to do. I work with some of the smartest people I've ever met, and not one of is afraid of AI taking our jobs.
Lame monkey tests select for lame monkeys.
A good programmer first and foremost has a clean mind. Experience suggests puzzle geeks, who excel at contrived tests, are usually sloppy thinkers.
I think I can guarantee that they are a lot better at their jobs than you think, and that you are a lot worse at your job than you think too.
Again, the quality applicant and the code monkey both have something the fakers do not-- Actual comprehension of what a program is, and how to create one.
As Bill points out, this is not the final exam. This is the "Oh, I see you do actually know how to program-- show me more" portion of the process. This is the part that HR drones are not capable of performing, due to Dunning-Krueger. Those that are actually, REALLY competent will do more than just satisfy the requirements of the challenge, they will provide actually working solutions to the challenge that properly validate their input, and return proper error states if the input is invalid, etc-- You can learn a LOT about a potential hire by observing their work. *THAT* is what this is really about. The triviality of the problem is a necessity, because you ***DON'T*** try to get free solutions out of people.
I realize that may be difficult for you to comprehend, but you *DON'T* do that. The job fair is to let people know that you have a position available, and try to curry interest in people to apply. A successful pre-screening is confidence building, and helps the potential hire to feel that your company is actually interested in actually hiring somebody, and not just fucking off in the booth, to cover for "failing to find somebody" and then "Getting yet another H1B". It gives them a chance to show you what they can do. That is what it is for, and what it does. It also excludes the fakers that this article is about-- The ones that can talk a good talk, but could not program a simple boolean check condition if their life depended on it.
If it were not for the time constraints of a job fair (usually only 2 days, and in that time you need to try and pre-screen as many as possible), I would suggest a tiered challenge, with progressively harder challenges, where you hand out resumes to the ones that make it to the top 3 brackets, but that is not the way the world works.
Someone could Google the problem with the phone then step up and solve the challenge. Both of you have no idea how to test programmers...I bet you would have tons of Bad Indian programmers working for you if you had a company.
And right on time, here comes raymorris. Been to your github buddy, you code like shit.
Hope you invested in more than sneakers and having a good time. You're gonna need it when one AI does you all in on the exact same day and NO ONE never ever needs your "skills" again.
Someone could Google the problem with the phone then step up and solve the challenge.
If given a spec, someone can consistently cobble together working code by Googling, then I would love to hire them. That is the most productive way to get things done.
There is nothing wrong with using external references. When I am coding, I have three windows open: an editor, a testing window, and a browser with a Stackoverflow tab open.
Stick to the one thing for 10-15years
Often all this new shit doesnt do jack different to the old shit, its not faster, its not better.
Every dick wants to be famous so make another damn library/tool with his own fancy name and feature, instead of enhancing an existing product.
Liberty freedom are no1, not dicks in suits.
That seems about right to me.
I have a lot of weaknesses. My people skills suck, I'm scrawny, I'm arrogant. I'm also generally known as a really good programmer and people ask me how/why I'm so much better at my job than everyone else in the room. (There are a lot of things I'm not good at, but I'm good at my job, so say everyone I've worked with.)
I think one major difference is that I'm always studying, intentionally working to improve, every day. I've been doing that for twenty years.
I've worked with people who have "20 years of experience"; they've done the same job, in the same way, for 20 years. Their first month on the job they read the first half of "Databases for Dummies" and that's what they've been doing for 20 years. They never read the second half, and use Oracle database 18.0 exactly the same way they used Oracle Database 2.0 - and it was wrong 20 years ago too. So it's not just experience, it's 20 years of learning, getting better, every day. That's 7,305 days of improvement.
If you take this attitude towards other people, people will not ask your for help. At the same time, you'll be also be not able to ask for their help.
You're not interviewing your peers. They are already in your team. You should be working together.
I've seen superstar programmers suck the life out of project by over-complicating things and not working together with others.
I have a lot of experience in programming, from embedded to web. There's always a contract that needs 5years experience in this trendy new, 18month old, technology. So I think, "How long would a programmer experienced in said trendy technology take?" And bill accordingly, but spec longer than that to complete "because I can't go full time on just one contract". And if it takes me 3 times that long to actually do it, that's the cost of learning the shiny new technology. And I haven't gone full time on the contract, since I'm learning on the job...
Kind of hard to take this article serious after saying gibberish like this. I would say most good programmers know that neither learn-to-code courses nor AI are going to make a dent in their income any time soon.
The concern I have is that there is a real gap between what it takes to develop good software in the trenches and what management understands of those requirements. The bigger that gap, the more bluffing that can occur.
1, 'Back in the Day' there was no XML, XMl was not very long ago.
2, its a parser, a serialiser is pretty much the opposite (unless this weeks fashion has redefined that.. anything is possible).
3, 'Back then' we didnt have TCP stacks...
But, actually I agree with you. I can only assume the author thinks there are lots of fake plumbers because they dont cast their own toilet bowels from raw clay, and use pre-build fittings and pipes! That car mechanics start from raw steel scrap and a file.. And that you need REALLY good eyes, and a lot of sand to fix things with microchips in them..
There is however a middle ground. A plumber who cannot open a tap to change a washer is a shit plumber, a mechanic who replaced an engine because the timing chain rattles is of no use, and Apple doesnt know how to fix phones, because replacing them is not fixing (ok, low blow, but hey..).
Comment removed based on user account deletion
This in my opinion is really a waste of time. Challenges like this have to be so simple they can be done walking up to a booth are not likely to filter the "all talks" any better than a few interview questions could (imperson so the candidate can't just google it).
Tougher more involved stuff isn't good either it gives a huge advantage to the full time job hunter, the guy or gal that already has a 9-5 and a family that wants to seem them has not got time for games. We have been struggling with hiring where I work ( I do a lot of the interviews ) and these are the conclusions we have reached
As a non-programmer Arduino and libraries are my friends
there is a huge shortage of decent programmers. I have personally witnessed more than one phone "interview" that went like "have you done this? what about this? do you know what this is? um, can you start Monday?" (120K-ish salary range)
partly because there are way more people who got their stupid ideas funded than good coders willing to stain their resume with that. partly because if you are funded, and cannot do all the required coding solo, here's your conundrum:
- top level hackers can afford to be really picky, so on one hand it's hard to get them interested, and if you could get that, they often want some ownership of the project. the plus side is that they are happy to work for lots of equity if they have faith in the idea, but that can be a huge "if".
- "good but not exceptional" senior engineers aren't usually going to be super happy, as they often have spouses and children and mortgages, so they'd favor job security over exciting ideas and startup lottery.
- that leaves you with fresh-out-of-college folks, which are really really a mixed bunch. some are actually already senior level of understanding without the experience, some are absolutely useless, with varying degrees in between, and there's no easy way to tell which is which early.
so the not-so-scrupulous folks realized what's going on, and launched multiple coding boot camps programmes, to essentially trick both the students into believing they can become a coder in a month or two, and also the prospective employers that said students are useful. so far it's been working, to a degree, in part because in such companies coding skill evaluation process is broken. but one can only hide their lack of value add for so long, even if they do manage to bluff their way into a job.
IT seems almost unique in that even entry-level jobs require further study (in the employees' own time) just to keep up. Maybe I'm in the wrong place but when I start a project I'm expected to hit the ground running, often with a new technology where no time has been allocated for learning. This is why skills are learnt from Stackoverflow rather than formally taught - there is just no time! Technical debt is usually for someone else to worry about as well :(
All one had to do was look at the lousy state of software and web sites today to see this is true. It's quite obvious little to no thought is given on how to make something work such that one doesn't have to jump through hoops.
I have many times said the most perfect word processing program ever developed was WordPefect 5.1 for DOS. Ones productivity was astonishing. It just worked.
Now we have the bloated behemoth Word which does its utmost to get in the way of you doing your work. The only way to get it to function is to turn large portions of its "features" off, and even then it still insists on doing something other than what you told it to do.
Then we have the abomination of Windows 10, which is nothing but Clippy on 10X steroids. It is patently obvious the people who program this steaming pile have never heard of simplicity. Who in their right mind would think having to "search" for something is more efficient than going directly to it? I would ask the question if these people wander around stores "searching" for what they're looking for, but then I realize that's how their entire life is run. They search for everything online rather than going directly to the source. It's no wonder they complain about not having time to things. They're always searching.
Web sites are another area where these people have no clue what they're doing. Anything that might be useful is hidden behind dropdown menus, flyouts, popup bubbles and intriately designed mazes of clicks needed to get to where you want to go. When someone clicks on a line of products, they shouldn't be harassed about what part of the product line they want to look at. Give them the information and let the user go where they want.
This rant could go on, but this article explains clearly why we have regressed when it comes to software and web design. Instead of making things simple and easy to use, using the one or two brain cells they have, programmers and web designers let the software do what it wants without considering, should it be done like this?
Seeking Ninja software is stupid, unprofessional. I will never apply for a position with that crap.
I make great software, on predictable schedules. I like to have a full life, with outside interests. I did my time working 60-100 hr weeks. Never again. I won't carry a cell phone for work again either.
The tech industry has a ton of churn -- there's some technological advancement, but there's an awful lot of new products turned out simply to keep customers buying new licenses and paying for upgrades.
This relentless and mostly phony newness means a lot of people have little experience with current products. People fake because they have no choice. The good ones understand the general technologies and problems they're meant to solve and can generally get up to speed quickly, while the bad ones are good at faking it but don't really know what they're doing. Telling the difference from the outside is impossible.
Sales people make it worse, promoting people as "experts" in specific products or implementations because the people have experience with a related product and "they're all the same". This burns out the people with good adaption skills.
Lame monkey tests select for lame monkeys.
A good programmer first and foremost has a clean mind. Experience suggests puzzle geeks, who excel at contrived tests, are usually sloppy thinkers.
No. Good programmers can trivially knock out any of these so-called lame monkey tests. It's lame code monkeys who can't do it. And I've seen their work. Many night shifts and weekends I've burned trying to fix their shit because they couldn't actually do any of the things behind what you call "lame monkey tests", like:
Oh and the most important, off-by-one looping errors. I see this all the time, the type of thing a good programmer can spot on quickly because he or she can do the so-called "lame monkey tests" that involve arrays and sorting.
I've seen the type: "I don't need to do this shit because I have business knowledge and I code for business and IT not google", and then they go and code and fuck it up... and then the rest of us have to go clean up their shit at 1AM or on weekends.
If you work as an hourly paid contractor cleaning that crap, it can be quite lucrative. But sooner or later it truly sucks the energy out of your soul.
So yeah, we need more lame monkey tests ... to filter the lame code monkeys.
This in my opinion is really a waste of time. Challenges like this have to be so simple they can be done walking up to a booth are not likely to filter the "all talks" any better than a few interview questions could (imperson so the candidate can't just google it).
Tougher more involved stuff isn't good either it gives a huge advantage to the full time job hunter, the guy or gal that already has a 9-5 and a family that wants to seem them has not got time for games. We have been struggling with hiring where I work ( I do a lot of the interviews ) and these are the conclusions we have reached
You would be surprised at the number of people with impecable-looking resumes failing at something as simple as the FizzBuzz test
Agreed. I've only ever had bad experiences with 'superstar' programmers. They were awesome working on their own or when they were in a good mood. Otherwise they just killed morale dead.
I knew a guy working on missile guidance systems and terrain data mapping (in the 80s). He worked on his own, with a hardware guy, and was an acknowledged coding genius. But when he moved to game design and had to work in a team he lasted six months before they canned him because any gains he brought were more than lost through everyone else's morale plummeting.
I thought this article was going to be about how soyboys and SJWs with no technical skills whatsoever are getting all kinds of tech jobs by using politics to bully companies into hiring them. You can see this happening a lot in video game companies where all the decent programmers are being replaced by gender studies majors. You can't criticize their code because instantly you'll be labeled transphobic, misogynistic or Literally Hitler for questioning their talents. This is how you get people like Randi Harper and Brianna Wu setting themselves up as software developers.
From the summary, it sounds like a lot of programmers and software engineers are trying to develop the next big thing so that they can literally beg for money from the elite class and one day, hopefully, become a member of the aforementioned. It's sad how the middle class has been utterly decimated in the United States that some of us are willing to beg for scraps from the wealthy. I used to work in IT but I've aged out and am now back in school to learn automotive technology so that I can do something other than being a security guard. Currently, the only work I have been able to find has been in the unglamorous security field.
I am learning some really good new skills in the automotive program that I am in but I hate this one class called "Professionalism in the Shop." I can summarize the entire class in one succinct phrase, "Learn how to appeal to, and communicate with, Mr. Doctor, Mr. Lawyer, or Mr. Wealthy-man." Basically, the class says that we are supposed to kiss their ass so they keep coming back to the Audi, BMW, Mercedes, Volvo, or Cadillac dealership. It feels a lot like begging for money on behalf of my employer (of which very little of it I will see) and nothing like professionalism. Professionalism is doing the job right the first time, not jerking the customer off. Professionalism is not begging for a 5 star review for a few measly extra bucks but doing absolute top quality work. I guess the upshot is that this class will be the easiest 4.0 that I've ever seen.
There is something fundamentally wrong when the wealthy elite have basically demanded that we beg them for every little scrap. I can understand the importance of polite and professional interaction but this prevalent expectation that we bend over backwards for them crosses a line with me. I still suck it up because I have to but it chafes my ass to basically validate the wealthy man.
Comment removed based on user account deletion
Building huge, complicated structure involves a lot of fabrication. Not fabrication in the sense of creating a falsehood, but designing, cutting and assembling materials (usually steel) into the desired object.
What you seem to be arguing is that anyone who claims to understand how to build these objects need to understand how to builder a welder, a plasma cutter, a band saw, a grinder, etc. You don't. You need to understand how to employ them, but there is no need to know how they work or how to make one.
Software is much the same. There is no need to understand the origin and workings of the tools you use, rather, you need to understand HOW to use that tool. Some of the best Welders in the world (and welding is a very technical and highly skilled trade) have no idea how the devices they use work internally.
When Fascism comes to America, it will call itself Anti-Fascism, and tell you to give up your guns.
The difference between a smart programmer who succeeds and a stupid programmer who drops out is that the smart programmer doesn't give up.
"First they came for the slanderers and i said nothing."
You are in luck! Plenty of cheap Punjabis that will work for 1/3 American wage, and they will Google everything!
The point of this exercise is not to filter out who knows quicksort or remembers the sieve. Its filtering out the imposters.
We send candidates a quiz to work on at home for a couple of days. DAYS! They can google it! The percentage of people that don't send in all the answers or get it wrong is amazing! And you can find the answers by googling "Standard $language interview questions". Pretty good filter if you ask me.
Politics before code.
So basically like doctors, from general practitioners all the way to surgeons.
It's time we realised that programming is part of a set of engineering skills that are required in order to build any of the complex systems involved in many modern applications. No single person will have more than a small fraction of the skill and experience required. Even the most experienced ones who lead the architectural effort will have to defer to specialised expertise for some components.
One earlier commentator wrote:
My education including designing a microprocessor from logic gates, building it in a lab, programming in a diverse array of languages from assembly up, writing an assembler, and writing a compiler.
In the work world, I've written an OS, drivers, a C standard library, a compiler, several interpreters, database engines, etc. When I use these things, I understand them at a level that makes my code better. If you don't think you could write something like that, you are probably just a script kiddie and have no business architecting major applications.
Unfortunately, the fraction of programmers with the level of experience described above is–inevitably–vanishingly small, particularly in projects where those people also have to understand some higher-level "business logic" associated with the application in question.
But even that experience omits many things that are often crucial to success, particularly where performance or reliability requirements are challenging. In hardware, this can take one beneath the depths of logic gates and into the realms of electronics and physics. Computer architecture, e.g., cache organisation, memory models, compiler optimisation, threading, interconnects, etc., to name but a very few aspects of systems, have their own subtle effects, while algorithms and data structures and numerical analysis etc., require deep understanding of math and statistics – and all of this before one considers the application itself. And don't forget the air conditioning/cooling requirements, the on-going operation and maintenance or.........
People who are good at pouring concrete don't usually design bridges. People who design bridges don't always know much about the chemistry of concrete or metallurgy of steel and aluminium.
People who hire programmers shouldn't expect them to be have most of the skills required to build a complete system. Look to large engineering projects –bridges, cars, aircraft, roads– for a better model of how to build teams of people; stop looking for superheroes.
Of course they are important. I wouldn't have done those things if they weren't important!
I frequently have friends say things like "I love baking. I can't get enough of baking. I'm going to open a bakery.". I ask them "do you love dealing with taxes, every month? Do you love contract law? Employment law? Marketing? Accounting?" If you LOVE baking, the smart thing to do is to spend your time baking. Running a start-up business, you're not going to do much baking.
If you love marketing, employment law, taxes, etc, then start your own business. If you love writing software, and you're really good at it, then someone will pay you six figures to do what you love.
Of course, the ideal for a really good programmer is to partner with young Bill Gates on a new business, and you do the software while he does the business. That doesn't happen often, though.
What is often mistaken for 20 years’ experience, is just 1 year’s experience repeated 20 times.
09F91102 no, 455FE104 nope, F190A1E8 uh-uh, 7A5F8A09 that's not it, C87294CE no. Ah! 452F6E403CDF10714E41DFAA257D313F.
Normie who doesn't know programming is amazed that there are third party libraries that are shared and used elsewhere
You quoted a lot. Is there one part exactly do you have in mind? The thesis of my post is of course "constant learning, on purpose, makes you better"
> you take this attitude towards other people, people will not ask your for help. At the same time, you'll be also be not able to ask for their help.
Are you saying that trying to learn means you can't ask for help, or was there something more specific? For me, trying to learn means asking.
Trying to learn, I've had the opportunity to ask for help from people like Neil Brown, ESR, Florian Weimer, Randal Schwartz, and Ralf Engelschall. I've certainly learned from them, and gotten good help.
I ask because the one thing I enjoy more than designing programs and learning to do that better I'd helping OTHER people learn to do better software. I've been slowly creating a position for myself where hopefully I spend at least half my time doing that. Currently, I spend about 35% of my time helping other programmers, answering questions or whatever. Want to do more of that.
I really enjoyed something that happened the other day. The lead architect asked our team "what is this function for? @Ray this looks like your code". He could tell it was mine because it used a certain more advanced coding technique that makes the code easier to read and understand (thereby reducing bugs). The cool thing is, had he looked it the commit, he's have seen another programmer's name on it. It was done by a programmer who has been pushed to spend more time on paperwork, because he's better at paperwork than code. But he and I have been spending a lot of time working together, with him asking me questions throughout the day. "My" techniques for clearer, less bug-prone software are now showing up in code written by junior members of the team, because they come ask me, and we learn together. I think that's awesome.
I can tell you a few things that have worked for me. I'll go in chronological order rather than priority order.
Male friends in the industry you want to be in. Referrals are a major way people get jobs.
Look at the job listings for jobs you'd like to have and see which skills a lot of companies want, but you're missing. For me that's Java. A lot companies list Java skills and I'm not particularly good with Java. Then consider learning the skills you lack, the ones a lot of job postings are looking for.
Certifications, posted on your LinkedIn, let recruiters find you when they want someone with your skills. Some people will point out that certifications don't prove skill, people can cheat. But certifications CLAIM a certain skill level. When I list "Cisco CCNA" on my resume, I'm claiming a very specific level of networking knowledge, which can be confirmed in an interview. People also point out that (entry-level) certifications don't prove expert-level knowledge. Duh. Entry-level certifications show entry-level knowledge. Advanced certifications like CCIE show expert knowledge. But the point is, certificates are clear, industry standard ways that recruiters actually use to find candidates that match.
With those three steps done, you should have multiple requests for interviews. You have the right skills, and recruiters looking for those skills find you. So now what about the boss that makes you hate showing up for work?
Plan how you can screen the company and interview the boss. I see a lot of job ads for Wells Fargo because they are trying to hire people with my skills in my city. But we know from the news that Wells Fargo corporate culture is to lie, cheat, and steal to make monthly targets. I won't be applying at Wells Fargo. In interviews, I try to ask questions that give me some insight into the boss and the company. I can afford to walk away to the extent I've done the other steps, acquiring skills that are in-demand and marketing myself.
I bet other people reading this have some good tips of their own. Who has one to share?
Here's another tip I just learned - proofread what you write. :)
My first tip was supposed to be "make friends in the industry", not "male friends". Indeed when it comes to networking and friendships, in average females are probably statistically more open to relating than males are.
In 70's I worked with two people who had a natural talent for computer science algorithms .vs. coding syntax. In the 90's while at COLUMBIA I worked with only a couple of true computer scientists out of 30 students. I've met 1 genius who programmed, spoke 13 languages, ex-CIA, wrote SWIFT and spoke fluent assembly complete with animated characters.
According to the Bluff Book, everyone else without natural talent fakes it. In the undiluted definition of computer science, genetics roulette and intellectual demographics that covers the rest of the population. It's cynical. It's higher education little secret. It's why software (i.e. Google, Facebook) rules and hardware is competitive.
So now you know why Apple Inc. competitors are Microsoft and not Dell, H-P et. al.
It's no longer necessary? Quality is TERRIBLE now.
It absolutely is, now more than ever.
The only thing fuzzbuzz tests is "have you done fizzbuzz before"? It's a short question filled with every petty trick the author could think ti throw in there. If you haven't seen the tricks they trip you up for no reason related to your actual codung skills. Once you have seen them they're trivial and again unrelated to real work. Fizzbuzz is best passed by someone aiming to game the interview system. It passes people gaming it and trips up people who spent their tume doing on the job real work.
New Book Describes 'Bluffing' Programmers in Silicon Valley
It's not as interesting as the one about "fluffing" programmers.
It must have been something you assimilated. . . .
software engineers will never go out of demand. but of course that's more than just copy/paste, it's actually solving problems. If your only experience is in writing pure html and a bit a javascript, yes I'm afraid those days are over. Thank god for that, it was like the middle ages.
To founder/foundering, a nautical term for shipwrecking.
Bullshit!
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
And a high percentage of those felt like outright scams. We had real clients, spending real money, for a product that didn't really work as advertised.
They would tell clients how they had this magic cutting edge platform, while really behind the scenes it was fudging the numbers so they seemed believable.
Good tips. If you're actively making your team and your boss succeed and look good, most people will leave you alone and let you do that.
I've also learned that precedents are established quickly. Whatever you want to establish about relationships at work, establish it early. Also however you want to be seen, be thought of, put that out there early.
Some people introduce themselves and quickly show "I'm a friendly guy and you'll like me", others want to show themselves to be tough or whatever. For me, I like to establish "technical credibility", I show that I know what I'm talking about, when I speak about technical issues it makes sense to listen to what I'm saying. (Part of that is keeping my mouth shut when I don't know what I'm talking about, or asking questions rather than making assumptions).
Fizzbuzz is nothing but a collection of cheap tricks from people who are good at tricks and being loud and bad at coding.
I disagree. Any programmer that knows how to code can get a working solution to FizzBuzz.
It may not be optimal or elegant, but it'll fucking well work.
What you should be assessing for is correctness and the quality of the written code, not its optimisation or ability to be refactored. If the programmer produces something readable, maintainable and documented, and also points out the areas they know you should focus additional resources if you really give a shit about the performance, that's the person that knows their shit.
Someone that quickly types out the generic known solution but uses 'i' as a loop counter is exactly the sort of person you thank for taking part and engage no further.
Someone that can't even get their code to compile, let alone pass the test, clearly isn't a programmer no matter what their CV states.
I'm not advocating use of FizzBuzz but it's also pretty easy to use to differentiate aware, capable people from utter fuckwits.
Well said. I post to /. every time programming as a job comes up, to relate my experience that the great career was having IT as your second skill. I got a CPSC degree and all, but after my Engineering degree, and for nearly all my career, my title was Engineer. (Waterworks and sewer stuff - GIS mapping, construction mgmt, etc.)
I had a far safer job because I was much harder to replace; very few have dual skills for some reason. Division-of-labour is great, and I'm sure that full-time programmers are way better programmers than I; but we really need far more dual-skill people in the business, interfacing between the customer dept and the IT department. The hardest thing to get right is the specs.
You bring up a good point. There is also an interesting counter-point, leading to need to balance the two.
Certainly a major deficiency in one area can override one's excellence in another. If an amazing technician has no ability at all to communicate with other people, he'll do little good. On the other hand, major advances, and perhaps the majority of overall good, are done by specialists, people good at one thing.
I don't have the people skills of a good salesman, and it would be a waste for me spend time developing that, because major companies HAVE sales people, who are not the development engineers. It is wise to practice getting really good at what YOU do, rather than trying to achieve mediocracy in what everyone else does. So there is a balance there - improve your weak points - until they are no longer a major hindrance to using your strong points. I suck at graphic design, and that's perfectly okay - the graphic designers handle that, and more affordably than it would cost to have me doing graphic design.
Some "weak points" are also an alternative term for strong points. Every US president has been profoundly arrogant. They actually believed that not only they SHOULD be elected President, but that most people would see that, everyone would agree that they should be President of the United States. How arrogant is that! Tame your arrogance, if it's a problem, but don't work TOO hard at becoming exactly average in every way, I'd say.
The parent post and this entire thread is not about coding or what it takes to write code well. Talking about what's "a great boost for the company" is closer to the mark in that framing issues around what's "a great boost for the company" is self-destructively short-sighted. We're better off challenging that framing, particularly on sites like these which are built to do the opposite and give users the power to censor those who step out of line (also known as moderation).
Listen to the interview with the book's author on Doug Henwood's show. You'll quickly find this is not about coding or even high-tech; in fact, Pein says that the programmers he spoke with really don't have social skills beyond talking about their current project (suggesting a profound naiveté or downright ignorance of important political trends governing their own work). And that they believe this ridiculous myth of "work hard, play hard" so their time spent in squalid conditions is some kind of dues-paying one must endure in order to be rich later on. In reality, they're fools: they'd be lucky if even 5% experience this, meaning 95% are chumps who will spend their lives working for little and wasting time they should spend organizing for better outcomes for most (including themselves). To me this jibes with the profound innumeracy, political naiveté, and indoctrination in tech "journalism" that passes on sites like Hacker News (Pein mentions ycombinator in the interview) and /., as well as the arrogant anti-free speech bias that revolts at anyone who dares to challenge the narrative provided by the article at the head of the thread. Hence the discussion in the recording around 25m30s:
Digital Citizen
Just curious, but how would a person who is not themselves an experienced coder be able to tell who is competent and who is scamming?
FizzBuzzEnterpriseEdition
Read the commit history for more enterprise quality.
The author shares what he realized at a job recruitment fair seeking Java Legends, Python Badasses, Hadoop Heroes, "and other gratingly childish classifications describing various programming specialities."
Tech companies recruit for ego over competency anymore. The nerds (i.e. the smart ones who really know what they are doing) are being weeded out of the industry in favor of used car salespeople who know how to talk-the-talk about all the latest new trends. Block-chain anyone?
With over twenty years of experience in this industry, I can assure you that the last person you want to hire is someone who thinks of them self as a "Legend", "Badass", or "Hero". It's as though tech industry HR "thought-leaders" have never heard of the Dunning-Kruger effect.
Well played, sir!
Socialism: a lie told by totalitarians and believed by fools.
Someone that quickly types out the generic known solution but uses 'i' as a loop counter is exactly the sort of person you thank for taking part and engage no further.
'i' is idiomatic. Admittedly, 'n' is better for an arbitrary number that's not an index into an array, but 'i' is fine. You'd prefer fortyCharacterCoboiNameDescribingAnArbitraryNumber?
Socialism: a lie told by totalitarians and believed by fools.
I want descriptive self documenting code that's readable and maintainable.
Not code written by a cunt that thinks cnt is a funny variable name. Yeah, worked with him once.
Also, pay attention to how fast the candidate works. If the candidate just whips it out, then (a) the candidate thinks well in code, or (b) the candidate has done Fizzbuzz about 29 times in the past three months. If the candidate has real problems, then (a) the candidate is having problems with the programming environment or (b) isn't worth hiring.
And what's wrong with "i" as a loop counter in a short loop? It's easy to type and traditionally used. Meaningful variable names are for variables that have a meaning outside the context of the program.
"When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
It's destructively lazy. It inhibits readability when you have nested loops. (i and j? really?) It slows refactoring and risks introducing new bugs. It suggests the programmer doesn't understand sufficiently the variable and its role, its purpose.
Meaningful variable names are for variables that have a meaning outside the context of the program
Bollocks to that. Meaningful variable names are for the benefit of programmers, and the source code is the context. Be descriptive in your naming and the code is far far easier to read, understand, maintain and also just write correctly in the first place.
A loop variable is, well, a loop variable. "i" is readily recognizable as one. It suggests that the variable's role is to iterate through a loop. It's a simple-to-type name for a simple variable.
"When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
Yes, but 'i' is self-descriptive when used as an index. Bro, do you even math? Of course, it's become quite rare to iterate through a container that way, so it's a bit of a moot point.
Socialism: a lie told by totalitarians and believed by fools.
Apart from being the established name for an index since forever, its very shortness *is* self-documenting: it's a short-lived, temporary, throwaway variable, so it has a short name.
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
If you can't tell them apart, ask your dog for help.
Would you prefer IndexThatControlsInnerLoop and IndexThatControlsOuterLoop? You think having over 80% of the letters in common makes them easier to distinguish?
Confucius say, "Find worm in apple - bad. Find half a worm - worse."