It's five years ago this month that I bought myself my first macOS (then OS
X) device. After many years of having a Windows machine as my daily driver,
which was also my work machine (I worked from home), I decided it was high
time that I returned to having a Unix-a-like system on my desk too. For a
decade or so, starting in the later-90s, I'd had a GNU/Linux desktop. I
still had a Windows desktop (until a couple of years ago most of my work was
on DOS and Windows), but thanks to the wonders of a KVM, and later an X
server that ran on Windows, my personal hacking was done on a GNU/Linux
desktop.
But as things moved around, priorities changed, as life moved on, the
GNU/Linux boxes got retired and never quite replaced. Eventually, in 2015, I
found myself with the means and desire to recover that sort of setup. Long
story short, after a lot of reading up and weighing up options I decided
that the best option for a desktop Unix was... an iMac!
I loved it. Sure, there were lots of little things on the surface that were
different or annoying or just plain not as cool as the Mac fans would tell
you,
but under the hood I found what I needed: a Unix CLI with all the things I
knew well. And, of course, it ran GNU Emacs just fine; that was the really
important thing for me.
Pretty much right away I decided that it might be fun to learn the tools
necessary to develop native Mac apps, and perhaps even iOS apps. I
downloaded XCode, bought a book, and started working through it. Having got
that book, I decided it might be interesting to own an iOS device too. So,
sort of needing an MP3 player, and having no wish to get an iPhone, I got
myself an iPod
Touch. So I
was all set to devour the Swift book, write some stuff for OS X, create an
iOS app or two, and... life happened. Stuff cropped up that distracted me
from taking that further and I never really returned to working through the
book.
Fast forward to now and that initial iMac and iPod purchase spiralled a wee
bit. Next after the iPod was an iPad Mini, when my Nexus 7 was starting to
show its age and it was obvious that Google wasn't going to produce any more
good Android tablets. Then, when I needed a very portable Unix-a-like
machine for trips between where I was living and Edinburgh, I got myself a
MacBook Air.
Since then the iPod Touch has been replaced once, as has the iPad Mini. I
now also own an iPad and a MacBook Pro. Unless Apple screw up and turn Macs
into something unusable for developers (there are rumours), I imagine I'll
be using Apple devices for some time to come now.
And then, last month, having finally got frustrated with where Google were
going with Android and the Pixel series, I jumped ship to the iPhone 11.
As of right now I'm in a situation where I'm all about the Apple ecosystem
regarding hardware and operating systems (including for my work machine),
all of which is there to support my heavy use of the Google ecosystem
(actually, the one bit of Google hardware I still lean on heavily is the
Google Home -- I have 3 around my home).
So... given all of that, I thought it was time to look at returning to
learning Swift, with a view to writing some native macOS and i(Pad)OS stuff.
I soon realised that the book I'd bought back in 2015 was rather out of
date. It covers Swift 1.2 -- we're now up to
5.2!
Given this, and given I've forgotten pretty much everything I'd read at the
time, I decided I should start again from scratch.
This weekend I've started reading my way though iOS Programming
Fundamentals with
Swift.
While this obviously has an emphasis on iOS, I'm already finding that the
first part of the book is a really great introduction to the Swift language
in general. The pace seems just right, and the way topics are grouped makes
it easy enough for me to skip over what's obvious (I don't need to know what
objected-oriented programming is, and what the difference between a class
and an object is, etc) and read up on the detail of this particular language
when it comes to general concepts I know (knowing the differences between a
class, struct and enum in the language is important, for example).
I've yet to write a line of code, but I'm fine with that. The book is
spending a lot of time introducing the language before encouraging you to
fire up XCode, and I'm okay with that. I'm never a fan of being asked to
write out code that I can't properly follow -- that just makes stuff look
like magic when it's far more educational to know what's going on. What I am
finding is I'm making lots of notes that are either "oh, yeah, this is
cool, I like this idea!" or "WTF are you kidding me?!?". Which is really
nice -- it's always great to learn a new language that's a bit different
from what you normally use.
My plan then, over the next few weeks, it to keep at this and hopefully
document my journey. I think I'd like to write a short series of TIL-type
posts; nothing too long, just some new thing I read or discovered and my
reaction to it. So, if you happen to follow this blog, I apologise in
advance for any Swift-spam.
You have been warned. ;-)