Don’t let the seductive CarlBoard™ to the left fool you. This isn’t where you’ll find such classics as Carl’s guide to great coding or 1001 0100 1010 0101 1101 0110 1001!
Instead, this is where you can find most of the articles published on this site. I’ve tried to group them by topic or series. This should make it easier to find what you need when you need to refer to an article.
Programming is such a large part of the site that I’ve divided it into sub-topics. For most of you, this is the section that you want to look at.
Introduction to object-oriented programming
These are introductory object-oriented articles tailored for WordPress developers. They cover the basic concepts and features of object-oriented programming. If you’ve never touched object-oriented programming before, this is where you want to start!
- Why object-oriented programming is your next step as a WordPress developer
- The first thing you should learn from object-oriented programming
- Using inheritance with WordPress
- Polymorphism and WordPress: Abstract classes
- Polymorphism and WordPress: Interfaces
- How to approach object-oriented programming with WordPress
Software design patterns
Software design patterns are a more advanced topic. You should look at them once you’re familiar with the basic of object-oriented programming. Each article covers a specific software design pattern within the context of WordPress.
- Moving beyond the basics with software design patterns
- Singletons and their use in WordPress
- The mediator pattern in WordPress
- Spying on WordPress with the proxy pattern
- Helping WordPress make friends with the decorator pattern
- Importing data into WordPress using the strategy pattern
- Using the static factory method pattern with WordPress
- Using the chain-of-responsibility pattern to hash WordPress passwords
SOLID principles are important part of object-oriented design. It’s always important to keep them in mind when you’re designing your own classes. Each article covers one of the principles and how they can apply when designing classes with WordPress.
Object-oriented design is the largest topic on this site. I’ve divided all the relevant articles into three groups. The first group centres around solving a WordPress problem with a class or interface.
- Designing a class: WordPress AJAX handler
- Designing a class: WordPress API client
- Designing a class around WordPress hooks
- Designing a class to build simple WordPress queries
- Designing a class to create complex WordPress queries
- Designing a class to generate HTML content in WordPress
- Designing a class representing a WordPress admin page
- Designing a class to represent a WordPress meta box
- Designing a class to manage WordPress posts
- Designing classes for the WordPress options API
- Designing classes that use the WordPress plugin API
- Saving WordPress custom post types using an interface
- Designing entities using WordPress custom post types
The second group of articles focus on designing larger object-oriented systems. These systems use more than one class to solve a specific WordPress problem. The solutions are more complex and require a better understanding of object-oriented design.
- Designing a system: WordPress event management
- Designing a system: WordPress REST API endpoints
- Designing a system: WP-CLI commands
- Designing a system: WordPress routing
- Designing a system: WordPress admin pages
- Improving a system: Different types of WordPress admin pages
The third group of articles looks at how to design a plugin using object-oriented programming. These articles tackle problems that you might encounter along the way.
These articles focus on the PHP programming language. They are references to specific features of the language. These are useful whether you’re a WordPress developer or a regular PHP developer.
- PHP strings and how to format them
- How to use PHP array functions instead of loops
- Mastering the use of PHP conditionals
- PHP reflection API fundamentals
- How does a PHP application work?
Testing is a critical part of software development. These articles go over the different types of testing and how they work.
- Introduction to WordPress unit testing
- How do you start unit testing existing WordPress code?
- Introduction to WordPress acceptance testing
Computer science concepts
Not everyone comes from a computer science background. That doesn’t mean that a lot of what we do as developers doesn’t revolve around computer science. These articles attempt to demystify important computer science concepts that you already use day to day.
- Coupling and cohesion in WordPress and beyond
- What is software complexity and how can you manage it?
- Thoughts on type safety with WordPress
These are articles that don’t fit in any specific section right now. They range from tutorials to opinion pieces.
- Read more code
- The importance of naming in programming
- How debugging can make you a better developer
- Organizing your files in an object-oriented WordPress plugin
- Thoughts on WordPress and the MVC pattern
- Harnessing your superpower with DRY
- How to use the static keyword with WordPress
- How I setup my 2016 MacBook Pro
- Beginner’s guide to regular expressions
A lot of articles on this site are trying to teach you a programming concept using WordPress. These articles don’t fit that mould. Instead, they focus on WordPress itself or problems that you might run into with WordPress.
- How to troubleshoot WordPress performance
- Keeping Your WordPress Safe
- On becoming a WordPress expert
- How to use placeholders for WordPress translations
WordPress for the adventurous
This is a series of articles that explore the inner workings of WordPress. Each article focuses on a specific system, class or API. These are useful references whenever you’re working with WordPress.
- WordPress for the adventurous: Entry points
- WordPress for the adventurous: Loading
- WordPress for the adventurous: Options API
- WordPress for the adventurous: Plugin API
- WordPress for the adventurous: Rewrite API
- WordPress for the adventurous: WP_Query class
I do consulting work with Laravel applications. I also use it for my own projects like Ymir. These articles cover everything related to Laravel from small tips to large architectural design decisions.
- Standardizing Laravel model attribute names using constants
- Using static factory methods with Laravel models
I use Symfony a lot for my own projects like Ymir. These articles cover everything related to using Symfony. Especially the components.
Servers are another passion of mine. These articles discuss server related to topics from technology to their administration.
- Give your WordPress client an Apple experience
- A look at the modern WordPress server stack
- Introduction to the command-line interface
In a similar category to servers, there’s also DevOps. I also like to discuss that topic and how you can implement it in your own development workflow. That said, these articles all focus on WordPress development.
- How to use git push with WordPress
- Introduction to automated WordPress deployments
- Getting started with continuous integration and WordPress
- Continuous deployment to the WordPress directory with CircleCI
- How to use Bedrock with Pantheon
- Automating WordPress updates with Bedrock using Dependabot
- GrumPHP: Your local continuous integration solution
This is a site about teaching programming. These articles share my thoughts on it and about teaching in general.
- Teach everything you know
- How to use teaching as a learning tool
- Why can’t you learn object-oriented programming?
- Creativity and teaching programming
- Thoughts on teaching object-oriented programming with WordPress and overengineering
- Tips for applying to a WordCamp
- How to beat technical writer’s block
I self-published a book in 2019. These articles discuss various parts of my experience self-publishing this book.
Ymir is the WordPress serverless DevOps platform that I’m building. These articles will discuss its development and other tangential topics.
Year in review
Each year I write a review of my year. I discuss what went well, what didn’t, finances and what I’m hoping to do in the new year. I do this so that I have a record of my progress over time. Not the most interesting read, but it’s useful for me.