Mar 20th, 2011 | Job, Management, People
I noticed that three spirits are fighting in the soul of a software developer – Great Artist, Reliable Worker and Selfish Pragmatist.
If you hear a voice within you say, ‘You cannot paint,’ then by all means paint, and that voice will be silenced. – Vincent van Gogh
The first spirit is a Great Artist who pushes our fellow programmer to work on challenging tasks, invent new approaches and seek for self realization. The spirit gives power and desire to create state of art solutions and move forward with learning and practice. The Great Artist spirit is behind the best software; it makes the developer to think out of box, strive for beautiful code and forget everything outside the problem. It is powerful spirit but dangerous for ordinary business – there is no predictability and assurance that developer will remember what client really needs. The developer driven by this spirit tend to reject mediocre, but good enough solutions, will do stuff his own way and go far beyond what is necessary. This developer has zero tolerance to poor code and will refactor most important pieces of code even night before important demo… after testers go home to sleep.
Read full post >>
Jan 18th, 2010 | Expertise, Job, People, Skills
Are ideas born interesting or made interesting? – Chip & Dan Heath
You have 2 options to communicate your ideas:
- Tell people what is interesting for you – easy, but unfortunately, your ideas will be wasted because of other people low interest, incomplete knowledge or disagreement.
- Make your ideas interesting for other people – hard, but you have chances that other people will pay attention, understand, remember and act upon your ideas.
This post is devoted to people who are interested in the second option.
Why should a programmer care about communicating ideas to other people?
It is true, the primary job of a programmer is to feed computers with ideas. But you cannot quietly hide behind a computer forever. You have to deal with other people:
- team – to contribute and explain your programming ideas
- customers – to discuss and build trust in your solutions
- end-users – to make your programming ideas useful for users
- programmers of the world – to share your knowledge and exchange ideas
- capitalists – to sell your ideas
- low tech crowd – to promote technology ideas
Why is it so hard to make ideas interesting for other people?
- Curse of knowledge – once you know something, it is hard to imagine not knowing it and communicate to novices
- Resistance – many people ignore or resist new ideas
- Limited brains – people have short attention span and can be easily overwhelmed by new and complex information
Read full post >>
Aug 11th, 2009 | Concepts, Job, People
Computers are useless. They can only give you answers. – Picasso
Many people (including my mother-in-law) think that computers are becoming so smart that programmers will be no longer needed in the near future. Other people think that programmers are geniuses who constantly solve sophisticated math puzzles in front of their monitors. Even many programmers don’t have clear idea what they do.
In this post I want to provide some explanation to uninformed people what programmers really do:
Programmers are translators of human ideas into the language of computers.
They are a link between two worlds – human and computers. Do you think it is easy to maintain this link?
Read full post >>
Jun 24th, 2009 | Job, Management, People, Productivity, Skills
What you are as a person is far more important that what you are as a basketball player. – John Wooden
People are amazing, surprising and interesting. They change reality with power of thought and make things happen. What is most exciting – all people are completely different in their attitudes and behavior. But this comes with price – it is difficult to understand people and even more difficult to find the best way to deal with them.
Many people, who see programmers as extensions of their computer systems, will be surprised to discover that programmers are amazing individuals too. Programmers exhibit similar to other people behavior, they have different personalities and need individual approach.
I offer in this post a simple theory about Three Dimensions of a Software Programmer that could help to put relations with these individuals on some rational basis.
There are two basic axioms in foundation of the theory
- Constancy – some programmers consistently outperform others under same conditions.
- Variability – performance of a programmer varies under different conditions.
Read full post >>
Mar 15th, 2009 | Expertise, Job, Practices, Productivity, Skills
experts are made, not born – Scientific American
Disclaimer: This post is devoted to a person who wants to become an expert – the top player in a specific field as programming, soccer or chess. This post will be not interesting for people who are satisfied with their current performance and not interested to be the best.
If you want to become an expert, it is not enough to follow your work assignments or occasionally play with interesting stuff at home. You have to push yourself hard in specially designed way.
Your paid work tasks and projects are not designed to make you an expert. Your company expects results from your work: reliable, with minimal mistakes and focused on the company main goal – make money. Your employer could provide minimal training to help you with job requirements. However, your growth will be constrained by company needs, timelines, work assignments and acceptable methods. We cannot blame our organizations – this is part of the deal – they pay for your work and expect specific results. But… is this the best way for you to become an expert, acquire new skills and gain knowledge? To become an expert, you have to make many mistakes, learn from them, experiment with alternatives and work hard on your weaknesses. How many organizations do allow this risky, unproductive and unreliable way of working?
Your play at home with interesting stuff has problems too. To satisfy your programming instincts and curiosity, you will probably select what you enjoy to do and eager to try. You’ll immense in this activity and find great satisfaction from doing it. But… is this the best way to become an expert by doing only what you like? Becoming an expert requires hard, sometimes unpleasant work, specifically designed to improve your performance and push you over comfort zone. Read full post >>
Nov 12th, 2008 | Job, Practices, Process, Skills
“I made this program longer than usual because I lack the time to make it shorter.” – paraphrasing Blaise Pascal
The Elements of Pragmatic Programming Style is the collection of rules for pragmatic programmers. This collection doesn’t pretend to be comprehensive guide how to program. Rather it concentrates on fundamentals: how any programmer can build better software for the customer. Some of the rules are obvious, but, surprisingly, many programmers don’t even think about them. They make same mistakes over and over again. I hope this post will inject a healthy dose of pragmatism into your programming style and make it a bit better .
- Intention – understand your task and how to get it done
- Approach – basic principles of writing code
- Composition – organization of code
- Expression – expressing ideas in code
- Object Oriented Pragmatic Style
The goals of Pragmatic Programming Style are
- Building reliable software fast.
- Delivering maximum value for the customer.
- Writing code that is easy to understand, change and share.
“Everyone hears only what he understands.” – Johann Wolfgang von Goethe
Understand your task and how to get it done
Read full post >>
Oct 8th, 2008 | Job, Skills
Can in-house software programmers become extinct?
Companies spend millions dollars on in-house software development. There is no easy escape for business – they must use software in today world. Companies need in-house programmers for specific for their businesses applications and pay hefty ransom. But will it continue forever? Companies are not happy. And there are few trends that can put in danger a large population of in-house programmers:
Lets imagine the worst scenario. Suppose the dark day came – somebody invented a machine that can program. Non-programmers can use the machine for building software for their business needs. Technical knowledge and programming skills are no longer needed – just tell machine what you want and get a software program. Will it be the end of in-house programmer’s era? Read full post >>
May 27th, 2008 | Job, People
Happiness is a direction, not a place. – Sydney J. Harri
Happy programmers are more productive, healthier and live longer. It is pleasure to work with happy programmers. Are you a happy programmer? Do you have feeling of joy and satisfaction every day? Do you want to know how to become happier?
This post considers programmer’s satisfaction with live as a whole (I had another post dedicated to happiness at work).
Programmers as other people are happier if they have
- more money
- successful marriage
- excellent health
- good friends
- live in a beautiful place with wonderful weather
But we have what we have. It is not easy to achieve all of this: become rich, find perfect spouse and friends, be completely healthy and move to the best place on the Earth. But the most nasty news is that even after achieving all of this happiness is not guaranteed to last forever.
Read full post >>
Apr 23rd, 2008 | Job, People, Skills
Who are the perfect programmers?
Popular blogger Alex Iskold answers in Top 10 Traits of a Rockstar Software Engineer:
- Loves To Code
- Gets Things Done
- Continuously Refactors Code
- Uses Design Patterns
- Writes Tests
- Leverages Existing Code
- Focuses on Usability
- Writes Maintainable Code
- Can Code in Any Language
- Knows Basic Computer Science
It is a solid list, but this list concentrates on the secondary traits, which are just consequences of the deeper set of qualities. And it is an idealistic list. Do you expect the same qualities from a Flash programmer for kids websites and a software engineer for B2B financial transaction services? But how can we recognize a perfect programmer in the crowd of developers?
The Ultimate Criteria for finding The Perfect Programmer: The perfect programmer delivers good software that meets client’s expectations.
Therefore, the shocking truth is that perfect programmers could know only one programming language, don’t have any idea what are design patterns and don’t program all nights in their basements creating the next Google. We cannot objectively measure the programmers perfection like you could measure diameter of your biceps. The perfect programmers are simply perfect if they deliver a quality, usable and maintainable software system [a good system] in time and meet client needs.
Read full post >>
Mar 19th, 2008 | Job, People
“Variety is the spice of life”
Did you see a software team with members that are
- always stressed and full of fear to fail or completely indifferent to end results?
- totally agree with each other and satisfied with their product, but very far from harsh reality?
- competing and fighting for the true solution, but cannot achieve common goals?
- always inventing something interesting, but cannot focus on work and deliver software?
- overly disciplined, planning everything, but deliver mediocre boring results without any spark of imagination?
- having excellent communication, rapport and environment, but spend most of the time talking than working?
- sitting in separate cubicles without talking, barely understanding what others are doing?
Can these teams be successful? What is the root cause of their problems? How these problems could be prevented?
One of the most interesting things about humans is their personality. We are different in behavior, reactions and feelings in the similar situations. These wonderful personality traits make our life refreshing and sometimes totally unpredictable. Do they matter in software development, apparently logical and rational activity? I believe that people are the most important factor in the software development and they determine success. A programmer’s personality affects behavior and therefore it must have significant impact on the work itself.
Empirical research shows five broad dimensions of personality:
- Openness – appreciation for art, emotion, adventure, unusual ideas, imagination, curiosity, and variety of experience.
- Conscientiousness – a tendency to show self-discipline, act dutifully, and aim for achievement; planned rather than spontaneous behavior.
- Extroversion – energy, positive emotions, and the tendency to seek stimulation and the company of others.
- Agreeableness – a tendency to be compassionate and cooperative rather than suspicious and antagonistic towards others.
- Neuroticism – a tendency to experience unpleasant emotions easily, such as anger, anxiety, depression, or vulnerability; sometimes called emotional instability.
What are the best personal traits for the programmer? Before answering this question, I want to mention research of rudimentary personality traits in wild animals. Small birds, great tits, have personality ranging from highly exploratory to more cautious one. Scientists found that the both personality types are optimal, but under different conditions. When resources were scarce it paid the birds to dispense further. However, when resources are abundant more cautious birds were more likely to survive. Morale is that our evolution preserved different personalities for the good reason. They help us to survive and advance under various unpredictable conditions. They made overall population resilient to changing environment, threats and challenges.
Software teams need diversity not only in skills, experience and knowledge. They need the optimal balance of personalities to effectively build software, especially in our rapidly changing technological, business and social worlds.
Read full post >>