Self-Taught iOS Developer: Codementor Supplements My Learning
Barry Gray has enjoyed a stellar career in semiconductor marketing and business development. Having a degree in EECS from Berkeley, software development has always been one of his interests.
So when Apple announced the first iPad, he decided to try his hand in developing iOS apps, figuring it wouldn’t be that hard. However, things were not as easy as he would have liked.
I’ve done some programming in Fortran and C (a long time ago!), so I figured I’d just pick up Objective-C like any new language for embedded systems. Wrong! Reorienting myself to object-oriented programming was a much bigger challenge than I expected, and while Apple’s Xcode is (at least for me) an awesome IDE, I was overwhelmed with what I needed to learn just to get started.
So, I spent a lot of hours going through on-line courses, books, and so forth, to learn Objective-C and iOS development. And I started developing my app, which was recently released on the App Store: Dev Cards. Development was slow as I ran into stumbling blocks.
I spent a lot of time on Ray Wenderlich’s website (and his books), since it has lots of iOS tutorials and learning resources. Although Ray introduced me to people on his team who would be interested in providing mentorship/consulting to me, I felt that I needed to spend more time on my own to learn. I didn’t want to shortchange my learning by leaning on others too much, and it wasn’t clear to me how we would work together.
At around this time I found out about Codementor. At first I wanted to spend more time on my own to learn and wanted to wait until I was really stuck. And finally, that happened!
I wanted to have a progress bar display while a rather large database summary was processing. The view that would display that summary was getting hung and displaying strangely. Man, I really checked the code so many times, looked all over Stack Overflow, etc, and could not figure the problem out.
I knew then I was at the perfect time to try Codementor. My code was presentable enough for an expert, and I looked forward to learning by working side-by-side with a pro.
My app has over 650 questions and answers in a big flat file. The questions are all categorized, and as the user displays and answers them, I update metadata in the file so we can exclude questions from immediate use and so forth. The user can select which category(s) they want to focus on, and from this, the total number of available questions changes. So, each time the user changes the category selections, the database is scanned to create a summary and totals of the questions that will be available for their next quiz.
This led to a couple of problems:
a) The database scanning took a couple of seconds and I wanted to have a progress bar to show the user that the app was busy doing something. I just could not get it to work.
b) The view for the database summary is in a navigation controller, and for reasons I could not understand, its behavior was not consistent each time it was displayed.
My mentor first advised that I needed to create another thread for the database scanning, and that it should be outside of the main thread. However, when he was showing me how to implement this, we discovered some errors in my code. I implemented those changes without him. The next time we met, we found that the thread changes made improvements, but they weren’t working perfectly. So, my mentor went offline and investigated it a bit. We then got back together, made the final updates, and voila! It all works great.
I am feeling more confident that I can trust my instinct on when I need outside help. It’s fantastic to know that the help is there when I need it, and that adds a lot of confidence in building new apps.
I would definitely recommend Codementor to others. The website and service is well thought out and works very well. For example, when starting a new session, the first few minutes are free while the connection (video, audio) is being set up. So, while we both want to get things going quickly, there is not as much pressure to make it happen.
I liked it that my Codementor and I quickly developed a rapport, almost like we were working on the project together at a company.
It was not only great to get my issues resolved, it was also fun to work with my mentor and I look forward to finding more opportunities.