Windows to Mac to Windows to Mac to... Linux? It doesn't matter.
37signals.com
37signals.com
All you need these days to build great things is a
browser, a text editor, and the programming language
or tool of your choice.
Even when developing web apps there's sometimes need to use a network traffic analyzer, a debugger... Not to mention a plethora of tools for reading/analyzing/parsing log files, graphing benchmark results, generating test SSL certificates and a lot of other things that are not equally available on all platforms.And there's another consideration: if you're deploying your software on Linux it's just plain easier to develop it on Linux as well.
The problem with your critique is that you're thinking at the wrong level of abstraction. If (and, yes, this is a big if) you are developing a web app on a platform where all of the low-level concerns are taken care of for you, then the final point is completely valid. I'd even go so far as to strike the text editor from that list. Already today, you could (in theory) develop a Rails or Node app in Cloud9, store the code on Github, and deploy to Heroku with little more than a ChromeBook.
Ok, we're not quite there yet, but I hope you get my point... That said, there are still chip designers, kernel programmers, and driver developers. And there will always be "backend engineers" (though I think we need a better term) who need debuggers, benchmark utilities, packet analyzers, etc.
Sure, there was that guy that used an iPad, a wireless keyboard and a Linode as his PC so it's viable. But I think that's an exceptional case and it's more common to need quite a lot of supporting tools to develop things.
And of course, you know, our designer can work with just a notebook (as in: a paper notebook) :)
It's honestly not perfect, but for C++ and Lua it's unequaled in getting references and autocompletion correct.
And since I also have a Windows target, I can take full advantage of the very clean debugger that Microsoft Developer Studio provides (for the cross-platform code). I spent a year with Linux on my desktop, trying every debugger tool available, and nothing comes close to working as well.
Yes, I've tried vim and emacs. I even use vim when I need to edit over an ssh link to a server. And I could imagine getting my fingers used to the many-more keys I'd need to hit to do everything I do in SlickEdit in vim, but vim is STILL is missing two of the most important features I use (the cross-referencing/smart completion I mentioned above, and an auto-completion from the same file that I get by hitting shift-ctrl-< or ->). The features vim does support require more keys -- and keeping track of editing "modes", which is something else I don't want to have to do. And since I can write code much faster using those features (and fewer keypresses), I can't imagine switching.
I used SlickEdit on Linux for the year I was there, but it's based on X, and doesn't integrate with modern desktops as well as a result. It even has a built-in gdb wrapper, but unfortunately it can't do as much as Developer Studio on Windows. :(
It's pretty well established that forcing a user to keep track of mode is just bad UI design. I actually use vi relatively frequently, to the point of having internalized the mode concept, and I STILL occasionally make mistakes. If you've got vi in six different shells, how CAN you remember what mode they're all in? You can't. You need to look. Which interrupts the flow of development, at least for me.
And I can't forgive the extra characters you need to type to do just about anything. I was just using gvim on Linux, for example, and to paste from the system clipboard took 4? 5? character presses. You simply can't defend that as reasonable.
For serious development I would NEVER switch to vim/gvim, at least without some major keyboard remapping to, well, the defaults that you'd find in any modern editor. It's more than getting used to it--more keys means slower development, period.
Just now I was able to select the previous sentence with about 3 keypresses. Copy and paste would be a standard ctrl-c/ctrl-v. No worrying about mode, or counting characters -- and I'm in the edit window in Chrome. It shouldn't take me more characters and a completely different set of finger reflexes to do the same thing in my programming editor.
Just now I was able to select the previous sentence with about 3 keypresses. Copy and paste would be a standard ctrl-c/ctrl-v. No worrying about mode, or counting characters
j-V-p = 4 which is a lot less than 3+2+2 of what you described. So your point about vim requiring more keypresses seems moot.Second, I hit Shift-Up-Ctrl-Left-(Release Shift)-C. I wasn't selecting the LINE, I was selecting the sentence, which ended in the middle of the line. And the keys are all grouped usefully AND ergonomically. Between the arrows, shift, control, home, and end, I can select characters, words, lines, here to the start of line (or buffer), here to the end of line (or buffer), and throw in insert and delete and I can copy, cut, and paste, as well. All using keys that are standard to almost every app on Windows (and Linux, for that matter). When it's that easy, why would I also feel the need to train for a completely different set of key strokes?
I was giving as an example how MOST of my finger key memory works even when in Chrome, and the same is true of almost any Windows application I'm in. I don't need two vastly different sets of keyboard skills depending on whether I'm programming or writing on HN.
When I AM in SlickEdit, I can hit 'up' 'ctrl-c' to copy the previous line (copy is set up to copy the current line when no text is selected). If I want to select lines like you did in vi, I can hit ctrl-l. A square block, ctrl-b. The current code block, shift-ctrl-]. Everything nice and mnemonic, and automatically "visual". But most importantly, no modes to remember, manage, or otherwise distract me from coding.
You can argue all day that one key press plus or minus doesn't make much difference. But some key combinations are well designed from a user interface perspective, and some less so -- and regardless of the merits of the design, using the one that works everywhere that ISN'T vi means you're that productive everywhere.
Where vim/gvim really falls short for me (beyond anti-ergonomic key bindings) is that I really want it to be an IDE, not just an editor. I can ask SlickEdit to open a file by typing a few characters of its name and then selecting it from a list of all files in the project that match. I can tell it to build and end up with a list of errors that I can jump to. I can ask for symbol cross-references throughout a project and it will find them. Even if it's a symbol like "init" that's defined in a C++ template; it might find a few it's not sure about, but mostly it can figure out what classes derived from that template and show me just that list, ignoring other functions called "init".
vi can do SOME of these things, but in general only if you jump through a lot of hoops to get it all set up. The last time I tried to configure "tagging" so I could get references, though, it completely failed with respect to templated classes. Maybe it's better now, but back then it worked in SlickEdit and not in vi.
Eclipse, the world's most powerful and popular development environment for all popular languages and all popular OS platforms?
>> It's honestly not perfect, but for C++ and Lua it's unequaled in getting references and autocompletion correct.
Eclipse? Not sure if you can do Lua in it though.
>> And since I also have a Windows target, I can take full advantage of the very clean debugger that Microsoft Developer Studio provides (for the cross-platform code). I spent a year with Linux on my desktop, trying every debugger tool available, and nothing comes close to working as well.
Eclipse? Beats anything from Redmond easily is what I have found, since we are talking about how we have found these tools to work for us.
It has burned dozens of hours of productivity as it:
1. CHANGES the configuration of the project every time it loads. Seriously. I had to revert the project every time I ran Eclipse because it would break the configuration (which I originally set up IN Eclipse, so I don't know what was wrong here).
2. Fails to notice important files have changed outside of its knowledge (no auto-refresh). God forbid I change a file in git or in another (decent) editor.
3. Fails to refresh when I hit F5 (randomly the F5 key is or isn't assigned to refresh; I haven't figured out the pattern).
4. Gets stuck and won't build if there's an error it doesn't understand -- and you have to "delete the error" to get it to build. WTF?!
5. C++ support? Really? I tried the recommended plug-in, and despite looking everywhere that made sense, I was unable to figure out how to give it an include path. No one has been able to help me here, either. If it's configurable somewhere, then they sure made it hard to find. So all my "C++ integration" resulted in lots of undefined functions and includes, which was worthless. Needless to say, auto-complete was also worthless, since it couldn't find the definition of my shared_ptr class.
6. WAY too heavy. My favorite editor (SlickEdit) is already too heavy. Eclipse makes it seem light and nimble by comparison! Running the editor only takes about a MINUTE on my laptop, and it eats resources like mad.
7. Important project configuration details are hidden in opaque binary files, so you can't just check your project environment into source control.
8. Some kinds of paths end up being stored in the project as absolute paths, meaning that you can't use relative paths that would work in anyone's repository -- and you can't share those projects between Linux/Mac/Windows at all.
That's off the top of my head. I'm sure there are plenty of issues I'm not remembering.
I went into using Eclipse really, REALLY wanting to like it. It was everything I was looking for -- free, cross-platform, lots of plug-ins for different features, a huge supportive community. But I just can't like something that screws me at every turn, even if it can suggest ways to fix my Java code.
Some of these issues may be caused by a poorly written Android plug-in. I honestly don't know. But it's caused me hours of pain, and many other Android developers I've talked with have similar horror stories.
Using Eclipse to build for Android was almost completely non-deterministic, even when doing CLEAN builds; I gave up on using it to do my Android builds entirely, switching to the Android Ant build process. Which has its own issues...
And Eclipse doesn't support the in-file completion I'm talking about either, though without all the other problems I might have tried to hack something into place.
FYI, I just saw an announcement recently of a Lua plug-in for Eclipse that sounds great. Too bad Eclipse has sucked SO badly for me that I don't even want to try it. They're doing interesting things to try to guess autocompletions in Lua, which is a hard problem to get right.
Also FYI, SlickEdit doesn't come from Redmond. And Developer Studio has a WAY better debugging environment than Eclipse's, hands down, possibly in part because the underlying GDB doesn't support as many features.
If Eclipse works for you, great. The Android development team apparently uses it and likes it. Maybe you know how to use it much better than I, or maybe I'm used to better tools. We'll never know. I know some people still use Notepad or equivalent for coding, which strikes me as insane, and Eclipse is certainly better than that. But Eclipse tortured me daily while I was using it, and I can't imagine going back to it.
Wait till you try Emacs...
I did use Emacs for several years before moving on to something more ergonomic. I still have muscle memory for several of the more common keystrokes.
I haven't really felt like there's been a Truly Great editor available since Brief, which I stopped using because they never upgraded it from DOS to Windows.
It's not about "getting my head" around something. To the contrary, I am very good at picking up new software and using it, whether it's designed well or not.
It's about having seen what a REALLY powerful editor can do for you, and having other editors never really live up to that standard. SlickEdit is close, and even better in some ways than Brief was, but it's not perfect.
So did you actually understand what I wrote? "Stockholm Syndrome" applies when you've been abducted, and you fall in love with (and defend the actions of) your abductor. I'd say you're not disabusing me of my original notion.
I don't understand what "reliable builds" means in this context. I never had "unreliable builds" from Eclipse.
Also, what you call "holding your hand" actually is automating tedious manual labor re Java syntax, and continuous AST based syntax checking.
That --and build automation, is exactly what people want from an IDE. If you don't care for those, yeah, use anything else.
I find anything without actual AST-based syntax checking/autocomplete/navigation/refactoring as a dumb text editor, Emacs included.
Now, Eclipse has tons of problems, but that it got right.
It's sad that there is not a modern, GUI based, editor, with pluggable language support for multi-language use, using full AST power (regex highliting and ctags is so last century) while also being lean and mean...
I've said above, and I'll say again: With respect to helping you out with Java, it's really nice. It goes beyond what SlickEdit does, though SlickEdit does a few things for you.
ctags sucks; that's a given. SlickEdit goes beyond simple regex highlighting, but it's not completely AST-based syntax checking etc. Of course Eclipse only gets THAT right in Java, not the languages I actually care about (C++ and Lua).
Most of my coding these days is in Lua. Instead of having an editor write code for me because the syntax includes lots of tedious manual labor, the syntax itself is clean and I write fewer lines of code.
>It's sad that there is not a modern, GUI based, editor, with pluggable language support for multi-language use, using full AST power (regex highliting and ctags is so last century) while also being lean and mean...
Not sure if you're being ironic here, but I think it WOULD be possible. Almost certainly not if it's written in Java, however. You lose "lean and mean" the moment you start up the JVM, IMO.
Another thing I haven't tried is the SlickEdit plug-in for Eclipse:
https://www.slickedit.com/products/slickedit-core
Though since SlickEdit itself is heavy, I'm not sure that layering one heavy environment on top of another makes any sense. Maybe the plug-in isn't as heavy? Don't know.
Yes I have and I find Eclipse is awesome for Android development.
>> Have you ever changed a file outside of Eclipse? That's where the unreliability comes in.
Yes, I always turn on Auto-refresh in the Workspace settings. Works great, it should be on by default in all new workspaces I think.
:h new-omni-completion
:h compl-omni
:h compl-genericYou don't have to use the shell that comes preinstalled.
I think Linux is far better for developers. GTK, QT, wxWindows and all the python/ruby/you-name-it you want. Lots of open source software doesn't even work on osx. Keyboard shortcuts are everywhere. Best window management (i just love alt-right click). I wish they 'd stop it with the unity/kde plasma eyesore madness, and focused on basic things that ruin my experience such as printer support, multiple monitors / docking station, sleep and hibernate, not breaking my setup every time it updates etc; i 'm content with xfce.
I switched to Mac several years ago and any piece of software I've needed has worked, first using macports and now homebrew.
Lots of open source software doesn't even work on osx.
Failing to work out of the box (for whatever legal reasons) is very different from "doesn't even work". Finality was implied in your original post.Enthought has binary distributions for the various platforms for a long time.
1. Are you developing for web or desktop 1a. If web, then what server environment 1b. If desktop then what platform
2. What frameworks, languages, and other tools will you need and prefer
I think Linux and the Mac are on equal footing with what's better being purely a matter of personal preference while choosing Windows seems to only be the better choice when developing for Windows or IIS, .NET and Windows only things in general. Mac is great for GUI tools as an alternative to the command line while Linux is great for keyboard jockeys.
I don't agree that Linux needs to cut it out with the UI craziness. They're just trying to make themselves a viable alternative to Win/Mac for everyday users and I think they're doing well. I myself prefer xfce and OpenBox over Unity, GNOME, and KDE too so I just choose to run xfce instead while leaving everyone else to use whatever desktop they like. It's better for certain distros to use the shitty interfaces by default so that normal folks are included while the rest of us use our skill to run an alternative. Also, there's too much of this idea floating around that doing everything from the terminal is a badge of honor. It's cool that you can but it doesn't mean you should. GUI apps are great and there's no shame in using them. Bad programmers can use the terminal for everything just the same as good ones can use mostly GUI tools. I think there's a small minority of programmers who just learned how to get around in the terminal and start bashing all other OSes because they're optimized for the mouse. That's just silly. The best choice is the one that you can most easily set up a dev environment in, supports the tools your workflow demands, and offers the features your personal preference dictates. Choosing anything else is just blind loyalty to some ideal of a "best", "free-est", "coolest" platform "for good programmers only".
Regarding your last point: most users who use linux want to learn programming or are already developers. And slick is slick for a few hours after installation, but each special effect comes with bugs; what's the point of slick menu animations when your computer refuses to sleep, hangs up when you connect an external display and does not yet have a desktop search? They don't even have a shortcut for the terminal on the desktop anymore! And the #1 rule for me is that i should be able to get my job done as fast as possible without useless effects cluttering my workflow. I 'm up for honest computing, not for overpromising in UI and underdelivering in UX. [p.s. I 'm probably extremely biased today, as i spent most of the day trying to customize KDE to my needs , just to end up dumping it after many lost hours ]
The biggest exception is for anyone involved in graphics, front-end development, or often works with graphic designers. The lack of native installation of Photoshop and Illustrator wrecks it.
That's what largely spurred my decision to buy a Mac. There's only one OS that currently offers a Unix CLI with native Adobe Creative Suite installation. If Adobe ever offers native CS on Linux, I'll be Linux for life.
But a lot of the Linux machines you see in VFX shops are just headless render nodes. People doing the creative work often use Macs or PCs.
You'd have to get their Mac (or sometimes Windows) machine out of the special effects guys cold, dead, fingers.
That said, there are a few commercial offerings for 3D modeling work on Linux, but shockingly less than in Windows/Mac land.
Linux offers a LOT more customization than OSX or Windows, and after using it for a long time there's a lot of stuff I took for granted which isn't as easy to setup on OSX.
I'm still using OSX as my primary OS, but every once in a while I still come across stuff I can't easily do and think, "Gees, this was 10x easier in Linux."
I've spent the better part of my life, from age 6 onwards tinkering with computers, installing and reinstalling OSes and I can honestly, say I'm over it. Now I just want the damn thing to work like every other user. I think being burnt out on tinkering makes me a better developer though. At least as far as creating a good UX goes.
Don't get me started on what the WiFi switch does in Linux. (I could swear it sticks a random value in the CS and IP registers.)
Homebrew != apt-get or any other linux package manager.
If you're looking for a reason to dislike a project like homebrew, bring up that it's nowhere close to complete system management. There's huge parts of OS X that I have to have already installed through other means just to get it up and running, and plenty more that I simply cannot install through it. That's a lot more important than wether or not you have to wait for package compilation.
[1]"Homebrew != apt-get or any other linux package manager."
Like any solution, particularly a 100% opensource solution, it's not perfect, but it does do the job, the majority of the time. YMMV, but I have 24 Homebrew formulas installed and have had zero problems with any of them.
By contrast, I know that I can use exactly one tool (pacman)[1] to handle any installation, upgrade, query, removal, dependency tracking, versioning, etc, even for things like Python libraries. I don't need to futz around and try and remember how I originally installed it.
Compare that with OS X, which gave me absolute hell when I tried to do something so utterly basic as upgrade the system version of Python from 2.6 to 2.6.1, just so that I could install matplotlib (or something along those lines). In the end, I had to do some manual rm-ing and symlinking in /usr/bin/System_Python (or whatever it was) just to get everything to line up properly while at the same time not borking everything else on my system. Manual deletion of root-access files? Just to upgrade a single library? Come on, this is 2012, not 1992.... and even if it were, we still had better tools back then!
[1] Okay, technically you'll need a wrapper for the AUR like packer if you want exactly one tool; but my point still stands.
In this case the problem is that libraries may not detect the alternative versions of Python if System Python is still installed. But the prepackaged versions of Python won't always install properly if you already have a Python on your system, so you're in a catch-22.
I mean take a look at the installation instructions for Matplotlib[1]. It takes about two lines to explain how to install it on Windows, and more than half the page to explain different things you have to try to get it to work on OS X. And that's not counting the copious other errors and hacks that you'll find if you try Googling the OS X installation issues.
Let's face it: if it's orders of magnitude easier to install a well-designed library on Windows than your OS, you have a problem with your OS.
[1] http://matplotlib.sourceforge.net/faq/installing_faq.html
A well-designed OS should require you to install a separate version of Python if the version it provides does not suit your needs. Replacing the system version of Python means that any system components that use Python are now running in an untested configuration and may break in mysterious ways. Installing your new version elsewhere removes that concern.
> prepackaged versions of Python won't always install properly if you already have a Python on your system.
If a prepackaged version of Python for Mac OS X won't install if you already have Python on your system, then it's broken. It's that simple. Mac OS X has shipped with Python installed for years, so such a package would not install on any modern Mac OS X installation.
> I mean take a look at the installation instructions for Matplotlib.
I don't know that using Matplotlib as an example really supports your argument.
The installation notes about Mac OS X are a mess, but from my reading of that page it says as much about Matplotlib as it does about the state of Python on Mac OS X. On that page they recommend a third-party distribution of Python named EPD, but then go on to talk about how EPD has issues building Matplotlib on some versions of Mac OS X. Why would they recommend a version of Python that can't build their software? The page also spends a bunch of time talking about older versions of Matplotlib, and about packaging mechanisms that they no longer use. Neither of those things are relevant to the average person that is getting up and running with Matplotlib on Mac OS X.
As far as I can see Matplotlib only distributes binaries for Mac OS X that require the Python.org version of Python to be installed. With such a version of Python installed, the process for installing Matplotlib appears to be as simple as: 1) Install NumPy from http://sourceforge.net/projects/numpy/files/NumPy/1.6.1/ 2) Install Matplotlib from http://sourceforge.net/projects/matplotlib/files/matplotlib/....
As far as I can tell, this is exactly the same process as for Matplotlib on Windows. Right down to installing a version of Python from python.org. I'm not even sure that's strictly necessary. The hand-wavy mention of problems with the system version of Python on the installation page are so void of context and detail that they're impossible to evaluate.
See you in the Apple Store.
It never used to, back in the 12.0 Slackware days, and then I gave up and forgot about it. A few months ago I decided to try again and it just worked.
Check out your scripts in /etc/acpi and try `acpi_listen` to see what event is triggered.
That behavior is one of the most annoying defaults ever, in my opinion.
I was really asking why you would ever want your laptop to not suspend when you do close your lid. Watching a video or game is not possible with a closed lid anyway. Downloading something would be, but then I just leave the lid open if I want to do something like that…
What's with you people? What's next?
"If I have an ssh session running, I don't want the machine to stop when I remove the battery and the charge plug"?
If you want something on the other side of the SSH to continue, use sleep or tmux.
If you want to keep your session, well, keep your lid open...
Then you might have to wonder if yours is maybe not the typical use case.
Just sayin...
(Some of you may balk that a cartoon is not a blog post, but commentary is commentary.)
(bursts into tears, runs out of room)
Because sure as hell, 99.9% percent of us doesn't:
1) Write code on the web. 2) Edits images on the web. 3) Write documents on the web. 4) Maintains systems (admin work) on the web. 5) Produces/edits video on the web. 6) Produces/edits music on the web. 7) Watches movies on the web. 8) Does spreadsheets on the web. 9) Plays heavy 3D games on the web. 10) Does DTP on the web. 11) Does 3D modelling on the web.
Web stuff exists for all of these, but much much much fewer people use it than desktop apps.
Last time I checked, programmers use Emacs, Vim, Visual Studio, XCode etc. Those are not web apps.
It doesn't get much better for the general population, though.
Tons more people use something like Paintshop Pro and Photoshop Elements than something like Photoshop Express (the online flash photo-edit tool). And, Google Docs, which is much more realistic a substitute than some online "photo editing" app is, for it's market, is used by a tiny percentage last time I saw the numbers.
Maybe one day we'll do everything in the browser, but this is not that day, and limits in current web technologies (hell, even basic stuff like websockets are not universally available yet) and bandwidth will keep it that way for a while.
There are things that can be done nicely on the web, and things that would be frustrating and a huge throwback to the olden days of slow CPUs and pain. Text editing is one such thing. Everything that needs the handling of large volumes of data (or not that large, anything larger than, say, 10MB) doesn't work that well in the browser.
So, you, the one guy using Bespin for your programming work: good for you, but you are a tiny minority.
I might occasionally find myself typing 'putty' in Spotlight, or 'dir' in linux, but largely it's all blurred together.
With Sublime Text 2 I'm even more confused. When I'm not in a terminal my editor is consistent everywhere.
Now the big question is more likely to be "What hardware?", not "What OS?", which is great as it gives me the whole world of products to choose from.
The only thing I'll add is: This is all only possible if you didn't put your life in one of the vendor's walled garden.
Oh and it's a bit error prone too - I can't remember whether this is different on newer versions, but it at least used to be too easy to accidentally close your window if you misclicked while doing a copy or paste. On a laggy remote connection this can be particularly annoying.
It has menu items for copy and paste; 'Properties' allows one to enable a more useful way of copy/paste (QuickEdit mode, IIRC).
It isn't enabled by default in case people want to run DOS apps with mouse support. Someone should start a pool for people predicitng when this default will be changed.
Yes, Windows default terminal is awful. Console2 fixes the problems.
Could they have chosen a more unintuitive, illogical and non-standard key?
I've also found that the uninstall mechanisms in Linux/OSX to be lacking compared to Windows. Perhaps this is a function of my lack of skill with the tools, but I have no idea how to uninstall the Tango library that the installer added. I'm worried about removing the dmd (D's compiler) since it installed in the /usr/bin. Linux is better that OS X in this regard.
Sadly I'm stuck in Windows for most things, even Node development. I just haven't found a good editor for free that is like Notepad++.
Fortunately for my Java/Scala development, Eclipse works everywhere.
As for uninstalling issues, if you can't use the package management tools to uninstall (you compiled from source and/or manually installed?), in the future try using GNU Stow or xStow to group all the pieces in a single directory and then symlinking them to the various system directories. It's brilliant. http://www.gnu.org/software/stow/
There are things which I believe are nicer on the linux development machine (xmonad/apt,yum), but the thing that keeps me coming back to my Mac is that not only is it an above-par development machine, but it is also an excellent freetime/browsing machine. The application ecosystem is far superior, just compare Pidgin and Adium; Settings dialogs (so much unused space). I guess you could sum it up as design aesthetics but it truly makes the difference.
Would I reconsider windows again after a POSIX environment, I don't think I could, but I may try.
But between a decent command-line, apt-get and gnome-do I don't like the idea of using another OS at all.
For example, we deploy to Linux servers so we want our dev environments to closely match that, kinda hard to do with Windows. We use Adobe products to visualize our applications, kinda hard to do on Linux. We need to test in IE, need virtualization software if we're running OS X.
All OSes are not equal. Browsers may be, but I don't develop in a browser.
There are a lot of differences between the major platforms. The article is true when all the moons align: You only do web (or Eclipse) work, your phone and all its apps are platform agnostic (OmniFocus locks me in), you have no games, you have no paid GUI apps, you don't care about iTunes ...
I have a whole family of real, existing humans that I'd love to free from their virus-ridden Windows machines. It just isn't possible for what they do.
Not sure what to take from this article. It sounds like indirect boasting about not being locked into anything. It would be more interesting to discuss if that is important.
And GIMP is not a viable alternative.
But Photoshop is still irreplaceable.
Very few "front end" types in the Linux community.
Now... if I could only get a decent Mono set up on this thing. I could cut out Windows entirely.
The people running windows and doing development on open source tools are a tiny minority, therefore whatever platform specific problems they run into aren't going to get as much love and care.
It's different if you're using some proprietary soup-to-nuts toolchain, perhaps with support and all that jazz, then maybe it doesn't matter.
But as long as your support is the open source community, and your tools are the stuff that they put together, and as long as they're all running some flavor of unix or linux (and therefore don't really care about your weirdo windows vista edge case), it'll matter.
However, for a relaxing machine, Linux doesn't have access to the same games as Windows or even Mac. Well, you can often do some clear hacking to get things running on Linux (Wine, etc.) but it's much easier on Mac or Windows.
Thus I still defend Mac as the best mix of Unix development environment + reasonable access to quality games. I usually mention ease-of-use, but as the poster mentions, Linux is much better than last decade.
Perhaps surprisingly to some people, Linux hardware support
has improved to the point that everything worked perfectly
out of the box, just like on a Mac.
I installed the latest version of Ubuntu on my Dell Laptop. After a few minutes, I heard some strange noise from the Hard Drive. I googled to see what's going wrong and I found out that Ubuntu have some problems with Hard Drive Power management. The risks are damaging my SATA drive.Unless you are using something supported by your Hardware provider, I really doubt Ubuntu will make it work out of the box, just like on a Mac
Switched to a MacBook Pro, and it's been rock solid.
Free and open source software is not motivated by politics, but by a development strategy to get as many people as possible to find and fix bugs.
Free software is politically motivated, by the love for freedom and the hate for slavery. If freedom matters to a person, it will matter to him whether he uses Linux, Microsoft or Apple.
Ubuntu has a very powerful tendency to slowly develop crud and become unusable, until you just need to start from scratch and re-install the OS.
Not sure if this has changed, but laptops tend to be a mess with Ubuntu. Things like closing the lid and going into sleep mode would fail seemingly at random.
Use whatever feels comfortable and enables you to get work done.
Insightful post.
Many Windows users are also at a disadvantage because many of them have only/mostly used Windows. Pretty much any Linux or Mac user has probably had to (voluntarily or not) use Windows at some point. Also, I have yet to meet the Windows user who can rationally reason about their choice of using it and not another OS.
If you've only used one operating system in your life, you are at a disadvantage compared to people who are proficient with two or more OS'es.
edit: I know this is controversial. There might also be a regional bias, since I'm located in Helsinki, the hometown of Linux :)
If this is true, it's only moderately true and only recently. Historically Windows had a pretty big advantage in terms of great coders. Including virtually every game shop almost exclusively (incuding legends like Carmack, Sweeney, etc...).
It was in part just due to the fact that if you wanted to make money, you wrote Windows apps. It's like iOS is today, except a magnitude more dominant.
It's only in recent years with the web and mobile where this has begun to change. But I'd say that only mobile has typically had super strong devs. The web until just the past year or so has not been a place you could hire generalists. We've really just begun to see devs that I'd hire to do any work at our company -- not just web people.
These days OSX seems to be pretty hot for game dev, certainly if you want to do any iOS stuff, and OSX is creeping up as a platform too, with Steam now available there. No doubt windows will be king for a while yet though.
[1] http://en.wikipedia.org/wiki/Making_of_Doom#Building_the_gam...
And more importantly, as it relates to DHH's statement, excluding Windows developers isn't like some odd niche. It's probably a healthy percentage of the best developers in the world. Fortunately for DHH he's at a webdev shop where pure coding skill is probably less important than cultural fit.
I would argue that, at most programming jobs coding skill is less important than cultural fit, once you've passed the level of "reasonably competent developer."
Games are a big chicken-and-egg issue for Linux and other OS adoption. A big part of this issue is Direct3D vs. OpenGL. While D3D is clearly a superior API, OpenGL is the only choice if you want to support non-Windows OS'es.
So if there were more games (talking about big titles here) for Linux, there would be more gamers using Linux. And subsequently more games would be written for Linux. As there is no initial group of customers (big enough to attract publishers' attention), the situation is not going to change. Unfortunately.
Really?
I can tab between games and my editor.
I don't need to run Linux to develop or deploy for Linux, but I do need to run Windows to play those games. It is not irrational for me, then, to choose Windows as my host OS.
It's not irrational to have other preferences either, but that wasn't the claim the grandparent made -- that there were no rational reasons for someone to use Windows.
As opposed to?
Do you refer to the better availability of games on Windows? Are games good enough a reason for you to stick to that OS even when doing work?
I can sort of relate to you. I have a dualboot Windows system, where the Windows part is for gaming only. It serves roughly the same purpose as many people's gaming consoles do, I don't even try to do work with it.
There is no software I want to run natively that only runs on OS X or Linux. The software that doesn't run on Windows is software I don't need to run natively; I can SSH in to a Linux server or VPS somewhere to test/manage/deploy it.
So the rational choice is to run Windows as my native OS.
If you are not satisfied by this argument, then I don't think you're being truthful with yourself regarding the "I have yet to meet the Windows user who can rationally reason about their choice".
I am a Linux developer. I have set up, administered and deployed software on Linux stacks for almost 20 years. But I don't need to be booted onto a Linux OS to do any of that work -- Python, PHP, Apache, MySQL, subversion and git all run fine on my Windows machine alongside my editor for dev and testing. I can SSH in to any of the Linux machines to administer and deploy on them just as easily as someone running Linux natively.
To force myself to run Linux and reboot into Windows to use the Windows-only software would be entirely irrational. Why would I waste my own time like that?
Visual Studio.
Now Visual Studio is a different beast. Comparative tools are definitely available on other OS'es, but many VS users have a preference.
[1]: http://groups.google.com/group/comp.lang.ruby/msg/12318b8d5e...
[2]: http://groups.google.com/group/comp.lang.ruby/msg/475d868d9f...
- Mouse scroll only works in the active window; - No native way to pin a window in front;
For both cases I had to download workarounds, but they don't work very well.
The article is correct: I too find the experience generally on most levels between OS X and Linux indistinguishable, although Linux has far more easily accessible programming tools that are totally free (most Mac equivalents that do the same job come at an unreasonably high price) and I feel Linux is more comfortable to program with, generally.
Installing certain tools under OS X BSD layer is generally more of a faff than just apt-get install or whatever. I also like the fact build-essentials is much faster and easier to set up in Linux than having to install the whole XCode stack and then say Brew or MacPorts to get the same level of functionality.
I spend most of my time in OS X on the command line and use tools like mutt and cmus in preference to GUI mail and iTunes, so in that respect the difference between OS X and Linux are not really noticeable. But as someone else mentioned earlier, if Adobe did Linux ports of all their applications I'd never leave Linux again.
I never use Windows nowadays. Just looking at it/thinking about it makes me feel ill, although I have in the past written a huge amount of software in Windows for other people. Bleargh ...
Also some things demand I use a specific version of OS X, Why should, say for example, an editor, demand I use 10.7? Which I've no intention of using. Why do I need XCode when all I want from out of that is gcc? Not that this is a major ordeal in any way.
Mac hardware is slightly pricey but it is very good. I have no gripe whatsoever about that. I never said Mac development was expensive. I said it was slightly more of a faff to set everything up.
You mention you've a Linux netbook -- so do I. And here's the thing: it also boots OS X as well and that runs really well on that limited hardware. Maybe even running better than Linux. I also have two proper, actual Macs as well as an AMD based Linux PC and that ended up costing slightly more in the end than a Mac would because of some of its hardware.
Go back and read what I said. You're putting words in my mouth.
Troubleshooting a recent virus/malware problem on Windows turned into rebooting countless times, Windows Update incantations, several malware tools, and so forth until the OS was unbootable and I had to wipe it and install everything from scratch. Knowing what I know about Windows and Mac, I know how much easier it would have been to deal with this problem on the Mac, not to mention that it most likely would never have occurred in the first place.
So, that's my two cents -- when everything is running the difference can be negligible. When you hit problems, the difference may not be so negligible anymore.
Switching from Mac to Linux is pretty easy. Switching from Windows is trickier. The languages are the same but setting up your environment is a chore. Most instructions for setting up local development environments are focused on Unix like systems. If you learned on Windows and switch to Linux or Mac things can be strange for you but luckly there's no shortage of easy setup instructions and terminal one-liners to get you started. If you learned on Mac or Linux and switch to Windows then you'll have a harder time as you always have to make sure you're looking for the Windows instructions or tools.
Want to set up an AMP stack (on your system not using Xampp) on Windows? You're jumping through hoops if you came from any other OS. Want to use multiple Ruby versions? RVM and RBENV don't run on Windows. Experienced programmers can make these switches easily with only some minor annoyances but someone in the first few years of their programming journey will have a much harder time. The way Windows does things isn't necessarily wrong and it's no one's fault that it doesn't have any sort of Unix heritage like every other popular OS these days. But the case can be made that switching to or from Windows can matter depending on the programmer while a Mac to any Linux distro switch has a negligible effect on workflow and productivity.
This isn't about Windows being sucky. It isn't. It's just different enough to warrant a disclaimer, that disclaimer being "while it doesn't matter what platform you develop on for the most part, Windows does things differently enough that switching to or from it can matter if you're somewhat green". These days documentation for most popular tools assume a Unix-like development environment. Windows users need to Google for instructions.
It's also worth noting, like one of the commenters on the original page said, that most Linux GUI tools aren't as good as they are on Mac and Windows so of you're not totally comfortable in the terminal youd better get there or use another OS. There's no shame in preferring a GUI tool and it isn't necessarily the mark of a noob or bad programmer. I'm an alright programmer myself, very comfortable in the terminal, know vi and nano well but prefer a GUI text editor. It's not bad, just different.
So I guess what I'm saying is that the article's point stands but it's a bit of an oversimplification.