An advice for someone graduating from high-school: Focus on the Oyster.

I had a conversation today with a friend who is graduating from high-school. Amongst other things, he had some questions about choosing computing as a career option.

Some background is necessary. He is really good at high-school level Maths and Science and one of the options he is considering is a career in Engineering. He is not sure what branch of Engineering – Computing / EE / Mechanical / Chemical / Civil. He wanted to know what I think about it. He also had a few questions regarding Computing specifically:
a)    Every year there are new languages, packages and applications released. Do I need to really study and “keep-up” (his emphasis, not mine)
b)    Most people I know in computing work long hours. Do I need to work like 12-14 hrs a day and sacrifice my personal life.
c)    Lots of people I know graduate in history, philosophy etc and then move over to computing. Should I try that ?

First things first.
I am really honored that he sought out my advice on such an important decision. Needless to say, decisions like this are not to be taken lightly. I am going to attempt to answer the specific questions raised here and then give my reasons when I decided to go into computing.

Specific answers:
a)    Every year there are new languages, packages and applications released. Do I need to really study and “keep-up” (his emphasis, not mine)
ANSWER: That depends on how you look at it. Some, will try to use this as an example of constant innovation (which is good?) in computing. But I will try to reason differently.
My logic is more utilitarian than anything to do with innovation. Twenty years ago, if you are trying to create any distributed application in C/C++, you will have to write huge amount of scaffolding, not to mention you have to keep track of garbage clean-up, database connections, persistence etc. Modern languages do the “plumbing” and “scaffolding” for you so that you can focus on your business logic.
Also people realized that you cannot have one programming language do everything. Some languages are better suited to certain tasks than others. It can be a combination of abilities in the language itself or availability of libraries thereof. We don’t have one-way of doing things. We have perspectives, and we use appropriate tools (languages, databases and frameworks) to actualize those perspectives.

End of the day, you don’t learn everyday not because you have to or you will fall behind. You learn everyday because everyday brings in joy and wonder by collecting these pebbles on the sea-shore of knowledge.

b)    Most people I know in computing work long hours. Do I need to work like 12-14 hours a day and sacrifice my personal life.
ANSWER: I don’t think people work long hours in computing anymore. You can finish up your job quickly as long as you plan and schedule things. You have to be realistic about your assumptions and factor in external factors which affect you. The very idea that you can go straight 30 hrs and come-up with some whiz-bang thing at the end of it, is not scalable. There is a good chance that you might end-up hurting the project than helping it.

c)    Lots of people I know graduate in history, philosophy etc and then move over to computing. Should I try that ?
ANSWER: I am not sure how to answer this. I do know of people who graduated in something other than computing and moved in to computing for various reasons. As long as you do it for the love of the game, it’s good. If you are switching to computing because there are more jobs and money in this field than something else – well, as long as you can keep your sanity and don’t feel overwhelmed, I guess that’s good too. I have a hard time judging the reasoning for my own actions, let alone evaluating others.

My reasons for getting into computing:
I was always uncomfortable with the decision-making process of “some” people. I believe too much was left to individual discretion. There were instances when I believe I finished the task to completion, but some saw it differently. I had an issue with the way they applied discretion, and I wanted a single objective mechanism to do a certain task and be evaluated objectively with a Yes (Good) or No (Not Good) answer. I am intentionally trying to keep it simplistic to avoid going on a tangent. I do understand that most decisions cannot be evaluated in a Yes/no situation. I was a cocky weird kid and had a mind of my own about almost everything. If I followed the heard, I had my own qualms about my following without not knowing and consequences of my own actions.

And then sometime during college, I found this post on Phrack written by ++The Mentor++
This was an eye-opener of sorts. Especially this part:

I made a discovery today.  I found a computer.  Wait a second, this is cool.  It does what I want it to.  If it makes a mistake, it’s because I screwed it up.  Not because it doesn’t like me…
Or feels threatened by me…
Or thinks I’m a smart ass…
Or doesn’t like teaching and shouldn’t be here…
Damn kid.  All he does is play games.  They’re all alike.

And then it happened… a door opened to a world… rushing through the phone line like heroin through an addict’s veins, an electronic pulse is sent out, a refuge from the day-to-day incompetencies is sought… a board is found.
“This is it… this is where I belong…”
I know everyone here… even if I’ve never met them, never talked to them, may never hear from them again… I know you all…

