Typical Programmer

A glittering performance of rare perception


Popular articles
All articles

About me
Hire me

Working on an iPad Pro as my main computer

23 Mar 2018

tl;dr I can do all of my programming and system admin work with an iPad Pro because I work on remote servers over ssh, and I prefer using the Unix/Linux command line.

A few months ago I bought an iPad Pro 10.5” with Apple Smart Keyboard to try to use it as my main work computer. I had been looking at the iPad Pro for a while, going back and forth between the two sizes and comparing to the 12” MacBook. I used a series of MacBooks until 2015 when I switched to a Chromebook Pixel LS, which I still use (best laptop I’ve ever used). I thought if I can use a Chromebook full-time maybe I can use an iPad.

The iPad Pro appealed to me because of size and weight, long battery life (better than a full day for my normal use), high-quality display (I have old eyes), security, and the many iOS applications available.

I’ve been able to use the iPad Pro for all of my work, and I’ve started to prefer it, but using an iPad meant changing my workflow and making some compromises.

Whether or not you can use an iPad Pro most or all of the time depends a lot on what kind of work you do. I won’t say it will work for everyone, but it works for me because I have fairly simple requirements. I live mainly in Thailand but travel quite a bit, but I work for companies in the US. I mainly do remote programming (working on legacy software with some new development) on web sites, with a lot of system administration work managing servers. The systems I work on either can’t run locally on a laptop or desktop, or getting them to run in that environment would take too much work. Since I usually have four or five active projects at a time trying to run them all locally takes up too much time, and I risk getting things working locally that don’t work when deployed to the live server. I used to run web sites locally on my last MacBook, and then did that for a while on the Pixel (using Crouton to run a full Linux distro), but too many systems I work on just don’t run on a laptop.

My clients normally have their code running on a cloud server (AWS, Rackspace, Digital Ocean, etc.) under some flavor of Linux. If they don’t have their code under source code control (git or subversion) when I take them on I set that up with a private GitHub repo. If they don’t have a development/staging environment I set that up too, usually on a separate server that duplicates their production environment with some features turned off (e.g. outgoing emails, credit card transactions).

How I work

I use ssh to access the servers and work from the command line. I have decades of experience with Unix/Linux and command line tools (grep/ack, screen/tmux, etc.) and editor (vim) so I feel right at home working in a terminal and shell. I have tried cloud-based IDEs like Cloud9 and CodeAnywhere. They work but can get very slow and hog up resources (because they run in JavaScript). Cloud9 works great on my Chromebook but not so well on iOS — I stopped using it shortly after I switched to the iPad. I don’t really like IDEs but I think cloud-based IDEs like Cloud9 (owned by Amazon) have a lot of potential and I expect they will continue to improve. I use repl.it for testing out bits of code, and that service has started to add IDE-like features and even web application hosting.

My work time breaks down like this, on average:

  • 50% communicating with clients, translating their requirements into actionable, incremental tasks, researching solutions.
  • 25% reading code, my own, legacy code I inherited, and code from programmers I’ve hired.
  • 25% writing and testing code.

The main tools I use on the iPad Pro:

  • Inbox (GMail client)
  • Skype and Hangouts
  • Slack
  • Blink (ssh client that support mosh, a real timesaver)
  • Working Copy (local copies of git repositories)
  • CodeHub (GitHub client)
  • Textastic (code editor with Working Copy and sftp)
  • Dash (offline documentation)
  • Google Drive, Sheets, and Docs
  • Google Keep, for notes, to-do lists, saving web sites

I have written on my web site about the importance of communicating with clients and keeping work visible. I mainly use email for that, with occasional phone calls. For larger projects I try to get my clients to use GitHub issues, but my clients tend to prefer email, Slack or chat (Hangouts or Skype), and phone calls, and I don’t try to force them to accommodate me — I can copy/paste an email into GitHub in a few seconds.

Where the iPad Pro shines

  • Fast. Very fast.
  • Great display.
  • Smart keyboard surprisingly good, and it resists spills.
  • Single app at a time helps me focus on one task (I keep notifications turned off).
  • Great battery life, charges fast.
  • Light, can easily carry all day in a messenger bag.
  • Apple Pencil cool for some things, like annotating PDFs (I don’t draw or do design work).

