State of the Art - Dev Tool 2014

Posted on 21 Jul 2014

In this post I’d like to detail the various tools that I currently use for my work. Every few years I find myself writing a similar post to this one, cataloging my current development stack/tools. I find it a good exercise because of the ever-changing nature of the tech industry. What I’m using today will almost assuredly change in the next few years, so it’s always a good reference for the future to see where things were at, but it’s also fun to contrast and compare to what others are using for their projects.

I’ve been primarily programming in PHP for years now, but am a ‘full stack’ developer. That means that I’m usually responsible for getting things up and running from front to back - from the servers to the CSS. I’ve worked in various roles where portions of that work was either entirely in someone else’s hands (eg, full-time DevOp support) but I’m usually primarily responsible for some/all of what is produced. So, without further ado, here is what I’m currently working with.

I currently work at Vevo, where I run a CMS built in CakePHP. I’ve used various other PHP frameworks over the years, and I have to say that Cake lands itself somewhere squarely in the middle. It’s not the worst I’ve used (here’s looking at you Zend) but certainly not the best. The best I’ve used was CodeIgniter, but it’s extreme backwards compatibility with PHP4.x is making it a little long in the tooth, so, althought I don’t have extensive experience with it, I’d have to say Laravel probably earns the top spot right now.

Back in the day, I started using Eclipse and it’s PHP extensions as my primary IDE. Eclipse is awesome, if you’re willing to spend the time and energy on it. It may have stabilized more in the years since I’ve used it, but back when I was using it (in the mid-aughts), it would frequently crash and/or require a re-install. I have to say, though, that I still have not found a replacement for Mylyn. Integrated with a bug/issue tracker, it was a godsend - allowing you to link issues to actual files and making context switching amazingly easy. But Eclipse was buggy, and clunky. Part of me misses it, as it was sort of a gold standard as far as functionality.

A couple of years ago a coworker started touting Sublime Text, and although I thought he was crazy at first, since I started using it I’ve never looked back. It has now become my de facto text editor for just about everything. I used to be a big fan of Textmate and BBEdit, but all the cool kids are using Sublime Text these days. It’s fast, has all the features I want and has a great plugin system which allows for easy expension of features, or even just code highlighting for various languages. If you’re not already using it, you should really check it out - I can’t recommend it enough.

My primary development machine is a 15” MacBook Pro. Most of the (systems/back-end) folks in my office are developing for C# and other Microsoft platforms, but still use Macs for their primary computer - even if they boot it into Windows as the primary OS. There are good reasons for this, but I won’t get into that debate here. I’m also fortunate to have grabbed a couple of extra monitors over the years. A coworker didn’t want his shiny new Apple Thunderbolt Display, so I happily grabbed that. I also have 2 HP Compaq LA2405wg monitors to either side, one tilted to portrait for easier coding.

One of my favorite little apps is the free Sequel Pro app for managing MySQL databases. There are fancier, more functional apps out there, but none are as user-friendly or free - and it handles most of what I want from such an app. Lots of bells and whistles arent’ always better and this app handles 99% of the DB admin I do admirably. It imports and exports SQL dumps, making it a breeze to keep my local dev DB up to date using backups from production, with a nice little interface so I don’t have to remember all of the obscure mysqldump options. It also has a nice little console where it records the actual SQL of any action you take, so if you’re adding indexes, say, through the GUI you can easily copy the resulting SQL for saving/using elsewhere.

I manage all of my code through Github, but do host a few personal projects on Bitbucket, since they allow for free private repositories. I know my git-fu well enough to get around on the command line, but it’s not always pretty or fun. I had been using Github’s app, but it is only good for use on Github itself, so I switched over to Atlassian’s SourceTree, which, it turns out, is even better. It gives colored diffs for all your files, managed multiple repos across multiple locations, handles stashes, submodules, cherry picking, interactive rebases, and most other major functionality of git in a nice, intuitive interface. I could run all of this from the command line - but why? The colored diffs alone make it worth the asking price (free).

My main production work for Vevo runs on AWS, but for my local development I run a copy of Ubuntu Server 12.04LTS through VMWare Fusion. I’ve tried Parallels as well, but I think either is comparable for running a mostly headless server (I primarily SSH into it through OSX’s console since that’s friendlier to work with). I host the code I work on in a folder on my Mac and share that folder as the webroot on the Linux server. It works great, but I did have a few hiccups with an older version of VMWare Tools that involved having to fix and recompile some of the code. Not for the feint of heart, but it looks like they have all of those issues solved (for) now.

For debugging, I use the indespensible, why-is-this-not-built-in-yet, Xdebug to give pretty stack traces, remote debugging, and code profiling. Profiling isn’t always needed, but if you’re doing optimization (premature or otherwise) it can be a big help. Xdebug allows you to output profiling data as ‘cachegrind’ files, which you can view using something like KCacheGrind (Linx) or QCacheGrind (Mac/Win). At the very least you should be using it to produce pretty graphs to the delight and envy of your coworkers.

I think that about covers the major portion of what I currently work with. I use a bunch of ancillary apps when called for, such as Transmit for connecting to and administering S3 buckets, but they don’t see quite as much use as the others mentioned above, which I use almost daily.


comments powered by Disqus