I’m not a Windows dev (meaning, I don’t make apps for the Windows platform) but I do use the OS as my main OS. I’ve used Linux (different window managers) and OS X in the past over long periods of time so I got to try it out but I also seem to fall back on Windows.It feels like home. And anyways, while I don’t develop for the Windows platform I do want to.

Regardless of that, I work mainly with javascript (Node + Front-end), and PHP. I also use Ruby once in a while, mainly for its tooling (Capistrano, Vagrant, etc.). Coming from long-time use of OSX, I’m expecting the same caliber of dev tools include an iTerm2 alternative, Brew for package management, and deep VIM integration.

I was scared that I wouldn’t find it and would have to resort back to working on either an IDE or Sublime Text 3 (a no-no in my world). One thing to keep in mind is your mentality and approach. If you hate Windows, don’t use it. But if you do like Windows and you’re programmer, remember that you’re not a second-class citizen. Most languages have first-class support on Windows. And yes, you’re still a programmer and you can still like open source stuff!

The Terminal

cmder First of all, using cmd.exe is not an excuse to bash Windows for its terminal support. Mainly because cmd is a relic of the past. Second, Windows tools and workflow focus on being all GUI and no CLI. And anyways we have better tools now including:

  • Cygwin – A bash-style alternative that tries to emulate *nix systems but fails on many fronts. It’s a square peg trying to ram its way into a round hole. While it may seem familiar at first, it becomes sluggish and horrifying as time goes on
  • Powershell – Windows’s command line power tool. If you know how to use it, then you’re God on Windows. However, since I deal with Open source languages that mostly run on *nix systems, PS is a clusterfuck of confusion
  • Cmder – Ah, the holy grail. It’s a terminal that gives you iTerm-like functionality (tabs), is installed with msysgit, a toolset of *nix tools, and doesn’t look too shabby, it’s actually useful! More importantly, it has its own config and runs, you won’t believe it, either cmd or powershell inside it! This means that you’re shaving off that square peg that Cygwin is and marrying some familiarity to the new dev system.

My choice for a terminal was obviously Cmder and its full install. It works very well and helps people that are migrating from *nix to Windows. I know that eventually I’ll have the learn the ways of the Powershell but until then, most of my tools and most commands I’m used to using will work just fine! 🙂

VIM

vim Vim was a fear I had. VIM is one of my near and dear tools that I am scared to part of it. I love it so much in fact that I have several browser extensions that allow me to use Vim-like bindings in my browser! I knew VIM could run on Windows but I didn’t know how well AND if I had to run it in a separate windowed mode (not in terminal). That’s a nightmare for me. It’s like knowing there’s a better way and it’s in sight but just out of reach.

Luckily, there’s a solution! Cmder already comes with precompiled VIM AND it works from the command line!

But it’s not the best, it’s older, compiled with less features. However, there are precompiled binaries available online. And it works beautifully. There are some things that don’t work on a Windows machine. Namely, VIM for Windows doesn’t come with Lua compilation (but you can just a DLL to the VIM folder as discussed on the neocomplete git repo). There are other dependencies for various plugins, and you just have to check what you need and adjust to it.

Package Manager

chocolatey I’m a huge Linux guy. Ever since I’ve discovered it, I’ve also dual-booted my machine, no matter what. One of the best parts of Linux (or at least Ubuntu) is the package manager. Ubuntu uses apt but there’s also YUM for Fedora and CentOS (correct me if I’m wrong!).

When I used to work on a Windows machine full time, I immediately jumped on the band-wagon of using Chocolatey. And now that I’m back, I found it better than ever. Chocolatey is similar to Homebrew for mac and all the other package managers. It installs all kinds of software for you. Even the likes of Atom, Node, Ruby, and VIM. It works from the command line but there is also an installable GUI (because Windows users just love GUIs) which is pictured above.

Despite the package manager, remember that there is no shame in using precompiled binaries.

Figure out how to run the obviously difficult

Windows is made to run Windows software. That’s why it’s always difficult to run stuff on it that’s meant for *Nix servers. Ruby and Node are among those. Ruby is notoriously terrible for Windows. It’s slow, a ton of gems aren’t supported and if you can’t run something, devs won’t try to fix it for you. Luckily, there are alternatives. One of them (for Ruby) is JRuby which is a Ruby implementation which runs on the JVM. It is on average relative faster than the Ruby binary for Windows. Luckily, many of the major gems out there test against JRuby in TravisCI which makes them safe for you to use.

Node runs pretty well as well; however, watch out for plugins that access the system itself. For instance, if a node module runs any commands in the terminal, it’ll most likely fail. There are also some strange quirks with the Windows filesystem. Native Node will work fine but node modules may be tricky. Luckily, Node seems to be well supported on Windows. There are tons of Node devs ON Windows, and you’ll find yourself finding way more .Net developers playing with Node than you’d think.

Anyways, since we have access to Node and global node modules, we can use tools like Bower, NPM, Yo and whatever else we want. Worried about any other languages? Both Python and PHP have first-class support.

Shed the “my tool can’t be replaced” mentality

With Macs especially, comes this thinking that the tool you use every day today cannot be replaced. You have your mail apps, and even design apps and what have you. Obviously, some specific tools can’t be fully replaced but keep an open mind to alternatives.

For instance, when I switched to Windows, I missed my mail app. I discovered Thunderbird and was much happier with it. I tend to use cross-platform tools though so I can’t say I have much to say here. If you’re a designer, you’ll be happy to know that, obviously, the entire Creative Suite works just as well on Windows (if not better). If you’re a coder that doesn’t use VIM, Sublime Text is just as much of a beast and you won’t need a new license key.

If you use Skitch to take annotated screenshots, it’s on here too. And so are a million other cross-platform tools. Cross-platform tools are usually a good bet if you like switching environments (like I do).

How is it so far?

Everything’s working for me well. I’ve been predominantly windows-based but in the past year I’ve worked with Mac OSX and some heavy command-line tools. I was worried that the terminal-based toolset would be difficult to use on Windows since Windows development has such a different workflow. However, I’ve found that I can pretty much keep up with everything I’m used to without a problem.