I’m a boring programmer (and proud of it)
m.signalvnoise.com
m.signalvnoise.com
My personal hypothesis is I think these labels are just meant to attract and appeal to a certain demographic. The demographic that skews young, male, and single. The demographic that prioritizes work above all other pursuits. The demographic that is naive and easy to manipulate into seeking life fulfillment by staying at the office from 7am-9pm.
This is the sort of employee they are seeking so they do what they can to attract them. They aren't looking for people who "coder ninja" doesn't appeal to. It's by design.
I think it actually works since I'm totally turned off by those job ads.
I know I am not Donald Knuth or Linus Torvalds or John Carmack or Woz. I am not a rockstar.
"I’m not a big visionary. I’m a very plodding pedestrian engineer, and I try to keep my eyes firmly on the ground."
"We will encourage you to develop the three great virtues of a programmer: laziness, impatience, and hubris" (Larry Wall)
You don't need to be Donald Knuth - or Larry Wall - to be above average :)
IMPATIENCE: The anger you feel when the computer is being lazy. This makes you write programs that don't just react to your needs, but actually anticipate them. Or at least pretend to. Hence, the second great virtue of a programmer.
HUBRIS: Excessive pride, the sort of thing Zeus zaps you for. Also the quality that makes you write (and maintain) programs that other people won't want to say bad things about. Hence, the third great virtue of a programmer.
I think 10x programmers are what programmer should be. In the end, we should have people with all of "10x programmers" -- which mean all people will eventually end with the same great skill of coding.
Unfortunately, 10x programmers are real. There are real programmers who can do the same job with less time. 10x teams are real, too. It is mentioned by Tom DeMarco in Peopleware book. Personally, they might not be called "Ninja" nor "Rockstar", but the fact is their skill is higher than average.
But well....
I really agree with Dan Kim here. I think programming is a continuous improvement. You may not end up like Torvalds, but if you are really want to self improve yourself (e.g. Knowing your code yesterday is worst than today and really want to know how to make the code better), then it is good enough.
IMHO, to reach this summit ("10x"), it is very-very hard. You can improve your skill by doing one of these way:
* By volume. Just do so much thing in your field and voila, you will mastery that skill. Just like pilot. Or,
* By supervisioned learning. This is what we know by "mentorship". You may don't know "how to start" if you learn by volume. With supervisioned learning, you can make the learning faster and enjoy the outcome earlier.
Seriously though, that's what many of these people /will/ get. Worse, they'll actually believe it was their own talent that got them there. The world is a cruel and unfair place.
But it's true, many of these companies are designed to be flipped, technical excellence might be a secondary concern. Ninjas beware.
Probably building something in grad school helps.
Indeed it is.
As a random example, I was able to take a road pollution model that was meticulously optimized, written in Fortran, and approximate its results in Javascript, with almost an order of magnitude performance INCREASE, to the point that pollution models can be computed in near realtime in the browser (road network density permitting).
I did this by using optimization to approximate the model's pollution distribution about road segments using Bezier surfaces, which are fast to compute and have the nice property of being completely contained within the convex hull of their control points. That containment property let me leverage an R*-Tree to quickly determine which sources could contribute an appreciable amount of pollution to a given pixel, and only compute those.
None of the algorithms or data structures I used were original, but the circumstances where I applied them are somewhat novel and the results are fantastic.
- 'Pioneers' - hackers that pave the way, create amazing prototypes and whose code you can't use in production
- 'Architects' - who see the work of pioneers and see the bigger picture and build the structure that is needed
- 'dogmatists' - who see beauty in the art and educate their peers and don't create much code, and act as cult(ural) leaders
- 'Workers' - who implement, work 9 to 5 and go home and implement solidly and don't need passion, but have lots of discipline.
The last group is really important and is rarely talked about.
- Implementation (anabolic process): Create complex things from simple things.
- Maintenance (catabolic process): Create simple things from complex things.
Sorry, but ninja and wizard probably advertise that you watched too much tv when younger, or played RPG. A scientist on the other hand is someone who worked hard to get a degree and tries to advance his/her science. An artist is someone who puts his/her art before anything. They aren't humble roles at all.
You don't see a scientist say he's a "science artisan" or an artist saying he's a "canvas ninja".
In the old days, there were analysts (the people who wrote programs) and programmers (the people who translated these programs to punchcards). We kept only the programmer title.
Our field is vast, yet everyone is a programmer as far as people outside our field are concerned. Scientists could be physicists or astronomers, artists could be painters or actors, doctors may be pathologists or heart surgeons for example.
A programmer can be self-tought, thus the title programmer doesn't imply any kind of official degree or a discipline. You could have a MIT diploma or just be a high schooler.
I think the field developed (and keeps at it) too quickly and the social adjustments that should take place can't catch up. A job not only provides for you, but gives you a place in society. The title “programmer” is as generic as it gets.
Therefore, if you write the code as cleverly as possible, you are,
by definition, not smart enough to debug it."
-Brian Kernighan
The only assumption about librarians is that they "enjoy quiet and order". While this may be an oversimplification (although if you didn't, wouldn't this affect your chances of becoming a librarian?), but what's so arrogant about it?
This oversimplification, or stererotypization, is justified by the context anyway; obviously it doesn't refer to real-life librarians. It's metaphorical language, just as the ninja analogy has nothing to do with actual ninjas, only their image in (pop)culture
I do like to call myself a "hacker" because I feel I fit that definition like so many in our field. But to me hacker defines someone with a strong passion for discovery and curiosity, breaking the rules and learning new things. It's not a magician, genius, or hot shot that others should bow to when we enter a room. A hacker could be anything from Woz to a five year old kid who figured out how to build something different with Legos. It's not a resume bullet point.
I too am growing a little tired of these labels in job ads, asking for some "ninja" who's fresh out of school willing to work 90 hours a week for founder bros because profitability is "just around the corner". At this point in my career I'm looking for fast paced, exciting work but I'm not going to drink 10 red bulls a day to get your platform as a service app finished while drinking IPAs and coding between ping pong rounds. I'm not going to sacrifice 99% of my free time for your baby just to be thrown to the street when you sell out to a bigger company or (more likely) run out of funding. That's the image that those keywords conjure up for me.
I'm the boring middle aged programmer that will work his butt off to get stuff done. I'll exercise due diligence to build things to the best of my abilities and work hard to make sure my skills get better and better as time progresses. I'll get stuff done. I'll ship, and ship good stuff. That's what the kind of companies I seek out are looking for anyway.
The labels are rejected because they are wrong, not because they are labels.
Granted the state has stepped in and in someplaces you can't call yourself an engineer or doctor without certification, but the fact remains that the word has a meaning in common parlance.
Also, if someone cannot answer the question: "what happens when you type 'google.com' in your browser" then you are definitively NOT full stack.
I think it's probably more accurate to define "full stack" as being able to make and launch a web application on your own. Servers and databases are just tremendously easier than they used to be, so the bar has been lowered a lot.
Knowing the steps of what happens after typing in "google.com" in your browser is only relevant to people working on projects of massive size, in which there is no need for a "full stack developer" in many cases, or you're doing something completely removed from just a web application.
Such is life.