“Let me try to explain to you, what to my taste is characteristic for all
intelligent thinking. It is, that one is willing to study in depth an aspect
of one’s subject matter in isolation for the sake of its own consistency,
all the time knowing that one is occupying oneself only with one of
the aspects… It is what I sometimes have called “the separation of
concerns”, which, even if not perfectly possible, is yet the only
available technique for effective ordering of one’s thoughts, that I
know of.”
What separates good hackers from great ones? Is it all about coding skills? Are great hackers coding ninjas who can implement dijkstra algorithm while blind folded? What does top talent look like? or if you are Google, and you have the freedom to (almost) hire anyone, who would you hire? I think these are interesting questions.
Everyone knows that in any field you have to be really good at what you do to get to the top. But are the insect like specialisation skills enough for top companies to hire you? Is the equation that simple?
For starters, there are some obvious qualities:
- Be good at systematic debugging
- Ability to break down large problems, architect solutions
- Comfortable Learning on the fly
- Good Communicator
- Good intutiution
But dig deeper and its more complicated than that. In this post i compile some thoughts by famous people of our industry.
1. T— Shaped individuals
Lets start with the general concept of ‘T’ — Shaped individuals which is relatively well known. It states:
“The concept of T-shaped skills, or T-shaped persons is a metaphor used in job recruitment to describe the abilities of persons in the workforce. The vertical bar on the T represents the depth of related skills and expertise in a single field, whereas the horizontal bar is the ability to collaborate across disciplines with experts in other areas and to apply knowledge in areas of expertise other than one’s own.”
Over the years, I came to realize that my best work has always involved subjects that interested me, or — even better — subjects about which I’ve become interested, and even passionate about, through the very process of doing design work. I believe I’m still passionate about graphic design. But the great thing about graphic design is that it is almost always about something else. Corporate law. Professional football. Art. Politics. Robert Wilson. And if I can’t get excited about whatever that something else is, I really have trouble doing a good work as a designer. To me, the conclusion is inexcapable: the more things you’re interested in, the better your work will be. — Design Observer article
Consider this, Leonardo da Vinci was famous for his paintings. But he wasn’t just a painter, he was also a sculptor, architect, musician, mathematician, engineer, inventor, anatomist, geologist, cartographer ,botanist, and a writer. He was undoubtedly a genius. But I think it wasn't his genius rather his curiosity that must have drived him to learn about all those fields. So yes, T-shaped philosophy might have a grain of truth in it. But up-till this point the discussion has been more philosophical rather than logical. I think Steve Job’s take on this topic might sound a bit more logical.
2. Try to gain a set diverse experiences
Creativity is just connecting things. When you ask creative people how they did something, they feel a little guilty because they didn’t really do it, they just saw something. It seemed obvious to them after a while. That’s because they were able to connect experiences they’ve had and synthesize new things. And the reason they were able to do that was that they’ve had more experiences or they have thought more about their experiences than other people.
Unfortunately, that’s too rare a commodity. A lot of people in our industry haven’t had very diverse experiences. So they don’t have enough dots to connect, and they end up with very linear solutions without a broad perspective on the problem. The broader one’s understanding of the human experience, the better design we will have. — Steve Jobs
This makes more sense. But again is curiosity and having more diverse experiences enough to to put you in the top talent pool?
adding on to the discussion. Here are some interesting remarks by paul graham and bill gates on what separates great engineers/hackers from good ones:
3. Ability to Empathise
Like painting, most software is intended for a human audience. And so hackers, like painters, must have empathy to do really great work. You have to be able to see things from the user’s point of view.
When I was a kid I was always being told to look at things from someone else’s point of view. What this always meant in practice was to do what someone else wanted, instead of what I wanted. This of course gave empathy a bad name, and I made a point of not cultivating it.
Boy, was I wrong. It turns out that looking at things from other people’s point of view is practically the secret of success. It doesn’t necessarily mean being self-sacrificing. Far from it. Understanding how someone else sees things doesn’t imply that you’ll act in his interest; in some situations— in war, for example— you want to do exactly the opposite.
Most makers make things for a human audience. And to engage an audience you have to understand what they need. Nearly all the greatest paintings are paintings of people, for example, because people are what people are interested in.
Empathy is probably the single most important difference between a good hacker and a great one. Some hackers are quite smart, but when it comes to empathy are practically solipsists. It’s hard for such people to design great software [5], because they can’t see things from the user’s point of view.
One way to tell how good people are at empathy is to watch them explain a technical question to someone without a technical background. We probably all know people who, though otherwise smart, are just comically bad at this. If someone asks them at a dinner party what a programming language is, they’ll say something like ``Oh, a high-level language is what the compiler uses as input to generate object code.’’ High-level language? Compiler? Object code? Someone who doesn’t know what a programming language is obviously doesn’t know what these things are, either. — Paul Graham:
His whole article is worth reading reference: http://paulgraham.com/gh.html
4. People Skills
Bill Gates’s on considering your job as an exercise in people management and people dynamics, as well as the basic engineering skills:
The nature of these jobs is not just closing your door and doing coding, and it’s easy to get that fact out. The greatest missing skill is somebody who’s both good at understanding the engineering and who has good relationships with the hard-core engineers, and bridges that to working with the customers and the marketing and things like that. And so that sort of engineering management career track, even amongst all the people we have, we still fall short of finding people who want to do that, and so we often have to push people into it.
I’d love to have people who come to these jobs wanting to think of it as an exercise in people management and people dynamics, as well as the basic engineering skills. That would be absolutely amazing.
And we can promise those people within two years of starting that career most of what they’re doing won’t be coding, because there are many career paths, say, within that Microsoft Office group where you’re part of creating this amazing product, you get to see how people use it, you get to then spend two years, build another version, and really change the productivity in this very deep way, take some big bets on what you’re doing and do some things that are just responsive to what that customer wants.
and if this hasn’t made things complicated yet, here is what we know about Google’s approach of hiring(Taken From Lifehacker articles):
“There are five hiring attributes we have across the company,” explained Bock. “If it’s a technical role, we assess your coding ability, and half the roles in the company are technical roles. For every job, though, the No. 1 thing we look for is general cognitive ability, and it’s not I.Q. It’s learning ability. It’s the ability to process on the fly. It’s the ability to pull together disparate bits of information. We assess that using structured behavioral interviews that we validate to make sure they’re predictive.”
The second, he added, “is leadership — in particular emergent leadership as opposed to traditional leadership. Traditional leadership is, were you president of the chess club? Were you vice president of sales? How quickly did you get there? We don’t care. What we care about is, when faced with a problem and you’re a member of a team, do you, at the appropriate time, step in and lead. And just as critically, do you step back and stop leading, do you let someone else? Because what’s critical to be an effective leader in this environment is you have to be willing to relinquish power.”
But why go through this pain and suffering ? I think Jessica McKellar in her talk “Breaking The Rules”, PyBay2016 summarised it well:
“Programming changes the way you think about and debug and interact with the world. Programers master a system they know they can change.
Everything important and worth fighting for is a system, even if nobody told you the rules or that you can change them.
To Summarize, the important lessons that I think we can take away from the above discussion/excerpts are:
- reading lots of code, solving lots of hard problems and generally putting in lots of hours for starters.
- Have a blog and a public portfolio
- Then Being Curious about everything. (“I have no special talent. I am only passionately curious. — Albert Einstein.)
- Always be willing to get out of your comfort zone and try out new things. Such experiences accumulated over time will become dots that you connect in future to build other great stuff.
- Learn to put away the shyness and lead when you need to(which often times doesn’t mean mean giving orders rather has to do with coming up with a plan/strategy to tackle the problem in hand so that your team can continue to move forward).
- Learn to Market your ideas/thoughts by improving your communication. If you do it well, people will join you. Think of your team/company as a connected network. The corporate hierarchies defined by the companies often times come in the path of creativity. If you think something can be improved, then speak-up and you’ll notice that most people will listen, if you sound convincing.
- If it is possible to make yourself into a great hacker, the way to do it may be to make the following deal with yourself: you never have to work on boring projects (unless your family will starve otherwise), and in return, you’ll never allow yourself to do a half-assed job. All the great hackers I know seem to have made that deal, though perhaps none of them had any choice in the matter.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
read more:
How to become a Hacker by Eric. S. Raymond:
http://www.quora.com/What-are-the-attributes-that-make-a-great-programmer
references:
http://blog.codinghorror.com/how-to-become-a-better-programmer-by-not-programming/
http://lifehacker.com/the-most-valuable-traits-in-a-potential-employee-accor-1551055279
http://lifehacker.com/improve-your-resume-with-this-simple-formula-recommende-1566107526
http://www.paulgraham.com/hp.html
http://archive.wired.com/wired/archive/4.02/jobs_pr.html