[P2P-F] Fwd: 3 broad programmer categories ? ( quora )
Michel Bauwens
michel at p2pfoundation.net
Sun Oct 5 17:21:44 CEST 2014
---------- Forwarded message ----------
From: Dante-Gabryell Monson <dante.monson at gmail.com>
Date: Sun, Oct 5, 2014 at 6:55 PM
Subject: 3 broad programmer categories ? ( quora )
To: "econowmix at googlegroups.com" <econowmix at googlegroups.com>, "
op-n-m at googlegroups.com" <op-n-m at googlegroups.com>
http://www.quora.com/What-do-the-top-1-of-software-engineers-do-that-the-other-99-do-not
Michael O. Church <http://www.quora.com/Michael-O-Church>
632 upvotes
the "Cliff's Notes" version of the theory (and the 0.0-to-3.0 scale of
programmer competence) here. First, programmers tend to separate into three
very broad (and overlapping) categories:
- *Adders* ("level 1", 0.0 to 1.4) who can solve most programming
problems, given enough time. These tend to be the ones who do
line-of-business work, write scripts to fetch data and answer questions
that executives or traders care about, etc. The good ones want to progress
beyond this level, remove themselves from parochial details and work on
more general "core" problems.
- *Multipliers* ("level 2"; 1.5 to 2.4) who can select technologies,
make architectural decisions, and write or maintain useful libraries. They
tend to have open-source contributions to their name, speak at conferences,
and are often executive-equivalent in importance to their companies.
- *Global Multipliers* ("level 3"; 2.5+) who build communities, create
platforms and come up with concepts like Google's MapReduce. Their
ambitions tend to out-scope most companies so they're often in academia,
consulting independently, or highly paid in large firms' R&D labs.
These three abstraction levels don't tell the whole story, and of course
some "adder" tasks are very hard (like building a production trading
system) and could not be done by most "level 1" programmers. Then there's
the altogether different issue of unqualified people being given "level 2"
(or 3) work, such as architecture of a complex software system. Perhaps a
hard L1 task is really 1.3 or 1.5 or even higher. This is just the theory.
To assess programmer level and give more of a continuum (from 0.0 to 3.0)
we add a decimal point and assume that, e.g., a 2.0 programmer will succeed
at 95% of level-2 tasks (and likewise for L1 and L3). At 1.5, it's 50%. At
1.0, it's 5% (relative to L2) and 95% of L1 tasks. In building the model, I
assumed a logistic S-curve-- so a 1.6 programmer will succeed at 64% of L2
tasks; 1.7, 76%; 1.8, 85%; 1.9, 91%-- but I don't think it can be taken
that precisely.
At 0.7, you're able to do most straight coding tasks (although it may take
a long time, and you're still not sure what this "compiler" thing is really
doing). 1.0 is the level at which people are typically considered "software
engineers" and 1.2 is the probably the median employed engineer, but at top
tech companies it's closer to 1.6. A typical SWE 3 at Google is 1.6-1.8 but
assigned 1.2-1.4 level work. A typical Sr. SWE at Google is 1.8-2.0 but
assigned 1.4-1.7 level work. You might sense a pattern. The bad news is
that you'll often be under-leveled at that sort of place. The good news is
that the quality of most of the code at Google is quite high. On the other
hand, there are plenty of companies (usually non-technical ones that still
rely on software) out there that don't have a *single* 1.5+ engineer (or,
at least, not one that they listen to) and they still need architects... so
you often see those L2 decisions made by people at the 1.2-1.4 level (or by
non-technical managers, which is worse) and the results are what you'd
expect.
All of this might seem like a lot of verbiage, but it's useful in answering
the question. The definition of "top 1%" depends on whom you include in the
"programmer" population; I'm looking for something more objective. I'd
guess that there are about 200,000 programmers alive at or above the 2.0
level. That's the level I'm going to focus on. (2.5, 3.0, I can't even
answer.) So how do you get to the 2.0 level?
- *Budget 7 to 14 years.* Yes, it's going to take time. (I've been
programming, sadly not continuously, for 8 years; I'd guess that I'm
1.9-2.0 and it took work.) You have to write code, read code, experiment
with new technologies, see a few architectural failures and (one hopes, but
let's not get ahead of ourselves because most "software architects" are
politically empowered shitheads) see an architectural success or two. I
think you can probably get up to 0.7-0.8 (basic code fluency) in a
dedicated summer slinging Javascript, and 1.0-1.1 in another year if you
really dive in. Beyond that, 0.1 point per year is a pretty aggressive
clip. Most employers will assign you work below your frontier of ability,
so you may have to steal an education from your boss (reading papers on
work time, experimenting with new technologies). Remember: it's always
better to ask forgiveness than permission.
- *Study voraciously.* Computer science is a deep field, and to be good
at it, you need at least a working understanding of everything. If you
think assembly code or linear algebra or strong static typing is "scary" or
"too deep" you'll never reach 2.0. That doesn't mean you need to be an
expert in everything because you can't. You can't have "I won't go there"
areas. You probably don't want to be hand-writing assembly code very often,
but if you take the attitude that it's "black magic" or "grunt work" or
"unclean", then it will hinder your learning. (You see some Java
programmers take this attitude toward manual-memory languages like C.) I
would probably use Haskell (a high-level language with strong static
typing) given a clean slate; but I've exposed myself to Clojure, C, and
even Python (data science libraries) because they cover important topics
from computer science. You can't have the "Will this be on the test?"
mentality. You have to be curious about everything CS-related.
(Mathematical curiosity helps.) You also need to learn about the industry
itself. Why do so many software projects fail? What mistakes (technical and
nontechnical) lead to that and how might they be prevented? What makes a
good startup CTO? What things are worth building, and what patterns betray
a death march?
- *Build things when you don't know that you'll succeed.* How do you
become a competent programmer? Or architect? Or Linux kernel hacker?
Practice. If you know that you can do something, then you won't learn as
much as if there's some chance of failure. Employers want you at a
difficulty level where you'll succeed 95% of the time. Your best learning
is in the 65-75% "stretch" range, I'd say. That means that you're
eventually getting successful outcomes, but faltering a bit. There's
progress, but it's not smooth and you definitely have to work.
- *Network, not for jobs but for ideas.* Don't think of "networking" as
something you do after you get laid off. We're social creatures and
programmers are no different. The best way to become a great programmer is
to go talk to other great programmers, and then get a sense of what
problems they've solved and how. I'd be cautious at AI/machine learning
talks in 2014 (some are very good, but there plenty of poseurs in "data
science"; that will probably change in 3 years) but Haskell and Clojure
user groups both draw a great crowd.
- *Job hop when you stop learning.* Most programmers plateau around 1.2.
Why? Because they aren't pushed, and they don't get opportunities to work
on hard things. Or, the "hard" stuff they get pertains to difficult/ugly
legacy code, not computer science itself. It's useful to spend ~3 months on
a bad legacy module or two to learn about architectural mistakes, but not
more. Ultimately, you'll want to work on successful projects, and you'll
want to be surrounded by strong people. If you ever stop growing, it's time
to move on. You know how people end up stagnant? One day at a time. That's
also how you become a great programmer. One day at a time (for about 4,000
days).
--
Check out the Commons Transition Plan here at:
http://en.wiki.floksociety.org/w/Research_Plan
P2P Foundation: http://p2pfoundation.net - http://blog.p2pfoundation.net
<http://lists.ourproject.org/cgi-bin/mailman/listinfo/p2p-foundation>Updates:
http://twitter.com/mbauwens; http://www.facebook.com/mbauwens
#82 on the (En)Rich list: http://enrichlist.org/the-complete-list/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: https://lists.ourproject.org/pipermail/p2p-foundation/attachments/20141005/0e9a45e6/attachment.htm
More information about the P2P-Foundation
mailing list