The Silent Majority of Experts
prog21.dadgum.com
prog21.dadgum.com
The early JavaScript scene was like this - there were people who published amazing JS work and everyone on DHTMLCentral knew who they were, and it was easy to find them and try to hire them. Yet we felt this huge frustration because occasionally we'd interview someone who was as good or better, but we had only found them by accident.
I'm excited about sites like Dribbble and GitHub, which make it easy to showcase your work without having to go through the pantomime of a large folio piece. Though it can be a pain for introverts to do, I've never met anyone who regretted overpublishing their stuff.
The point is that you can't just look for people who are famous or prolific on blogs or twitter or GitHub or whatever else.
When someone starting out in the industry asks for advice on how to get recruited, it's very trendy for wisened old souls on places like HN and Slashdot to mumble something about making sure you contribute to Open Source projects and have a GitHub account.
But on the big OSS projects, where making a contribution wins you significant geek cred, is anyone involved in a hire/no-hire decision really going to take a load of time to look through a bunch of commits you made and figure out whether they were any good and what sort of impression they give of you? IME, you're lucky if everyone making that decision even read your whole CV before the interview.
And on smaller projects, no-one recruiting you knows what they are unless they've shipped and have an obvious presence to see, in which case that is probably a far more effective advertisement than the underlying code anyway.
If you've got your own personal project, which is complete and something a potential recruiter can immediately run for themselves, then sure, include a link to it. Likewise if you've got a blog that's going to give an immediate positive impression and is clearly down to you personally, go ahead and include that. But those are things where you can immediately see the whole picture as a recruiter, with minimal time and effort.
I remain to be convinced that there is much value in linking to things like GitHub accounts or major OSS repositories, because they don't offer the same instant gratification. They do demonstrate that you're a keen programmer generally and not just in it for the money, but that's going to be all they do for most potential employers.
This is true, but not the point (at least until automatic tools run through the commit history and rate the contributions automatically).
Contributing to OSS projects gets you through filters, in the same way being Ex-Google will open a lot of doors.
The fact I'm an Apache committer and have code included in Spring gives me some credibility as a Java programmer (even if I haven't been active in either of those roles for years). Hiring managers are more likely to put you on the "worth looking at" pile rather than the "doesn't have a clue" pile based just on that.
Other interviewers haven't mentioned the contributions at all. So I guess it depends on the interviewer.
But if you get to the point where you're discussing your contribution in an interview, you've already got past one of the big hurdles, and the guys interviewing you are now going to be forming opinions based on what you actually say to them personally. In that respect, contributing to an Open Source project or hosting something on GitHub didn't convey any particular advantage just because in theory the recruiters could look you up, and just giving a link to a GitHub account rather than highlighting specific contributions isn't really worth much at all.
My advice to someone wanting to stand out in those early days would simply be "Make stuff, preferably stuff that looks interesting". Whether you contribute to an OSS project or build something else makes little difference IME, and so I think the cookie-cutter "You simply must have a GitHub account and contribute to OSS" wisdom is just plain bad advice.
I've gotten a cold-call email from a recruiter who started the email out with "I found your github account…" And all I have in there are two tiny personal apps I wrote to scratch an itch I had.
I guess the takeaway is that:
- If you're looking for work, be public. It is still a huge differentiator. Edit: Actually you should try and make a practice of being public even before you're looking for work.
- If you're looking for people, personal networks are still probably the most effective approach. But looking through the activity of open source projects (not just on github) is also very effective. You'd have to put in a lot of work though to actually read code and discussions to find the best people.
Recruiting top people is a multi-year project. Every time.
The only exception is when there's a meltdown (e.g. Sun is acquired by Oracle). And you can bet in most of those, serious players are literally flying down people to recruit out the best people. When the whole Borland/Inprise debacle happened, I dealt with one full-time recruiter who we'd used to capture the few great people who were poachable after that terrible transition happened.
Take home message: read everything on the net with a grain of salt.
[1] http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
In short, being technical (and pretty decent at it at least), public writing just Isn't My Thing.
That said, I find that spending a few moments organizing my thoughts into coherent English for commenting on HN encourages me in the direction of writing and could indeed possibly lead to be blogging. Eventually.
I look with awe upon people who manage to create amazing things whilst also writing eloquently about them - I just can't handle both at once.
'A writer is a person for whom writing is more difficult than it is for other people.' - Thomas Mann
That seems a better definition of a writer than the Thomas Mann quote.
If I published the exact same Github projects under a pseudonym, would anyone who hasn’t read my writing care?
You can pull a Stephen King and try it. Start rolling out new code under a new name. See what happens.
I think, however, that you'd run into the problem of getting lost in a sea of code, regardless of the quality of your work.
When I go dancing in nightclubs, both men and women will come up to me when I stop to get a drink and they'll tell me they think I'm a really good dancer.
But when I go to a dance class and beside me is someone who works for a world-famous dance company, I can look in the mirror and see my skills are only the crudest parody of theirs. There are certainly thousands of people in the world who can dance better than I can - probably tens of thousands.
So it is with my programming achievements - one or two linux kernel patches for seldom-seen bugs in seldom-used subsystems? There are certainly thousands, probably tens of thousands of people who could have done the same thing easily - I was just the first to feel the itch I scratched.
TLDR: I don't know if your question is even intended for me.
If tens of thousands of people in the world are better than you at dancing, you're a really good dancer.
One thing that I observed today was an old friend and colleague sitting next to me. He sort of wrote a Perl program to analyze a weeks worth of tweets in India and draw real cool visualization out of it. The thing is script was not really big and was full of functional programming stuff.
As I was reading the script with another friend, My friend was like 'Oh! I though SQL is unpopular these days, or Perl was dead, or no one uses functional programming these days'. I soon realized- For each of these cries, some one is still sitting and doing awesome stuff with things and using the most simplest and basic tools.
Vast majority of awesome guys don't blog or tweet or harp about every bit of tiny things they have achieved on the Cyber space. But your everyday guy is vastly influenced by ranting, blogging and tweeting and takes them to be holy! And anything other thing than that- which produces results is generally a 'black swan' event to him.
So when something unpopular is used to get the job done, its often difficult to the everyday guy to understand this.
This change in focus is one of the most valuable things (IMO, of course) that more experienced developers bring to a project.
There are some people out there who are truly exceptional and might never be heard from. However in general the real exceptional people are the ones pushing the envelope of whats possible forward. Their work _always_ finds the limelight. The author uses an example of a rigid body physics implementation in a game, and while that's great work and the team should congratulate themselves its not that big of a deal BLAS had been around for decades by that point. That does not describe experts doing amazing things. It describes software developers doing a good job and not being cocky about it.
I think why this has received such a warm welcome here is so many of us software developers want to think we are part of that silent majority. That we are doing amazing things too and if we cared to we could write articles and become famous. The truth is we are not experts we are people who have jobs to feed our families and we may be just as skilled and talanted as the vocal minority, but we would never be able to reproduce their success. That's not a bad thing. I have no problem being an unknown developer working on a piece of corporate software and providing a good living for my family. Its ok if others get press time for their contributions I might take from them and learn, but it doesn't change the fact that they at the end of the day have moved our profession further and I haven't.
There's only a mild correlation between fame and skill set. I can name a few dozen 'famous' internet developers, and have even interviewed a few of them, and most weren't anything special, other than being good bloggers.
Meanwhile, take someone like Jeff Dean (who I just learned about a few days ago). Designed and implemented BigTable, MapReduce, Protocol Buffers, etc. I'm not sure most people outside of Google have even heard of him.
Sometimes your work finds the limelight but you aren't credited for it. We all know Elon Musk but who knows the guy who actually wrote the code for the rockets? I don't remember the name of the Amazon Dynamo guys, and have no idea who designed EC2 and S3. These are awesome systems used by millions of people, but the creators are (relatively) unknown.
Also how can you not know who made Amazon Dynamo they published a research paper on it.(http://www.allthingsdistributed.com/files/amazon-dynamo-sosp...)
I'm reminded of the quote, "To every problem there is a solution that is simple, elegant, and wrong." I have fallen into the trap of looking at a long, messy piece of code, thinking "I can do better than this". I would replace a 50-line code with 5 lines, only to have it fail at some random edge case, which the original has been fixed for.
That is why I always remain skeptical of people who are out to "disrupt" an industry, especially when they don't have much experience in that industry.
Many a times, to start of, a clever 5 or 10 lines would suffice. But the moment you start testing it for production, it'd require more and more logic to handle _all_ the cases.
"Just because looking down your nose at C++ or Perl is the popular opinion doesn't mean that those languages aren't being used by very smart folks to build amazing, finely crafted software."
It's a platitude, sometimes it's even the wrong mindset to have, tools do matter. And worse still it's starting to sound hollow given that all dagdum talks about is how you should do awesome stuff instead of talking on the Internet.
How about he talks about something cool he did recently instead? I guess that doesn't get him as many page views.
At least in this case it is actually correct, unlike previous entries, C++ and Perl are filling two very specific niches perfectly and their obvious shortcomings are the flip side of their strengths.
You have to be careful about this. Using this as a justification not to have good tools ("What's wrong with you? Suffering worked great last time") is bogus logic; there's no reason not to have good tools. The other side of the coin, NOT doing something because you don't have good tools yet, is equally poisonous.
- The test team that spends all its time writing test frameworks and tools, and never writing any actual tests. (How many times have I seen this?)
- The engineer who spends half his time "optimizing" (finding the perfect language, defragging his hard disks six times a day, tweaking TCP settings so repository access is as fast as possible) and not writing code.
- Going around and around on a class design until it's /perfect/.
- Not moving on something because you lack complete understanding.
It's hard to overstate the benefit of just getting in the ring and doing /something/.
After 25 years of random fiddling with one side project [not going to tell you want it is] I finally just started writing some fucking code. And you know, it feels darned good. The stuff I'd been worrying about being inefficient and so forth turned out to be only a few hours of thinking and coding. It was fun.
A poor craftsman blames his tools.
If you give a shovel and a screwdriver, don't complain if the house I build is not up to code.
If I show up with a shovel and a screw-driver, you have every right to send me away.
This middle ground approach is probably best.
PG writes about tools and their importance in "Beating the Averages": http://paulgraham.com/avg.html .
They help, but they don't matter one iota in most cases. Whatever one is doing in Rails could be done in Django or PHP or whatever. A better tool can help, but not as much as using what you already know, using things that have programmers to hire in your area, using what has community support, etc.
If you are using C++ you are probably doing so because you're programming something "closer to the metal" so are probably more likely to know your stuff technically.
On the one side you have the "C was created by God himself, and undefined behavior is expected", and then you have the "languages should be as restrictive as possible because this one time I worked with a developer who was very bad."
It's all very tiring. I do mostly Ruby now, and I love how expressive it is. It reminds me a bit of C++ in that regard. It's just funny how the mindset has shifted.
Whenever I meet someone who extols the virtues of language X I always, sort of cynically, ask them what low-level embedded work they've done and how X could be utilized for that use-case. It's one of those areas where most programmers don't seem to have much background, which if they thought about it would make the utility of C readily apparent.
Edit:rephrased last clause.
Or Visual Basic.
"Just because looking down your nose at C++ or Perl is the popular opinion doesn't mean that those languages aren't being used by very smart folks to build amazing, finely crafted software".
Ie: don't shudder.
I do not accept that they are making it any easier on themselves by this choice of language.
I am interested in D for this purpose - the most recent version looks quite well designed - but it's not as widely supported.
All other things being equal, sure, choose the maximally powerful language in whichever dimension makes sense. But all other things are usually not equal.
If you are working on a project by yourself, here are some things which are more important than the characteristics of the language:
- your knowledge of the problem domain
- your knowledge of general software development
- your knowledge of the limits, capabilities and ecosystem
of the language (aka project experience)
Also, if you're working with others, the following factors are more important than choice of language: - your customer's expectations (if you're shipping software to them)
- the ability to recruit experienced individuals for your project
- the availability of mentors / reviewers within your organization
- the availability of secondary resources (books, FAQ, etc)
(edit: formatting)Picking up a new tool shouldn't take long, but can give a significant benefit. As I like to say, learning something well enough to use is an O(1) action where the benefit is in O(n) to how much you use it.
In the long run, the quality of the tool dominates your current familiarity with it.
While bringing lots of money home, I would add.
I've worked with both and cursed them both to death. But they achieved crazy popularity for a reason. They are extremely powerful and capable tools.
C++ especially can sing in the hands of masters. (And anyone who thinks they mastered C++ in less than 10 years doesn't realize how much more they have to learn. (I mainly curse it because once you have 20 people on a C++ project, there's no hope...)
As one example, law-professor blogs have really taken off. They're good for building reputation and making a legal argument actually have real-world impact (people read them, whereas the average law review article is little read), and sometimes have even been cited in court decisions! So there is a movement towards law professors doing more popularly oriented, but still legally sound, writing; and towards universities taking this into account.
Science has also long had some research/popular-writing crossover, and there are a number of researchers who blog in areas like physics and climate science. And mathematics has an increasingly strong blogging culture, with Terence Tao setting the nearly impossible to top example. So I think there is good stuff out there if you know where to look. Of course, it's also good to experiment on your own, and also to look elsewhere (e.g., in books).
As far as I know, most Wikipedia articles were mainly written by students, not experts.
Staying in a beginners mind is hard once you have spent some time with a technology. It also sometimes offers great points for the experts what could change, because it could be easier or is simply unclear.
Of course there are very simple-minded blogs with practically no content, but there are also simple-minded Github accounts that offer practically nothing. There are CVs for the same purpose. I don't think this has anything to do with blogging per se.
The fact that I know how to sell myself makes me better paid, better treated, and better recognized that others who have the same level of programming ability as me but are less good at shouting it to whoever wants to hear it. And yet, I don't provide anything better than them to anyone. Worse, it's overall detrimental, because I spend time making myself known instead of doing actual stuff.
The business relationship is supposed to be just a construction between us, in order to be able to agree on the tech work. If there is no need on the other party, they have no reason to do business with me. People don't just hire me because I'm a cool guy and I say funny jokes and blabber insightful-sounding things. They hire me because they believe I can, one way or another, provide them some value. Telling jokes, or writing link-bait-ish blog posts, (or doing mostly shiny and maybe useful software), or whatever you want to put under "developing your personal brand 101" is just a way to make them believe that in order to put myself in a position where they would allow me to provide value to them. It doesn't, in itself, provide value to anyone.
Or, at least, it provides less value than the time I spend doing the real, and boring, and lonely, and hard to justify research groundwork that could (or not) lead me to developing something valuable. And I mean research in the broad sense, be it evaluating new or old software, trying to talk to people and to discern if they have problems that I could solve, or just chasing after a sneaky bug in an obscure backend thing that I happen to maintain.
The best coders I've found are not the loudest voices. In many cases they do not comment publicly on the web at all. They just submit bug fixes.
That said, the best code I've found is the stuff that's made publicly available via internet, and I'd argue it's precisely because it allows all those "silent experts" to review it and submit their fixes. It's not the best simply because of the contributions of the silent experts, but because their scrutiny raises the bar.
It takes a certain amount of confidence to make code avaiable for all to see. Because it becomes very clear, quite quickly, whether it's any good or not.
I don't see this same type of peer review and vetting within the corporation. The goal there is different: one need only satisfy the company's clients, most of whom cannot themselves review code quality.
In my experience, many of the silent experts who submit fixes work at corporations. They are no strangers to closed source.
So it's all quite interesting. Open source and open discussion in its own strange way effectively raises the bar. But at the same time the web also lowers the bar to spreading bad code. And disseminating much nonsense chatter about programming.
Hence we have lots of chaff. Lots and lots of chaff. The wheat is there, but you have to know where to look. And generally, when you find wheat, you'll also find lots of "silent experts" submitting fixes.
I often wish which they were the ones making the noise on the web. Because then it wouldn't be noise. Many of these guys really know their stuff. I guess over time the web has worsened things. In the early days, many online contributors, e.g., to bulletin boards and newsgroups, really were knowledgeable in their chosen fields. There were just less people online. That seems to have changed somewhat, but maybe it's just my perception.
In any event, they might be silent, but we know they are paying attention. No one is going to completely ignore the continuing growth of open source and open collaboration.
There's still nothing like C/C++ for getting close to the metal. And until we have an OS written in Ruby or Python, rather than C, it's gonna be like that forever.
[1]: http://www.greenarraychips.com/
Or what about lisp? While these were well before my time, my understanding is that they could run Lisp directly in hardware.
And, of course, there have been OSes mostly written in higher level languages than C or C++. The one that springs to mind immediately is the Singularity OS[2] project from Microsoft that is mostly implemented in C#. I think there is still some assembly, C and C++, but the kernel and drivers are in C#.
[2]: http://en.wikipedia.org/wiki/Singularity_(operating_system)
Are you referring to the work or Perl? Most programmers I know working in a scientific area switched to Python years ago and run away screaming when they hear the work "Perl".
There are a few who don't care to participate thinking they are either above it or below it , but the truth is most people do and everyone should.
http://infolab.stanford.edu/~backrub/google.html
This is really common I can pull you up multiple research papers from them on everything from database design to ranking alogrithems. Same thing for Facebook, Twitter, IBM, Cisco, and the numerous computer science research institutions.
For the most part what you see as "Advanced" is just a better implementation of the same idea. Thats not to say that the people making the proprietary software aren't intelligent and aren't building better products because they are, but its just silly to assume that there is this world of computer engineering talent we don't hear from that's doing groundbreaking things in the shadows.
You know already which one this is going to be :) http://xkcd.com/664/
1. You can learn from a community without giving back to it.
2. It's not really a developers choice if their work is locked in a proprietary binary. That decision was made by their employer, and the only thing the developer can do is get another job (which isn't something most people will consider).
Well, cool could be defined to include popularity. A lot of ideas were great before they were cool. There are a lot of great ideas out there now that aren't cool.
Really? By what logic exactly did you come to this conclusion?