Satyam and the Indian software industry

I don’t usually write about industry because there are lots of blogs out there which do exactly that. However once in a while, things happen which warrant an exception. Today is one of those days. Even though most of the world is reeling under the blows of the credit crunch, my home country of India is relatively unaffected. But one financial situation that is currently worrying involves one of the Indian IT industries giants: a company called Satyam Computer Services Ltd. The company provides various IT services around the world and serves over 650 companies, 185 of which are Fortune 500. A few days ago the company’s founder and chairman admitted to falsifying financial records to the tune of millions of US dollars. The company is in severe trouble and a new board has been appointed by the Government to help it. More importantly, the company is in serious danger of going under causing thousands of people to lose their jobs and there is talk of a government bailout.

Being an IT company, a large fraction of the company’s thousands of workers are programmers. Yesterday a national newspaper reported that credit card companies and banks are freezing the accounts of lots of employees because it seems unlikely that Satyam will be able to continue paying monthly salaries and so the employees won’t be able to paying their credit card bills. While the average Indian isn’t as dependent on credit as people in western countries, this sudden loss of financial backing for the common employee is troublesome to say the least. And even if Satyam can somehow be salvaged, it seems inevitable that at least some programmers will lose their jobs.

The unfortunate truth is that being an employee you have almost no way of knowing what is going on at the higher levels of the company. While it might seem like your employer is treating you well and is doing great, the truth may be quite different. After all no one could have predicted Satyam’s current crisis until it errupted into full public view. Especially if you’re a programmer, it’s unlikely that you know (or even care very much) about your employer’s accounts.

I’ve always had mixed feelings regarding the Indian IT industry. The largest computer technology companies are geared towards providing services for other businesses. Unlike the large US technology companies like Microsoft, Apple or Sun, the Indian companies aren’t really involved in actually producing new consumer technologies. Outsourcing is, to a large extent, the lifeblood of the Indian IT industry. The constricted focus of the companies also means that their employees have a more restricted set of work opportunities. I don’t think you’ll be finding any compiler writers at Satyam. While outsourcing has greatly boosted the Indian economy in recent decades, I think the high salaries paid by these companies have lured away a large number of intelligent minds who are currently working on problems that are far below their potential. There is also an dangerous shortage of talented minds working towards advanced degrees in computer science and engineering, which I feel will shortly lead to a serious shortage of educators.

This is an important time for the Indian IT industry. The fourth largest IT company in the country is struggling and another large company called Wipro is in trouble with the World Bank. It is almost certain that this will have some effect on the readiness with which companies will outsource their IT needs in the near future. I hope that this situation will make people realize that there is much more to computer technology than IT. I would like nothing better than to see companies start producing technology that can be widely used: frameworks, developer tools, maybe even new platforms. On a large scale I’d like to see Indian competitors to Microsoft and Sun emerging. Even if that doesn’t happen (and I’m not very confident it will) I hope that programmers around the nation will realize that their jobs are not the best they can have. I would love to see some of these programmers start their own companies, perhaps to fulfill local IT needs rather than attract outsourcing. These are troubled times indeed, but it’s times like these that breed innovation.


Change of scenery

I’m back from a refreshing vacation in South East India. I didn’t miss the internet and computers as much as I thought I would. The break gave me some time to think about things I want to do in the year to come and I also discovered that I’m interested enough in photography to take it up as a serious hobby. I have some ideas for what I hope will be interesting posts in the days to come. While I’m actually writing there posts, I’m doing a gradual redesign as well. I really wanted to go with a darker theme, but I couldn’t find one on that I really liked (another reason to switch to independent hosting in the future). So I decided to use the Garland theme (which I’ve used before), but with a dark color scheme. I have mixed feelings about this theme. I would have prefered more control over the colors, but I don’t want to pay for custom CSS at the moment.

I used to have the top posts widget in the side, but I’ve decided not to keep it. The posts which get the most search engines aren’t really ones that are representative of what I would like this blog to be. I’m still trying to figure out what would be a good way to present new readers with a list of good posts, but for the time being I’ll stick to just having the recent posts show up. I’ll be using the left sidebar as a more direct channel to the outside world, with my Twitter and feeds being displayed. I’m also working on rewriting the About page and adding a page with links to longer articles. All this is part of my effort to make this more of a well-rounded website representing who I am and what I do, rather than just another blog. As always, comments on the redesign are very welcome.

