What have you built recently?

I decided to learn python recently. Going through the usual motions of starting with variables to moving to loops, something did not seem right.

This exercise was not fun. So I said screw it, I want to build a tictactoe game in Python.

https://github.com/hvd/TicTacToe-Python

The rest followed. It was hard no doubt having to learn new paradigms, but having a clear goal in mind helped in gathering the relevant information.

I think a massive shift is needed in how we learn from kindergarten right to grad school and even later in life. Learning by doing is certainly the best way in my opinion. Yet, that is not the way we think natural.

Think about it, how did you come to speak the language that you do today? Did you learn by first learning the theoretical basis and the grammer or by listening and being absorbed in an environment that literally leaked that language (your family).

Building a simple game like TicTacToe taught me valuable lessons.

1. Rome was’nt built in a day, the same goes for software.

2. Gaining skills takes time, Be patient.

3. There is great joy to be gained from building something from scratch and that in itself is reason enough to do it.

4. This is a form of deliberate practice. Pushing yourself beyond what you can do currently is deliberate practice. Building something that you havent yet will invariably involve some aspect that will push your limits.

 I still haven’t decided what I will build next. I would love to know what you have built recently?

 

p.s While building something is natural for programmers, architects, carpenters… There will be analogous situations for people in other professions when equated with deliberate practice. Remember 10000 hours is the magic number to hit.

Cheers!

 

The Essence of a Software Developer

I do end up spending quite some time after work thinking what is it that makes a Software Developer great? Being a newbie in the craft this is a very pertinent question. 

The starting point of course is my mentors. They just seem to get it, while I will take time to come to  a solution, my experience has been whenever a codebase question pops up, all it takes is one glance or  maybe two for them.

Next come Messrs Spolsky and Yegge. As far as dev potential goes, the Spolsky school of thought prefers the Smart and gets things done while the Yegge one is all out for the Done and gets things Smart. The latter is a recent discovery(for me) and I think the question now is How does one move from Smart and gets things Done to Done and gets things Smart.

Getting things smart, now that is something. Some of it is inbuilt agreed, but what we(newbie devs) do have in our control is deliberate practice. Being a follower of study hacks, we do want to keep learning new things which may be few in quantity but master them.

Some of the things I am working on:

1. Learn to type(fewer glances to the keyboard is a big win!).

2. Start off your day with a sort, flex those algorithmic muscles you have .

3. Read the reference,best practices, design patterns of your favorite language.

4. Open Course ware: Top universities have made entire Computer Science courses available online, see what piques your interest and go for it.

http://academicearth.org/subjects/computer-science

This is my favorite for data structures:

A lot of knowledge will be assimilated from your peers or mentors, that is the nature of  Software. My understanding is there is no magic bullet, It is with time and sustained effort the top developers are truly great. Going through the pain as I am now, stumbling out from ignorance into light, I still have to discover what is it that constitutes the essence of a Software developer. For now I am hungry and foolish.

Day in the Life of a Software Developer

1.Wake up, Check email to see build status.

2.Get ready, reach work(which really is 3 feet away if you are working from home).

3.check email again for major changes to codeline. 

4. Start Eclipse(or suitable IDE, Visual Studio maybe , EMACS or VIM if you are hardcore linux)

5. Resume coding on feature you have been thinking about in your dreams.

6.Always be vigilant whether the tools you are using are licensed, free as in free speech, free beer or

both.

7. Meetings (May vary depending on if you are Agile or some other variation)

8.Lunch (Grab a sub or something else and get back to your cube) 

9. Talk to colleagues in the break room intermittently about the feature/codeline.

10. Run automation tests against code.(varies)

11.Tea/Coffee + Sunlight break at 3:00 . Get Tea and step out in the sun, think about the code you have written and the code you are going to write.(Believe me Sunlight does wonders for Programmers)

12.Back to coding.

13. Check in code before leaving (again varies)

14.Reach home and VPN In the n/w.

15. Go biking or whatever it is that you do.

16.Read Hackernews.

17. Have a nice dinner(not necessarily cooked by you) while watching netflix streaming,youtube.

18.Prepare for next day(By now you do realize you are in a infinite loop)

 

The Case for Open Source Development

One year ago, I was fresh out of grad school  having secured a Master’s in Computer Science. A Master’s program certainly made me delusional as far as the job prospects were concerned. I strongly believed that seeing my  credentials as someone who could do research getting a job would be a piece of cake. This was towards the end of 2009, when the effects of the recession were still in play.  I ended up working for startup x doing uninspiring work.

Mid 2010 as I was stumbling, for those unfamiliar perusing http://stumbleupon.com. I came across http://preyproject.com. It was something that immediately caught my attention even though the webpage was in Spanish. Running it through google translate I quickly realized this was something I cared about, A geo-tracking software for Laptop’s, mac’s and cell phones. Discarding all my inhibitions I mailed the developers Tom and Carlos asking if they needed any help. They were kind enough to respond positively and I found myself involved in a Open Source Project based out of Chile.During the course of my interaction with Carlos, I became acquainted with git, Blackberry app development and most of all rekindled the spark of software development in me which was missing since high school.

I moved to California and now write extremely inspiring server side enterprise software. Open Source Software is an idea that cannot be ignored. My experience with PreyProject helped me deliver at BMC by engaging with the Open source Community which is one of my responsibilities in addition to building cool stuff I can’t write about. At BMC I am still learning the various facets of Software Development being surrounded by amazing Developers and working in an Agile team.

Prey took a back seat but I was determined to deliver on that front too. Last weekend I pushed onto github the “Lock” module for the Blackberry version of Prey. The Lock module is essentially a global UI that is triggered onto a mobile screen by a push from the server side, which disables all actions on the blackberry and can only be unlocked using a passphrase set at the serverside. Furthermore, the cool thing is that since Prey runs as a service on the device turning it off and then on simply means the service starts again with the device, and if the lock attribute is set at the server side the Lock will be in play again!

Today I ported the code with the Lock addition on my Blackberry Curve. After testing functionality and seeing it work, I was filled with Pride and Joy. Pride that I had created something of value, Joy that I had created something beautiful and  that I had created something that I really wanted to do. I created a feature which may well be used in millions of devices. But even if it isn’t that wouldnt diminish my joy one bit.

One may well say there is no financial gain out of this exercise. I was reading Pete Sampras’s autobiography the other night and he said he must’ve hit a tennis ball at least a million times before he ever set foot on court in his first major match. If you have read Malcolm Gladwell’s Outliers his hypothesis is to gain expertise in a field One must spend at least 10000 hours engaged in tasks of higher complexity than the previous one. 10 years to become a expert software developer as outlined by Peter Norvig. I might have come late to the party but I sure do intend to be an expert Software Developer with time. Good Software Developers are Craftsmen or Craftswomen and what makes them so good is practice. Open Source development is a very effective way of engaging with the best developers across the globe and creating a meaningful impact by doing  something you like to do. Furthermore Open Source software is a unique repository of millions of lines of code open to inspection by anyone. Read code, write code then read some more code.

So stop for a moment, Find a project you like on github or sourceforge. Join a project, Drive a project but most of all remember the time when you were a kid, when anything was possible and create something just for the Joy of it.