Becoming a PHP Professional: The Missing Link

This entry is part 1 of 4 in the series Becoming a PHP Professional

Becoming a PHP Professional

When reading various PHP related blogs, Quora questions, Google+ communities, newsletters and magazines, I often notice extreme polarization of skill. Questions are either at the "How do I connect to a MySQL database?" level or something in the range of "How do I best scale my mailing system to send over one million emails per hour without introducing a new server?"

I personally distinguish between 4 distinct levels of PHP prowess (likely applicable to any language/profession): beginner, intermediate, professional and elite.

The extremes

In PHP, beginners learn about variables, includes, form processing. They learn simple logic constructs. They send an email with the help of a tutorial, maybe even touch on an object oriented programming example without actually understanding it. They work with WordPress and modify a couple CSS classes. With this knowledge, they apply for jobs and, unfortunately, usually fail.

Professionals are those who have given good parts of their lives to many projects. They've deployed commercial applications in most if not all frameworks, they've used different databases with PHP efficiently, they visited and/or talked at conferences. They studied design patterns and can easily engineer an entire project on their own from diagrams to execution. They left procedural code far behind.

Elite programmers are professionals who put in the fabled 10000+ hours into honing their skill. They supplement their PHP installations with extensions they wrote themselves, they find bugs just by glancing through source files, they are extremely meticulous about their code layout. They reject all but the most complex projects and find alternative and imaginative ways to solve problems people didn't even know they had. They've written some well received books about the language, spoke at dozens of conferences, maybe even made their own branch of PHP or a highly successful framework or two.

So in all this, who are the intermediate ones?

The missing link

How does one get from beginner to pro and beyond? If one doesn't know anything beyond the basics, how can they improve their skill enough to leave the bad practices behind and start practicing the more advanced approaches? This is a question I get asked a lot by beginners. In order to become a professional, one must first become intermediate.

What follows is a list of what one should go through on the path to PHP fluency.

Abandon spaghetti code

Many people think using classes means you're writing object oriented code, while using functions means you're writing procedural code. While this is false, for the sake of this argument, let's assume the widespread vanilla definition: procedural code is code in which you simply don't use classes and objects, and OOP code is code in which you use classes and objects as much as possible.

My advice is to fully abandon procedural code. Use object oriented coding style as much as possible – write classes, encapsulate logic, think with real world terminology. The performance benefit of procedural code over class based code is negligible when compared to the re-usability that proper OOP code gives you and future developers inheriting your project. A common argument against this is "But, WordPress is procedural!" To be frank, and this might sound harsh, "WordPress developers" are no more PHP developers than people with Instagram are photographers. Please don't take this to mean WP is useless – it's fantastic for blogs, simple websites and one-day projects you don't want to spend too much time on. It's excellent for making a quick buck or for people who aren't too technical, but mastering WP will never make you a professional PHP developer – it's a yarn of spaghetti code that can teach you no proper design principles.

Start small. Think of a real world concept, and try to represent it in OOP code. Work through some basic tutorials and slowly go more advanced. Work on OOP code until you understand classes in general before transitioning to proper frameworks and confusing terms like "Model", "View" and "Controller" – all these are foggy, abstract terms without having a solid foundation in OOP first.

Dissect existing projects

Dive into existing source code wherever you can find it. For example, look up PHP projects on Github, clone them, deploy them locally on your own machine and try to play around with the code. Go file by file, line by line, until you understand what each does.

Look for projects that are well commented and/or documented, well structured, and still alive. Projects last updated in 2008 won't do you much good if you're getting into PHP 5.5 – you'll likely be missing out on the latest and greatest features that could make you stand out in an already overpopulated field.

Learn to set up your own PHP environment

Being able to set up your own environment is a priceless skill. Not only does it allow you to fine tune your setup, it also familiarizes you with building extensions from source.

Abandon Windows for development – if your main desktop is Windows, install virtualization software and run a Linux virtual machine – the case insensitivity of Windows, its line endings, and all other oddities inconsistent with most server environments out there are just asking for trouble, so it's best to develop on a system that most resembles the environment you'll eventually be launching on.

