michael_teter
Windows and Linux co-development
Can some of you folks who use Windows for development suggest some guides on workflow?
For example, regarding WSL (Bash on Windows), I’ve read stern warnings against modifying any WSL files from Windows. So that means I’m not supposed to use Windows Atom editor to edit files that exist in my WSL folders. However, it seems that trying to have my Git project in my Windows folders screws up all the permissions (creating a Git war with my Mac, since each side sees the permissions changing on all files).
Do any of you do your development purely in Windows, without WSL? (Git, iex, PostgreSQL!?, etc.)? If so, do you also have to do the Putty stuff to try to get working ssh keys?
I’m finding this quite a challenge moving from Mac to Windows for development… recipes for success would be very helpful 
Most Liked
dimitarvp
I’d like to chime in with some more contemporary info. Bare in mind this is a mix of facts and opinions. Also, it’s huge.
Linux
Laptop scene is tragic and always has been. Even specialized Dell XPS laptops that come pre-installed with special Ubuntu builds have several repeating complaints regularly on Reddit and HN (has been the case for like 2 years now) – mostly failing to sleep when closing the lid, drivers crashing after reopening the lid, random WiFi stops and restarts, static noises from the speakers, Bluetooth being flaky, font rendering problems with several displays with differing DPI…
Many Linux devs are purists, don’t care about media and don’t mind these complaints much – however many younger devs come from MacBooks or Windows desktop machines and are unable to tolerate the problems. I’ve read about such painful transitions just 2 days ago on HN… things sadly haven’t improved at all. Even the highly acclaimed Librem laptops suffer from several pretty blatant UX and hardware issues like those pointed above.
If you want to develop on Linux, better get a desktop PC or use one of the very few laptops that are known to have zero issues with Linux – mostly Thinkpads. Some people report no issues while using some of Lenovo’s Yoga laptops and 2-in-1 devices as well. The Yoga machines are pretty cute and relatively strong laptops, I will give them that.
TL;DR: do a very detailed research if you want to use Linux on a laptop. There are very few laptops that come without issues. For desktop machines however you can practically install Linux on everything and use it very efficiently.
Windows 10
Avoid WSL. It works but it comes with a baggage of WTF issues and is significantly slower than a native Windows installation of Elixir. WSL however gives you the advantage of being able to compile any C bindings without an effort. Admittedly, the WTF issues I read about a year ago are being addressed one by one and things are improving in terms of stability and Linux feature parity. 50/50 though, depends what you need.
Using a native Elixir installation: well, good luck if any of your dependencies need to compile a native library! Outside of that I had no problems, Elixir is very fast on Windows 10. I never felt it being slower compared to a MacBook or native Linux.
As for general usability, I might get some flak for this opinion but Windows is just fine. It’s not as polished or beautiful as macOS but it remains very usable and robust. Only had 1 blue screen for 3 years of usage and it was related to a random failure in the RAM that never happened again. Also, while DPI management on multiple monitors is sometimes aggravating – namely tiny text on the laptop screen if you use higher DPI to get the most of your external 4k monitor – for the most multi-monitor setups Windows 10 is absolutely viable.
TL;DR: Avoid Windows 10 if you need to compile native libraries for your work often. While installing and using Visual Studio’s compiler stack takes no more than an hour (10 minutes for me), you will inevitably fall victim to WTF compiler errors at some point. While using gcc under the MINGW sub-platform might work better, I had problems with it in the past as well.
macOS
Another not very popular opinion, it seems: Macs are very close to the ideal programming machines if you are prepared to delve into XCode’s peculiarities; however those are much less than Visual Studio’s WTFs. Getting to know XCode’s environment is mostly a one-time investment and then you can compile whatever with barely any issues. (There are always exceptions but I’ve coded in 7 programming languages on my MBP 2015 and they had all sorts of native bindings and never had problems compiling whatever they needed. Not saying there are no problems at all with macOS’ compilation stack. I’ve heard about a good number of them – but for most of programming I don’t think you can expect issues unless you do very exotic things.)
MacBooks work flawlessly for me, and I have two. Save for the once-a-year lockups or random screen corruptions that get fixed by a reboot (or fix themselves a minute later), they are perfect. Image quality and text legibility are unparalleled. My eyes are less tired after reading on my 15" MBP compared to my gaming 35" monitor that works on 144Hz. Go figure but apparently Apple knows how to do displays.
Many bemoan the “lack of package manager” which is only true if you count Apple-provided ones (which are zero except for the App Store); brew however is alive and well, and works just fine. Never had it install faulty software on both of my MacBooks.
Big drawback however might be that if you want to work on a desk for hours on end and preserve image quality and text legibility you should pay the hefty price for an external Apple-certified monitor… I found it hard to work more than 4 hours on a 15" laptop screen, sadly. Even with the superior displays of the MacBooks that are easier on the eyes, I get tired quicker overall if I stare at the smaller screen for longer periods of time… 
TL;DR: In my opinion macOS is the best candidate for a laptop programming machine right now. There is some time investment to make sure things compile without a hitch but I found it small and non-distracting, and never had to actually fight the OS (unlike Windows where I have been putting whole weekends without result).
Closing thoughts
If you will work on a desk in a company office or home office, you better work on a desktop machine. You will have access to bigger displays and can buy whatever mouse and keyboard you fancy – these 3 factors are very important when you spend a lot of time working stationary! So in this regard using Linux or Windows 10 with Linux VMs is just fine – I spend 2/3 of my work on my Win10 PC with Linux VMs and never had an issue. Recently ditched Debian for Manjaro and was never happier with a Linux distro. A Windows 10 laptop I can only 50% recommend; many work just fine but many also don’t. Battery life is inferior to MacBooks; average battery life is 4 hours (which is admittedly not a problem for many; Dell XPS and Lenovo Yoga have been known to be close to MacBooks battery life btw).
HOWEVER, if you really really want to use a laptop, don’t settle for anything else but a MacBook Pro. If the display size is a not a problem for you, at least invest in a good laptop stand and external keyboard and mouse – makes the longer work sessions much better when you are on a desk. If you don’t use an external display, most MBPs can go 6 to 8 hours on battery depending on load.
Don’t think for a second that Windows 10 or Linux experience on laptops is optimal. I and many others have tried and tried and then tried some more for years on end – things are barely improving.
In conclusion: don’t make compromises with your work machine. You might think laptop speakers that produce static noise aren’t a problem now but 2 short weeks down the road you will think otherwise.
Sorry for huge post, hope that helps someone. And always take these with a grain of salt. I cite things that are widely regarded as true in rather big communities, however many people still get by just fine with Linux or Windows laptops. Do your own research!
michael_teter
Given my need to use Adobe Premiere and Illustrator, it’s Windows or Mac for me. But in terms of basic usability, I’m shocked at poor Windows is compared to my Mac.
For example, this old rMBP 15 will drive three large monitors in addition to its screen. But when I try to run just one 4k monitor on my new XPS 15 (with better Nvidia GPU), I get laggy external display, and limited to 30Hz refresh.
With Windows, I can’t have Docker and Virtualbox. I have to use a 3rd party program to manage my ssh keys!? (And it doesn’t integrate easily with everything.) Outlook 2016 on Mac has unified inbox, which is good since I have 8 different accounts I need to check. Outlook 2016 on Windows doesn’t have that feature, and the party line on the official windows forum is that the feature is only possible for POP3 accounts (which is obviously not true). I have a much longer list than this… these are just the ones I can think of off the top of my head.
Meanwhile, Apple won’t let me have their fastest laptop with an ESC key. Or > 16GB RAM. But now my complaints about my Mac seem insignificant.
Azolo
Use the Windows 10 Mail Client, I think it’s better anyway. There are really not that many times I need to get into to outlook to do anything anymore.
This is because Docker works with Windows Server containers as well. I haven’t downloaded the new Docker that supposedly does this out of the box, but it runs on Hyper-V not VirtualBox. You can probably make it so that it uses VirtualBox instead of Hyper-V, but if you haven’t tried Hyper-V you should. I like it better than VirtualBox most of the time.
Like I mentioned in the other post, I use the ssh stuff that ships with msysgit, though now I think it’s just called Git for Windows. It ships with all the ssh stuff you need, just create a .ssh folder in your User Profile/Home directory.
These aliases are what are in my PowerShell Profile. Use Write-Host $PROFILE to find it’s location
set-alias ssh-agent "C:\Program Files\Git\usr\bin\ssh-agent.exe"
set-alias ssh-add "C:\Program Files\Git\usr\bin\ssh-add.exe"
set-alias ssh "C:\Program Files\Git\usr\bin\ssh-add.exe"
It also comes with ssh-keygen, but I only used a couple of times and was too lazy to create an alias.
Though I haven’t used ssh in awhile, and I think that I had it starting the agent and adding my key in my profile. When I stopped needing to SSH, I just took those lines out.
The only other thing is NIFs, you will need a compiler of some sort. I think that there is an Elixir package that uses Visual Studio automatically though? Either way I hate having a compiler in my path. But I have msys2 and mingw on my machine, and have a function that will add it to my path for when I do need it.