Where the iPad Pro gets clunky for programming

  • I really want a trackpad (or mouse) sometimes. Touchscreen, even with the Pencil, doesn’t have the fine resolution I’m used to.
  • Awkward text selection. If I didn’t mainly use vim over ssh I would have given up on iOS for this reason alone.
  • Password management not as smooth as OSX or ChromeOS (I use LastPass).
  • Multitasking not as good as laptop OS (but not as distracting either).
  • Gesture overload — I can’t remember all of the gestures or get them wrong.
  • Auto-correction and auto-completion set globally, sometimes enabled when you don’t want them.
  • No escape key on the Smart Keyboard, a minor hassle for vim users (but easy to work around).

Programming workflow

Normally I work on code that lives on a remote Linux server, under git control, and I have ssh/sftp access to the server and to the GitHub repo. With that setup I have a couple of workflows.

First, I can use Blink to connect with mosh or ssh to the server and work from the command line. I normally work in this mode since I’m used to it — I worked mostly from a shell on MacBooks and my Chromebook too. You can find several ssh clients for iOS, they all work. I used to use Prompt from Panic but I like Blink because it supports mosh (more on that later).

Second, I can pull a whole git repo into the iPad using Working Copy and look at the code there, or use the Textastic editor to change code. Then I can commit and push my changes or sync changes over ssh (a new feature in Working Copy that actually hasn’t worked for me yet, but the underlying rsync protocol works so I have confidence). Assuming I have a fairly recent copy of a repo on the iPad I can work offline with Working Copy and Textastic, but obviously I can’t run or test my work. [I have since found out that Working Copy doesn’t use rsync to sync a local repo with a remote.]

A note on mosh vs ssh and remote sessions

I don’t want to waste time hunting for and hassling with wifi at hotels or coffee shops so I usually use my phone as a portable hotspot and pay for 4G data wherever I go. Plans with big data allocations don’t cost much in most places, and since I mainly work with text over ssh I don’t use a lot of data anyway. mosh enhances ssh connections so they work better over connections with latency or that cut in and out, keeping me online even if I ditch a coffee shop’s wifi and switch to my phone. I also use screen and tmux on the remote servers to keep multiple terminal sessions running when I disconnect. I can close the iPad and walk away and resume my session later exactly as I left it, even if I switch to my laptop.

I have a low-end GCE server at Google’s Taiwan data center I pay for (practically free), it runs mosh and ssh and I have all of my keys and server connections there. I’ve found that I get better and faster connections going to that server from my iPad (or laptop) with mosh/ssh, and then using ssh to my client’s servers, which run in the US. Kind of like a VPN. I can install whatever tools I want on my own server.

What I miss

Most of all I miss Chrome’s developer tools. I use those for debugging problems with HTTP headers, testing JavaScript/jQuery, and tweaking HTML and CSS. The MIHTool app gives me some of this functionality but it’s not as smooth or powerful as Chrome. I would love to get Safari’s developer tools in iOS.

Postman, for testing and experimenting with APIs. I can do much of the same thing with curl from the command line, but Postman’s collections make API testing almost fun.

Simple image editing. Something like Preview on OSX would work great for me. I don’t do graphics work but I do get images from clients in the wrong size or format. I can do this with the iOS photo editor but it seems like all of the graphics tools for iOS target photo editing, not resizing a logo or banner ad or converting from Illustrator format to PNG.

I use my Chromebook when I need to use the developer tools and test APIs.

iOS development on the iPad?

Despite Apple releasing the excellent Swift Playgrounds learning tool for the iPad, I don’t think it’s possible to develop iOS apps on iOS — you need a Mac. I have read rumors that Apple has iOS development tools underway. Not an issue for me since I don’t write iOS apps, but a dealbreaker for iOS (or Android) developers.

Why not the 12” MacBook?

The iPad Pro with Smart Keyboard weighs almost as much as the 12” MacBook, and they get similar battery life. But the iPad Pro has a faster processor and a better display, and costs hundreds less than a MacBook. I compared the MacBook to the iPad Pro several times and found the MacBook’s keyboard harder to use (surprised me too). Even after the last refresh the MacBook 12” still feels sluggish, whereas the iPad Pro seems very fast – the A10X processor beats the i5. And I already have a laptop, I wanted to try something different.

Acknowledgments

I didn’t think up this workflow on my own, though I was using ssh to remote servers from my Chromebook and MacBooks before I switched to the iPad. Other people have written good accounts of programming on an iPad:

The iPad Pro as main computer for programming — Jannis Hermanns

Coding on an iPad — Marc Hedlund

Can You Write Code on an iPad? — Andrew Brookins

Hey Apple, I Tried The iPad Pro As A Dev Machine. It’s Almost Awesome — Stuart Hall