Browse in : |
All
> Journal Columns
> Professionalism
All > Journals > CVu > 172 Any of these categories - All of these categories |
Note: when you create a new publication type, the articles module will automatically use the templates user-display-[publicationtype].xt and user-summary-[publicationtype].xt. If those templates do not exist when you try to preview or display a new article, you'll get this warning :-) Please place your own templates in themes/yourtheme/modules/articles . The templates will get the extension .xt there.
Title: Professionalism in Programming #31
Author: Administrator
Date: 05 April 2005 13:16:11 +01:00 or Tue, 05 April 2005 13:16:11 +01:00
Summary:
Last time we began a high-paced stroll through a gallery of collected programmer stereotypes. In this concluding article we'll finish the tour, and see what makes the best type of programmer. Brace yourself: here come more Code Monkeys...
Body:
Darwinian Man, though well-behaved, at best is only a monkey shaved (Gilbert and Sullivan)
Last time we began a high-paced stroll through a gallery of collected programmer stereotypes. We're looking at individual developer attitudes, to see how they can drastically affect the quality of the software we write and how they affect the whole development team.
In this concluding article we'll finish the tour, and see what makes the best type of programmer. Brace yourself: here come more Code Monkeys...
Some would incorrectly classify this guy a Hacker. He's not a hacker in the classic sense of the word. 'Hacker' is a term used by geeks to proudly describe a heroic coder[1]. The Cowboy is a shoddy programmer, who actively avoids hard work. He'll take as many shortcuts as he can find.
The Cowboy dives straight into code and does the minimum work to solve the immediate problem. He won't care if it's not a very good solution, if it compromises the code structure, or will not satisfy future requirements.
A Cowboy is anxious to complete each task and move on to the next. If he's read a little about processes, he'll call this Agile Programming. It's really just laziness.
- Strengths
-
Cowboy code works, but isn't particularly elegant. Cowboys like to learn new things, but seldom get around to it (it's too much like hard work).
- Weaknesses
-
You'll spend ages cleaning up after a Cowboy. Their aftermath is not a pleasant place to be. Cowboy code always requires later repair, rework and refactoring. They have a limited palette of techniques to use, and no real engineering skills.
- What to do if you are one
-
Learn to hack code in the right sense of the word. Take a pride in your work, and spend more time over it. Admit your failings, and try to improve.
- How to work with them
-
Never go into a Cowboy's house; if their code's anything to go by, it'll be a DIY disaster! Understand that they're not a malicious breed, just a little lazy. Organise reviews of their code. Get them pair programming (they might work well with an Eager Coder, but if you want to see fur flying pair them with a Planner).
The Planner thinks about what he's doing so much, the project's been canned long before he's started writing any code.
It's true, you must plan up front and establish a cohesive design, but this guy forms an impenetrable cocoon around himself and refuses any contact with the outside world until he's finished. Meanwhile everything's changing around him.
Terminally educated, the Planner studies and reads a lot. A common subspecies is the Process Weenie; he knows all about the 'proper development process', but is weak on hitting deadlines or getting anything done. (Process Weenies eventually become middle managers, and then get fired.)
- Strengths
-
They do design. They do think. They don't hack out thoughtless code.
- Weaknesses
-
When a Planner sets to work there is a very real danger of over design. He tends to create very complex systems. Planners are the key cause of analysis paralysis - where development gets more focused on methods and modelling than on prototyping and creating a solution. The Planner likes to generate endless documents and call meetings every other hour.
He spends ages thinking, and not enough time doing anything. He knows a lot, but it doesn't all make the leap from theory to practice.
- What to do if you are one
-
It is important to create careful designs up front, but consider incremental development and prototyping as methods to verify your design. Sometimes you can't commit to a design until you've actually started to implement it. Only then will you appreciate all the problems.
Try to establish a better balance of planning and action. Console yourself that it's better to spend too long designing than to write awful code - the latter is far harder to fix.
- How to work with them
-
Ahead of time, agree all milestones and deadlines for a Planner's work. Throw in a design complete milestone; they'll be happy that it has been recognised as an important task, and encouraged to complete their design work on time. This is usually enough to crystallise a Planner into action.
Avoid meetings with a Planner. You'll spend an hour arguing about how to decide the agenda.
This old boy is a senior programmer from the old school. Sit back and listen to him reminisce about the Good Old Days, when he used punch cards and machines without enough memory to hold the result of an integer addition.
The Old Timer's either happy that he's still doing what he loves the most, or bitter that he's missed promotion countless times. He's seen it all, knows all the answers, and won't learn new tricks (he'll tell you that there's nothing new to learn, we just repackage the same old ideas).
An Old Timer doesn't suffer fools gladly. He's a bit cranky, and is easily irritated.
- Strengths
-
He's been programming for years, and so has considerable experience and wisdom. The Old Timer has a mature approach to coding. He has learnt what qualities make good and bad programs, and how to avoid the common pitfalls.
- Weaknesses
-
The Old Timer won't willingly learn new techniques. Fed up with fashionable ideas that promise much and deliver little, he's slower and more resilient to change.
He has little patience thanks to years of corporate ineptitude. He's been at the receiving end of countless tight deadlines and unreasonable managers.
- What to do if you are one
-
Don't be too judgmental of younger more enthusiastic programmers. You were once like them, and your code wasn't awful.
- How to work with them
-
You don't know how easy you have it, you young programmers. Don't mess with an Old Timer, or you'll find out how he survived this long in the software factory. Choose your battles with him wisely. Show him respect, but treat him as a peer, not a deity.
Understand the Old Timer's motivation. Check if he's programming because he loves to do so, or because he can't scale the promotional ladder any higher.
The Zealot is a brainwashed convert, a disciple who blindly thinks that everything BigCo produces is excellent. Teenage girls have rock stars to worship; programmers have their own idols. In his enthusiasm, the Zealot takes it upon himself to become an unpaid technology evangelist. He'll try to incorporate BigCo products into every assignment he is given.
The Zealot follows BigCo to the exclusion of all other approaches, and rarely knows about alternatives. Anything that's not excellent in the current BigCo product line will be fixed in the next version, which we must upgrade to immediately[2].
- Strengths
-
He knows BigCo's products inside out, and will produce genuinely good designs based on them. He is productive with that technology, but not necessarily maximally productive - other unfamiliar approaches might be more effective.
- Weaknesses
-
Being a Zealot, he's neither objective nor pragmatic. There may be better non-BigCo designs that he will miss. Worse, though, are the Zealot's continual rants about BigCo.
- What to do if you are one
-
No one expects you to turn away from your beloved BigCo. It's valuable to understand their technologies and know how to deploy them. But don't be a technology bigot. Embrace different approaches and new ways of thinking. Don't look at them with an air of superiority, or prejudge them.
- How to work with them
-
Don't bother getting into philosophical arguments with a Zealot. Don't try to explain the virtues of your preferred technology - he won't listen. Watch yourself - one conversation with this guy can turn you into a Zealot. He's contagious.
Zealots are generally harmless (and amusing to watch from a distance), unless your project is at a critical design stage. At this point, provide a clear, unbiased perspective on the problem domain and insist on a thorough evaluation of all implementation approaches. Remember: he might be right.
If you encounter silly arguments, counter them with well prepared, accurate, detailed information about the strengths of your approach and the weaknesses of his.
The Slacker is a workshy sluggard. He's hard to detect, because he's learnt to make it look like he's overloaded with jobs. His 'design' is playing solitaire, his 'research' is looking at fast cars on the web, and his 'implementation' is working on his own stuff. The Slacker actively avoids all assignments ("Oh, I'm far too busy to do that").
A more subtle Slacker will only work on the things he wants to, or the bits he thinks should be done, not what he's supposed to. Despite working all the time, he'll never get his jobs done.
The Slacker knows how to have fun. He parties too much, and can usually be found sleeping under his desk. His diet consists mostly of coffee, except for lunchtimes when you'll find him in the bar.
This guy can be a burn-out; one too many failed projects has killed his desire to work.
- Strengths
-
At least he knows how to have fun.
- Weaknesses
-
A Slacker is an obvious liability. It's hard to prove he's slacking - some hard problems do take a while to sort out. A programmer might not be slack, just not skilled enough to solve the problem quickly.
- What to do if you are one
-
Work on your morals, and start to put some effort in. Or learn to live with the guilt.
- How to work with them
-
It's best not to bitch about a Slacker - you have your own flaws. In good time he'll get his come-uppance.
Take measures to prove that you are working effectively, and that delays are the Slacker's fault. It might help to keep a methodical diary of your work. A clear set of deadlines is generally enough to get a Slacker working. Don't start writing his stuff too, even in desperation. He'll only expect you to do this next time.
Avoid burnout yourself, try to have fun as you work. Perhaps you should hit the bar with him one lunchtime.
This is the organisational classic; a developer who's been promoted to team leader when there was no further technical route for him to advance. You can plainly see that he is uncomfortable in this role. He doesn't have the correct skillset, and struggles to keep up. He is a programmer, and wants to program. This guy is not a natural organiser or manager of people, and is a bad communicator.
Most programmers make spectacularly bad leaders. There are few genuinely excellent software team leaders; it requires a particular skillset that is both technical and organisational.
The Reluctant Team Leader is usually quite mild mannered and indecisive - how else did he get persuaded to take on this job? He gets squashed between the development team and management, taking the blame for slippage and poor software. An increasingly harrassed expression grows on his face until he finally burns out.
- Strengths
-
The Reluctant Team Leader has a real sympathy for the programmer's plight - he's been there, and now wishes he was back. Often he is far too willing to take responsibility for late software delivery, to prevent the programmers being picked on by management. Just as he's not good at delegating work, he's not good at apportioning blame.
- Weaknesses
-
When a Team Leader tries to write code it will be awful. He never has enough time to write, design, and test carefully. He naively plans himself a full day's coding alongside team leading duties. He can't fit it all in, and so the Reluctant Team Leader spends longer and longer in the office, trying to keep up.
He can't organise well, can't explain things to managers, and can't manage his team members properly.
- What to do if you are one
-
Get training. Quickly.
If you're not happy in this role, push for a career move. This is not admitting defeat; it's pointless to burn yourself out doing something you hate and aren't good at. Not everybody has the skills or passion for management. Move to the area you do have skill and passion for.
If you like herculean tasks, try to sort out the promotion path at your company. Get them to recognise that a managerial position should not be the next step up from senior developer. Few programmers make decent managers; their brains aren't wired up the right way.
- How to work with them
-
Be sympathetic, and do everything you can to help the Team Leader. Give him reports on time, and try to get your work done to schedule. If you might miss a deadline, let the Team Leader know early on, so he can plan around it.
From this tangled mess, it's clear to see that we're a strange breed. Which of these code monkeys should we aspire to? What code monkey cocktail will create the Ideal Programmer?
Unfortunately, in the Real World there are no perfect programmers - the beast is an urban myth. Although this question is somewhat academic, finding an answer will give us something to aim for.
The fabled Ideal Programmer is part:
- Politician
-
They must be diplomatic, able to deal with all of these weird code monkeys and the many, many more creatures that inhabit the software factory - managers, testers, support, customers, users, and so on.
- Relational
-
They work well with others. They aren't territorial about their code and aren't afraid to get their hands dirty if a task is for the common good. They communicate well - they can listen as well as talk.
- Artistic
-
They can design elegant solutions, and appreciate the aesthetic aspects of a high quality implementation.
- Technical genius
-
They write solid, industrial strength code. They have a broad palette of technical skills, and understand how and when to apply them.
Reading that list again, it's quite clear what we should be. If you haven't realised yet, I'll spell it out for you. The ideal programmer is a: PRAT.
Only the wisest and stupidest of men never change. (Confucius)
Whilst it's entertaining to stare in the cages at all of these code monkeys and have a laugh at their expense, what should you do about this? If you do nothing then it's been little more than mere entertainment; you'll walk away doing exactly the same stupid things you've always done.
To improve as a programmer you must change. Change is hard - it runs contrary to our nature. The saying goes: a leopard doesn't change his spots. If he did, he wouldn't be a leopard any more. Perhaps that's the key. More of us should be wildebeest or rhinoceros.
Take a moment to think about the following questions:
-
What kind of code monkey are you most like? If you're honest there's probably a little of each of them in you. Identify the one or two that describe you in a nutshell.
-
What are your particular strengths and weaknesses?
Look over your code monkey description again, and see what practical things you could change. What specific techniques will help you to overcome bad attitudes, and how can you capitalise on your good ones?
Programmers are a social species (which is odd considering their lack of social skills). They are social by necessity; you can't create excellent large software systems without a closely working team of programmers, who are knit into a larger social structure (be it a department, company, or an open source culture).
Each of these programmers has their own foibles and peculiarities. Their underlying attitudes affect how well they program - both in their approach to the code and to their place in the team.
If you want to be an exceptional programmer, you need to foster the correct positive attitudes. Remember: aim to be a prat.
Thanks to my friend and colleague David Brookes for the excellent monkey illustrations. I owe you another pint, Dave (or perhaps another banana!)
[1] Also been subverted by ignorant people, and used mistakenly to mean cracker - someone who breaks into computer systems without permission.
[2] Don't assume that Zealots only idolise certain software vendors. A Zealot might equally be an open source advocate, or hanker after an obsolete software package.
Notes:
More fields may be available via dynamicdata ..