Why India’s IT success depresses me

 India is the world’s next IT superpower. Bangalore == Silicon Valley. India’s computer engineers are the best in the world, etc. etc. And yes, it depresses me. The reason goes something like this: Our so-called success in the IT world has left most Indians with a very skewed perspective of what computer technology really is all about and what the computer industry really means. Despite the fact that ther are so many IT professionals coming from and working in this country, it has done little to benefit our society. But wait a minute, doesn’t the IT industry bring in millions of dollars of foreign revenue each year? Yes, it does. Isn’t that a good thing? Yes, it is. So why are you saying it hasn’t helped our economy? That’s not what I’m saying at all. The economy might be booming, but there’s more to a nation and national pride than the economy. Go back a few lines and read what I said: it doesn’t benefit our society.
    The IT industry has done little to benefit our society because for the last few years, it has been developing in an economically viable, but socially demoralising way. The reason is outsourcing. Yes this an outsourcing rant, not anti-, just a rant. And it’s from the perspective of those who are supposed to be benefiting from the whole thing. IT sourcing has not benefitted the society because the proliferation of the IT industry has not been geared towards the best interests of our nation or our people. Instead of building software that common people around the world, or even in our own country use everyday, the industry has been and is building software especially for American and European companies. The result is that though we know that our IT industry is a multi-billion dollar affair, most Indians, even those that use computers at home or work everyday, have little idea as to what they actually do that’s raking in the dollars. A small example, everyone aroud the world knows that Microsoft makes Windows, Apple makes Macs, Sun Microsystems makes Java, Google does search engines. But how many Indians know what Infosys makes? I don’t.
    Instead of building software for ourselves and our people, we’re making software for others and becoming dependant on what they want us to do and what tools they want us to use. The IT boom in our country has served to help only the ones who make money out of selling their services, and the Government who collects the taxes. The common Indian benefits in no way whatsoever, not even an increased sense of national pride, because India is the world’s back office. The Americans started the whole computer thing decades ago and it has helped them no end. Not only are American companies like Google and Microsoft household names, but Americans like Alan Turing and Steve Jobs are respected by computer scientists the world over. Money is one thing, respect and recognition is quite another. The US and Europe managed to get where they are because the top computer scientists either do research at national universities or do R&D at companies that are leading the industry in terms of innovation. But the best Indian students graduating from the IITs are encouraged to get a job or an MBA and spend the rest of their life taking orders from other people (or giving orders to people to do things that they don’t really want to). Instead of leading the world in terms of innovation, our computer engineers are being compared to Chinese sweat shop workers, producing cheap goods. This whole orientation towards doing what will get us money from the outside is harming our own nation. There is very little software in Indian languages and what there is, is below acceptable standards. We do not even have keyboards in most native languages, or even standardized character sets for the common languages of our country. That is something that the Chinese and Japanese do have. The whole effect is that though our people may know better English, our own languages and with them our sense of being Indian gets devalued day by day. So much for national pride.
    Now to outsourcing proper. Once again outsourcing helps our economy, but hits our society. Call-centre workers have nearly non-existent social lives and more importantly, outsourcing draws our talented workers from where they’re needed most: writing software to help our own people. If all the programming and design talent could be diverted to writing software for the common Indian user, it would not be too unreasonable to create a independent operating system, available in all major Indian languages, with Indian language equivalents of office software, email programs and browsers. We would no longer have to pay a ransom to Microsoft or resort to pirated software. We could also create specialised data standards to better exchange Indian langauge information and in the end, combine with Chinese hardware to build PCs that even the lower middle class citizen can afford. Of course this will never happen. The government would have to spend insanely high amounts to lure away the needed talent from the IT industry (IT workers may be paid a pittance compared to Western counterparts, but it’s still more than most Indians) and build the data infrastructure and would have to work with minimal investment returns for a number of years. Why would the government spend so much money when they can earn lots more by encouraging outsourcing? The Indian outsourcing boom might be dentrimental to our society, but doing away with it would be economic suicide. Once again Indians in general lose, just as they have been losing out through the centuries. One tends to get the feeling that Indians are happiest when they’re doing what others tell them to do.

How I learn to program: The tools of the trade

