Monday, August 20, 2007

The 2 types of modern software engineers

I have been a software engineer for over 15 years now, and have been writing software since getting my first computer: an Apple 2+ in 1984.

It's amazing how computer languages and hardware have evolved in the last 30 years. Even more interesting is how software engineers, like myself, have evolved over the years.

I recently have come to the conclusion that there are really only 2 types of software engineers in this world nowadays: those who think high-level software design is more important than the actual implementation, and those who don't.

In my opinion, software implementation without high level design, encapsulation of functionality, decoupled or loosely coupled frameworks is a disaster waiting to happen.

What this implies is that we need to "think" about modeling real-world tangible things or concepts in code that accurately represents them. And that this is even actually more important that coding the software itself.

My opinion is based on the fact that I have lived through so many projects at this point in my career which failed to have the complete lack of what I just stated.

Oh, and this isn't an object oriented vs. embedded programming argument. This is a "should I think a little about it first?" vs. "I will just get started and hack" argument.

Most of us in the "Design is more important" camp rely heavily on the use of Software Design Patterns, and prefer to implement the design using higher-level object-oriented languages such Java. We don't feel the need to be too close to the processor.

Don't get me wrong, I like c and c++. I do write code in c/c++ at my current job and am a fairly decent programmer in these languages. I just don't see any reason to use them if the task can be done with Java assuming performance and memory benchmarks can be met and lack of byte-level processing is necessary.

And I am not implying that code written without design is bad, or that the software engineers who do this sort of thing are not as talented as us design people; on the contrary, they are often more knowledgeable in almost any language than design people. But, they have to be. They are better "programmers", but that doesn't make them better software engineers.

When you are developing an application that models a customer account or a shopping cart or real-time multi-threaded UI or server, do you really want to deal with unsigned integers, process byte arrays, dereference pointers, parse a char array, or perform pointer arithmetic or access a register on the processor? Of course not. Knowledge of those things doesn't help you build an application faster.

The funny thing is, is that each camp is fiercely loyal to their opinion. And having a conversation about software and implementation between 2 people that are in different camps is not possible. Their priorities are entirely different, and their understanding of the problem domain and the implementation solution are entirely different.

What do you think?

Sunday, June 3, 2007

Google: Evil or Righteous?

I'm often fascinated by Google.

I lived in Mountain View, CA from 1997-1999 on Tyrella Ave., near Middlefield Road and Moffett Ave.

The big dog on the block at that time was Netscape Communications, which owned several buildings near the 21st Point Fitness Center on Middlefield Ave., which I was a member of.

Google started in 1998, somewhere close to where I lived in Palo Alto, CA from what I understand, by Sergey Brin and Larry Page.

The technology they created was absolutely necessary at the time: a search engine for content on the internet. At the time Google started, the 3 most popular search engines on the internet were Infoseek, Yahoo! and Excite. Infoseek was a really good search engine, the other 2 (Yahoo! and Excite) were garbage, for the most part useless (especially Excite).

Luckily for Google, Infoseek was purchased by Go.com which was owned by Disney. Disney quickly made stupid decisions and Infoseek was deprecated, called Go.com and buried amongst Disneys various websites. From the moment Disney purchased it, it was doomed. So all of the great work from the Infoseek engineers - the search algorythm, was lost due to brand marketing and incompentent idiots who were running Infoseek after being purchased by Disney.

Yahoo! was OK for a website, but was really useful as a site to go for web links to other sites. Their search was tool was weak at that time.

Excite was just a 3rd-rate useless tool that you went to as a last resort. Excite was started by a bunch a people who thought that they were alot smarter than they actually were. But luckily for them they got their site out there a little bit ahead of the curve, and alot of people threw money at them not knowing that they would eventually lose it due to the uselessness of Excite and it's technology. It was basically a copy site, inferior to Infoseek and even Yahoo!

So in 1999, most people were fed up trying to search for stuff on the internet, and here comes Google with a great little search engine. I loved Google Search and still do. I can find what is most relevant to me at any given time. Their search algorythm works.

They got big, went public, stock soared, they all got rich and then something predictable happened: most of them became arrogant assholes.

It's very understandable. Put people together that believe they are better than the rest of us in the world and you get what Google is today: a company mostly full of rich, arrogant people.

Why do I say this? I mean, doesn't Google own the very site that I am blogging from?

Of course they do.

Google has a motto: Don't be evil.

But for the many ways that Google has improved technology and our lives from offering free products and services on the internet, they have also displayed the sort of "evil" behavior that they so publicly disdain from their main competitor, Microsoft.

A couple of years ago, Google tried to publish every single book in print to the internet without getting the permission of the content rights holders: the publishing companies and the authors. Nice going. They stormed into public libraries and started copying everything they could.

Now Google is making it such that you can see at street level at any place at any given time. Cool technology, no doubt. But did Google ever think about privacy concerns? Of course not.

Another thing I particularly hate is how they recruit new new employees: Solve some riddle at some random billboard location in the Bay Area and then solve another brain teaser from a newspaper advertisement. The whole strategy is to recruit the so-called "smart people". Well, I know a bunch of those people who couldn't carry my jockstrap when it comes to software design and implementation. People that get into Google are smart, no doubt.

Keep an eye on what Google is doing. They are increasingly deciding their own rules. In 10 years, they might be the hated company that Microsoft is today.

Wednesday, May 23, 2007

Thank You Kim Polese

One of the questions I always ask during a job interview to a prospective Java Programming candidate is: Do you know who Kim Polese is?

I've asked this question a number of times, and have never been given the correct answer. (I have the reputation amongst my peers for being a very difficult interviewer).

Kim Polese was the brilliant Product Manager of the Java Product at the time of it's first release 1994-1995-ish. It was she who had the innovative marketing decision to make it "free" to download and use. The result: Massive acceptance and use almost immediately. Within 4 years, Java was by far the most widely used programming language for most applications.

There is also a lingering side-effect to her decision that most people who use use the internet are not aware of: Her decision to make it "free" to use, spawned a huge Java-application-based open-source community with people inspired to donate their work such that others can use it for free based using whatever open-source license they choose, and, in some ways, one could argue that "free" application use over the internet was also influenced by this decision.

The latter was also heavily influenced by market conditions and the dot-com boom pricing structure. But, every time you use the internet, most likely you use a free product or free service indirectly influenced by the brilliant marketing decision that Kim made and the spirit of contribution and sharing of innovation, software, and services that resulted because of it.

You can learn more about this brilliant person here: http://en.wikipedia.org/wiki/Kim_Polese