Yesterday I took (and passed) the Zend PHP 5.3 Certified Engineer exam – more information here from Zend and on Wikipedia. Having worked with PHP for about 11 years I had first imagined that this qualification wouldn’t be particularly stressful – that didn’t transpire to be the case! It turned out that I covered about 60% of the syllabus in my regular work patterns, but even then I relied on the PHP manual a lot more than I had realised.
The last (credible) exam I took was probably at university, and upon reflection I got myself considerably more wound up about the ZCE than anything in higher or further education. The last time I got this stressed about an examination was my driving test. The two events were similar in that I considered myself more than competent in the appropriate field, yet the exam stood between my assertion and independent confirmation.
I booked the exam 3 weeks in advance (as soon as we got back from Thailand) and spent the first two weeks gently revising. Then I sourced my first mock test, and the horrific reality of the situation became clear: not only did I need to learn a lot more about the aspects of PHP that I used every day, but I also had a whole load of new topics to cover. The less technically interested can leave now with the following summary: I revised like my life depended on it for a week, and yesterday was I victorious which was a massive relief. Those who want to know more about the PHP 5.3 Zend Certified Engineer exam, read on…
Note that when I took the exam I signed a disclaimer promising not to reveal any of the questions, so please don’t ask me for them. I can best sum up my horror with the following mock question I dug up from the internet, which asked what the result of this code would be:
echo strlen(sha1(‘0’, true));
Now I’ve since asked a couple of people much cleverer than me about this, and I was pleased to note that neither of them knew what the second parameter to sha1() was (even though it’s the same as the second parameter to md5(), ha!). Still, unlike me, they both guessed that it meant it’d yield the raw binary output, and as such proved they’re naturally in a position closer to passing than I was a week ago. There were more though, like what does the second parameter of count() do, and what does this output:
echo “hello123” . 34 + 4 , 123 . 11;
Then there’s the next issue: this was a PHP 5.3 test. I started working with PHP 3, and today work with the current enterprise release on CentOS which is 5.1.6. I chose to do the 5.3 exam partially because it was the only one available, but I was also convinced of its merit because RHEL 6 has just been released with PHP 5.3(.2), so this qualification should stand up for a few years yet. The issue of course is that being a creature of habit I hadn’t used all of PHP5’s functionality, and I hadn’t even been exposed to the 5.3 software at work.
Fortunately my home server now runs Fedora 14 and so had PHP 5.3.6 which was excellent for a revision platform. Still we’ve got some (IMO very good) custom frameworks at work, which meant I hadn’t had direct exposure to PHP’s PDO, mysqli, SimpleXMLElement, DomDocument and streams functionality. I managed to hoover all this up in a week, and in doing so implemented some nifty custom scripts including a revised RSS reader to HTML module to provide work blog content on various web pages.
There were some moments during the test when I doubted its quality; for instance I needed to recall in free-form the allow_url_fopen ini variable, but at the time couldn’t remember if it was in fact called allow_url_open. In the real world under such circumstances I’d just open the /etc/php.ini file and search for allow_url_ – this would hardly cost me any time – yet the exam would only reward me for the exact answer.
Ultimately passing the test and obtaining Zend Certified Engineer status has been extremely satisfying. While I don’t think it’s a perfect measure – the very fact that I can pass (and there’s no higher merit pass) means that those who clearly know more than me can’t achieve further recognition – it does set a useful standard. In my role as an employer I would certainly take any prospective PHP engineers with ZCE status seriously.