Software Engineering: A student's view

Zhang Kai Min was one of my students who graduated in 2010 and currently working at Apple. Last week he came back to school to recruit students and gave a talk in my Software Engineering class. Following was his talk:

“When I graduated with a Bachelor’s degree in Computer Science (CS) from China, I had the skills to be a good programmer but when I enrolled in the Master of Science in Software Engineering (S.E) at Carnegie Mellon, I realized that I still had a lot to learn about being a software engineer. Before came to CMU, I thought CS and SE are the same but now I know that they are not.

As a CS graduate, I know how to code and have the skills to build software products. As part of the school projects, I have developed three mobile applications, they worked well and I was proud of my work. When I came to CMU, I found that most of my classmates have built more complex and sophisticated software than mobile apps. When I showed them my mobile apps, they showed me what they have built as school projects and I was shock on the level of complexity. They told me: “High school students build mobile apps; college students should build complex and larger software.” That made me feel bad but I also knew that I had more to learn to catch up with them.

I learned quickly about the difference between a programmer and a software engineer. A programmer often works alone and defines quality based on what he thinks is good. A software engineer never works alone but always in team and they define quality based on how users see it. A programmer does whatever he likes as long as he makes the software works but a software engineer always follow a process to make sure that the software meets users’ requirements. My first class was the software development life cycle where I learned about process, methods, and frameworks which were all new to me. Only then I learned how to follow a systematic process of understanding requirements, working with customers, and developing solution that meets their needs.

Most courses at CMU require teamwork; I learned how to work with others and learned a lot from them. In China, students often learn things by themselves and sometime I am confused and frustrated but I could not ask for help. At CMU, my teammates were ready to help and motivated me while I learned new things. In China, I was taught to stay competitive and kept thing to myself. I did not share anything with classmates as I was afraid that they would be better than me. We were friends at school but adversaries in exams as everyone wanted to be the top student. It was difference here; there was a collaborative atmosphere where people share everything openly. When I had difficulty my classmates would spent hours or even days to help me without any hesitation. We do not compete but collaborate and it is also a new thing too.

It took me several months to learn how to build quality software, not just working software. I also learned that quality was more than what customers asked in requirements but you must derive them based on your own knowledge because customers expect them. Most customers would tell you about functional requirements but not about quality which are nonfunctional characteristics. A good software engineers must understand these quality attributes such as usability, scalability, maintainability, and testability. Customers may not tell you about performance but you must make sure the system will perform accordingly. Customers may not tell you about maintainability but you must make sure that the system was documented correctly for future maintenance.

The most important that I learned from Professor Vu is never stop learning. He often said that technology changes fast and as professional software engineers, we must keep on learning to keep up with the fast-paced industry. I learned to set goals about what I wanted to learn and tracked my progress over time. He always reminded the class by asking: “Are you getting closer to your goal?” As he did it so often that many students often joked: “Here he goes again, repeating the same thing.” But under his guidance, we all learned the skills necessary to reach our goals.

Another thing that I like was the active learning method. This was completely new to me as I am familiar with the rote memorization and a lot of academic theories. It took me many months to change the study habit as I must read all materials before coming to class and prepared to participate in discussion during class. As a foreigner with limited English, I was often quiet but I was called in to answer questions all the time. First I thought the professor did not like me but overtime, I learned that he wanted to help me to build my participating skills and communication skills. Only by being fearless and not afraid of making mistakes, I gain confident and by having a good technical and soft-skills, I have no problem of getting a job at Apple.


  • Blogs of Prof. John Vu, Carnegie Mellon University