Professional PHP

PHP Programming, Web Development, PHP Advocacy and PHP Best Practices.
« PHP Development From Java Architects Eye
Editing PHP »

Expert and Novice Programmers

May 10th, 2005

An article on Java World, Hiring the phantom Java architect, sparked an interesting debate at the server side regarding what it means to be a developer versus an architect. I very much dislike the term architect and like to think of this instead in terms of programming skill level.

Cognitive science research on problem solving tries to examine the difference between experts and novices in a domain. Rather than distinguish between developers and architects, I think it is better to distinguish between experts and novices at programming. The Dreyfus model of skill acquisition details five skill levels to help in this task. Here is a summary from Coding Horror:

Level 1: Beginner

  • Little or no previous experience
  • Doesn’t want to learn: wants to accomplish a goal
  • No discretionary judgement
  • Rigid adherence to rules

Level 2: Advanced Beginner

  • Starts trying tasks on their own
  • Has difficulty troubleshooting
  • Wants information fast
  • Can place some advice in context required
  • Uses guidelines, but without holisitic understanding

Level 3: Competent

  • Develops conceptual models
  • Troubleshoots on their own
  • Seeks out expert advice
  • Sees actions at least partially in terms of long-term plans and goals

Level 4: Proficient

  • Guided by maxims applied to the current situation
  • Sees situations holistically
  • Will self-correct based on previous performance
  • Learns from the experience of others
  • Frustrated by oversimplified information

Level 5: Expert

  • No longer relies on rules, guidelines, or maxims
  • Works primarily from intuition
  • Analytic approaches only used in novel situations or when problems occur
  • When forced to follow set rules, performance is degraded

The Java World article laments about companies that advertise for experts, but don’t interview for it. I have to say this struck a nerve with me. Multiple choice tests like the Zend Certification disappoint me. Tests like this don’t measure skill on this scale at all, they measure exposure.

In the past, I’ve used a coding sample as an interview question. The code, about 250 lines, was distilled from an existing system and is horribly bad in so very many ways, but functional. By showing the code to an interviewee and asking them what they would do to improve it, I found I could get a good idea of their skill level. Novices simply had no idea what to do with it and would just move code around. Sometimes they would insert comments, trying to make the code “better.” Some candidates only found and fixed one problem (there were several major ones.) No one fixed all the problems. The one person that I interviewed and didn’t have look at the code (for time reasons), we had to let go. He simply fooled us at his interview about his skill level. The thing is that I am certain he could have passed a Delphi certification test. (like the one I took at Brain Bench.)

Moving from novice to expert programmer takes a very long time. From Teach Yourself Programming in Ten Years:

Researchers (Hayes, Bloom) have shown it takes about ten years to develop expertise in any of a wide variety of areas, including chess playing, music composition, painting, piano playing, swimming, tennis, and research in neuropsychology and topology. There appear to be no real shortcuts: even Mozart, who was a musical prodigy at age 4, took 13 more years before he began to produce world-class music. In another genre, the Beatles seemed to burst onto the scene with a string of #1 hits and an appearance on the Ed Sullivan show in 1964. But they had been playing small clubs in Liverpool and Hamburg since 1957, and while they had mass appeal early on, their first great critical success, Sgt. Peppers, was released in 1967. Samuel Johnson thought it took longer than ten years: “Excellence in any department can be attained only by the labor of a lifetime; it is not to be purchased at a lesser price.” And Chaucer complained “the lyf so short, the craft so long to lerne.”

So you can’t become an expert without experience. However, you can have experience without becoming an expert. Some people just put in their time and never develop themselves. So these people may have the answers to the certification trivia question for their specific environment and be able to get past the HR resume screeners with their buzzword detectors, but they will not have the impact that a true expert would have in the same situation. Just like our Delphi Dud.

Filed Under

  • Agile Methods, Software Design

Related Posts

  • Hump Day Blues
  • Software Development Team Diversity
  • Building a culture of objects in PHP
  • PHP Development From Java Architects Eye
  • Agile Development for an Agile Military
