<div dir="ltr"><br><div class="gmail_quote">---------- Forwarded message ----------<br>From: <b class="gmail_sendername">Dante-Gabryell Monson</b> <span dir="ltr">&lt;<a href="mailto:dante.monson@gmail.com">dante.monson@gmail.com</a>&gt;</span><br>Date: Sun, Oct 5, 2014 at 6:55 PM<br>Subject: 3 broad programmer categories ? ( quora )<br>To: &quot;<a href="mailto:econowmix@googlegroups.com">econowmix@googlegroups.com</a>&quot; &lt;<a href="mailto:econowmix@googlegroups.com">econowmix@googlegroups.com</a>&gt;, &quot;<a href="mailto:op-n-m@googlegroups.com">op-n-m@googlegroups.com</a>&quot; &lt;<a href="mailto:op-n-m@googlegroups.com">op-n-m@googlegroups.com</a>&gt;<br><br><br><div dir="ltr"><br><div class="gmail_quote"><div dir="ltr"><div class="gmail_quote"><div dir="ltr"><a href="http://www.quora.com/What-do-the-top-1-of-software-engineers-do-that-the-other-99-do-not" target="_blank">http://www.quora.com/What-do-the-top-1-of-software-engineers-do-that-the-other-99-do-not</a><br><br><div><div><div><span><span><a href="http://www.quora.com/Michael-O-Church" target="_blank">Michael O. Church</a></span><span><span></span></span></span><div><span><span>632</span> <span>upvotes <br><br></span></span></div></div></div></div><div><span><span><div><div><span><div><div>the &quot;Cliff&#39;s Notes&quot; 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:<br><br><ul><li><b>Adders</b>
 (&quot;level 1&quot;, 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
 &quot;core&quot; problems. </li><li><b>Multipliers</b> (&quot;level 2&quot;; 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. </li><li><b>Global Multipliers</b> 
(&quot;level 3&quot;; 2.5+) who build communities, create platforms and come up 
with concepts like Google&#39;s MapReduce. Their ambitions tend to out-scope
 most companies so they&#39;re often in academia, consulting independently, 
or highly paid in large firms&#39; R&amp;D labs.</li></ul>These three 
abstraction levels don&#39;t tell the whole story, and of course some 
&quot;adder&quot; tasks are very hard (like building a production trading system) 
and could not be done by most &quot;level 1&quot; programmers. Then there&#39;s the 
altogether different issue of unqualified people being given &quot;level 2&quot; 
(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.<br><br>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&#39;s 50%. At 1.0, it&#39;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&#39;t think it can be taken that precisely. <br><br>At 0.7, 
you&#39;re able to do most straight coding tasks (although it may take a 
long time, and you&#39;re still not sure what this &quot;compiler&quot; thing is 
really doing). 1.0 is the level at which people are typically considered
 &quot;software engineers&quot; and 1.2 is the probably the median employed 
engineer, but at top tech companies it&#39;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&#39;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&#39;t have a <i>single</i> 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&#39;d expect. <br><br>All
 of this might seem like a lot of verbiage, but it&#39;s useful in answering
 the question. The definition of &quot;top 1%&quot; depends on whom you include in
 the &quot;programmer&quot; population; I&#39;m looking for something more objective. 
I&#39;d guess that there are about 200,000 programmers alive at or above the
 2.0 level. That&#39;s the level I&#39;m going to focus on. (2.5, 3.0, I can&#39;t 
even answer.) So how do you get to the 2.0 level?<br><br><ul><li><b>Budget 7 to 14 years.</b>
 Yes, it&#39;s going to take time. (I&#39;ve been programming, sadly not 
continuously, for 8 years; I&#39;d guess that I&#39;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&#39;s not get ahead
 of ourselves because most &quot;software architects&quot; 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&#39;s always 
better to ask forgiveness than permission. </li><li><b>Study voraciously.</b>
 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 &quot;scary&quot; or &quot;too deep&quot; 
you&#39;ll never reach 2.0. That doesn&#39;t mean you need to be an expert in 
everything because you can&#39;t. You can&#39;t have &quot;I won&#39;t go there&quot; areas. 
You probably don&#39;t want to be hand-writing assembly code very often, but
 if you take the attitude that it&#39;s &quot;black magic&quot; or &quot;grunt work&quot; or 
&quot;unclean&quot;, 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&#39;ve exposed myself to Clojure, C, and 
even Python (data science libraries) because they cover important topics
 from computer science. You can&#39;t have the &quot;Will this be on the test?&quot; 
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? </li><li><b>Build things when you don&#39;t know that you&#39;ll succeed.</b>
 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&#39;t
 learn as much as if there&#39;s some chance of failure. Employers want you 
at a difficulty level where you&#39;ll succeed 95% of the time. Your best 
learning is in the 65-75% &quot;stretch&quot; range, I&#39;d say. That means that 
you&#39;re eventually getting successful outcomes, but faltering a bit. 
There&#39;s progress, but it&#39;s not smooth and you definitely have to work. </li><li><b>Network, not for jobs but for ideas.</b>
 Don&#39;t think of &quot;networking&quot; as something you do after you get laid off.
 We&#39;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&#39;ve solved and how. I&#39;d be 
cautious at AI/machine learning talks in 2014 (some are very good, but 
there plenty of poseurs in &quot;data science&quot;; that will probably change in 3
 years) but Haskell and Clojure user groups both draw a great crowd. </li><li><b>Job hop when you stop learning.</b>
 Most programmers plateau around 1.2. Why? Because they aren&#39;t pushed, 
and they don&#39;t get opportunities to work on hard things. Or, the &quot;hard&quot; 
stuff they get pertains to difficult/ugly legacy code, not computer 
science itself. It&#39;s useful to spend ~3 months on a bad legacy module or
 two to learn about architectural mistakes, but not more. Ultimately, 
you&#39;ll want to work on successful projects, and you&#39;ll want to be 
surrounded by strong people. If you ever stop growing, it&#39;s time to move
 on. You know how people end up stagnant? One day at a time. That&#39;s also
 how you become a great programmer. One day at a time (for about 4,000 
days).</li></ul></div></div></span></div></div></span></span></div><br></div>
</div><br></div>
</div><br></div>
</div><br><br clear="all"><div><br></div>-- <br><div dir="ltr"><div>Check out the Commons Transition Plan here at: <a href="http://en.wiki.floksociety.org/w/Research_Plan" target="_blank">http://en.wiki.floksociety.org/w/Research_Plan</a> </div><div><br></div>P2P Foundation: <a href="http://p2pfoundation.net" target="_blank">http://p2pfoundation.net</a>  - <a href="http://blog.p2pfoundation.net" target="_blank">http://blog.p2pfoundation.net</a> <br><br><a href="http://lists.ourproject.org/cgi-bin/mailman/listinfo/p2p-foundation" target="_blank"></a>Updates: <a href="http://twitter.com/mbauwens" target="_blank">http://twitter.com/mbauwens</a>; <a href="http://www.facebook.com/mbauwens" target="_blank">http://www.facebook.com/mbauwens</a><br><br>#82 on the (En)Rich list: <a href="http://enrichlist.org/the-complete-list/" target="_blank">http://enrichlist.org/the-complete-list/</a> <br></div>
</div>