现代软件工程系列 学生读后感 梦断代码 DTSlob (1)

 

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.


December 08

Dreaming in code Blog Post 2

We are young. We have our dreams. People who have dreams never look back.

“It turned out that what he (Kapor) cherished was not the specific things Agenda could do, but the program’s spirit of dynamic flexibility.”

Recall the projects under “国家大学生创新性实验计划” which almost everyone in our class participated in. Whatever the initial purposes of each group were, academic or financial, we have a promising prospect at the beginning, right? During those days in Dec. 2006, when we were applying to that program and writing the plan documents, we pictured a dream in heart more or less. However, there was one voice coming from a classmate who did not join, and which I cared not a bit: “Don’t you think it’s a dangerous pitfall?”

All these projects finally wound up as a crap. One important reason rooted in its spontaneous participants, lacking supervision due to the traditional working manner of your department and government. But in my group, you could find something like the descriptions in “Dreaming in code”, Chapter 2. Dreaming itself often does not fit into reality, and when unrealistic expectations were inspired by the naive dream, the target turned more biased from the initial schedule and the reality.

Our project was concerned about melody recognition. It originated from my high school dream: building a website which enabled music search by humming. In details, I would like to extract the melody from a wave file, index it in some way, and when someone was querying by humming a melody, his or her voice would also be recorded, transformed to labels of note, and searched in the database. Perfect as a dream, it required much more than nowaday technologies could offer. After reading some papers, we realized that what we could do within the scheduled finishing time was a simple demo of single-note melody recognition and comparison. So the project ended up with a system no one would ever use. Again, it was a little aligned with the usual process of software development described in the book, “from promise to usability”.

In our current group DTSlob, perhaps this problem can be avoided, because our project aims at usability from the very beginning: to ease the trouble of using IPE to display formulas, to implement drag-and-drop operations for Windows users. Apart from these dream-like sentences, we have detailed steps in achieving this, and have seen good improvements so far. If you think it seems to be the same expressions with every group of software development, I could only say, we can see at last, and distinguish if it is again a dream.

Let’s share a sentence in the end of this post, which is my favorite in Chapter 2:

In science, the whole system builds on people looking at other people’s results and building on top of them. In witchcraft, somebody had a small secret and guarded it – but never allowed others to really understand it and build on it. Traditional software is like witchcraft. In history, witchcraft just died out. The same will happen on software. When problems get serious enough, you can’t have one person or one company guarding their secrets. You have to have everybody share in knowledge.  – Linus Torvalds



你可能感兴趣的:(现代软件工程系列 学生读后感 梦断代码 DTSlob (1))