I have been coding for several years now. I spent a lot of time in college before I started my first job or wrote my first line of code that made its way into production and while you may ask, “why is this any different from anything anyone else would have ever done?”, I specifically make a mention of this because I have repeatedly asked myself if I actually should have spent that much time in college before I entered the workforce. Well, hindsight is always 20/20, isn’t it? Not only that, it was almost a given at about the time I migrated to the land of milk and honey that you had to really study yet again before you started chasing the first of many of your dreams.
So, I went to college again and spent the last 3 of my almost 8 long years in college. I studied a lot and learnt a little bit over those years but it had little, if anything, to do with software. I didn’t think I would end up in software engineering. Neither did any of my friends. I had lot of other loves. Entrepreneurship was at the very top of that list. I didn’t know how to become one (and I am still trying to find out) but I wanted to be one. Other than that, I enjoyed Marketing thoroughly. So, I thought I would do something in the field of marketing. I thought I might be a lawyer except that I didn’t go to law school or didn’t even know where the nearest one was. Well, hopefully that gives you a picture of how very clear and focused I was a teenager and as a young adult.
8 long years and 3 Master’s degrees after, I finally got a sense for what I might really have to do to pay my bills. As much as I want to credit it to what I may have learnt at school, I would be lying if I did that. A friend of mine suggested that I should perhaps attend some programming classes if I intended to find a job. A job. Hmm.. Why hadn’t I ever thought of that or something like that? Clearly, everyone needed a job and I sure would need one too. Knock, knock. Welcome to reality! That was perhaps the most useful first learning for meThat happened not in 12 years of schooling or 8 years of college but in a parking lot while the two of us were waiting for a friend to join us.
And so, I decided in enroll in a couple of classes. I had written code before in college but it was because I had to enroll in those classes and they weren’t really voluntary and hence, any lesson that may have come out of it was soon gone and memory didn’t serve any of it. I remember when I walked into the Computer Science building much to the surprise of a lot of folks who went to school there who simply didn’t expect me to show up there. How can I forget the trust they might have had in my abilities? It was so much that they didn’t pick me in their project teams despite the fact that I didn’t know anyone else in the class! Not once, not twice but repeatedly. That was my second learning. Welcome to reality, one more time! Given that I had paid for the class, I had to be part of some team even if was the default last time where a bunch of us were bucketed into. That was good. At least, much better.
If I remember correctly and if my memory serves me right, it was a Distributed Object Computing course. Or, was it Object Oriented Programming in C++? Well, it was one of those, I think. All that mattered was that it gave me an avenue to write my first line of real code and I say real (for lack of a better word but also) because it was the first time I wrote code expecting it to land me a job at some point. So, I was pretty darn serious about it. I didn’t know what to expect but I enjoyed it thoroughly. It was at that moment that I realized what I wanted to do in the near future or probably for a long, long time. It wasn’t because I had to do it to find a job (though it certainly and unquestionably started out that way) but it was mainly because I enjoyed it. That was my third learning.
I attended many more programming related classes after the first one and wrote a lot of code in the next 12 months or so. I started looking for a job and thanks to some really nice people who didn’t mind hiring a fresher who knew a whole lot lesser than them & a company that didn’t mind all the paperwork needed to be processed shortly, I did find a job. I still remember my first line of code in the real world. I was worried and anxious but a developer who was as friendly as one could expect walked me through it. She walked me through every word of the one line I wrote before committing it. I had never seen a code base that big at that point given that all my work was limited to school projects. It was overwhelming but very exciting. I realized what I had learnt in the last few months might help but I had a long, long way to go before I could call myself a developer. That was my fourth learning.
I used to think that code which satisfied the compiler (at least, for compiled languages) or code that satisfied the requirements and did what it was supposed to do (from a UI or API standpoint, as a simple example) was good enough. Obviously, it isn’t. And trust me when I say that if it is obvious enough to you, it either means that you have been doing development work for a while or are a much better coder than I to begin with. I had little clue that there would be so many differences in coding styles, so many different technology stacks, so many different development methodologies, so many different deployment mechanisms and so many different ways of doing just about anything. I learnt it at some point along the way and that would be my fifth learning.
This last piece of learning brings us a little closer to what I felt like writing about today. Yeah, brevity has never been and perhaps never will be my forte. One part of what I do through my company is consulting work. It pays my bills and keeps me going so I can focus on what I really want to do (which if you had seen any of my earlier ramblings, you would know what it is). I pick up different types of consulting work and have learnt to be a little less picky about them as years have gone by. However, there are a few things I try not to compromise on, at least to some extent. Like the technology stack I work on, my read on the complexity of the problem I am asked to solve, the role I am asked to play, the rate I expect to get paid and so on and so forth.
Like everyone else, I strongly believe in what I bring to the table and more importantly, I take immense pride in my work. While I cannot understate the importance of a contract that is much needed to pay the bills (at least, for most people like I) and keep life afloat, I would be lying if I didn’t say that I consider myself blessed to have a career in software development – one that actually is not just something I consider worthwhile but also helps me find work time and again. So, I always believe that I don’t necessarily have to compromise on everything to find work. A few compromises, yes.
What has bothered me a bit lately is the tendency to trivialize software development. For starters, I am not the kind who trivializes anything because I honestly don’t believe anything is trivial. If you feel something is trivial, it is because you are very good at it. It is like my favorite composer, A. R. Rahman, creating music. He makes it seem all too easy but that’s simply because he is so good at it (and a genius!). What urged me to write this particular post (despite the fact that I repeatedly struggle to get to the actual point and get absorbed in the numerous digressions) is the fact that development is sometimes (and I feel like it is becoming more frequent) treated as a menial task. I would rather not go into the specifics but I say this in the context of me looking for contracting work every now and then & me getting the feeling, not to mention repeatedly, that there are some serious shortcomings in the hiring process that come in the way of potentially hiring the right candidate for the job.
If you are a developer or an architect and do something along the lines of what I do, you can perhaps relate to my gripe (or, maybe not!). Are there times when you feel that you could do what the position requires not just quite well but a whole lot better than what the client might even expect but are unable to seal the deal for numerous reasons? I see myself spending quite a bit of time between contracts trying to find out better ways to manage my time so I can actually spend time doing the work than doing the convincing. I try to do something a little better every time and I have to say it perhaps has helped in my saving a bit of time every time but I am still far from where I would like to be. Contracting is challenging in its own way but I still like it. Besides, I hope it helps me achieve my more important (not to mention, only) goal. A product that finds its way from the Git repository to one that actually has a paying customer. One day…
Thanks for reading and thanks for not dozing off!
— krish @ http://www.snowpal.software