The previous note discussed the overall structure of the BTech(IT) program, and relationship of the IT program with CS program. As discussed, much of the core in a CS program and IT program is similar (in fact, as it turns out, the core we have in IT is a superset of the CS core, as we have included courses like databases and software engineering as part of Core in IT due to their obviously wide applicability in applications.) But what about a common core computing course in the two programs – does it need to be different in IT than in CS?

As the orientation of IT is towards application, while that of CS is towards science, within a course also there should be subtle differences, if they are to be fully honest to the CS/IT orientation (they need not be – as education, though focusing  on a discipline, is much wider in scope and objective, it always can, and indeed should, incorporate elements that don’t fully align with the “major” of the program). The main difference will be in courses that focus around some computing technology/artifact, which many CS/IT courses do, like databases, operating systems, etc.  A CS course in these subjects may focus exclusively on science or technology aspects, and they often do. An IT course on the same topic, however, can  (must?) include aspects of usage of these systems. A good example is course on Operating Systems – while a CS course may focus on internals of an OS and how to design an OS, a course in OS in an IT program, after covering the necessary basics, should also focus on how to use OS features/APIs to build efficient applications. Similarly, in the databases course, while the CS course can focus primarily on the internals, the IT course can focus on building applications, and include whatever understanding of internals is necessary for this.

Another change in courses is on the use and nature of projects. In IT, clearly, there is a far higher need for project work. Furthermore, the scope of projects can be wider – projects exploring the use of technologies/concepts in some other domains should be encouraged (while in CS they may, at best, be “tolerated”). Hence, we encourage project work, and also encourage picking of projects from different domains as well as from outside the Institute.

As we focused on building strong communication skills, we took great care in designing the core courses in the communication stream. The Critical Reading course, a course which is very dear to me, was to expose the students to the “world of ideas” by reading and discussing highly influential essays (some of which can indeed be life/perspective changing) – in the process, besides building reading, writing (students are to write summaries) and presentation (they are to present in class the summaries) skills, also develop deep-thinking skills.  This course discussed classical essays like the “Happy Man” by Russell and “Tragedy of Commons” by Hardin, to contemporary essays from books by Stephen Covey (on effective time management), Daniel Goleman (on Emotional Intelligence), Nandan Nilekeni, Narayana Murthy, etc. I spent an enormous time selecting the essays for the first offering, taking inputs from a wide range of thinkers. Though many students did not appreciate the course in the initial offerings, I remain convinced that this is an excellent course for Engineering students, who often have poor reading habits and do not venture into the “world of ideas”.

Similarly, the technical communications course is structured so that the student, besides developing technical communication skills, can also develop knowledge about an topic, as well as some abilities to synthesize ideas from multiple research papers on a topic and put them in some perspective. The course has three parts to develop three related capabilities. First part is to synthesize ideas from research papers and then write a report and present it. The second part is to write technical documentation/help for some software. And the third part is to do forecasting on any technology or trend – i.e. future gazing.

Another new core course we introduced  was on “advanced programming”. While designing the stream of courses for software, I realized that in most CS programs, we have a basic programming course, then a data structures course (which often is treated theoretically), and then we have courses on OS, Compilers, DBMS, etc. which may have some programming elements (and often they don’t), but are not focused around building these skills. However, all CS graduates are expected to have well developed programming skills. To further develop the programming skills, we introduced the course on “Advanced Programming” in second year, after the student has done the data structures course. In this course, as the name suggests, advanced concepts are covered – currently these include object orientation,  some OO patterns, and concurrency. A hidden goal of this course is to introduce into programming advanced programming environments (like Eclipse), and professional techniques like source code control, use of programming standards, etc.

Most other courses in the core portion of our BTech(IT) program are fairly “standard” and may be found in various programs.