Monday, November 27, 2006

The origin of programmers

There are a couple million programmers around the world. Being this such a large and diverse demographic, it's hard to state any common ground in the community, except of course for the fact that we all write code. I am going to state some things I've observed. I'm even going to make some assumptions here and there. Fear not, I am aware that they are not absolute, and I probably wont be able to make any determinations of that nature on this subject. These are simply things I've observed and explain some behavior I've seen. If this isn't a good enough disclaimer, then let the hate mail/comments fly in. I don't care if every one of my readers protests about this post... all five of you.

I'm a twenty-something year old programmer, as are most of my colleagues. When I was growing up, as many of the children of may age at the time, I had a strong fascination for video games. Keep in mind, in that time, although video games were popular, they were not the main stream media channel they are today. It's difficult to give you a concrete explanation of the source of the interest in them. Somewhere in between the escapism of reality, the provided suspension of disbelief, or the ability to control your destiny. All of these ideals may be seductive to the average adult, but they are even more so to a child. As a child, you parents tell you what to do, your teachers hand you homework. You have little or no control over what you do and how you do it. It can be argued that as an adult you live an an environment that probably has equal or less freedom, but that's another subject. In that virtual world, you are in complete control. In a sense, you are god.

I remember an experience that came very natural to me while playing these games. Especially in action/adventure games. Whenever I got into a boss fight the first thing I would do is try to identify the boss' attack pattern. That would make a much easier and safer counter offensive. Back in the day, video game consoles didn't have the processing muscle they enjoy today.The enemy's patters where pretty basic and repetitive. To make the game challenging, you had multiple enemies coming at you from all directions. After getting good enough to beat the average game's artificial intelligence, and all of the lame kids that dare play with you, you tend to look for the next step. You start wondering how to make games. This is when you eventually find out about this thing called programming.

I've heard stories of similar experiences, but instead of video games being the catalyst science fiction, comic books and other creative influences have been the culprit. At any rate, the pattern holds. You find about this programming thing, and you probably don't actually get to work on it immediately, but it remains in your subconscious for years to come.

Now you're a teenager. You start hacking away with whatever resource you can get your hands on. Even if you have a fresh memory or not, the impulse that got you here was fun, mystery, intrigue. At this point, it probably is still about that. You make anything from stupid little programs that execute simple mathematical formulas, to fairly complex applications.

Eventually you decide to get a career computer science, systems engineering or some other technology related career because of this fascination. You learn how to code "for real". During or afterwards you go out there and you get a job. Nine out of ten times you will be working on custom business applications. Weather I want to admit it or not, that is where the market for your average programmer is today.

Although making and maintaining business applications can lead to a profitable income, there is one very basic problem with them: THEY ARE BORING! There is no feeling of achievement after writing 14 lines of code that tell you how much money is left at the end of the month. The reason why you this fascination started early in the life of a programmer and the way it has manifested at this point is completely different. Weather he wants remember it or not. Repetitive work tends to make programmers dull. You cannot expect major breakthroughs, or ingenious ideas from someone who has to repeat the same process in different flavors every day, 8 hours a day. Yes, there are exceptions, but they are simply that. Exceptions that confirm the rule.

Some of us get excited while working on "complex" features like networking, security or new web/mobile interfaces. Think about it. All of these things are abstract elements. The need for these elements is an obstacle that needs to be tackled. You have been chosen to do so. The process will lead to identifying patterns which you need to wrap your head around in order to make the given technology work in your favor. In the end, you will be worthy of praise for the addition which will make the product better. Sound familiar? Yep... humans are that predictable. It's another video game. You are hungry for the very things that got you here in the first place. Things that have been replaced with monotonous number crunching and report generating.

Sadly all of the corporate technologies that programmers withing this profile tend to use, weather the want to or not, are working in the opposite direction. They abstract you from anything that may lead you to code something new and potentially exciting. You are left with "your important business logic", that is usually found somewhere in the slogan. Yes, you will have an increase in productivity, simply because you will have less code to write, therefore less bugs to fix. The problem is that you will have to repeatedly write the same type of code over and over again, while your framework/tool/environment takes care of the boiler plate.

