Programming language barrier

One of the frequent things that I hear about programmers is that it doesn’t matter which language the person is using and which language you need him to use, because if he is any good he’ll learn and catch up pretty fast.  In other words, if you take a decent Java programmer and push him to write PHP code for you, you’ll only have issues for a few days.  Or weeks, at most.

I understand the reasons for this statement, but I don’t agree with it.  At least not completely.

Firstly, the reasons.  They are rather obvoius, but I’d rather stagte them anyway.  Computer Science is not specific to any programming language.  The concepts and approaches are more or less the same everywhere.  Flow control, data structures, and algorithms are not language specific.  Each language has its own best practices and recommended variations, but a bubble sort in PHP will be very similar to bubble sort in Java.   Then you need some common sense, which is also not laguage bound at all.

Secondly, the disagreement.  I think that the Computer Science theory and common sense aren’t the only things that make up a programmer.  What makes a lot of difference is experience.  Programming languages, in their practical applicatoin, are just collections of software – compilers, linkers, debuggers, libraries, IDEs, etc.  Like any other software, programming language software has bugs, undocumented features, and Days When Things Don’t Just Work.  It’s the experience with the language that teaches the programmer how to handle the issues of each software piece.  And that experience is priceless (almost).

Even if you’d manage to push a Java programmer into writing PHP code, that would a waste of resources.  A Java programmer is a Java programmer, not PHP programmer.  He will, of course, learn PHP nuances with time, but, he’ll probably lose a part of his priceless (almost) bagage.  Sounds a lot like misuse of resources.

Another part of my disagreement is not so much reasoned as emotionalized.  I’ve seen a few C and Java developers switch to Perl and PHP for their new positions.  Not that I was forcing them to or anything, but they did.  And the switch was moslty painful to say the least.  Here are some of the areas that I noticed as being hard to comprehend.

Compiling vs. interpreting. Those people who were used to their compilation process were missing something for the first few days.  Some needed as much as a week to adopt, even though write-save-reload browser was done a few hundred times a day.

Debugging. There are two major camps here.  In the first one are all those people who live in the debugger.  They know all the keyboard shortcuts and they have their highlighting customized.  In another camp are people of the simpler nature, those who use print() and die() for most of their debugging needs.  It seems that most people coming from C and Java prefer the debugger way.  Most of the interpretted languages do have either a standalone debugger or a built in debugging tool, but it seems that the majority of interpretted language crowd use the print() and die() approach.

Sigils. If you don’t know what a sigil is, read this Wikipedia page.  Because you do know what it is.  Many strong type language don’t use any sigils.  Most of the loosely typed languages do.  Furthermore, when both the language from which you are changing and the language to which you are changing use sigils, chances are there will still be a difference.  PHP, for example, uses $ for both scalars and arrays.  In Perl though, you’ll get a $ for scalar, @ for array, and % for hash.  Perl’s sigils are extremely helpful when figuring out someone else’s code. I remember the pain of having just a $ in PHP, when I was learning it.  And I can’t even imagine how confusing it is for people who are used to non-sigilized programming languages.

Types. As already mentioned above, strong typed language programmers can be often confused with the fact that variables can change their type on the fly, and that they don’t even need to be declared before use.  Loosely typed language programmers will often complain about the requirement to define their types.  Three of the most common questions that I’ve heard regarding this matter were:

  • “How do I define an array of elements of a certain type of a certain length?”
  • “Is this line a piece of non-sense or does it really do something:   $sum += 0; ?”
  • “What’s wrong with writing:  int amount; amount = 2.5; ?”

There are, of course, more areas than just those – include pathes, include files, OOP, database abstraction, loops (“What the heck is foreach?”), memory management, libraries, and so on and so forth.

Even the list of the resources for each programming language takes time to build.   Yes, time.  And time is one thing that’s always against us.  Everything else we ca handle.

Follow-up to “Where did all the PHP programmers go?”

This is a quick follow-up to yesterday’s post – “Where did all the PHP programmers go?“.

First of all, let me take the moment and say “Wow!”.  Somebody submitted the post to Reddit and it made it to the front page and got an unbelievable amount of comments.  Almost 500, and still coming.  Thank you all.

Secondly, the comments on this blog are fixed finally.  Murphy’s Law in action – they got broken just before the wave came in and they got fixed shortly after.

Thirdly, I should clear up a few things.  My apologies for getting you guys confused.  I never asked any candidate to compare sorting algorithms, much less to implement them.  I asked to sort an array.  I was expecting one of those PHP function calls in return.  But I only got it a few times.  Many candidates didn’t know how to sort an array (apparently they use MySQL to sort an array).  A few suggested “bubble sort”.  Probably thinking that the tasks for testing sorting algorithms.  One even went as far as implementing a bubble sort in PHP.  With pen and paper.  This one was the toughest to decide about, by the way.

Fourthly, the correction.  The language is indeed called Ruby, not Ruby on Rails. I am aware of that.  I was just trying to catch a thought.  Thanks for pointing it out though.

