I'm always looking for ways to make my programming environment and workflow more efficient. So what setup do you have that you think makes you work as efficiently as possible?<p>Right now I do all my code editing in OSX, and have a VMware virtual-machine running Ubuntu Server. I have a script running that syncs any changed files from OSX to the virtual machine, so I can run / test in an environment as close to production as possible.<p>Right now I'm looking into creating a base VM, to copy and store in the cloud somewhere, so I never have to setup again, And I really would like to be able to run it in the cloud and access it from anywhere, but that seems too expensive right now.
Sounds like you're already doing my number one tip: take the time to write tools to automate repetitive tasks. If you do anything more than a few times and it can be automated then it's worthwhile to do so. Python is a great language for writing tools IME though you could use anything you're comfortable with (and has the requisite libraries).<p>Buying tools, even if they only do one thing, is worthwhile as well. For me the price point where I'll buy is around $20. If you have a simple app that does one or two things I need on occasion -- and the app is relatively current and bug free -- then I'll buy it. I've rarely been disappointed with $20 tool purchase.<p>Beyond that I haven't found that code editors really have that much advantage over any other (I'm an experienced Vim user and I've used a handful of popular editors with project management features). Sometimes you're forced to use an IDE, like Xcode, or have to work on a different computer/OS, so there's not much point in finding the ultimate editor.
I use Vagrant with Puppet and VirtualBox (they have base-boxes you can expand on) to spawn machines whenever I need them and pre-configure them to test stuff. I use the shared folders feature of VirtualBox between host and guest, I don't use scripts to sync stuff (Vagrant will be gaining support for VMWare sometime soon if I recall).<p>As far as 'hosting in the cloud goes', I just uploaded my base-boxes to my FTP server so whenever I lose the image or need it somewhere else Vagrant will just fetch it for me. Running it 'in the cloud' isn't something I feel like attempting, I prefer to be able to work regardless of a working internet connection.<p>When it comes to editors, I use Vim with a slew of plugins, most noticeably Vundle, python-mode, NerdTree, Powerline, CtrlP and syntastic (which takes care of calling syntax and style checkers when needed). Vim is available just about everywhere and with a carefully crafted .vimrc you can get the same working environment on any system so you don't have to familiarise yourself with a new set of tools every time. However, there will always be cases where you need to switch to different IDE like XCode if you're doing iOS development, or Eclipse for Java/Android.<p>Another practice I find useful, store your rc-files in something like git. Setting up a new working environment then just comes down to a `git clone` instead of mailing configuration snippets to yourself from one place to the other. You can even have platform or device specific branches that contain small changes for every environment.
Macbook Air 13", two 24" external displays (one is via a USB display adapter).<p>I have VirtualBox set up with an image of Windows XP for IE testing. Other than that, I run all my webdev projects on my MBA, rather than in a Linux VM in VirtualBox. Homebrew is wicked.<p>I use PyCharm for my dev environment (I'm largely a Django dev at the moment). Say what you will about IDEs vs text editors (but please don't in this thread, really!), it's a great tool - worth it.<p>I have Linode VPSes running for staging/testing purposes that mirror production systems.
My Stack:<p>1) A jetbrains IDE (I love em)<p>2) Macbook, connected to large external monitor, wireless mouse/kb<p>3) Alfred App for quick moving around<p>4) Divy for resizing windows easily<p>5) Dropbox where projects rest<p>6) SourceTree by atlassian with git-flow<p>7) The hit list (one of my favorites because it requires little configuration, and theres hovering activity timer that keeps you aware of how long youve been working on a feature)<p>8) Heroku > idea to server in minutes (free addons make starting up a breeze)
At work I use KDevelop in conjunction with Perforce for version control. Its the basic two monitor setup.<p>At home I also have two monitors (A must have in my personal opinion) but I use git for version control and sublime text editor for coding.<p>Would I recommend what I use to others? Nope. Everyone must find their own path. I tell others what I use, but only if they ask.
Using OSX, working with files/data on a remote server: I use transmit to sftp files from the server. I usually code in textwrangler. I ssh into the server through terminal. I have a script that copies selected code from textwrangler and pastes it in terminal (and presses enter), which is useful for testing and debugging scripts. I also use vim when I want to make relatively quick edits to files.<p>I'm fairly new to OSX but my setup works pretty well for me. I think my biggest inefficiency is my text editor; it doesn't have syntax completion (as far as I know) and it can be a bit of a pain to work with more than 3-4 files at the same time. My long-term goal is to totally move to vim.
1. Macbook Air with External Display<p>2. Chrome visible in external, with inspector/console on macbook<p>3. Wireless Keyboard and Trackpad(GODSEND!)<p>4. Sublime Text 2 for coding<p>5. Bamboo for automated builds using ANT<p>6. iTerm2 for terminal on steroids<p>7. AWS for everything cloud<p>8. DNS made easy for low TTL Domain management<p>9. JIRA/Bitbucket for Issue/feature tracking connected to git commits<p>10. I just wanted to make the list have 10 things in it<p>I highly encourage everyone to try to get something like Bamboo/ANT working to automate your deployment. Its such a timesaver later.