What are computer science and computer programming students taught? To write software. What are many newly hired college graduate programmers assigned as their first task? To do code maintenance.
Because maintaining existing software is the quickest way to get up to speed, not only on the codebase itself, but also on corporate coding practices. By studying codebase and then by making small, incremental changes (to make patches or implement minor feature changes), developers gain essential knowledge and valuable experience (SD Editorial Board, 2010).
Yet, with only rare exceptions, students aren’t taught how to maintain code. Maintenance is also not perceived as being interesting and therefore doesn’t lend itself well to the way that computer science and computer programming is taught.
Industry leaders and editors of industry trade journals have actually proposed a new course for all computer science and computer programming majors. This course would be for code maintenance. If one of the first responsibilities of newly hired graduates of computer science and computer programming programs is maintaining software, then the skills required to maintain software must be properly taught in our colleges and universities (SD Times Editorial Board, 2010).
This topic, among others related to software engineering, is a topic that I am very passionate about. I have researched this topic as part of my master’s degree and even written a book titled “Debugging Our Computer Science Program” where I discussed this academic gap (and a number of others).
If the primary duties of an entry-level programmer (i.e. college graduate) are related to software maintenance and the majority of the cost of a software product is related to software maintenance, shouldn’t our computer science and computer programming programs ensure that our students enter the workforce with the proper skills and tools to support software maintenance? I suggest an obvious yes to answer that question!
We must prepare our students properly, ensuring that they have the following skills and the ability to work with the following tools and work within a team. This means our students at a minimum must be proficient in:
- Knowing how to navigate through unfamiliar code.
- Using an IDE and also how to take advantage of the productivity features of the IDE.
- Using a debugger to find complex problems in the code.
- How to use a source control system and also understand various branching strategies and code merging best practices.
- Managing code defects using a defect tracking system.
- Conducting effective code peer reviews.
- Understanding and working with multi-threaded software concepts including processes, tasks/threads, queues, events and locks.
- Delivering projects using an agile delivery methodology (such as scrum) as well as have a solid understanding of the full SDLC process.
Other nice-to-have skills include being proficient in using a profiler to find complex performance bottlenecks in the code and also the ability to resolve memory leaks in programs’ written in languages such as C# and Java.
And finally, because most companies have moved to a team-orientated agile delivery methodology, such as scrum, where teamwork is paramount, it will be critical that students have a number of soft skills including:
- Easygoing and enthusiastic, with a personality that plays well with others
- Solid communication skills
- Willingness to learn and apply old skills to new areas
- Resourceful with ability to “google to find things” and figure out solutions to problems for “things they don’t already know”
- A solid programming style that makes code easy to read and well-documented – and the ability to not be compromised by time working in “sloppy” existing code
- Solid documentation skills
I always have said that the great engineers I hired are not the ones that “already know what they need to know but are the ones that can easily figure out what they don’t know” (Mark K. Reha, 1995). After spending almost 35 years in the industry and over 10 years as a hiring manager for a lot of great software engineering teams, I still believe in that saying today. Great engineers have the “it” factor and the attributes that make them simply more productive and more resourceful than the average engineers. Some of these great engineering attributes cannot be taught, but many of them can.
I suggest that all computer programming and computer science professors do a critical retrospective on their course curriculum and hands-on activities to ensure that we are providing all of our students with the proper skills and exposure to tools to perform the first duties they will be asked to perform in their very first day entering the workforce.
Grand Canyon University’s STEM programs help students learn the skills they need to succeed in the workplace. Learn more by visiting the College of Science, Engineering and Technology or contacting us using the Request More Information button at the top of the page.
- Reha, Mark K., Debugging Our Computer Science Program, 2012. Print.
- SD Times Editorial Board. (2010). “Let’s Teach Maintenance.” Retrieved April 15, 2010 from sdtimes.com/SearchResult/34244