Fifthly, explanation for the pen and paper.  Yes, I know that programmers are used to typing code.  I know that they are used to their tools and online references.  But.  This is an interview.  My time is limited and I have to make a decision.  If I give all the tools and references to my mother, she will be able to solve the problem I am giving in reasonable time.  She is not a PHP developer.  She has no experience with PHP.  But she has enough of common sense to do it.  If I take everything away – she won’t be able to do that.  But any semi-decent programmer will do.  Further on, I am not feeding the resulting paper into the machine.  The only parser that sees that code is the one embedded in my brain.  And I assure you it is very tolerant to minor syntax errors and missing parameters.  I want to see the process.  The approach. Some data structures and algorithms.  A bit of style in variable names, indentation, and empty lines, if I am lucky.  That’s all.

Sixthly, on the exercise itself.  I like to think that I am pretty flexible with answers.  For this particular exercise, a Perl programmer inside me thinks associative array is the best data structre.  (And yes, before you start bashing further, I know that associative arrays in PHP aren’t the same as hashes in Perl.)  I can accept an OOP solution just fine.  What I find hard to accept is a single dimensional array with hopping over a pre-defined number of fields per record.

Seventhly, this post, once it got to reddit and then furthermore to other news streams, generated more candidates and hints to where to find them, then all of my prevoius efforts.  Thanks to all of you who sent me resumes, links, and pointers.  My inbox is a bit overwhelmed right now, but I’ll reply to everyone over the next few days.

Thanks a lot to all of you.

Where did all the PHP programmers go?

During the last six month or so, I’ve been looking to hire a PHP programmer for at least three companies.  I have spoken to quite a few people on the phone, reviewed a bunch of resumes, and even interviewed a few.  Out of all those candidates I recommended to hire exactly zero.

Before you start bashing my high standards, let me explain.  I wasn’t looking for a rocket scientist or anything remotely similar.  Not even a senior PHP developer.  Someone with enough knowledge to take over maintenance of a couple of projects, both of which are based on famous open source software – CakePHP and WordPress.

I can understand that not everyone have worked with or even heard of CakePHP or WordPress.  I can understand that getting used to that source code and going through documentation might need some time.  I can understand that not everyone is familiar with open source software development model and that not everyone has worked in groups, so familiarity with version control software, documentation tools, and bug tracking was never a requirement.

What I cannot understand is why a person who have (according to him) developed more than two dozens of web projects with PHP and MySQL cannot write the simplest piece of code with pen and pencil.  What I cannot undertand is how a “senior web developer” with years of PHP experience and team leading becomes useless when his Dreamweaver is taken away.  What I cannot understand is why people with more than one Bachelor Degree in Computer Science recommend using bubble sort.  What I cannot understand is why programmers start teaching the potential employer about the interviewing process instead of answering technical questions.  And what I don’t understand is why technical people with years of team work, get pissed off or burst into tears when you ask them a technical question, and a simple one at that, during the job interview.

If you are wondering what sort of questions I’ve been asking, here is an example.  A simple questions would be something like: “What is the difference between the stack (also known as FILO) and the queue (also known as pipe, also known as FIFO)?“.  Most of the answer is already in the questions, isn’t it?

Those of the candidates who were boasting about their years of experience and prevoius projects, were given a simple programming task, which could be something like: “Using PHP programming language, create a list to store information about people.  For each person you’ll need to store name, age, and gender. Populate the list with three sample records.  Then, print out an alphabetically sorted list of names of all males in that list. Bonus points for not using the database.“.  Each candidate was given a piece of paper, a pen, and unlimited amount of time.  And in the last six month I haven’t seen one candidate who could write the code to solve that problem.

We’ve been through all job sites, newspapers, local and foreign forums, and recruiting agencies, trying to find the candiate.  We haven’t found even one.  At least three are needed right now.  More will be needed in the nearest future.

Hopefully, by now you will agree with me on that the situation with the human resources on the island of Cyprus is disastrous.  There is more demand than there is supply, and it’s not getting any better.

Those of you who argue in favour of Cyprus being a small, unimportant country in the middle of technological nowhere, might want to wait.  Last year I’ve been in Greece at the Greek Blogger Camp.  This year I’ve been in Amsterdam at The Next Web Conference.  At both events I’ve chatted with a lot of people from all over Europe and the USA.  I’ve also been all over forums and job web sites both local and foreign.  And the feeling I’ve got is that the problem is not Cyprus specific, although, of course, Cyprus has it a bit worse than others, due to its position in the technology world, as well as geographical location.

While still spending a lot of time looking for a PHP programmer, I was thinking about the roots of the problem.  PHP seems to be quite a popular language.  So, why is it such a problem to find a good PHP programmer? (note: “good”, not “great” or even “very good”) Thinking about the roots of the problem, I got this theory, which isn’t even a theory yet, but rather a raw chain of assumptions and conclusions.  Here is how it goes.

PHP is an ugly language

I know a few good programmers personally.  I also read blogs and comments of a few more good programmes on the Web.  And even though many of them use PHP often, or even on a daily basis, I don’t remember anyone of them every saying that they enjoy PHP.  If given the choice of a programming language for a new project, they’ll pick anything – Java, C, Python, Perl, Ruby, Haskell… Anything, but not PHP. PHP has its pros, but being a beautiful or convenient language is not one of them.

