Why no one is looking for ‘rockstar programmers’
blog.netguru.co
blog.netguru.co
I recently decided that my surface-skimming knowledge of lambda calculus was severely lacking, and so I picked up a few books. One of the better written books was written in 1981. That was 33 years ago. What changed 5 years ago to now, is essentially "sugar" on top of the fundamentals.
One thing I did notice, especially with the node.js crowd (essentially where the "rockstar" programmer meme gained its popularity), is that a lot of old things are being re-discovered.
While there may be very good arguments for re-implementing things, and re-learning things (and I do that quite a lot too), I personally do not think that re-solving the problem in the old way in a new language/framework/whatever is really worthy to be considered an achievement.
And I think that is essentially what is wrong with the whole "rockstar" programmer meme. Want to be a rockstar or ninja or guru? Go dust up some old book on algorithms, and reimplement it in the trendy language of the day.
> ... especially with the node.js crowd (essentially where
> the "rockstar" programmer meme gained its popularity)...
The rockstar programmer meme is far, far older than node.js. It crops up any time the labor market for programmers becomes tight. It's a lazy way to (a) try to draw attention to your job ad, and (b) a cheap play to the reader's ego. > I personally do not think that re-solving the problem in
> the old way in a new language/framework/whatever is
> really worthy to be considered an achievement.
Not an achievement for the world at large, perhaps, but for the individual, it is certainly an achievement.It's also a good method to learn a new language in a somewhat predictable way. One of the first things I do when learning a new language is port or use something I am already familiar with to it. That way I can concentrate on the language itself and not so much the problem the code solves.
"Which technology that is relevant today was relevant 5 years ago? Which technology that was relevant 5 years ago is relevant today?"
Ruby, Python, Java, C, C++, Windows, Linux, OSX, relational databases, HTML, CSS, JavaScript, HTTP...and that's just a very short list off the top of my groggy, pre-coffee-in-the-morning head.
It's still asking the same thing, so I'd say yes. But you might be asking it for different reasons ("am I interested in this historically or practically" vs. "is this innovative or canon?").
Mmm, coffeeeee @_@
Maybe there will be some new (to the industry) programming paradigms, but from the reception that functional concepts have gotten from a lot of people, there seems to be a large amount of seasoned programmers that seem pretty displeased at the idea of having to learn stuff that is actually for the most part new to them.
I feel that a lot of this comes from unrealistic scaling expectations; stop worrying about serving Facebook-like traffic and use tried-and-tested tools.
If you have ever been in a project with some higher up dictating some technology because the corporate vendor is good at his job, but said technology is awful for the project, and you have no say about it, that's what the 'rapid change' tries to avoid.
For example: using Oracle for a small DB.
Some people have an easy time programming, and the specifics - libraries, languages, etc - don't matter at all. They'll pick up that new stuff in their sleep.
I recently hired a Java guy after talking to him - he had all the right hallmarks so I was pretty sure he would be good. I gave him a task with a piece of software I am intimately familiar with. A good developer would have had to get up to gear for a week (40 hours), then code, test, work around the little kinks (there are many).
All in all an optimistic assumption of mine would be that this task would take a brand new guy a month. The dev I hired did it in less than a week!
These people are rare. They are the rockstar programmers. And if you find one, you want to hold on to them no matter what.
Team players? What if the guy can do twice as much in a week than a "team" of 5 mediocre guys?
To get back to your assertion, he then proceeded to learn Android and put a functioning app in the Google play store in less than a week.
Granted that's still Java, but the libraries are all different and developing for mobile is also different.
If I had an iOS job right now, this guy would get it, despite never having done iOS. He'd learn this in his spare time and then proceed to run circles around people who've been at it for years.
That's a rockstar programmer for you.
Greenfield development is always easier than having to work with 200K LOC codebase that is crappy for all intents and purposes. Let's see how quickly a developer can jump on, wrap his/her around everything, then make significant changes and maybe I'll believe in that nonsense.
Personally I think if a job ad includes the word rockstar, I would expect hot groupies and coke on the job (2 or 3 times a week to allow some time for actual work :)).
In mainstream programming. You don't need to time-travel to experience huge cultural and technological shifts - you can go from Prolog to Forth to Racket to Smalltalk to OCaml to Haskell and experience more of a change than a C++ programmer from 1985 would if transported to 2013.
Inside one paradigm the changes are necessarily iterative and slow. Differences across the paradigms are huge. At a given time only one or two paradigms are mainstream, and they change rarely. The same goes for hardware architectures. This makes it look like programming is stagnant, and for the most part it is. However, when the change comes - like from unstructured to structured programming or from 16 to 32 bits architectures - people who lived happily inside the main paradigm have a hard time adjusting.
I don't know when the next major shift in paradigms will come, but it will, and then the belief that the only changes in programming are superficial will prove dangerous.
The fact that Prolog isn't the same as Forth is a complete tangent.
I personally remember one and it was around the transition from 16 to 32 bit architecture (for me it was in context of WinAPI vs. MSDOS programming). That seemed like everything has changed completely and people had to put a big effort to stay relevant. The same happened - from what I hear - when OO became mainstream. The same when we largely abandoned asm for higher level languages. Basically, I'm saying that there are such 5 years periods in which the above statement holds true.
Such turning points have, I think, one thing in common - new technologies, methodologies and paradigms are not created overnight, in each case the "new" was around for quite a few years before it "suddenly" replaced the "old". It was just outside of day to day work of most programmers. That's why I think it's important to be on a constant lookout for new things in programming - or even old, but different things. One day, in a matter of months, they may become dominant and make your skills largely obsolete which will make you maintain some legacy stuff for the rest of your career. It's a hyperbole of course.
Anyway, while today and 5 years back are not that different, maybe today and five years in the future will be. And then you'll have a problem getting a job until you catch on. I'm not saying how probable it is, but it happened and may happen again. Or didn't it? What is your perception of this issue?
1. Be an egoless programmer.
I've heard this a million times and always hated it. I lost count of the number of projects I've witnessed that were saved when someone who knew what they were doing put their ego on hold. You know what you're talking about: you have a moral responsibility to speak up and do the right thing, ego or not. I prefer, "Don't be bashful but be nice."
2. Be a team player.
Oy, this sounds like something my PHB would say. I prefer, "Just do your fucking job."
3. Be a learner.
Absolutely! But don't restrict your learning to technology. Learn about your customers' and users' domains. Suffer with them and their problems. You'll probably get far more milage out of that than more technology.
4. Be a T-shaped person.
I like this, but again, I would add my customers' domain. Being the go-to person with deep understanding of the technology who knows how to apply it to the problem at hand is a deadly combination.
5. Be relentlessly resourceful.
What does this even mean? I prefer, "The answer is always 'yes'. Sometimes, 'yes but', but always 'yes'".
I think you might be misreading it, it's all about both speaking up and accepting criticism; let me just repeat what the article says:
"Remember that you are not your code. The only way to improve is to be open to feedback from others and give honest, non-judgemental feedback to others."
What's bad about any of that?
And while I haven't followed the "rockstar" programmer concept, the connotations of "rockstar" certainly would seem to include an unproductive amount of ego.
By definition, someone who fits the 'relentlessly resourceful' mold, is a rockstar programmer.
If you know your craft, just let your work speak for itself.
It is always about the code and it's never not about the code. Having the ego to believe that your code is the best makes you a good programmer; because, inevitably, somebody will come and point out that there's a bug, a flaw in your beloved creation. That's when you get annoyed, your ego is crushed... you accept it and the next time you won't mess up again. That's how you improve your skills and that's how you get to be a better developer.
You shouldn't care if you're called a rockstar or not, and most certainly you shouldn't call yourself one; saying that you're a programmer should be enough! We should live in the shadows and let our code to do the talking.
PS: I have the feeling that "rockstar" programmer is starting to replace the beloved "guru" as the word that makes up for one's lack of coding skills
I disagree. Whenever I am asked by somebody what the worst code they have seen lately is, I always point to my own hall of shame. Ego builds a wall around you and makes being a teammate more difficult. You essentially become unapproachable by management, and worse, by junior devs looking for guidance.
I handle this by accepting that I'm a fallible human being and that the artifacts that we're constructing are way too complicated to always get right the first time. So errors in my work, as long as they're reasonably small in number, are just a reflection of that fallibility and complexity (if the number is too big that's a signal something is seriously wrong).
So depending on the project, small team can be replaced by a single good programmer, or the project is just too large and you need many many people and communication infrastructure.
The "rockstar" connotation is just SEO.
- Why no one is looking for ‘rockstar programmers’ ... they are looking, lots of shops are looking for the 'rockstar' or carry or lead developers. These developers while being very talented can be humble, kind, and great to work with.
- Egoless isn't what you want, you want separation. Ego (pride) is good, it drives you to improve. Separation is what lets you pitch an idea then allow it to be mercilessly ripped apart by your fellow developers (and even yourself).
+ Team Player ... yes, you want team players.
+ (then -) Always Be Learning ... great idea... and then he goes and backs it up with one of the stupidest points I have seen recently, the 5 year argument. Any develop worth his salt would have a long list of answers to both points.
+ T-shaped ... it is a generally accepted good thing ... you know some T-shaped developers might be gasp rockstars
+ Relentlessly Resourceful ... sure, absolutely...
I find it childish; I would never attempt to consider an offer expressed in this way.
Being italian, I always considered my disgust due to a cultural difference: United States people tend to use a more "sensationalist" language. What do you think about it?
2.Be a team player. 3.Be a learner. 4.Be a T-shaped person. 5.Be relentlessly resourceful.
When presented with with a "fact" that is very easy to contradict, like this one is, it's an indication that the author has made a poor choice of words, not that their point is without merit. In that case -- in all cases actually -- it's best to read for intent.
(edit: In this case, Schmidt is arguing that although the ad might say "rockstar programmer" that that's not what they're really looking for.)
However my experience of programmer rockstars is just as bad, their stage presence is pitiful. Instead of cutting it with wild guitar solos they tend to spend to much time StackOverflowin', when we're wailing out a tune they often grimace and put on their sound cancelling headphones.
Please, everyone stick to your profession.
http://www.valvesoftware.com/company/Valve_Handbook_LowRes.p...
All the talk about collectivism and social responsibility in a creative process is naive nonsense. Imagine pg with rtm instead of doing whatever they think is the right thing to do with viaweb, would rather ask how other windows developers around feel about it or trying to not hurt anyone by being superior.)
I don't know, it is so obvious. Van Gogh or Gaudi doesn't not care how others feel or what they think. There is just a tiny nuance - you must be above average in what you do in the first place. Mediocre who is sure he is a Steve Jobs is a very common and ridiculous situation.
No works of arts were created by a crowd. Only massive construction projects. Meetings are ruining the novel views and designs. Using ones own mind, ignoring what slogans others are changing is essential. Otherwise you will end up with Java, Windows, PHP and other popular crap.
The good programmer asks questions first. The bad one runs off and builds stuff at a whim.
The good programmer gets stuff done. The bad programmer wastes time on the latest and greatest, bikesheds on whether they should rewrite everything in ruby today and go tomorrow.
Avoid the bad programmers.
It's possible to drink like a fratboy on the weekend and crush code from M-F.
You know what this is? This is my new fuckin' REPL. You know what that means? I'm writin' some fuckin' code tonight.
Obviously, there's a middle ground that's optimal. People who can't work with others at all aren't good hires, but neither are the Clueless "team player" types who top out at middle management (because people with strategic talent avoid getting stuck doing someone else's grunt work).
Similarly, the iffiness of "rockstars" in working well in teams is legendary.
I really doubt the OP has a hidden agenda of making things easier for managers.
I just got the following in my inbox a few days ago.
---
Hello ____,
I stumbled across your profile on LinkedIn and was impressed by your background with (company) as their (tech title). I would love to chat with you about what we are building here at (startup).
I am the CTO and one of the co-founders of (startup) - we are a startup with an office in (location) and we are very successful in changing the way companies do business with each other. Our customers are companies like (big companies) and many more. We are looking for help from people like you to scale our product while we grow in terms of data, processing, customers and users.
Our infrastructure runs on AWS using Cassandra, MySQL, ActiveMQ, Tomcat and other technologies/services. Most of our code is in Groovy and Java leveraging Jersey, Grails, Spring, Hibernate, .... On the front-end, JQuery, Mootools and other libs and frameworks.
In short: We are a fast growing startup that solves real-world business problems for huge companies with an awesome, committed and agile engineering team.
If that sounds like something worth talking about I would love to get a few minutes of your time when it fits you best.
Hope to hear from you.
Cheers,
(somebody I've never met)
---
He doesn't say "rockstar programmer" in there but he should have. It would have at least brought a smile to my face. Companies _are_ still trying to sucker young kids into this kind of stuff with words like "rockstar," "ninja," "awesome," ...
I know how hard it is to find talented people. I suppose an email like that has been finely honed to net the most applicants possible. But if you want _those_ kind of applicants, you're already behind.