OUR WORLD ▸ Nothing works? ▸ Autolayout, View hierarchies, Threading, Networking, Dependencies... ▸ PC Load Letter?! (If you’ve seen Office Space, you know what this means)
TEMPTATIONS ▸ I’m having problems with this, maybe I should try... ▸ My friend said X is awesome, I’m going to use it! These are not necessarily bad, but doing things in the heat of the moment is usually a bad idea.
MY BACKGROUND ▸ I’ve been a professional programmer since 2010. ▸ I’ve always been a contractor. ▸ I’ve worked day rate and hourly. ▸ I’ve worked solo and in teams. ▸ I’ve spent 12 months pair programming.
WE LEARN TO RECOGNISE SMELLS, WITH PRACTICE AND INTUITION ▸ Repeated code. ▸ Leaky abstractions. ▸ UserDefaults used to store state. ▸ AppDelegate used as a Singleton.
We don’t have to do this sort of thing. We can if we want to, but we don’t have to. This isn’t the Perfect World that was sold to us. Nothing is perfect. We have to find a way to live in the imperfect world.
REMEMBER WHEN I SAID I WAS A CONTRACTOR? ▸ The code I’m working on is usually not started or finished by me. ▸ I don’t want to leave someone else with the constraints I’ve chosen. ▸ I tend to avoid clever code. I use what the system provides as much as possible. ▸ I started working on my own, not in a team, which is why I have opinions.
I LIKE TO KEEP THINGS SIMPLE ▸ I use MVC, The observer pattern, façade, Dependency Injection. ▸ Probably a whole lot of other patterns that I don’t know the names of - I’m not Computer Science educated. ▸ I avoid third party omni dependencies. ▸ I try and use third party code that I understand and can fix. ▸ I sound like an Apple fanboi.
TESTING MODELS AND VIEW CONTROLLERS? ▸ I use dependency injection and TDD. ▸ Swift is really handy for default parameters that allow injection for tests. ▸ I live without 100% test coverage.
VIEW CONTROLLERS DO TOO MUCH? ▸ A view controller is supposed to control a view. ▸ Everything else can get passed off. ▸ Delegation (or even closures) for performing work related to views. ▸ Data sources don’t have to be in the view controller. ▸ Having separate subsystems makes them easier to test.
TOO MUCH GLUE CODE FOR INTERACTIONS? ▸ Swift makes this easier with property observers. ▸ There’s also Key-Value Observing for NSObject based classes. ▸ The functional paradigm that made MVVM and Reactive attractive to me are now available in Swift. ▸ I use Core Data - plenty of change notifications there.
If you work in a team, get them on board, make sure they are enthusiastic, or you’ll spend most of your time justifying your choices rather than using them.
THE BAD ▸ A lot of examples and blog posts are in the perfect world: ▸ JSON Parsers. ▸ Autolayout DSLs. ▸ Generics make code simple, harder to understand at first. ▸ Lot’s of new names, who do you believe?
SUMMARY ▸ Code, examples, talks, all speak of a perfect world. ▸ Our daily work has to survive in the imperfect world. ▸ Don’t just believe the hype. You’ve developed engineering skills: use them.