Month: February 2009

Unoptimizable by danger

We’re always trying to optimize everything. Taking as much dirty dishes to the sink each go, brush our teeth while peeing, studying in the bus to school. But there are some things that are practically unoptimizable.

While some cannot be optimized for obvious reasons, like writing an essay while driving a car, others have more subtle reasons for unoptimization

Take, for instance, the time between you open your zipper and the time you start peeing. I’ve counted about three seconds in average (some people have more, others less). I thought that I could optimize that by allowing my bladder to relax around three seconds before the zipper is open. Then I calculated how many seconds I took to do the whole procedure and was hoping to find a point in time in which I could safely start the procedure in background.

Luckily I’m not as stupid as I thought (or used to be), so I have done my homework before actually starting the test itself. The average time of preparation is around 3 seconds, good, but the standard deviation is around 1 second down and up to 5 seconds up! Which means that I could wet my pants pretty bad if anything went wrong with the preparation procedures…

The “number 2” test is more catastrophic but far easier to control if something goes wrong, so I had more progress on that one. But for the sake of all, I’ll leave that as an exercise to the reader.

Paying tomorrow’s pension

Pension plans are always too optimistic, and in this case, being optimistic is not at all a good thing. It’s actually getting the situation worse and, if nothing is done about it, it’ll be impossible to make the work force pay the pension for the huge retired population.

During the 80’s and 90’s we learned in school that European countries’ population pyramid had clear signs of development, because it had low birth rate and high life expectancy. Opposed, of course, to those from Brazil at that time, which was pretty much triangular, especially in the poorest regions.

This is obviously a problem as much more children are being born and dying, due to lack of education of the parents (that have dozens of children rather than a couple) and complete lack of health care. They were adopting the R-selection (as insects and lower organisms), where the more children you have, the higher are the chances of having grandchildren (and so, propagate your genes). It may sound terrible, but if you actually go there and talk to those people, that’s what they say. If you say you only have two children they think it’s an absurd, asking: “what would you do if one or two die?”. It’s not lack of love for all of them, it’s the hard truth they have to live with.

Now, terrible as it is, let’s see the other way around. In a high educated society, with excellent public health care, you normally see couples with none, one or at most two children. Seeing three is ok, but four is an absurd. How can you cope with all of them? Imagine the cost of childcare! (Note that this is no problem for those that have 15 in the situation above). What happens is that, with time, less children become adults and the number of retired people get bigger than those that pay for their pensions.

You may think that you (retired folks) have paid already your public and private pension in the past, but truth is that both the government and the banks already spent your money on something else (probably paying the pension of your parents). They never think soo long term as they ask you to. They force you to think on your own pension when you’re around 30 years old but all that money is being re-invested, lost and getting money from the government to pay the bill. Government money (from your tax and pension payments) were actually to pay other bills they had in the past, and they hope they’ll have money in 30 years to pay yours.

The big problem is that, today, the number of employed and retired people are still similar, but in 50 years it’ll be very unequal. With better health care (as we all expect), with stem cell research, gene therapy, cloning and other wonders of modern medicine we’ll probably be immortals by the end of the century. How can a small group of people between 20 and 65 years can ever pay for the pension of 65 until 200 years old? We don’t have to go so sci-fi, nor so distant in the future, some predictions are telling that the size of the work-force is going to be much smaller. Either the pensions payments go up or it’ll be impossible to pay up.

Have more children?

Until now the answer is “Have more children!”. Lots of couples in “baby-age” nowadays are having more than three children. They do it because, in developed countries, it’s cheap. Health care is free, schools are free, medicines and most services are free too. Who is paying for that? All of us. What happens with having more children is that, not only the work force is paying for the pension of the old, but also for the joy of the young. If it’s already a disaster to rely on such a small work force to pay the pension, how fair is it to demand them to pay for the young too?

But there is another, even bigger, question: Isn’t the population already big enough? Can we ever give decent food to every single living being (including animals, of course) that already exists in the world? Do we really need more? Shall we let people kill babies in China with the one-child policy while we have joy with our 10 children? If we really need those babies, shouldn’t we be adopting the “unwanted” Chinese, Ethiopian, etc?

