1
As you see, I’ve marked this post Number 1. Let’s leave the last post on “Dreaming in code” Number 0 :) This time, I will focus on the issue of PEOPLE, partly based on Chapter 0 and 1 in that book.
Why focus on PEOPLE? Think about our group, think about your group. What is the purpose of this course and projects we have done? To practice and improve our skills in C#? Obviously not. From IProject, to PProject, and the TProject we are currently doing, we are experiencing the process of dealing with more and more people, and then, more and more trouble.
2
It’s “difficult to produce computer software on time and under budget”. (Quotation around sentences, in texts below and following posts, means copying the original sentence from “Dreaming in code”.) In essence, is it really the time or money or experience problem?
Students in our class are all considered as programming masters, having written so many projects for professional courses, some even having OI experiences. But what happens in our group and your group? Exceptional examples:
1. A classmate complains to me that one member of his group violently expressed the impossibility for him to write any code.
2. A classmate in some group always promises to write code the next day, but his work actually starts a week later, because he always has unexpected social affairs.
3. In our group, Wu Yue modified a configuration item of the project on the server, and when Wang Jun checked out the next day, without an indication of previous change, could not even compile successfully.
4. A classmate in some group told his PM that he would post the first article about “Dreaming in code” on this Wednesday, because he planned to read the book that day. But he found on Wednesday evening that he didn’t have enough time to read, and moreover, he had already had plans for Thursday, so he eventually started reading on Thursday evening, and he is writing this post right now on Friday night.
It seems that the complexity of software development described in “Dreaming in code” can be applied to cases everywhere. Every company tends to hire people with best technical skills, tends to avoid work delay and short of money, but the dilemma appears again and again. So, it’s never a technical problem. It’s a matter of people, a matter of social behavior. Actually, we have met plenty of issues related to people in this course, like the number game. Let’s imagine such a situation: we, everyone in our class, go to hunt jobs in coding market. Which ones can end up as a successful developer in high positions? I think this is a serious question for us to think about.
The following paragraphs address several aspects of the PEOPLE issue, summarize some interesting viewpoints and sentences in “Dreaming in code”, and try to add some comments if applicable.
(To be continued. I will post the next article on Sunday evening. Perhaps this means I am going to post it on Monday morning.)
3
People form groups. Every group has its own interests. Just like the process of revolution in society, which is always dreadful as a result of interest redistribution among groups, software cannot meet everyone’s needs, and is reluctant to go forward. When the number of programmers and users both get larger and larger, this phenomenon is more likely to pervade. We can post a rule at will on the wall at home, but a national law needs consensus among the most prestigious heads in the country. Let alone all different types of user need, the thinking of programmers and users just Kannot Kommunicate. This idea is perfectly expressed in the book: Programmers count from zero, while users count from one, and this gap simply allows bugs to flow in and out.
People need communication. That is why software development is different from other engineering tasks like building a house. How to schedule multiple “workers” so as to see actual advancement? Complexity arises as tasks assigned to different members have different interrelationships. Some are serial, others parallel. When serial, “your estimates are based on someone else’s estimates”, so time to finish is hard to guess. Like a pregnant woman, how can you guess the time she will get pregnant again when the existing baby has not been born? How can you rely on other people’s estimates? In what criterion? Based on his rich experience in building large-scale systems? Based on the estimates of an IOI winner? “Software developers are typically optimists who assume that each bug can be fixed quickly and that the number of bugs will diminish”. It should be emphasized again, that this is a PEOPLE issue, not a technical problem! When situation is worse that communication is unlikely, people joining afterwards are the most painful ones. For example, a typical intern in MSRA stays 3 or 6 months. When new interns come later, they have to read his code, lonely, and… lonely.
How to get people into a group in a most efficient way? Distributed or centered? This is again an essential question, concerning the battle of free packages and commercial software. In my opinion, the spirit of Internet is to share, not to hide. According to Raymond, “open source is most economically efficient”, but why has Microsoft become a big shot? Perhaps hobby and fun is the most loose structure of organization, lacking motivation to make quick decisions. However, getting started quickly means immature decisions as well as more bugs. So, personally, there is a point I cannot explain. The book (within Chapter 0 and 1) states a lot about the superiority of distributed collaboration in GNU world with the help of Internet, but why Microsoft wins most of the people? (I know there are a lot of answers like “more stable and easy to use”, but is there anything related to the distributed and centered way?) And further, which one will last and finally win?
4
Personally, I don’t like dealing with people. And I always have the feeling that I prefer not to enter the field simply filled with codes, even when I’ve not actually go deep into this field yet. Now it seems that I have found a reason for this.
Time of debugging the code is much more than that of writing it. When you debug codes, you debug with people actually. This should be seriously considered when it comes to the decision whether to spend a good part of life debugging.