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.

categories Agile Methods, Software Design
tags career, cognitive science, programmer education

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.

21 Responses to “Expert and Novice Programmers”

  1. #1 Emil Tamas responds...
    May 10th, 2005 at 10:26 pm

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

  2. #2 Anonymous responds...
    May 11th, 2005 at 7:05 am

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

  3. #3 hello responds...
    May 11th, 2005 at 7:06 am

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

  4. #4 hello responds...
    May 11th, 2005 at 7:06 am

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

  5. #5 Robin responds...
    May 11th, 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 pingbacked on May 11th, 2005 at 9:45 am
  7. #7 Ammar Ibrahim responds...
    May 11th, 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. #8 maetl responds...
    May 12th, 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. #9 Marcus Baker responds...
    May 12th, 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. #10 Kyle Posey responds...
    May 13th, 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. #11 Harry Fuecks responds...
    May 13th, 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 pingbacked on May 16th, 2005 at 12:36 pm
  13. Desipodcast.com trackbacked on May 25th, 2005 at 9:47 pm
  14. The HTML Artist » Blog Archive » The Complacent Coder pingbacked on August 5th, 2005 at 10:36 pm
  15. The HTML Artist » Blog Archive » The Complacent Coder pingbacked on August 5th, 2005 at 10:37 pm
  16. Building a culture of objects in PHP | Professional PHP pingbacked on January 13th, 2006 at 12:44 am
  17. Hello.World » Are you an Expert or Novice Programmer? » The Weblog of Matthew Delmarter pingbacked on January 13th, 2006 at 3:02 pm
  18. Hump Day Blues | Professional PHP pingbacked on February 1st, 2006 at 4:41 pm
  19. #19 chris web developer responds...
    December 27th, 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. #20 flj responds...
    January 8th, 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. #21 Ben W responds...
    May 15th, 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.

Leave a Reply

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

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

Comment Preview

  • Search

  • Subscribe

    Subscribe All Posts
    Subscribe All Comments
    Subscribe All Bookmarks
    Subscribe with Bloglines Subscribe with My Yahoo Add to netvibes Subscribe in NewsGator Online Subscribe with Google feed reader
  • Share This

  • Categories (Home)

    • Agile Methods (14)
    • Mac (14)
    • Misc (16)
    • Open Source (14)
    • PHP (93)
    • Software Design (27)
    • Usability (14)
    • WACT (7)
    • Web Design (20)
  • Recent Comments

    • Delphi for PHP  27
      GNtdTFJVFOSmiLLje, JackSfe, ZIB_NIMER [...]
    • PHP Coding Standards  6
      3123, Jack Johnson, Ignatius [...]
    • Expert and Novice Programmers  13
      Ben W, flj, chris web developer [...]
    • Working with PHP 5 in Mac OS X 10.5 (Leopard)  83
      e-okul, Luis Oscar Cruz, xentek [...]
    • How to Transfer Mac OS X Application Data between Computers  34
      Khaled bin Alwaleed, Oscar, TeeJay [...]
    • Sarah Snow Stever  23
      Snowcore, ennah, Philippine Website Developers [...]
    • PHP Development From Java Architects Eye  9
      Bobrila, FelhoBacsi, Angsuman Chakraborty [...]
    • Improved Error Messages in PHP 5  9
      ennah, Khumaer, retry [...]
    • The value of MVC  7
      Vulchak, อะไหล่แอร์, Derek Scruggs [...]
    • Why PHP is easier to learn than Java  13
      , , WTF [...]
    • goto in PHP  38
      Goldilocks, , SFM [...]
  • Pages

    • Tags
  • Recent Posts

    • 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)
    • Keywords and Language Simplicity
    • Improved Error Messages in PHP 5
    • Michigan Taxes Graphic Design Services
    • Ruby versus PHP or There and Back Again
    • Mighty Mouse Kryptonite and Exceeding Expectations
    • reCAPTCHA - Combining Distributed Problem Solving with a Web Service
  • Archives

    • 2007: Jan Feb Mar Apr May Sep Oct Nov
    • 2006: Jan Feb Mar Apr May Jun Jul Oct Nov Dec
    • 2005: Jan Feb Mar Apr May Sep Oct Nov Dec
    • 2004: Apr May Jun Jul Aug Sep Oct Nov
  • Menu

    • Register
    • Login