Saturday, July 13, 2013

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.
Full Post

No comments:

Post a Comment