Fog Creek Software
Discussion Board




What does a 'world class' programmer know?

A few recent threads, such as the "Reluctance to learn" thread, have brought up the issue of what a programmer should know. Some people there suggested that a "real programmer" should know C, for instance.

What does a world class programmer need to know? I'm not thinking "what can average enterprise app consultant get by by knowing", but what does a real software craftsman know? What sort of things do the best learn?

I'm thinking that a great programmer should understand things like recursion, some basic data structure coverage, understanding of pass by value vs. pass by reference (just here because it comes up here at the Univ. level way too much). Do predicate logic languages matter? What about lisp and friends?

Thoughts?

Mike Swieton
Wednesday, March 12, 2003

"I'm thinking that a great programmer should understand things like recursion, some basic data structure coverage, understanding of pass by value vs. pass by reference."

Thats what an AVERAGE programmer should know.  A world class programmer should be able to pick up a language very quickly, be able to put themsevles in the mind of another architect/programmer and figure out their code/structure, along with being able to architect and design their own systems. 

on TOP of that, a world class programmer can do this all very quickly and meet deadlines despite them being unreasonable.

Vincent Marquez
Wednesday, March 12, 2003

Specifically: does VB matter? I can understand arguing C, but what about VB? I am not a VB programmer, and do not know any VB. Is there some magic point of enlightenment like I hear that lisp offers?

Mike Swieton
Wednesday, March 12, 2003

"What does a world class programmer need to know?"

rule #1
Computers dont work

rule #2
Code that runs on computers cant work (see rule #1)

rule #3
Applications written using code that runs on computers cant work (see rule #2)

...any developer that understands the above rules and their implications is ready to begin writing code

god
Wednesday, March 12, 2003

Mike,

This is the way I look at it.

1.) Techincal & 2.) Non-tech

Technical would include whatever you and Vincent said.

Non-tech: is equally important. Communication skills, People skills, etc.

There are a lot of things that would go into points 1 & 2.

Prakash S
Wednesday, March 12, 2003

They are capable of producing work in a truly original arena, where there is no precedence for success.

Some portion of their knowledge and skills are the best in the world.  When coming up with a list of the top people in an area, they should be on the first hand.

Think Olympic athlete.

Contrary Mary
Wednesday, March 12, 2003

I think it comes down to two things that Joel mentioned in a previous article. A good programmer needs to

  1. Be Smart
  2. Gets things done.

It is aptitude which matters not skills. Anyone with the right aptitude can pick up whatever they need to know and be able to use and implement it in an efficant manner.

JB
Wednesday, March 12, 2003

A world class programmer is someone who can "roll his own" for any task. It is also someone how knows better than to "roll his own" just for the sake of doing so.

Take .NET for example. Knowing how to use the framework is a good skill. Knowing how the framework functions is an even better skill. Being capable of writing the framework yourself is an amazing skill. But knowing better than to waste your time by reinventing the wheel just because you can? That is a world class skill.

Marc
Wednesday, March 12, 2003

I don't know about 'world class', since I've never met a Fowler or Yourdon, but I've worked with some very good people.  Here is what I have observed of them:

C/C++
It seems that working with C *requires* knowledge of pointers, templates and interfaces.  Concepts required to make tight, fast code in any language.

API's
I do Windows stuff, and these guys all knew a good deal of the API.

Object Modelling
Design patterns were second hand to these guys.

I/O
Very conscious of all I/O tradeoffs.  This includes database access, file access, device communication and network protocols.

Classic CS concepts
Semaphores, memory management, mutexes, grammars, compilers, OOP and so forth.

And all of this seems to culminate in what Marc described above: 'roll your own'.  All of this knowledge allowed them to turn their own custom solutions when required:  load balancers, transaction managers, databases, languages or file structures.

As for soft skills, they really lacked  in this area for the most part, poor communication was a mitigating factor here.  If I had to pick one quality though, they all seemed to thrive on innovation.

Canuck
Wednesday, March 12, 2003

--"what about VB? I am not a VB programmer, and do not know any VB. Is there some magic point of enlightenment like I hear that lisp offers? "-----

Yea, comes when you realize it's a crock of ***** and you'd do better to start leanring a real language :)

Stephen Jones
Thursday, March 13, 2003

Actually a world class programmer is somebody who speaks of Ada Lovelace with the same look of longing in his eyes other mortals have when speaking of Jennifer Lopez or Britney Spears

Stephen Jones
Thursday, March 13, 2003

How delightfully Victorian.

There are some non-bloke developers out here you know. And some of us have mothers who were programmers before us.

Katie Lucas
Thursday, March 13, 2003

