Stage One Complete: I’m an iOS Developer

Mobile Makers Graduation — 100 Things I learned during, and appreciate about, my 8 weeks of intense, immersive iOS training

Robert Figueras
my iOS Dev Journal

--

I finally graduated. It’s been almost a week now after our open house and submission of our app to the App Store. I’ve had a chance to decompress after 12-14 hour days of intensive coding.

The open house went well and was such a whirlwind of meeting recruiters, showing our app, saying good byes (some tearful) and saying thanks. I realized that there were a lot of things I was saying over and over at the open house and there are some key findings/observations that I learned during my experience, so I wanted to capture them here somehow.

Below is a list of 100 things: things I’m grateful for or things I’ve learned or thoughts I’ve had during my time at Mobile Makers Academy, in a disturbingly random order.

  1. I am an iOS Developer.
  2. Taking the course is a big investment of time away from everything (family, work, etc). It is worth every minute.
  3. Taking the course is a big investment of money (opportunity costs plus tuition, transportation and/or housing, etc.). It is worth every penny.
  4. I would never have met our mentor who gave us insanely great advice and is now an iOS Engineer at Apple without Mobile Makers.
  5. I’m grateful for the friendships I made during the course.
  6. I finally learned what delegation is.
  7. I met and learned from real rock stars, both in the tech world (Max, Don) and in the music world (Aaron).
  8. I played too much ping pong for my own good, but I loved every minute of it. I learned a new type of serve. Look out.
  9. I’ve gained an appreciation of how much it means to submit your first app to the app store.
  10. I finally realize the benefits of, and actually like, agile methodology now.
  11. I’ve learned several “bugs” that are allowed in code but don’t actually work and don’t provide any feedback.
  12. If things ‘just don’t work’, usually the first place to check is if the delegates are hooked up correctly.
  13. Setting the image of a UIButton without calling setImage:forUIControlState doesn’t do anything. Sometimes.
  14. Communication on a team is way more important that “just doing it”.
  15. Git is powerful and simple and can save your butt.
  16. Git is powerful and simple and can kick your butt.
  17. Navigation controllers and navigation bars are easy and still confusing to me. Something to work on.
  18. Parse is awesome. A dynamic Backend as a Service, for free.
  19. There must be a better way to get relational information from Parse rather than chaining calls. Maybe async calls on app launch to get all the data or use caching more explicitly? Something to investigate.
  20. Being on site every day beats the online course, hands down. Learning is exponential that way.
  21. Do as much pre-course work as you can. The more you do, you’ll get even more out of the course.
  22. I need to try to do my own hackwich every day.
  23. I forgot the etymology of hackwich and I need to ask Don.
  24. I have a love hate relationship with XCode.
  25. Scrolling the entire view (versus separate UIControls) when text fields are selected at the bottom of a form is a good way to show the field when the keyboard pops up.
  26. PromiseKit is awesome. I need to make time to use it.
  27. The set up of the Mobile Makers curriculum and teaching methodology is probably one of the most effective styles I’ve ever experienced.
  28. UX drives development, at least with good apps.
  29. I think the best way to debug is to be able to identify what the code is thinking; using log statements to figure out what we are assuming the values of the objects are.
  30. I forgot about Checkmate, but it’s a ridiculously awesome framework (I think Max wrote) that checks that you completed the challenges correctly.
  31. To reinforce MVC, connect outlets and actions to the implementation (.m) file first.
  32. Use segues to pass data forward from one VC to another.
  33. Code Every Day.
  34. UIImage objects can’t be saved in plist files when persisting that plist file in a documents folder. It doesn’t save and doesn’t error. You have to convert it to NSData.
  35. Similar idea about having to save images as NSData to PFfiles for Parse.
  36. Sometimes prepareForSegue gets called first, sometimes it doesn’t.
  37. The Mobile Makers space sure could use some more extension cords and power strips.
  38. The Mobile Makers space sure could use a better wifi signal and a better way to demo apps.
  39. I’m really good at debugging and helping others.
  40. The “not” operator, which is an exclamation point, is referred to as “bang”.
  41. Setting a boolean variable to not itself will toggle the boolean value. E.g. self.boolVal =! self.boolVal.
  42. Writing a list of 100 things is really way harder than I thought. I’ve learned it takes time and thought to write a blog.
  43. Fibonacci series is the series of numbers additive of the previous pair of numbers. ie. 1,2,3,5,8,13,21,34,55.
  44. Fibonacci series numbers are used in estimating story complexity in Agile methodology
  45. I think scrum boards are cool and cool looking.
  46. I learned how to get a gravatar image using a helper class and Grand Central Dispatch.
  47. Modifying UI elements can only happen on the main thread, not a background thread.
  48. “Frustration is good, grit is necessary” — Don
  49. Methods belong to objects. Functions do not belong to anything.
  50. Deselecting “Adjust Scrollview Inset” in Storyboard sometimes helps alleviate the 64 pixel ‘header’ that autolayout automatically puts on all view within a navigation controller.
  51. arc4random_uniform(100) will generate a random number between 0-99.
  52. When you custom initialize objects that were added in storyboard, you have to use initWithCoder.
  53. If you create a custom segue back to an original view controller, it will instantiate a new original view controller. That is why you use an unwind segue instead.
  54. I still don’t know how to skip views correctly in a navigation stack.
  55. In delegation, a class can call methods on it’s delegate without knowing anything about the delegate.
  56. You can pass data between classes using delegation.
  57. You can pass data between classes using segues.
  58. You can pass data between classes using block completion handlers.
  59. You can pass data between classes using NSNotificationCenter.
  60. You can instantiate an object via new]. For example [object new];
  61. I like convenience methods, but sometimes I don’t mind the full versions.
  62. I think when adding background music, AVAudioPlayer *must* be a property.
  63. You should always use #define instead of magic numbers. e.g. #define PIE 3.14159, will replace PIE with 3.14159.
  64. RESTful API calls are stateless web calls.
  65. APIs are normally XML or JSON. JSON is better because it is much lighter and about 1/8 the size.
  66. In the console, while debugging at a breakpoint, you can type po to print out the value of a variable/object.
  67. For a JSON search string, you can’t have spaces. There’s a method to replace the spaces with a + sign called stringbyAddingPercentEncodingEscapesUsingEncoding: NSUTFStringEncoding.
  68. MKAnnotation is actually a protocol, not a class.
  69. fabs(x) makes all values positive.
  70. Push segues can only be created on view controllers embedded in a navigation controller.
  71. You can get access to a selected tableview row outside of the tableview:cell delegate methods via indexPathForSelectedRow.
  72. NSPredicate returns an array of results from a different array based on the predicate criteria.
  73. I really want to get into Swift. It both scares and excites me.
  74. I have to figure out how to install/use a CocoaPod. Something to work on.
  75. Identifying a git strategy is crucial to avoid conflicts.
  76. I still want to learn how to best revert to a previous commit.
  77. It is best not to persist photo data in core data; better to house the url to the documents folder where the photos are stored.
  78. Trello is an awesome tool and has a great website and app.
  79. Testflight is awesome. I need to do it a lot more.
  80. I found a great tutorial on adding custom fonts to your xcode project. It helps to know how to fool proof operational steps.
  81. I’ve published several apps to the App Store. Provisioning profiles, certs and keys still confuse me though I can muddle through it. Something to work on.
  82. After learning GitHub, I think it’s the coolest thing since sliced bread. Sliced bread is cool, by the way.
  83. My name on GitHub is initWit. It’s from seeing a lot of convenience initializer methods that start with “initWith”. I always say initWit in my head when I read them.
  84. You can “pull” data from an originating VC using an unwind segue. It pulls since the method for an unwind segue is on the destination VC.
  85. For an unwind segue to be displayed in the exit menu of Storyboard, it has to have the IBAction directive associated to the method.
  86. The parameter for an unwind segue is of type UIStoryboardSegue. This allows you to use the segue.sourceViewController property to access exposed data from the calling VC.
  87. Properties that need to be exposed to other classes need to be designated in the h. header files.
  88. As part of MVC, you shouldn’t really expose UIControls in the header files when communicating with other classes. These should be data and the VC’s use the data. I need to practice this more.
  89. What is the difference between pull, fetch, clone and request in git? I definitely need to figure that out.
  90. I love learning and appreciate it even more after the program.
  91. I’m getting pretty good at reading through Apple documentation.
  92. I need to practice more Core Data. It seems so powerful depending on the app.
  93. I love that there is a good market for iOS developers.
  94. I love that there is a very strong community for iOS developers and specifically in Chicago.
  95. I need to go to more networking events to meet more people in the community as well as be more known in the community.
  96. I love code challenges. I don’t necessarily like time constraints on them, but I absolutely love figuring things out and solving things.
  97. I need to create a wiki to record more of the items that I have learned. I was thinking that this blog medium (pun intended) would be good, but I think a wiki would be better.
  98. There is a lot of advice given (Don, Ellen, etc) that you should go back and refactor / re visit your old code. I need to go back and refactor / re visit my old code.
  99. I think I would be a great mentor someday.
  100. Several folks have asked me if I’m a teacher. I don’t consider myself smart enough to be one.

--

--

Robert Figueras
my iOS Dev Journal

in order of importance: Papa, Hubby, Son, Sib, iOS Developer, Software Consultant, Musician, Entrepreneur Wannabe