This is a continuation of the last post. I’m going into what are the actual tools you need to start on the way to becoming a programmer, where you can get them and how to put them to use.A Brief Introduction
Before I start on what tools to actually use, let me give you some background on computer languages and programming. If you already know all about that, move on. The basics are pretty simple: The only thing that computers really understand is a string of 1’s and 0’s, that is, on and offs for the processors many transistors. However writing instructions in this binary language is enough to drive anyone mad after some time. Over the fifty years or so that computers have been around, many alternatives have been developed to allow people to program by using a language closer to everyday English. This process started off with assembly language, hexadecimal codes and continues upto today’s languages of C++, Java, Python etc. But all the same computers still understand only binary. So you need something that will take your close-to-English program and turn it into computerese binary. This task is done either by a compiler or an interpreter.
Now, both a compiler and an interpreter do essentially the same task of translating your program to binary. But they do it in slightly different ways. A compiler ploughs through the whole program, checks for grammatical (syntax) errors and then spits out a binary equivalent. You can then run this binary equivalent whenever you like. Though this method generates fast and efficient binary code, the problem is that if you’ve made a non-grammatical error (like told the program to say “no” when it should have said “yes”), you have to wait for the whole thing to compile before finding out what the error was, and once you’ve fixed it, you have to compile it again. As you can well imagine, this process can be time consuming.
Interpreters sidestep this whole program altogether. An interpreter reads a line of program code at a time, translates it to binary, and executes it then and there. The good news is that this makes error checking a lot faster. But on the down side, program execution can be somewhat slower as the interpreter does a lot more work than just execution. There is also the added hassle of needing an interpreter installed anywhere that you want to run the program.
However, some languages, most notably Java, use a combination of the two. First your source is compiled into an intermediate language called a bytecode. At this stage you get to correct your grammatical errors. This bytecode is then interpreted into binary and executed by a Virtual Machine. The advantage this has over normal interpreted code is that you don’t have to move around the source code, only the bytecodes, and you just need a virtual machine instead of a full-fledged interpreter.

The Tools
    Now that you know all the theory about computer languages, time for some practical work. So what do you need to get started programming? Firstly a computer; secondly, an operating system. You probably use Windows, but Linux is much better for programming. If you’re reading this you probably have both. Then to really start programming, you need just two things: a text editor and a compiler/interpreter for your language. A text editor is where you type in your program. After you’ve finished typing, save the file with the appropriate main and extension and then hand it over to you compiler.
Compilers can generally be run from the command line. Each compiler has to be called in a slightly different way, but in general you just have to type in the name of the compiler followed by your program’s file name. That’s all. For C++, you can’t go wrong with the open source GCC compiler. It’s been around for years and has proven its worth many times over. If you feel like a cup of Java, it’s probably best to go in for Sun’s own free SDK. There is an open source Java compiler called the GCJ, but it’s still quite new and you might want to wait a while before starting on it. However if you’re new to programming, I do recommend starting off with Python. You can get all the things you need from Python.org. If you’re on Linux, the C++ compiler and Python interpreter will probably be preinstalled. If you’re on Windows, you’ll have to download and install them separately.
It’s another story for text editors though. Text editors are a dime a dozen. Some are very basic, some are very advanced. It’s up to you to find the one with the features to match your preferences. If you’re on Windows, you might want to try out the ConText editor. It’s simple, easy to use and highly customizable (and my first real editor). On Linux Kate and Gedit are extremely good. Of course, if you want to feel a bit more sophisticated, you might want to check out Vim or Emacs. Don’t let them scare you though.
Of course, the whole command line thing might get very tiring after a little while. Though it is the best way to start off and many will argue that it’s all that you’ll ever need for the job (which is true), it can be more aesthetic to use an IDE to automate some things. But be warned: Most IDE’s are incredibly complex and feature packed gadgets. Like any tool, their use has to be learned carefully and they can be quite intimidating to people who don’t know what they’re doing. You probably shouldn’t go near them until you get around to writing reasonably big programs. That being said, there are some IDE’s which even relatively new programmers can use without getting overwhelmed. For C++ on Windows, Bloodshed Dev is very clean and streamlined and is forgiving for new users. On Linux you could take Anjuta for a spin. KDevelop is also a big favourite, but you won’t be using most of it’s features unless you’re writing big, multiple source file projects. There are a number of Python IDE’s available on both Windows and Linux. The IDE that Python comes with is IDLE, and it is very clean. Just type your code and press a button to run it. Simple. Once you get bored with that, you could try out others like Eric3 or SPE. I personally use SPE because I find Eric3 too cluttered. For Java, Eclipse is a really great IDE, but it’s a memory hog and if you don’t have the resources, you’ll soon be screaming “Give me back my RAM and clock-cycles”. I personally find BlueJ very nice. It was my first IDE ever and I think that it achieves its purpose of letting you “learn the language without learning the IDE”.

That should give you enough information to get out there and do some coding. The reason that I’ve focussed on C++, Java and Python is that most people that I know started programming on C++ or Java and that Python really is a very good starter’s language. It’s simple to use, easy to run, unlike C++ and Java there are few set rules which allow you to proceed at your own pace and develop your style of programming. Have fun coding and remember that most of the tools I’ve listed are Open Source and all are free. So once you do become a master coder, please give back to the community that helped you on your way.

