a journal of a researcher

Sunday, January 31, 2010

What should we teach new software Developers?

Bjarne Stroustrup, the inventor of C++, wrote an article in ACM Communication to discuss what should we teach new software developers. He discussed the separation of computer science teaching to the practice of industry. It is what I also observed. The students do not know how to use what they learn about algorithms and data structures when they hack the code. In addition, the students never programmed over 1000 lines in a program, while the current industrial project contains millions lines of code. They simply do not know how to work with huge code base and build software which can be called reliable.

Software engineering is a new discipline, compared to the discipline of civil engineering. Human began to build houses thousands years ago. Now we have certificated engineers to give approval of building a house, because these people know how to build a house which can stand and without flaws. We still have no solid way and industrial standard to measure the quality of software (at least not matured as in civil engineering and mechanical engineering) and establish a production process to guarantee the quality of final products.

On one side we should deepen our study in software engineering, on the other side, we should bring our students to the reality of industrial demands on their skills and knowledge.

1. Adopt the latest tools and techniques in our teaching. What we teach in classroom has at least 5 years lagged from industry. For example, we just have a full option for Web applications and service. We are going to teach our students Web programming, J2EE, system integration and projects with large code base. Concordia is among the first to design such courses. However, the industry is going into marshups, clouds, and many many more.

2. Bring real working environment into classroom. We should ask the students to install software, set up their development environment, than allowing them to rely on the readiness of the lab. We should supervise the students’ team work, make sure they know how to collaborate in group, and prevent them to use it as a chance reduce their own workload by relying on some of the team members. We should ask them to design their projects on open source code base, because it is how software

3. Enhance their training in system architecture design, system integration, business process management. Close to their job in the future.

4.Increase the requirements of our courses. We give too less assignment and too simple exams. They will find the interview questions are too difficult for them.

5. Train them proper CS core theories and ask them to use them in their coding. This is especial true for my students in Montreal. Even the first and the second year students who should still be in classroom have jobs somewhere in this city. One side, it means CS students have a good job market. And my students can locate a job after knowing some programming language to hack code. On the other side, I see these semi-skilled programmers cannot produce high quality software. I will not rely on them to produce serious and large scale system. Most of them should still stay in classroom.