You can leave a response, or trackback from your own site.

24 Responses to “Expert and Novice Programmers”

  1. Emil Tamas says:
    5/10/2005 at 10:26 pm

    Excelent point of view, you are so so so right !

  2. Anonymous says:
    5/11/2005 at 7:05 am

    one of the better php blog posts i’ve seen in a while. well done.

  3. hello says:
    5/11/2005 at 7:06 am

    one of the better php blog posts i’ve seen in a while. well done.

  4. hello says:
    5/11/2005 at 7:06 am

    not that it’s specifically geared toward php, of course, just that you’re on the php blogrolls.

  5. Robin says:
    5/11/2005 at 7:44 am

    That was a good one! Unlike you, I like the term ‘Architect’ and use it, but more for marketing than accuracy reasons. Folks not in the business tend to think of programming as a mechanical process without artistic or intuitive aspects; ‘architect’ shifts the paradigm.

    R.

  6. PeiMic.com » Blog Archive » Jeff Moore%u2019s Blog � Blog Archive � Expert and Novice Programmers says:
    5/11/2005 at 9:45 am

    [...] nd Novice Programmers
    Filed under: Work — Michael @ 10:45:23

    Jeff Moore%u2019s Blog � Blog Archive � Expert and Novice Programmers I [...]

  7. Ammar Ibrahim says:
    5/11/2005 at 12:04 pm

    amazing, we’re sharing the same Ideas. Especially that you can have experience without being an expert. I see many people programming for 5 years and not advancing at all.

  8. maetl says:
    5/12/2005 at 3:12 am

    Good point about measuring the difference between skills and exposure. A heavily management oriented design processes can feel like a multi-choice test for producing social outcomes, with the resulting chaos often due to the lack of leadership, resulting from the inability of people to adapt their working style to deal with novel situations.

    The code test sounds like an interesting way to quickly get a solid qualitative assessment of how well someone understands what they are doing. I totally agree that experts and novices is a far more relevant distinction – the notion of architecture seems grossly misused these days, both in the enterprise software and web/user-interface design industries.

    The title “Architecture” is often used as a substitute for what could better be described as “Management Driven Design”, where practicioners often fail to comprehend the essential spatial skills required to solve informational and social problems (ironically, this is the actual meaning of the term architecture – it involves a spatial design context, and is usually the domain of intuitive experts).

  9. Marcus Baker says:
    5/12/2005 at 4:50 pm

    Hi.

    For more research on expertise check out the (awfully titled) “Sources of Power” by Gary Klein. It’s a fun read as well.

    yours, Marcus

  10. Kyle Posey says:
    5/13/2005 at 11:52 am

    Very Interesting. After looking at the 5 skill levels, It makes me wonder where I fit. I’d like to see the 250ln code sample to see how i fare.

  11. Harry Fuecks says:
    5/13/2005 at 3:05 pm

    This reminds me of arguments between Physicists and Engineers at University, myself from the former camp. My path through education was defined by “what requires least use of memory” and Physics is a great subject if you regard facts (or conclusions) as worthless mental burden which can be looked up vs. actually understanding the underlying principle, which is alot easy to remember and allows you to derive the conclusions again should you need to.

  12. Underlog - back to the basics » Blog Archive » Hiring the phantom Java architect says:
    5/16/2005 at 12:36 pm

    [...]

    Статия от света на Java, на която доскачах от Professional PHP, на път към пост в codinghorror.com. Все нР[...]

  13. Desipodcast.com says:
    5/25/2005 at 9:47 pm

    May 26th – It takes atleast 10 years for you to become anything

    I found this interesting post in a blog about programming, but apparently it takes 10 years for anybody to go from a Novice to an Expert and the bas news is its not just programmers, its musicians, artists everybody!
    http://www.procata.com/blog/archiv…

  14. The HTML Artist » Blog Archive » The Complacent Coder says:
    8/5/2005 at 10:36 pm

    [...] but I’m not sure how. Through a little googling, I came across a blog entry titled Expert and Novice Programmers which mentions something called the Dreyfus Mod [...]

  15. The HTML Artist » Blog Archive » The Complacent Coder says:
    8/5/2005 at 10:37 pm

    [...] but I’m not sure how. Through a little googling, I came across a blog entry titled Expert and Novice Programmers which mentions something called the Dreyfus Model o [...]

  16. Building a culture of objects in PHP | Professional PHP says:
    1/13/2006 at 12:44 am

    [...] I can see why this would be the case. PHP is written in C. Being an expert in C programming does not necessarily make one an expert in object oriented programming (nor does it preclude it). My impression from reading the php-dev mailing list is that of a C culture rather than a object culture. (witness the goto vs exceptions debate.) [...]

  17. Hello.World » Are you an Expert or Novice Programmer? » The Weblog of Matthew Delmarter says:
    1/13/2006 at 3:02 pm

    [...] Researchers (Hayes, Bloom) have shown it takes about ten years to develop expertise in any of a wide variety of areas, including chess playing, music composition, painting, piano playing, swimming, tennis, and research in neuropsychology and topology. So … how long have you been programming? How would you rank your ability? Check out this interesting post to see one authors view of how to rank yourself or others. Could be interesting to think about if you employ programmers as well… [...]

  18. Hump Day Blues | Professional PHP says:
    2/1/2006 at 4:41 pm

    [...] PHP Flash Cards: Memorizing trivia with flash cards is not “honing your skills” its “cramming for a test.” (see expert and novice programmers) On the other hand, writing a PHP flash card application IS honing your skills. [...]

  19. chris web developer says:
    12/27/2006 at 4:18 am

    Awesome tips and points regarding rating a good programmer. But 10 years seem to be a long time to master a programming language.

  20. flj says:
    1/8/2007 at 11:09 am

    I dunno. Learning a programming language should essentially be a matter of days or weeks, depending on its complexity. Most languages just use different syntax for various constructs – consts, variables, functions, classes, packages, templates and pointers. I think this pretty much sums up all there is in any programming language. It should not take years to get used to a new syntax.

    Syntax in most languages is pretty intuitive. However, groking templates is a lot more difficult than understanding variables or consts, for example, so most time you spend when you first encounter a new language construct, not a new syntax (for example switching from the Pascal or Basic For to the C/C++/Java for introduces you to a slightly different and more complex language construct, not to a new syntax for exactly the same construct, and this is the kind of difference that generates learning effort.

    Also, it really takes a lot of effort to learn a complex library (like the std C lib or the std C++ lib, or STL, or just java.lang).

    But neither learning generic programming constructs nor learning a lib have anything to do with actually learning a language, IMO.

    It also can be at least nerving to switch from desktop programming to server-side scripting, due to the restrictions imposed by a not so interactive user interaction. But this also has nothing to do with actually learning a language. It doesn’t matter whether you script server-side in php or VBScript, once you got it right you can easily switch, and just spend some more time on learning the different libs, mastering the new language itself should be almost no effort.

    Also, learning a language or even fully mastering the ins and outs of a language does not make one a programmer. A seasoned programmer should only take days to fully grok a new language, no matter how complex. But to become an expert programmer, you surely need ten years of programming with more advanced concepts, like classes or templates. And to become productive in a new environment, you surely must spend a lot of time learning a new lib. But the language switch should be the easiest part of it.

    (Also, IMO, after going through a few libs, learning new libs should become easy, since you usually find similar or almost similar patterns of how libs are organized and what is available in different libs, specific to various languages. Some not so basic libs are even maintained in various languages, so you don’t really ahve to re-learn them.)

  21. Ben W says:
    5/15/2008 at 4:50 pm

    To those that said they disagree that it takes ten years to learn a programming language. First of all I know this post is old but I need set folks straight. The title Teach Yourself Programming in Ten Years has nothing to do with what language you write in.

    Whether

    PHP, Python, JavaScript, Perl, VB/VB.net, ASP/ASP.net, Delphi, D+ (yes it’s real look it up), C++,C, C#, Ruby, Java, Pascal, Assembly, Lisp (maybe not Lisp), etc

    in order to become a proficient programmer and write decent code it does take TEN+ years. Anything less your not considered a professional/seasoned programmer but rather an enthusiast!

    When you have ten solid years of programming no mater what the language is, it should only take a few weeks to learn syntax and write decent software without making stupid mistakes.

  22. Camilo says:
    6/5/2008 at 1:58 am

    I am a newbie in php. I am rather an artist..I had no idea about programming because my area of work is design, art and stuff that you nerds probably despise. However, I need to learn to use some tools necessary to deploy my artistic genius. First I had to learn to use inkscape and illustrator to create simple vectorized graphics, then i wound up learning flash but flash is more than just learning vectorized design, so I found myself learning actionscript (which of course i dont master yet, dont know if i ever will) so when developing my artistic websites i realized that i was too old on my sense of developing static websites since now they are dynamic..the world has changed so much since 1998!..so , of course , i stumbled on php. Do you know how discouraging is to think that it will take me 10 years to learn to program php or actionscript? But then, I realized that it’s not really a matter of being an excelent programmer it’s a matter of getting my art working with other media..which happens to be this one, the one that is touching everybody known as internet, so where do i go from here?

  23. Programming skill level | Just Another Dang Blog says:
    3/15/2009 at 8:11 pm

    [...] from procata.com Level 1: [...]

  24. Programming Your Way out of a Paper Bag | PHPkitchen says:
    6/23/2009 at 3:24 am

    [...] really enjoyed Jeff Moore’s (creator of WACT) post today, I thought I’d post it in its entirety.  It’s a compelling question, what is it [...]

Leave a Reply

Click here to cancel reply.

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

code: use [code=php][/code].

Comment Preview

    Subscribe Feed
    Share Subscribe to this blog…
    Share Bookmark or share this page…
  • About

    My name is Jeff Moore. I'm a PHP programmer living in San Francico and working for a startup.

    More about me…

  • Categories (Home)

    • Agile Methods (14)
    • Mac (14)
    • Misc (17)
    • Open Source (14)
    • PHP (98)
    • Software Design (29)
    • Usability (14)
    • Web Design (20)
  • Recent Comments

    • Programming Language Trends via Google  19
      Craigslist pva, jessica, Scott [...]
    • Looking Towards the Cloud  35
      bentonville multiple listing, cosmetic dental, Sam Brodish [...]
    • PHP versus ASP  8
      Marhta Blight, Ravi, Ryan Brooks [...]
    • How to Transfer Mac OS X Application Data between Computers  59
      Website Migration, harry the computer support guy, Dotty Salvage [...]
    • Working with PHP 5 in Mac OS X 10.5 (Leopard)  157
      lehuuphuc, Robert Parthemer, Lingerie Intimate [...]
    • PHP Games  25
      jessica, Tennille Cranor at Chilli Plants, Lucas Ortell [...]
    • un-PEAR-ing  5
      jessica, Eugene Panin, Arnaud [...]
    • The Legality of Republishing RSS Feeds  23
      kevinxiao, Marissa Miscovich, Quick Student Loans [...]
    • Faster Page Loading  4
      jessica, angular cheilitis, Aaron Rosenfeld [...]
    • PDO versus MDB2  15
      jessica, kevinxiao, Gavin [...]
  • Recent Posts

    • ZendCon: Writing Maintainable PHP Code
    • Looking Towards the Cloud
    • Holiday Tech Support
    • Closures are coming to PHP
    • php | tek Wrapup
    • php | tek 2008
    • Sarah Snow Stever
    • Benchmarking PHP’s Magic Methods
    • The Endpoints of the Scale of Stupidity on Video
    • Working with PHP 5 in Mac OS X 10.5 (Leopard)
  • Site

    • Archives
    • Log in
  • Search