I am a 21 year old undergraduate from India in my final years of Computer Science and Engineering 4 year degree course.
The very idea of writing this was to say that India is much more than an outsourcing hub. I hope the west sees it that way and instead of absorbing talent, the west should set up more hubs in India. There is some offensive content ahead, but if you understand the larger picture, you will understand what I am trying to say.
Education in India is in a very disturbing state with a workforce produced every year that has no or absolutely horrendous technical skills. The educational system is not at all competitive in terms of innovation or entrepreneurship. this has led our country to huge embarrassments like the recent indigenously developed $10 computer (which turned out to be a cheap Chinese Android based tablet, only maintained by an Indian company), or an earlier claim of another technological breakthrough (which turned out to be a thumb-drive). Education institutes are totally disconnected from the real world of technology and are more interested in students reinventing the wheel, all in the name of innovation. educational institutes, everyone hates them.
Coming to places where you at least expect to learn some hot development skills:
I have had exposure to a few training facilities in India apart from my educational institutes. Programming and software development happen at two levels, application level development and system level development.
For application development, most freshers in India are mass recruited by companies to claim a sitting bench of programmers and to get more projects. At the end of the day, there is compromised quality because the hiring process is utterly stupid.Sometimes, talent is wasted by making people good at their stuff work, on stupid things like creating Java frames and creating simple WinForm and ASP.NET UIs only (I am talking about fresher recruitments and as claimed by some, though I am not sure). If not considering good software engineering practices, that kind of coding can be done by a 7th grader.
But at the same time, there are independent programmers and developers who have a keen interest in things. They are like the unsung heroes who have lost all hope and are least interested in changing the world. All they want, is to make the most out of their skills, so it is all about the money and going abroad. While our courses are hugely limited to system software (C programming using TurboC!!! for 4 frigging years, stupid and vague C++ without proper object oriented concepts using cout in a C program is not C++ , ASM and more C programing using gcc), when in a company, we are mostly made to do application development (ASP.NET, WinForms, J2EE). Basically, a Computer Science engineer is made to do the job of a Software engineer. Yes, knowing computer science helps, but not knowing proper software engineering hampers the process too much, and there comes plummeting the whole system. It is a #fail.
I will cite a simple example. I joined
a training institute for my final year
project and they wanted me to create
an ASP.NET website which would be
something of an inventory system
(hotel booking, CRM that kind of
stuff). Yes it is not an easy task,
but not worth working on a project in
my opinion. It will just be
reinventing the wheel and these
projects are huge by nature in a real life. Delivered
in 6 months by a group of 3, you can
understand the kind of scaled-down
unusable system that will result from
this. The institutes do not stress too
deep and they are more interested in
"not scaring the student telling them
too much" and "giving an overview, and
letting them learn the rest on their
own". At the end, what people develop
in projects is not even a fully tested
prototype, let alone put it up for
real life usage.
I took my own topic, a voice guided
real-time navigation system. I am
using WPF, Google maps API and all the
latest in tech that I can. For good
Software engineering practice, I am
using source control, using MVVM and
will give a thorough look at anything
else that I come to know of. I am 21
years of age and am a graduate. I
guess at my age, people in west are
still in the learning phase and become
graduates at a later age. That makes
western graduates so much better and
more knowledgeable. We have quantity
but no quality.
In India, the level of work I am doing for my project is generally not expected of a final year undergraduate project. But, I will do it because I want to. At the same time, there are others in my group who are comfortable doing a project in ASP.NET, make 5-7 pages, run database queries, fill up grid-views and not give a damn about security. Hell, even those freelancing websites have better job postings (YouTube clone, Google instant + X = Y Mashup..)
Six months down the line, you will find the same people working in a company that you outsource your business to and you will find me there too. People like them, outnumber people like me ten to 1 :(
to be exact and not ranting, in my
whole educational career and
acquaintance with over ~500 people, I
have seen exactly 4 who had the level
of expertise that I would consider
them for working on a project with me)
Ultimately, all Indian graduates will write good documentation because it is theory, but do not expect any fool-proof code from them.
Coming to system software, the same is the case. A friend of mine is working with the Android NDK and is working on a live project at a company. He is fortunate to have got this project and I envy him, but this level of work happens in India too. Another senior at my college developed a kinect clone (multi-touch mouse, like in minority reports) in his final year project using just 2 cheap webcams. Equally, there are others who copy codes from the Internet and somehow get a degree reinventing the wheel.
My final word, do not expect a
compromised quality all over India,
and do not take Indians for granted as
cheap software maintainers and
suitable for outsourcing only
maintenance job.
Also, do not expect that someone who has a good educational background in terms of marks to write good software. India's education system is all theory oriented, there is no stress on practical, sometimes, knowing more or the willingness to know more can land you in trouble from teachers who feel intimidated. Nevertheless, good programmers look for greener pastures in a better career and not just a good job though, there are others who want to land up a good "job", drive around a Honda City, eat out at Mainland China and live happily ever after.
I am more into Audi btw. :)