Thought is the blossom; language the bud; action the fruit behind it.
Ralph Waldo Emerson

He was so learned that he could name a horse in nine languages; so ignorant that he bought a cow to ride on.
Benjamin Franklin

What is the shortest word in the English language that contains the letters: abcdef? Answer: feedback. Don’t forget that feedback is one of the essential elements of good communication.
Source Unknown

The day before Halloween, winter arrived in South Central Alaska.  Now is the time for many months of indoor computer learning.  In the summer, I stay outside in the midnight sun as long as possible.

My gaol this winter is to expand my computer programming skills.  At work I use C# and Visual Studio 2010 to develop rich desktop applications with access to Oracle and SQL server.

At home, I have grown weary of Microsoft.  I use VM Player to get to my old copy of windows XP.  My host computer is Ubuntu 10.04.  I have numerous Ubuntu desktops and servers that are virtualized and accessible via VM Player.

I want to write software in my new environment.  My question started out to be What Language?  I have realized this is not the right question.  A better question may be: What Tool Set?  I define a tool set as the combination of IDE (Integrated Development Environment), Framework and Language.  For Microsoft, Visual Studio is the IDE, .NET the Framework and C# or VB the Language.  For Oracle, the IDE is Eclipse or NetBeans, the latest Framework is JavaFX and the Language is Java.  Another Java Virtual Machine (JVM) language is Scala with the Lift or Play Web Frameworks and uses the same Eclipse and NetBeans IDE.

Both Oracle and Microsoft are trying to leverage their Frameworks to write code once and run on Desk Tops, Web Pages and Mobile Apps.  This the Holy Grail approach and if either company is successful, highly profitable.  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 Applications for Ubuntu
  3. Scripting Tools
  4. Mobile Devices, Specifically Android and iPhone
  5. Tablet Devices

For Web Page Development, Microsoft has solutions with SilverLight and they are starting to embrace MVC Design patterns.  But for me to develop against IIS at home is expensive.  Shared hosting for IIS is more expensive than PHP plans.  An IIS at home is out of the question.  Visual Studio Professional at home also is beyond my budget.  The Visual Studio Express Editions are okay but I would miss the integration of the Professional Edition I use at work.  Microsoft Web Development pretty much requires

Oracle Java Servlets and TomCat server are very easy to set up at home in a virtual appliance.  But Shared hosting for TomCat is also expensive.  The IDE for Java would be either Eclipse or NetBeans.  Java is very cross platform and I code develop on either Windows or Ubuntu.  Scala has the same cost negatives as Java but a little better upside because it addresses some of the deficiencies of Java.

Other web page development languages are PHP, Python and Ruby.  Setting up virtual appliances for any of these languages is easy.  I can just download one from TurnKey Linux.  Shared hosting for Python is frequently using older versions of Python but current, reasonably priced hosts can be found like WebFaction.  For Python, the Framework to use is Django.  WebFaction can host Ruby on Rails which is the most common Framework for Ruby.  PHP hosting is the cheapest and easiest to find.  There are many, many, many PHP frameworks. CakePHP is a PHP framework structured similar to Ruby on Rails.  Yii is a fast, light weight Framework.

Because shared hosting is beyond my budget for the Microsoft and Oracle solutions, which way should I go: Ruby, Python or PHP.

I tried Ruby and it is the best language of the three.  But Ruby and the Rails community have an arrogance that is hard for a newbie.  Ruby documentation is limited and Rubyists build with the idea there is only one way to do something: The Ruby Way.  The convention over configuration philosophy of Ruby on Rails can make development faster but debugging hair pulling when the convention is NOT understood.

Ruby on Rails was hard for me to deploy unless I used something like Heroku.  But I could not successfully build a Rails 3.1 server and deploy by test web pages.

Python is the most universally available on Windows and Ubuntu.  I read how to use Django and Python.  I wrote simple Python scripts and they work.  I find Python a terrible large scale language.  No real name spaces and adding fields to a class in the constructor.  Indentation to define new blocks of code inside if statements or functions.  Python apologists explain that this reduces typing and makes it more readable.  Please… { and } are not hard to type and they give me great flexibility how to use white space to make my code more readable.  A colleague at work and I discuss Python which he uses frequently.  We are in agreement that a short Python script file can be a great help to get something up and running quickly.  We think Python is a good “glue” language to stick different things together quickly.

PHP is growing in capabilities but many people point out how some people can write really atrocious PHP code.  Starting with PHP 5.3, there are real name spaces and Yii version 2 will use these new features in PHP.  PHP has some of the ugly traits the dynamic/scripting languages have.  User code can screw import code from libraries.  Dynamic features allow great power as well.  People who love dynamic languages point out this strength and minimize the other problem but just saying you must have complete testing.

Well, the Test Driven Design (TDD) advocates are playing up the strengths and hiding the flaws.  Before TDD, we called in Top Down Design.  We design the application from the top down, building the trunk, then the branches, then the limbs and finally the leaves.  But not ever think is known when a project is started.  Sometimes we need to write some module to test how things work.  Then we see the module and we see the design patterns.  We re-factor and then incorporate 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 language, re-factoring is easily to insert an error into working code due to typos.  A static language like C#, Scala and Java quickly catch typos and greatly facilitate re-factoring.

By dynamic languages have a place and are very powerful doing certain types of tasks.  But the dynamic feature of these languages is only needed occasionally but you pay the penalty all the time and need to protect against typos and other errors by creating too many trivial tests that static compilers easily catch.  C# 4 and Scala get past this problem by specifically allowing dynamic variables.  So now you get the benefits of static compiler to protect against the stupid developer  errors and just write tests for more substantial areas of the code.

But C# and Scala is too expensive for me to use in shared web hosting so what am I to do.  I chose PHP because the IDE, NetBeans, works with PHP and the Yii plug in will be available with version 7.1 due to come out in December, 2011.

Scala also can be used in NetBeans and can be run where ever the JVM is installed.  Scala can also link to the .NET framework.  So I can use Scala to create Desk Top apps for both Windows and Ubuntu.  As I learn Scala, I may also be writing against TomCat which I can do at home just not in a shared environment.

The NetBeans IDE also has an Android plug in, so I can work with Java and more hopefully, Scala, with Android.

I did not solve all my learning desires with Java Virtual Machine and NetBeans, but I did solve many.  What I realized is the development tools are important.  I only want to learn one and that one is NetBeans.  It gives me cross platform and the PHP module design in it.

Why not Eclipse, it is bigger and more plug ins.  Well, I just did not like it as much.  NetBeans 7 seems more focused and has the pieces that I want.

So my preferred Tool Set is NetBeans 7 IDE and Scala language.  The Framework may be JavaFX or .NET.  With the same NetBeans IDE, I plan to use PHP with the Yii Framework.  Also, I may be working 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 to What Language – Part 2? | Michael Gillson Cancel reply