Dec 10th, 2008 | Practices, Productivity, Skills, Teams
Pair Programming is a great way to build software systems. When Pair Programming works, it has significant benefits:
- better ideas – continuous brainstorming, larger knowledge pool, less gaps in understanding and more brain power to solve design problems;
- better quality – fewer bugs, instant validation of ideas, consistent approach and stricter adherence to team conventions;
- better knowledge – experience and knowledge sharing, deeper understanding of why, how and what was done;
- increased productivity – better focus and higher intensity, pushing each other and motivating to achieve best results, less procrastination and wasting of time;
- more enjoyment – most people like to work in groups and solve together interesting problems.
Extreme Programming leaders insist that all significant development should be done in pairs. But can we say that Pair Programming is the best method in all situations?
Read full post >>
Dec 2nd, 2008 | Concepts, Design, Practices, Productivity, Skills
Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. – Antoine De Saint Exupery
The approach to programming is concerned with finding the best ways to translate programmer’s intention into the good system design and code.
The programming is communication. The programmer continuously add, change and refine ideas in the code. Source code has two important goals: tell a computer what to do and tell people what the computer should do. The program code is the only true medium for storing and communicating ideas about the software system behavior. Quality of the ideas expression in the code directly affects overall quality of the system.
So, what are characteristics of the good code?
- clear – easier to work with ideas;
- minimal – less effort to understand and change ideas;
- testable – easier to validate ideas.
These are 6 top reasons for bad design and code:
- lack of expertise
- unrestrained technical curiosity and creativity
- missing big picture: system purpose and customer goals
- blindly following popular methods and over-using technology
- sloppiness; lack of attention to details
- over-complicating design to have more work or increase job security
The programmer can write better code (and avoid most of these problems) by improving programming style and approach.
Read full post >>
May 19th, 2008 | Architecture, Concepts, Design, People, Practices, Process, Productivity, Skills, System
I can’t wait to share this simple secret with you right now.
The Secret: Effective Software Systems are the systems that easy to understand and operate with human brains.
Programmers are more productive with effective software systems. Programmers can better learn and grow these system. Programmers have less problems, work faster and make better decision with them.
Now, you can avoid spending time reading this post if you already know this secret and you know how to avoid building the software system that:
- almost impossible to understand in reasonable time
- has confusing and convoluted swamp of logic and structure
- scary to change as nobody has any clue what will be broken, but sure that it will be broken
If you are still interested, lets find out what makes software systems effective.
Software Development is a pure mental endeavor (except typing on keyboard) that includes 3 main activities:
- Understand – learn and know system concepts and implementation
- Evolve – build, modify and support growth of the system ideas in the code
- Share – communicate and exchange ideas about the system
Programmers should care about 7 areas to make the system better suited for our brains:
- Knowledge Creation and Retention – parsing, memorization and comprehension of the system ideas
- System Organization – elements, relations and structure in the system
- Sustaining Emerging Order – support evolution of the system and gain control over chaos
- Minimize Noise and Purify – avoid adding unnecessary stuff to the system
- System Discovery and Learning – making sense of the system
- Mental Models – our internal explanations for how things are working in the real system
- Shared Knowledge – ideas exchange, reconciliation of opinions and creation of mutually enhanced knowledge.
Read full post >>
Apr 16th, 2008 | People, Productivity, Skills
“The important thing is not to stop questioning” – Albert Einstein
A typical programmer faces thousands lines of code, huge number of details and millions of situations and states during the software system execution. A programmer should understand the system, know how to modify it and support knowledge about the system with explanations, justifications and answers. How can a software developer gain, maintain and operate this knowledge and make sense of these volumes of information and complex logic changing every day?
The ways how our memory works could give us few hints.
Our Human Memory Architecture
Read full post >>
Aug 22nd, 2007 | People, Productivity
42… Do you still need more explanation?
42 is the Answer to The Ultimate Question Of Life, the Universe and Everything (Google confirms this). According to The Hitchhiker’s Guide to the Galaxy, a hyper-intelligent race constructed the second greatest computer in all of time and space, Deep Thought, to calculate the Ultimate Answer to the Great Question of Life, the Universe, and Everything. After seven and a half million years, Deep Thought answered: “forty-two.” The computer rejected complains:
“I checked it very thoroughly, and that quite definitely is the answer. I think the problem, to be quite honest with you, is that you’ve never actually known what the question is.”
This is probably the largest known communication failure in the Galaxy. What about you? Do you know how to communicate effectively, avoid communication failures and still get things done?
Communicating with humans
We know that effective communication with humans requires skills, experience and effort. It is not easy and straightforward. Professor Albert Mehrabian explains that in communication
- Only 7% of meaning is in the words that are spoken.
- 38% of meaning is in tone of voice.
- 55% of meaning is in facial expression and body language.
It is not overstatement. Our unconscious parallel processing in the brains is much more powerful than controlled sequential thinking. It is matter of our survival to use “gut feeling”, all senses and analyze many clues – much more than we can do with the limited conscious mind. In addition, we cannot trust words, we often use them for convincing explanations without really knowing how we came up with them.
Therefore, person-to-person, face-to-face communication is the most effective. But excessive communication could be a big waste of time and prevent us from accomplishing other things. To survive in the modern communication flood we should learn how to communicate effectively.
Read full post >>