Well, I particularly don’t believe in cheap charity. As my mother always said (and stuck for life in my mind): “Give the fishing pole and teach them how to fish”. So, I still think we should promote education and health care for countries in need so they can also have a population pyramid like the developed countries, but the policy of children, pension and taxes has to change. Of course, education and health care do take some time to evolve, and the children on those countries today won’t benefit from that, so plain old charity IS also fundamental to help those regions.

Managing the retirement age

People’s health is better today that it was 30 years ago. More and more people today retire older and older (quick Google for “increase retirement age” and you’ll see), and some countries are even increasing the official retirement age. That helps a lot, of course, but it’s only temporary and can work against the people. What happens, for instance, if the average retirement age decreases from one year to another? Would the official age reduce too? Is it fair for everyone, between one year and the other? I don’t think so.

One possible solution is to provide incrementing retirement payments, proportional to age and external remuneration. Say I turn 55 and, because of health problem, I need to reduce my work load by one third. I should be able to get one third of my retirement and keep on working, until I need another break and get, say, half of it by the age of 65. I could have gotten the full amount, but because I’m still working (or getting funds from elsewhere), I only get the amount proportional to what I was earning before and am now.

In numbers: With 55, I’m earning 60K a year. I have to work only 2/3 and therefore get only 40K. My pension is total of 30K, and 1/3 is 10K, so my new salary is 50K. With 60 years I need another break, so my new salary is 1/2 (30K) plus 1/2 of my pension (15K) = 45K. If I stop completely, I’ll only receive the 30K or my pension. Of course, if you want more you can always make a private pension plan and trust your bank won’t go bankrupt in the next 30 years.

Why this is fair?

  1. If you’re still working full steam you should not get money from the government.
  2. If you still want to work but can’t full time, you should get a proportional help from the government, but only what the government can afford to pay
  3. If you can’t work at all, you should receive the full amount, exactly what the government already pays you today

This is just an example of how things can be worked out, not intended to be extensive not exhaustive. There are plenty of room for good ideas, we just need to get people talking about the alternatives rather than only thinking about how to get MORE money.

Why is retirement SO important?

Simply because there is just too much people in the world. Malthus would say: “Kill’em all”. I’d rather say: “Don’t let them be born at such an enormous rate”. If the solution for the future recession is having more babies, we’ll get ourselves into yet another one, much worse, in the next generation, like a snowball.

We have to stop having babies right now, deal with the consequences right now and hopefully in the future, our grandchildren will be better off. According to the CIA, the world population has just passed 6.7 billion people. With birth rate at 20/1000 and death rate around 8/1000 (same source), it’s not going to lower so soon. Raising 2% per year and with mortality rate extremely lower than in nature (which varies a lot, but seldom reach 0.8%), it’s very likely that in a few decades we’ll be the only animal on the planet. In a few centuries maybe the only living being (if you can say so).

Will we discover how to do photosynthesis with melanin? Or will we become cannibals?

Gates the Hutt

Jabba the Hutt
Jabba the Hutt

Bill Gates might not be heading Microsoft anymore but his legacy (through his stupid padawan, Ballmer) still remains.

Not only they’re careless when writing bogus software, not fixing security holes and creating useless solutions to help you protect you, now they’re using the money you pay (if you do buy Windows, anyway) to set bounties to capture the creator of the new worm.

It might just work, of course. Worm writers are normally bounty hunters themselves. Like Greedo, they might end up capturing Han Solo. But, what the heck? Wasn’t there a better use for that money? Like fixing the bugs in the first place?

Ad infinitum

Quality is fundamental in any job, and software is no exception. Although fairly good software is relatively easy to do, really good software is an art that few can truly reach.

While in some places you see a complete lack of understanding about the minimal standards of software development, in others you see it in excess. It’s no good either. In the end, as we all know, the only thing that prevails is common sense. Quality management, all sorts of tests and refactoring is fundamental to the agile development, but being agile doesn’t mean being time-proof.

