Warning: this blog includes actual codes of ethics. Reading codes of ethics may result in drowsiness. Do not read this blog while driving or operating heavy machinery.
Last week’s psygrammer post, Sharing Benefits Increases Cheating, was a glimpse on how people make (un-)ethical judgements and creating a working environment that fosters ethical behavior. As I reflected on that post I realized that ethics was rarely an explicit part of my working environment: no employer had a code of ethics (that I knew about) and it was rarely a direct topic of conversation in the workplace. Sure, I faced many ethical dilemmas and I feel that I have sought to act ethically throughout my career. But what are the ethical principles that I am supposed to uphold? Will it make it easier to recognize ethical dilemmas and make ethical choices if I know the individual “ethical lemmas“?
As the cliché goes, there are few certainties in life. For programmers, bugs are one of the certainties. How we react to bugs matters.
There are plenty methodologies, processes and technologies that deal with bugs. These are all important and are widely written about.
I think that programmers also benefit from a better understanding of behavioral and emotional responses to bugs. These responses can lie close to the surface and affect the performance of individuals and teams. This post looks at both constructive and negative responses to bugs as a kind of “field guide” to identifying these behaviors in yourself and others.
Here’s a story I have heard many times about programmers.
“I asked Joe to write a simple bit of code to do <xyz>. It should have taken a few hours, maybe a day at worst. He took several days, he wrote a general framework that was far more complicated than we needed. Why does he keep over-engineering his code?”
It could be that Joe is an Abstract Oriented Programmer. Here’s a few snowclones…
If you often over-engineer your software, you might just be an Abstract Oriented Programmer.
If you spend more time thinking about tomorrow’s problems than today’s, you might just be an Abstract Oriented Programmer.
If you love looking for deeper patterns, get thrills from unconscious insight or talk in analogies, you might just be an Abstract Oriented Programmer.
In writing the last blog on motivation my mind was drawn repeatedly to thoughts about performance. After all, motivational techniques are primarily about boosting performance. But as I put “pen to paper” for this blog it turned out harder to write than I expected. Human performance is a squiggy topic but unquestionably important.
I start out with some classic performance curves that apply to factories, motors and other mechanical systems. Next I move to the human performance curve and then consider the large variability of the performance of programmers, the Elo rating system for rating chess players and musing on its relevance to programming. I close with sage advice to programmers from Captain Barbossa and Dirty Harry (who, as far I know, are not fictional programmers).
Let’s start with a few quick observations on money and motivation.
- Bonuses can be an easy and expensive way to demotivate staff just as to motivate them.
- Experiments consistently show that financial motivation can actually reduce performance particularly on tasks that require thinking … like programming.
- If money were the sole motivator then open source would not have transformed the world and society would lose the massive contributions made by other volunteers.
- But equally … unfair rewards and low salaries can switch off the mind of your team.
So why do many organizations persist with financial bonuses as their core incentive? What’s the right balance of rewards?
It’s not good news for programmers… “Prolonged sedentary time is ubiquitous in developed economies and is associated with an adverse cardio-metabolic risk profile and premature mortality.” according to recent research.
In English… Too much sitting is bad for people’s health even if they exercise several times a week.
David in 1504 vs. David in 2011
(Photoshop creator unknown)
The good news is that simply standing up more often during your working day makes a positive difference.
Today, many programmers collaborate remotely. Some collaborators will never meet in person. Some will not even meet by phone or video conference and so will collaborate solely through textual encounters.
With so many distributed teams it is important to ask whether physical interactions provide software teams with an advantage and what can be done to facilitate teams collaborating across distance and time zones.