A week without Internet

I’m leaving tonight for a family vacation for about a week and as far as I can tell I’ll be without an internet connection for that time. I don’t think I’ve ever been without internet for so long since I got online in 2001. I shouldn’t be bored with all the sightseeing that’s planned, but just in case, I’ve packed a bunch of books which should help me pass the time. I won’t be having my laptop with me either, which means no programming either. I was looking forward to learning Lisp properly before college started again, but considering this is my first real vacation in a long time, I’ll gladly accept the delay. And I’ll still have two weeks to catch up. So check back in a week for something more interesting.

Reigning in your passion

One of the central features of the hacker mindset is that we thirst for novelity. Whether it’s the latest new operating system, programming language, framework or platform, we hackers are instinctively drawn to explore the great unknowns, to boldly go where no one has gone before. Without this quest to find something new Linus Torvalds wouldn’t have gotten eager volunteers to hack on his hobby operating system, the dot-com boom of the 90s would never have happened and we might still be using computers with 2Mhz processors and 64KB of RAM.

However while this inquisitiveness drives industry and innovation, it can be somewhat damaging for the lone hacker, especially for someone who is still very much in training (like myself). There’s so much to do out there, so many shiny toys to play with, it’s hard to make up your mind about which ones to try out. It’s very tempting to just go about trying one thing after another. Unfortunately, if you’re looking to be an ace coder at any point in the not-so-distant future, you’re going to have to reign in your passion and curiosity, sit down and make some choices. Case in point: me.

Ever since I’ve been coding seriously (about three years now) I’ve been writing code for memory managed environments: first Java, now Python. Memory management does have it’s advantages: you can focus on the higher level algorithms and data structures and let the environment take care of the details. I have a limited idea of pointers and manual memory management and I’m sure that a lot of the code I’ve written would have been rather more tedious to write in an unmanaged setting. However, at this point I do feel somewhat spoilt by having all this work done for me. Also I did flirt with assembly language a while ago and I’ve always had a love for working close to the metal: actually understanding and controlling what the machine did as it processed my instructions. All these things being combined, I’ve been developing a thirst to do something low-level and actually taking the time to learn to write C and C++. Luckily for me I’m having a software engineering course in C++ and a computer organization course next semsester which will give me ample opportunity for low-level programming. But with 3 weeks still to go before my courses start, I was tempted to start learning some C on my own. And I would have if it weren’t for my other great current interest: Lisp.

Lisp is more than a wonderful language: it’s a whole new way of thinking. It’s functional style combined with macros make it powerful tool for a wide variety of problems. Moreover, the Scheme dialect is great tool for learning basic algorithms and computer science concepts. I’ve been in contact with Scheme for more than a year, but I’ve hadn’t the time to actually sit down and learn it properly. I’ve also been hoping to go through and actually finish Structure and Implementation of Computer Programs. The next few weeks with nothing much to do seemed like a great time to buckle down, learn some Lisp and rehash some fundamentals. Unfortunately, it won’t be easy doing that and learning C/C++ at the same time.

Therein lies the hacker’s dilemma: you have two amazing problems (learning C or learning Lisp) both of which promise endless hours of intellectual enjoyment. It would be great if I could do both, but I’m only human and if I do both, I won’t  be very good at either. For me it’s just the question of learning a new language for my own benefit, but in many cases it can be more important: choosing a framework for your webapp, a platform to develop for, different ways to organize your project and your team. Staying stuck in this dilemma for too long isn’t productive at all. My courseload for my first semester at college was pretty light, and I wanted to do some serious programming in all my free time. Unfortunately I faced the same choice: between Lisp and Assembly. I never came to a clean decision and as a result most of my first semester was wasted. In my last semester I had a choice between studying programming languages and parallel computing. Since I would actually be doing a course, I had to make a choice and had quite a fruitful semester learning about programming languages.

