According to the 2020 Stack Overflow Developer Survey, more coders work on Macs (27.5%) than on Linux (26.6%), but only by a very small margin. By contrast, nearly twice as many developers (45.8%) use Windows as their development machines. Over the years, I’ve jumped between platforms, but I find myself regularly returning to the Mac.
The fact is, I gain a lot of productivity from Mac-specific apps, particularly Final Cut Pro X for video production. I like being able to run Windows, Linux, and Mac applications on the same machine, which is only possible on a Mac (I’ll talk more about that below). While Windows offers a robust command-line environment, I like having a full Linux-style command line as well as a complete complement of the Mac’s well-integrated graphical tools.
In this article, I’m going to show you the tools I use. Many are cross-platform, while others are Mac-specific. While I have coded Mac apps and iOS apps in the past, my coding now is entirely for the web. I maintain 10 open-source WordPress plugins, including a donations plugin that supports more than 10,000 nonprofits and a site privacy plugin that supports more than 20,000 sites.
And with that, let’s get started.
Integrated development environment
The subject of code editing and developing environments has sparked more religious debates than I care to count. Some programmers swear by going old school, relying solely on the command line and editors like vi and emacs. Some coders prefer light-duty text editors. Others prefer more extendable editors like Atom and Sublime Text. And still other coders, myself included, prefer full-blown integrated development environments like PhpStorm, Visual Studio Code, and Xcode (mainly for its Mac and iOS native development tools).
My weapon of choice has been PhpStorm. I’ve been using it for years. It has an excellent integrated debugging environment that allows for both local and remote debugging. It also has a wide range of other integrated features I use daily, ranging from its own terminal window to file synchronization to version control and line-by-line file history. Plus, it has a rich selection of plugins that expand and enhance the coding experience.
Local development environment
When coding for the web, it’s often best to have a local development stack. Local is one such stack. It provides Nginx or Apache, MySQL, a PHP install with Xdebug, and a number of other resources, most notably a tunnel so internet-based resources can access the local environment for coding and testing, a built-in SSL integration, and MailHog, which intercepts email for email-based application testing. Oh, and it’s free.
I mentioned Sublime Text previously, and many coders use it as their primary development environment. It supports an almost legendary array of plugins and add-ons. I use Sublime as a quick editor when I want to edit project files outside of PhpStorm’s intrinsic project structure. It’s fast, responsive, and oh-so-geeky.
Committing files to the repo
Rather than use Git or Github, the WordPress plugin repository (where all sanctioned plugins are made available to WordPress users) uses the SVN source code control system. I find command-line SVN annoying, so I use a graphical UI called SmartSVN to send my files into the repository. It substantially reduces the chances I’ll make an error when posting a new build.
Command line with panache
While I prefer using GUI interfaces for most functions in my development kit, I’m not one to fear dropping into the command line when it suits me. While it’s possible to get by with just the standard MacOS terminal, I prefer iTerm2. It provides split screens, command completion, paste history, and quite a bit more. It’s also configurable to fit both your mood and your project.
Seconds saved with every click
This little Mac App Store gem is a handy tool for capturing quick items and accessing them from the Mac’s menubar. My biggest use is creating shortcuts to the admin and user pages of the various sites I’m working on. Rather than switching to a browser window and then invoking a bookmark, I just go to the menu, choose where I want to go, and the browser opens up.
This might seem like a minor feature, but when switching between IDE and browser thousands of times a day, those saved mouse movements really do add up. Because Shortcut Bar allows grouping, I also have links grouped for local and remote server testing locations.
Windows and Linux on Mac
Because I’m doing web development, I have to check my code on Windows-based browsers, which means I need to launch Windows 10 to test the new Edge, Chrome, Firefox, and — forgive me, Father, for I have sinned — IE11. Yeah, there are still IE11 users out there.
I find the ability to run Windows, Mac, and Linux on the same machine to be hugely helpful in certain circumstances. That said, I’ve been running Windows on my upstairs office Mac, which is the one with the most speed and capacity. That machine is also the machine I use for video production. My primary development machine is actually downstairs, next to the couch. This goes back to the days of when my dog was a pup, and he used to go through withdrawal when I worked in the office.
That machine is a 2013 i7 iMac with 32GB of RAM. It’s ideal for development, but it’s just not fast enough for multiple streams of 4K video. It’s also no longer fast enough to really successfully host a Windows Desktop.
Screen Sharing and Microsoft Remote Desktop
Connect to remote machines
Even though my dev machine is downstairs and my video production machine is upstairs, I can work on either, no matter where I happen to be. I simply use the built-in Screen Sharing app from MacOS to connect to the remote machine.
When I want to connect into Windows from the downstairs dev machine, I use Microsoft Remote Access. This is a free download from the Mac OS App store, and provides a full remote interface into my Windows 10 machine. Be aware that if you plan to use Microsoft Remote Access, you need to be running Windows 10 Pro. Windows Home does not support remote access
Oh, and in case you’re wondering why this setup doesn’t seem to have a mobile, programming-in-a-coffee-shop component, it’s simple: the pandemic. Once it became clear that all my coding work would be done at home, I consolidated my development onto a fixed machine with good capacity and optimized for gigabit Ethernet between the machines. If we were still living in the “old normal,” I’d have a much more cloud-centric implementation.
Clean GUI to MySQL data
My code does a lot of SQL work. As such, I need to be able to look at what’s been stored into the database. The easiest and fastest way for me to do that is not PhpMySQL, but a Mac-native app called Sequel Pro (which, wonderfully, conflates pancakes and data storage on its icon).
My most common use is to open a database table and search for “value contains” or “option_name contains” and look for the results. It’s fast and allows me to manipulate the data as part of my development process. I should point out that PhpStorm also has a database browser, but I find Sequel Pro to be more efficient for my use.
A moderately uncranky SFTP client
It took me a long time to break my habit of using SFTP via the command line and SSH tunnels. But Forklift is a good substitute. It keeps a list of sites and logins, handles encryption, and provides a traditional drag-and-drop interface for moving batches of files.
Powerful app automation
Along with Final Cut Pro X, Keyboard Maestro is one of the Mac-only software tools that keeps me on a Mac. I first bought Keyboard Maestro in 2011, and I’ve been using it for a wide range of specialty scripts ever since.
It is an incredibly powerful cross-app scripting tool that’s also very easy to use. I regularly spin up special-purpose scripts to run a task that would otherwise take a long time. Some of my scripts are very powerful and cross multiple applications. Others, like the Stripe Fill Test in the screenshot, does one thing, over and over.
Let’s talk about that one. When developing the Stripe payment gateway for my donations plugin, I had to initiate a test payment, probably a thousand times. As I coded and tested and debugged, I had to fill in the same credit card fields with the same test data, over and over and over. A simple script in Keyboard Maestro did all that for me. Instead of hand-filling the data for every single pass, I just let Keyboard Maestro do it for me.
Quick special-purpose searches
Alfred is the newest addition to my productivity family. It pops up a command bar sort of like Spotlight, but with added capabilities. You can create workflows to do relatively complex tasks, but my big use so far has been four custom searches. When I hit Alt-Space, Alfred’s bar pops up.
If I type “codex,” it will take whatever follows and use that as a search string to the WordPress developer codex. Typing “plugin,” searches the WordPress plugin repository. Typing “zdme,” searches ZDNet for articles I’ve written with the search string. I use this constantly for placing links into articles. Now, these may seem simple, and you can set up Chrome to do custom searches, but again, as with Shortcut Bar, this saves mouse moves and keystrokes. If I need to see the definition for a WordPress function, a tap gets it for me, without ever needing to go to the mouse.