Software Engineering Education in India

As India marches towards becoming a $5T economy, software products and services continue to be critical to this achievement. However, our desire to be a product development and manufacturing nation is predicated on large-scale availability of engineers with strong product skills. These are the graduating students and early career engineers who will fuel the startup frenzy we have seen over the last several years – both as employees as well as entrepreneurs. They will be entrepreneurs, product engineers, designers and thinkers. We call them future-ready engineers. 

When we review the state of graduating students of Computer Science and Engineering in India, it is a cause for great concern: the employability in general, and in product and startup companies in particular, is very low, and many critical skills and experiences are missing from the graduating students. We are not producing future-ready students. This needs to change quickly. 

It is not easy to produce future-ready engineers. This paper outlines some of the challenges and how it can be addressed through creative solutions.

While this document focuses on computer science discipline, the ideas are largely applicable to all disciplines and can be suitably modified and used.

Roadblocks for a superior SE education

There are multiple challenges to be addressed in multiple dimensions – structure, process, people, and culture.  

CS undergraduate departments and their curricula

My research is focused on the struggles of new campus hires at software product companies in understanding and working with the complex software systems of these companies. I see multiple foundational problems that cause this struggle: 

  1. Creation vs. Comprehension skills: Computer Science education overemphasizes software creation skills, at the cost of comprehension and evolution skills, even though most of their work needs to be done with existing products. 
  2. Exposure to complex systems: Students get very little, if any, exposure to complex software systems during their education, most of their experience is in programs and code. Modern software products are fairly complex and continue to get more so. 
  3. Hands-on experience: Software Engineering skills are learned through practicing solving real-world problems in real-world setup since technologies, practices and frameworks keep changing rapidly. However, most institutions and their faculty are not equipped to provide this experience to the students. 
  4. Course design – Software engineering courses in Indian universities are dated, and haven’t kept pace with the needs of the modern workplace. In a review of top 25 engineering institutes (ranked by NIRF 2023), we found that most of them offer a single course on Software Engineering which uses textbooks that are several decades old and covers topics that do not inspire confidence or excitement in students.
  5. Faculty – Most faculty members do not have industry experience, and very few of them engage in active software engineering projects hands-on. This has an impact on the skills taught in the classroom. 

Industry-academia collaborations

This collaboration plays out in multiple ways. Students get access to industry skills through internships. Industry provides support for designing and running specific courses that bring current knowledge to the classroom. Experienced employees can work as researchers and visiting faculty members in academia. Industry gets skilled graduating students that they can hire. However, there are challenges: 

  1. Internships – Availability of good internships is a challenge for most of the students – good companies have very few positions available, and most companies feel offering internships is a waste of time and only do it for low-end skills, which doesn’t help the students much, or do it as a way to give their onboarding process an early start (by making students start onboarding in their last semester) which takes away from the curriculum and teaches skills specific to the company. 
  2. Industry-supported courses – There is a classic dichotomy between what industry wants (cutting-edge technology ready students) and what academia should produce (education that is future-ready on a 50 year horizon). However, most industry-readiness programs around courses and sessions have focused on teaching skills with small shelf-life which harms the students. 
  3. Industry projects – Faculty working on projects that are important for industry (through industry-sponsored projects) are a great way to provide experience on real-life problem-solving for the students. However, this has been rare and industry has not reported significant value-creation through such collaborations. 

GenAI impacts software engineering significantly

As GetAI based tools improve and become sophisticated, they are going to impact all aspects of the software engineering lifecycle (SDLC). While this is in future, it significantly impacts our ability to produce future-ready students. 

  1. Given that coding skills are considered the most important skill for a CS graduate, CoPilot and other similar technologies based on GenAI can pull the proverbial rug under the feet of the educators and students by reducing the need for this skill. This will impact most of the introductory courses in CS curriculum and will render the graduating students low-skilled. 
  2.  Software engineering in the world of GenAI will become very different. A future engineer can accomplish multiple phases of an SDLC by using AI assistants trained on different life cycle aspects – requirements and specifications, coding, testing, documentation, etc. This requires them to know much more and much deeper about aspects of software development that currently are done by other roles. 
  3. Modeling and designing at a higher level of abstraction become very important skills to acquire so that AI assistants can be used effectively and accurately in other parts of the SDLC. Unfortunately, the current curriculum doesn’t have enough focus on these skills.

Solutions

To address these challenges, we need to enhance the overall learning experience we offer to our students. 

Design new courses to teach future-ready skills

There are three critical areas which require new courses: 

  1. Systems modeling skills to aid in comprehending and evolving systems, in addition to design of new software systems. 
  2. Software engineering lab that exposes students to complex systems
  3. Learning strategy that employ system modeling skills to help students learn a new large, complex system on their own

Align assignments and evaluations of existing courses

As mentioned before, software engineering skills are acquired through hands-on experience on real-world projects and systems. One way to enable this is to ensure that the assignments and evaluations of common courses like programming, data structures, algorithms, software engineering, software architecture, etc. have a rich element of real-world systems. This can be done by reframing the assignments, relying more on real-world projects for assessments than exams, and substituting (or enhancing) the toy examples in course content with more realistic and real-world examples. 

Setup and operate software studios to provide hands-on experiences

In India, medical colleges are obligated to have a medical hospital as part of their setup so that the students get hands-on experience with real-world cases, and faculty (who are practicing doctors) can draw from real experience when teaching in the classroom. Software is getting important and critical enough that we need to provide a similar experience to students and have a similar bar for faculty. This can be accomplished by establishing software studios – a software company setup within the institute where real software development for real customers happens. Faculty and students work there and get hands-on experience. Given the teaching nature of this studio, it can be designed to provide feedback and learning opportunities to students through the use of GenAI and other technologies. 

Align faculty development programs to product engineering

To produce future-ready students, we need faculty to be prepared for the same. This can be done well by focusing on two key areas of faculty development: 

  1. Providing software engineering experience regularly through software studio and internship opportunities at select companies. 
  2. Teach skills required at the modern workplace so that they can be practiced in the classroom. 
  3. Teach them how to teach the new skills identified in this document. 

Align entrepreneurship cells to software studios

Most campuses these days have an entrepreneurship cell to encourage students to start up. These can be aligned with the software studios – an entrepreneur with an idea can outsource their project to a software studio for development, students trained in the studio can join the startup are the two easy ways to do so. This requires a focus on quality production in the studio and streamlined process between the entrepreneurship cell and software studio. 

Provide 1-1 mentoring to select students

Even though our goal is to enable everyone to reach their full potential and become future-ready, it is important to cater to the subset that is more motivated, passionate or tenacious who want to go faster. This is how we can produce the culture of excellence and striving to be the best and world-class. 

This requires us to provide opportunities to select students to do independent research and study, do projects and assignments, and get mentoring across the courses and beyond the courses so that they grow into strong engineers.  This can be done by running project-driven courses or independent study courses and have faculty and industry mentors assigned for 1-1 support. 

Conclusion

As we demonstrate above, current software engineering education has a number of challenges that are systemic in nature. It is important to address them holistically, patch work of solutions are unlikely to work. We propose a number of solutions that can be considered, however, any single solution is unlikely to work for any given institution. It requires a careful consideration of the existing curriculum, pedagogy and environment of the insitution and the short-term and long-term goals for reimagination. A change strategy needs to designed and implemented. For all the engineering institutes who believe they would want to participate in building the new generation of world-class software engineer cadre, this is a reminder that the time to start is now!