

Why it's impossible to become a programming expert - baha_man
http://blogs.techrepublic.com.com/programming-and-development/?p=673

======
gaius
This definitely resonates with me. I got my first paying Java gig in 1996
(really). Back then, one person could be reasonably expected to know _all_ of
Java, and work on any project that was feasible to do in Java, whether that
was applets, servers, fancy graphics, database access (no JDBC back then!),
anything.

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.

------
yannis
A programming expert is not a person who has memorized the contents of the
programming equivalent of the Oxford Dictionary, but one that can write code
the way Hemingway could write books.

~~~
nkassis
I would call that a hacker. An expert in the real world just knows a lot of
stuff.

~~~
Novash
An expert is someone that can code without using google to teach him how to
make every other function.

~~~
brianto2010
from <http://www.zedshaw.com/essays/master_and_expert.html>

> _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. :-)

------
juvenn
"I find it quite frustrating at the personal level. I miss learning things in
depth. I miss the sense of satisfaction from attaining a level of expertise. I
miss getting to explore obtuse and obscure areas of knowledge."

~~~
HeyLaughingBoy
How about getting to know your problem domain in depth instead? Gaining a
sense of satisfaction from being an expert in the business and automating the
work so knowledge of obtuse and obscure bits of data is no longer needed?

I'd rather be known for having built an amazing product that anyone can use
than for mastering some obscure bit of the technology.

~~~
gloob
_How about getting to know your problem domain in depth instead?_

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.

------
hxa7241
The difference is that the thinking process has become more 'externalised'.

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.

------
olliesaunders
Interesting how he says he relies heavily on IDEs. If those IDEs weren't there
as crutches how do you think those frameworks might be written differently?

~~~
litewulf
I think the Rails super-over-loaded Do-What-I-Mean method would become more
popular. Last night I tried to futz around with some of the form helpers, and
almost every parameter is optional. It makes for some pretty challenging
parameter munging at the beginning of the methods... but usually when coding
there is a particular method you call, and you just kind of pile things on.
(The plethora of form helpers notwithstanding)

------
olliesaunders
I focus less on knowledge and more on skill esp. API design. This makes me a
good programmer, I hope, although often an uninformed one. In an "open book"
world I can't help feeling like I made the right choice. The _right_ skills
are resistant to change.

------
scott_s
Taking the time to learn things in-depth is what grad school is for.

~~~
yannis
Taking the time to learn things in-depth is what L I F E school is for.

~~~
scott_s
That's a nice feel-good statement, but grad school gives you an environment
where you can spend all day researching what you're interested in. Most people
can't do that at their jobs or they'll get fired.

~~~
moron4hire
that sort of grad school is for people who need their hands held to learn
things.

~~~
psyklic
In some grad schools you're assigned projects, but at others you need to
continually figure out even what problems need to be solved and which avenues
of attack would likely yield the best results. This is much like what startups
do, and in fact figuring out the important problems/attack strategies is much
harder in my experience than performing the experiments themselves. I don't
see how this is "hand holding", but perhaps the grad schools with assigned
projects feel more like a normal job.

------
marze
Is it possible to create an equally powerful modern programming environment
with reduced complexity (as measured in pages of documentation or whatever)?

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.

------
edw519
OP _is_ an expert, he just doesn't realize it.

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.

~~~
Novash
When I studied C in College, I could tell you all functions on the ANSI
library. More often than not, it meant that I knew if a library had something
already done so we wouldn't need to do it again. Even simply things like using
freopen to redirect standard output to a file, or using sscanf to parse an
user input where outside of the class curriculum that I only got to know
because I studied the language somewhat in depth. Now that I work with C#,
nearly everytime I need a class that is somewhat uncommon, I am forced to do a
research, and it usually DO exist in the framework (exception in mind, double
indexed lists) somewhere. But I do not know it. Even the expert C# guys do not
know it. We need to research. Because the framework is too big, it is not
possible to know it. And because it is not possible to know it, every time I
am coding, I feel like blind because of the possibility that of what I am
doing is actually already there and I don't know it because I didn't think of
the right words to research it for.

~~~
gaius
I wonder if we're any more productive - whether we spend more time doing
research to find a library routine than it would take to just code it.

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.

~~~
Novash
We are more productive. It is not simply a matter of have/not have the
routine. It is also a matter of usability. If you did the routine yourself,
you would make it specific. When you needed it again, you would need to either
write it again from scratch or modify it. The framework has its methods coded
in ways to be the least specific possible so to avoid rewrite (in an ideal
world, everything would be like it).

------
moron4hire
To me, a lot of this is what the "design" process is for. You have a certain
set of requirements that you need to fulfill, so before you set about coding
it, you enumerate how it is possible to implement it. Now, I won't go into
details like "Use a System.Web.UI.WebControls.Label here", but if it's
something that I know my peers don't have much experience with (like
apparently the entire System.Drawing namespace, dammit), then I'll
specifically indicate in the design that that is an option. It makes for a
much more streamlined process for development. No, it doesn't answer all of
the questions that come up in coding, but it certainly slays the big dragons.

