This weekend I attended CocoaConf DC. It wasn’t the first CocoaConf I’ve attended, but it was the first I could drive to. And it was the first one I spoke at! It was a great weekend. Here are some highlights that I took away.
Applying Functional Insights without Losing Swift
“Even more important than reuse is comprehension. It’s possible to reason about small pieces of software in ways that can’t be done on large, monolithic code bases.”
That’s from Rob Napier in the first talk of the conference, _ Learning From Our Elders: Applying Functional Insights Without Losing Swift. _The quote is nice and succinct and helps hammer home something I’ve been thinking about in my explorations of app architectures. I’ve been working to make my view controllers more componentized, more composable, and more reusable. In reality, I don’t think many of them will ever get reused–but that’s not the point. If a component is easily reusable, it’s likely to be small enough and tightly-focused enough to be easily understood. He also gave some well-worded synonyms for functional concepts in Swift. An optional maybe has a value. A product type is an “and type,” as in a
struct contains this member and that member. A sum type is an “or type,” as in, an
enum may be this value or that value. It was a great talk, and I’m happy to say it won the straw poll for best talk at the conference.
Performance Tuning and Swift
Mark Dalrymple talked about performance tuning Swift applications. What I found most interesting was the impact of existential containers on performance. If your first thought is, “What the heck’s an existential container?” don’t worry, you’re not alone! An existential container is the little memory box that the Swift compiler puts protocol types into. Meaning, if we have a protocol
Foo, the existential container is the little bit of memory that can include or reference all the possible types that can conform to it, both value types like
enum as well as the reference type
class. What’s neat about this is that the memory box has three words for storage. Class instances use one word just for a pointer to the instance data. And large structs do the same thing. But small structs — those with three words or less of storage — they’re stored right in the existential container! Boom. Big speedup.
The Relationship Between Agility and Expertise
The conference was keynoted by Ken Auer, who spoke on the role of expertise in software development. Working on the thesis of, “Why didn’t objects fix everything? Why didn’t best practices fix everything? Why didn’t agile fix everything?” Mr. Auer decides that it’s because we haven’t focused enough, as an industry, on thinking about the differences between skill levels of our team members. While experts perhaps obviously seem to reduce the complexity of a system, it’s less obvious that the “advanced beginner” may inadvertently be introducing complexity into systems. Which isn’t to say we shouldn’t hire them or mentor them; we all started at the beginner level! But Mr. Auer’s thoughts on ranking skill level and considering the right mix for your team are a valuable contribution to any organization trying to perform at its highest.
Throwing MVC and MVVM Halfway out the Window
I gave my talk, Unidirectional Data Flow in Swift , during the last session of the conference. I pitched it before we broke out into our sessions as throwing MVC and MVVM halfway out the window and replacing them with some techniques that have been thriving in the front end web development community. I may have forgotten to warn attendees that I’d be reciting 18th-century Scottish poetry to go along with it. My slides are linked above, and you can read more about my thoughts on the topic in my prior blog post, _ App Coordinators and Redux on iOS _. I had a great time presenting and am very grateful to everyone who came to the talk. I’d like to say that was the highlight of my trip, but…
I had the pleasure of meeting Jonathan Mann , who’s written a song each day for something like eight years straight. He sang to us at the end of each day, but it was Friday night’s song that really had the crowd grinning. Such a great time!
See you soon at another CocoaConf!