Improving My Coding Skills

Sat, Dec 19, 2020 4-minute read

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:

  1. I still relish math like I always did. I understood the concepts pretty well and am able to come up with correct solutions.
  2. 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.

  1. 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.
  2. 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).

  1. 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.
  2. 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.