Thought is the blos­som; lan­guage the bud; action the fruit behind it.
Ralph Waldo Emerson

He was so learned that he could name a horse in nine lan­guages; so igno­rant that he bought a cow to ride on.
Ben­jamin Franklin

What is the short­est word in the Eng­lish lan­guage that con­tains the let­ters: abcdef? Answer: feed­back. Don’t for­get that feed­back is one of the essen­tial ele­ments of good com­mu­ni­ca­tion.
Source Unknown

The day before Hal­loween, win­ter arrived in South Cen­tral Alaska.  Now is the time for many months of indoor com­puter learn­ing.  In the sum­mer, I stay out­side in the mid­night sun as long as possible.

My gaol this win­ter is to expand my com­puter pro­gram­ming skills.  At work I use C# and Visual Stu­dio 2010 to develop rich desk­top appli­ca­tions with access to Ora­cle and SQL server.

At home, I have grown weary of Microsoft.  I use VM Player to get to my old copy of win­dows XP.  My host com­puter is Ubuntu 10.04.  I have numer­ous Ubuntu desk­tops and servers that are vir­tu­al­ized and acces­si­ble via VM Player.

I want to write soft­ware in my new envi­ron­ment.  My ques­tion started out to be What Lan­guage?  I have real­ized this is not the right ques­tion.  A bet­ter ques­tion may be: What Tool Set?  I define a tool set as the com­bi­na­tion of IDE (Inte­grated Devel­op­ment Envi­ron­ment), Frame­work and Lan­guage.  For Microsoft, Visual Stu­dio is the IDE, .NET the Frame­work and C# or VB the Lan­guage.  For Ora­cle, the IDE is Eclipse or Net­Beans, the lat­est Frame­work is JavaFX and the Lan­guage is Java.  Another Java Vir­tual Machine (JVM) lan­guage is Scala with the Lift or Play Web Frame­works and uses the same Eclipse and Net­Beans IDE.

Both Ora­cle and Microsoft are try­ing to lever­age their Frame­works to write code once and run on Desk Tops, Web Pages and Mobile Apps.  This the Holy Grail approach and if either com­pany is suc­cess­ful, highly prof­itable.  This is NOT the best approach for me.

Here are the areas I want to learn more about:

  1. HTML5 and CSS3 web development.
  2. Desk Top Appli­ca­tions for Ubuntu
  3. Script­ing Tools
  4. Mobile Devices, Specif­i­cally Android and iPhone
  5. Tablet Devices

For Web Page Devel­op­ment, Microsoft has solu­tions with Sil­verLight and they are start­ing to embrace MVC Design pat­terns.  But for me to develop against IIS at home is expen­sive.  Shared host­ing for IIS is more expen­sive than PHP plans.  An IIS at home is out of the ques­tion.  Visual Stu­dio Pro­fes­sional at home also is beyond my bud­get.  The Visual Stu­dio Express Edi­tions are okay but I would miss the inte­gra­tion of the Pro­fes­sional Edi­tion I use at work.  Microsoft Web Devel­op­ment pretty much requires

Ora­cle Java Servlets and Tom­Cat server are very easy to set up at home in a vir­tual appli­ance.  But Shared host­ing for Tom­Cat is also expen­sive.  The IDE for Java would be either Eclipse or Net­Beans.  Java is very cross plat­form and I code develop on either Win­dows or Ubuntu.  Scala has the same cost neg­a­tives as Java but a lit­tle bet­ter upside because it addresses some of the defi­cien­cies of Java.

Other web page devel­op­ment lan­guages are PHP, Python and Ruby.  Set­ting up vir­tual appli­ances for any of these lan­guages is easy.  I can just down­load one from TurnKey Linux.  Shared host­ing for Python is fre­quently using older ver­sions of Python but cur­rent, rea­son­ably priced hosts can be found like Web­Fac­tion.  For Python, the Frame­work to use is Django.  Web­Fac­tion can host Ruby on Rails which is the most com­mon Frame­work for Ruby.  PHP host­ing is the cheap­est and eas­i­est to find.  There are many, many, many PHP frame­works. CakePHP is a PHP frame­work struc­tured sim­i­lar to Ruby on Rails.  Yii is a fast, light weight Framework.

Because shared host­ing is beyond my bud­get for the Microsoft and Ora­cle solu­tions, which way should I go: Ruby, Python or PHP.

I tried Ruby and it is the best lan­guage of the three.  But Ruby and the Rails com­mu­nity have an arro­gance that is hard for a new­bie.  Ruby doc­u­men­ta­tion is lim­ited and Ruby­ists build with the idea there is only one way to do some­thing: The Ruby Way.  The con­ven­tion over con­fig­u­ra­tion phi­los­o­phy of Ruby on Rails can make devel­op­ment faster but debug­ging hair pulling when the con­ven­tion is NOT understood.

