Friday, August 12, 2005

Java/.Net vs PHP/Ruby/Perl/Python

-----Original Message-----
From: Noland, Brock (TLR Corp)
Sent: Tuesday, August 09, 2005 4:31 PM
To: Noland, Mac (West)
Subject: Java/.Net vs PHP/Ruby/Perl/Python

I have been thinking about this lately.... And our earlier talk reminded me that I wanted to see what you had to say... In the Java/.Net vs PHP/Ruby/Perl/Python argument, the most important question in my mind is this:
What is the most expensive part of this system, kaptial or labor?
In novus, its most likely kapital. Then I think java/.net is appropriate because it is more efficient with CPU cycles. In A TON of businesses, its labor. Then I think that PHP/Ruby/Perl/Python are more appropriate because they are faster to develop in and there is a ton of cheap labor who know these language's.

Whats your thoughts?
Brock

From Mac --
99% of the time, labor is always more expensive. Hence my theory below: I think you could debate the strengths/weaknesses of programming languages, from a technical point of view and business point of view, until you're blue in the face. Let's face it, most languages have some slight advantage.

From my point of view the debate should be one level higher at the design level. At that level I feel UML is the most advantageous right now because of an available knowledge base and easier implementation in any OO language. Implementing any program from a good design is easy to do in any language. And great design is where the experts separate themselves in my view.
Mac


From Brock --
So what you are saying is if you design the system in UML, you can offshore the coding and no matter what language you are using the cost difference will be negligable. However, in the US java/.net programmers demand MUCH higher salaries than PHP/Ruby/Perl/Python programmers. In addition, it WILL take longer to code something in java/.net than PHP/Ruby/Perl/Python.

Thus I agree with you, if you have a low cost supply of coders.

This makes sense for IT companies. What about companies where IT is not there main business? Small businesses like the individual university departments and small/medium sized business websites. Things of this nature... Most likely there will not be enough work to take advantage of this "a great design is cheap to implement" philosphy? What should these companies do?
Brock

From Mac --
Yes. I'm interested to hear where you get your information regarding java/.net developers being more expensive than PHP/* developers in the U.S. and your statement that developing something in java/.net takes longer? I have minimal experience in PHP/* (actually just perl), so I'm no expert, but I've found that implementation is easily in any language as long as you know it (mainly the foundation API) well. I don't think writing a web application in PHP is any faster for me than writing it in .NET, of which I have little experience in either.

Small businesses should look at getting a small core group (or one person) of excellent software architect(s). They'll have to pay them well, but this person (or people) should be able to design software/hardware/support solutions and outsource the implementation to a combination of local contractors and off-shore resources. If you can't find those good core people (architects), then you should look in the mirror and understand you're going to pay out of your as* for sub-par workmanship until you do find a core set of good people.

I guess basically the argument is not about programming languages (anyone can write import java.* or include #main.h), it's about great architects that have tremendous design and communication skills. You find them, and you could write your own language and be successful.
Mac


From Brock --
Interesting! The thing we disagree on is whether programming languages matter. You argue they don't because the cost is the same to accomplish an abitrary task. I argue that the cost is not the same, and thus languages matter. First, to answer your questions.

Productivity of a language:
I saw a comparison in one of my text's as to the average number of lines of code (excluding comments) it takes to complete a task. Scripting languages were significantly lower than Java or C based languages. Thus I am making the asertion that more lines, means more time. However, I was able to find the following scholarly paper on the issue. It appears to be highly regarded because it has been cited over 250 times in published papers. (PHP is not on these graph, but the purpose of PHP was to make development faster than PERL. And from my expirence with both languages, it is MUCH MUCH faster than PERL. In development time, not speed of execution.) See "work time and productivity"http://page.mi.fu-berlin.de/~prechelt/Biblio/jccpprt_computer2000.pdf

Cost of a programmer based on the Language:
This is tougher. However, there are two arguments which support my assertion. The first being that scripting languages are usually higher level. Thus it would be logical that they are easier to learn and that more people learn them. This would create a higher and more flexible supply of these types of programmers. The second being empiritcal and qualative. At housing there was two full time software engineers, the both had between 3 and 5 years expirence. One java and one php. They worked together and had the same job for different areas of the business. The Java guy made $75K and the PHP guy made $37K.

Now to support my arugment, that programming languages matter:
I agree 100% that anyone can write "import java.*" but the fact is that they don't. Anyone can paint a house, fix a car, or do anything they want, if they try. But they don't. Differences in compensation exist, and are real. Also note, that at this moment in time, you can offshore for cheap, but due to the mobility of capitial and labor.. That will not always be the case.

I agree that for large IT businesses your model, is possibly a good one. In my opinion it’s a great one. But what I argue, is that programming languages matter, because most of the time labor is your biggest cost. Even if you have the best architects in the world, the system still has to be implemented! (If there is a way that you can change this equation, then programming languages don't matter.) Thus it makes sense to use the lowest cost language in terms of labor. Which in my opinion and due to some evidence, is not Java/.Net. Anyway, it is an interesting argument, with good points on both sides.
Brock


From Mac --
Understood and well backed. I still believe programming languages don't mater if the organization is run correct.

Not to beat a dead horse, but my theory is solutions to problems should be abstract from the tools you use to solve them. Red hammer, blue hammer, black hammer; if your problem is getting nail in a board and your solution is to use force by driving it in, then any of the tools listed above are apropos. If your solution is to screw the nail in, then no mater what tool used (as defined above) you're going to, and I quote, "pay out of your as*, for sub-par workmanship." Hence the need for good architects, not people who know how to swing a blue/red/black hammer.
Mac


From Brock --
Another extremely good paper I found was:http://ieeexplore.ieee.org/iel3/2/14386/00660187.pdf "Scripting languages represent a different set of trade-offs than system programming languages. They give up execution speed and strength of typing relative to system programming languages but provide significantly higher programmer productivity and software reuse. This trade-off makes more and more sense as computers become faster and cheaper in comparison to programmers. System programming languages are well suited to building components where the complexity is in the data structures and algorithms, while scripting languages are well suited for gluing applications where the complexity is in the connections."

Ok I have realized our difference. You are looking at the problem from an engineering standpoint. From this perspective you argue implementation is not important, because you are designing abstract systems. I am looking at from an operational standpoint. From this perspective, implementation is everything. And in doing so, you must make decisions based on cost. I argue that in most situations, the cheapest solution is going to be scripting languages.
Brock

2 comments:

Anonymous said...

Excellent post... I really appreciate you sharing this. I made a comment about it on our blog & gave you props.
http://tinyurl.com/8xf8r

David said...

I would also add, that if languages do not matter then everything would be written in C as its far faster in speed of execution than anything else.