A world class programmer should know that there isn't such a thing as a world class programmer; programming requires such a range of abilities that you'd best be off trying to find out what makes a "world class" human being ...

Alyosha`
Thursday, March 13, 2003

a world class programmer should know....

That fixing a bug with one line of code is statistically likely to induce 3 more bugs

Fixing it with 3 lines = 1 More bug

With 6 lines = 0.5 more bugs

with 12 line = zero new bugs.

Or more succinctly put...they should know its harder than it first appears...

Lindon
Thursday, March 13, 2003

I think Alyosha nailed it.  Not that this stops us however.

Next subject; Yetti! Truth or Myth?

Marc
Thursday, March 13, 2003


The techinical stuff anybody could tell you, and is covered by a good CS major.

However, the non-tech stuff is -ALL- too often ignored.  (And I'm going to count "How to develop bullet-proof software" as Non-Tech Stuff.  I've known at least one true, actual genius (1600 SAT's type guy) who could learn a programming language in a day, and produce an incredibly complex system in a week, but it would be buggy as heck.

They just don't teach good QA in most schools.

So here's what I'd put down for the non-tech stuff:

1) How to figure out what the customer needs when they don't really know what they want - or - worse - they know what they want, and it won't fit thier needs.  (Nobody likes a consultant that comes in an delivers a perfect system under budget that doesn't really meet the need.)

2) How to develop software with a very low defect rate.  Unit Tests, System Tests, Automated Tests, Extreme Programming, Bug Tracking, Source Code Control, Change Control, etc.

3) How to manage medium and large teams.

4) How to manage medium and large projects - and I AIN'T Just Talkin' Bout' Microsoft Project, Willis. :-)

5) How to negotiate.  Marketing and Sales guys live to negotiate - and when you enter into a discussion of what you can have done when, unless you study this, they will eat your lunch, and you'll promise something you can't deliver.

6) How to deliver on-time, on-budget, high-quality, feature-complete. (And when to pick what if you can't.)

7) Software Engineering.  Process Models, Control Models, E/R Diagrams, Database Theory, etc.

hmm.  This truely deserves an essay.  Maybe I'll write one this weekend.  In the mean time, I'd suggest taking a look at Steve McConnel's Software Engineering Pyramid (off construx.com), and Joel Spolsky's recommended reading list.

A couplea more things:

1) "Extreme Programming, Explained"

2) Atlas Shrugged

3) The Books of John, Acts, and Romans. :-)

4) Successful Software Development

5) Debugging the Development Process

6) Writing Solid Code

7) PeopleWare.  Oh, wait, that's in spolsky's list. :-)

8) The Goal & Critical Chain by Goldratt.

9) http://www.csis.gvsu.edu/~heusserm

10) Mythical Man Month

11) The Practice Of Management, Peter Drucker

that's plenty off the top of my head ...


regards,

Matt H.
Thursday, March 13, 2003


"Million Dollar Consulting"

That's a good un' as well ...

Matt H.
Thursday, March 13, 2003

[
Fixing it with 3 lines = 1 More bug

With 6 lines = 0.5 more bugs

with 12 line = zero new bugs.
]


Wouldn't a world class programmer know that every line of code is a liability? And wouldn't they also know that the # of lines used to fix a bug is not related to the chances of introducing a new bug? I mean if anything an increase in lines of code will be more likely to introduce MORE bugs, not the opposite.

trollbooth
Thursday, March 13, 2003

A world class programmer is someone who is repeatedly,succesfully and lastly, appropriately able to "extend the art" to achieve their goals.

To be average at any job that requires real thought you need the "Is smart, gets things done" stuff.

Robert Moir
Thursday, March 13, 2003

World class programmers, which means they are at a level above *great* programmers, do things with technology that make waves in the industry.

Examples are:

Linus Torvalds, Richard Stallman (GNU/Linux)
John Carmack (Doom, Quake)
James Gosling (creator of Java)
The lead programmers of Google
John McCarthy (pioneer of LISP and Artificial Intelligence)

T. Norman
Thursday, March 13, 2003

So T. Norman, you can't be a world class programmer unless you are the head of a systems programming team at a major IT vendor and freely take credit for ideas you don't invent?

Li-fan Chen
Thursday, March 13, 2003

Most of these softwares were at the right time in the right place with a few good ideas.. most of the rest of it seems like a whole lotta sweat and marketing backing...

Li-fan Chen
Thursday, March 13, 2003

I think it's asfe to say though that when any of the above talk everyone listens. Except for Stallman, in that case you are forced to listen because he will follow you down the street and let you know it's GNU/Linux my friend, not Linux.

I think Donald Knuth could be considered world class.

trollbooth
Thursday, March 13, 2003

How to figure out how to get the job done.

fool for python
Thursday, March 13, 2003

<snip>
A world class programmer should know that there isn't such a thing as a world class programmer
</snip>

State your proof.

Is it impossible that someone *might* actually be good at this programming stuff.  Or, do our egos not allow us to recognize this?

Canuck
Thursday, March 13, 2003

I can't define what a good software engineer is, but I know it when I see it.  I also know _bad_ when I see it.  Actually, you can smell _bad_ coming from a mile away.

BTW:  Yourdon?  Not the prototype for world class anything, except perhaps money machine consulting delivering nothing.

Nat Ersoz
Thursday, March 13, 2003

Is there really such a thing as a world class programmer?

It seems to me that most of the people mentioned above are 'world class' because of things they do other than programming. Writing about economics and software management, inventing a new way to distribute software, or inventing a new language, are all things that you can do without even being able to debug. Now I have no doubt that these guys are excellent programmers, but if they weren't would it invalidate the things we consider them world class for?

David Clayworth
Thursday, March 13, 2003

Hi Mike Swieton,

Well, the way you posed your question sounds as if you are really asking the following question "what does a world class coder know?"

This is not an easy question to answer simply because the I.T. industry is so huge and diverse. 

Imo, a world class coder is NOT the same thing as a top-notch business software developer or a top-notch commerical software developer.

A world class coder typically receives a lot more respect in I.T. related industries (i.e. gaming, commercial software, open source, etc.) then in other industries (i.e. someone who works for a company whose primary business not I.T. related).

World class coders are:
* Known for being expert at implementing technology solutions (i.e. programming and design)
* The people who consistently win coding tournaments at places such as Topcoder.com
* The person who answer lots of "how do I this" type of questions on web-based programming forums
* and the list goes on and on and on.....

Who would I classify as a top-notch software developer in the business arena?  Note: I have not worked on a commercial software project, so I don't feel qualified to comment on who might be or might not be a top-notch commerical software developer. However, my guess is that Joel might qualify as one.

Imo, most book authors are essentially very good coders, however, to make it easy for me and you -- I will list a few book authors who I feel fall into the top-notch business software developer category.

Steve McConnell -- not only does this guy write about all the different aspects of software development he practices what he preaches in his books.

Peter Coad --  a well known object-model builder. Ever hear of the company called TogetherSoft?

Kent Beck -- a Smalltalk/Java wonk who has made contributions in patterns for software development, the xUnit family of testing frameworks, CRC cards, refactoring, and the Extreme Programming methodology.

Paul R. Reed -- has written a couple of books on how to create an object-oriented solution using UML with a particular programming language (i.e. Java and VB).

Deborah Kurata -- an early advocate of object-oriented programming with VB. Those VB programmers who were lucky/smart enough to follow her advice are going to find the move to Microsoft .NET a lot easier than VB programmers who only have experience with procedural programming.

Jake Sturm -- a former Microsoft consultant who has written several books on various Microsoft technologies and other aspects of software development (i.e. OOAD/OOP, project management, etc.).

So what do these book authors have in common besides owning their own companies?  All of them can take a software project from cradle-to-grave all by themselves (if they had to). Another thing they all have in common is that they have developed their own software development methodologies (i.e. someone who can "roll his own" for any task). Some of these book authors are probably world class coders while others probably aren't.

One Programmer's Opinion
Thursday, March 13, 2003

"Now I have no doubt that these guys are excellent programmers, but if they weren't would it invalidate the things we consider them world class for?"

If they weren't excellent programmers, they would have failed to achieve what they are now famous for.  They all had direct hands-on involvement in the technical design and development of what made them famous.

For example, with only about three other programmers Carmack was able to create Doom which was way ahead of what was acheived on the hardware at the time.  That is something that a team of 100 average programmers toiling for years couldn't do.  Stallman had direct involvement in creating much of what makes up Linux (he is the GNU in GNU/Linux), including being the primary programmer of Emacs and the GCC compiler.  The Google team came late into the search engine market, but were able to surpass what thousands of others had been doing before them.

T. Norman
Thursday, March 13, 2003

>>>>>
I've known at least one true, actual genius (1600 SAT's type guy) who could learn a programming language in a day
>>>>>

But, can't we all learn a programming language in a day?  I think anyone of us here can pick up on a language and start writing meaningful code by the end of the day.  To an extent, I suppose.  For example, if your background is VB, it will be pretty hard to go from VB to C or Assembly or something.  But if you've had education (my CSE degree) in Assembly, C, C++ ... I think you can pretty much pick up any language in a day.

For example, I started a project 6 months ago that was in VB.  I had never used VB before.  So, I picked up a VB book ... read the first few chapters on the IDE, the different primitave types (ints, longs, variants, etc.), the if stmt's, for loops, and while loops, etc., and how to use Forms.  After that I was raring to go.

Once you have the basics, I feel that the rest is pretty much cake.  Learning the API's of any language isn't that difficult.  Especially when you have something like google waiting to help you (searching out information quickly and easily is a 'skill' -- i've seen programmers that haven't learned how to do this).

Maybe I'm over-stating this, I don't know.  But this past year and a half I developed for the Palm OS using the CodeWarrior IDE, PocketPC using Embedded Visual C++ IDE, php for backend stuff we do, and Windows using VB and It's IDE ... and I had not known any of those IDE's or API's, or languages (except maybe the EVC -- because I had Visual Studio/MFC/C++ experience).

So a "programmer" that is "world class" should have at least these skills:

1) Be able to pick up languages fairly quickly.
2) Be able to search for information quickly and effectively.
3) Be able to debug well.

3, to me, is very important.  Very important.  But the thing is, when people are interviewing candidates for a programming position .. there are rarely any tests or questions that look for this skill.

I've seen over and over again people who if you asked them a question could state all the computer science theories, talk about the advantages of this language vs. that, know all the architectures, etc., etc.  But produce buggy code.  I don't get it.  In other words they can talk the talk but not walk the walk (but it's usually the "talk" that gets them in the door -- cause how do you interview for the "walk", extensively?)

I think there is a style of programming that you can learn that keeps you from writing buggy code and I've seen smart people that haven't learned how.  I've been told by people that I write "bug free code".  And I think it's because of the debugging and testing skills that I have.

William C
Thursday, March 13, 2003

Being able to apply the abstract, platonic concept of computing to any language (i.e. being able to be raring on a new system in days or weeks with little downtime) is not all it takes to be "world class"  That just means that you have a great intuitive grasp of coding.

flamebait sr.
Thursday, March 13, 2003

Hmmm...maybe flambait sr.  I'm not sure.  But programmer and coder are synonymous to me.

I think I envision a programmer as someone who writes code.  An architect might define the architecture, but the programmer actually gets the task of coding done.

William C
Thursday, March 13, 2003

What is a "world class developer"?  Someone who makes everyone happy.  A few questions to determine if someone is "world class":

Does this person listen to management?  Or, more importantly, is this person _listened to_ by management.  Can they make management understand that their demands are unreasonable?  Are they liked and trusted enough to push through a clean design or process?

Do the users like the software produced?  Is sales satisfied with the compromises that were made?  If not, can this person bring them to the point of understanding.  Is marketing happy with the modern look of the product?

Being "smart" and "getting things done" are not enough.  A great developer needs respect, otherwise his sphere of influence is small and that precludes him from being considered "great".

This isn't about recursion, pointers, or OO.  Spend your time asking "who am I making happy with the line of code I'm typing"?  If the answer is only yourself, rethink your strategy.

A "world class" developer is one who pulls out all the stops to ensure that his company creates "world class" software.

Bill Carlson
Thursday, March 13, 2003

<snip>
A great developer needs respect, otherwise his sphere of influence is small and that precludes him from being considered "great" .... Can they make management understand that their demands are unreasonable?
</snip>

I disagree.  This presupposes that management can identify talent.  Sometimes they cannot.  I would agree  that the developer in question is under utilized, but his skillset remains the same.  I would suggest that, in this case, management is not 'world class'.  Not vice versa.

I say this because I worked with a guy in this exact situation.  When it came to software development he brought all of the requisite tools that might classify him as 'world class'.  Politically however, I have never seen anyone humbled so quickly.  The two existing senior developers, by virtue of seniority, not skill, undermined him at every step.  The rest of the developers, at all levels, pleaded and begged, to have this guy step in and run the show.  No dice.

Every guy in the place wanted to be on his projects, lined up at the door.  Working with him for two or three months was like a year of learning on your own.

So, is he still 'world class'?  I think so.

Canuck
Thursday, March 13, 2003

Canuck,

I think we basically agree.  In many cases, it's not politically possible to sell your ideas or modify existing process.  My point is that "world class" developers do whatever is in their power to advance the success of the company.  Be it mentoring, writing code, "rightsizing" expectations, etc.

An analogy would be a great teacher given lousy curriculum or a master craftsman given shoddy tools.  The true measure of competence is what we do with the "real world", not what we would hypothetically do with an "ideal" one.

Bill Carlson
Thursday, March 13, 2003

*  Recent Topics

*  Fog Creek Home