25 Jul 2010

The Meaning of Life

As of July 2010, I've come to a conclusion that the ultimate meaning of life, for me at least, is to have as much fun, entertainment, as possible. The amount of fun is equal to a definite integral of fun-power over time. The fun-power is never negative, but it is zero before birth and after death.

Why is that? Well, think of what would one do or want to do, if one could live forever and have perfect health all the time and one could just change one's capabilities, mental and physical, to whatever one wants to, except to remove the capabilities changing capability? What's left then? Entertainment and nothing else and the loss of fun and loved people around me would decrease the amount of entertainment. (Loss does not always have to mean death or "destruction". One does lose every-day objects without destroying them.)

So the way to maximize fun is to prolong one's life and to increase the fun-power. People differ in how they try to achieve that. For instance, some find it most efficient to rob or kill or just tease, if no one is capable of dying. Others find it beneficial to have an environment where everyone tries to treat others the way they self want to be treated. The idea being that one can better maximize one's own fun by not attending in a zero-sum like game, where the increase of one's own fun entails a decrease of someone else's fun. So, it takes quite a theory and skill to be happy in a paradise. :-)


Update at 2013_04_27: There exists "The Meaning of life, Version 2".

20 Jul 2010

The Core of Software Development

In the context of this article a computer program is a function and a "description" means "function description". The computer program as a function gets some input, from wherever, and it produces some output, to wherever in whatever form. So, practically all of the time that software developers spend, is spent on the name of creating that function description.

Summary of the previous section: software is a function description, being a productive software developer means minimizing the time spent on creating the function description. That's the reason, why I speak of functions in this post. :-)

A function can contain a mixture of calls to other functions and to oneself. To minimize the time spent on the assembly of the function description(read: to be a more productive software developer), one aims to minimize the following parameters:

A) number of functions to describe;
B) "mean" number of function calls within a single function;

The point B also covers "simple things" like assignment operators, multiplications, additions, etc.

As we do not live in the world of infinitely fast Turing Machines, additional conditions of memory usage patterns, bandwidth usage patterns, "outer memory" access patterns,  algorithm complexity, hardware speed, energy consumption, sizes of various memories, etc. apply, but as of summer 2010 I believe that it really helps to keep the points A and B in mind while doing practical software development. Software design patterns, which in the end migrate from "pattern" status to programming language specification, are just fine-grained, time-dependent, details of the craft.