Settings

Theme

Show HN: Learn Swift

books.aidanf.net

238 points by aidanf 11 years ago · 58 comments

Reader

aidanfOP 11 years ago

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

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

  • BuckRogers 11 years ago

    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 11 years ago

      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 11 years ago

        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 11 years ago

          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 11 years ago

            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.

      • x5n1 11 years ago

        there is nothing wrong with py3. some people just want to be ornery.

    • Lofkin 11 years ago

      Take a look at julia!

  • tjl 11 years ago

    It looks like you're looking at an earlier version of Swift at least based on the fact that you're talking about Xcode 6.1 at the start. If you're covering 1.2, you probably should update that.

    • aidanfOP 11 years ago

      Thanks. The code is 1.2, but the Xcode references are out of date. I'll update soon, I'm also going to update the whole thing to Swift 2 when it's released.

  • geuis 11 years ago

    Would you mind removing or moving all of the position:fixed stuff on the left? Makes it impossible to read the site on mobile.

    • aidanfOP 11 years ago

      Was it the share buttons? I tested these on iphone and they dropped to the bottom of the page. But it looks like they only do this for phones below a certain resolution. So I've removed them.

      • geuis 11 years ago

        Yep yep. Just put em somewhere where they're static, or use a media query to position:static on < 768px. Excited to read the book now. =)

  • rshaban 11 years ago

    "For anyone who has been programming in a modern language such as Ruby [1995], Python [1991], Clojure [2007], Haskell [1990], etc, and who was put off developing iOS apps by Objective-C, Swift marks a new era."

    You say modern but I don't think it's really what you mean here.

    Your descriptions of Ruby vs Obj-C make it seem that really what you mean is high-level; that is, to a newer programmer, easier.

    These languages (Haskell excepted) make it very easy to do simple things. Describing them as "modern" in contrast with the implicitly antiquated Obj-C makes it a little hard to take your assertions seriously.

    Verbosity is a claim to make, age is not.

  • lsjroberts 11 years ago

    Thanks for sharing it :) just fyi, the .fixed header overlaps the content making links unclickable if they are in the top part of the page

    • aidanfOP 11 years ago

      Thanks for letting me know, I hadn't noticed that.

      • brador 11 years ago

        The ebook is great, but it's missing complete start to finish examples. Pad it out with them and you could double the price (and it would be massively more helpful!). Maybe a todo app, flappy bird clone, etc.

        • aidanfOP 11 years ago

          Thanks for the suggestion. I think I'll add another chapter at the end that walks through a longer example start-to-finish.

      • sswaner 11 years ago

        Not sure if you have a better method for getting feedback. First sentence in 12.6 has a minor typo: "“Subscripts allow you *do define a way of allowing your class”

      • CornishPasty 11 years ago

        I believe you just need to remove 'margin-bottom: 2em;' from .top-bar in styles.css

        • aidanfOP 11 years ago

          Thanks, I'll try that. Although I'm reluctant to clear the cache until it goes off the HN front page :)

  • NicoJuicy 11 years ago

    With what did you create the ebook?

  • antoaravinth 11 years ago

    Online version of reading has complete book?

ashwinl 11 years ago

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

http://www.objc.io/books/fpinswift/

No affiliation to the author/book.

Zaheer 11 years ago

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

http://www.LearnSwift.tips

Tloewald 11 years ago

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?

  • aidanfOP 11 years ago

    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 11 years ago

      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 11 years ago

        Isn't Double just a bigger floating point number?

        • addandsubtract 11 years ago

          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 11 years ago

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.

drussell 11 years ago

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

davnicwil 11 years ago

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! :-)

  • aidanfOP 11 years ago

    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 11 years ago

      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 11 years ago

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

yla92 11 years ago

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_ 11 years ago

    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 11 years ago

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 11 years ago

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 11 years ago

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

mayrund 11 years ago

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

npalli 11 years ago

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/...

  • aidanfOP 11 years ago

    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.

Keyboard Shortcuts

j
Next item
k
Previous item
o / Enter
Open selected item
?
Show this help
Esc
Close modal / clear selection