How old should you be when you study software engineering? This question came up in an on-the-web event today, 10-July-2021. The event was the book release function for “Overview and Trends in Software Design Architecture and Engineering” by Prof PCP Bhatt.
I do not know who originated this question, but I
heard Mr H R Mohan raising the question. Prof CR Muthukrishnan asked me if I
would answer it. I did respond, but
would expand my answer here because it is an interesting question. My
answer is a point of view that comes out of my personal experience.
I taught a course on software engineering a few times
over thirty years ago, as a part of the NCST”s Post-Graduate Diploma in
Software Technology program. Exciting things were happening in the creation of
systems which could serve a large number of users simultaneously. There was a
phase involving client server architecture, in which the clients were front end
programs running on user machines. The back-end was a computer serving all the
clients through some network. Local area networks (LANS) and wide area networks
(WANs) could both be used. The technology has now evolved to the level in which your
browser is the user-end interface. Any user-end processing is done by code that is automatically downloaded by the browser. The network is a LAN
or more often the Internet.
I would start my software engineering course by noting that, in real life, software developers usually worked as a part of a team and built software that was several times larger than anything one person could build. It was the difference comparable to that between building a model airplane that a hobbyist builds and the 747-like aircraft that companies build.
So, I would say let us live through an experience that teaches us to think as a part of a team within a bigger team and build something big. One year, we chose to build a demo passenger-reservation system for airline passengers. We had a big class. I don’t remember the exact size – it must have been about 80! NCST colleagues helped me run the course: specially, Anil Garg and Sreekumar.
We divided the class in two: one to handle the
front-end which would run on the user PC and one for the server that would run
on NCST’s big computer. Each part of the software was then divided into modules that could be
built by separate teams of four or five “students”. Very often, nasty troubles surface only
during integration. We were aware of this, and emphasized well-defined
interfaces and careful unit-testing of each module. I think we had a committee of team leaders to be responsible for integration.
The first job was to structure the organization. In
the class, I asked for volunteers. These were relatively early days of software activity
in India, and as our course aimed at working professionals, the average “student”
was 30 to 40 years old. While choosing two project managers, one for the
front-end team and one for the server side, I said I was looking for people
with management experience. Their job was to get their teams to achieve rather
than focus on one’s own individual contribution. A few people raised their
hands. I asked them to introduce themselves one by one. The first speaker
mentioned his name and said that in his day-job, 4000[1]
people reported to him! He was an Income Tax Commissioner! We also had a very
senior railway engineer.
So, I do think that software engineering is quite a different
subject as compared to the stuff they teach in programming classes. It requires
concerns for reliability, modifiability, documentation, maintenance, budget,
time schedules, and expectation management in regard to owners of the project.
I am looking forward to reading PCP Bhatt’s book and
relive this all over again!
Srinivasan Ramani
No comments:
Post a Comment