+1 as well. I was once asked for computational science what program I used as a lab notebook. People looked surprised when I said I used an actual lab notebook.
+1 for the book "The New Turing Omnibus". Not very well known (it seems to me), but it has lots of interesting stuff. Perfect for little exploratory programming projects.
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.
Presumably because the person who posted the link to the blog post was not the person who wrote the blog post, and did not want to be getting Ask Hacker News style questions directed at him in response.
I am really surprised the vim plugin for visual studio is not on his shortlist. It makes vs nice to work in for those of us who can't stand modeless editors.
The submitter wasn't interviewed by Fog Creek, but the author of the post was. When reproducing their headline the submitter quoted "I" because they didn't do the thing the title said.
That's a weird convention. Typically I assume that submitter is not the author. If disambiguation is necessary then quoting the entire sentence is clearer.
Shouldn't the whole headline be quoted then? This makes it sound very weird, almost like Fog Creek claimed they interviewed him, but actually interviewed someone else.
I feel this is a problem with not letting submitters choose descriptive titles. "Peteris Krumins interviewed by Fog Creek" would be more informative...
I'm not sure which edit you mean at this point, but the current title seems ok, since it's the author speaking, and most of the time the submitter isn't the author.
I'm always amazed when I hear a developer state that they use Windows by choice. Frankly it makes me look down upon them - no matter how successful they are (and this fellow is clearly very successful). I have to use Windows at work every day, and every day it will make me howl in frustration. How do people cope without a decent terminal?
You are making a very generic statement by saying "developer state that they use Windows by choice". If you read the entire post, he clearly says that he uses a dual environment of Windows/Linux. He uses Visual Studio which is certainly one of the best IDEs and right now, it only works on windows. So it is not like he is only using windows but he is using what works best for him. He also uses Vim as he clearly explained. Isn't that the point for developers that they use the tools they are most comfortable with ?
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.
> 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
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.
"He uses Visual Studio which is certainly one of the best IDEs"
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.
One example, if you are using Azure, it makes it very easy to deploy from VS. But again, this is an option and not a requirement. You are fee to deploy however you please.
Just because it's easy, doesn't mean you should. It's a bad habit to get into.
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!".
I will give you a perspective of someone who has used Linux on my main desktop since 1997, but I do keep up to date with other platforms:
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.
I deploy the old version to new virtual machines and reconfigure the loadbalancer to direct traffic to those instances. Or I do a rolling downgrade, one machine at a time and excludes machines being downgraded in the LB. This takes a minute or so (everything is automated) and there is no downtime.
I guess I'm an equal opportunity howler: I howl in frustration at Android, at Ubuntu, at iOS, at Windows, at OSX... Sometimes I wonder if—gasp!—all of 'em are imperfect and I should just find something that suits me well enough and be done with it.
I used to be of this opinion, but then I ended up working in a .Net startup and, a few years later, did a project in ASP MVC.
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...:)
Maybe the problem isn't the Windows OS (which is quite fine actually, especially compared to the hot mess OSX has turned into), but the development approach, tooling and processes that was forced upon you.
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.
> but the development approach, tooling and processes that was forced upon you.
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.
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".
It has been stated here, most of the developers who are working heavily in Windows environment (myself included) use ConEmu. There are tools out there that do make Windows a productive environment.
Windows does suffer from short-comings but do not tell me OS X or Linux do not.
ConEmu doesn't solve the problem, as it's still using the Windows cmd.exe. Someone who's used to a UNIX terminal is likely used to something like bash or zsh. ConEmu doesn't give them that.
ConEmu has a tab for Powershell, and powershell does provide enough power to do scripting. If you are Unix developer, do not expect a one-to-one mapping on windows side. Treat using different OS like visiting a new country. There are many things similar but something subtly and some things starkly different.
I know a lot of really good developers who work mainly in the windows platform. While I personally find working in windows like working with 1 1/2 hands tied behind my back they have built up just as large a toolset as I have in unix based systems. Most of them are just as effective as I am they just have a different toolbox. If I wished to I could build up just as large a toolbox on a windows platforms. I just don't want to at this time in my life.
and that equally goes from our (Windows devs) perspective. It's hard to find the time to research and learn the toolset of another environment. Both environments have their advantages and disadvantages. If you have a hacker mindset that doesn't mind negotiating the perils of configuration files and the command line, perhaps Linux is the better choice. If however you prefer to spend more time just getting stuff done... ;)
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.
As someone who leaps in and out of both Operating Systems on a daily basis, it really isn't that difficult.
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 think balabaster's point still stands, and your points (though good) only serve to illustrate. also, its important to keep in mind that not everyone is as good at switching. this could be because only some people have the time and inclination to do what balabaster suggested and dig in and learn the ins and outs of both systems, after which its "really isn't that difficult".
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.
Are you recommending Resharper for navigation, auto-fixes, auto-styling, or something else? I hear Resharper thrown around a lot but it isn't clear what people find it so invaluable for exactly.
Navigation is my favorite. There are lot's of actions I use daily, such as surround with, splitting declaration and assignment, inserting new class/interface/enum etc, removing dead code or imports and so on.
I can't sit in front of a "stock" VS and code right away. I always feel incomplete and non-productive without it.
There is also a contingent of developers that don't like Resharper at all. I'm in that group because I think it's bloated and slow with the 10,000 features that it adds to Visual Studio.
There are individual extensions for all of the things that I personally want from Resharper, so I tend to go with those.
There are a lot of things that you can do in a terminal that you can't in an IDE. Terminal gives you way more flexibility. Try using a GUI for git and then the terminal version. Can't be compared. The downside is it might not be as intuitive and might be slower than the GUI version for the most important things. I still disagree with the original poster, who judges someone by the OS they use instead of the code they write.
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?
> Anyway, the terminal version of git runs just fine on Windows, so... why not have both?
That's exactly my point: that each of them offers different features and both are complementary :)
Programming an IDE plugin is far more difficult than a sed or awk script with a much higher development start up cost.
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.
>> 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.
Renaming a java variable or permuting arguments in IntelliJ is far easier than trying to do the same thing with grep/sed. IntelliJ happens to work with both Windows and Linux, but I've found that I'm certainly more effective programming Java in an IDE than without.
If all you have to do is Java then absolutely. I hop into IDE's all the time for refactoring work VS or Monodevelop for C# IntelliJ for java and so on. But I work with much more than just java and C#.
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.
I'm not saying a shell isn't useful. I don't use an IDE for any of my git workflow (I actually find git to be poor on Windows, which is a good reason to choose Linux); but for navigating the code.
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.
90% of the stuff I need to do are minor changes that don't need the nuance that requires a full Syntax tree. The other 10% I fire up an IDE for and make the change.
For vim and C++ I recommend YouCompleteMe[0]. It gets a lot of it right.
> I have to use Windows at work every day, and every day it will make me howl in frustration. How do people cope without a decent terminal?
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).
You raise a good point, but for me it only solidifies the fact that it is a view point born from inexperience or narrow experience. If you only have a bunch of .NET experience, or if you only have a bunch of Node experience, it isn't surprising when you judge others poorly when they don't like the sane OS as you do. Age and more experience will cure that.
PowerShell came out missing a lot of obvious commands it's gradually been filling in but the core concept is pretty good. It's easy to write a bunch of scripts and feel like it's just normal to waste a lot of time munging text but PowerShell kind of frees you from that.
I have the same prejudice - and yes, I'll freely admit it is a prejudice.
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.]
My problem with development on windows hasn't been the OS itself, but the fact that companies that prescribe an OS for your development also tend to prescribe a set of tools, an IDE, a browser type + version, have the configuration of your PC locked down, and the corporate virus scanner dialed up to 11.
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.
I feel you, but I used to have to use Windows for work (for no reason in particular other than my boss was a dick). PowerShell + https://chocolatey.org/ is a great way to go. It made working in Windows quite enjoyable and now I use Windows at home.
I use linux every day but I would not berate another programmer their tools. They should use what works best for them. And Putty is a half decent terminal so if that's your reason for not using windows you can switch tomorrow.
I tend to agree with you (even though I can barely read your comment :)). I haven't used Windows for years and I'd rather not to if given the choice. However, I find it very respectable to be comfortable with different platform and to be able to use the best tools on each of them. It also shows open-mindness not to be stuck into religion wars.
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).
This is a dumb attitude. Windows is not much worse than other OSes for dev. At worst, you can easily virtualize. And it is much better for daily life than Linux, so if you aren't willing to pay the Apple premium, Windows is your likely OS of choice.
He does stuff on the server? In the part where he mentions using windows, he says he uses SSH into a server. Windows might be bad, but is it too bad to host a text terminal client?
You're only saying that because you're a bigot: A person who is intolerant toward those holding different opinions.
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.