Choosing a course….

What course to do next is a question many people face, often multiple times in their life: after 10th, after 12th, after degree, for their children, and so on. Options may be degree courses, short term proficiency enhancement courses, diploma programs and so on. So the domain is very broad and complex. I am restricting, here, to the post-graduate diploma programs that people usually take to enhance their career prospects. CDAC also offers a lot of such courses, and one can witness amusing discussions on the way this problem is addressed in discussion forums and other such avenues. And that incidentally is one main reason for me to make this post! This post is, therefore, an attempt to put together some thoughts which may help some of those asking such questions, and may be of help to even those providing half-baked or biased responses to such questions.

Of course, placement is a major concern in making the selection. No point in denying that placement is why most students go for such courses. But what does placement mean? Getting “a” job? Any job? Any company? And long term or short term? Often these questions are rarely addressed. And wrong decisions are made at a high cost. In a market driven system, no one can guarantee placement. Institutions can make an attempt to get companies to campus – depending course, market dynamics, the institution, etc you get different subset of companies to come. And even then, getting job is dependent on you too. If you are not prepared, nothing is going to help you. Often apart from the interview performance and your proofs of relevant domain knowledge, your background (degree taken, its score, performance in prior education, etc) also may play a role. In short, there is no magic wand to get you a job. Claims guaranteeing a job is like Complan guaranteeing extra-height! And also find out what kind of job people get and on what terms. Some call even trainee-ship as “placement”! So check details before believing anyone.

Not all courses are equivalent. Choosing a course on embedded systems just because it may be offering a higher placement chance is a bad idea, if your interest is not in that area. Look at the syllabus and see if that interests you. Even within computer science, there are different focus areas and profiles. Find out what is the focus of the course, and see if that is what you want. And if yes, look at the following aspects further. And with all that together, your choices will be simpler. Most computer science graduates look for “developer” jobs. Very rarely does application developers write Java/C code from scratch today. So many libraries and development frameworks are available, for many applications, you need hardly any code to be written. These are also called “developer”; nothing wrong in that because you are “developing” an application. But it may not match your image of a “developer” — which may be writing full programs in a language like C/C++/Java/etc. Writing some raw code is not the most challenging part of computer science. Figuring what code to write and how to organise the code is. Designing the architecture of the software, the various classes/modules/components, the data storage and representation, the test scenarios for them, etc are the critical areas today. Dont fall for the “developer” image without thinking…

In the area of IT/CS, practical skills are important. Our universities generally do a poor job of this aspect, for various reasons. Most of the time, the culprit is not the syllabus, but its implementation! And lack of practical skills is the major bottleneck people find in getting jobs, and various diploma and certification programs seems to offer a fix. But often these are only quickfixes, to lead to more problems later on. Skills like programming, database management, GUI development, project management, etc are not syntactic. Without strong conceptual foundations and clarity of concepts, you become only a coder, not a developer (in the case of programming). And university courses teaching such topics often do not provide the necessary depth in this area. The external diploma programs also often leave this to the University, and focuses on shallow exposure to the various language constructs. In the process, you may remember what a complex construct may denote, but are unable to write even a 10 line program, given a problem. I believe, in most languages, you need to really learn only 30-40% of the language for most practical requirements. The rest is best learned while working with the language (for project, job, etc). Listening to lectures enumerating library functions, or even attempting to remember them is not a productive way to spend your life!

A related aspect is the focus on tools. Exposure to and working with tools is important, to ensure you can produce solutions. But in a field like IT, tools change rapidly. Fortran was a popular general programming language, which gave way to C, then C++ and today Java. Many databases have come and gone, and many are still in the fray. Different companies, and different projects may use different ones. Development environments and frameworks are coming in almost daily. Therefore attachment to a tool is not healthy in the long run. The ability to move along the range of tools as they come along is more important. And this necessitates a good foundation in the respective area. Shallow exposure to a lot of buzzwords may get you a job of some sort in the short run. But you lose the opportunity to grow, given the limited adaptive ability.

Tools are afterall just tools. They facilitate work. They are not solutions themselves. Mastery over the intricate functions and options in a tool, is not worth investing your time on. Effective use of the tool to solve your problem should be the focus. So when you get lectures on which button to press for activating various functions, remember your time is getting wasted. The focus of teaching a tool — if at all, such a thing makes sense — should be to make you aware of the broad functionalities, and limitations of a tool, so that you know what can be done well and what cannot be done well using the tool. The important knowledge is about the associated process (usually effective software development), and how and where a tool fits into that process.

Many courses violate all these. You feel you are a master of Java or .NET at the end of the course, but you can’t write an efficient program to solve a simple problem. Watch out for such disasters.

I have seen many Java faculty who can’t explain basic concepts such as role of interfaces, how to use threads to solve a problem, need for inheritance, and so on. A faculty who talks nicely, need not be knowledgeable. Adequate access to lab is important, not enough to have a fancy lab which is open for you just 1 or 2 hours a day. Educational resources in the form of good library — digial and/or physical — are important. And above all, an ambience which encourages study.

As in all aspects of life, educated choices are important.


7 Responses to “Choosing a course….”

  1. Abhishek Oza Says:

    Projects that college students submit, are actually programmed by the paid professionals! Not the IT industry professionals, but the small scale industry of people who make only college projects. The students just buy them & submit. I have seen colleagues who cannot write: (1) for-loops (2) 1st 20 numbers in binary on paper using a pen.(3) commands on the prompt to compile & run, as they are are using Netbeans. (4) a small xml text with tags in LIFO order.
    And i am talking about BE/BTech people(the specialist). When I graduated, even non computer science students wrote better programs(SYBSc Maths students for numerical analysis, and TYBSc Physics students for applied component), then what CS/E students write today.

    I was lucky to be taught by the likes of V.N.Joshi during MSc, Dinesh Himmatsinghani, and prof.Hegde. But not having some of them as teachers today, should not be an excuse to be that ignorant. Every generation has it’s share of good/bad professors.

    When I was doing PGDST, an FPGDST student Ranjan, who came after studying at NIIT said: “They at NIIT, just teach you:’this the language syntax’, but here is where i learnt programming.”

    (Good to see someone pointing out the difference between a programmer and a coder. I would like to point out another difference between a programmer and a coder: a coder just googles the problem, copies it blindly to his solution. A programmer on other hand, tries to solve it first, googles if he cannot solve it, and once (s)he gets the solution, (s)he adds something new to it & gives it back to the programmers’ network.)

    • thelittlesasi Says:

      I agree Abhishek. This post was not directly on those issues, but only from the angle of how it affects choice of courses. I have done and seen a lot of what you are doing. In our PG/FPG courses, we have attempted to correct the situation; I wont say we succeeded fully — but we made a lot of people feel the difference. Thanks for sharing your views.

  2. jaya Says:

    All the statements are true…. but placement is the ultimatum for the students.. so, any off-the -shelf , comfortable solution??? 🙂 – which will be less miserable. for both students and teachers…

  3. Sagar Gurnani Says:

    Great insight Sir!
    Difference between coder and developer and “developer” jobs.

    A question :
    Since new tools are available regularly and since language of preference in industry also changes, what is an effective method to keep track of latest technologies?

    I don’t want to end up learning out-dated technologies and then learning new ones in a 6-month training period.

    P.S. I agree with the statement that one needs just 30-40% working knowledge to start off. Learning the rest as you go about your tasks is much more effective.

    -Sagar Gurnani

    • thelittlesasi Says:

      No short cut keys! Learn the foundations well enough, to enable to grasp a new language/platform fast. No need to learn all new languages — be aware of their existence, and major innovations in them, and learn details when required.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: