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 Web being the new battleground
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 side
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.
So whats wrong?
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:
They don't take web development seriously: 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 way and hope that students will learn it properly.
With the emergence of HTML5 and other upcoming standards, like it or not, universities will have to take the web seriously. Computer graphics (will 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".
They don't have skilled faculty to teach best practices: 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 longshot.
Committees: 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.
The computer industry is shifting: 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.
So whats a student to do?
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.
- Opera Web Standards Curriculum : The Opera Web Standards Curriculum is made by Opera in conjunction with Yahoo! to teach people proper web development techniques. It assumes the reader has no knowledge of web development, and builds from that point forwards. Its divided into various chapters, and you can start reading from whichever chapter you feel comfortable. Its licensed under creative commons and can be freely used in part, or in whole, in any school, college or institute curriculum free of charge.
- WaSP Interact Curriculum, and others: : The WaSP Interact Curriculum is another course, this time by the WaSP-Edu Group, based on the Opera WSC, caters to the basics of web development in a different structure. It also covers aspects of server side development. EDIT: Also, check out the Web Standardistas book which you can read online too.
- The power of 'view source' : Whichever website you find interesting, go and view its source. I had initially learnt a lot about web development just by doing that. At first you might be intimidated, but as you learn more about web development, you'll get to make sense of it all. Also keep in mind, that many sites don't follow best practices and may actually be using bad practices. So always looks towards sources like Opera WSC for best practices.
- A List Apart : A List Apart has been, for more than a decade, a premier resource for web designers and developers who want to know the best techniques for front end development on the Web.
Inspiration : To get great at web design, it is important to look at design itself. There are a number of blogs and sites which provide design inspiration and information. Typography is especially important to web designers, and sites like ilovetypography.com, typographica.org, dafont.com and fontsquirrel are great resources.
CSSZenGarden was one of the original sites showcasing the power of CSS for great design. Other sites for design inspiration include creattica.com, bestwebgallery.com and webcreme.com. There are plenty more sites like these.
- The actual specifications : Articles and tutorials are great, they are not a substitute for going through the actual specifications for various technologies. Go to the site of the World Wide Web Consortium and go through the various specifications yourself. That will definitely teach you some more tricks and give you a deeper understanding of various front end technologies.
- Conferences and events : There are various developer events and conferences happening all around. Many of these events will have very talented people sharing their knowledge with you generously, the kind of knowledge you might not necessarily find in textbooks, but still would be very usefull (often times more usefull). They give a chance to broaden your horizons into what people are doing in practice in their own organizations. Go to Barcamp.org or lanyrd.com for upcoming developer conferences near your area. As you become more familiar with the conference scene, you'll get to know even more developer events not listed on this sites. I hope I'll run into you in one of these events!