Friday, May 23, 2008

On languages, life etc - Part #2

This post is actually a comment to the comments at my previous post, but it grew too big so it deserves to be a new post.
So in my previous post, past said:
"Agreed. But that is the wrong question. Very few of our clients ever asked for Java development either. All the client wants is working software that meets his needs. Certainly I, or anyone else that I know for that matter, never asked Facebook to use Erlang for its chat feature."
I 'm glad you agree and you give me the opportunity to explain that my reference to the client 's demand for a specific language had a slightly different meaning. I agree that the client usually does not ask for a particular technology, so if you choose Java or Scala is of little interest to her/him. Do you believe that there exists a language that will do the client 's job 100 times faster or otherwise better? I don't. If my choice of a new language over e.g. Java achieves a performance increase of 0.0001% neither the client will care nor I.

My post was a reaction to the chaos of thousands of programming languages and frameworks that have flooded our professional lives. I agree that the customer usually don't ask for a particular language or framework and it is our responsibility to choose the more suitable solution. Do you believe that in order to achieve that, we should constantly study and improve ourselfs ? I certainly do. Do you believe that ScumbagX#+ is an essential asset for a developer in Greece ? Ok, I again go with you. Do you beleive that we should spend our time deciding between ScumbagX#+, JScumbagX#+ and IronScumbagX#++ because the last one is 0.00001% faster? I certainly don't. What I mean is that every geek in this world dreams of creating his own language that would incorporate all the great concepts that he learned in the "programming languages" course at the university. Am I obliged to learn it ? If I am (and sometimes some new language deserves my time) then I will, but I don't have the illusion that in this life I will manage to learn all of them.

"If you can meet your customers' requirements and be competitive with what you already know, then by all means do so. Working as a developer in most software houses is not that demanding after all."

Everything in this life is a trade off. Our last web app was written in java for jboss. It is an internal application used by 50 users and the type of application that will never go on the public web. If we have written it in Erlang and could manage 50 gazillions requests per millisecond, do you think that the client would have paid us more ? Not in a million years! If we had to write an app that had to deal with 50 gazillions requests per millisecond then ok. Erlang might have been the right choice and the time investment to learn it would be justified.

"However, if you have any aspirations to ever work on a startup like facebook, twitter or friendfeed, or worse, start your own, then you might need to work a wee bit harder than that."

Everything in life is also a bet. If you want to start the new Facebook, you bet on some technologies and invest on them. You cannot do the same for every existing technology. The reason is simple. We won't live for 200 years.

I 'm closing with a clarification for synodinos:

"BTW are you this cautious about all new technologies, because I think you were (somewhat of) an early adopter for JPA?"
JPA was actually one of my early adoptions that caused me absolutely no trouble (I cannot say the same for struts 2 though), so this can be no reason for being cautious about new technologies. Actually, I have to clarify that I am not cautious about new languages. On the contrary, I trust them all. Completely. And I am convinced that each and every one of them was created with good intentions. But you cannot invest on all of them. You have to find a golden rule. I totally agree with those that support the opinion that a developer should know more than one language. On the other hand a developer can go far enough and know TOO many languages but be really good at none of them (I think I read that here :-)).


adamo said...

I think I have to slightly disagree with past. First of all, you are your own client. Therefore you -as a software development company- demand that a project is written following certain standards, including the languages that re used to implement it.

Second, since you are your own customer, you have to know the skills of the pool that you draw developers from. For example I happen to know an excellent Ruby programmer who was stuck for quite some time because he could not hire anyone who knew enough Ruby just to do the boring work.

Third, it really depends on the customer: If you are to give the source code to the customer, then the language definitely matters. Even if you implement the desired system in CLOS or Ocaml and deliver it in half the time, it does not matter if on the client's side there exists no team (and one person is not a team) that can maintain the code. They have the code but to them it is the same as printed hex dump of the binaries.

Last, I want to point out that most of the time we fool around with new languages and operating systems, not because we want to replace the standard ones that we are using, but because we want to see things in a different way that may (or may not) make our work easier with the stuff that we normally use.

Unknown said...

@adamo: Your last paragraph is exactly the fun part I talked about in the previous post.

past said...

@adamo: hey, I don't think we disagree at all! It's just a matter of focusing on different aspects of the same problem, that's all. For instance, your first point assumes the decision-making is made on behalf of an ISV, whereas my comment assumed a developer contemplating a personal career move. In the same spirit, your third point assumes that the software under consideration will be delivered to an external customer, while I was having in mind the successful web 2.0 startups that are the consumers of their own code.

Your last point is essentially the gist of my own thoughts, as well. However, I think dismissing it as 'fun' like Christos does, is essentially missing the large effect that a change of perspective can have on ones thought process. I hope to find some time to elaborate more on this in a future post.

Anonymous said...

Ditto! Opening your mind to different languages, OSs, technologies is essential if you don’t want to end up narrow minded and keep a realistic perspective. This process happens to also be “fun” for us because of our idiosyncrasy. Most people I know are scarred s*** to learn something new.

Thanks BTW for giving me the idea for the InfoQ article ;)

adamo said...

"Most people I know are scarred s*** to learn something new."

I wouldn't say scared. I would say bored or tired of learning something new.