“How do I improve my PHP skills?” is a recurring question on various boards and chats. It’s often asked by newbies but even experienced developers ask themselves the same thing. After all trying to be better is in the human nature. This is a deep question and when you think about it there isn’t a straight forward reply. Nevertheless I will try to give a comprehensive answer which hopefully is going to be useful not only to the beginners but also to the people with some commercial experience.
Matthew Syed in his book “Bounce” tells us that to reach an elite level in any discipline one has to practice for 10,000 hours (which is roughly 10 years). I don’t think that mastering PHP requires 10 years but practicing is essential. Obviously practice must be purposeful, otherwise it is useless.
The last sentence of the above paragraph is the key to sucess. It’s not only about what you have to do but also how are you doing it.
Make sure you’ve chosen the most effective way of learning. It will depend on your actual knowledge. Beginners might prefer direct interaction with people or follow video tutorials while experience developer could chose blogs, books or conferences.
Once you learn something new – practice it. It might require creating a proof of concept, a pet project or changing your habits. Stay curious and open minded. Don’t be afraid of breaking things. If you can check something yourself do it.
Although context of this post is PHP the question doesn’t have much to do with this particular language. Improving PHP skills means improving your universal programming skills. That can be broken down into 3 areas:
- engineering (coding standards, design patterns, unit testing, algorithms etc.)
- managing (application life cycle, version control, agile etc)
- environment (databases, operating system, networks, protocols etc)
Each person needs a different mixtures of the above skills – depends on what’s their ultimate goal. There are various senior positions for a developer but generally speaking all of them are either technical (head of development, senior architect etc) or commercial (development manager, CTO etc). The senior roles can be paid equally well so it’s a matter of choosing between science and business.
Ok, after this somewhat long introduction it’s the time to answer the question. To improve you PHP (or generally speaking web development) skills pick a point from the below list and try to learn as much as you can about it. You don’t have to follow the proposed order but ultimately you want to know everything from this list.
Object oriented programming in PHP
- Classes and Objects (http://php.net/manual/en/language.oop5.php)
- Exceptions (http://www.php.net/manual/en/language.exceptions.php)
- Namespaces (http://www.php.net/manual/en/language.namespaces.php)
- SQL basics (select, insert, update, delete)
- PHP PDO (http://uk3.php.net/manual/en/class.pdo.php)
- Responsive web design
- XML & DOM (http://uk3.php.net/manual/en/book.dom.php)
- Regular expressions (http://www.regular-expressions.info/tutorial.html)
- SPL (http://uk3.php.net/manual/en/book.spl.php)
- Magic Methods (http://php.net/manual/en/language.oop5.magic.php)
- GD (http://uk3.php.net/manual/en/book.image.php)
- JSON (http://uk3.php.net/manual/en/book.json.php)
- Database design (http://en.wikipedia.org/wiki/Database_design)
- Maintenance (manage users, backups)
- SQL optimisation
- Design patterns (“PHP Objects, Patterns and Practice”)
- Algorithms and data structures (Introduction to Algorithms)
- Unit Testing (The Art of Unit Testing: with Examples in .NET)
- PHP Frameworks (one is enough)
Web application security
- MySQL injections
- Cross site scripting
- Version control (SVN or GIT)
- Branching (http://nvie.com/posts/a-successful-git-branching-model/)
- Bug tracking (any available software)
- Coding standards (“Clean Code: A Handbook of Agile Software Craftsmanship”)
- Command line
- Installation and configuration of LAMP environment
- Installing PHP extensions
Apache web server
- Virtual Hosts
- Caching: Memcached or Redis
- NoSQL: MongoDB or CouchDB or Cassandra
- Search engine: SOLR or ElasticSearch
- SCRUM (“Agile Project Management with Scrum”)
- Leading (“How to Lead: What the best leaders know, do and say”)
- Test Driven development
I would like this list to be as useful as possible so I will be extending it with the time. If you feel I missed something or you would like to recommend a good tutorial please let me know.