Tags: , , C++, Java

How I learn to program

Yesterday my friend Rohit asked me (in a comment) how I learn to program, or as he put it, “experiment with languages”. So I’ve decided to pull out my bag tricks and blog about how I learn to program.
There are lots of ways you can learn to program. Attend classes, ask friends, use the Internet, get a book etc. etc. For me, I took on a sort of challenge to learn how to program, without spending any money. So that means paying for classes and books is out of the question. So what do I do?
The first resource I reach for, is quite obviusly, the Internet. The Internet is the greatest repository of human knowledge ever accumulated. So use it. Generally, there should be a .org or a .com site for your language of choice. If there isn’t just Google for it. That itself should turn up enough resources to keep you busy for a week. In case you just want a quick overview of a language, just head over to Wikipedia and look it up. That’ll give you a rough feel of the language and will help you decide if you want to continue or look for another language.
Of course it is very easy to get overwhelmed by the amount of information the net provides you with. A lot of the information you find through Google will probably just confuse you. But there’s a little set of thumb rules that you can use to find the proper resources. Firstly, look for information and tutorials that are put up by people who are actually involved in developing the language. An excellent example would be the Python Tutorial by Python creator Guido van Rossum. Second, don’t look at tutorials that aren’t structured properly. If the document is in a very clumsy and inconsistent format, it will just confuse you. And absolutely avoid tutorials that stress on using a particular IDE, rather than the language itself. You should only worry about IDEs when you know the language very well. Third, a good tutorial or guide should provide a large number of examples and should explain them properly. One of the best ways to learn to program is to read though actual programs. Finally hang around forums, mail lists and the like. Not only are these good places to ask questions, you’ll learn a lot passively, by reading other people’s problems and solutions.
It’s certainly possible to learn programming, at least in popular languages, off the net alone. But in my opinion, if you are really interested in learning a language and are ready to spend some money, go get a good book. For a good book, it’s probably best to ask someone who teaches or uses the language you’re interested in. Still, O’reilly books are generally very good and comprehensive. Once again, try to get books written by people acting involved in the development and use of the language.
Books by Wrox are also quite good. I have read some books, mainly for C++ and Perl, and no, I didn’t buy them, I get them out of a library.
And most, importantly, write programs! You can’t expect to program properly if you don’t have practice. Ask anyone who has programming experience and you’ll learn that every once in a while you write some code which doesn’t do what you think it should do. The only way you’re going to reduce the number of times that happens is to actually write code and make yourself familiar with the language.
Finally, make friends with programmers. Friends are the best resource you can get. Not only will they help you when you get stuck, looking at their code will help you improve your own. Of course you have to find the right crowd, but that shouldn’t be too hard. And when you think that you’re capable of writing a mean piece of code, trying joining an open source project or starting your own. Once again, don’t bite off more than you can chew. Start off small, but do your work well.
After reading all that, if you still feel like learning how to code, go read How to Become a Hacker.

Tags: ,

Now using RSS feeds and Tags

    I’ve addded a new feed for the blog on the top right. The big orange button gives the actual feed itself while clicking on the other buttons will add the feed to the respective newsreader. If your favourite newsreader isn’t on the list, please leave a comment and I will try to add it. If you had subscribed to the old feed please change it to this one.
    Secondly I’ve decided to us Technorati tags in my blog posts instead of cluttering up the sidebar with an umpteen number of categories. I’m using the very elegant Performancing blogging client for Firefox. If you’re a regular blogger and use Firefox, I recommend that you try it out. I intend to post a full review of the client so stay tuned.

Technorati Tags: , ,

Ubuntu without a hard drive

The 5 CD’s of Ubuntu Dapper Drake just arrived and of course I popped one in the CD drive to take a look. I still don’t have a hard drive on the computer, so I was interested in testing out the live CD. This is the first Ubuntu distribution to combine the live and install CD’s into one. Once you boot from the CD, you’re into a default Live CD session. If you wish to install, all you have to click an icon on the desktop to start the process.

The Live CD seems to have been giving a lot of thought. It’s certainly faster and auto-configures my hardware better. Programs open much faster than the last Live CD and the new Ubuntu color scheme does look good. But there are drawbacks. It is certainly much slower than a normal install, and it is somewhat difficult to get onto the internet. I couldn’t figure out how to connect with my ADSL Broadband line. It is very good for demonstration purposes, show it off to convince a friend to try out Linux. However it’s not your best choice if you want a Live CD to use as your default system day in day out. For that better stick with Puppy Linux or maybe Kanotix.