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.
If you design chips, you might wonder how anyone gets by without an FPGA. If you develop a kernel, you might wonder how anyone gets by without remote debugging. If you develop drivers, you might wonder how anyone gets by without a C compiler or assembler.
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.
Your point is valid, of course - developing specialized software requires a specialized platform. But what I wanted to say is that even developing a web app (and that's what I do these days) I sometimes need to use Wireshark.
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) :)
I develop mobile game software (Android/iOS), but what kills me (and keeps me on Windows, unfortunately) is the fact that I can't find an editor that keeps me as productive as the one I use on Windows (Visual SlickEdit).
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. :(
You don't really need to keep track of the vim mode, you start typing text and either your text is entered or you now have half of you code all in capital letters. But seriously, as with everything it has a learning curve which is quite minor when you use it as your main editor. It becomes quite essential when you have the need to ssh into different machines on different platforms for distributed testing etc.
I use vim when I ssh into machines for doing quick-and-dirty edits. I know how to use it.
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.
First, I was inserting, so it would be ESC-up-V-something, and ESC requires my hand to leave the wrist rest. Problem is, I occasionally don't notice I'm inserting (or not), and as you pointed out above, that means that half my buffer is now screwed up and I have to shift mental gears to fix the damage. That alone is unforgivable.
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.
>> I develop mobile game software (Android/iOS), but what kills me (and keeps me on Windows, unfortunately) is the fact that I can't find an editor that keeps me as productive as the one I use on Windows (Visual SlickEdit).
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.
Eclipse tortures its users. I'm convinced that Eclipse users suffer from Editor Stockholm Syndrome. I HATE Eclipse with a passion, and have gone to great lengths to not have that unreliable "tool" be any part of my development system.
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.
Considering Eclipse is "the most popular" editor around, I don't think the barrier to entry is very high. I used it for over a year before giving up on it as useless. For me, having reliable builds is FAR more important than the editor holding my hand with respect to Java syntax. I swear Eclipse is primarily popular EXACTLY because of the latter, since it can act as a crutch for new and junior developers.
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.
"""For me, having reliable builds is FAR more important than the editor holding my hand with respect to Java syntax."""
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...
Have you done Android development? Have you ever changed a file outside of Eclipse? That's where the unreliability comes in.
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:
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.
The thing that makes me squint at that point most is the lack of reasonable shell when talking about windows. I do so much 'meta' work in zsh/bash/perl that the thought of being without them, or having to use the bits that come with Windows make me wonder how people work.
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.
Sorry i meant "doesn't compile", which is the essence of open source programs anyway. If that wasn't an issue on OS X there wouldn't be so many porting projects (macports, fink etc). And if you work with non-popular (e.g. scientific) programs that's not even an option.
Compiling software is not trivial, that's why you have macports, fink, etc... Like you have apt, portage, pacmacn... on Linux distros or ports on FreeBSD.
In a way you're right but really there is no best or even "better" platform for development. To really get to what is better you have to take into consideration
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".
I think linux beats OSX as development environment for the simple reason that most OSS is built for linux first [and almost all the interesting software is OSS nowadays]. Personally the only reason i use OSX is iphone or Mac development.
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 ]
For a full-time developer, I agree with the OP insofar as Linux and Mac are largely interchangeable. I develop on Linux and love it.
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.
Video editing and modeling/rendering effects are completely different toolchains. Tools for the former are still very crude compared to what's available on Mac/PC. Support for the latter is good on Linux, probably thanks in large part to the Unix legacy imparted to the effects industry by SGI.
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.
Unfortunately switching the other way isn't as easy.
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."
The sleep comment is apt. Having run linux on laptops many times in the past, the regular incompatibilities and inconsistencies are hard to get past. From power management features, to wifi quirks there is always something that just doesn't work right.
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.
Full hibernation on my AMD 'netbook' is that way (or was before I shoved an SSD in it), but sleep/wake is usually pretty quick. When it works. But it rarely works.
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.)
Package management is not a minor part of the "unix install". When I get a just works Mac equivalent of pacman -S whatever, I'll consider using OSX for more than testing.
The homebrew comment (which I can't reply to for some reason) is good, but not totally fair. Homebrew has to compile everything, while this isn't a huge problem with todays machines it is still a bit of a time sink. Homebrew regularly has packages that fail to build. There are over 400 open pull requests for the project at the present time to illustrate this problem.
Homebrew != apt-get or any other linux package manager.
Moreover, homebrew doesn't provide complete package management for the entire system. Sure, it can keep track (sort of) of the packages that it installs, but it's not by any stretch a one-stop destination for anything installed on your system.
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.
Upgrading the system Python on Mac OS X isn't easy because it's not something you should do. See http://stackoverflow.com/a/1541850 for something of an explanation about this.
My point exactly. A well-designed OS shouldn't require you to keep multiple versions installed on a machine like that. I have exactly two versions of Python on my box (a 2.7.x and a 3.x), and since I don't need to do development testing of libraries against multiple versions, that's all I should need. (And we're just talking about development tools and installation here - what about all of the other aspects of package management, which OS X completely neglects?)
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.
> A well-designed OS shouldn't require you to keep multiple versions installed on a machine like that.
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 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.
"compile everything" is an approach to package management. BSD Ports (as well as Gentoo's Portage) use it. It does a pretty decent job at helping packaged programs build off/work with unpackaged installs. You also get some marvelous compile environment debugging adventures. ;)
Not saying it isn't an approach, I'm just saying,it's apples and oranges. When someone suggests that OSX doesn't have a linux style package management, they are technically correct.
What does "linux style" even mean? Linux is a kernel, it doesn't define how a package manager is supposed to work. Gentoo has been source compiling from ages, and is a linux distribution. If you're looking for technical correctness, your initial comment[1] is wrong in the context of Portage.
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."
Well, hang on there. I'm not here to become Mr. Homebrew Defender, but saying 'this project has 400 pull requests, that's a problem' isn't fair at all. The majority of those pull requests represent users updating formulas to new versions of things, or adding new formulas, not fixing problems that prevent things from compiling.
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.
I think the point was more that in comparison to the package systems deployed for Fedora or Ubuntu or OpenSUSE (also "100% open source"), Homebrew looks, well, pathetically primitive. Seriously, look at the way launchpad or koji or OBS work sometime.
Sorry, I use and love homebrew, I'm just saying I understand the parents issue with the lack of a compiled binary package manager for OSX. Arguably I can't see anything that is preventing one from being created though. Perhaps compile-on-demand is just the way of the future.
Would you mind sharing some information on your setup? What make/model laptop do you have and what distro are you using? Did you have to do anything specific to get the power management to work properly? Cheers
<Shameless Plug> I'm using a System76 laptop (http://www.system76.com/laptops/model/gazelle) and the power management works quite well. The System76 team partnered with Ubuntu to provide enhanced drivers to support all of their hardware with zero configuration to the end-user. I wish the multi-touch hardware was a bit better, but otherwise, I can't say enough good things about my new laptop.
I don't want my laptop to go to sleep when I close the lid, especially if it's plugged in. Is there a setting on Macs for that yet or do you still have to run a 3rd party app?
That behavior is one of the most annoying defaults ever, in my opinion.
As far as I am concerned, sleeping is only annoying if it takes time. My MacBook basically wakes up instantly, so I have no issue whatsoever with it. Why do you think sleeping is a annoying?
If I have a game running I don't want my laptop to suspend, if I have an ssh, RDP, or IRC session open I don't want my laptop to suspend, if I have audio or video playing I don't want my laptop to suspend, if I just started a compile I don't want my laptop to suspend, if I just copied files to my dropbox folder I don't want my laptop to suspend.
Well, if you don't want your laptop to suspend while it is open, use Caffeine. Awesome App!
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…
Really? Are you doing something over IRC or SSH with the lid closed? I normally don't talk to irc with the lid closed, because I can't reach the keyboard that easily...
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...
The state of memory leaks in firefox extensions is terrible even for trivial extensions... I can't imagine how bad it would be with something non trivial.
Well, "since we do most things on the web now" could also be translated as: "since we don't do much other than read emails, surf the web, do some IM/social stuff, and maybe exchange some documents".
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'm generally a Linux user, but I've grown to appreciate OS X's keyboard shortcuts. Cmd-C will copy text on just about any OS X app including the terminal and emacs. On the Linux terminal, you have to use Ctrl-Shift-C to copy (to avoid sending SIGINT to the current process), and God forbid you ever need to copy anything in the Windows terminal.
I just tried to do that on a Win7 machine sitting next to me and it didn't work... it doesn't seem to let me highlight anything at all? I normally wouldn't comment about something like this but I wanted to do this literally 10 minutes before I read your comment. Anyway I don't think it's controversial to suggest that the stock terminal on Windows kind of sucks, although I gather that PowerShell is pretty good.
Hit alt-space (?) or click in the top left corner to open the system menu (?).
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.
It's not that it's terribly hard, it's that it's annoyingly different from most other places in the system. Just one more thing to remember.
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.
I find the terminal just horrible in OSX. I'm on snow leopard and it can't even wrap lines properly. Trying to get vim with colors to work is a major headache.
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.
The built-in terminal is terrible (although at least in Lion it has 256 color support...). I'd hardly consider it a mark against OS X though considering that it is just a piece of software that is included by default. There are plenty of other options out there. I'd STRONGLY recommend checking out iTerm2 next time you're on OS X, it's the best terminal emulator I've had the pleasure of working with.
Notepad++ was one of the few bright spots of my erstwhile Windows days, and I still wish for it when I occasionally find myself using Gedit for quick note taking. It was sooo fast with just the right features and nothing supurfluous. But I could never go back to it from Vim now.
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/
iTerm2 (http://www.iterm2.com/) is a mighty fine drop-in replacement for Terminal.app that adds a whole basket of useful features. I live in it and love it. :)
Try going from Mac/Linux to Windows (or vice versa) and see if "getting [your] development environment running for [your] applications [is] just as easy"...
Not bad, but not what I'd really call good either. I was forced to use cygwin while working on a project last year and while it gave me some familiar ground for sure but it seemed like every which way something was just... off. I can't really think of much in the way of examples at this point but I don't have fond memories. One thing that did annoy me was a total lack of decent terminal emulators and I ended up using something based off PuTTY. Cygwin was certainly better than nothing but I'll take the real thing any day.
I have a Linux PC as my development work machine and a Macbook Pro as my home development machine. Agreeing with the author, yes they are almost indistinguishable when the main tools are Chrome, a termina, vim, tmux, and g++/javac.
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.
I guess it depends on what you do and how you do it. Some business dependent software do not exist across platform.
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.
I love my GUI-ish setup of TextMate and CornerStone/Tower; I can only do iOS work because I have a Mac; I will buy a dedicated Windows box when I want to dabble with Windows Phone; I don't know what I'd do with my iPhone on Linux; I like Xcode4 a lot more than MSVC, in any case they are as different as day and night; mice and keyboards are similar, but can you say that about trackpads already? (Honest question - I don't know)
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.
It is impossible for any serious Designer/Front end ppl in general to go to Linux, unfortunately, as much as i want to strangle Adobe (can't wait for Pixelmator to mature a bit more), we rely on Photoshop and Illustrator too munch.
Can you suggest a good Illustrator alternative for Linux? I've tried a few and was never satisfied largely because the GUIs were very difficult to use. Perhaps I tried the wrong ones!
OSX is like a gateway drug for Linux. I used Windows for years, then had to work with OSX for iOS development. Didn't know a thing about it, hated it (at first). Time passed and now I ssh into vps to set up nodejs. Feels great =)
More correctly, I think OS X is a gateway drug for Unix. With OS X, you get all the "1337 hax0r" command line goodness without sacrificing MS Office and Adobe CS as you would with Linux.
Now... if I could only get a decent Mono set up on this thing. I could cut out Windows entirely.
It matters a lot if you're using open source tools, I think.
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.
For a dev machine this is mostly true. I haven't been able to be as conveniently productive on Windows, since I always end up installing Cygwin eventually, then decide I might as well be using Linux.
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
My experience with hardware support was not so hot either. On a ThinkPad X220 with latest Ubuntu, I would get random crashes when unplugging the DisplayPort adapter, or right in the middle of working. Also, lack of proper built in fan speed control. And panels doing stupid things when switching between signel & dual display setups.
Switched to a MacBook Pro, and it's been rock solid.
He makes some good points, but Linux is still lacking in some areas. Hardware support is a big one and If you want to watch Netflix or do any kind of serious graphic design then you'll have to go with Mac or PC. I'm in the process of building a linux box, but it's just going to be a headless server with remote desktop capabilities as well as running a few local servers for web dev. I can't give up Mac & PC just quite yet...
Well it does matter if you do anything else than webdev..I develop games with Unity which is only available for Windows and Mac... Also building native iOS apps is only possible on one plattform...i would consider Linux otherwise, but no choice.
So OSX is the way to go, and i love the tight hardware/software integration which makes the macbook sleep/wake-up etc without any issues, which is always a pain on Linux to get right.
Ryan said: "it’s not some political statement about free and open source software"
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.
I'd love to run Linux at home, but gaming keeps me on Windows. Sure I could dual boot, but it's such a pain for little gain. I tend to hang out voice chat programs while gaming, and interrupting conversations to reboot to Linux after a gaming session is an inconvenience.
Same story for OS X.
It does matter. I'd love to do my social game development in Linux (and I even tried it, for a while) but the technologies I use are Flash and Unity 3d. There is no effective way to develop with either of those technologies in Linux. So I settle for the one supported OS with a shell: OS X.
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.
I find myself using VMs allot since I have a set of preferred applications for doing my work.
The majority of them are platform agnostic but some are not and the ones that are not are all for different platforms.
Unfortunately it matters if you do mobile development, iOS being one of the two must have platforms and requiring a Mac. I do use and like Ubuntu though, and could see myself switching over with minimal hassle.
I can relate to them. Good hackers tend to gravitate towards Unix based OS'es for some reason. So out of personal experience and anecdotal evidence, I would say that the conditional probability of a voluntary Windows user being a great coder is less than, say, a Linux user.
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 :)
So out of personal experience and anecdotal evidence, I would say that the conditional probability of a voluntary Windows user being a great coder is less than, say, a Linux user.
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.
As a counter example, Carmack wrote Doom on a NeXT workstation[1].
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.
Yes, Carmack did like NeXTStep a lot. With that said, most of his career Windows was his main dev box. Even post Doom he went back to Windows as his main desktop:
"The upside is that windows really doesn't suck nowdays. Win 95 / NT 4.0 are pretty decent systems for what they are targeted at. I currently develop mostly on NT, and Quake 2 will almost certainly be delivered on win32 first."
http://rmitz.org/carmack.on.operating.systems.html
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.
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 seem to be a Windows thing. If you play Games, you must use Windows. If you make games, you must write them on Windows, because your audience is on Windows. There are exceptions to this, like Minecraft running on Java (but Notch seems to be a Windows user anyway).
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.
Eugh, I'll rise to the bait. I can switch between games and editor on linux via keyboard shortcut; Ctrl-Alt-7, Ctrl-Alt-8. Run games in a seperate X session and everything becomes much easier.
I wasn't trying to bait an argument, I was being serious. There are games I want to play that are only developed for Windows.
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.
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 software I want to run natively (like games) that only runs on Windows. It is an indisputable fact that this is the common case. It is not irrational to want to run some of this software; it's also not irrational for someone else to not have that desire, but that's not the point here.
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?
Microsoft Office. LibreOffice is pretty good as a standalone product, but when I used it regularly I had nagging document formatting problems when exchanging files with my work colleagues.
If you depend on a software that is available for Windows only, you're on the borderline whether you're actually using it by choice or not. Especially if the software is Office. At work I have to use Outlook for corporate communication so I run it Windows in a virtual machine. The tools I need for real work are Linux-only (and require native HW access), so this is the only sane choice. Of course, this means I have to have a license for Windows.
Now Visual Studio is a different beast. Comparative tools are definitely available on other OS'es, but many VS users have a preference.
I wonder if he still stands by this rant? (Nothing has changed in the OS landscape but people tend to mature with time and their absolute stances tend to mellow with experience).
I have used solely mac's in the last 4 years. At my new work they use windows I didn't like the idea at all. But actually I don't really care anymore vim, eclipse, chrome, spotify etc it all works. I need to buy a new laptop and it is not going to be a macbook pro 15" since I think its to expansive especially since I had this epiphany :)
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 ...
You mention Macs doing the same job being real pricey and I'm wondering how you figure that? I have a 4 year old iMac and a netbook running Xununtu. The tools I use on both machines are basically the same with the big difference Bering my text editor (Chocolat on Mac and SublimeText on Linux). Other than that all the tools are free for both platforms. I've got my AMP stack, RVM, PHP, Apache, SQLite, etc., etc., all free. Even Xcode 4 is free on Lion and 3.6 is free if you run anything less. The Mac itself is more expensive but doing any equivalent work as I would on Linux doesn't require a real powerful Mac anyway. I love them both equally but prefer my Mac. It may be a comfort issue as my Linux box is a netbook but I digress. I'm just wondering, besides the cost of a mid grade Mac to begin with, what makes you say Mac development is expensive?
"You mention Macs doing the same job being real pricey" -- No, I never said any such thing. I said some software tools that are free on Linux (some programmer's editors for example, but a few other little things as well) have rather pricey equivalents on the Mac (unless you can find something on Macports or Brew that will compile on OS X. fdupes, mutt and cmus I must have for example).
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.
I'm sorry, I wasn't trying to be argumentative at all. I was just curious about how you figured the Mac was so much more expensive but I misunderstood your comment so the question doesn't matter anymore and when you put it in terms of software then there's no question the Mac will end up costing you more. I only mention my experience not to argue that you're wrong but just to see what you're doing so differently that would make things expensive. But again, I misunderstood what you were saying to begin with so it doesn't apply. I know we can all get into heated debates around here but please don't jump the gun and be on the defensive as not every comment is meant as a rebuttal, and I was just asking out of curiosity. Sorry, man.
I boot into Windows for work since our whole stack is Windows-based and it's just easier that way. I agree that to a pretty large extent the OS doesn't matter when developing. This is especially true when everything is up and running fine. But there's the rub -- when things go south, that's when you find out what your preferred OS is.
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.
The main point is right but the post glosses over some critical details.
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.
Actually, Microsoft now makes it ridiculously easy to install an AMP stack on Windows. Just run the web platform installer and select the bits you want.
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.