4+ 1 Thinking Skills for Competent
Software Engineers


A turning point in my teaching career

It was the year 2003. By that time, I had established myself as an undergraduate teacher with 12 years of teaching experience and looking forward to improving my academic qualification with the PhD program.

I was attending the two-months-long preparatory programme at IIT-Bombay. The purpose of the program was to meet a prospective PhD guide and decide the broad area for research.

On one particular day, my PhD advisor, Prof. R K Joshi, asked me to join his class on Distributed Systems. He was teaching this course to undergraduate and post-graduate students. I attended the lecture with the enthusiasm of a newly recruited PhD candidate.

That was one of the most memorable lectures I attended because it shattered my age-old beliefs about classroom teaching. Up to that moment, I used to believe that students’ minds are empty vessels. As a teacher, I need to fill it with packets of information.

He was teaching the concept of Stub in Remote Procedure Call on that particular day. The programming element called Stub is responsible for handling communication between two remote programs. He was expecting the students to be able to implement the Stub.

He was continuously probing students with questions. His waiting posture with folded arms was intimidating to most of us. But, there was not a single moment of silence. His questions were leading to discussions and ultimately the solution he was expecting.

The 4+1 Skills for a Competent Software Engineer

Over the last six years, I have been trying to shortlist a set of thinking skills essential to survive in this highly demanding software profession, which is driven by uncertain futuristic technologies.

  1. Computational Thinking Computational thinking is a method to specify a computer-based solution to a problem. It involves identifying appropriate programming abstractions such as iteration, task decomposition, and data types to solve a problem. It is becoming as primitive thinking skills like literacy and numeracy.
  2. Ontological Thinking In the context of an information system, an ontology is a tool to manage knowledge. Ontology, in its broadest sense, provides a set of categories to classify observed phenomena in reality. These categories are useful to represent, relate and reason about many physical and social constructs. Ontological thinking develops insights about new knowledge by establishing associations with existing knowledge.
  3. Probabilistic Thinking Probabilistic thinking is about listing out various possibilities of events that may happen in future and associating them a degree of occurrences. This kind of thinking facilitates decision making, the reasoning for causality among events, diagnosing about system’s failure and analysing the impact of an event on a system. This kind of thinking is becoming an essential tool to build intelligent systems.
  4. Systemic Thinking Most modern information system involves a large number of components interconnected in a complex way. Part-Wise reasoning of such systems fails to grasp the emergent properties which occur through interactions between components. The systemic thinking is useful to describe such complex systems through multiple views.

Arvind is a Professor of Computer Engineering in Dr. Babasaheb Ambedkar Technological University Lonere India.