What I Wish I Knew Before I Jumped Into iOS Part II
If you haven’t read the original post, please read it and come back to this.
In Part I, I wrote about the fundamental aspects of learning iOS development. This part will be more focused on branding and networking via Twitter and Meetup, and the tools and challenges you’ll face.
Join Twitter and Become Part of the Community
I always saw Twitter as a frivolous waste of time. I tend to see social media in general in the same way. You can be sure to find a lot of meaningless updates about people’s bowel movements, an onslaught of selfies, and cute animal pictures. However, Twitter is also being used for more than what one might be inclined to think it’s for. There are pockets of Twitter buzzing with people from certain industries and with certain passions. Engage with this community.
Not only are the most notable members of the community on Twitter, but they are also very accessible. I regularly ask Florian Kugler of Objc.io fame questions via tweet. And despite being one of the smartest people in the industry (and probably one of the busiest as well), he still finds time to answer me.
Finally, Twitter demonstrates to potential employers that you are passionate for the craft and that you are engaged with the larger community. Compound this with a blog, and you create a powerful presence. Employers take notice of this.
Start by following some well-known figures in the community: @clattner_llvm, @chriseidhof, @andy_matuschak, @floriankugler, @ericasadun, @phatblat, @RedQueenCoder, @mitchellporter, oh and some guy named @KacheFlowe.
Join iOS/Swift Focused Meetups and Online Groups
Join various groups both online and offline. In software development we tend to think most engineers earn their positions through pure merit. This is half-true at best. Networking with other engineers is still essential to professional success. Besides putting you in touch with others who might one day decide to employ you, you will be exposed to engineers with years of experience and different styles of thinking as well. You will learn, and just as important, you will socialize. We developers and engineers sometimes trivialize the importance of being in others’ presence but there are psychological benefits to being around those who share your passion. In times of professional fatigue or burnout, a Meetup event can revitalize and revive passion.
I myself am a member of the ever-growing and ever-welcoming iOS Developers Slack group (Shout out to Logan Always-Right, Jazbo, Ian Keen, Ryan Arana, Abbey Jackson, and A-Persian). I’m also the founder of Denver’s Swift Heads group. The latter is, most probably, the reason why I have a job now. The former is why I don’t have to consult Stack Overflow as frequently.
Join Open Source Projects
I cannot emphasize enough the value of this. Open source projects are a way for you to learn how other developers superior to you—and me—build things. You’ll learn how to use source control (GitHub FTW), and you’ll see the difference between good and bad code. In many ways, code is like the written word. The more writing you read, the more you can distinguish elegant from poor writing. The same concept applies to code.
Use the following development tools:
A little tip: when using Cocoapods, always read through the code of the libraries you plan to integrate into your own code. You’d be surprised by the number of times major apps were taken down by code they integrated into their own libraries. This advice was first given to me by Kyle Richter, a major figure in the iOS community, who recalled an incident where half of the apps in the App Store failed because they used the same library.
Read, read, read. Always look first to improve your analytical abilities via text rather than video. Videos are great, but you can cover a greater amount of material in a shorter amount of time via text. Furthermore, the classic programming texts do not have corresponding videos. These texts, more than anything else, should be central to your learning because they do something other learning resources don't do: teach you how to think.
Programming is often confused for something that changes when dealing with different subfields. But at their core these languages are all trying to do the same thing: provide the engineer with a means to communicate a solution to a problem. Therefore, at its core, software engineering is about problem solving. And problem solving may take different forms, but the tools required to solve problems are similar across the field.
The following books will strengthen your problem solving skills and should be in your library:
Clean Code by Robert Martin, Programming Pearls by Jon Bentley, How to Solve it By Computer by R.G. Dromey, The Pragmatic Programmer by Andrew Hunt, Code Complete by Steve McConnell, The Mythical Man Month by Frederick P. Brooks, Design Patterns by the Gang of Four, and the classic, Introduction to Algorithms by CLRS.
Learn Swift First, Learn Objective-C Next
Several months ago, I would not have given this advice.
With the open sourcing of Swift, now—more than ever—is the time to develop proficiency in it. Some would argue that Swift still isn’t quite there yet when it comes to stability. While I may agree with some of their reservations, I do not think this should prevent a newbie from taking a Swift-first approach.
This sentiment is only reinforced by the recent proliferation of Swift, its open sourcing by Apple, and the massive stabilization of the language following the release of Swift 2.0. Dropbox’s iOS frameworks are entirely Swift based. Parse is rapidly moving towards having a Swift-only documentation. How long do you think before the rest of the heavyweights follow suit?
Read Apple Documentation
I’m a huge fan of the Ray Wenderlich blog series (and I have many friends who write and work for Ray), but I only consult the blog guides after I’ve read the Apple documentation. You must train yourself to be able to rely on the (sometimes little) information that Apple gives you. Do not become dependent on a particular form of learning; tech blogs tend to introduce concepts step by step. You will need to take a holistic approach to your learning of frameworks and languages. Everything should begin with Apple documentation. In this day and age there are changes made to APIs sometimes daily. I recall moments where my Swift code would work one week, but break the next.
The blogs and other sites will struggle to keep up with these changes. Apple, however, being the source of these, will almost always introduce documentation accompanying these changes. If you’re working on a project for a company or client, you will not have the luxury of waiting until your favorite blog explains the newly introduced information. You will have no other choice but to rely on their sometimes impenetrable documentation. So learn how to parse it.
Listen to Podcasts
I’m a fan of podcasts in general but in terms of iOS-based podcasts, there’s a plethora of goodies to choose from. Once again, The Ray Wenderlich Podcast series is fantastic. In addition, Accidental Tech Podcast and Debug are some of my personal favorites. For those of you who are Swift fans, stay tuned for Swiftcast; my podcast will focus on the changes made to the programming language now that it’s open source.
Listening to iOS-centered podcasts keeps the subject of development in your mind but in a more casual way. You can still think about optionals in Swift, but also geek out about the new Star Wars movie.
Develop Grit, Be Friendly
If there’s one thing you take away from this article, make it this: steel your resolve. Learning development, no matter what kind, is a long, arduous journey. You will fail. Constantly. Do not falter. Do not let it get you down. There is nothing wrong with looking stupid (looking stupid is a daily, regular occurrence for me). I embrace it. Ask for help when you don’t understand. Abandon your pride.
Develop the discipline necessary to obsess over problems and learn to ruthlessly prioritize in order to maximize the energy of your grit. And never, ever let anyone get you down. Remember the following words by William Ernest Henley in Invictus:
“I am the master of my fate: I am the captain of my soul.”
Keep. On. Coding.
I hope you’ve enjoyed this segment. I’d love to discuss any questions or comments you might have. What are some tools or advice that have helped you become successful as an iOS developer?