Virtual machines also help you experiment – if something goes wrong, you can just wipe it and start over or do a rollback. You can literally experiment as much as you want without fear of messing anything up. Mastering tools is important, but having a good workbench is too.

Experimenting with your own setups will also allow you to get familiar with the different servers out there – whether to use Apache of Nginx, whether to use neither of them and go with Appserver, and so on.

Exercise best practices early

When writing your own code, make sure you comment heavily with docblocks, indent beautifully and structure carefully. After you build a class, project or library, use well known documentation tools (PHPDocumentor, ApiGen) to extract the docblocks and improve on them.

A good IDE is worth its disk size in gold – getting used to one multi platform editor can help you be up and running in no time when setting up a fresh environment, so you can dive into code instantly without wasting time on setting up keyboard shortcuts and themes. Make sure you back up IDE configuration files on a cloud service like Google Drive, so you have them ready for import at all times even if you need to make a fresh installation. A good IDE is PHPStorm, or if you can't afford it or have no open source projects with which to ask for a free license, Netbeans is a free alternative. Both are multi-platform.

Getting used to best practices early helps you remain consistent and lets other people read your code much more fluently. Find your style and stick to it – you'll help both yourself and others. Try to follow the PSR standards (PSR-0, PSR-1, PSR-2, PSR-3) as closely as possible – they’re called standards for a reason. Most of us use and love them, and they make everyone’s code equally reusable and readable.

A good beginner friendly resource that gives up-to-date hints is PHP the right way – use it to get familiar with the latest best practices, basics of OOP, security, deployment, coding standards I mentioned above, and much more.

Try out different frameworks, choose one

For a long time, PHP was the language with most frameworks out there (JavaScript took over recently). Whether this speaks of the inconsistency of our community or the popularity of our language, I cannot say, but the fact remains that choosing a framework is a daunting task, especially when first starting out.

Having tried most of them, I can wholeheartedly recommend Phalcon as the go-to framework due to its robustness and quality, and the fact that it's built in C and installed as a PHP extension (thus being faster than any current framework in existence). However, trying out different frameworks is an absolute necessity.

When you try them out, you learn about a new approach to a common problem every time. Each framework has its own quirks you'll like and downsides you'll hate but most importantly, you'll learn about the mindset of others (particularly the developers of the framework). You'll see new usages and approaches, and a very good exercise is re-building one of your sample projects in as many frameworks as you can find. This will help you efficiently gauge the efficacy of a particular framework: the speed of developing in it and its performance.

Read

Don't underestimate the hints and tips of others. Read as much as you can – if you keep at it, it doesn't take as much time as you might think. Find good blogs to follow, read the tutorials on this website, traverse questions and answers on StackOverflow, visit the SitePoint Forums, subscribe to newsletters, follow good sources on Google+. Avoid basic PHP tutorial books – they're outdated as soon as they're published – instead, focus on individual snippets and tutorials of useful up-to-date code you can find all over the web. Even if the topic is something you've already covered, try giving it a read – you'll often find that something new can be learned by reading someone else's perspective on the very same thing.

If there's no work, invent some

There is always something to do. Never catch yourself saying "I don't have a project" or even worse, "I'm bored". If you don't have an active project to work on – make one up. Do you use a tool daily that frustrates you with its lack of functionality? Build a better alternative! Have no ideas for new products? Replicate existing ones – try rebuilding a basic Facebook, recreate something you already know exists just for practice.

What's most important is to never stop – there's no amassing 10000 hours if you don't put in the hours! Keep working, keep yourself interested and engaged. Make a simple address book app. Then rebuild it in another framework. Then rebuild it with another database (replace MariaDB with Mongo, for example). Keep busy!

Find a buddy/mentor

It's easier to learn when you have someone to do it with. Find a buddy who shares your passion. Maybe you're one of the lucky few with a partner who shares your geeky interests. Maybe you're in school or university and have peers who would like to get started as well and need companionship in these adventures. You can even find a mentor and receive expert guidance.