Damn kid.  Tying up the phone line again.  They’re all alike…

I had dabbled in programming since I was in school. Did bunch of weird stuff. I didn’t know what I was getting into, but that paragraph resonated with me so much more than anything I had seen, heard or read till that point in my life.

I was out of control after that.
I read up ESR’s, howto’s, phrack and Alt2600’s and burnt all my pocket money doing this. I remember wget-ting Jakob Nielsen’s whole site on usability and going through it over night. (I am still not sure why I did that, but I loved his line of reasoning.) I really didn’t know if I learned anything tangible, like a language, or a program or a database, but the philosophy has stayed with me ever since. (Some people may call it tangible 🙂 )

I tried getting into a computer science course, and when I couldn’t, I took up Physics thinking that’s the easiest thing to graduate, and I thought yeah well, I can still do my computer stuff in spare time. (There were other reasons to take up physics, and one Mr. Richard Feynman’s biography by James Gleick played a far more important role in that decision.)

I studied all the things that I can lay my hands on.
Funny story. I had a BSD SystemV Manual but I didn’t have a Unix terminal or a computer to practice this on. During those days I would usually print out the man pages on a dot-matrix printer from the diploma school I was attending, and write my code by hand on the other side of the pages. That practice enforced a certain discipline. I had a 2 hr time to type, compile and test my code on a SCO Unix machine and I didn’t want to waste it by typing gibberish and wondering what’s going on. I miss that. I think I was better at programming during those days without IDE’s, Intellisense, debuggers and object reference guides. It was just – write by hand, inspect the logic, check the loops and then type and compile.
School level stuff, but I loved it.

My key argument in favor of computing:
The things what you can do with computers is limitless. Apart from the oft repeated that everything runs on computers, I have an example of my own.

We eat out often, and we pack a lot of stuff “to go” and keep it in the fridge. Two weeks later while cleaning the fridge I find this really sorry looking pie which I was supposed to eat – well 2 weeks ago. I would like to have a program or a device which alerts me when things are going to go bad in the fridge so that I can consume it in time and not throw it.

My friend had a use-case too. This program or device can be applied to keep track of all the expired pills in the medicine cabinet. What a great idea !!

So we have two use-cases, but no program or device that can accomplish that. This is my prime example of why we need innovation in computing. I am not sure if this feasible, or how I will do this. Should I take a picture of the fridge and do an object matching, based on shapes – that would mean keeping a large database of shapes of consumer objects. There might be some pattern recognition library and you can run it on Amazon products database to get your “shape” database.
OR, maybe you can have a tablet type device which stays in the fridge take bar-code scans (wont work for cooked food, do we have a tablet which can function in a fridge ? What about power-supply..)
OR, maybe you can look at the Arduino market place and look for similar offerings with a combination of searching for alternatives in your favorite search-engine.
Maybe someone thought of this in the refrigeration industry and beta-testing somewhere.

The possibilities are limitless and there is a huge scope for creating something which has not been there before. How cool is that ?

My most important reason:
The joy that you get by watching someone use something you created; and if they love it and give you feedback, what else do you want in life ?
I cannot design a bridge or a building and get instant feedback on how it’s doing. I cannot design or do stuff to chemicals without a large lab. Same goes for other engineering, tools are required, and I may not have them at my disposal when I want them.
But yeah, I can whip up a code and run it and get the results – all within 15 minutes, If I am good. (Emphasis on If I am good.) If I am not, the Truth Machine (or the debugger) tells me what’s wrong with it.

Why choosing a career that you love is important:
It takes a tremendous amount of energy to get out of bed, get ready, do the commute, and get to your desk. If you don’t love what you do, your mind will soon start rejecting your job and you will see the result in your own actions. You really need to find stuff that makes you tick, that makes you happy and for the lack of a better word – stuff that’s cool, and awesome, which makes work feel like play.

It’s not just a blackberry ad – Love what you do.

The other day I wrote a Powershell script and was watching calls being made from Powershell which were getting logged in the debugger.

Man, it was awesome !!
It was a crappy script, but it was my script.
Every time someone passed a wrong argument, I felt like telling them —DUDE !!! Let me help you.

I didn’t do programming after I graduated from college. I did a bunch of other stuff, and then went into System Administration.

I am starting fresh with Powershell and I feel all that excitement coming back.

The world is my Oyster.

PS: Thanks for reading :-). It’s rather long.