I was interviewed by Fog Creek
catonmat.net
catonmat.net
Deleted comment
If the poster actually wanted to avoid that ambiguity, a better title would be "I was interviewed by the Fog Creek blog," or "Peteris Krumins' interview on the Fog Creek blog"
My first impression of the title was that somebody interviewed for a job at Fog Creek, but the process was so impersonal that he or she had to put "I" in quotes.
I am not a Windows fanboy of course. I know Linux works really well for dev environments but if you prefer to use an IDE for development and not just a simple editor, then I would argue that it is hard to beat Visual Studio. Sure you can program even in notepad. Again, a choice. CLI is not always the answer. But then again, Windows does have Powershell which has evolved well.
I will give you one example. If you are building ASP.NET MVC applications, you really don't have a better choice than Windows as you can integrate it really well within Visual Studio, link with Git and pretty much do everything within VS including deployment. It just works. So there are uses cases like these where Windows makes sense.
Depends on the language. VS is the best for C++ and .NET, sure, but not everyone writes C++ or .NET. For example, all the best Java IDEs are cross-platform.
Depends on what you're doing. .NET? Of course. Java, Python, C++, Ruby, etc? Not really.
"If you are building ASP.NET MVC applications, you really don't have a better choice than Windows"
That's like saying if I'm building iOS apps, I don't really have a better choice than OS X. Yes, it's technically possible to do both on other platforms, but in reality, it doesn't happen that often.
Admittedly, there's still no good deploy solution for C# at the moment that isn't a colossal load of work, but web deploy is definitely not a good choice. It's like MS looked at every single choice and went "Hmm, we'll pick the worst of these two options!".
Good luck if you need to do a rollback stat.
VS + C# + Azure integration is excellent, and there is nothing which prohibits turning up a 2nd instance any more so than using AWS, Docker, Chef or whatever your choice may be.
I am also not convinced Visual Studio is a bad habit, as it has many features and tools which are often superior to open source alternatives (debugging, integration, intellisense). I currently use Vim + Golang and Emacs + Clojure; comparatively those environments do not make me biased enough to say VS does not have some incredible upsides.
My assumption is that most people may not have spent enough time with the Windows tools to judge them fairly as we have all been tremendously productive on Linux and there are ideological issues spawned out of the decades of Windows dominance which slant these discussions.
Is it alright for your site to go down for minutes?
I use a CLI for about 10% of my work, and that's all PowerShell, which works very well for what I want it to.
But the vast majority of my work is inside either text editors or IDEs.
Once I figured out Visual Studio, it got the hell out of my way and just let me work. It is really one hell of an IDE and, I'll be honest, I miss it sometimes. Windows itself needs quite a bit of tweaking to be used as a serious development box, but armed with some patience and good paht thai, it wasn't even the most horrible experience. Of course, we often had Ste. Ambroise Oatmeal stout in the fridge, so I may have been feeling bulletproof...:)
Of course, I'm in my late thirties and remember building awful websites with Windows ME. I may not have an opinion, I just may be a sadist...:)
Personally, i couldn't care less where my VMs are running. I SSH into them and do my work, using the tools i know are best for the job. I develop locally using VMs managed by Vagrant, i deploy to AWS or DO. If i feel like it, i can switch from Ubuntu, to Windows, to OSX and my dev env will be there waiting for me.
How do people cope without a decent dev mindset?
PS You should look into ConEmu, which is what all the Windows devs use.
As opposed to the ones you're trying to force on people?
A lot of people, yourself included, aren't even able to quantify why Windows is inherently bad. I can think of a few reasons, but I am not here to help you since I am not randomly criticising developers based on platform, you are.
> How do people cope without a decent dev mindset?
This is meaningless in and of itself. You will need to expand on it. Your entire post reads like "unless you're developing MY way you're wrong."
I find these rants about "use SSH and VIM!!!" pretty funny given Sublime Text's popularity on Linux as well as things like Eclipse. Do those work over SSH? No? Guess those Linux developers are as bad as Windows developers in your view, right?
In fact, i stated the exact opposite: there is nothing inherently bad about Windows. I run Windows myself as the host OS, using ConEmu to wrap PowerShell.
I am not dogmatic. I use vim when it makes sense, Sublime for what makes sense, and a full-blown IDE, you guessed it, for when the strengths of an IDE are useful. Yes, i am using these across operating systems just fine.
I am versatile. I can use OSX, Linux and Windows to develop code, as i've abstracted away the development environment, and decoupled it from the machine and OS i am typing the code on.
And that is the decent dev mindest.
I am not trying to force anything down your throat, and it surprises me that you would think that.
The same way you do on a mac! You are using a virtual machine to mimic your production environment, right?
I have Win8 desktop and MBPr laptop and develop on both about 70/30. Brew is nice and all (tho has made me howl in frustration numerous times) but I want stuff running on the exact same software as what I deploy.
Between work and pleasure I use a mix of PHP, Ruby, Java, Node, and Python (well and Haskell.. hello coworker! /wave). Not that I actively develop in all of those but will use other programs written in them and sometimes modify the source. CLI on mac is better than cygwin on PC, but I have had hiccups with both getting the right packages/libraries installed. OSX is far from the holy land imo.
I never have a hair pulling event on Ubuntu installing things, sadly I am too frustrated with the NON-CLI parts of Ubuntu to make it my primary OS.
I have all of those languages installed "natively" (ie not through cygwin) on Windows so linting works in Intellij. For SPAs I can use bower,grunt,gulp,livereload etc in cygwin just as easily as OSX. I've not tried installing Haskell on windows, I run that in my VM exclusively.
Right now my biggest gripe is Ansible is a b to get working in windows, but it can work. Hopefully the "run ansible on host" PR gets merged soon into Vagrant.
Assuming you have a production environment, and that said environment is running a full OS. Not everyone is a web or mobile developer.
In my first position, where I was the EE, the software development was done with a combination of an emulator, a VAX build system[1], and live hardware via JTAG.
In my second position I was doing signal processing algorithm R&D, so there was no production system at all.
In my third position I was implementing stuff from the second position and other sources. Our software was (supposedly) platform-agnostic, so we did our development in RHEL and ran on various platforms with various flavors of Linux. There we had examples of real hardware, but had not constructed a full-example production system when I left. All the Linux installs on target hardware were heavily stripped down and configured for real-time operation, though, so we couldn't actually do development on them.
Now I'm doing a combination of R&D, packaged software, and bespoke software for NLP where our customers can run (theoretically) on whatever systems they want. I develop in Ubuntu LTS and test occasionally in a Windows 7 VM. Our customers so far run our software on various flavors of Windows, RHEL, or Ubuntu VMs that we package for them. We don't really have a defined "production system".
[1] This was in 1993, well before I came along
But my Mac has a decent terminal.
OSX has a decent terminal. Windows has not.
Windows does suffer from short-comings but do not tell me OS X or Linux do not.
I work with some talented C# developers but I'm always thinking in the back of my mind : "what compels you to only develop for windows?".
In all seriousness though, having attempted to learn Linux on a number of occasions, trying to make the leap from one O/S to another isn't a cakewalk. They're structured differently, operate differently, configured differently, have different UI paradigms - it takes a big mental effort and a bunch of time few of us have to spare to cross that chasm. If you grew up in a Windows environment, it's not hard to see why you'd think Linux sucks. But equally, I find it hard to argue with the reasons Linux die-hards complain about Windows - given their lack of experience and/or patience with the Windows toolset.
The thing you have to watch out for is how well your tech stack is supported. If I know I'm supporting Windows I will not write the software in Ruby as their Windows support is atrocious (honestly Python isn't much better imo, but I have less personal experience with it).
If I'm developing .Net/C# I'll use Windows for Visual Studio, even if I"m supporting Mono because the environment is just better.
If I'm working on a PHP project I'll do it Linux even if it's meant to run on Windows because, again, the environment there is just better for the development.
It isn't about the OS itself. There is some friction there in terms of familiarity with editors, etc, but most of the friction is about the technology you're using.
i've worked in both (Win/Nix) on a daily basis for a while doing dev in perl. as long as i was active in both switching wasn't hard, though i found myself feeling out of water in nix whenever i ventured outside the boundaries i was used to. i'd run into a situation and just not know where to even start looking in nix for a problem, whereas in windows i could usually guess at the right place to start investigating.
also, the transition and learning was made easier because i had really smart and helpful people right next to me to answer my questions.
I had the same problem with Mac/Win when doing photo/video editing. I could get around in a mac fine, but found certain ui and organisational decisions frustrating.
I can't sit in front of a "stock" VS and code right away. I always feel incomplete and non-productive without it.
There are individual extensions for all of the things that I personally want from Resharper, so I tend to go with those.
I think you underestimate the number of developers who basically use IDE plugins to do everything.
True. The terminal version can't give me a graphical view that displays the commit timeline for a file, color coded by contributor and weighted by commit size, with simple mouse-hover annotation to show me the commit message, and a single click to take me to the related diff, colored to visualize code age and authorship, with hyperlinks to related code files.
(* features may not exist in any actual git client, I'm actually describing an SVN browser I once helped write that was never made available publicly)
Anyway, the terminal version of git runs just fine on Windows, so... why not have both?
You can do a whole lot with an IDE but saying it has the same amount of power as a good unix shell is somewhat disingenuous. If you want to be able to extend your coding environment in an infinite number of arbitrary ways then a shell beats an IDE every time.
Blanket statements like that generally serve to underscore either a lack of experience, or lack of willingness to accept other viewpoints. Simply prefixing it with "in my opinion" lessens that effect to great degree.
Shell utilities that work with plain text can deal with a whole lot more than java. Claiming that an IDE occupies the same place as a shell in a developers toolbox misses a lot of the reason why shells are useful.
Shell utilities that deal with plain text often get the nuance wrong, because they don't have the full syntax tree to deal with. Mostly you're using regular expressions; which often get you close but not quite right. For navigation, people often would use cscope/ctags something else anyway; and text searching often isn't as good as a semantically aware find.
I don't use an IDE beyond vim for my C++ work; but am considering clion. So far I'm not entirely convinced, it doesn't handle some of the more complex C++ constructs correctly.
For vim and C++ I recommend YouCompleteMe[0]. It gets a lot of it right.
You should probably stop torturing yourself and install Cygwin + mintty (or kitty/puttycyg). Never had any major issues with Windows and the CLI after discovering it. Anything it can't do, I launch Powershell, but that's mostly things Cygwin can't do easily (like working with Windows/.net objects).
I'm not a big Windows user, but PowerShell came out in 2006 and has made a lot of big strides since.
Powershell is a shell, not a terminal. The terminal still sucks and ISE is a poor substitute.
But it is also based on observation. "Windows-only" developers tend to be too narrow-minded and many will have never heard of a lot of stuff that I take for granted. Stuff like Vagrant, Docker, Puppet, even a 'grep'. You get a blank stare whenever something that's not from Microsoft gets mentioned.
Given the difficulty that it is to install a lot of things under Windows, that's understandable. The other day I was having trouble installing Jupyter (formely iPython), which is trivial to install on Linux or OSX. Managed to, but only because I am stubborn. Firing a VM would have taken less time.
Not everyone is like that of course. You'll see that Notch uses Windows, even if he develops with Java and Eclipse. But he develops games (or used to anyway) and Windows is hard to beat in this case.
If I hear that the guy actually prefers Windows, during a job interview, you can be sure that I'll ask a whole bunch of additional questions to see how aware of the outside world the guy is. I could be turning down Notch, or Jeff Atwood.
So far, I don't think I have.
[edit: just noticed that I've used 'guy' here a lot, my mistake. Please replace by whatever genderless word feels more appropriate.]
I can't work on a workstation where I can't choose that editor I'm so used to that I don't have to think about 'how', only about 'what'. I can't stand the latency caused by having the virus scanner run on access, create, change and write of every file, which makes an incremental build laggy and a full build impractically slow. I can't stand working on a workstation where I only have write access to c:\temp and a network drive, complete with more latency and flakiness.
My current employer lets us choose, but the admin told me if it's something other than Windows, Linux or OSX, don't expect support from us.
Try cmder (http://gooseberrycreative.com/cmder/).
Some of the features: tabs, most Unix commands available, git integration and the default font and color theme are very good.
It reminds me of a colleague of mine who was an OS researcher. He was hacking the linux kernel all day long but still wrote his PhD dissertation using Words (when everybody else in the community was using Latex).
If you ever feel bad about being a bigot - don't - because whether you realize it or not, people generally look down upon bigots, so you've already been getting back what you've been putting out.