PHP is newbie safe

One of the reasons for why PHP is so popular is because it is newbie safe.  You don’t need to know much about anything to start programming in PHP.  Most of the hosting companies will provide you with a PHP enabled hosting account for just a few dollars a month.  You can write PHP in any text editor, so you won’t need a high end machine or expensive IDE.  PHP.net web site has all the documentation and examples that you’ll ever need, so you don’t need to study hard in college or pay for subscription to developers’ network.  All of these make PHP very attractive to beginner programmers.

PHP avoidance

Most of the good programmers that I know, have learned PHP to some degree.   Most of the bad programmers that I know, have also learned PHP to some degree.  But for good programmers PHP was either not the first programming language under their belt, or they’ve moved forward to some other programming language.  Most of the bad programmers that I know, only know one programming language – PHP – and they don’t know it good enough.  So, for good programmers, learning and using PHP is more like a temporary state, while for the bad programmers using PHP is more like a constant state.

PHP is rich with secondary reasons

There are many reasons for why PHP is so popular.  It is free.  It is open source.  It is easy to setup.  Most hosting companies offer PHP-enabled packages, as well as a lot of PHP software pre-installed.

With primary technical reasons (execution speeds, required resources, development speed, etc) not being very different from many other programming languages, PHP wins a lot of popularity with its secondary powers.

PHP is getting mature

PHP started off as a handy Perl library for web development.  It grew and expanded over time.  And so did the projects which were written in PHP.  If, before, most of PHP scripts were doing the simplest of things, such as contact and registration forms, visitor counters and some templating, then now most projects are closer to full scale applications with user management, financial operations, high availability and load balancing setups, etc.

The moment of conflict

And here comes the moment of conflict.  The complexity of PHP applications is growing higher and higher (see above).  And the language is not beautiful enough to attract good programmers and make them stay (see above).  The result?  More and more applications are written by underqualified programmers, and it becomes harder and harder to find qualified personnel (the complexity of your own projects are growing too).

Questions?

How can we attract good programmers to PHP development?  What are really the reasons for using PHP all that often, if it shares the biggest problem with the other languages – impossibility of finding qualified personnel.  Is there any other programming language that can solve this problem?  Is there any solution at all?

Solutions

These, of course, I don’t have, as usual.  But.  I am looking with interest at hosted application services.  The ones like from Amazon and Google.  I think these will mature of the next few month and years.  And there will be a few more (Yahoo, Microsoft, and IBM maybe?).

The way I see hosted application services is like this.  They will split the programmers into two categories.  The first category will be all those novice programmers, who don’t know how or don’t have the resources to take care of everything.  They’ll be using hosting, databases, libraries, and programming interfaces provided by hosting application services. (Of course, good programmers will be using these too, but they will have a choice, not like the newbies).  Hosted application services will (not yet though) make it easy to cover the ignorance and help to make a few bucks here and there.  Exactly like PHP has been doing it for years now.  The good programmers though will mostly participate in in-house projects and customization developments, which won’t be fitting into hosted application services, and will require additional knowledge and experience.

Summary

If you are a PHP developer looking for a job in Cyprus, please let me know.

Annoying software

Slashdot is running the post about annoying software.  The fact that Slashdot crowd mostly consists of computer geeks is sort of a guarantee for some interesting comments.

With my Fedora 9 saga I had to review and try a lot of new software.  Needless to say, I found quite a few annoying bits.  Here is a brief list, just to give you an idea:

  • Clock applet in Gnome. It shows calendar with Sunday being first day of the week.  If you don’t like it, you’ll have to recompile your locale to change it. This one is cancelled out though by an excellent support of Google Calendar (or, for that matter, any other web published calendar).
  • Metacity window manager in Gnome. Window titles are displayed in the middle.  This is really annoying for those of us who are used to seeing them on the left.  There is no option to change this setting either in GUI or in GConf.
  • Pidgin new message notification. I once had it popping up nice looking bubbles, but I don’t remember how I managed to do it.  I also don’t remember how I managed to break it.  And I have no idea to bring them back.  I really miss them though.
  • WordPress 2.5 post editing screen. It has been much reworked in the latest version and looks and feels so much better. However, the list of categories was moved from a really convenient location on the right of the screen to a really inconvenient location at the bottom of the screen.
  • FileZilla FTP manager. This one drives me nuts with server connections.  It either disconnects every 40 seconds when being idle.  Or it keeps multiple connections open forever and most FTP servers block me out temporary.
  • Request Tracker (RT3). Works perfectly with queues and tickets, but annoys the heck out of me when I need to do something with users.  Users aren’t first level citizens, like tickets.
  • SugarCRM. Excellent business tool, with lots of small annoyances, like not being able to set default user role, disable theme selector everywhere, change logos to company ones, lock down the functionality, etc.  Most of these are easily fixable.  But some aren’t as trivial as they may sound or seem.
  • Google Reader. This one annoys me a bit (but often) when I want to leave a few items in the feed unread and go deeper into archives.  Somehow it keeps marking everything I passed as read.

Now, what piece of software were you annoyed with recently?