One might argue that, if you keep on refactoring your code, one day it’ll be perfect. That if you have unit tests, regression tests, usability test (and they’re also being constantly refactored), you won’t be able to revive old bugs. That if you have a team always testing your programs, building a huge infrastructure to assure everything is user proof, users will never get a product they can’t handle. It won’t happen.

It’s like general relativity, the more speed you get, the heavier you become and it gets more difficult to get more speed. Unlike physics, though, there is a clear ceiling to your growth curve, from where you fall rather than stabilize. It’s the moment when you have to let go, take out what you’ve learned and start all over again, probably making the same mistakes and certainly making new ones.

Cost

It’s all about cost analysis. It’s not just money, it’s also about time, passion, hobbies. It’s about what you’re going to show your children when they grow up. You don’t have much time (they grow pretty fast!), so you need to be efficient.

Being efficient is quite different on achieving the best quality possible, and being efficient locally can also be very deceiving. Hacking your way through every problem, unworried about the near future is one way of screwing up things pretty badly, but being agile can lead you to the same places, just over prettier roads.

When the team is bigger than one person, you can’t possibly know everything that is going on. You trust other peoples judgements, you understand things differently and you end up assuming too much about some of the things. Those little things add up to the amount of tests and refactoring you have to run for each and every little change and your system will indubitably cripple up to a halt.

Time

For some, time is money. For me, it’s much more than that. I won’t have time to do everything I want, so I better choose wisely putting all correct weights on the things I love or must do. We’re not alone, nor is all we do for ourselves, so it’s pretty clear that we all want our things to last.

Time, for software, is not a trivial concept. Some good software don’t even get the chance while some really bad things are still being massively used. Take the OS/2 vs. Windows case. But also some good software (or algorithms or protocols) have proven to be much more valuable and stable than anyone ever predicted. Take the IPv4 networking and the Unix operating system (with new clothes nowadays) as examples.

We desperately need to move to IPv6 but there’s a big fear. Some people are advocating for decades now that Unix is already decades deprecated and still it’s by far the best operating system we have available today. Is it really necessary to deprecate Unix? Is hardware really ready to take the best out of micro-kernel written in functional programming languages?

For how long does a software lives, then?

It depends on so many things that it’s impossible to answer that question, but there are some general rules:

  • Is it well written enough to be easy to enhance to users’ request? AND
  • Is it stable enough that won’t drive people away due to constant errors? AND
  • Does it really makes the difference to people’s lives? AND
  • Are people constantly being reminded that your software exists (both intentionally and unintentionally)? AND
  • Isn’t there something else much better? AND
  • Is the community big enough to make migration difficult?

If you answered no to two or more questions, be sure to review your strategy, you might already be loosing users.

There is another path you might find your answers:

  • Is the code so bad that no one (not even its creator) understand it anymore? OR
  • The dependency chain is so unbearably complicated, recursive and fails (or works) sporadically? OR
  • The creator left the company/group and won’t give a blimp to answer your emails? OR
  • You’re relying on closed-source/proprietary libraries/programs/operating systems, or they have no support anymore? OR
  • Your library or operating system has no support anymore?

If you answered yes to two or more questions, be sure to review your strategy, you might already be on a one-way dead-end.

Ad infinitum

One thing is for sure, the only thing that is really unlimited is stupidity. There are some things that are infinite, but limited. Take a sphere, you can walk on a great circle until the end of all universes and you won’t reach the end, but the sphere is limited in radius, thus, size. Things are, ultimately, limited in the number of dimensions they’re unlimited.

Stupidity in unlimitedly unlimited. If the universe really has 10 dimensions, stupidity has 11. Or more. The only thing that will endure, when the last creature of the last planet of the last galaxy is alive is his/her own stupidity. It’ll probably have the chance to propagate itself and the universe for another age, but it won’t.

In software, then, bugs are bound to happen. Bad design has to take part and there will be a time when you have to leave your software rest in peace. Use your time in a more creative way because for you, there is no infinite time or resources. Your children (and other people’s children too) will grow quick and deprecate you.