This is one of the principal reasons why you see people working happily in a small company or startup. They are making less money, they have less benefits, and have a potentially insecure future, yet they couldn't be happier. Aside from the fact that mountains of bureaucracy will magically disappear, you are generally working on something new, different and exciting. You are going back to the basics. You have another boss who's looking for an ass whopin' and you are just the guy to deliver it. And for those of you reading and have not played a video game in their lives, take my word for it. Kicking a really hard boss' ass, is one of the best sensations of satisfaction and self achievement there are.

Not all is lost. Google is trying hard to get the status of the "anti-corporate corporation" in attempts to lure talent to work for them. They have a program where employees are allowed to dedicate 20% of their time to whatever project they decide. This is one of the most awesome idea's if heard since sliced bread. On one side, you have happy, interested employees working hard to get their ideas across. On the other, you have new products and services cropping up from the company, with a much smaller investment in research and development. Gmail, google news, orkut, google talk where all product/services, that originated from these efforts.

In today's highly competitive market software and information services are getting an ever increasing important role in every day life. This can be said for both personal and business environments. Attention will undoubtedly go to the ones offering the best and most original ways to handle the information. A lot can be said for efficiency and it's importance, not arguing against it. Like anything and everything else in life, a middle way must be found where it can coexist with things like unique ideas, fresh concepts and plain old fun. If we are just going through the motions like robots, then there is no hope for evolving the way we handle or information, which in the end translates to the way we handle our lives. Is that really a world you want to live in?

Monday, November 13, 2006

Open mind, open heart... open Java?

Yep, they went on and did it. Java will be opened under GPLv2. You notice how every time someone wants to do something good, righteous or productive for the community as a whole, someone else will negatively criticize this till no end. Or as a good friend of mine frequently says, "There is always someone who wants to throw a bar of soap into the sancocho". Sadly today, that person will be yours truly. The good news is that I don't have enough readers to get hate mail, and I've already had very heated face to face discussions with some of my most loyal readers in advance.

