Every language has its quirks. PHP has been know to be a language where it is very easy to do things badly. In reality it is not the languages fault but how we as developers treat it. Being a lead developer and seeing new employees (and candidates) in action has shown me that there are two types of PHP developers - new school and old school, each with their own issues.
Old School Devleoper is one that has been building functionality for a long time time (obviously). He/she started doing this before the advent of frameworks, most likely even before Composer was a thing. This is a person at whose CV you'll look and consider for a senior level position. But it is not always as great as it looks.
Some of the main risks of the old-school developer:
- old habits die hard - the longer you do something, the more you get used to it. It becomes hard to adapt to new techniques, new technologies and even new coding styles.
- if the person is not driven to keep improving the code will be functional but more costly. Features will be built from scratch instead of using a library loaded from composer. Templating will be built manually (and will likely include a risk for XSS vulnerability) instead of using an existing library like twig / blade.
- harder adaptation to new frameworks and languages.
- ego - after doing something for a long time developer will get the confidence of the approach. Whilst not bad on its own, this can cause issues when task is misunderstood or the approach/code does not follow the company's overall guidelines. Also can struggle with having respect for co-workers.
Some of the strenghts of old-school:
- usually a strong understanding of tasks and how to build it.
- strong time estimation skills.
- understanding of vulnerabilities and how to avoid security issues.
- usually some dev-ops experience.
- good patterns for analysing and debugging. Doesn't go in circles but knows where to look for issues and how to find them.
New School Developer is one that has started web development in the "green days" of PHP. These developers will likely use one of the major frameworks/platforms (Laravel/Symfony/Wordpress/Magento etc.) and will be a powerful tool in your company's arsenal as long as they don't have to step of the comfort of their knowledge.
Some of the main risks of the new-school developer:
- Knowledge is usually tied to one framework/platform. Likes to avoid and often shows negative attitude to other tools available.
- With frameworks like Laravel handling large amount of sanitation (through templating & PDO) is likely to not know to deal with security risks as they are always handled by the framework.
- Usually has less experience and can lead to functionality not matching requirements perfectly or required time may be underestimated.
Some of the strengths of new-school developer:
- Knows a framework very well and prefers usage of external libraries to build functionality quicker.
- On overall can be quicker as doesn't need to build functionality from scratch, knows the tools and doesn't consider security on every step taken.
- Is more fond of the new techniques like Test Driven Development and package building.
- Can bring a new and fresh perspective into a company.
So with these two contrasting developer types which is the right one? That largely would depend what kind of developer you need/want to be. For what I've seen in my work there needs to be a mix of both. Old-school developers can achieve this by encouraging new technologies, "keeping the finger on the pulse" to ensure they don't settle into their ways too much. New-school developers need to encourage diversity of frameworks, learn not only about what they are skilled in but also branch out into other frameworks/platforms.
P.S. Where do I consider myself in this? I would probably call myself an old-school developer by heart. But to ensure I don't settle in too deep I spend a lot of time deep-diving into frameworks like Laravel and its underlying Symfony features. I build complex functionality like search filters and shopping baskets in vue.js. I try to ensure I keep learning and growing my skill-set.