Using a Chromebook for Web Development
In June of 2013, I bought a Chromebook Pixel with the intent of making it my primary development machine. For the past fifteen months, that's what it's been.
I've always been a proponent of the web platform. After starting a company to create browser-based authoring tools for web developers, I decided to "go native" on the web to find out if it could really hold up as a primary machine for a highly technical heavy user.
TL;DR: Using a Chromebook as a development machine, even without installing Linux, is doable and downright pleasant. There are trade-offs, but there are also a few benefits you can't get anywhere else.
Developing in the Cloud
When I say that I'm using a Chromebook, what I really mean is that I'm using web applications as my development tools. There's nothing stopping anyone on any OS from using the same tools and gaining most if not all of the same benefits. In fact, if you're on Windows trying to build with Node, Ruby, etc. the web tools might be better than what you're using today.
Divshot's own Architect is one such tool and works great for roughing out front-end interfaces, but for a full-time development machine you need a full-stack development environment. There are actually more of these out there than you'd think, but I have fairly deep experience with two of them.
Note: Before switching to web tools, I was a Sublime Text user. I've also at various points used MacVim and TextMate as my primary editors. If you're a heavy terminal Vim/Emacs user, you can probably just install the Secure Shell extension and call it a day.
Nitrous.io was my environment of choice until a month or two ago. It was the first fully viable solution, providing a dedicated VM and an IDE on top that was good enough to make me not miss Sublime (most of the time).
Pros: highly configurable VMs (beefy box!), team features (such as box snapshots), real-time collaboration features, easy package install for most common things, can expose multiple ports on a box.
Cons: IDE doesn't see frequent updates, state is lost on reload
Cloud 9 IDE
Cloud 9 has been in the game for a long time (they're behind the ACE code editor, so I already owed them a debt for that). A couple months ago they relaunched with a brand-new IDE and wow. Just wow. It's a native-quality development experience, and in many ways better than native with its integrated terminal experience.
On the other hand, the environments they provide (even on a premium account) aren't so beefy. I quickly ran out of space with no way to upgrade it. Additionally, you can only expose one application to the outside web, making it hard to test a complex web application.
Cloud 9 has an ace in the hole, though: you can actually connect the IDE to any server using SSH and a little install script. Right now my development environment is actually a DigitalOcean droplet using Cloud 9 as the front-end.
Pros: Amazing and configurable IDE, connect to any box, workspace state is persisted.
Cons: Wimpy provided containers, can only expose one port at a time if you're not running your own box.
The Other Apps
Of course a primary machine has to do a lot more than just development. Here's a fast rundown of the various tools and extensions I use on a regular basis:
- Postman is a fantastic extension for making HTTP requests
- Text is a good lightweight text editor for viewing and editing local files.
- Zed is an interesting text editor that lets you edit files on remote machines.
- GMail for mail, Google Drive for docs, Hangouts for video chat and IM. Of course.
- Meldium for logging into all the things.
- Flowdock for team chat. Strongly recommended.
- Feedly for feed reading.
- TweetDeck for the Twitters.
- Help Scout for customer support.
- Trello for project management.
- IRCCloud for always-on IRC chat.
- Draft is a great tool for, well, drafting Markdown text. I'm using it right now, in fact.
- Netflix, Hulu, Prime Video, etc. all work great on Chrome OS.
- Put.io is fantastic for perfectly legal downloading and streaming of files via BitTorrent.
Crash Plan. If someone grabbed my Chromebook and threw it out a window, I could be up and running on a new one in less than five minutes. Chrome OS syncs everything, even what you have installed and task bar positions. This comes in useful if you like playing in the dev channel but need to reset to beta/stable when bugs inevitably crop up.
Every Computer. Related to the above, I can pop open an incognito tab on anyone's computer, log into Cloud 9, and get to work. I've used this in real life both while visiting family and on public computers when emergencies arise.
The Interface. When everything's just a browser tab, multi-tasking is actually super-pleasant. I find tabs and pinned tabs to be a better way of contextualizing my workspace than app switching ever was.
Peripherals. I was worried this would be a pain, but it's actually seamless. I work on an external monitor with a Logitech USB keyboard/mouse most of the time. Plug-and-play holds up in Chrome OS.
Seamless. Chrome OS and my Android phone pair super-well together. Google Now notifications pop up on my Chromebook, as do text messages via Hangouts. Similarly, on my phone I can pop open a tab from my Chromebook with ease to try out something on mobile. I also recently learned that you can do remote debugging on a Chromebook. Who knew?
Media. There are no decent graphic, sound, or video editing programs for Chrome OS. Most often I find myself missing Illustrator, but if you're heavily reliant on any of the Adobe tools then you won't be able to make a go of the Chromebook. Also, a Chromebook obviously isn't a gaming machine.
Connectivity. You do have to be connected to the internet all the time period to be productive on a Chromebook. Well, ok, you can install Ubuntu but that sort of defeats the purpose. While this isn't a problem 99% of the time, that 1% of the time it can be pretty frustrating.
Little Things. It doesn't happen often, but sometimes there will be some seemingly simple task that I need to do that becomes exponentially more difficult because I don't have a traditional OS. Things like recording sound and screencasting. Usually there's a workaround for the problem, but it can be very frustrating in the moment.
My Chrome OS experiment began as a way for me to put up or shut up about the feasibility of the web as a development platform. With more than a year under my belt, I can safely say that not only is it viable, it's a great all-around experience.
It's not for everyone: you need to be willing to adapt your workflow to suit web tools, because they mostly won't adapt to you. I do keep a second machine around for doing the things I can't on a Chromebook, but I only pull it out perhaps once every two months.
The biggest advantage of a cloud development environment is its ability to be wherever you are. My ability to be productive from anywhere on any machine with an internet connection has more than made up for the occasional frustration with a lack of some native tool.
I've gone web native, and I'm not looking to change any time soon!