26.
An Interview with Tanner Wayne Nelson
Written by Enrique López-Mañas
Tanner is an American software engineer based in New York City. He started programming in elementary school and went on to study Computer Science at New York University. Tanner created Vapor in 2016 and now works full time maintaining the core framework and the dozens of packages around it.
Connect with Tanner
Twitter: @tanner0101
Interview
You are the creator of Vapor, a very popular web framework. Tell us, how does Swift, a language originally conceived for a mobile platform, perform at scale for web development?
Swift is a wonderful language for web development. It strikes a unique balance between simplicity, safety, and performance that set it apart from other popular languages in the field. If you compare Swift to interpreted languages like PHP, Python, and Ruby, its performance will be unmatched. This is one of the huge benefits of being a compiled language. When you compare Swift to other compiled languages, like Java, Go, and C#, performance is more evenly matched, but Swift’s expressive syntax and advanced type system shine. The ecosystem is still very young though and has its rough edges. We’re definitely in this one for the long haul.
JetBrains is also experimenting as well with Kotlin/Native. What are your thoughts on cross-platform development? Will there ever be a Holy Grail that lets you develop once, and deploy anywhere?
I think there is room for code sharing—libraries and frameworks written in Swift or Kotlin that can be shared between mobile and backend projects, for example. However, I don’t think there will ever be a good one-size-fits-all solution to developing for different platforms. In my opinion, a much better approach is to use the best tool for a given job. I think this is a big reason why the micro-service pattern has become so popular lately. Backend teams that utilize multiple frameworks and languages to solve problems can pick and choose the best tool for each situation.
How do you keep an open-source project successful at scale?
I think the main key to success in open source is embracing the community. This is something Vapor has prioritized since day one, and we are constantly trying to improve. A few examples come to mind. First, giving the project a simple, open license, like the MIT license. Creating a space where people interested in the project can communicate freely is key, as well as discussing the project’s roadmap openly and always asking for input. You also want to make it as easy as possible to report bugs, request features, or submit code. And when someone does contribute, it’s important to reward them with appreciation and status.
For those folks interested in free/libre and open-source software (FLOSS) but who haven’t yet taken a step into this world, what would you recommend as a first step for them? In what ways do you find participating in collaborative FLOSS projects benefits people, career-wise?
If you haven’t yet delved into the world of open source, the first and hardest step is probably getting over the fear of posting your code publicly. There could be some embarrassing mistake you made in your logic or maybe people will think your idea is dumb, right? This was true for me at least. And, as it turns out, I did make a bunch of embarrassing mistakes and some people did think my ideas were dumb. But the vast majority of people were extremely kind and helpful. They helped me improve my code and taught me so much along the way. I feel that I’ve learned more in these past three years working on Vapor than I have at any other point in my career. It’s the people that make OSS awesome. Anyone willing to devote their free time to contribute to open source must be quite passionate about programming, and that passion is inspiring.
So my advice would be: don’t worry too much about it, just post something—anything. The sooner the better.
A lot of the work you do happens remotely. What do you find are the best approaches for collaborating successfully with remote teams or people working remotely in very different time zones? Are there any tools that make your life easier in this respect?
For the core team, at least, having clear ownership over specific features or projects have been incredibly helpful. This reduces the amount of communication needed between us to complete tasks and minimizes blocking due to time zone differences.
However, Vapor is much larger than just the core team. We have taken code contributions from well over a hundred developers already, and the number grows every day. Luckily, GitHub provides a lot of great tools for collaborating on this scale. Our main strategy here has been to just keep things as simple as possible. We use many of GitHub’s advanced features like Milestones and Projects instead of bringing in new tools like Trello or Jira. We also make sure that all of our developer resources, like our command-line interface, website, and documentation, are open source and just as easy to contribute to as the core framework.
What is something you wish someone had told you back when you started software development that you had to learn the hard way instead?
I was really into web development when I was in middle school, using languages like HTML, CSS, JS and later PHP. When I was starting high school around 2008, I remember watching WWDC keynotes, wishing that I could create iPhone apps. But Objective-C looked terrifying to me and I knew for sure I would not be able to learn it. Years later, and thanks to Stanford’s amazing, free iOS lectures, I finally came around to giving Objective-C a shot. I immediately fell in love with iOS programming and it became one of my biggest passions for years to come.
I regret that it took me so long to gain enough courage to try, and I wish I could go back in time to tell myself: “Hey, it’s not so hard actually, you can do it.” Even after this lesson, and numerous more throughout my life, I still find myself doubting in my ability to learn new things. Luckily, it gets easier to overpower the self-doubt over time.
“As programmers, we stand on the shoulders of giants—the levels of abstraction between a web programmer and the logic gates on a circuit board are incredibly deep and complex.”
Are there any resources that have also impacted your work?
A few come to mind. C Programming Language by Brian W. Kernighan and Dennis M. Ritchie; Structure and Interpretation of Computer Programs by Harold Abelson, Gerald Jay Sussman and Julie Sussman; and Beej’s Guide to Network Programming by Brian Hall.
As programmers, we stand on the shoulders of giants—the levels of abstraction between a web programmer and the logic gates on a circuit board are incredibly deep and complex. I think it’s safe to say that no single person in the world understands everything from top to bottom. We learn a single abstraction layer well and spend most of our time being productive there. However, sometimes it’s fun to take a peek behind the curtain and learn more about how these abstractions we use everyday work. Sometimes this knowledge can even come in handy.
Are there any current industry trends that you think are just plain wrong?
I find Google Chrome’s ever-growing market share to be quite concerning. As it continues to rise, Google gains even more power to dictate how the web should work. This does not bode well, especially after seeing Google use its search engine’s market share to push their terrible Accelerated Mobile Pages (AMP) tech. Recent developments, such as Microsoft replacing their EdgeHTML engine with Chrome, show no sign of improvement. People should give browsers besides Chrome a chance before it’s too late.
In terms of preparing to do your work, how do you start your day off with a bang? Do you have any secret morning routines that set you up for success?
I wake up early and exercise every day. Programming is an incredibly sedentary job and you need to counteract that if you want to stay happy and have energy.
How do you stay highly productive in your work for long periods?
I think taking breaks from long projects is critical to keeping quality and creativity high. If you’re finding it hard to “get into the zone” for a certain task, put it on hold and do something else that excites you for a bit. Maybe there’s a side project you’ve been neglecting or a new framework you’ve been wanting to learn about. After the break, you’ll come back to the problem with a fresh mind, and potentially a better solution.
Tanner’s Recommendations
-
C Programming Language | Brian W. Kernighan and Dennis M. Ritchie
-
Structure and Interpretation of Computer Programs | Harold Abelson, Gerald Jay Sussman and Julie Sussman
-
Beej’s Guide to Network Programming | Brian Hall