Mac OS X is my current development OS of choice. It is Linux compatible enough so that I can take most open source software and compile it for OS X, as is. I recently had occasion to help someone setup a Windows based development environment for a PHP project deployed to AWS Beanstalk. I thanked my lucky stars that I developed it on a Mac.
I was a Windows based developer for over a decade, since Windows 3.1 to be exact. I evangelized Windows development and Microsoft Visual Studio, in every place I worked, way back in the late 90's. At the time this was the most comfortable and productive C/C++ development environment. Just the edit and continue feature made debugging an order of magnitude faster than having to compile and re-run.
The last Windows OS that I used regularly was Windows Vista. I was getting tired of major UI paradigm shifts from version to version and got a MacBook Pro. I used Parallels Desktop to run the familiar Windows tools as a transition. It took some time to migrate my habits but I cannot imagine going back.
My current development machine is an iMac 5k Retina 27". I used to have two 24" monitors, which took up a fair share of real estate. A single 27" screen is more compact and practical. The retina resolution is just eye-candy. This is the best development environment that I have ever had from both hardware and software perspectives. The iMac is dead quiet, letting me focus on the work.
With the last upgrade to Sierra I cleaned up my hard-disk and with it the Windows 10 VM for Parallels Desktop. I found lately it did nothing but run an upgrade every time I launched it and raise my blood pressure. I will still have to create a windows VM for plugin testing but using Windows OS for me is history.
Hands down, it is the JetBrains IDE products. They are the best and if you are willing to learn how to use them properly by adjusting your habits then you will wonder how you ever lived without them. I have been using PhpStorm for over two years and IntelliJ IDEA for over a year. I am still "discovering" new features, especially now that I am trying to hack functionality into the IDE that it did not foresee as a viable option. The features are new to me, not to the IDE. There is simply so much that it will probably continue to amaze me for the foreseeable future.
I felt a year ago that these IDEs are spectacularly designed and implemented. After going deep into some of the implementation code I feel even more convinced about that statement. They run on every popular platform and are blazing fast and getting faster with every release. The intelligence of these products has no equal in the development arena. They are also very actively improved and supported. I have found my new "development home."
Many tools try to do a lot and wind up doing some well and others poorly. These IDEs are the exception. They do it all to a high degree of excellence.
If you have not used a JetBrains IDE before, do yourself a favour and get a 15-day free trial and see what you have been missing. Just give yourself a bit of time to learn the lay of the land. These products are a universe of functionality that is well worth exploring.
And in my humble opinion, both Markdown Navigator and Mia: Missing In Actions plugins make documentation and code editing in these IDEs even better.
I find these plugins a must have, which I immediately install in all my IDEs:
git and GitHub for VCS. I would have given a kidney for this VCS combination 15 years ago when I was managing development teams. Today they are free.
BeyondCompare for directory and file diffs. I discovered this tool when it was still in version 1 and only supported Windows. It is now at version 4 and supports Windows, Mac OS X and Linux. I always had it installed on my systems, even when I was not doing development.
Transmit from Panic for FTP and Amazon S3 sync. Not much to say. It is an icon in its class.
Scrivener from Literature & Latte. This is an amazing writing and thought organizing tool that does its job without getting in the way. It is smooth and orthogonal in its features and implementation. Although dubbed as a writer's tool, which it is, it is applicable to more uses than that. I use it to organize almost random bits of information that I need in one aspect of development or another. It helps me "remember" how I solved something a few months back so I can repeat the process.
Scapple from Literature & Latte. The easiest and snappiest free form idea organizer. I use it to rough out concepts with minimal interference from the tool. Simple and well designed.
Path Finder, replacement for Mac OS X Finder. Having come to OS X from more than a decade of Windows use, I found that the OS X beats Windows in usability, practically in everything except the GUI file manipulation. This app mitigates the OS X shortcomings in this department although it cannot eliminate them entirely. I couldn't work on the Mac without it. I still find the OS X file search capability mediocre at best. Brain-dead would be a more accurate description but that is a minor annoyance in the grand scheme of things.
Laravel PHP framework for site development. Extremely well designed, easy to customize and a joy to work with when you get the hang of it. I started with 4.2 and migrated to 5.1, which is a great improvement over the older version. I customized and released a couple of packages (Laravel 5.1 Translation Manager and Laravel 5.1 Scaffold Generators) to make development even easier. There are tons of packages available and non-laravel PHP packages can be easily "wrapped" for Laravel, should the need arise.
The documentation is oversimplified and you need to get comfortable reading the source code to do more than just basic stuff. That said, the source is well worth the read. Having started with PHP development two years ago, I find its source a cookbook of elegant solutions.
Apache 2.4, Php 5.6 & 7.0 for site development with MySQL backend. Hosting is on AWS, with Elastic Beanstalk for load balancing and instance creations with RDS MySQL backend. AWS has a bit of a learning curve, to say the least. Once you get over that it is dead simple to maintain and feature rich. I don't deploy my app the 'usual' way because it wasn't working for me.
composerwould run out of memory when executing an
updateon the 1GB memory machines. So deployment failed altogether. I was forced to figure out how to deploy without
composer. The benefit is that a new deployment takes a minute or two vs. 10 to 15 that is expected with the 'usual' method. Sure it would be nice just to push a new version to GitHub and forget, but cutting the deployment delay has its advantage and did I mention that it actually works, which is a huge benefit.