OpenSSL Love

November 2nd, 2009

Just got to an article that says everything I’d like to say about OpenSSL. It makes me think about the definition of software quality. At first sight, OpenSSL’s code seams a mess, but the point is: it’s one of the most used libraries out there, it works, it’s stable and it’s reliable. But using it is a major PITA.

Cross-platform .NET

November 2nd, 2009

I’ve had a lot of feedback on my running mono article. The majority of feedback was something like: .NET isn’t cross platform, Mono is evil, MS is evil. How can someone say to me that .NET isn’t cross platform when I have an average sized product running out of the box on MS .NET and Mono? I used to participate on a lot of discussions about this a couple of years ago. But then I realized that it was more productive to actually do something instead of discussing these kind of issues.

What makes a Java application cross-platform? Will a Java application be cross-platform if use reference resources like: c:\MyApp\MyApp.ini? And if we have a file named MyApp.ini and get it like getResource(”myapp.ini”)? And if we use specific operating system resources?

The same goes for .NET applications. If the developers are careful, it’s easy to have a cross-platform application. Having a desktop application is hard, that’s true. Microsoft made Windows Forms very Windows specific (using stuff like windows handles), and it’s hard for Mono to make a cross-platform Windows Forms implementation. But there are other alternatives, like GTK#. Even so, I realize that this issue is the least cross-platform of .NET.

But on a web/services scenario, Mono is as cross-platform as you can get.

Google has no face

October 16th, 2009

I use a lot of Google products: the search engine, docs, gmail, picasa, analytics, chrome, etc, etc. And I’m satisfied. But a problem in picasa web albums that I’m having brought to my attention something interesting: google has no face. We can’t contact google, we don’t get feedback from google, nothing. I registered a bug, and I got no follow up from the google staff. Note that google doesn’t even allow comments on their blogs. There’s a completely blackout posture regarding the costumers.

This posture is understandable. I manage a small scale project and I know how much noise we can get. Google has a good approach on this (like so many other companies): it provides a forum for help topics and there are always senior users that answer the basic questions, leaving only the complex ones unhanded.

Although the lack of direct customer support, google products aren’t known for their bugs. So I guess they have strict error handling policies and statistics and they focus on that. No one answered me, but I guess all that internal server errors I’m getting, are being monitored by someone and will be fixed in time.

Even so, it’s interesting that a company that focus so much on making collaborative and communication tools, doesn’t communicate with their user base.  Guess they don’t need it. I remember I once switched banking services exactly to have better customer care. I didn’t care that the new bank was smaller and weaker, because that meant that the bank would value me much more as a client. And that was what I wanted.

It seams that as companies start to grow, they loose interest on pleasing every customer. Why would they, they have so many of them. While small companies have a strong focus on the customer, because they need all the customers they can get, and can’t afford to loose any.

When the internet codes for you

September 30th, 2009

The other day I went to assist a guy that is making a component to interact with my framework. He was having some connectivity problems and I went for the rescue. We could only tell me that he wasn't being able to process the authorization logic. I asked him to show me the code and I saw a lot of comments in Chinese (or some oriental language). Clearly, someone downloaded the code from he internet and well... it was working on his test cases.

This reminded me how often corporate companies fetch some code from the internet to incorporate on their projects. We're talking about big money companies, that employ software engineers, that instead of developing from scratch software components, just search the web and get some stuff that works. Many times we only need to search open source projects and use them, incorporate them, cut some source lines, and we're ready to go. It seams unfair to have large companies using software that someone made on their spare time, without the proper retribution.

Lets be fair, all developers search code on the internet. Sometimes we just need an example of how to use an API, or how to do some operation. I guess that's fine. The problem is when we incorporate code on the project that we don't understand, or that doesn't follow the project guidelines. On this particular case, the code's original author, used and abused of code like this:

C#:
  1. try {
  2.     ...
  3.     return true;
  4. } catch {
  5.     return false;
  6. }

This is bad in so many ways that I can't start to describe them. Someone made this bad quality code ant put it online, and someone else incorporated it on the project, without changing it, learning it, or even knowing how it works.  But why would someone do this? I can think of several reasons: he was on a tight deadline and had to make it work fast (not this case tho); he didn't know how to made the functionality by himself; he just didn't care.

I'm proud of the code I produce. But there are many developers that don't experience particular joy in programming, and that leads to poor code. It seams that we're at a time where many software developers are going to the software developer's school not because they love it, but because it's a career that pays well and doesn't leave anyone unemployed.

Being a programmer is boring…

September 24th, 2009

Don't get me wrong: I love software engineering. I love developing applications and the challenges that we face when we have a complex problem and we have to model it and make it work. I really like the creative and technological aspects of programming. But talking as someone that has been for three years on some corporate companies, several projects and a few teams, that isn't really what we do, is it?

From my point of view, here's the cycle of generic corporate work:

  1. We enter a project, that may be starting or not and we meet the team
  2. We start by analyzing the project's structure, learning how it works and what it does, during this time we may get some documents to read
  3. Then we get small tasks, like some bug fixes, minor development details and such
  4. Soon we start getting bigger tasks, and in time we'll feel more confident on the project, we'll know it well and start making ourselves profitable
  5. After the learning stage we become very valuable for the team, we'll fix bugs faster, we'll deploy faster, we'll implement faster, and we'll help the junior members of the team
  6. At some point we leave the project... maybe the project is finished, maybe we're needed elsewhere, and we go back to step number one

Looking at these steps, I'd say that the best ones are 1,2,3 and 4. Learning is very important to keep me motivated. When I'm on a new project, I have to learn new technologies, new concepts, and the structure of the project. I'll also get to know my team and I'll learn a lot from them.

Step number 5 is the boring one. When we already know everything related to the project is when we're most profitable for the company. At that time we mainly get to fix bugs, support the production environment, write documentation and maybe handle customers. We'll also get new developments and changes, but often these new developments will collide with something already done that wasn't expecting the new features. This may mean architectural changes that may prove quite annoying to accomplish.

When I'm at step 5, I feel my motivation getting lower every day. And the problem is, I spend the majority of my time at step 5. It comes a time when I get tired and start talking to management to get back to step 1, but management can't allow that. Now that we're important on the project, it isn't easy to take us away, so we need to hang on, for the company's sake.

Not all programmers dislike step 5. At step 5 developers have won a place on the team and are an important asset for the company: they reached the comfort zone. They may like it there, and sometimes step 5 provides some interesting challenges. Different people get motivated by different things. I'm not a step 5 type of people, but I know a lot that are, that really like what they do and they're good a it.

This is, of course, my own point of view, and does not reflect the truth for other developers. For me, change is important, and the degree of different things I get to do everyday contributes to my motivation as a developer.