Now it’s time for a choice as well. I really don’t want to waste the next three weeks not doing anything substantial. I’ll be learning C/C++ next semester anyway and I already know enough that the first few weeks shouldn’t be too hard. Keeping that in mind I’ve decided that I’m going to put C/C++ on the shelf for the time being and focus on Lisp and finishing SICP. Once the semester starts, I’ll have to reevaluate and probably devote more time to C++ keeping Lisp for the weekends. There are some more choices I’ll have to make soon: focusing full time on my current research or exploring Scala and Hadoop, but for the time being, I’m not thinking about it. But one thing is certain: I’ll only become an expert programmer if I can balance my curiousity and passion with a healthy dose of realism and focus. I have passion and enthusiasm (I think) but the focus could use some work. One more thing on the list for this year.

New Year’s Resolutions: Hacker Style

It’s that time of the year again, when you take a look at your life, decide what parts of it suck and then make a proclamation of change. Sure most resolutions don’t work out and resolutions probably aren’t the best way to make a lasting change in your life anyway. But even you don’t stick to your resolutions, they at least make you think about the things that need improving. Normal people might resolutions about exercise or spending wisely, but here are a few resolutions for the hacker in me:

1. I will learn to type faster

I normally type at about 35-50 words a minute depending on what I’m writing, what sort of a keyboard I’m using etc. Considering that I think much faster, typing represents a significant bottleneck in communicating my thoughts to the outside world. I’m going to learn to type faster, hopefully gettting upto about 100 words a minute over the next few months. I’d love to take a physical typing course if I could, but I’ll settle for an online course if I can find a good one.

2. I will learn to hack Emacs

If you’re a programmer typing faster will only increase your effectiveness so much. It doesn’t help to type fast if your tools get in the way. Emacs is the most powerful editor in the world with the possible exception of Vi (though I’m not convinced of that). It’s most important feature is that it is easily programmable in Lisp. The only other piece of software that comes close enough is terms of programmability is Firefox, but it’s still much harder to write a Firefox extension that it is to write some Emacs Lisp code. I’ve written a bunch of utility functions already, but I’m going to learn more, especially since I’ll be focusing on learning Lisp this year. My goal is to get to the point where I can improve the Scala emacs mode which is quite rudimentary at this point.

3. I will post to my blog more often

I think everyone should write a blog. Putting your thoughts in writing is productive and therapeutic and everyone can use a little once in a while. I’m glad to say that last year was my most focused blogging year, but I’m ready to take it further. I want to maintain a steady rate of a post at least every other day. I have just over a hundred RSS subscribers right now and I’d likely to get that number past 500 by the middle of the year.

4. I will set up an ergonomic work environment

I do most of my programming on my laptop, but I also spend a fair amount of time when I’m not coding on my Mac mini. My setup isn’t very ergonomic at all and considering how much time I spend a day in front of a computer, I’m seriously concerned about developing some form of RSI (especially since I have a family history of back and joint problems). I’d like to set up a more ergonomic workspace where I don’t actually type on my laptop if it’s not on my lap. I’m considering getting a better keyboard and hooking it up to the laptop (and using a second display) which would let me have a more comfortable position. Losing some weight wouldn’t hurt either.

5. I will actually USE version control for my files

I’ve had my files under Subversion control for the better part of last year, but I can’t say I used it properly. I’d often forget to add files and only realize it when I tried to pull my files to another machine at which points it was too late. Subversion also had a number of drawbacks (mostly branch and merge related) which meant I didn’t use it as much as I could have used a versioning system. But I’m moving to Git and I think it’s features combined with some careful usage on my pattern will let me actually use version control on my files in a useful way.

6. I will get a life

I try not to fit into the physically inept anti-social nerd stereotype. I really do, even though sometimes it’s relaxing to just the door and embrace my geekiness. But there is more to life than computers and code (belief it or not). Though I do have a great circle friends and do enjoy the occasional party, I feel there’s a lot of college life I might be missing out on. So I’m going to make an effort to be more social and try out new things next year. I don’t have anything specific in mind, but I would certainly like to go out more and meet new people. Here’s looking forward to a great 2009.