My experience with Codility
Tags: career, beginners, watercooler
Published: 2020-11-18 11:15:40

Today I passed an aptitude test with Codility, aka completing a couple of programming puzzles in limited time. This post addresses beginners and more senior developers, and I hope you will all find it interesting.

## Where I stood

With ~30 years of coding experience (starting at ~12yo), I perhaps qualify as a veteran. I am a driven programmer - however much I love the Art, I *never* code for sake. That is also the reason I studied Architecture and Multimedia before landing my first coding job.

Say what? I enjoy coding, but never felt compelled to solving programming puzzles.

So I took the test as part of a multi-stage interview process, with:

- An inkling of what to expect (algorithmic puzzles)
- No prior experience (did do a practice test prior to actual, on the same day)
- My daughter (2yo) sickly at home
- My beloved wife under the weather, not at her best
- The beginning of a headache (still going, pain: 4 on a 10 scale

## Preparation

After the practice test I spent approximately an hour putting up a rig for the actual exam; this only provided compact `print` and `test` calls, along with std imports and another, dedicated print method for arrays.

Spoiler I did not use any of this. Codility provides an interface for writing your own test input, which I did not use either.

I then listened to [UA](https://www.youtube.com/watch?v=dvrMp_vV2OA) for 10 minutes. Switched to [Carbon Based Lifeforms](https://www.youtube.com/watch?v=KQE29az48gM) another 5, downed an Espresso and got started.

Sitting at a terrace over a noisy boulevard, halfway through I ordered another Espresso, one which, aside gently started cooling down, as the clock ticked, and the pressure mounted.

## How it went

If nothing else (and I doubt saying just that violates their [code of honor](https://app.codility.com/code-of-honour/)) actual problems during the actual test seemed significantly harder than the practice test (the numbers agree); the one thing that didn't sit well with me is you don't get to see all questions at once, so you're out on a limb deciding whether to catch another corner case or, altogether skip a task.

Codility is actually fun (in my opinion) and I'll probably come back for more although, if *fun* was where it's at I would rather be playing video games. 

Although I do not especially enjoy puzzles, I had opportunities to write both language parsers and game engines so, it would be extremely hard for me to not have learned a trick or two. 

Now picture an aging (40 years) burned out brain sitting cozily atop an ice cream cornet. 

Fun fact (consider it also - I mean, the fact) although I value velocity, as the saying goes *festina lente* (rush slowly) - meaning, in my opinion, timely execution of coding work is about picking your battles, not getting bogged down in the details, and remembering that untested code will break later.

All considered (once again close your eyes and summon the ice cream cornet and rusty brain image within your mind) I barely passed, so what?

A thing. I started one final task near the end. It seemed pointless for lack of time. It was not. I did literally score a few (badly wanted) *points* on that.

So much for putting a fight, up.

## Opinion

If you hate testing or documenting, you should probably be spending more time doing either. Anticlockwisely I relish structuring so I usually admonish myself to go easy on the 'architecture', as sometimes a job needs getting done, and not every sourcecorner needs be a [sistine, singing choir of angels](https://en.wikipedia.org/wiki/Sistine_Chapel#/media/File:Sistina-interno.jpg).

If you do practice, you will get accustomed to these programming puzzles, and they will not hold you back.

Granted, Codility is very 1.5D; you are programming "in vitro" which in no way is an indicator of your *overall* skill as a developer. How unfair!

Now, here's why I'll get on their site perhaps weekly, and practice more.

About once a fortnight, I run into a "Codility format" programming problem in real (coding) life, and I've been seeing many coders at work, slowing down when these problems arise (me included). In fact some developers aren't just slowing down when algorithms rear their ugly head, they actually shout for help.

My two cents here is, if you spend a little time practicing coding puzzles, two things will happen.

- You won't feel bothered when these problems actually arise.
- You'll be seeing new solutions to existing problems
- (To the extent that you have control over design and especially relevant to startup boot-strappers) you will design differently, valiantly plodding forward where you'd have bailed out / gone for the "easier solution".

In all beware self-indulging fallacies around grading and education. Yes, education is 2D. Yes again, no method designed to evaluate humans is ever perfect, and in last resort all of this is perhaps meaningless/futile. However.

If you're in the army, target practice can teach you something. Matters little that actual weapons of war are designed for spraying bullets indiscriminately - target practice still is good, however irrelevant to real war.

Likewise coding puzzles are perhaps better a tool for skilling up vs an evaluation method.

And if you are over 35 remember that, solving puzzles and speaking in tongues may delay brain death.

🌊 Keep learning and just one more thing:

[Don't test me!](https://www.youtube.com/watch?v=lwzZgMjoHJA) 👻