Creating a development setup that is ideal for your workflow is a highly personal process. My development environment is no different. I can’t create the perfect setup for you, but I can give you an overall gist of what works well for me.
I’ll be keeping this post up to date and referencing it in my tutorials to help bridge any gaps in your own environments, or to provide beginners with a solid base from which they can build their own ideal setup. The idea for this post has been appropriated this post from Tania Rascia’s excellent web development blog.
- Operating System
- Web Stack
- Text Editor / IDE
- Version Control
- Version Control Hosting
- Content Management System(CMS)
- Static Site Generator
- Encryption (TLS/SSL)
Primarily a Windows user until 2010, when I started transitioning to Linux. First used FreeBSD in 2012, and purchased my first Mac in 2015. A UNIX operating system with a command line is a major part of my workflow.
If you’re interested in learning more about FreeBSD and how to use it, you can follow my perpetually expanding series on FreeBSD.
Alternatives: Opera, Chrome, Edge (Windows only).
I use Safari on my Mac and Firefox everywhere else. If you are developing for the web, you should use every browser that you can when testing your sites and apps. This ensures maximum compatibility across browsers. You can get a snapshot of your webpage in every major browser at BrowserStack.
- AdBlock Plus: advertisement blocker;
- Grammarly: a grammar and spelling checker;
- Privacy Badger: tracker and spying ad blocker;
- New Tab Override: override Firefox’s new tab, allows new tabs to default to homepage.
I use FAPP (FreeBSD, Apache, PostgreSQL, PHP/Perl).
I use FreeBSD instead of the more common Linux in my local web stack as I am more familiar with it; the same goes for Apache over Nginx. I use PostgreSQL partly due to its license and party due to its dedication to data integrity above all else. You can read a fairly good summary of the advantages and disadvantages of PostgreSQL in this community comparison with SQLite and MySQL at DigitalOcean.
Java and Perl are my go-to languages for most work. I use Java for desktop software, and Perl for web applications and short UNIX scripts. I have a strong preference for C family languages, and I occasionally use C and PHP. I will sometimes use Fortran for prototyping new ideas and for mathematical calculations that I can’t be bothered to do on a piece of paper every time. Some people seem to love Python, but I personally do not.
Text Editor / IDE
Alternatives: emacs, Sublime Text, Eclipse, Visual Studio.
Yes, that’s right, I’m one of the many truly insane people that decided to continue learning how to use Vim (after they figured out how to exit it, of course). Vim is my main editor for everything bar Java and C, which I write in NetBeans and Xcode respectively. I tend to prefer text editors such as Vim to IDEs such as NetBeans.
I use HostWithLove and DigitalOcean.
I use HostWithLove for most of my non-Java sites, where I don’t need much control over the server. This site itself is powered by HWL! Shared and reseller hosting, where the hosting provider manages the server itself and provides you with technical support, is a boon.
DigitalOcean comes to the rescue when something with more raw control and power is required, but simple reseller hosting is good enough for most things. As mentioned above, when using DigitalOcean droplets, I use a FAPP stack.
I use Subversion and Mercurial.
I use both Subversion and Mercurial, but for different purposes. Small projects that only involve code, which will be shared with others, gets thrown into a Mercurial repository. Anything that will only be worked on by me, involves a lot of large files, or that requires a centralised version control model for code security and access control purposes, goes in a Subversion repository.
Many people today use Git, but I find it cumbersome to use. It has a steeper learning curve than Mercurial, and both have a steeper learning curve than Subversion. Perforce VCS is incredibly popular in the larger companies within the game development industry.
Version Control Hosting
I host my own Subversion repositories on a local server, using ViewVC to access them in a web browser when I’m not working on them. I push my Mercurial repositories to Bitbucket, sometimes using Atlassian’s Sourcetree application.
I’ve also used Perforce’s HelixTeamHub for hosting Subversion repositories, and I can recommend it as an alternative to self-hosting if you would prefer a GitLab-like experience for SVN. They also support Git, and a few other version control systems.
Content Management System (CMS)
I use WordPress.
For most sites that require a CMS, I use WordPress. It gets the job done, even if it isn’t very pretty. Unfortunately, it isn’t compatible with PostgreSQL, so I have to use MySQL instead when working with WordPress.
WordPress’ main competitors, Drupal and Joomla, have steeper learning curves than WP itself. Grav requires you to be comfortable working with actual files rather than a web interface, but it is lightweight and doesn’t require a database, so it’s worth bearing in mind.
Static Site Generator
I use Templer.
Static site generators are useful for when you’re developing sites that don’t require a CMS, as they reduce development time by allowing you to focus more on the content of the site. They automatically concatenate your content files and your templates, so you only have to type out your templates once.
I use Templer. It’s written in Perl, which as I stated above I am familiar with. Jekyll is significantly more popular, and is used to power GitHub pages.
I use LetsEncrypt.
LetsEncrypt provide free SSL/TLS certificates that can be automatically renewed, also for free, every time they expire. I can’t think of a reason not to use LetsEncrypt certificates, but if you find one, I’ll throw out some paid alternatives.
I use VirtualBox, Vagrant and bhyve.
Alternatives: QEMU, VMWare Workstaton, Parallels Desktop (Mac Only).
When I’m just firing up a VM to use a desktop OS that I don’t have installed on actual hardware, VirtualBox does the job just fine. If you aren’t comfortable with figuring out how to use hypervisors like bhyve, VirtualBox will work just fine. I use Vagrant to create, manage and run local web development stacks. I use bhyve for isolating software on my server, rather than using jails.
Concluding My Development Environment
That’s everything that I use, off the top of my head. If there’s a particular type of product that I haven’t covered that you’d like my opinions on, or if you’re interested in using any of the tools that I do but don’t quite know how, as always, drop a comment below or join my Discord server.