Girish Venkatachalam is a UNIX hacker with more than a decade of
networking and crypto programming experience.
His hobbies include yoga,cycling, cooking and he runs his own
business. Details here:
More posts by Girish Venkatachalam.
Everyone wants to get rich and people have different ideas about it. When I say everyone, obviously I am generalizing and that is a risky affair. I know people who are not interested in money. There are exceptions everywhere but for the purpose of this article, I am going to assume that you want to make good money. Not only that, I am going to also take it for granted that you want to enjoy how you make your money.
That said, this article will hopefully help you get the best of both worlds. You make good money and in the process, you end up enjoying yourself too. But this comes with a big warning. Nothing in life is really easy and to reap rich benefits you have to wait for a long time. By long time, I mean at least a few years. Like any good investment, the returns are realized over a long period of time and slowly and surely you will start reaping the benefits of the time and effort put in.
Let us quickly cut to the chase. This is a technical website and we are going to discuss how to make money by programming. Tony Lawrence has written a book on how to make money through the Internet. Interestingly for getting exposure over the Internet you have to know Internet technology reasonably well. Knowing a technology reasonably well is necessary for us to perform simple day to day tasks like driving a car, fixing a nail through the wall and so on. But programming is about this and a lot more.
Programming is about dotting the 'i's and crossing the 't's. Programming is about sitting and coding till sweat and blood forms on the forehead. Jokes aside, in today's world knowledge is power. Knowledge has always been a source of power and joy for ages but in the Internet age, it assumes a lot more relevance and meaning.
Programming is a completely knowledge oriented activity and largely skills based. You put in sweat equity into it and over a period of time you reap rich dividends.
I am going to give you a fun way to achieve this goal. As I said before, this is not a quick fix solution. With all genuine investments in life, the payback happens much later. So you have to be patient. Sometimes real patience is necessary. Only then the fruits will taste sweet.
Becoming a hacker is not easy. It is not hard if you enjoy what you are doing. Now we talk about the second aspect of my article; having fun while you are on the job towards making money. Programming is a very rewarding activity. Creating technology today means mostly programming since even in designing a car or creating a chip or hardware component, some level of programming is involved. So that naturally brings us to the topic of domain expertise or knowledge in a specific area of interest.
You are free to choose any area of interest. It should appeal to you and you should be comfortable working on it for a very long time. Please be really careful and circumspect here. Most things that are glamorous and appeal to you in the beginning turn out to be boring later. Or not so rewarding.
Let me share my own example as I can narrate interesting anecdotes on how I got there. To begin with, I am neither a great hacker nor rich, so my advice should be taken in that spirit. I however am quite successful in writing highly technical articles and I have been running my own business for a while.
I chose the domain of TCP/IP networking a decade or so ago and focused on it. I studied most of the RFCs,I learnt a lot of UNIX commands and browsed and learnt from books like Tanenbaum, Stevens and so on. After a few years of this, I grew interested in cryptography. Crypto appealed to me as a rich source of mathematical challenge and intrigue.
I learnt a lot of crypto math and concepts from one of the finest books I have ever read - Applied Cryptography by Bruce Schneier. I enjoyed reading the book thoroughly and I did not quite stop there. I read up on all the information that the Internet of those days could provide. Google was very young in those days. Still I could easily find very good sources of knowledge on the Internet.
Computer technology is very interesting as most often we find that to learn something, the same thing helps us. Oftentimes we find that technology enables and empowers us so much that we keep benefiting from previous innovations at every step.
The only requirement from your side in this interesting journey to hackerdom is your time and undivided attention. Both are easily got when you have sufficient interest. And you keep the passion alive. Now I find that oftentimes people get very passionate in the beginning but quickly lose interest as time goes by. This is a very common phenomenon and such people usually cannot do anything meaningful in life.
As I told in the beginning, one has to be really patient in this game. You have to be in it for the long haul. There are several treasures waiting at your doorstep if only you survive the exhaustion of the marathon.
Not only in programming, be it any activity. Unless one loves what one is doing one cannot excel. There is also an art and science aspect to programming. Scientific thinking does not have to have inspiration behind it. It comes with hard work and practice. The ability to create great software comes from an undefinable art element. It is clearly inspirational and one has to apply common sense and passion to churn out software that gets this aspect right. Great programmers invariably are good at both. In order to learn programming, one has to read other people's code the same way actors watch how others act or musicians listen to other people's music. There is a lot one can emulate or even copy.
I have personally found reading open source C code very useful. It puts things in perspective and you get to know where you stand. It also tells you how most common problems are solved. Beyond a point that does not help. But reading other people's code does help you develop the scientific aspect of programming in a big way. I am sure of this.
But many people cannot tell what goes into making art. People attribute luck or inborn talent with it. I strongly believe that this can be cultivated, enhanced and sharpened by practice, passion and involvement. Having a practical approach and thinking from a user's angle instead of a programmer's angle helps. Keeping things simple will get you there for sure. Nature tells us that the simplest of creations stand the test of time and adversity. Your software also has to have simplicity. It should be complete at the same time. In other words it should not be simplistic.
Using other people's code and building on high level constructs help you achieve higher productivity and makes you a better programmer. Code reuse cannot be overemphasized since this is a given in today's competitive world. A very good example for this would be using the linked list library for C using the queue(3) functions. You have ready made functions available for most low level list manipulations where you often go wrong. So please for heaven's sake, learn to learn from other people's mistakes!
We have a lot of interesting problems to solve. No point in solving the same thing again and again. You should be clear where you can and should add value. Duplication of effort should be avoided at all costs. At the same time, this should not prevent you from trying out all things when you are learning programming. Did I tell you that defining art is hard?
I have always avoided using programming languages and tools that did not interest me. That way I ensured that the interest was kept alive. Lack of interest would certainly take away the art element and my output will not be perfect. Sometimes you will get confused because high paying jobs may require you to sacrifice the joy aspect of programming. I have tackled this problem by always siding with learning. I never compromised on the fun aspect. Ultimately it depends on what you want to do in life.
And as time flows by and once you endure the pain of mastering programming languages and learning how to use various tools effectively, you achieve efficiency. For instance, UNIX makes you highly efficient. We all know that but it comes at the price of learning it properly.
You will start reaping the benefits of UNIX very quickly. It will not take more than 4 months utmost to start realizing that after all it was worth your time to slog and read up on a technology or master the vi editor for instance. It is very funny since I am typing this article with vim and I have spellcheck enabled. I also know how to automatically wrap the sentences at 72 characters. I type my mails in vim. I can read UNIX shell command outputs into a buffer and place on the mail. UNIX enables me to do such tricks that can often baffle our friends.
It is the time when we start realizing the benefits of hackerdom that we feel impelled to learn more. This has a nice cyclical effect and more and more energy and enthusiasm will help you learn and hack.
Solving hard problems in computing is a never ending affair and if you love your job there is no shortage of problems that give you deep satisfaction. And if you do a really good job and get lucky, you could become a millionaire. And you make money without investing money. You invest your time. That is all. And have fun too along the way.
Hope you enjoyed reading this as much as I enjoyed writing. Stay tuned for more articles. Best of luck for becoming a hacker.
If you found something useful today, please consider a small donation.
Got something to add? Send me email.
More Articles by Girish Venkatachalam © 2009-11-26 Girish Venkatachalam
Don't blame me for the fact that competent programming, as I view it as an intellectual possibility, will be too difficult for "the average programmer" — you must not fall into the trap of rejecting a surgical technique because it is beyond the capabilities of the barber in his shop around the corner. (Edsger W. Dijkstra)