Never underestimate the power of a companion – there's a reason The Doctor always has one!

Conclusion

When you focus on all these entries with as much will as you can muster, when you realize it's what you want and keep at it – you're on the road to becoming a PHP pro. Maintain discipline, never give up (even if others around you do) and keep practicing.

If you've got any useful resources you'd like to share with us on how you bridged (or are currently bridging) the Intermediate gap, let us know in the comments below!

Becoming a PHP Professional

Becoming a PHP Professional: The Importance of Others >>

Free book: Jump Start HTML5 Basics

Grab a free copy of one our latest ebooks! Packed with hints and tips on HTML5's most powerful new features.

  • Joselee

    great advice

    • Anonymous

      Thanks!

  • Joselee

    did’nt know there is phpmentor really appreciate the article

  • capeta

    thank you for the the article…!!!

    • Anonymous

      You’re welcome, glad you like it!

  • Anonymous

    I think that learning a proper coding style is the most important part of becoming a professional PHP developer but also the most difficult. There are countless PHP projects that are still being devloped and are heavily used which are written in a procedural style or don’t use any modern PHP features. Take the CakePHP framework for example – it’s based on PHP 5.2 so it doesn’t use namespaces, try-catch-finally etc. As new versions of this framework are relased on a regular basis, an intermediate PHP developer may think that he/she uses the most current technology. It requires a lot of knowledge and experience to notice such details.

    • Anonymous

      Very true! We need to actively single out such outdated projects and make the community aware of this

  • Sajjad Ashraf

    Excellent tips, great article. Thanks

    • Anonymous

      Thanks for the kind words, glad you like it!

  • Ian

    Lots of good advise there. Technically according to your article I am intermediate but don’t feel like it. I need to repeat all of these things a few times is all.

    I would add don’t just accept things without asking why. Even if your professional buddy/mentor says “this is the best way to do something” research and find out how it works and why a best practice is considered a best practice.

    Also in the area of inventing work, you can experiment. Using Phalcon inside Laravel (could actually be useful) or figuring out how to combine a framework with wordpress (not useful but educational) or build your own tiny MVC framework both completely on your own and by installing pre-existing packages.

    • Anonymous

      Precisely, experimentation is key, well said

  • Anonymous

    Totally agree ! I would add these: 1. (Partly) Read books, especially the ones that you are really interested in. A MongoDB tutorial on the web is not the same like a 700 page book. 2. Read and follow the PSR-0/1/2/3 clean coding guidelines. 3. Read/watch a lot of slides and conference talks, especially the “clean coding” ones. 2+3 will definitly lift you up, especially when applying for jobs. I would ALWAYS hire the cleaner coder, even if he/she has less skills than competitors. Beside that, clean coding will make your job/code/life sooo much better, so much more relaxed, so much less bugs.

    • Anonymous

      All good points, PSR standards are hugely important, should have mentioned those in the Best Practices section. I also agree with hiring a cleaner coder over a more skilled one. Thanks for the feedback!

    • Anonymous

      Added PSR to best practices section now, thanks for the reminder

  • Anonymous

    Awesome, I loved this so much. Thanks to you I have already found a mentor and working on becoming an intermediate programmer in PHP. This is awesome.

    • Anonymous

      Glad to hear it, thanks for the feedback!

  • Sherxon

    Great Advice thanks now i realize what to do

  • Amal Francis

    Awesome article.. Truly inspiring and passionate.. No more spaghetti code.. Ha ha :)

    • Anonymous

      :) cheers

  • wilmer ramones

    Awesome. Thanks. Good article. Do you mind if I translate it to spanish.?

    • Anonymous

      Not at all, go right ahead, but please link to original when you publish and let us know about it!

  • Anonymous

    Really good article. One of the best path for many of us…

  • Daniel Fazio

    Fantastic article. First time i comment but i had to this time

    • Anonymous

      Much obliged, thank you!

  • Ahmed Sijercic

    really bice thread!

  • Anonymous

    I feel like a PHP beginner all over again. I’ve been working at small marketing firms for years now, building small/medium sites in WordPress because it’s fast and easy (esp for the client). Every time I come up against something large though, I’m not sure what to use. I don’t have time to spend hundreds of hours researching frameworks, performance, best-practices, etc. because I’m so busy building/fixing tiny sites. I’d love to take the next step as a developer and do something great, but I just don’t know where to start to become great. I’ve read every book sitepoint has released on PHP and still feel like I don’t really have a grasp on the more advanced (albeit absolutely necessary) topics like performance, load-balancing, load-testing, security… What’s the best way to get started on these things? Your article is awesome, but I’d like some links in each of the headings you wrote on that I could get my feet wet in each of these topics. I feel like the links that you did give are good, but often too specific or too advanced. I have no idea how to recompile a C based framework. That’s what makes me a beginner/intermediate. I’d love to take the next step…but HOW??

    • Anonymous

      I understand what you mean. Thank you for your feedback, I’ll do my best and update the article with some more concrete links soon.

  • Anonymous

    Best article ever read on how to master php. Congrats Bruno!

    • Anonymous

      Thank you, much appreciated!

  • tburial

    “To be frank, and this might sound harsh, “WordPress developers” are no more PHP developers than people with Instagram are photographers.”
    That made my day.

  • Joshden

    I would also add begin writing automated tests for your code. Learn and explore the possibility of using Test Driven Development (TDD) in your projects. When all your code is tested, it is much easier to change and refactor in the future. I believe more important even than documenting code is factoring code well and naming things well. Read books like Clean Code.

    • Anonymous

      I think tests are more for the “upper-intermediate” or “pro” level, rather than “beginnger-intermediate” and “intermediate”, but still, very good point.

  • Taylor Ren

    “No project” should never be an excuse for not practicing. Can’t agree more on this.

  • Anonymous

    Great advice! Best about becoming pro thanks :)

    • Anonymous

      Glad you like it!

  • Carlos Gamez

    As usual, a very well laid out set of thoughts and ideas.
    As someone who has a passion for programming but doesn’t do it for a living, something I always struggle with is evaluating myself.
    I’d like to think I’m in the intermediate category but sometimes am not sure whether I’m doing something “advanced” or just reinventing the wheel. The mentor idea is a great one. I’ll have to think who do I know that could play and would be willing to play that role.
    All in all, great article.

    • Anonymous

      Thanks! For mentorship, do check out the mentor site I linked – you’ll probably be able to find someone there. Of course, it goes without saying that there’s no replacement for someone you actually know and have an instant connection with.

  • Matt Bragg

    Excellent article Bruno. Your words hit home very clearly and your timing is impeccable.

    • Anonymous

      Thank you!

  • Matthew Setter

    Hey Bruno, I couldn’t agree with this list more. Two things I’d suggest adding are learning the lexicographical constructs which underpin the language and having skills in other languages. By comparing and contrasting differing approaches, or seeing how other languages approach problems can only be of benefit as well

  • Jason

    Thank you for a thoughtful article!

    • Anonymous

      Much obliged, glad you like it!

  • Anonymous

    Nice read. Worth mentioning http://www.phptherightway.com/

    • Anonymous

      Indeed, will do! Thanks for the reminder!

  • Brian Seymour

    You made mention of Phalcon… Very good. Having tried everything out there, Phalcon is easily the best.

  • Daniel Gafitesuc

    Also in my opinion in order to get professional is to tackle hard projects or the difficult parts of them , refactor spaghetti code & lots of debugging. Never be afraid that you might fail …after all you are junior trying to be professional.

    • Anonymous

      Exactly, good point!

  • Anonymous

    I’d like to add one important thing for exploring, falling, etc: Learn to love version control!

    • Anonymous

      Thanks, definitely important!

  • Denis Rendler

    Wonderfull advice. I just wish I had this link a few days ago when I was debating this with another “well-intentioned” PHP developer who considerred that learning how your tools work it doesn’t worth the time spent.
    Thanks, Bruno!

    • Anonymous

      Glad you like it, thanks for the kind words!

  • Jonas

    Thank you very much for your article, I think there are some very good advices for becoming an PHP intermediate!

    • Anonymous

      Thank you for the feedback, glad you like it!

  • Mantas

    Very motivating :)

  • Anonymous

    The best resource for anybody wanting to bridge that gap must be http://www.phptherightway.com/

  • zamo

    Dissect existing projects, apply to all languages, and thanks a lot, great article.

  • Leigh Mackay

    Title should have been Becoming a PHP Elite. There are many hardworking professional PHP WordPress developers and procedural ones.

  • Anonymous

    Good article, and best guideline for beginners as well as experienced developers.

  • CoderDJ412

    Exactly what I was looking for!

  • melb23

    Wow, this is exactly what I’ve needed.

  • Pierre Dechery

    Great article, thanks. I work with PHP since the last two years and it’s always difficult to know what level I’m in, since it seems that there’s so much to learn. Never imagined WP was spaghetti code, by the way.

    • Anonymous

      Glad you like it, cheers!

  • Ben

    Great stuff – Thanks!

  • kruller001

    Fantastic telling it like it is. Double thanks for the honesty

    • Anonymous

      Thanks!

  • Ken

    Great article, I enjoyed reading it. I think you clearly differentiate the difference between the various levels of PHP developers. However, I agree with Leigh, there are many skilled WordPress developers using procedural PHP code and doing it very well. I think your comparison was a bit unfair. Becoming a WordPress developer is really a different skill set since you are working within the WordPress “framework”. You can be an elite PHP developer and not be a WordPress developer. By the way, my organization is using WordPress to develop some pretty complex sites, not just “simple sites, blogs or one-day projects”. WordPress is an excellent content management system that allows people with varying degrees of technical skill to contribute the site’s content.

    • Anonymous

      Thanks for the feedback! It is a different skill set, no doubt. But take an expert at applying Instagram filters and give them a pro camera and they’ll be just as confused as an elite WP developer will be when given a real, complex enterprise project in proper PHP. I’m not saying advanced stuff can’t be developed in WP, but I am saying that a properly engineered bottom-up approach in almost anything else is better than WP for any project with greater complexity. It’s excellent as a CMS that allows non-technical people to contribute, like I mention and in the article and you point out, but it’s not software one should build complex apps with, especially apps that need to serve millions per hour.

  • Dave

    While I agree with the sentiment of the article, ultimately it is the end product that matters. People don’t care how it is coded, so long as it runs ‘fast enough’ and is reasonably easy to use. The code of WordPress is a hodge-podge written in various styles by various people of differing abilities. Yet it is probably the most popular PHP based software. Similarly, I understand (though I could be mistaken) that VK.com (#23 Alexa ranking) is written in procedural PHP. Take a look at the HTML source code of most of the top websites and you’ll see a mess. Clean coding may have many reasons going for it, but clearly it is far from essential for success.

    • Anonymous

      That’s mostly correct, unfortunately. People look at the end product far too often without looking at the process.

  • Pierre

    Actually, if I’m not wrong, Joomla is made more with the OO approach and also is MVC. As a begginer / intermediate PHP developer, it’s not a surprise I find WP friendlier.

    • Anonymous

      I would argue that it’s a bit of a risk to play along the beginner friendly lines of WP when starting out and wanting to become more pro. I suggest you jump right out of your comfort zone and into the fire of something brutally complex. It’s the most efficient way to learn by far.

  • Anonymous

    Great article! Thanks for showing the “The missing link”.

  • collizo4sky

    This is indeed a great resources and advice for me a PHP beginer.

  • martcol

    Really enjoyed reading that – thanks.

  • Kurt

    On point and right where I am at…Thanks

  • Anonymous

    Fantastic!

  • Warren

    Good advice..thax

  • Anonymous

    As a teacher of PHP I agree with all the points made.

  • Warly

    great article!

    • Anonymous

      Thank you!

  • Guangpeng Chen

    Thanks!

  • munyah

    gr8 advice, Thanks

  • Radu

    Great and well documented advices. Thanks :)

  • superadmin

    buh

  • Roy

    “Abandon procedural code”? This kind of sweeping statement bandwagoning on OOP as the be-all-and-end-all solution is typical of a lot of programmers who went to university but then haven’t had much real world experience. It speaks to me that the author does not appreciate how to actually apply all the tools at his disposal and instead wields an OOP hammer while looking at everything as a nail.

    What it takes to truly be a good programmer is to recognise a problem and to formulate the most effective solution for it – not simply taking an extreme view and throwing out procedural programming altogether. There are times when OOP is unnecessary and times when (shock, horror!) procedural code is the most effective solution. I see fresh CS graduates every day that try to tackle absolutely every problem they come across using OOP like it’s The One True Way which is such a shame because it can really overcomplicate things sometimes.

    Know all the tools at your disposal and use them when appropriate. Don’t listen to advice like this that tells you unequivocally to abandon one approach in favour of another. That, in my opinion, is the mark of a great programmer.

    • Anonymous

      Interesting perspective, thanks for the feedback

  • Tony Marston

    @Roy
    I agree entirely with your view. I did procedural programming for over a decade before moving to OOP, and I like PHP because it gives me the best of both worlds. I will therefore only implement a solution in an OO way when it provides a better solution – ie: less code overall by providing more reusable code through inheritance and polymorphism. I do *NOT* believe that “everything is an object”, and I refuse to use classes and design patterns just to impress my fellow developers. The purpose of a software developer is to impress the end user with workable software as quickly and efficiently as possible. Aiming for a pure OO solution is like throwing snowballs at the moon for the simple reason that there are too many definitions of “pure”, coupled by the fact that there are too many (incorrect) definitions of what OOP actually is.

    • Anonymous

      Definitely a good point, and naturally, I don’t believe OOP should be used for EVERYTHING. But in my experience, having built several enterprise level apps, OOP is always better when solving a complex problem, no matter how much less code a procedural approach produces. It’s definitely a “keep your client happy by shipping anything that works, and fast” world, and I agree with it when dealing with simple websites, but proper apps need a more thought out approach, especially when being developed by a team that values staying in sync.

  • Gogol

    So, where do you see yourself? :-)

    • Anonymous

      I’m just a professional.

  • Jose Manuel Orts

    Very interesting post, I agree with all your thoughts, great advice! Thanks!

  • Gogol

    Hmm me too dude (if not less than that). I am by no mean an elite to say the least :) I enjoyed reading this post of yours. I will be back for the future posts by you! Cheers :-)

    • Anonymous

      Thanks!

  • Mike

    All good advice, except the amount of time to undertake some of these. As a web designer, I have a lot of procedural code in my tool box that I use over and over again. It works and it’s fast. I would like to move up the “ladder” but the time penalty is non-trivial and for the amount and complexity of code I write, it’s hard to justify. Still, if I were to, I would follow your advice – thanks!

    • Anonymous

      Time is, indeed, often a hindrance. But simply rewriting the procedural code you often re-use to something object oriented (which you can also reuse) would provide sufficient practice to move at least a couple of steps on that ladder. Don’t underestimate the small things you can do – sacrificing some time today may yield far bigger time savings later on.

  • Mike

    True – it’s as much a mental hurdle as anything else.

  • Hamed

    I would love to be able to work with an Elite Developer. Its really hard to find developers who know how to build complex web startups or algorithms. I am about to launch a new project which requires a real professional / elite web developer to help solve local search :) Feel free to apply through my agency at http://www.ChimbaWeb.com as we are currently active scouting for dedicated startup developers.

  • tontonjulien

    Great article, lot of good advices, Thanks

  • Anoop

    Great , best article i have ever read. From intermediate to professional

  • Anonymous

    very motivating. I was struck with “no project”, “I’m bored” alibis :D

  • Anonymous

    i liked this

  • Seidenthal Steve

    really nice !