Saturday, July 18, 2009

Why do startups still use java?

I can't imagine what competitive advantage using Java (or C#) to create a startup provides these days. I can see why the JVM is sometimes a good idea. But java?

The only advantage Java provides *these* days over something like Clojure or Scala (or Python or even a c + scripting language combination depending on domain, let alone more powerful languages) is that you can be sure an average dumbo "programmer" hired off the street won't run away screaming when introduced to the code base. But if you are a software *startup* (vs big, fat and slow MegaCorp), why would you want to hire "average" (we'll be kind here) programmers?

I mean if you need a lot of libraries, use a better language on the JVM. If you need only a few, use the most powerful language you know. I would have thought it was obvious.

Well I thought about it and found an answer.

Startups are not necessarily founded by great programmers (who presumably are fluent in better languages than java or C#). They are often founded by MBA/business types who bring in a programmer they know and unsurprisingly enough these are the mediocre "enterprise" type of programmer. And they reach for what they know and are comfortable with, and hey presto, yet another j2ee/dotNet startup!

COntinued in Part 2, Part 3 , Part 4

20 comments:

Kunid said...

Quote "[..] let alone more powerful languages [..]".

I'm intrigued. What languages would you consider 'more powerful' that would convey a more favourable impression about the type of programmers at a new startup these days?

Kind regards,
Kunid (not my real name, but a simple permutation of the letters :) )

Venkatesh Sellappa said...

You left something unsaid - most of the MBA , non-programmer types consider programmers to be nothing more than a "resource" and by definition "mediocre" aka "average" resources are plentiful.

Of course, i would add RoR + Social Networking to the mix but then thats a different stpry altogether.

Ravi said...

"i would add RoR + Social Networking to the mix but then thats a different stpry altogether."

;-)

Pick your battles, friend !

Ravi said...

@Kunid,

you do a masterful job of misrepresentation. SO splitting your "when did you stop beating your wife?" type question into two parts

"What languages would you consider 'more powerful' "

This is a joke question? You can't think of a language more powerful than java?

"that would convey a more favourable impression about the type of programmers at a new startup these days?"

This isn't what the blog post says. More Reading Comprhension please;-)

skroderider said...

Or is it because there are so many Java programmers out there (and _some_ of them really good ones), while there are comparatively very few Clojure or Scala programmers? My point being, it is statistically easier to find a good Java programmer.

Ravi said...

@_skoderider_,
You are right *except* that a startup needs a *few* great developers than many god ones, at least till the point it grows into a medium/large company.

The key attribute of a startup is speed. And many languages(even on the jvm, and even fairly "standard" ones like JRuby) make it possible to go much faster than with java.

Kunid said...

@Ravi okay, okay - I should have phrased my question differently - apologies for that.

With regard to the two points raised in your response:

1. Of course I am aware there are better languages that Java - but I do not have enough experience to compare between these languages (something you almost did with the 'more powerful' part of your post - which was of interest to me). I had a premonition your would respond with Scheme or Erlang, but imagine my horror when instead I got the 'wife beating' rebuke :-)

2. Well, yes - that was a digression on the point of the post you made. I am (still) learning...

Best regards.

Ravi said...

@Kunid,
sorry man, no harm done. Hard to read the exact intent in a comment.

You are right many languages are more powerful than java and give a certain minumum of libraries, (say database drivers and networking, + OS integration) *could* be suitable for many startups. (at least in my opinion).

Anonymous said...

i find it sometimes really funny that smart people like you and even Paul Graham are so biased towards programming languages.
But i personally feel that startups run more upon a business or technical idea than probably the technical skills of the founders.
Even from technical perspective how many startups can you enumerate that were built using technically and design wise everything perfect.
I think the initial idea is always implemented in a quick and dirty way, and once you are in market you can take the unending road to perfection.
Well to be honest when your ass is over burning cinders of time and money constraints, the first thing is to get something out quickly , once you have some time to relax you can think.
Doesn't it happen in any realistic scenario when we are struggling with a programming issue :)
It was just an average Java Enterprise Developer's perspective, so may be i have limited intelligence to see things from top developers' perspective

Ravi said...

@anonymous

"It was just an average Java Enterprise Developer's perspective, so may be i have limited intelligence to see things from top developers' perspective"

It certainly seems like it because you haven't read the post thoroughly or understood the point ;-)

you say,

"initial idea is always implemented in a quick and dirty way,"


and "when your ass is over burning cinders of time and money constraints, the first thing is to get something out quickly ,"

yes. The key point (do shake out of that "enterprise programmer with limited intelligence" mindset for a while and you may actually get it) is that more powerful languages allow you to go (much) quicker and (way) less dirty than java *provided* you have good programmers.

