Why it's impossible to become a programming expert
blogs.techrepublic.com.com
blogs.techrepublic.com.com
Fast forward a few years, I knew JDBC and Swing pretty well, a little of the EJB stuff, there were whole vast swathes of the Java universe that were simply out of scope. I got out of Java a few years ago, but I imagine it must be even more so now. With my current main languages, Python and OCaml, I still feel as if I've barely scratched the surface (and in the company I count as an "expert").
But this isn't limited to languages, back then a DBA could know all of Oracle 7.3.4, now Oracle 11g is too big for any one person to know it all. There's no such thing as a generalist DBA anymore. You know enough to operate anything your organization uses day to day or fix it if it breaks in the middle of the night, but a tricky problem outside your specialist area will need to wait 'til whoever in the company specializes in that can take a look the next day.
You've ignored the other half, the mechanics. The mechanics are not about memorizing volumes of texts, Aspects of an expert include having been there and done that, learned from own or other mistakes. Knows the roadmap, overall rules of the domain. Consider a programmer as a medical practitioner (Doctor). What are the properties of an expert Doctor? Much of what I've briefly stated above: Lots of experience, knows what is most likely (not guaranteed) to succeed or fail given known conditions.
Now imagine you are an expert doctor and the human physiology radically changes every 2-3 years? The field of given known conditions also radically changes. How can you keep up on these changes and all their nuanced inter-relationships?
But the river itself and its flow remains the same.
There's a lot of fuzz all the time but, for example, in the last twenty years what has really changed? The playground has invented itself a few times and we're juggling primitives of a much higher level of abstraction as before. But there are always the set of primitives and, out of them, our job is to create the rest of it, the new things, for we are makers.
Doctors aren't makers of new but practitioners of what's known.
River flow does not stay the same. The rate of flow changes with the seasons and geographically, rivers can move over time, depending on local geological conditions.
Doctors are makers of new, otherwise where do our medical advances come from? They have to explore the unknown to make it known.
Yes, "primitives", our foundations in digital technology and programming fundamentals are the same. We still use collections and algorithms, and our computing technology is still rooted in the core theory of the Turing machine. This knowledge is very important, but it really is still just the foundation which we need to be effective, develop expertise. The tools we use today, the applications and libraries and languages do change rapidly. And that is where the interactions are complex and change all the time.
> The main thing I noticed about the experts I’ve encountered is they are into impressing you with their abilities. They are usually incredibly good, but their need for recognition gets in the way of mastery. Everything they do is an attempt to prove themselves
An expert programmer is a knowledgeable, yet ostentatious programmer. :-)
I'd rather be known for having built an amazing product that anyone can use than for mastering some obscure bit of the technology.
If I had wanted to be a biologist, or a businessman, or a banker, I would have become one of those things. My domain is computers, and computers are what I am interested in. I will take playing with pointers over $different_kind_of_work any day. I think it's just a personality thing, but that's the way it is for me. I would guess that a sizeable minority of programmers are like that.
Ideas or structures are produced not so much by mental action, but by the mechanisms of external tools and representations. Instead of items being put together by knowing them well, they are connected by web linkage. We are being ever more subsumed into the community brain.
The general area of research I do is of interest to many companies in industry, but what I do specifically is usually not. Put another way, most companies would not pay me to do what I'm doing. Being a grad student gives me the freedom to spend 50-60 hours a week on research that I find interesting, but may not directly benefit anyone financially. This circumstance is unique to people in academia, some industry research labs, and people wealthy enough that they no longer need to work for a living.
If Apple, or someone else, were able to it would be a competitive advantage.
I'm not suggesting that Apple hasn't already done so, but I don't have the first hand experience to make the comparison myself.
If you define "expert" as someone who has memorized all possible syntax, then the only experts would be autistic and would need help getting dressed.
OTOH, if an expert is someone who knows how to find the right tool to get the right job done, then OP is clearly already there. As are many of us too, I suppose.
That's the difference between theory and practice.
This is one problem in the OCaml community. Uptake of the new "standard" libraries is lukewarm because everyone has already half-written their own standard library.
[1]: Hoogle: http://www.haskell.org/hoogle/
* I haven't used Haskell for a while, though, so I don't remember if the Emacs mode currently supports searching by type.A little more productive maybe, but this is indeed neither a necessary nor a sufficient condition to be called an expert.
Higher levels considerations are far more important.