Improving My Coding Skills
I recently finished a course on Coursera. Machine Learning from Andrew Ng. Its been on my radar for the longest time and after several false starts, I finally completed mid last month. But along the way I learnt two things:
- I still relish math like I always did. I understood the concepts pretty well and am able to come up with correct solutions.
- I am somewhat terrible at coding them up. Now that’s a big surprise to me. I’ve been writing code for quite a long time now. After learning half a dozen programming languages and spending almost a decade writing code, it is a bit of a shock that I find it somewhat difficult to code up the algorithms. And especially in Octave/Matlab.
I got thinking. I have built an entire application with all its shenanigans using python. I have been running it on AWS for at least 2 years now and I haven’t so much as contacted their support for anything other than increasing limits. And yet, here I am unable to code up a simple nested for loop to implement a linear regression model. I realised the problem to be, again, two-fold.
- It isn’t so much that I cannot write a simple loop in python or R. I figured that I have trouble breaking down some types of problems. And I find that data-related problems are very involved. Especially, when you stop looking at textbook examples and start collecting your own datasets.
- When you develop for the web, many things are readily available. Once you fire up Django, you have a base to build on. Getting that base seems to take a while when working with ML type problems. And I think it is because there isn’t a single right way to do things. There are multiple and what works for you entirely depends on your dataset, your set of problems and your background/experience. And stack overflows are somewhat useless for beginners.
That’s when I decided I need to work on this. Not just ML type problems, but programming in general. So I decided to do two things (again).
- Increase my open source contributions. But I don’t want to join any mature project and try to contribute patches, yet. I am probably going to be just as overwhelmed doing this. I found a nice idea where I could contribute as a beginner/n00b. It is very similar to the web, but it is in Common Lisp. A language that I am not yet very fluent in. This leaves me in familiar territory but with the unfamiliar toolset. I am not doing great, but I am learning. I hope the fellow contributor has enough patience to wait it out for me to catch up. Here is the project: nastafile.
- I joined a learning community called build2learn. I signed up to work on a fairly complicated project. I haven’t started any work to show for myself yet. But the whole idea for me here is to learn to manage complexity. I’ll soon have a couple of GitHub repositories for the work I do as part of this.
There is another thing that I have been noticing and wondering how much I should act upon. I seem to be losing interest in coding mundane stuff. Much of a product development is the mundane stuff, especially after the first version is done. It is a lot of polishing for trivial things – trivial as a programmer but for the user it’s probably everything. Say, a profile page and a profile update page. I still find enough motivation here and there to push along. But this is a dangerous trend. On the other hand, I am a tonne interested in other aspects of the business: especially marketing. I wrote a bunch of essays for our product at my work and they seemed to work out well. I almost always design the email campaigns, I take a lot of interest in giving feedback and analysing the data we get over these campaigns. I know am definitely in sync and can do a whole lot more in this space. But that also means I need to shed my identity as a code monkey. Tough call, and I never thought such a day would come.