Last Updated On January 28th 2012
The unfortunate reality of the vast number of CS & IT departments of universities & colleges in the country is that the Professors of these departments are strong in theory and research publications but not so strong in practical areas like Software Design and Programming or Coding. Naturally the students graduating out of CS & IT academia also end up having somewhat strong theoretical and research-oriented skills but being weak in Software Design and Programming.
But the biggest employer for CS & IT graduates is the software industry which mainly needs strong software design and programming skills. Yes, there are some industry research jobs too where research orientation would be very useful but such jobs are very few.
Most parents want their children to get a good industry job after they finish their CS & IT education. They get shocked when their children even after graduating/post-graduating with a B.E./B.Tech./BCA/M.Tech./MCA do not land a job. The reality is that campus recruitment is the main mechanism though which ‘freshers’ get jobs. Otherwise it is very tough for a CS & IT stream graduate to get a job!
Why is that? Is there not enough demand for CS & IT skills? Well, the problem is that most of the ‘fresh’ graduates simply do not have the skills to do software programming jobs. The large software companies put the ‘freshers’ through intensive in-house training before they are deployed on ‘live’ projects.
The ‘freshers’ who fail to get recruited at campus, many times, pay through their noses and go through an additional private i.e. not government recognized, “job oriented” training course which gives them “job oriented” skill set. But should not CS & IT academia provide that? That is what parents and students expect. Even common people expect that an M.Tech. in CS/IT or an MCA fresher will be able to straight away do programming tasks.
The reason lies in policies adopted by AICTE/UGC which are the vital academic regulatory agencies of the country. The primary factor for the career growth of any academician lies in his/her research work measured in terms of research publications. The CS & IT academician naturally has to focus on research to enhance his career. If he focuses on programming then he may stagnate. And so, in general, the teachers themselves neglect programming in favour of research. When the teacher himself does not focus on programming how will the students learn programming well? The system instead encourages the students also to do research and discourages too much interest in programming!
So is there any solution? There should be policy changes which will encourage CS & IT academicians to grow in software design and programming. For such changes to come AICTE/UGC MUST have significant industry representation. As of now AICTE/UGC policy makers seem to be research oriented Professors with limited exposure to software industry’s engineering needs.
But will AICTE/UGC be willing to listen to such words? In all probability the research oriented Professors will look down upon such views. So what do we common folk, non Professors, do? Well, we should approach the Ministry of Human Resources & Development (MHRD). We common folk pay taxes and it is OUR TAX MONEY which MHRD gives to AICTE/UGC and which flows down to universities and colleges. MHRD is answerable to the TAX PAYER and is answerable to the parents and students about why most, but not all, CS & IT graduates are weak in practical design and programming skills.
MHRD should insist that AICTE/UGC policy making bodies MUST have significant software industry representation. MHRD should ensure that AICTE/UGC norms for career growth for CS & IT academicians give a growth path where software design & coding expertise is given as much importance as research publications. Perhaps AICTE/UGC rules should be changed to allow non-research-oriented software engineering professionals from industry to become university teachers.
This problem is not peculiar to India alone. U.S. academia too has significant problems. Here is the world-famous Inventor of C++, Prof. Bjarne Stroustrup’s article in the reputed “Communications of the ACM” publication on changes needed in CS education: What Should We Teach New Software Developers? Why?
Prof. Bjarne Stroustrup is a Distinguished Professor & holder of College of Engineering Chair in Computer Science at Texas A&M University. He is an ACM fellow as well as an IEEE fellow. For more details, see: http://en.wikipedia.org/wiki/ Bjarne_Stroustrup, http://www2.research.att.com/~ bs/.
Prof. Bjarne Stroustrup is a Distinguished Professor & holder of College of Engineering Chair in Computer Science at Texas A&M University. He is an ACM fellow as well as an IEEE fellow. For more details, see: http://en.wikipedia.org/wiki/
One comment I received today over email was:
ReplyDeleteThe disconnect between industry and academia exists in almost all trades- not just on CS. It seems, this is the major shortcoming of Indian education.
--
I (Eklavya Sai) think that it is really acute in the case of CS & IT. There is a huge "job oriented" private (not government recognised) IT training institute industry in India. I don't think we have anything similar in scale for, say, Mechanical Engineering or Electrical Engineering.
I am sure most of us would know of many cases of CS/IT graduates doing private "job oriented" courses after graduation, to land a job. But it may help readers of this blog post if I illustrate the matter with a couple of cases.
a) Recently an MCA fresher from Kerala was telling me that many of his colleagues including him are struggling to get a job. Note that his MCA was a 9 semester one (4.5 years) after he finished his B.Sc.! Each semester fees was around Rs. 6,500/- I am told.
But one student did a 3 month "job oriented" course, after his MCA, paying Rs. 30,000/-. The MCA fresher I spoke to put it well saying that the 30,000/- paid was fine even if it was for 3 months only BECAUSE THE STUDENT GOT A JOB!!
He then told me that during interviews he is asked questions like do you have experience with PHP frameworks (one IT technology example). Unfortunately he has only done a PHP/mySQL mini-project without using any framework. He then told me that while doing his MCA course, for electives they were offered courses like Speech Processing and Finite Automata (or something like that). They asked the teachers whether they could do something like PHP frameworks course - the teachers said that course is not offered as elective! Please note that this is for an M.C.A. (Master of Computer Applications) course and not an M.Tech. (Computer Science) course.
I think the reason for poor technology hands-on courses in government (AICTE/UGC) recognised CS/IT academia is the seemingly blinkered research only mind-set of AICTE/UGC policy makers. Their influence on the university teachers is MASSIVE. I am not blaming the teachers. What can they do if their top masters provide career growth only through research?
I asked the MCA fresher whether it would have been better for him to have done a "job oriented" IT course in a private (non government recognised) training institute after his B.Sc. instead of his M.C.A. He agreed that it would have been a better option from the point of view of getting a job!!! He probably would have been a 3.5 year experienced IT professional now with a significant bank balance instead of still being an IT job seeker!
b) Some time ago a B.Tech./B.E. in Computer Engg. or something like that from a Hyderabad Engg. college was struggling to get a job. He too followed the same route. i.e. He paid through his nose for a "job oriented" course in Hyderabad again and then, if I recall correctly, landed a job.
So, in conclusion, while there may be an industry-academia disconnect in most streams (trades), I feel that in CS/IT the disconnect is really glaring.
A friend sent this link: http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html
ReplyDeleteInteresting article!
My take is that there should be differentiation. IT schools and CS schools.
Java or PHP or ASP.Net & Rapid Appl. Dev. tools in general, IMHO, are perfect for IT work. In my industry days we would call it Application Software and at that time people used to say that 80 % of programming work/business is Application software. While developing App. software, understanding and fulfilling customer needs is the most important - efficiency of code is required but not that vital. So one needs app. domain knowledge (e.g. banking, insurance, manufacturing etc.) to some extent. Then all you want is a tool that allows you to quickly develop the app. - the simpler the tool the better - so long as it does not compromise too much on efficiency and maintenance (lifetime of software). I am now quickly learning the PHP framework CodeIgniter with the same mindset - I am picking up just what I need to know to generate a simple database form oriented web app.
Pointers, Recursion ... are VITAL for a Computer Science (CS) course. During my industry days we would call CS kind of stuff as "system software" and this was around 20% of the programming work/business. The CS/Sys. software guys are the ELITE. Their earnings are also typically far more than the application software guys. They develop the core systems or tools on top of which IT/application software guys work. So the OS and the compilers/interpreters and the internet protocols will typically be done by the CS guys. The IT guys do the business apps. on top of it.
I agree with the author that Java is not a good choice for a CS course.
However, many times students/colleges/universities have this massive problem of jobs after they finish their courses. The smart guys have the capacity to do pointers & recursion. But many of the students are not that smart. So they struggle through such courses and either get 'weeded out' or worse, as is typical in India, somehow manage to finish with a CS degree but without the CS aptitude. The latter struggle to get a job. They don't know any IT to get IT jobs (unless they get swept in during 'bulk intake' campus interviews of major IT software consultancy companies) and are not good enough in CS to get system software jobs.
I think it is these realities of jobs for the students that makes many CS schools, at least in India, have some IT courses as well.
The elite tech. schools like an IIT in India, for example, don't need to worry about such things as they get capable students to start with.
A friend wrote (some words are edited):
ReplyDelete- Paul Graham has written eloquently about this: http://www.paulgraham.com/hp.html
http://www.paulgraham.com/hundred.html
http://www.paulgraham.com/desres.html
You really should read these, despite the length -- they are worth every word.
- This is part of the reason I did not do a PhD - the goal of academia seems to be publishing papers, or at any rate things that sound suitably academic and formal. Type systems, for example, are a good topic for academics, because you can do any amount of intellectual gymnastics about them. So, if A is the set of all integers and B is the set of all chars, struct { int x; char y;} takes on values represented by the set A x B (cross product, the math operator).
I remember arguing with an IIT prof about this, asking: this is all fine, but how does it help me write better programs? He didn't have an answer, but he didn't care -- for him, "formal" is an end to itself. --- snip ---
(Unrelated to the above) In my last week of stay at IIT, as I was sitting in my advisor's office with the bookshelves containing all the previous years PHd and Mtech thesis impressively bound and looking like a formidable intellectual arsenal, I was depressed. Who is going to read all this? Whereas the Orkut app I worked on at Google that had 1 lakh users may not win me a Turing Award. But it lets people keep in touch with their girlfriends and boyfriends! Did all this theoretical gymnastics help a single person in any concrete way?
In other words, the motivations of CS academia are wrong. When that is the case, is there any surprise if the results are not ideal? --- snip ---
People sometimes say that industry is where you do routine work and academia is where you learn and build knowledge for the next generation of systems. Except that there's a lot of dog work in academia, too, at least to the tiny degree that I'm aware of academia. My MTech thesis involved building a different kind of debugger for an academic language called Haskell. This language has some impressive properties, for sure, and it was good to be exposed to that way of thinking, but the debugger I built is more of routine work than any kind of invention or research or original contribution to the world.
Perhaps it would be more useful if you can take one idea from Haskell and apply it to mainstream languages. Useful in the sense that it helps people. If I build a more efficient and cheaper solar panel but nobody uses it, whom does it help?
--- end part 1 of Friend's comment --
--- start part 2 of friend's comment ---
ReplyDeleteYou often get good things by combining existing ideas in a slightly different way, but academia looks down on this kind of work. The kind of work I'd like to do is to look at what people use and ask, "how can I improve this?" This most likely entails using an existing idea rather than coming up with a new one, just as a painter uses existing colors in a new way rather than producing a tube of paint in a different shade.
Academia focuses on coming up with something new, rather than something useful. If you look at the status quo and come up with an idea on how to improve it, is the idea any less useful if it wasn't original? Coming up with new ideas should be a means to an end (improve the technology that people use), but academia made it an end to itself.
I think I've finally understood -- at least partially -- what people mean by the disconnect between industry and academia. But in my view, the fault lies with academia, which has confused its means for its ends.
To summarize, academia focuses on things that are (a) formal and (b) original while forgetting what really matters, which is whether it's useful.
- Masters should be only for people who have worked for a few years. A student should first learn how things are done before taking an advanced course (Mtech) or doing research.
- A different kind of innovation from core OS is interfaces. I get irritated when I read an article saying "the iPad doesn't do anything that my Unix workstation in the early 80s didn't". Did your Unix workstation have more than a hundred million users who are repelled by the fact that traditional computers are too complex and don't work right in ways that people care about? It's easy to forget this since we're all geeks, but spending a little time with my mom is enough. I can suddenly see how badly designed things are from her perspective.
This is the most interesting thing at work. Who knows, I might even make it the focus of my career.
- Leaving aside theory for the sake of theory, I think a good education should equip people with a deep understanding of how computers work, at all levels of the stack -- why something is done in a particular way at one level of the stack, how else it could have been done, what the tradeoffs are, etc. Most BTech/MCA people don't have this knowledge.
Nor do they care. They are more interested in getting a job. Which is fine, but I have no sympathy for these people. Didn't get a job? Tough luck, you weren't interested enough in learning computer science. And I certainly have no sympathy for CS depts that don't give students the kind of deep knowledge that I'm talking about.
- I understand that the MCA student you mentioned in the comment was not well served by the MCA. Agreed. But why couldn't the student answer, "did you use PHP?" with "No, but I used Ruby on Rails, and CherryPy, and Closure, and a similar Java framework, and one or two templating languages, so I can pick up PHP before the day is out"?
To me the fault is as much with the student as the department. Anybody can point fingers and say, "but they didn't teach me!". That's not useful. Anybody who's interested in learning will find a way to learn, rather than blaming someone else, even if the other party is at fault.
Phew! :)
I (Eklavya Sai) replied:
ReplyDeleteThank you for your valuable views.
Will read the Paul Graham articles later - they are opened in another window (like the Stroustrup article on your comp. :-)).
You wrote, "This is part of the reason I did not do a PhD - the goal of academia seems to be publishing papers, or at any rate things that sound suitably academic and formal."
That is how it comes across, isn't it? Actually the goal of academia should be to teach!!! And there are many academicians, I think, who focus on that. But for academic career growth publishing record is the metric. I mean, I have heard academicians being referred to as 'he has published 400 papers', which is supposed to mean that he is a great academic.
I think this is a systemic issue for academia - especially Indian academia which is governed at the top-level by AICTE/UGC/Ministry of Human Resources & Development. They put out the 'norms' for recruitment and promotion of Indian academicians. For example, see http://www.ugc.ac.in/policy/revised_finalugcregulationfinal10.pdf.
I think their problem is how do they compare one academician with another? They probably find it very difficult to come up with a country-wide, standardized & objective measure of how good a teacher one academician is compared to another. So, they probably ignore the teaching capability of the academician and lay emphasis on what they can easily measure which is the research publication output - both quantity and quality - of the academician. [For quality, I am given to understand that UGC uses impact factor http://en.wikipedia.org/wiki/Impact_factor].
And this career growth measure naturally is a MASSIVE influence on the academic community. I mean, they are also human and would want more money and status. So the system, IMHO, encourages the academician to concentrate less on his/her teaching and focus instead on his/her research publication output.
Now I am not against academic research. Research is vital for society and academic research makes vital contributions to material progress of society. But my view is that there should be a proper balance between teaching and research in a University teacher. A further, perhaps, very radical view is that some academic teachers should be given the option to be only teachers and not researchers.
--- end part 1 of Eklavya Sai response ---
---- start part 2 of Eklavya Sai response ---
ReplyDeleteYou wrote, "To summarize, academia focuses on things that are (a) formal and (b) original while forgetting what really matters, which is whether it's useful."
I can fully empathise with you when you wrote, prior to the summary, about how you were interested in doing something that people find useful (Orkut for e.g.). My thinking is the same and that is why I have chosen not to get involved in research focused on only producing research publications.
But then I respect the choice of academicians to do research. Their life and their choice. And, IMHO, as I said earlier, academic research does have a vital role in society.
I don't think I agree with your generalization that academia focuses on things that are original but ignores whether it is useful. Academic freedom allows academicians, as I understand it, to pursue whatever they want irrespective of whether what they are doing will be useful or not (many times the utility aspects are discovered later on). So some academicians choose to be pure theoreticians and stay distant from applications of that knowledge.
But many academicians choose to work on applied areas and there are many journals with significant impact factors which focus on such 'applied research' work. In fact, I feel some journals on topics like 'Technology for Education' look like 'research & development journals' as against a pure 'research only - no development' journal. See: http://www.blackwellpublishing.com/journal.asp?ref=0007-1013 & http://www.educational-software-directory.net/publications/journals
Perhaps ELITE academia like an IIS (Indian Institute of Science) or some sections in a CS dept. in an IIT choose to focus on 'higher intellectual complexity' 'pure research' areas. Sometimes I feel it is almost like a religious monk's quest for 'purity' - pure intellectual quest of a particular knowledge area untainted by application of that knowledge area to society. But there are lots of other academic institutions in CS & IT which focus on 'applied research' areas which are aimed to doing something useful to society.
--- start part 3 of Eklavya Sai response ---
ReplyDeleteI wholeheartedly agree with your comment about iPad vs. Unix workstation. "Did your Unix workstation have more than a hundred million users who are repelled by the fact that traditional computers are too complex and don't work right in ways that people care about?" Having come from a generation where I have been dazzled when I was a young techie, by the power and attractive UI of the Unix workstation as compared to the dumb terminals of mini-computers & mainframes, I was completely bowled over by my iPod Touch a year or so ago.
My God! What a revolution in making computing devices so intuitive and so useful and so powerful! Wow!! Hats Off to Apple. Haven't tried out an iPad yet but I can imagine what a winner it will be for your Mom and millions or should I say potentially billions of people as compared to even the most powerful Unix workstation that money can buy today.
About the MCA student who should have learnt Ruby on Rails or CherryPy or ... by himself - well, what I have realized as a teacher in academia, who, btw, focused only on teaching and ignored research, is that only a few smart and motivated students have the ability to do self-learning. Most need to be taught by a teacher. That is why parents spend money and send their students to university. I mean, if the student is smart enough to learn by himself why should he come to college to learn? [Of course, he may come to/ be sent to college for the experience of college life which has its own importance.]
You perhaps do not have a teacher's view. Typically, it is once you take on that huge burden of teaching some knowledge to others that you experience the wide difference in intellect and grasping ability among students. My experience is that it is quite easy to teach standard stuff to a smart student - the real challenge is to motivate and impart knowledge to the average student.
Yes, in principle, I agree with you - we do have a serious gap.
ReplyDeleteHaving had fingers deep in both significant research and commercial software development (programming/design) - and also applying my research to commercial problems - has been very satisfying and the basis for my views.
I feel it is perfectly possible to maintain a balance between both theory and practice - after all - what one practices is better if it is based on solid theory. A good theory is eminently practical. And all of programming and design has a good lot of solid theory at its foundation.
But what I have seen of the Indian industry in the last few years (decade+) is that solid programming skills are NOT needed in most industry jobs. What is needed is mostly screen design and manipulations of simple web widgets like Dialog boxes, tree-lists etc. Hence, the industry does not even demand solid programming skills.
Also, what I have encountered mostly is a kind of language bias - knowing to syntactically manipulate C++ or Java or Swing or what not - is considered sufficient. I meet a lot of freshers who are too keen to demonstrate their knowledge of these areas - but when it comes to demonstrating a solid algorithm or two in their chosen field, they go bonkers.
Algorithm design - independent of the language - is a key skill that is certainly missing from the repertoire of current software engineers. All that most do is talk of Multi-threaded-Programming etc - and yet ask them to write programs from K&R C - they miserably fail.
It is imperative that this algorithm design skill is taught - in a language independent way - and then implemented in a language of one's choice. And it is here that solid theory - turing machines etc - comes in as a strong foundation - along with results of computational complexity.
With hardware available far more cheaper than in our times - there is a strong tendency to increase "Performance" by adding a couple of more CPUs or Threads. And that is at the cost of a good algorithm. This also increases overall cost to the customers. A solid course in Computational complexity - will save millions in terms of money and time - and get better performing products.
I have been successful at retraining talented freshers so far in getting them to understand the theory and apply it to develop robust commercial software (hardcore programming) - Defect-free programming by Design rather than by testing - and also do solid research in parallel, commercialise it and patent it. This for me is the proof of the pudding of balance.
Eklavya Sai's response to above comment by Rajendra Chittar exceeded 4096 characters and so is posted separately here:
ReplyDeleteeklavyasai.blogspot.com/2011/09/cs-it-chittar-comment-response.html
Long discussion spawned as a child post: CS & IT Academia: Research vs. Teaching
ReplyDelete