29 Jan 2020

Programmer commentary

History / Edit / PDF / EPUB / BIB / 2 min read (~365 words)

Is a programmer commentary something that can provide value?

A few years ago I was learning how to drive. One of the techniques they teach in order to learn the basics of driving and help you reduce the amount of stress related to driving is to comment on what you are doing: I'm looking at this panel that says the maximum speed is 50 km/h, I am watching in my mirror, I am signaling that I want to move to the right lane, I'm checking my right dead angle, etc. The use of this technique is that it makes what you are doing in your head explicit by saying it out loud. There's a similar technique called pointing and calling that is used by Japanese and Chinese railways drivers in order to keep focus and attention.

When we're doing pair programming with someone else, we will often communicate with the other person what our current intent is and what we're currently trying to write down. It may help us clarify our objectives or express clearly the various steps we'll have to go through. In the case of pair programming, one of the benefits is that someone else is there to double-check what you are doing and what you're about to do.

I'm the context where you are programming by yourself, you can still benefit from talking out loud about what you are doing. If you are willing, you can record yourself and even possibly use speech to text technologies to create a log of what you were doing at the time. This can be useful to recall what you were working on if you are interrupted at some point. It can also serve as a good way to get back context from a piece of code if you need to work on it again.

Writing down comments can also be useful, however there's a lot of thinking that goes into programming that is only transient and if it were to be written as comments, it would make the code more difficult to consume.

28 Jan 2020

Using checklists to avoid mistakes

History / Edit / PDF / EPUB / BIB / 2 min read (~280 words)

How do checklists help to avoid mistakes?

Checklists are designed to ensure that the most important things, either it is an item or a step in a process, are not forgotten.

A process checklist will list all the steps that are critical to the completion of a process. It will make clear what steps need to be done and verified in what order. Checklists are a way to communicate with new team members what the existing team processes are and what is expected of them. As steps are completed, they are checked to indicate that the task was done or verified, which can serve as a progress indicator when a process takes a while to accomplish. What is also great about checklists is that it can be shared between teams as a way to share knowledge about processes.

If you often make mistakes in certain processes you do throughout the day, you can easily create a checklist that lists all the important things that you need to double-check when you do that process. You can then go through that list while completing the process or after completing it to ensure that all the important aspects of the process were correctly done.

One benefit of the checklist is that it also allows you to offload information that you might have to keep in your head at all times. A checklist for a process you do very infrequently can be an amazing time-saving tool since you do not need to refresh your memory on all the important steps of that process.

Anything that you can memorize, you should write down so that you can consult later and improve over time.

27 Jan 2020

Library management

History / Edit / PDF / EPUB / BIB / 1 min read (~149 words)

How does one keep a library organized if people are moving books improperly at a certain rate?

In order to keep the library as ordered as possible, librarian should suggest that books that have been removed from the shelves be put onto cart or tables where those will be properly shelved again. Given that an individual may think they properly shelved a book, they might have actually introduced a slight error in the ordering of the books. If there is enough disorder created through this method, then it becomes more challenging for librarians to keep the books ordered.

We know from computer science that efficient sorting algorithms are of complexity O(n log n). For a nearly sorted initial order, insertion sort is considered to be the best as it will become close to O(n) complexity (while it is O(n^2) in the average/worst case).

26 Jan 2020

How I make complex decisions

History / Edit / PDF / EPUB / BIB / 2 min read (~240 words)

How do I make complex decisions?

When I have a decision that requires me to consider a lot of aspects, I've always documented my thoughts. I would first start by writing down all the things that come to mind in relation to this decision: things I want to consider, things I don't want to forget, things that may be difficult to include as part of the decision, etc. I write as much as I can. Then I order the items I've listed by order of importance. What is it in all those ideas that I value the most?

When I've created a few alternative decisions, I evaluate each of the pros and cons. I use my list of importance to determine the solution that best aligns with those values. Oftentimes I will have an acceptable decision, but there will be parts of the decision that will need to be ironed out so that it is a good decision.

I always consider how important the decision is to determine how much time I will spend on that decision. There is no value in optimizing the decisions that have a negligible impact on you, but important decisions can definitely have a long term impact on your life. Note that I didn't say that complex decisions were important decisions. Sometimes complex decisions are not important at all. In that case, it is not worth thinking about this decision for too long.

25 Jan 2020

Solving problems with AI

History / Edit / PDF / EPUB / BIB / 2 min read (~285 words)

Should I solve my problem with AI?

First start with a non-AI solution, then look into AI if what you have is unsatisfactory.

In this day and age, we want to make AI solve all kinds of problems, even those that don't require AI.

When you build a product, you generally have a problem you are trying to solve. With AI, companies are looking at existing problems and trying to find ways to turn them into AI problems. It is not a problem in itself to attempt the exercise, but it is a mistake to implement an AI solution where a non-AI solution would've been more than adequate. There is still a lot of work that needs to be done in the field of automation that does not require AI, but simpler statistical approaches.

A lot of research in the field of machine learning and deep learning like to point to Occam's razor in order to create simple models, but they sometimes seem to forget to apply the same principle to the whole solution, that is, do I need AI for this or would something simpler be as good?

A problem with the current wave of AI companies is their relation to AI itself. They corner themselves into doing AI only, while AI still highly relies on programming and IT, which are still highly technical but a lot less glamorous. It is definitely exciting to sell products that have AI in them, but starting with the tool and not the problem that needs to be solved is similar to trying to find all the problems a hammer can solve instead of knowing that you need a hammer when you want to nail something.