
Show HN: Learn Swift - aidanf
http://books.aidanf.net/learn-swift
======
aidanf
I've been learning Swift in recent months, and as part of that process I wrote
a short book about the language.

It's aimed at developers (like me) who can already program in a language like
Ruby or Python and are looking for a quick tour of Swift.

It's available to read for free online at [http://books.aidanf.net/learn-
swift](http://books.aidanf.net/learn-swift)

I'll be adding stuff about yesterdays announcements in the next couple of
weeks.

~~~
BuckRogers
Great timing on the post. I'm a Python(2) user who is always on the lookout
for the next language to jump to since I'm never moving to Python3. With Swift
on the server and iOS, and being a very pleasing language similar to Python,
this will be what I study next as I look to migrate off Python2 as it dies
(which itself may take a while). Thanks for posting this.

~~~
FungalRaincloud
Out of curiosity, why are you avoiding Py3? I've not touched python in a
couple years. I was thinking of taking it back up, just to be more familiar
with it.

~~~
BuckRogers
As the other guy who replied said, there's nothing explicitly wrong with it.
But it's not to be ornery. I think it only appears that way to people who
haven't thought it through. I don't owe GVR or the core dev team anything.
Certainly not thousands of man-hours to make their new, unnecessarily breaking
version of Python3 to be successful. It's that going from Python2, it's mere
technical churn. Python3 has zero technical innovation. It's just a different
way of doing certain things, nothing more. Unicode was supported in Python
since 2.6. Print was a statement rather than a function. Std lib cleanups. So
what? Bigger fish to fry in the world than that. All of the new features, can,
and do work on Python2 in the form of backports.

It breaks everything I've ever written, for no good reason. I also end up with
a much smaller pool of libraries to choose from for new projects.

It makes no sense. In a microcosm of the universe where Python was the only
game in town, Python3 would have worked out. Instead of moving to 3 and losing
many advantages for churn, I can just go spend time with something else. Swift
is pretty what I'd design if I could pick and choose features, so it's perfect
for me- excited I'll be able to use it serverside while simultaneously
learning the language for iOS.

Also, people frequently cite that moving from 2->3 is easy. It is. But they
somehow forget that testing old, large projects is extremely labor intensive
and always results in breakage. Unless you have 100% test coverage, which I
know no one who does.

~~~
FungalRaincloud
Interesting points, I'll keep them in mind. I don't really have to worry too
much about making old code work, so I'd not be too concerned with that. I'll
probably start with Py3 because I don't really expect to rely on too much
library support for the things I'd cobble together in python.

As far as unit testing goes, you are absolutely right. I unit test
everything....I mean, I was taught TDD right out of the door at Uni, and
though I don't exactly follow the methods strictly, I am at my core, a
functional programmer. I want every last bit of code I write to do one and
only one thing well. I, therefore, test all of those functions, no matter how
mundane. But you know what? Even then, my test coverage on a good project,
where I'm not just dicking around probably hovers about 85-95% coverage.
There's just always some flotsam and jetsam that escapes the tests. First time
I worked on a project with a team, I stressed my head off because of that very
fact, until we did our first metrics review and I saw that I was actually
ahead of most people....

~~~
BuckRogers
And also, you'll find more bugs in Python3 libraries. They're being used less
than Python2 libs. That, and the long tail of libraries that may never get
moved to Python3. There's really a lot of reasons to not use 3, or like me,
wait to see if it ever really overtakes 2. A 3rd extra reason if you needed
any more, is that almost all jobs in the field use 2.x. I tried to love
Python3, but the technical reasons just don't make sense to migrate, and once
you meet the coercion and vitriol of the Python3 community, you'll learn to
resent its existence and them.

The future of Python2 is actually very bright, while 3's is in jeopardy.
That's why everyone is so pushy about it, they lose their bet if it never gets
over the hump. Being as 3.0 was released in 2008 and it's now 2015, I honestly
think that answer is already here.

Using 2, then switching to 3 if it ever does overtake it makes a lot of sense
and is the sensible bet. But 3.x overtaking 2 anytime soon is really unlikely,
and library worth anything will be 2+3 compatible and dropping 2 support would
just be asinine with the ~83% userbase it holds today.

Even if Python3's userbase _doubles_ in 5 years, it'll still be under 50% of
the overall Python userbase. And I think doubling its current usage would be
overly optimistic. Python3 will either collapse, or split the community
(already has to a degree) with someone forking Python2 for good. Pyston may be
that fork, or a couple other contenders.

The situation is a disaster all around. For Python and the community.
Companies in some cases now aren't putting new product down in Python because
of this. You'll be alright using 3, because no matter the final outcome you'll
be able to go back to 2 without issues and vice versa. I only recommend 2
because you won't be missing _any_ libraries if you use it, and if you want to
do it for a job you'll be using 2.x anyway.

Python3's biggest purpose is giving people a reason to hassle maintainers to
port to it. They bite on the political propaganda surrounding 3, that it's the
"newest version", which for programming languages is not always in best
interests of the user unlike an up-to-date web browser. Then when they find
out x doesn't work or exist in 3, they badger whoever wrote a library for 2 to
port. Those people really need to port it themselves and maintain it
afterwards. They don't, and it's just an ugly situation.

For example, you can build iOS/Android apps using Kivy. Guess what, can't
build for iOS unless you use 2.7! Just lots of surprises out there for those
who start off wanting the "latest version". It's not the latest version, it's
a new, breaking language. If you end up doing much cobbling with Python, this
may be of interest to you.

I have my doubts 3 will get over the hump, and just plan on waiting till the
complainers turn into maintainers and 99% of everything is ported. Then I'll
use Python3 if I don't find something else I like more before then.

------
ashwinl
I'd highly recommend Functional Programming in Swift for more intermediate
topics. By Eidhof, Kugler, and Swierstra

[http://www.objc.io/books/fpinswift/](http://www.objc.io/books/fpinswift/)

No affiliation to the author/book.

------
Zaheer
Shameless plug - I made a site that gathers resources for learning Swift. Will
be adding this shortly :)

[http://www.LearnSwift.tips](http://www.LearnSwift.tips)

~~~
bigtunacan
Cool. Bookmarked.

------
Tloewald
I like the style, brevity, and practicality of the book (at least the first
few chapters; haven't read it all yet). Good stuff and good luck with it.

I did find the first few examples with the REPL to be a bit confusing. Were
you using a function before it was defined?

~~~
aidanf
Thanks :) The REPL example with the error has a deliberate typo (int instead
of Int) to show how multi-line editing works in the REPL - is that the part
you're asking about?

~~~
Tloewald
I was referring to this:

$ swift Welcome to Swift! Type :help for assistance. 1> 3.14 * 2.5 * 2.5 $R0:
Double = 19.625 2> println("The area of the circle is \\($R0)") The area of
the circle is 19.625 3> 4> $R0 * 2 $R1: Double = 39.25 5> println("And double
that is \\($R1)") And double that is 39.25 6>

What's Double? Trying to follow this (which didn't make sense to me because I
didn't know the history stuff was there) simply caused error messages.

~~~
_s
Isn't Double just a bigger floating point number?

~~~
addandsubtract
Right. A double has twice the precision of a float (hence the name). It's also
the default floating point data type in Swift.

------
psophis
Slight tangent, but are there any recommended guides/books/videos for leaning
the iOS frameworks with swift?

I have recently started programming on iOS with swift. I got my head around
the language just not any of the frameworks, specifically UIKit.

~~~
tjl
I love the Lynda.com videos on Swift and iOS. The latest Stanford iOS course
uses Swift and is excellent.

------
drussell
This is very helpful. Thanks for sharing! Great that it's free too :)

------
davnicwil
This is fantastic, just what I was looking for, a very quick intro to swift
that assumes I'm already a programmer.

The Apple docs, at least last time I tried reading through them, were like
wading through treacle so this is a great alternative! I just read the first
couple of chapters in 10 minutes and got all the key info I wanted with no
fluff - great job!

One edit suggestion - I've noticed a couple of times so far that "it's" is
used incorrectly, for example in this sentence:

> You can’t change the type of a variable once you’ve declared it. It’s type
> is fixed at the time it is declared.

I assume you know the error here but on the off chance you don't:

it's = it is (it's a Bool) / its = the possessive of it (Bool is its type)

It's a little jarring so you might want to go through and fix these.

Cheers for the book! :-)

~~~
aidanf
Thanks for that - I'll fix the errors you've listed. I know how to use its and
it's, and I've proof-read the book several times, but there's still a good bit
of stuff like this that I've missed.

It turns out that it's really difficult to proof-read large blocks of text
that you've written yourself :/ When your brain sees something it recognises
it tends to speed up and skip over bits, seeing what it wants to see, thus
missing stuff like this.

~~~
davnicwil
No probs, and great choice of model by the way, offering the web version for
free.

For learning a programming language I actually prefer the web format to the
ebook. Now I've figured out how useful this book will be by reading a few
chapters, I'll certainly purchase a copy anyway, $12 is more than reasonable
for the value this provides!

------
numbers
In Chapter 4, you have a typo: "dynamicly" should be "dynamically"

~~~
aidanf
Thanks, fixed.

------
yla92
I love this. Btw, totally off topic : Is it possible to write iOS/OSX apps by
learning Swift without the knowledge of ObjC ? My background : I know some
Java/Ruby and do some Android apps.

~~~
Cthulhu_
It is, but you'll still need to learn about the memory management in
objective-C (retain / release and such, although that's been made a lot easier
over the years, pushing it back to being background knowledge) and - perhaps
more importantly than the actual language - the frameworks, environment and
tooling (Foundation, UIKit, iOS application basics / lifecycle, view
hierarchy, XCode, Interface Builder, and background knowledge like
accessibility and such).

But yeah, go with Swift, it's closer to Java than Objective-C is.

------
brisance
Nice, I'm learning Swift from your site. The kerning for Chapter "10.4" is
killing me though. Other than that I'm enjoying going through it. :D

------
christudor
Have just started learning Swift. Have favourited, and will be sure to give
some feedback once I've made my way through the whole thing. Good luck with
it!

------
rashthedude
Hi Aidan, your about Author section has a typo says'bulding' rather than
building.

~~~
aidanf
Thanks, fixed.

------
mayrund
Looks awesome! Thanks for your time I will definitely look into it deeply
soon!

------
npalli
Sorry, but this guide is not as comprehensive or updated as the official
documentation [1]. Just compare the generics or memory management sections to
see why you would want to read the official documentation. Maybe a high level
tour of swift but you certainly are not going to learn swift with this guide.

[1]
[https://developer.apple.com/library/ios/documentation/Swift/...](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/)

~~~
aidanf
You're right - it's not as comprehensive as the official documentation, nor is
it meant to be. It's a quick tour of the main language features, with a
particular emphasis on the parts that I (as a ruby, python, clojure dev) found
interesting.

For comparison, the Apple book "The Swift Programming Language" comes in at
334 pages. "Learn Swift" comes in at 128 pages.