Ruby on Rails was hard for me to deploy unless I used some­thing like Heroku.  But I could not suc­cess­fully build a Rails 3.1 server and deploy by test web pages.

Python is the most uni­ver­sally avail­able on Win­dows and Ubuntu.  I read how to use Django and Python.  I wrote sim­ple Python scripts and they work.  I find Python a ter­ri­ble large scale lan­guage.  No real name spaces and adding fields to a class in the con­struc­tor.  Inden­ta­tion to define new blocks of code inside if state­ments or func­tions.  Python apol­o­gists explain that this reduces typ­ing and makes it more read­able.  Please… { and } are not hard to type and they give me great flex­i­bil­ity how to use white space to make my code more read­able.  A col­league at work and I dis­cuss Python which he uses fre­quently.  We are in agree­ment that a short Python script file can be a great help to get some­thing up and run­ning quickly.  We think Python is a good “glue” lan­guage to stick dif­fer­ent things together quickly.

PHP is grow­ing in capa­bil­i­ties but many peo­ple point out how some peo­ple can write really atro­cious PHP code.  Start­ing with PHP 5.3, there are real name spaces and Yii ver­sion 2 will use these new fea­tures in PHPPHP has some of the ugly traits the dynamic/scripting lan­guages have.  User code can screw import code from libraries.  Dynamic fea­tures allow great power as well.  Peo­ple who love dynamic lan­guages point out this strength and min­i­mize the other prob­lem but just say­ing you must have com­plete testing.

Well, the Test Dri­ven Design (TDD) advo­cates are play­ing up the strengths and hid­ing the flaws.  Before TDD, we called in Top Down Design.  We design the appli­ca­tion from the top down, build­ing the trunk, then the branches, then the limbs and finally the leaves.  But not ever think is known when a project is started.  Some­times we need to write some mod­ule to test how things work.  Then we see the mod­ule and we see the design pat­terns.  We re-factor and then incor­po­rate this into the design.  We evolve.  But TDD already has the tests and the tests need to change with re-factoring so we don’t re-factor as much.  Also in a dynamic lan­guage, re-factoring is eas­ily to insert an error into work­ing code due to typos.  A sta­tic lan­guage like C#, Scala and Java quickly catch typos and greatly facil­i­tate re-factoring.

By dynamic lan­guages have a place and are very pow­er­ful doing cer­tain types of tasks.  But the dynamic fea­ture of these lan­guages is only needed occa­sion­ally but you pay the penalty all the time and need to pro­tect against typos and other errors by cre­at­ing too many triv­ial tests that sta­tic com­pil­ers eas­ily catch.  C# 4 and Scala get past this prob­lem by specif­i­cally allow­ing dynamic vari­ables.  So now you get the ben­e­fits of sta­tic com­piler to pro­tect against the stu­pid devel­oper  errors and just write tests for more sub­stan­tial areas of the code.

But C# and Scala is too expen­sive for me to use in shared web host­ing so what am I to do.  I chose PHP because the IDE, Net­Beans, works with PHP and the Yii plug in will be avail­able with ver­sion 7.1 due to come out in Decem­ber, 2011.

Scala also can be used in Net­Beans and can be run where ever the JVM is installed.  Scala can also link to the .NET frame­work.  So I can use Scala to cre­ate Desk Top apps for both Win­dows and Ubuntu.  As I learn Scala, I may also be writ­ing against Tom­Cat which I can do at home just not in a shared environment.

The Net­Beans IDE also has an Android plug in, so I can work with Java and more hope­fully, Scala, with Android.

I did not solve all my learn­ing desires with Java Vir­tual Machine and Net­Beans, but I did solve many.  What I real­ized is the devel­op­ment tools are impor­tant.  I only want to learn one and that one is Net­Beans.  It gives me cross plat­form and the PHP mod­ule design in it.

Why not Eclipse, it is big­ger and more plug ins.  Well, I just did not like it as much.  Net­Beans 7 seems more focused and has the pieces that I want.

So my pre­ferred Tool Set is Net­Beans 7 IDE and Scala lan­guage.  The Frame­work may be JavaFX or .NET.  With the same Net­Beans IDE, I plan to use PHP with the Yii Frame­work.  Also, I may be work­ing with Android and Scala.

1 Comment on What Language?

  1. […] than a year ago, I won­dered what lan­guage I should learn next.  At the time I con­cluded PHP.  Not that it was the best lan­guage, just […]

Leave a Reply