Learning software Engineering

During a visit in China last month, a Math professor asked me: “How long does it take to learn Software Engineering?”

This is NOT a simple question as some of you may think since it came from a math professor so I asked him: “How long does it take for a student to learn algebra?”

He laughed and answered: “It depends on what kind of a basic math does the students have? What do they need to do? What kind of mathematical skills do the students have? Of course, the fundamental algebra is taught in the high school and continues in more advanced concept in the university so the answer could be a few months or few years.

I told him: “Software Engineering is not different from Algebra. I also need to know who the students are and what do they need to do before I can answer the question correctly. If students already have degrees in computer science and a good understanding of computing concepts then I will give you one answer. If students have degrees in other non-technical areas, with no knowledge of computing and little programming language skills then I will give you a different answer. Of course, if students are first year students in university with no knowledge and programming experience, then I will give you another answer”.

He shook his head: “But algebra is taught in high school and Software Engineering is not. They can not be the same”.

I told him: “The fundamental knowledge of computing make Software Engineering easier for some students. People who are already familiar with basic computer, who know how to program will learn Software Engineering faster than others. However, any student in the university whether they study technical or non-technical areas will be able to learn Software Engineering. My view is students who are accustomed to learning new things continuously will learn more quickly because they know how to learn, are not afraid of something new, and have confidence in their ability to learn.

He seemed satisfy: “So Software Engineering is not that difficult as most people say”.

I told him: “There are many misconceptions about Software Engineering. This field of study is NOT different from any other fields such as Mathematics, Physics or even Literature. It is a practical field as compare with Computer Science which concentrates more in theories and programming languages. Software Engineering is focusing more on the concept and process that are being used in industry and it depends on the experiences of the professors. The reason people believe it is difficult because many academic professors do not like to teach something that they do not have experiences and could not explain clearly to the students. I think the learning environment is another important factor in teaching software engineering. To be effective, school must have experienced professors and the better the dedication of the professors, the faster and easier students learn. A good university should foster the learning environment, which addresses the outcomes of the learning process.

He asked: “What do students be able to do after graduated?

I explained: “They should be able to work immediately with minimum training. They should understand all activities in a software company. They should know how to work with customers and understand their needs. They should be able to architect new system or improve old system and make sure that all components are working properly. They should be able to design and develop systems and write code to implement the designs. They should know how to work in team, be able to ask for help when they have difficulty. They should be able to use software tools and familiar with the trends in the industry. However, the most important is they understand the concept of lifelong learning and continue their learning as technology change often.”

Because he is a Math professor, so I told him: “The answer to the Software Engineering question is simpler than the algebra question. It is difficult to explain what a Mathematician who is very good in Algebra can do. The reason many people believe this is a difficult field is that, because of the fast changing in technology, the limited training students have had in the past, and universities are still focusing on teaching programming rather than process, many students are having difficulty when they graduate and work in industry. This is not because Software Engineering is difficult to learn, but because it is difficult to teach in an academic environment where students are force to learn theories rather than practices. Most computer science trainings are focusing on develop individual who are good at coding but not training them to work in team. In the past when programs are small, few people could do it easily but today the programs are getting larger and you need hundred people working together. This requires a lot of planning, coordinating, and managing. Complexity is outpacing our ability to solve problems as they appear. What is needed is a more structured approach and that is why software process and process management are needed. If you have hundred programmers who wrote their own programs, used different methods and styles, do not coordinate with each others, they design as they think it will work then the result would be chaos. That is why today, software industry insists on hiring software engineers rather than computer science students.

Sources

  • Blogs of Prof. John Vu, Carnegie Mellon University