Of course if all you have are hordes of ""enterprise programmer with limited intelligence" stick with Java/J2ee the last thing you do will be "get something out quickly - the "limited intelligence" programmers and the braindead language will ensure that ;-)

Next time read the post and understand what is being said before bloviating pointlessly. ;-)

Thanks in advance.

Venkatesh Sellappa said...

"bloviating" - are you now making up words .. :-)

Ravi said...

venkatesh,

bloviate meaning
;-)

abhirama said...

What is that you do not like about Java? I keep hearing this all the time and I am not experienced enough to evaluate programming languages.

One argument I keep hearing against Java is, it is too verbose.
But do not IDE's generate most of the cruft for you? If you do not use an IDE then I totally agree that Java is verbose but with a good IDE I do not see a problem.

The thing I truly miss in Java is functional programming. Due to functions not being first class citizens, many times while coding I have to pass strings and then based on the strings take decisions which function to call. This is truly painful. But, I do like the type safety that comes with Java.

Would be really interested in knowing your opinion.

Ps:Not flaming or trolling.

Ravi said...

@abhirama,
I understand that this is a genuine question. But it is difficult to answer because of your statement that "I am not experienced enough to evaluate programming languages. "
Let me take a crack at this anyway


Many other people (notable Paul Graham) have explained why more powerful languages are appropriate to *small teams of good developers* much better than I could. see http://www.paulgraham.com/vanlfsp.html , http://www.paulgraham.com/power.html, http://www.paulgraham.com/avg.html

But just because PG (or anyone ) says something doesn't make it true. What is true to you is what *you* experience. So
I propose an experiment to you. Carry this through and sincerely and you'll understand much more about these issues than anyone can tell you.

Study a powerful language on the jvm (let me suggest Scala. I choose this because of your focus on type systems. Scala's type system blows Java's type system away).

Put some serious time into this, say 6 months or so of a few days a year. Once you are fluent in scala,
try to replicate one of your existing projects in java with Scala (you can use all the underlying java libraries so you can focus on the value add of your application). Compare the two apps (the one in java and the one in scala)

This hands on exercise will give you a much deeper appreciation of the virtues (or the lack therof)of Java vs Scala (as a representative of a more powerful jvm language) than any number of blog posts (including mine) or logical argumentation.

Venkatesh Sellappa said...

" The American Heritage® Dictionary of the English Language " - baah - tell me when it reaches the Oxford English Dictionary .. :-)

Ravi said...

@venkatesh,
Bloviate isn't british english. AFAIK it is American English slang, but I've never set foot in Englandbut have lived inAmerica so I guess it is ok ;-)

That said, speaking about the Oxford Dictionary in particular I found this


Bloviate is a splendid word from America. According to the Merriam-Webster online dictionary, to bloviate is "to speak or write verbosely and windily". The Oxford English Dictionary, which has only recently picked up the word from across the Atlantic, says it's "to talk at length in an empty and inflated way".

http://www.smh.com.au/news/opinion/witch-hunters-at-it-again-as-bennelong-heats-up/2007/03/02/1172338881136.html

Anonymous said...

This is a nice presentation on Scala and the examples explain what differentiates a powerful programming language

http://www.infoq.com/presentations/Scala-Jonas-Boner

Of course, the best way is to experience it with hands on exercises.

Venkatesh Sellappa said...

@Ravi,

I dear sir , stand corrected.

Steven R. said...

People use Java because its a server-side language that's been around for a long time and has a ton of documentation and plenty of people to support it. I just don't understand why some people have a problem with some programming languages as opposed to others. I love them all for different reasons - it depends on what you're doing. I have used Java, C#, Python, Ruby, Scala, you name it its all the same at the end of the day. Again, these are just *languages*, what about the frameworks -- (I'm assuming we're talking web)... RoR, Django, Spring, ASP.NET MVC, what else? Who cares... pick what you know how to use or you know that someone else you know, knows how to use and march forward. Only developers care about this crap (mostly bad developers) not users, which are the people who matter. Joe User isnt saying, "wow this site rocks, but I can't believe its written in JSP, yuck!" or "I only use Rails sites..." that would be stupid. Dont get so hung up on language - there are no bad languages, just bad programmers (more of them are bad than good). All the really good Java developers work at Google, Amazon or LinkedIn.

Ravi said...

@Steven

Notice: the question was not "why do people use Java"? Read the damn post before ranting.


Amazon uses mostly C++. LinkedIN mostly Scala. Google again C++ (for the performant parts).


Again the question was wahy do *today's* startups use Java.


Hey if you like JSP/Struts, enjoy. Who is stopping you?


No "bad langauges" ? Sure tell that to the folks who have to work in COBOL.





Thanks in advance.