Interview with Lonnie Ezell — one of developers PHP framework CodeIgniter. Together we will discuss topics related to CodeIgniter.
At the beginning of development of the Internet programmers of the single, group of programmers, the companies began to create the websites and web-services. At first this process was long, demanded big knowledge from developers. However, frameworks - the program platforms consisting of a complex of auxiliary components and libraries which began to facilitate development of projects considerably have soon begun to appear.
And, perhaps, one of number of the most known frameworks is - CodeIgniter created and developing in the EllisLab companies and which has undoubtedly occupied a certain niche.
It is known that this framework had very great difficulties in the course of the development. However, as if strange it wasn't, he has managed to survive. After long stagnation has been transferred in development, CodeIgniter to the new owner to Institute of technology of British Columbia.
The developer of a kernel of the new version of a framework, CodeIgniter 4, Lonnie Ezell has agreed to give interview and to communicate to him about CodeIgniter, instruments of development, frameworks and hobbies.
Ilya Cherepanov: - Hello, Lonnie! I am very pleased that you agreeing to be interviewed. Tell us a about yourself, where you work and what you do.
Lonnie Ezell: - Hello, Ilya. Thanks for asking me! I have been a full-time freelance consultant since 2009, though I had been doing web development outside of my main job for several years prior to that. I first started using CodeIgniter back in 2006, if I remember correctly! Over the years, I've worked with some great clients and partners, creating every size and type of site, including being the lead (often only) developer on some pretty big projects, including:
- automotive sales portal with multiple dealer feed imports, user personalized searches, flexible dealer offers.
- mystery shopper/quality control surveys for businesses with website and mobile app integration.
- music licensing with flexible, personalized, search engine.
I've also had moderate success with a couple of open source projects, Bonfire and SprintPHP, which were both created to provide a set of ready-to-use tools for app creation on top of CodeIgniter.
Ilya Cherepanov: - How did you start working on CodeIgniter 4?
Lonnie Ezell: - Like everyone else, I watched CodeIgniter go through it's dry period when EllisLabs was not updating it. They had announced they were looking for a new owner, and almost a year went by with no word. Hating to see it die off, I contacted EllisLab to see what they were looking for in a new owner to see if maybe, just maybe, there would be a way that I could pull together a team and take over ownership. Instead, they had just agreed to transfer to the new owners, BCIT, though they hadn't announced it yet. I was eager to help out with the project, so I contacted James Parry to see how I could help out. A few weeks later, I was asked to be part of the Council he was putting together to help guide the framework.
I guess you can say that I became as active in CodeIgniter 4 as I have simply because I was too eager to see this framework mature! While features were being discussed both in the forums and in the Council, I started building out ideas that CI 4 might use. The main one being a Reflection-based Dependency Injection container. I played with modifying the core of version 3 to use the container, as well as an events library I had created for Sprint. I knew the likelihood of it being used in the final product was slim, but I was excited about the future. As elements of the project's architecture became more and more firm, I started tackling one piece at a time, discussing details with the group first, then coming back to say, "Hey, I've got a first pass at this in place. Thoughts?" Basically, my eagerness and my ability to carve out more time to work on it than the other team members ended up with me taking lead on the project - something that I never set out to do. It's a huge, daunting task!
Ilya Cherepanov: - Tell us about CodeIgniter current team. How many people in the team? Who is responsible for what in the project?
Lonnie Ezell: - The team has changed a couple of times since it was first put together based on members available time and interest. Currently, there are four active members, though I'm afraid that Mat's work life may be taking him in a different direction so I don't know how long he will still be with us.
James Parry is the framework's lead, as the member of BCIT that oversees the project. He keeps us on track and organized and is one of the main reasons the project is still alive today.
Andrey has been working on CodeIgniter for years before BCIT took the project over. He is the last remaining member of what was the Reactor team back in EllisLab's days, I believe, and was the sole maintainer of the framework for the couple of years when the framework was officially languishing. Under his guidance, though, version 3 of the framework had more updates and bug fixes than any previous version. Without his hand, I'm convinced CodeIgniter would never have survived. He is still the man behind CI 3 and does a lot with security fixes and working with the community on the current codebase.
I am currently lead on version 4.
Mat Whitney has been an awesome member of the community for the last 3-4 years, always providing helpful, detailed answers. He is the newest member of the team, and was starting to work on version 4's database layer before his work pulled him away for a bit. Hopefully, he'll be able to be active again soon.
Ilya Cherepanov: - CodeIgniter long time did not develop. Will be able CodeIgniter catch up other frameworks?
Lonnie Ezell: - I guess I have a hard time with the idea of "catching up" as something that's required. Each framework has a different focus and methodology. They each fill different needs for different programmers, or even different applications. In that respect, CI 3 still has it's place. When people say things like "catching up", I think it's mostly due to keeping up with what the language itself offers. To me the big items to have come to popularity in recent years are Composer packages, Dependency Injection, and easily testable, which go hand in hand. Composer has been supported in CI 3 since it officially released, and I've successfully used it many projects. Will version 4 keep up with the language and many of the best practices now popular? Absolutely. Dependency Injection is used everywhere in the framework. We're creating ways to simplify testing your application with PHPUnit and building that support into the framework. Since PHP 7 is a requirement, we're able to take advantage of a number of the new language features without needing to maintain compatibility with older PHP versions. And more, of course. :)
Ilya Cherepanov: - Many fear that CodeIgniter cease to be simple, fast and flexible. How many strong framework will change?
Lonnie Ezell: - That's a completely understandable concern. Especially as you look around at other frameworks and see how complex they can be. And it's something I try to always keep in mind. Where possible, I've tried to keep the developer experience very similar to what they're used to in version 3. Things won't be identical, but keeping the simplicity and familiarity has been a big goal. Once you get comfortable using it like you did the old way, you'll find that getting more comfortable with a few language constructs, like namespaces, can really expand the flexibility and power your have available that you never did before. Module-like functionality can be implemented using namespaces and a couple of helper functions we've provided for loading static content, like helpers or views, from namespaced folders, for example. I think you'll find that most of the really big changes are in the core of the framework and are things you don't need to ever touch, unless you want to.
What I'm trying to build here is an evolution of the framework we know and love, so there's certain expectations already in place, certain ways of working or things we're used to in the framework, that has to be maintained in order for it to keep the CodeIgniter name and not simply be a brand-new framework. I am trying very hard to make it live up to that standard, but still give you all of the flexibility you need to make the framework work for you no matter what you want to do with it.
Ilya Cherepanov: - Backward compatibility for legacy projects will be broken? How easy is it to migrate applications from older versions of the framework?
Lonnie Ezell: - For the first time the framework's history, backward compatibility will be truly broken. I would not view this as a project to upgrade an old project on, honestly, but one to start new projects on. There has been talk in the community of building a compatibility layer to ease the transition, but we will have to wait and see if anything comes of that.
At some point, though, this had to happen in order for the framework to continue maturing. If the framework would have been able to have continuous upgrades over the last few years, it might be a different story, so we felt that one big change in the framework, version 4, was needed. After that, we can continue to incrementally update functionality and maintain better compatability in the future, like has been the case from versions 1-3.
Ilya Cherepanov: - How long will be supported by CodeIgniter 3?
Lonnie Ezell: - There has not been a specific time frame in place, but the current goal is to continue to provide basic support for that version until it is no longer necessary. We understand that might be measured in years, not months, as many, many legacy projects will be on it.
Ilya Cherepanov: - Can we expect in the future appearance of the official repository on github for CI Community Apps?
Lonnie Ezell: - I think that's a great idea, but one that hasn't been discussed in the Council, yet. It does bring its own problems, though. Not the least is the appearance that BCIT has some hand in maintaining those projects, which wouldn't necessarily be the case. We've got our hands full with just the framework! I think it's much more likely to see a directory of apps and potentially dedicated forum space for certain community apps. It's really too early to tell, yet, though.
Ilya Cherepanov: - What difficulties have you faced when designing the architecture of the framework?
Lonnie Ezell: - I would say there's two aspects that I've found the most challenging and they are both bigger-picture items.
First, trying to find the balance between "clean code" and simplicity is a constant challenge. Too many abstractions in code can be problematic, yet modern SOLID programming concepts encourage us to split things apart everywhere, resulting in a different type of complexity, if you're not very careful. Trying to keep all of the pieces in your mind while navigating through 7 or 8 layers of abstractions is no better, in my opinion, than having spaghetti code. It just becomes "lasagna" then. :) Throughout development, my general practice has been to start out with the single class in mind. Then pieces would be separated out only as necessary. Often times, an array truly does everything you need it to do, without requiring a Collection or Bag be created just for that purpose. I have found that knowledge of design patterns can be a dangerous thing at times, and should be used to help you refactor things, not to design with up front. None of this is meant to bash SOLID, because I think the principles are sound. I just think they're overused many times and the key is finding that balance.
Secondly, and this is related to the first portion, is performance. Most of the design patterns that people know today come from compiled languages, and many make perfect sense in that respect, though they're often taken too far. The more layers your application has, or the more files, specifically, the worse the framework is going to perform. At least without any additional layers in place to help out, like caching used classes into a single class, etc. It's a constant challenge to improve the code quality without drifting too far from the raw performance that CodeIgniter is known for.
Ilya Cherepanov: - At what stage is CodeIgniter 4?
Lonnie Ezell: - Currently, we are just about to a place where our first milestone has been hit. That means that almost all of the core of the framework, including how all of the pieces fit together, and the system works as a whole, is in place. You could take what we have currently and build application's out of it as it is. Routing works, views work, many security steps are already in place, logging, error handling, some additional debugging tools, they're all in place. The database layer is the last portion to wrap up before the core is done and it's ready to be moved to its home at BCIT and opened up to more outside help. And the database layer is coming along nicely, though for the first milestone it will likely only fully support one or two database engines. I need to get documentation caught up to where we are now, and, as always, continue to improve our test coverage.
Ilya Cherepanov: - What awaits CodeIgniter in the future?
Lonnie Ezell: - I think CodeIgniter has a strong future ahead for it. Personally, I'm ready to start using this new version! I think that it's flexibility and speed will help bring back it's popularity in the developer community. I'm also excited to see what the community does around it. You mentioned Community Apps, and I think that is a great initiative to see happen, though I'd encourage people to make it as framework-agnostic as possible.
One of the goals we have for CodeIgniter that hasn't been talked about much, yet, is to have as many pieces of the framework usable on their own as Composer packages. I think this is great, because the framework has always had a very thorough set of helpers and libraries that I don't think many other frameworks seem to match, honestly, and it will be nice to see if developers find that as useful as I think it might be.
Ilya Cherepanov: - What about CodeIgniter on freelancing? He continues to be in demand? Or CodeIgniter supports only old projects?
Lonnie Ezell: - I think the demand for CodeIgniter in freelancing has definitely gone down, and become overshadowed by Laravel, Symfony, and Zend. Though, that's not to say that new projects aren't being built with them. In my freelance experience, it really comes down to what the client is familiar with, or has heard the most about. Many times clients aren't overly tech savvy, and will have friends that love one framework or another, so they make that a requirement. Other times, they'll trust you to know the best and won't care.
Ilya Cherepanov: - What tools during development you apply?
Lonnie Ezell: - I have become a huge fan of PHP Storm as my IDE. I use Sequel Pro on my Mac to work with the database. And, depending on the project, I'll either have the local development environment setup through MAMP Pro, or through a Vagrant box. In the case of CI 4, I've got it running under both MAMP and a Homestead Improved box, which gives me easy access to both an Apache install and an NGINX install.
Those are my core tools, but I've found smaller apps to be invaluable and used fairly often, too. The Patterns app makes it easy to experiment getting regular expression patterns just right. SourceTree for the non-daily use of Git. iTerm (or PHPStorm) for my terminal needs. Sublime Text still gets used some, too, as it is set as the default app in Finder for code files, since it opens quick and has all of the power and formatting I need. A ColorPicker app gets a lot of use when converting PSD's to HTML/CSS.
Ilya Cherepanov: - What other frameworks do you use in your work and why?
Lonnie Ezell: - While I've tried a number of the frameworks, the main two that I use are CodeIgniter and Laravel. CodeIgniter is what I consider "home". It has always done 99% percent of the things that I need it to without a lot of magic that can get in the way at times. I use Laravel if the client asks for it, which they seem to more and more. I'm hoping that version 4 of CodeIgniter can change that some. :) Taylor has done a great job with the developer experience, though, on Laravel, so it's mostly pleasant to use.
Ilya Cherepanov: - Web programming is growing rapidly, there are various frameworks, libraries, and components that make the development process faster. Programming has become easier, but programmers not learning to think and to understand how it works from the inside. Everything is going exactly to the rapid application development (RAD). What can you say about this?
Lonnie Ezell: -There is certainly a danger in people not learning the core language and only learning the RAD tools. I think this is especially true in the first years of a developer's career when they're just trying to get things done. Is that a bad thing, though? Yes and no.
It is a problem because the more tools someone has to learn to get started doing something, the bigger the hurdle just to see something happen. For some, I think the hurdle to learn X, Y, and Z just so they can start doing A is enough of a challenge that they'll back away and do something else. I know I've been guilty of that when it comes to exploring ReactJS lately.
It's not a bad thing, though, in the sense that some of those tools, like frameworks, help them be more productive up front, while helping reduce security issues, and hopefully teaching good programming practices along the way. If we compare the RAD tools that are starting to proliferate with the tools available for writing desktop software, I don't think it's bad that way, either. When creating desktop software, there are RAD tools that keep much of the complexity of the solution in the background, allowing you to focus on what's unique about that project. The same applies to Composer packages. We don't all need to know how the core of something like Guzzle works to be able to use it.
In the end, it's up to the developers to force themselves to keep learning the basics of their language so they can grow as a developer. I suppose it's the reliance on RAD tools to the exclusion of understanding the underlying concepts that is bad, not the abundance of tools itself.
Ilya Cherepanov: - Those or other tools often chosen because of fashion. All are subject to fashion. What do you think about it?
Lonnie Ezell: - I think this has two parts. First, people like to use what others are using. When people or communities they respect start using a new tool, they think they must use it, too, because it must be better. The second part being that new tools come about to solve specific problems, and I think we all hope they solve it in a better way than our current tools. As our projects become more complex, we need more or different tools to keep things working smoothly. It seems, though, that often it's through the use of tools that we drive the complexity up to a point where new tools and/or solutions are needed, creating a cycle that never ends unless we specifically force ourselves to break out of it. While we will never know if a new tool works better than an old one, I think it's often better to ask ourselves what the minimum number of tools we can get away with is. Is there a way that is simpler (though possibly not quite as easy) that can get us to the same end result.
Ilya Cherepanov: - Tell us a little about your current project. What are you doing now?
Lonnie Ezell: - I am just wrapping up a site that allows people to search for music by instrumentation, mood, speed, and more, and then license that music for use in online videos, movies, commercials, etc.
Ilya Cherepanov: - Let's digress from work, and talk of your passion. Do you have any hobbies? How do you spend your free time?
Lonnie Ezell: - Currently, it seems that my free time is spent on CodeIgniter! Outside of that, though, I love playing music, or at least trying to. I am in a Pirate band that traditional sea shanties and more modern sea-faring type music, called Capt'n. Black's Sea Dogs, that is a lot of fun. I get to play guitar and penny-whistle in that band.
Ilya Cherepanov: - As I know, you've written a few books. Tell, what is this books?
Lonnie Ezell: - I've written two books so far, one fiction and one non-fiction. My novel is titled, "Daughter of the Sun" and was written about 5 years ago and published independently. It's a fantasy novel about a woman that is forced to see how far she will go to save the life of her daughter from the clutches of a ruler that wants to kill her for the magic she wields and take the power to live longer.
The second book that I'm currently finishing up is called, "Practical CodeIgniter 3" and is available at leanpub.com/practicalcodeigniter3. This book is not intended to be a beginner's guide to CodeIgniter, or a replacement for the user guide. Instead, it's intended to provide examples and advice on how to really make the framework work for you and your team. It includes numerous ideas for customizing the workflow to better suit you, and describes not-so-common uses for features of CodeIgniter that you might not be familiar with, or might not have discovered, yet. I decided to write this one when I looked around and realized that no one else was going to write a CodeIgniter book from the established presses.
Ilya Cherepanov: - I am very glad that you gave an interview and spend your precious time. What can you tell readers at last?
Lonnie Ezell: - There are a lot of great frameworks out there that you can use. There's truly not "one perfect" framework among the bunch so try as many of them as you can, even if it's just part of a personal project. Each one will teach you new ways of working and thinking about your application that you can take with you. That way, you don't fall for the popularity contest that stems up around frameworks, but you can start to know which framework works best for you and the current project.
And always keep learning and growing.
Thanks for the interview!