A Case for
the Design and Adoption
of a New Kind of Programming Test


In 2016, I (who were still very new to programming) made a very tiny utility tool called rall - its function is to put an carriage return before all line feed, thus turning all Unix style newlines into Windows/DOS style ones. Back then I wrote in the README file:

This thing serves as a small check of your understanding of the programming language that you're using. To make such a tool you need to know how to:

  • get the commandline arguments
  • read/write file
  • basic algorithm for string manipulation

at least. If you can you're capable of doing something meaningful with the language that you're using.

This task, together with the Hanoi Tower problem, has become my goto when trying out a new language. I never developed further on this idea, but now I think about it, there could be meaningful work to be done on it.

A new kind of test

This new form of programming test, which I shall refer to as the Programming Language Basic Adaptability Test (PLBAT), is aimed to serve two purposes:

  • To assess a new programming language if it can be reliably used for serious hobbyist projects;
  • To assess (or, in the case that he be successful, assure) a programmer his own power of learning, adapting & using said language for serious hobbyist projects;

For the said purposes above, tasks would need to involve vital aspects of software development but still be simple enough that people can easily come up with solutions for it. The CRLF-to-LF utility idea is probably one of the best task for it - the amount of other tasks one is able to achieve just from the knowledge of the aspects this task involves is huge; I asked ChatGPT to come up with other ideas and half of its suggestions are consistently variations (or very minimal extension) of the same basic task.

On the problem of fair evaluation

Some tasks might be theoretically possible to achieve but meaningless in a practical sense as an evaluation of a programming language. For example, one could make a Common Gateway Interface program (and thus opens up the possibility of making web applications) written in Brainfuck as long as you make sure all the needed values are preloaded into the paper tape before executing the Brainfuck program; but from the viewpoint of Brainfuck, reading and writing to the paper tape is still the only IO it can do, and it is at least very hard-streched to say (and sincerely believe) that Brainfuck is capable of doing web backend development.

I'm afraid that things that involves concurrency is similar (e.g. Go vs. JavaScript vs. Erlang), thus I think it would be better to have different tiers or categories like "PLBAT Core" and "PLBAT Concurrency", where the "core" tier is an evaluation of capabilities while all the "different" or "advanced" tiers are evaluations of a language's ecosystem and its adaptability with different computational/programming models.

Task completion can be easily judged and tested, but the wellness of the adaptation, judging by my intuition, is hard to evaluate, since the exact concept of "adaptability" and its measurement are hard to define; it would be better to have a hybrid evaluation approach that involves subjective judging. (Basic requirements, like task completion, should of course be a required thing.)

Adoption in the context of job interview

It genuinely is stressful to talk about anything about jobs and interviews, but I cannot ignore the possibility of this line of development from this idea. I'm suspecting that this kind of tests can be adapted for specific fields (e.g. frontend development) and address the issue of candidates claiming to be able to "learn on the job". Of course certain form of this already exists in the form of take-home assignment, but obviously it has the potential to (or worse, has already) become either (1) a way for companies to scam free works out of candidates or (2) a different kind of LeetCode that, while being better at some aspects and worse at some other aspects, is just as useful and/or useless to properly assess one's abilities.


Back

Last update: 2025.5.28