Aug 25, 2020

Evaluating Programming Knowledge

Today I did a test to evaluate my programming skills. It was a classic test where you implement some algorithmic solutions, much in line with the kind of problems you can solve at Hackerrank or LeetCode. It made me think about how you can actually evaluate somebody's skills.

I found the test well written and good, but at the same time I believe that the skill to implement smart algorithms is not really the primary skill needed to be a good programmer in a corporation. It is perhaps indicative, meaning that if you are good at implementing algorithms, it shows that you have some experience with programming, which means that you might very well be good at other things as well. But the everyday tasks when working in a big corporation feels like they are actually quite remote from that which you would in school learn that is called programming.

I think most of all, what many people work with is taking decisions on what piece of cloud infrastructure to use where. It is no longer a question of programming in the traditional sense, rather it is a kind puzzling that you do with some different ready made components. The skill you need is experience with these components, and understandings of what their limitations and strengths are. This is, in my experience, where you spend a lot of time as an experienced developer.

When you are a mid level developer I feel it is about using different libraries in your code to communicate with databases etc. It is then again about knowing about these different libraries, and what their strengths and limitations are.

Finally, as the more Junior, and also hence perhaps the most hands on developer, I feel that you actually do get to do some implementations, but I feel that it is more about using design patterns for solutions. In the most simple cases the coding is very straight forward, such as making a button blue or something like this. In some cases philosophical questions arise, such as how do we communicate state between different components of our application or something like this.

But actually implementing algorithms counting prime numbers etc. ? I find it really fun, but I have not encountered it very much in my day job.

Code of the Day

function createItem(w:number, h:number) : LayoutItem {
  lastItem = {
    getWidth: () => w,
    getHeight: () => h,
    setX: jest.fn(),
    setY: jest.fn(),
  } as LayoutItem;

  return  lastItem;

I suppose I will find out if this is a good idea or not. I'm doing a layouting library, that operates by calling setX, setY on new objects that are added. It feels a bit painful, since I always prefer doing pure functions, and this is naturally not pure functions. The advantage will supposedly be that there will be less boilerplate in the code using this library. Why I use setters? I want libraries to be allowed to for example animate the movements of layout objects.