28 February 2011
EDIT: I started to write this post in mid-2009, fresh off my first india wide university tour. Somehow, I never completed it in time and this post got relegated in my drafts. Recently, I went to IIIT-Hyderabad for a conference, and this issue was once again brought up in a panel discussion. This made me search through my old draft posts, and complete it.
This is an issue which I feel really really strongly about. I've seen the indian academia scene from close quarters. My dad is a professor and our family lived in a university campus for close to two decades. All family friends were academicians and I often heard them talk about students in their departments. Of course, I remember being a student too, and that too in CS. Later on I've been involved in going to scores of universities and engineering colleges across this country (right from the IITs to the ones you've probably haven't heard of) and have interacted with the students, professors, placement officers, and other staff too. I should start out by describing some trends in the computer industry right now, which I see as relevant to the discussion...
The biggest computer companies right now, whether its Google, Yahoo, Microsoft, Amazon, etc are all competing on which plattform? Its the web. Of course you have some desktop apps from them which compete as well like GTalk Vs Yahoo Messenger, etc...but the primary ground for competition amongst these companies is web services.
Which means that the most lucrative companies which come to campuses to recruiting are doing battle online, and need many more people who have a good idea of the web and how to program effectively keeping that plattform in mind.
The mobile web is big. Opera alone is being used by more than 100 million people every month on mobiles. The mobile web is growing at a staggering pace, and more and more companies are joining the bandwagon. Then comes tablets, netbooks, portable media players, gaming consoles and more. We are in the middle of a revolution where we are seeing more and more people accessing the world wide web on something other than a traditional desktop or laptop.
As the Web grows, and as the kinds of applications that run on it increase in complexity, we'll need more and more people proficient in making these applications. All these complex applications will rely on the client side more heavily than before. Already you can see how complex Google Maps, Facebook and Flickr are with regards to client side code. With more use of HTML5 and related technologies like Geolocation, Web Storage, CSS3 etc we'll need more and more super coders who can do magic on the front end.
Part of this is also our reliance on IDEs like Visual Studio, Dreamweaver, Flash etc. Generated code will never compete with hand made code of a guy who knows what he's doing. Before learning any server side language to be used on the web, you should first learn a proper HTML and client side scripting. Front end code is just looked as something which shows the output of the server side response. This attitude needs to be changed.
However, all these problems really stem from the college level. As it see it, these are the problems that universities have:
I can't even count the number of professors I've taked to in the IITs and other 'reputed' institutes, where even the mention of web development is met with 'Oh, our students learn this stuff on their own'. I've seen the kind of sites that the students of those colleges make, and while its better than some, its still riddled with invalid code, untested in many browsers, and hugely inaccessible.
I understand that computer engineering colleges are there to teach primarily computer science, and its absolutely essential for students to know data structures, algorithms, automata theory, etc ... but in a world where everything is moving towards the web, proper front end engineering cannot be just discarded away and hope that students will learn it properly on their own.
With the emergence of HTML5 and other upcoming standards, like it or not, universities will have to take the web seriously. Computer graphics (which till now was taught mostly with OpenGL) will have WebGL as it web counterpart, and you'll be able to play with sockets using Web Sockets and do multiple threads using Web Workers. 2D Graphics can be replicated on the web with Canvas, and we already have WebSQL for databases and soon will have IndexedDB. Guess what? All of these are front end web technologies. A lot of courses involving Computer Graphics, Network programming, Databases and more will have students asking professors "Why don't we use web technologies to do this instead?". Academics should better have an answer other than "This is way its been done till now and we aren't going to change".
In all the 20+ universities I've been to, I haven't met one single faculty member who is truly passionate about web development, at least, the front end part. I know a few colleges where they do have a course on web development, but front end development is treated like just a small thing to cover before they move on to teach PHP, JSP or something similar. I've seen colleges and teachers advise their students to use tables for layout and many of them think W3Schools is actually officially related to the W3C! There seems to be no mention of validation, accessibility, cross browser and cross device compatibility, and various best practices.
Talking to Indian college faculty about web development is pretty much the best exercise in facepalming you'll ever get. That isn't to say that there are no teachers skilled in front end web technologies in indian engineering colleges, but the numbers are certainly not enough by a long shot.
This is an area where government colleges are especially affected. Huge external committees are formed to decide the curriculum, and is not updated for years. Sometimes even a newly refreshed curriculum is woefully out of touch with reality. I recently went to a college where the professors showed me their curriculum, and they were teaching stuff like CORBA. I asked them why are they teaching this and not web development which would probably benefit them more, and they said that they don't make the decisions ... but external committees do. They were affiliated with a big university, and they decided what things to put into it.
I urge everyone to read Y.S.Rajan's excellent book "Way Beyond The Three Rs: India's Educational Challenge in the 21st Century". He masterfully argues against the centralization of mass education especially on the undergraduate level and above. One of the main reasons the IITs did so well from its start was because they had a lot of autonomy in setting their curriculum. The IIMs offer a diploma rather than a degree precisely because making it a degree would put them under new rules and regulations under which they would have much lesser autonomy in setting and changing the curicullum.
The Web especially, is moving so fast that large central committees will never really be able to incorporate the most recent developments. This situation might improve if academia in India is given the freedom to change the present curriculum according to the most recent developments in the Industry.
This was a point mentioned in the panel discussion I was recently at at IIT-Hyderabad, where one of the professors working there himself said that in the last few years especially, the importance of the algorithm has slightly decreased in relevance. I'm not sure I completely agree with that statement, as I still think the primary focus of a decent computer science program should be to train people to be good in algorithms, design patterns, etc.
However, a person just good in these things and not in actual technologies usefull in the real world will be left with much reduced career options and will generally not fully explore the realm of computer engineering. The web being such an important plattform (and in the future will be much more so than even right now) it is imperative that its given the same respect and attention that we right now give to languages like Java. I know this may seem a bit overboard to some, but I think that it truly makes sense.
If I had my way, I would eliminate Java from undergraduate computer engineering courses (at least for the first two years) and replace it with Python. It is a much more sane language and its even great when it comes to web development on the server side.
Well, apart from asking your institute's administration to include relevant courses for front end web development, with greater coverage and more credits than it has right now ... you should also learn on your own and do some projects. By projects I don't mean sample dummy projects, but try to make actual websites usefull in the real world. Try to get in contact with people in the industry and ask questions!
Opera is also doing a lot in this regard, and we regularly conduct university tours in various countries, and talk to students and faculty about the web development and browser industry and the current and future trends regarding it. If Opera comes to your university, make sure to attend the event!
Usually, when you're completely new to something, you don't know where to start. You start to look for information, and some of it might be the wrong info. To save you the trouble, I'll list the resources that you should be taking a look at if you're completely new to frontend technologies.
I've founded a startup that I'm working on now (currently in stealth).
Nowdays, I mostly talk about products, product management, leadership and org design.
Previously, I worked as VP of Core Technology (Products) at eyeo. Before that, my stints include working at BarrierBreak as Head of Accessibility Innovation and Research, and at Opera, where I worked in their Developer Relations team and later took over at PM of the Browser Extensions platform
Connect me on: