OpenLampTech - Developer Interview With Doeke Norg
Veteran PHP and freelance web developer Doeke Norg shares a fantastic developer interview with OpenLampTech.
Welcome to this OpenLampTech text-based developer interview.
From working with WordPress to Symfony, Doeke Norg is a very knowledgeable PHP developer.
Upon initial contact with Doeke, he challenged me to change and mix up the interview questions as he didn't wish to respond to the same old questions as everyone else.
And boy oh boy am I sure glad he did push back.
What we have now is ‘the good stuff’.
Thank you Doeke, for taking the time to share such great content for the OpenLampTech newsletter readers and especially for helping me reframe the questions to make them more engaging.
And now without any further ado, on to the interview.
Q: Please introduce yourself and tell us what you currently do for a living.
Hi, my name is Doeke Norg, and I am a 36-year-old PHP developer from The Netherlands. I am married and we have 3 children.
On January 1st, 2024 I started as a freelance developer, and am currently contracting for GravityKit. A few years ago I built a plugin (now called GravityExport) that was acquired by GravityKit. After the sale I stuck around to do support, and that has lead me to contracting for them.
My day-to-day work includes fixing bugs on their large set of plugins, creating new features & plugins, refactoring old code bases and dreaming up new things.
Now that I started freelancing, I also have more time to write on my blog, do open source stuff and explore new and exciting things I want to create or learn more about (like Kotlin).
Q: What PHP framework(s) and/or CMS(s) are you interested in the most or currently using (if any) and why?
So, first and foremost, I like PHP. And I like to solve business problems for a client in PHP. So I am interested in the framework that helps me solve these problems the easiest, in that context. Which for GravityKit, being a WordPress plugin builder, would be WordPress. Now WordPress isn't the best framework out there, but it does provide the tools I need to do my job efficiently in this context. It wouldn't make sense to require another framework and start mixing and matching.
The last few years I have worked a lot with Symfony. Not only the framework in its entirety, but also with individual components. The thing I like about Symfony is their approach to software design. They are actively warning against using symfony/symfony (the entire framework) and promoting using only the packages you actually need. This prevents a lot of unnecessary bloat in the project, and it provides clear insight in its actual dependencies. Their components are also of high quality (very extendable by providing the right abstractions) so that even other frameworks use their components.
So, context determines the tool. And thuis for a CMS, even though I work a lot in WordPress, I chose to rewrite my blog (work in progress) using Statamic; a flat-file Laravel based CMS. Because it provides me with the best tools to write and publish my (technical) posts; within my existing flow.
Q: Do you feel it is more beneficial for developers to have a deep understanding of the PHP language, or to jump into using a framework?
I wouldn't be much of an PHP advocate if I said "just jump into a framework". The thing is; PHP has a lot of functionality, and it even gained some in recent versions that we used to use frameworks or packages for.
Frameworks do provide great abstractions for the developer experience. So, for a newcomer; a framework like Laravel is an easy start to get the ball rolling. It is very expressive and easy to understand. However, it can come with certain hidden costs, and in some cases it promotes design patterns I personally would argue against.
I think starting with a framework too soon can lock you in to that community. While starting off with PHP, and understanding its workings and native functionality, will allow you to get a broader experience. This in turn will provide you with a much larger working field, making it easier to find work you are qualified for. Then you can use frameworks as the tools they are, to aid you in your work; instead of letting the framework dictate your moves.
Q: With the popularity of some frameworks, which are those you feel get overshadowed and why should developers pay more attention to them?
When starting a new project, people tend to use the tools they know. So, I'm going to build X, and my default flow is: pull in Laraval; or pull in Symfony. Then create a bunch of Entities, hook up relationships; and then start building the actual application. By that point, the application is already highly coupled to Eloquent or Doctrine for example. And I'm not saying that's always a bad thing; but you might not need it.
In some cases you only need routing to get to a controller that does a specific task. Sometimes you do not need a database. In other cases, you might be building a very tiny API. That does not require an entire framework. In those cases I would highly recommend looking into something like Slim Framework or Leaf.
But what I recommend even more is: start with the concepts first. Create your objects that represent your business problems. Make them interact with each other in a nice way. Do not start worrying about controllers and databases before you have a firm grasp on your solution.
Q: Different design patterns are used for different purposes. What are some design patterns you use most often, and you feel developers should learn?
I'm a big fan of design patterns, and try to educate others about their existence and usefulness. My personal favourites are the Decorator Pattern and the Adapter Pattern.
A good understanding of those patterns will allow you to decouple your application from all sorts of dependencies; even classes that are marked as
final
. Both patterns depend on the use of an Interface as the abstraction, which is a great habit to get into. Your interface represents the thing you code against, while the classes are specific implementations of those concepts.That's why I encourage people to drop the Interface suffix from interfaces and start seeing them as the actual implementation. From that point on, you start naming your classes more specific for the thing they actually represent.
For example, don't create a
BookRepositoryInterface
and then aBookRepository
class that implements it. That's too generic; It says nothing about the implementation specifics and will often lead to confusion when you start adding more implementations.Instead, create a
BookRepository
interface and anOrmBookRepository
orInMemoryBookRepository
class that implements it. Then you can, for example, start decorating those implementations using aCachedBookRepository
. It all just communicates the intent of the classes way better.
Q: What is one piece of software, other than an IDE or text editor, that you just cannot live without and why?
A browser! And I know, as a self-respecting developer I should embrace Firefox or some fancy new privacy first app. But I like Chrome. I've used it for years, it's fast enough, I have the internet at my fingertips, and the developer tools work great.
Besides that, I use Spotify for some epic work tunes (although I can also highly recommend this set by Be Svedsen on YouTube). BetterSnapTool gets installed on every mac I own; this really should be native. And a terminal! I've used iTerm2 for years, but am currently trying out Warp.
For writing, I use Obsidian. I like the idea behind it, and tried to implement things like Zettelkasten. But mostly I just use it for the minimal design, and distraction-free typing.
Q: What is your preferred code editor?
I have been through a lot of software in my years of web development. I started off with just Notepad, reading HTML from sites; trying to recreate it, and not understanding why that .cgi file wasn't working, even though I had the exact HTML in it... ok, so I was 11.
Then I advanced to Notepad++; *cough* Microsoft Frontpage *cough* ; used Dreamweaver ❤️ for a while, then Coda 2 until I finally landed on PHPStorm. I have used that for years now; and am just as happy every year to renew my licence.
I've tried VSCode, even bought the IntelliSense plugin, but I couldn't get into it. It always felt like it underperformed in comparison to PHPStorm. Even though that could be really slow sometimes. But using a Macbook M1 solved that problem for me.
Q: How has working as a web developer benefited you besides the obvious pay check and monetary value?
You really get to know how people think, which is nice, because I've always been interested in psychology and philosophy. Being able to create features and finding out something works absolutely terrible for some people made me rethink my approach to this work, but also life in general. There are always more views to account for and more stories to hear. This also made more aware of accessibility issues; and how we can make the web a better place for those with these challenges.
I have been fortunate enough to be able to really connect with clients, which improved my social skills. And because everything we do is in English; I've become pretty proficient at that too (at least in writing).
And I made some friends along the way. Friends that have guided and mentored me through my career, but also in life. People that I really wouldn't have met if it wasn't for PHP.
Q: Do you have a book, newsletter, blog, podcast, or other resource you would recommend to other developers?
I would recommend to go RTFM; and by that I mean php.net. Especially things in the Standard PHP Library (SPL) . It has some great data structures like queues & stacks (blog post on this will follow), linked lists & heaps. Get into the details of what the language has to offer on its own.
Obviously I would recommend you tune in to my blog doeken.org where I try to share these things in an easy-to-read format, with semi-real examples and the occasional tip.
Concerning books, I basically recommend anything written by Matthias Noback. In the past I have given away a few copies of "Advanced Web Application Architecture" and I still think every developer should read that.
Q: Is there anything else you'd like to add or share with the OpenLampTech readers?
As I am now a contractor, I do have some availability. If anyone is interested in me helping set up a Symfony Bundle, create a bespoke plugin for WordPress / add-on for Gravity Forms, or provide consultancy on projects; please let me know. My contact info is on my website.
If you want to keep up-to-date with my projects, please follow me on Twitter / X as that is the social media I'm most active on.
Thank you, Doeke Norg, for sharing your knowledge and insights with the OpenLampTech newsletter readers and community!
Thank you for reading. I hope you have a great rest of your week.
Take care.
Josh Otwell