When I first started working professionally, it was in a ColdFusion environment. Beyond that scariness, the company I worked at was a victim of licensing costs requiring the use of an internal development server on which we’d all work. It was a small company with just three people coding day-to-day, so collisions were unlikely. On top of that, it was my first real job so I didn’t really see much of an issue with it.
As I became more involved in the front end community though, lots of people would talk about local development and how they wouldn’t trade it for anything in the world. As my process began to form and become more refined with every project, I first began my abstraction of working on the front end start to finish first, followed by ColdFusion development. While the initial inspiration was to see if local development was that much faster, the byproducts of segmentation have carried through to my workflow today. I always build out the front end completely before integration with WordPress.
Unfortunately though, I was stuck working on the in-house dev server due to licensing and frankly a feeling of being too busy to worry about exploring other options that kept us on ColdFusion. Fast forward a few years and we had moved to WordPress. That was the day I began developing locally and it made me love open source that much more.
My local development environment as of today is a 13″ MacBook Air running OS X 10.6.6 with MAMP Pro. I was running XAMPP for a time but since moved to MAMP Pro due to the ease of creating named virtual hosts, switching between recent PHP versions, local Postfix, and easy fine tuning of Apache modules to name a few reasons.
Editor v. IDE
That’s the environment, the other big piece is the editor. I’m a self-proclaimed editor addict; I’m always interested in what’s being released and why it might help me work faster. That said, however, I purchased a license for TextMate the day I moved to OS X in 2006 and to this day it remains the best tool for the job. Sublime Text 2, though, is on it’s way to being the TextMate 2 we’ve all been waiting for.
At the end of the day both TextMate and Sublime Text 2 are just text editors. I don’t profess that I’m the world’s best programmer by any means, but I’ve built a few things over time, and I don’t see that going anywhere soon. I have a heart for design, but practicality keeps me neck deep in markup, style, script, and PHP every day of the week at Iron to Iron and I love it. I’m liking it so much in fact that I’m finding that I want to get more out of my programming workflow, a text editor isn’t really cutting it. Enter IDEs.
I’ve had a nagging interest in IDEs since first hearing about them. While a much more elaborate piece of software, I’m essentially using those pieces in segmented applications already, and the editor itself is much more elaborate. When working with a text editor, it’s likely you’re using that to edit the code, another application for version control, yet another application for working with your databases, your browser for documentation, and the list goes on. That’s what I’m doing anyway. I’ll edit code in TextMate (Sublime Text 2), commit in Versions, Sequel Pro for all things database, and Chrome to review documentation when needed.
I recognize and appreciate that many of you are using command line git, command line vim, and so forth. While the command line is super productive and minimal, sometimes I like eye candy for the sake of eye candy.
IDEs are, by nature, fully featured and very comprehensive. The most attractive feature of an IDE for me is codesense, or smart autocompletion of code. Many times when I’m reviewing documentation, it’s simply an effort to get function parameters right on the first try. Codesense helps do that for me, and even provide more detailed documentation on WordPress-specific functions as many IDEs will pull in PHPDoc which can be really useful on the fly. IDEs aren’t the only kids on the block using codesense, though. Many newer text editor builds are doing the very same thing which is great. So what is it that has me wrapping back to IDEs? Debugging.
Debugging. My final frontier. Until the next one.
Debugging and (unit) testing are two aspects of my workflow that I admittedly have not spent a gigantic amount of time with. To me, that reflects poorly on my professionalism as a programmer and it’s something I want to focus on over the coming years. My workflow is filled with
echo when needed and it just feels sloppy. Sure, it gets the job done, but it just feels like things can be done better, faster. Debugging solves that feeling for me.
I’m currently integrating Xdebug into my workflow and it just feels right. Not only does it feel more productive, the geek in me goes nuts in the fact that I can step through a call to a WordPress page and watch things execute line by line. Beyond that I can keep an eye on memory usage, call stacks, check out variables at any point in time during execution, and the IDE caters to exactly that. As I build more advanced things for WordPress, this interaction exchange is going to prove extremely valuable.
For the time being, I’ve settled on NetBeans as my IDE of choice. I explored many of the available IDEs and chose NetBeans because of the customizable language patterns (it lets you define, for instance, how your braces are formatted), it’s integration with Xdebug, it’s price tag, and it’s release performance over the past couple of years. I don’t love the fact that it runs on Java, but overall I like the decision. Komodo comes in as a close second, but the price tag is a bit up there for something I’m not sure will remain in my workflow over the next six months. Should the IDE route remain valuable for me over time, I’ll begin to evaluate other IDEs based on features. Suggestions welcome.
All things considered, I’m hoping to go cold turkey with NetBeans for the next week. I’d like to revisit the actual debugging process in the form of a screencast should anyone be interested in checking that out on a more intimate detail. I’m also hoping that the broadcast of my newness to it will help get some targeted feedback on what I can do to take even more advantage of what an IDE and debugging tools have to offer.