Hobbies

=If Practice Makes Perfect and No One is Perfect, Why Practice?= When you practice, you learn. You make mistakes, and you learn. You try things out, and learn. Practicing is another way of saying trial and error. If you allow your failures to get you down, you give up and stop practicing.

If something seems difficult, that is because you do not understand it, or know how to make it 'easier.' You can make things easier by finding the proper tools to work with them, or learn better methods of working with them. Tasks never get easier, you get better. So practice is very important. It is crucial for advancement.

Hobbies give us a way to practice something, and make mistakes, and learn. If we don't have hobbies and we aren't learning new things, we aren't doing much to contribute back to society, the things we learn along the way.

=When Perfection is Required= We rely on everything to be 'perfect' in order to live our lives. We need to know that our phone will not fail us, when we need to dial 911. We need to know that the fire truck coming to put the fire out is going to make it to the house. We need the police to be able to enforce the law, and we need the law to be perfect, to make sure justice is served properly.

So why do we practice with these things, professionally? Why do we use experimental tools in production, like Cassandra and CouchDB? They make it easier for the developers to do their jobs, and optimize for developer time. That's fine, in a development environment, where mistakes don't affect the customers. Code can be tightened up, after figuring out general algorithms using these new tools.

The lessons learned from working with those tools can then be applied to tools that have a better reputation for stability. Code in a production environment should be tight, clean, well documented and efficient of resources. Just because your dev machine had 8gb of ram for you to use does not mean the server it will be running on in production has 8gb of memory AVAILABLE to your application.

When perfection is required, it is critical to make the most of the limited resources you have available, and every resource should be treated as though it were limited.

If you need a good reason why, how about this; when I am a sysadmin logging into a server to diagnose a problem that is going on, but there are 20 threads of your app running, all requesting 1gb of ram, when the system only has 16gb of ram, there is going to be HEAVY swapping going on, the disk I/O is going to be awful, and I am going to have a hell of a time determining where the problem is.

Just because a 1gb limit made sense without any real production traffic being thrown at it, doesn't mean you're doing your job.

=Source Essay= Hobbies are good tools for teaching yourself new things and learning new technology. Speaking from a computer science background, hobbies are crucial for teaching people how to use the tools they have at their disposal, so they can improve their skill and become better at what they enjoy doing.

Hobbies are proofs of concept, they are not a part of a final product. I don't want the tools I depend heavily upon to be treated like someone's hobby. I want them to be treated like someone's job. That means optimizing for performance and efficiency and not optimizing for coding effort.

I was speaking to a gentleman the other day who was telling me about the days you had to code, and you were only able to use 8 bits at a time. A single byte. People actually coded with less, before then, crazy enough. 8 bits was a luxury, in the beginning.

Programmers and engineers had to work with far less resources at their fingertips to do some pretty amazing things, and they were capable of it. These days, you have a system with 68,719,476,736 bits (8 Gigabytes) and every goddamn application assumes it can have as much of that as it wants.

So people code with those assumptions. Assumptions that there will always be enough processing cycles to do what you need, no matter how inefficiently you code it, and that you will have as much ram as you can possibly use, even if 256kb would have been sufficient.

If we held ourselves to higher standards, and stopped running hobby code on "mission critical" systems, maybe we would be happier with our technology, because your phone doesn't need to reboot as often, applications don't crash when you're counting on them to navigate you, and you don't have time to fuck with your phone, because you're driving.

I had turn-by-turn navigation on my Garmin GPSMAP 60 CSX, which is pretty damn old, these days, and it never let me down, never needed to be rebooted, and did exactly what I needed, until I dropped it way too many times.

While explaining this to my friend, I made the realization that in order to save Computer Science, as we know it, we need to clarify the distinction between computer technicians and computer scientists.

I expect this to get chopped up, but I'm just drafting the ideas.