I get e-mails often of companies looking to hire me or find a hot-shot front-end Ajax-style PHP coder. It’s very difficult to help and I don’t know who to recommend.
My policy is to cast a wide net and then grill the people in interviews until they break in order to see where their real knowledge is. Others can’t be so luxurious because they’re not me. Anyone who can string a web page together with MySQL can (and often does) call themselves a “front-end PHP coder.” The variance in quality is very high, so high that I often recommend a good solid C programmer over a PHP one, because the former can learn PHP if need be.
The problem here is this doesn’t work well for a front-end UI developer because the web is a tricky business.
Ben mentions a different problem. What should the going rate of such a person be?
The rate conundrum
I agree with the general gist of the article. In theory the rate should be comparable with a comparable Java front-end coder, probably quite a bit higher since a Java programmer belongs to a company and receives benefits but we’re talking freelance work here.
I’m not sure what that rate is myself.
The problem here is for PHP programmers to be able to demand this rate, there needs to be a better system of separating the wheat from the chaff as I mentioned above.
In the PHP world there is no “signal” for qualification. The closest thing we have is Zend Certification. And how good is that? I never bothered to take the test and have no need. Nor does it test what is currently the largest need in the industry: PHP coders who understand Ajax. The result is that the supply of PHP coders seems extremely high when the reality that the supply of good coders is actually quite low.
Demand on the other hand is decent but lower. PHP engineers get their shit done using much less programming resources than other ones because the language mentality causes them to glue stuff together from existing resources. For instance it’s not “PHP” per-se, it’s “Linux Apache MySQL PHP” and a host of any tools and resources: want to scale that session? we consume memcached instead of rolling our own in PHP. And how is any certification going to catch that approach?
Large apparent supply, medium demand mean lower prices. That’s life, learn to live with it. The first time I went to OSCON, I saw about 90% of the Java developers had Apple Powerbooks; Only about 10% of the attendees at the PHP talks had Powerbooks and maybe the same number had iBooks. Over time, the latter has increased, but it is nowhere close to parity.
Want more money as a developer? Code Java for “enterprise” (clearly the “final frontier” of making a market where none should exist).
Tickling the price-fixing dragon
The only problem I had with Ben’s article was that he recommended actual rates. I don’t think it is proper that we mention actual suggested rates in a post generally read by PHP programmers on “what to charge”—it smacks of collusion/trusts.
It’s technically alright because Ben’s blog isn’t a professional organization, but it still bothers me when professional organizations flirt dangerously with pricing fixing. If the idea has traction, it has a tendency to snowball into something that is clearly illegal. (Don’t believe me? What do you think the main purpose is of WEVA?)
Winnowing the chaff
What follows are some technical criteria to consider when interviewing candidates for PHP front-end positions. Note this does not consider non-technical areas like culture fit, enthusiasm, and initiative. Nor even more difficult to measure things like design skills, UI, and usability.
I hope this helps some of you find the right PHP engineer. Any suggestions and comments are appreciated. Please realize that I don’t expect the candidate to “ace” everything here (in some cases the questions are not actually questions; in others there are no right answers). I hope these questions does cast light into some deep recesses of what it takes to be a skilled PHP/Ajax engineeer. Think Napoleon Dynamite here. You want see if your front-end engineer has how much of the useful skills. You know like: “numchuck skills, bow-hunting skills, computer hacking skills…”
”…PHP coding skills…”
This is something a Zend Certification might show. The thing you want to test beyond that is practical knowledge. Questions like these might probe some of that.
Can they show where PHP 4’s object/reference model breaks down? Can they explain how PHP 5 fixes this? Can they explain what “safe_mode” is? Can they code defensively around a “magic_quotes_gpc=on”? Can they write the code to execute a simple shell command from PHP and do something with the output?
Can they explain what a “PHP extension” is? Do they know how to compile one or where to get one? Can they recommend a library or extension to solve the following problems: web scraping, image manipulation, etc? Can they explain how PHP’s Zend Engine works (just the basic process)? Can they explain what a code caching extension does (like Zend Engine, APC, or Turck-MMCache)?
Do they know what PEAR is? Can they say how you would install a PEAR library? Can they tell you how PEAR’s error system works?
How would they prevent SQL injection? How would they create a single security audit point for such attacks? Can they articulate what “filter-input, escape-output” means? Can they evaluate “magic quotes” as it relates to that? Can they explain an example of session fixation or the dangers of not properly filtering out script or css?
Can they show a process by which one would i18n a PHP application? Can they give some examples of interesting PHP quirks they’ve run across in their last project?
“…Object Oriented Programming skills…”
You want someone who can program Oo with the best of them but not someone entrenched in the idea of Oo that they lose flexibility. Here are some examples:
Can they explain HTML templating as Model-View-Controller? Can they explain how it is not Model-View-Controller?
Can they explain the principles of package reuse? Can they explain the strengths of a framework/weakness of it? Can they explain Ruby on Rails in that light? Can they explain why there is little to no adoption of a “PHP on Rails”?
Can they explain what a programming pattern is? Can they explain what “consequences” are? Can they give an example of some “consequences” of patterns they’ve used?
“…HTML/CSS coding skills…”
Basically you want someone who is well-versed in HTML and CSS coding, but isn’t afraid to look up the parts that they don’t know nor is so brainwashed by “A List Apart” kool-aid that they spin wheels forever when a simpler, uglier solution might do.
Can they mention some browser rendering quirks? Can they explain what the box model is and how it differs in IE? Can they give an example of a way to get CSS code to be read in one browser but not the other (without using server-side switching)?
Can they explain the difference between logical and presentational markup? Can they show how you might code a sliding doors or other div-based rounded rect? Can they code a linked list markup that renders as an inline list or menu?
“…practical Ajax skills…”
Do they know the acronym of Ajax? Can they explain the meaning of each word in the acronym (besides the second A)? Can they explain the marshaling and asynchronous issues involved with Ajax?
Can they code using Remote Scripting via iframes or explain how it could be done? Can they articulate the pros/cons of ti? Can someone build an XMLHTTPRequest instantiation? Can they give examples of differing browser support/considerations at it relates to XMLHTTPRequest? Can the explain the readyState system and the callback system of XMLHTTPRequest?
Can they articulate their favorite Ajax framework and how it works? Can they explain its weakness vis-a-vis some other framework or rolling your own?
“…abstract thinking skills…”
Basically can they think at a high level. This isn’t necessary but it certainly helps if you want to trust that this person can do things with minimal guidance.
Can they show areas where you may end up with race conditions in PHP? Can the explain how to guard against it? Can they explain how PHP is a HTML templating language itself?
Can they explain Ajax as a “design pattern”? Can they give the advantages/disavantages of Ajax vs. Flash-based sites?
The hallmark of PHP is the self-deprecating nature of the language. If they can’t look for solutions outside the “PHP box”, you might as well code the thing in JSP, ASP.NET, or C. Finding the right level of solution for the problem saves a lot of hiring overhead down the road.
Can they express what are the pros/cons of a HTML templating system and when to use or avoid it? Can they explain the practical reasons to use HTML templating?
Can they show they’d use a library to solve a programming problem? Do they know how to use the Error Document to do lazy caching?
Can they explain why CSS took so long to catch on? Can they give examples of weaknesses/pitfalls of using divs to replace tables as non-logical markup?
Can they explain when they would use/avoid the following payloads: delimited format, JSON, XML. Can they explain when they would use/avoid the following RPC patterns: REST, XMLRPC, SOAP?