Computer Science and Software Engineering

My friend, a computer science professor asked me: “Why do people create new name for “Computer Science and called “Software Engineering”? I do not see the different between “Computer” and “Software”. Our students are doing fine with Computer Science course and do not need another course with new name to it”.

I was surprised at the question:” There are differences between the two programs but first let start with the computer. I believe not all computers are the same because no one would think that you could design computers for an airplane the same way you would approach the design of a computer for the videogames because not all computer hardwares are the same. From this view, I can point out that we can not approach software as if they were the same. If you want your students to be programmers and work on building websites, create small applications using Java or C++ than computer science is fine as it is. However, today most computer systems are getting larger; most software applications are getting more complex and require few hundreds or sometime thousand people to work together than the small programming approach will not work:

My friend did not agree: “You can always break down a large project into many small parts so programmers can work on it. A large project can be divided into hundred small pieces where each could be given to a programmer so they will continue to program it the same way as they build a web application. I do not understand why we need a new approach?”

Because my friend come from the academic world and never works in the industry, it is difficult to explain all interrelates and interdependencies among software components. I told him that it is not easy to divide a large software to smaller parts just like dividing a cake equally and that is why we need special skills such as requirements analysts to work with users and customers; configuration managers to manage changes during development activities; process analysts to define development activities into a set of processes that developers must follow and of course programmers to implement the design using computer language and integration engineers to put all these parts into a cohesive systems. These special skills are the disciplines of software engineer that most computer science programs do not teach.

My friend disagreed: “I think with additional trainings, programmers can also do that. I do not see the need of calling them by different names.”

I explained: “It is possible that programmers needs additional training but current computer science already put a lot of efforts on programming theories and techniques, most students are working hard to do so many programming courses so where are the time for additional training? You can not add things to current program without eliminate some courses so which course should we eliminate? Should we reduce programming classes from 4 to 2 years, should we reduce some computer theories courses? Should we reduce the number of mathematics courses? What courses should we add? Do we need more requirements courses or software architecture courses? From my perspective, computer science is focusing on the theories and methods involving the “computer” where software engineer is concerned with the practical problems of producing “software”. Both programs do share some fundamental courses but the application is different.

This conversation is currently a major debate among universities around the world. Every professor has an opinion about training program and every university has its own view of what subject students must learn and I do not think we can solve it in a casual conversation among friends. My personal view is: Students need skills to make a living and university must provide them with that knowledge so they can find works in the industry. In order to do that, university must understand the need of the industry, knowing that need always change with time and constantly adjust the trainings to meet industry demands. However, it is difficult to change the academic program because most professors are busy conducting researches, writing papers for publications, or spent time on other businesses. Update training courses is the lowest priority to many of them and they do not get reward for that. Many do not see the urgency or the need to change because academic world is a “safe environment “with no competition but the software industry is a highly competitive environment where things change at the speed of the internet. That is why students are caught between a slow pace of academic and the fast pace of industry when they graduate. Many are doing well in school but when facing the real world, they fail miserably. They never taught what to do, how to act, and what skills do they need, sometime what they have studied is already obsolete.

Let me give you an example, today many software engineers are working on applications that are delivered via the web to hundreds or thousands of customers all over the word called Software as a Services (SaaS). This new concept requires special skills to adapt to the demand of customers in real time. These are not really “code” but “business processes” that control the way customer business are executing. A students that only know how to code will not be able to modify and adjust these “process oriented” applications because they do not even know what a process is. However, these are skills that the software industry is demanding and hiring but the academic world is very reluctant to adapt “Process oriented training” because most professors also do not know what a business process is.

My friend told me:” The goal of education is develop people with general knowledge but not about jobs. After having an education they can go out and get jobs themselves”.

This is where we are not in agreement since I believe that the “academic knowledge” must be changed to adapt to the demand of society. The thinking that school is only responsible for educate but nothing else makes me wonder about the future of many students. For so many years, schools continue to train programmers who are essentially unable to get good jobs even there are so many opportunities waiting all over the world. Instead of adapting, many Computer Science programs are still focus on what the academic community thinks these are the knowledge that student must have regardless what industry need and fail to prepare students to compete with students in other countries. If they think mathematic is important then they add more math courses, if they think algorithms are necessary, they could add more computer algorithm courses to the program. After all, professors run the university and they can do whatever they think is right for the students since students come to them, compete with each others to enroll in their schools.

It’s widely known that enrollments in science and technology programs have increased in many Asian countries because the trend in global outsourcing. Today almost every country is focusing on this business where India is dominating with export exceeding USD $68 Billion a year but facing a critical shortage of software developers for the global market. Most university administrators are aware of the situation and they react by opening more courses, enroll more students without concern about the need of the industry. So the gap between academic knowledge and industry needs are continue to widening and many students who have been trained in these programs are not prepared to compete globally. However, I believe that with the fast changing job market, things already change very quickly and it is not the university who can dictate the training programs but it is the industry and ultimately the student, who demand certain training programs. Students invest their time, their efforts and pay the tuitions and they should be treated as “Customer” and in the business world, it is the customer that makes the decision on who they want to do business with.


  • Blogs of Prof. John Vu, Carnegie Mellon University