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.

Read 124 comments


  1. Great suggestions Leonid and John. I have several certifications already, but more certainly couldn’t hurt.

    I’ve thought many times about participating in open source projects, but I’ve always been intimidated because I’ve never worked on a team like this before and like I said in my comment, I have no real true way to compare myself to other programmers.

    John you are absolutely correct about the half completed projects. I have so many of those laying around on my drives that I’ve lost count. Many are extremely good ideas and I’ve done countless hours of work on them, but being a lone coder, I often bite off more than I can chew or move on to something else even more interesting.

    I think I will try and get on board some open source projects, at least one to get my feet wet for now. Even if it doesn’t help me get past the HR dept., it’s invaluable experience, and I would get the chance to give back to the community that has given me so much.

    Thanks for the time and advice guys.


  2. Mathew

    A CV/Resume with good “experience” on it will get you through my door, but if you want a job then you have to impress me with your code, ability to grasp problem and come up with solution.

    I’d expect to see code written purely by you, that demonstrates Object Orientation, clearly shows you understand patterns and re-usability, the best way of doing this is coding up your own set of libraries.

    Since the code would be relatively small, its all your own work it, its much easier for them to review.


  3. Matthew,

    yes, that’s the one. I did a few of the myself, however it was the time during the special offer, when they were sending certificates free of charge. I didn’t pay anything for it and got a few.

    This were pretty handy when, as I said, there wasn’t much that I could put on my CV. Together with open source projects in experience it gave me something. Plus the certificates were quite useful when I was getting the work permit from the Ministry of Labour and arranging my immigration paperwork. Those guys didn’t know much about IT certification, but sure loved every shiny paper. :)


  4. There is no substitute for practical work and being a contributor to open source project or having started and shipped your own open source project. If I can see and verify that you’ve done either of these it means you get an interview with me every single time regardless of anything else on your resume.

    I’m interested in shipping quality software on time more then certs, degrees and buzzwords. Most technical hiring managers are.

    If a candidate has things like brainbench, CCNA, Microsoft Certifications, Redhat certified, A+ certified etc on their resume it detracts from them and I often will not call them back. Most hiring managers don’t want certs, they want proven results. We also have found a correlation between number of 3rd party certifications and how badly a candidate does in our interview process… If I wanted to judge someone’s test taking ability I’d value these things more..


  5. John,

    I understand what you are saying. However, that’s a very “technical” view. While techies, myself included, are more interested in practical experience, there is an academic and certification side to it too.

    HR clerks, managers, and all sorts of government institutions, such as immigration authorities, are often more interested in education, certifications, and such. Totally avoiding this on the resume might harm as much as not having any real experience.

    For example, here in Cyprus, when citizens of certain countries apply for working permit, they need to be able to prove to the immigration authorities that they possess a certain skill set and are suitable for the job more than any of the possible local candidates. And immigration authorities being what they are, they have no clue about technologies and open source projects. They pay attention to papers only. And the more papers you have, and the more stamps and signatures on them, the better candidate you are.

    Same often applies to executive directors and supervisors of different levels. Being a technology person you might see the potential of the candidate. However you still need sometimes to prove or explain to such a supervisor/executive why this particular candidate is chosen. Education and certification help in this regard.


  6. I do have a very US centric point of view which can be summarized as :

    1) Degree from a ranked institution: Great, lets talk
    2) Real experience that matters: Fantastic, I REALLY want to talk
    3) ‘Certification’ without any real experience: Go home, it just means you could not complete a university degree, have no functional knowledge and are trying to backdoor a qualification

    Certifications not backed up by real experience are looked VERY much down upon. They are basically purchased certifications.

    BTW: I have been a Director of Engineering for 4 years and a VP for the last 2 and before that was a technical manager and software engineer. Certifications without valid experience are viewed the same at all levels unfortunately. HR managers pass may pass them through but we usually will not talk to them.

    Bottom line: A certification for the sake of a certification is harmful in my worldview. But I am not trying to immigrate and I do not deal with bureaucratic processes that you may see if you are looking for a job in gov’t etc. Certifications may matter very much in that environment, your mileage may vary.

    Other Bottom Line: Finish those side projects, completion matters more then education. Am I going to hire the guy with CS degree but who has had a different job every 3 months and never completed a side project or am I going to hire the non-CS degree person who is a committer to an Apache project and built a Tesla coil for fun and wants to tell me all about it…? Tesla Coil guy is getting the job every time.


  7. Great information here guys. I just wanted to follow up:

    K, good idea about polishing up some of my libraries. I have a handful of useful little libs I’ve written for various things, mostly wrappers around linux apps/libs and web APIs. Most are quite short, and I take great pride in my code, so they’re almost all fully documented and well formatted. I’m going to get some of these posted on my website ready for potential employers to download/view. I have a couple things up on codeproject already and a fairly successful program on download.com.

    Leonid, I did a free C# test on that website just to see what kind of quality they were. It was actually relatively difficult, since it was mostly memory stuff, and concepts not often used in C# as far as I’ve seen. I did quite well. You can tell a C++ programmer wrote the C# test :) I may look into a few others, even if just for the personal challenge. I already have a bunch of Microsoft certs and some Comptia stuff. Unfortunately, I’ve found these certs more or less useless when applying for jobs, since I don’t have any real experience yet or a university degree. I don’t see how the certs can detract from my CV, but without the others, they haven’t helped me much.

    John, while I have no doubt that you are correct in many cases, my biggest problem is getting past that first person in HR that weeds out all the resumes that don’t have a university degree on them, since almost every job I apply for has that as the main qualification to be considered. On top of this, many people who attended university don’t understand how anyone can learn without attending. That’s why I’ve completed all these certifications, in hopes of getting past that level in the process. I have no doubt in my mind that if I could get straight to the technical manager, or equivalent, I would at least be considered. Like you and K have said, at least having my projects completed shows follow through. I have a massive directory on storage full of nearly completed apps and big bin in my lab full of completed custom circuit boards, etched by hand, programmed by hand in C/ASM that I should take some time to document and photograph and put on my website.

    I still won’t pass the university filter, but at least I’ll have something to show for all my work. And if I were to meet the technical manager on the street, I would have something to show him that might lead to a job.

    I’m going to be looking into some of my favourite open source programs to see if I might be able to contribute my efforts. This way the “Experience” section of my CV will have something besides irrelevancies.

    Thanks so much guy for taking the time to give some advice to someone who needs it.


  8. I just wanted share a humorous anecdote from my experiences:

    When I lived in London, Ontario I applied for a Junior Network Administrator position at a large insurance corporation. I was fresh out of school, that is, I had just spent the last 6 months completing Microsoft network certifications. My uncle was the Chief Executive Officer of the entire corporation and he was pleased to allow me to put him as a reference on my CV. Not even a recommendation from the CEO himself can push one through the University filter, especially in a city like London, which has a large and well recognized university, with lots of graduates looking for work.

    Anyway, I just wanted to share that since it illustrates my problem perfectly.


  9. I took the challenge right away when reading the article, and this is what I came up with:

    #!/usr/bin/env php
    $value)
    {
    if ($value[1] == M_MALE)
    echo “$key\n”;
    }

    Pretty simple stuff, really. But I hope using the name as a key, thus making them unique isn’t considered cheating.


  10. I think wordpress ate my script (everything between <?php and > in the foreach expression seems to be missing), so I’ll just post the code without the usual boilerplate:

    define (‘M_MALE’, 1);
    define (‘M_FEMALE’, 2);
    define (‘M_BOTH’, M_MALE & M_FEMALE);

    $people[‘John’] = Array (16, M_MALE);
    $people[‘Alice’] = Array (24, M_FEMALE);
    $people[‘Bob’] = Array (32, M_MALE);

    ksort ($people);

    foreach ($people as $key = $value)
    {
    if ($value[1] == M_MALE)
    echo “$key\n”;
    }


  11. the expression in the foreach line is wrong, but wordpress ate that > So I’ll just repost with html entities here, OP, you may delete the other comments.

    I took the challenge right away when reading the article, and this is what I came up with:

    #!/usr/bin/env php
    <?php
    declare (encoding=’UTF8′);

    define (‘M_MALE’, 1);
    define (‘M_FEMALE’, 2);
    define (‘M_BOTH’, M_MALE & M_FEMALE);

    $people[‘John’] = Array (16, M_MALE);
    $people[‘Alice’] = Array (24, M_FEMALE);
    $people[‘Bob’] = Array (32, M_MALE);

    ksort ($people);

    foreach ($people as $key => $value)
    {
    if ($value[1] == M_MALE)
    echo “$key\n”;
    }

    Pretty simple stuff, really. But I hope using the name as a key, thus making them unique isn’t considered cheating.


    • I still don’t get why are you writing the script with the shebang line environment PHP.

      Shouldn’t be the php binary like in Perl style to use php as a shell application?

      Or if you just need to run php from a terminal, a regular php file will do it.

      And those weird functions $value){ and constants not defined. That’s not PHP. And for sure the PHP module will catch those errors.


  12. Good read, and agreed wholeheartedly. If you look for any tool in PHP (such as, oh, a staggered database backup script -- I can’t be bothered with sending a copy of my ID to my site’s cheap host), you’re bound to encounter:

    * Something with ‘class’ in its name, such as ‘Database backup class’. It seems that, when it comes to PHP, ‘class’ (and ‘oop’) has become a marketing term, instead of a programming paradigm like it’s supposed to.

    * Numerous sites that ofttimes offer ‘php classes’ for a thousand and one applications, which are horribly styled, require you to log in, and/or require you to vote or rate something, and/or fill in your own.

    * When you do finally find what you’re looking for, it’ll either:
    * Look very promising, but the download doesn’t work
    * Look like it’s what you’re looking for, but doesn’t work
    * Be something that, in terms of code, resembles something written by a… wait, I believe this kind of code is its own analogy -- PHP code written by a dedicated PHP scripter.

    I’ve seen lots of things. Database classes, (i.e. class Database or, in some cases, class DB) whose name itself already indicates the programmer doesn’t halfway know what a class or OOP actually is. Heaps of echo and HTML code in a class (‘yeh my code is 100% object-oriented! hire me for $50,- an hour!’ -- and the thing was, people actually hired this one for that amount), etc.

    I have to be frank here: I started out with PHP. It was my first language, I made a class Database, I’ve asked the $50,- hour programmer to help me out with generating a list of a hundred checkboxes (and couldn’t understand the triple foreach loops he produced), etc.

    But then I got an education. We first got Pascal, but I hardly remember anything from that. Then a bit of PHP, which was a breeze. But in the second year, we got Java, and I learned how to program. I learned to program even better during my first internship, when I had to make a full-blown web application in Java alone. That got me into contact with how to glue numerous libraries together, teached me the value of good documentation, clean code, unit testing (which in turn teached me how to write code properly, i.e. testable and whatnot), etcetera.

    I later applied that to a PHP project of mine, in combination with Zend Framework (which, imo, is the best PHP framework I’ve encountered so far, written by Real Programmers). Clean code, proper application of OOP, etc.

    PHP isn’t the best language out there. I particularly dislike it because of the thousands of self-proclaimed expert programmers in that language, the tens of thousands of flat out bad examples on the internet defined as the Ultimate Truth and Best Way To Do It, andsoforth.

    However, I’ll not deny that it’s slowly starting to mature. I’ll also not deny that it IS possible to write good code in it. It’s just a matter of knowing what the hell you’re doing.

    The last thing I did in PHP was write a handful of very simple tools -- one that checked a website’s uptime (called every 5 minutes by a cronjob), that kinda thing. Didn’t need classes, as it’s fifty lines or so of simple, straight, and logical code. From my point of view, that’s still the main type of programming anyone should do with PHP.

    And I’d love to see alternative programming languages and environments get as much cheap hosting as PHP does. And no, I’m not referring to Ruby on Rails, I’ve tried that, but I quit when it turned out my then-host didn’t let me restart the Ruby instance and reload something as basic as the database configuration -- which I got wrong the first upload, and I got locked out of changing it since then. Not a good thing.

    Blargh.


  13. @Daniel Kerr:

    I’ve taken a quick look at your code, and I facepalmed a little.

    * Usage of a registry instead of the preferred and cleaner method of Dependency Injection, see http://martinfowler.com/articles/injection.html.

    * Class MySQL. function Query($sql). Terrible. Try class MySQLConnection extends (or implements) DatabaseConnection, function InsertQuery(Query $query), etc. Also, one would expect something like that to use PDO by now, mysql_query is sooo 2000.

    I’m being anal, I know, but I can be very critical about things like this (i.e. logical OO design).


  14. It does seem other countries care more about certifications and degrees than the US does.

    I think when I was in the US, it was easier to make a career change too. Career change as in moving from a data analyst to software testing or business analyst.

    Where I am now, it seems to be all about how many pieces of paper you have and it is very easy to be pigeon holed into one niche and difficult to make a change.

    I have shunned certificates as most of them are just money making schemes for the certifying “authority”. Some are so easy you could read over a weekend and pass the test and not ever having been working in that area at all.

    I think the problem with asking people to solve technical problems during an interview is that it is unnatural to how most people work. I am not a professional interviewee. I am a professional IT person.


  15. Read your article. The problem u faced is not new to me because you are at the other side of coin.

    Basic problem is that you want to test the programmer. And this is the funniest part. Because the role of tester is with programmer (if no tester is available which is wrong) to test the program. Programmers generally program and test before giving it to tester.

    Best Programmers are worst Theoriticans. The theory is one thing and actual work in life is different. Most of the theories are encapsulated in functions, methods of classes and a programmer is not bothered unless he is writing in assembly language. PHP does not require a programmer to know what is FIFO or LIFO or similar terms. Dont worry if at all it is required, we learn then and there where required and then forget it.

    Driving and Knowing Driving by theory is different. We do not remember how we drive when drive. Fingers and Mind they work together to do driving where as we are busy in either watching traffic / signal etc or in our thoughts.

    If you ask how you drive and what is the difference between handle and cluch or break (theoretically or how it works), its not important. My leg automatically presses the break or clutch and hands automatically turn the handle. (Perhaps a beginner requires to care all these not an experienced driver).

    As experienced driver perhaps wants to compete with ShueMachor (i am not sure about spelling) , a programmer wants to compete with best of all times (perhaps billgates) and wants to teach you how the world of actuals work. Where as you have doubt on his skills about basics of the PHP.

    Dont Insult experienced people like this. If someone says he is experienced, just accept him and does not get you desired result, just say sorry to him but dont assume he is fool. He is good but he is beyond you.


  16. I know i’m overcomplicating things now, but this is what i would submit (given that i had at least 10 minutes to come up with an answer):

    name = $name;
    $this->sex = $sex;
    $this->age = $age;
    return $this;
    }
    }
    class PersonDB
    {
    private $persons = array();
    public function add(Person &$person)
    {
    $args = func_get_args();
    foreach($args as $arg)
    {
    $this->persons[] = $arg;
    }

    }
    public function sort(&$objArray,$indexFunction,$sort_flags=0)
    {
    $indices = array();
    if(!$objArray[0] instanceof Person) return false;
    foreach($objArray as $obj)
    {
    $indeces[] = $this->$indexFunction($obj);
    }
    return array_multisort($indeces,$sort_flags,$objArray);
    }
    public function getIndex($obj)
    {
    return $obj->name;
    }
    public function selectBySex($sex = “Male”)
    {
    $sex = ucwords(strtolower($sex));
    $tmp = array();
    if($sex != “Male” && $sex != “Female”) return false;
    foreach($this->persons as $person)
    {
    if($person->sex == $sex) $tmp[] = $person;
    }
    return $tmp;
    }
    }

    $persons = new PersonDB;

    $john = new Person(“John Doe”, “Male”, 15);
    $marie = new Person(“Mary Doe”, “Female”, 36);
    $jane = new Person(“Jane Doe”, “Female”, 26);
    $frank = new Person(“Frank Doe”, “Male”, 34);
    $albert = new Person(“Albert Doe”, “Male”, 39);

    // Add the persons to the object
    $persons->add($john,$marie,$jane, $frank, $albert);

    // Select by sex
    $persons_selected = $persons->selectBySex(“Female”);

    // Sort the persons
    $persons->sort($persons_selected, “getIndex”, SORT_ASC);

    var_dump($persons_selected);

  17. Pingback: (Programming) Language Wars « duck punching


  18. I too have had difficulty finding good quality PHP programmers. They are hard to find. Yes there are lots of PHP programmers, however there are few that will come to work daily and do a reasonable amount of work. I hear one has to hire 6 PHP programmers to get on decent one. Too much drama for me.

Leave a Reply