Sun will undoubtedly benefit from this move. First of all, the catalyst that spawned the drop that tipped the glass was the Microsoft and Novell deal (I swear I'm not a narcissistic blogger). They need this in order to compete with Novell. This shouts out loud and clear to the community: "we are not siding with the evil bad guys", "we support you and your applications". Not to mention giving them a lot of good press. It seems that all the tech news lately was revolving exclusively Microsoft and Novell. People loved it or hated it, but they were talking about it!

Once and for all the problems with the distribution of Java will end. Since it is now GPL, any commercial or non-commercial operating system can freely distribute it to their hearts content. Ubuntu will be the first Linux distro to offer the open version of Java as well as the Glassfish application server next year. This also means that a lot of programmers that would/could not access the technology because of license/political issues can now give Java another chance. There are alternative implementations of the Java compiler and runtime. The language specification has always been freely available. Implementations like GCJ and Jikes offer these tools with the GPL license, but are lacking a robust JVM, have a lot of bugs and issues, partially implement the standard API and tend to not include the more advanced network oriented features. Previously restricted programmers now can use the Sun JDK which will give them the full potential the language has to offer.

Sun is the sole keeper of the trademark of Java and has the heaviest of influences in the Java Community Process. Ironically in comparison with competitors like IBM and BEA, they are getting very little money out of Java. Primarily because the competitors products have more market penetration in the enterprise and their respective implementations are arguably superior. Making Java open source will encourage the collaboration of hundreds it not thousands of programmers around the world (taking in consideration that around 5 million people use Java around the world, these numbers aren't so difficult to swallow). With this massive contribution, in due time they will mold a product which may be able to compete at the same level as the previously mentioned competitors, costing them much less money to write, test and promote, and be distributed at a very low price or free.

The community benefits; Sun benefits. It's a win-win situation... right? You will find countless IT celebrities praising Sun for it's latest move. In the end this can only mean more developers and end users utilizing the technology in their respective ways. While I understand the need for Sun to push the technology further, I have my reservations in this recent turn of events.

Making the compilers, run times and standard base API's for both the standard and micro editions respectively GPL has some other consequences that have not shared equal time in the lime light. GPL gives users the liberty to take the available code, and make any modifications to it, as long as the product of these modifications is also made freely available. This is the essence of the famous copyleft. Although the code is GPL, Sun remains the sole owner of the Java trademark. It's willing to let other implementors call their product Java as long as they pass a certification exam where the new compiler and runtime are tested to prove that they are compliant with all regulatory standards. This will help ensure that all available implementations are equal, and Java's platform independence is conserved.

Imagine the following scenario: We have a guy who loves to hack (in the original sense of the word), and takes on making his custom virtual machine. For the sake of simplicity I'll use a fictional character... Ricardo. So Ricardo fixes a couple of bugs here and there, adds a couple of classes to the library and changes networking algorithms in order to make more efficient. Ricardo's fixes are entirely on the up and up, and make specific calls to the API return unexpected results. Ricardo never opts for the certification and releases his code to the world, as is expected of him due to the GPL license. His JVM is widely distributed and utilized by a lot of people.

Then some application programmers start building on top of this shady JVM. More sooner than later, an application will break under this JVM simply because it did not act as expected. Users will not blame the specific implementation of the JVM, they will not blame Ricardo (in all probability they never bothered to find out who Ricardo was in the first place), they will not blame the operating system. It will come down to one of to things, blame the application itself, or blame Java. Whichever is the result it's bad for the community. If the application is blamed, and the application programmer receives a lot of heat for it, and may in turn dump Java in favor of a "new and exciting weak type language". If Java is blamed directly... well no explanation necessary.

Eventually, flame wars will break out, the community will fragment leaded by the die hard haters and followers of the technology. Competitors will use the opportunity to offer a more stable environment on the technical as well as social aspects of the spectrum. Sun will do their due diligence to prevent and mitigate the problem, but they will not be able to eradicate it.

Don't believe me? Fine, go to DistroWatch and count the different Linux/Unix distributions they keep track of. And that's not all of them. Count the different ways of installing packages and maintaining applications there are. Yes diversity is good, but excessive fragmentation can be harmful as well. One of the main benefits that Windows has over Linux is simplicity. That simplicity is accentuated by the fact that no matter who sold you your copy of windows, an application is always installed and removed they same way. This is not true for different Linux distros. Keep in mind that users could really care less about maintenance. They are dumb and lazy, and want to be done with it. The quicker and painless the better.

A couple of friends say I'm over reacting. Things will never get as bad as they are in my imagination. For once I really hope that I'm wrong. I have personally vested money, and what's more important, countless hours of my time and effort into learning the Java technology and building applications utilizing it. I have been certified by Sun. I spend my Saturdays teaching Java to others. It would be a shame that all of this would go to waste.

Sunday, November 12, 2006

Microsoft + Novell = Very Bad News

Yes it happened. After years of Microsoft disrespecting Linux in front of the press and general media, they made a deal with Novell. By now, you must of all heard what the deal is, and it consists of. If not, follow the previous link and get it straight from the source.

I love how the short attention span well all have. It seems like only yesterday when Microsoft accused Linux of not being serious competitor. Saying that open source software is analogous to communism or utopianism. Then Linux's numbers started climbing. Then they started saying they had a superior product line, and how Linux did not offer the same service in the enterprise or desktop (notice the change in philosophy?). Linux's numbers kept growing, and look what happens now.

Some guy in a suit while at a board meeting decided that enough was enough. They had to act eventually, or else, the day would come when they would regret it. I don't think that Linux, or any other operating system, application or thingie for that matter, has the power to bring down Microsoft in the foreseeable future. Calm down, I'm not one of those crazies. Yet it does hold the potential to grab an considerable chunk of market share. And Microsoft loves the idea of having most if not all of the market to itself (why wouldn't they?). So they decided to swallow their pride... better yet, act like it never happened, and "collaborate for the benefit of the consumer". After all, isn't that the goal after all?

For Novell this can only mean good news. They will not be sued by Microsoft for patent infringement (more on that in a moment). They will be the first to implement this joint venture in virtualization solutions. They will be Microsoft Certified (I am still awed that the day has come where Linux distributions need to have this). This will give them the competitive edge over other commercial Linux distributions. Especially for serving mixed Windows - Linux environments.

For Microsoft, this just means they are smart. They are covering their collecting @$$es before it's too late. I've always been clear on this matter, Microsoft's products for the most part suck. The people that work there, are another matter all together. Alternative solutions, in this case commercial Linux distributions, have always offered ways to work with Microsoft environments, while the other way around has never existed. Meaning that if I have a Windows only environment, I can slowly ease into a a mixture or migration of a Linux oriented one with relative ease. From network protocols, to document file formats, there is an alternative solution for all your company's needs.

Now, what happens when Bob (running windows), sees that Juan's (running Linux) desktop doesn't crash, works faster, is able to multi task better, and has a better utilization of system resources. Oh, and by the way, can be made to look just like your existing desktop for the ones that are scared to switch. If Bob has a bit of courage, and is tired of his current situation, he'll opt for the switch, while conserving all his data and functionality. Let's scale that up to the system administrator, to the service providers, to the contractors or to the executives. Are you seeing the pattern? In my crazy little hallucination, Linux slowly, but surely takes over the market. Sadly there is very little chance that this will ever happen. Main reason: people are dumb and lazy. That's it. No further profound analysis necessary. Everything comes back to this.

For us, this is only bad news. Why? Because the very proliferation that I described before is precisely what Microsoft wants to stop, and what little proliferation can't be avoided at least needs to be taxed. Microsoft is going to get a slice of SUSE Linux sales, and what ever joint virtualization products emerge. If there is money in the mix that means that the words "Intellectual" and "Property" are going to come up more sooner than later very close to one another. And this is where the poop hits the fan. All of a sudden, all of those alternative solutions that offer mechanisms that work with existing Microsoft environments are infringing upon their intellectual property. This has been going on for a while, but now that there is a Microsoft endorsed, allegedly alternative, solution it's a different ball game.

They are already making efforts to obscure their protocols and formats in all ways possible, in order to keep the alternatives out of business. I hate to be one of those narcissist bloggers how quotes himself, but wrote about this in a past post. "But they will support PDF and ODF in office 2007!", you say? Yes they will. But they have to. Many governmental organizations around the world are switching to Linux, and one of the motives is ODF. If they do not support ODF, they will force government collaborators to use an alternative to office as well. Again, this is the catalyst that can spark a similar chain reaction, but oriented to office applications. If they don't do something about it, then that means more Office licenses down the drain.

This is not only bad news for Linux on the desktop/server. This is especially horrible news for all the appliances that are Linux based as well. A market, to my surprise, which is very big indeed. Have no doubt, the future only holds growth for the Linux based embedded/appliance marketplace. It feeds the need of the dumb and lazy users, because if offers a centric, simple and easy to use interface. Since specific hardware is used for specific needs, the same experience can be brought to the user at a much lower hardware cost, and little or zero base software cost. Not to mention the fact that the manufacturer can extend the current functionalities the Linux platform offers to suit their particular needs. This is the free as in speech part that we always forget about. Now your TiVO, NAS, SAN, DVD Player or video game console can't interact with your Windows PC. Oh well, it was fun while it lasted.

In the interim, everyone will applaud Microsoft for helping the little guy and thinking about the clients needs first. We will welcome the new products/services, and rejoice at the new abilities that... we've already had for all these years. In the end, when there is no turning back, we will be paying Microsoft for the right to use anything and everything. Even if they authored the software behind it or not.

Tuesday, November 07, 2006

Zombies and robots running the world.

Nope, it's not something out of a cheap and old horror flick. It's not the Matrix 4 (god knows we wouldn't be able to stand something like that!). It's yours truly once again failing miserably at attempting to make a catchy but totally overblown analogy of a title.

Kathy Sierra is one of my personal heroes, for two reasons. The first being she proved me wrong when I said women just couldn't code. I'm sorry girls, not a sexist, just haven't met a kick ass chick coder yet. Second, she's funny, but eloquent; informative, but intuitive. I can't really explain it in detail. She just makes learning easy. And while we're on the subject, she recently had a post that has a lot with what i want to talk about today.

Enough with the long introduction and the mystery. It's simple, education. We are being taught geometry, calculus, literature, history, biology, ... The list goes on and on, but we are not taught the basic thing that we actually need. No one ever cared to teach us how to think.

We have techniques on how to take notes and exams. We are experts in the utilization new technologies applied to cheating on tests. We skim through text looking for the next answer in our questionnaire, but we aren't actually absorbing any knowledge. We jump to the next number in a word problem to fill in the blanks in the expected formula, calculate the answer and close our books in a hurry. We memorize formulas, theorems and rules, but we never bother to try to have a basic understanding of why the particular phenomenon happens.

The biggest problem of all is that no one is interested in taking it to the next step. Everyone is in a hurry to finish studying/working, so they can... sit down and do nothing. Every time some one asks for my help on some academic or technical issue, I try (if it's within my grasp) to explain the why's and the how's. Most of the time, they aren't interested, they just want the shortest path to the answer which will complete the homework, pass the test, or make their application run. Why is it so hard to spark interest or curiosity in a young mind these days? It gets to a point where it's depressing. More so when people who have become accustomed to "the system" and this becomes their way of life.

In my humble and unexperienced opinion, the people that exceed in life are the ones that did not grow up on the system, or found a way to work around it. You need spark, innovation, curiosity, insight. You just will not get that by being systematic. Yes, Matrix 2 and 3 sucked, but the first one is an absolute classic. Sadly most of the guys hooked on the system haven't yet realized that it's just a big analogy of life, from different religious, philosophical and technical stand points. In the movie, Laurence Fishburn, in his role of Morpheus, says:

I've seen an agent punch through a concrete wall. Men have emptied entire clips at them and hit nothing but air, yet their strength and their speed are still based in a world that is built on rules. Because of that, they will never be as strong or as fast as you can be.

How does this analogy translate to real life? Even I may not know, but I choose to interpret it in the following way: When you have the ability to adjust to your circumstances, to improvise, to go with you insight, when your gut does more than rumbling you have "it". And "it" is what separates you from the rest of the pack. "it" is not visible on a resume, you can't get a diploma or certification, can't be passed down. "it" can only be awakened in you. When you have it, you surpass the agents, in the sense that you are no longer bound by the rules the matrix imposes on you.

Have you ever seen something good, and then something great? Something that satisfied your needs, and then something else you just had to have? Something you would say "hey that's cool", and then something else would make you say "oh my f***ing god!". Ummm.... yeaaaah. What ever it is in your life that fills in those blanks, the difference between the first and second element is probably "it".

We need a generation of creative and insightful people if we are to make a difference. We have all this information, technology and resources at our hands. More than ever before in the history of man kind. If you look at it from this perspective, we are the luckiest dudes in all of existence! Yet we go through the same motions every day. Anybody else notice something slightly wrong with this picture? And not "find the 5 differences in the two pictures" wrong. I'm talking Picasso painting wrong! (I'm sorry, I have no appreciation for art, please shoot me).

I'll end this post with another quote from The Matrix. This is the last lines Keanu Reeves says on the phone before he soars into the air at the end of the movie. No analysis, no interpretation of it's literal meaning. Think about it, and throw it into the one sided discussion where ever you'd like.
I know you're out there. I can feel you now. I know that you're afraid... you're afraid of us. You're afraid of change. I don't know the future. I didn't come here to tell you how this is going to end. I came here to tell you how it's going to begin. I'm going to hang up this phone, and then I'm going to show these people what you don't want them to see. I'm going to show them a world without you. A world without rules and controls, without borders or boundaries. A world where anything is possible. Where we go from there is a choice I leave to you.