I have now finished the first two weeks of Lambda’s iOS program. I am feeling pretty good about things. I feel like I am starting to develop a deeper understanding of MVC, what it actually looks like in practice, and how to think through where certain code should go and who should be in charge of what. I also feel like I am getting a grasp of the patterns that Apple’s frameworks and classes use. I’m not just learning how to work with a table view, but I’m learning the pattern that is applicable to table views and collection views. I am not just learning how to ask the user for authorization to use their photos, I am learning the pattern for asking the user authorization for photos, location, contacts, to send notifications, etc.
One thing that also stood out to me, and that I appreciate, is that they taught us persistence using a Codable object and a property list encoder and decoder before they touched on UserDefaults. Other classes or books that I have gone through start with UserDefaults because it is so simple, but I think it sets up a bad expectation in people’s minds that they can use it to save their model objects. I’m glad we started with something more robust, and then they basically just mentioned that UserDefaults exists, in case you want to use it for its actual purpose. That is probably more doable now that apparently the encode and decode methods are synthesized for you. The last time I did anything with persistence was in Swift 3, when you still had to manually write all those functions. Definitely makes for less code to write, and for a smaller barrier for people to get over when they are first learning.
I also feel like I am getting into the rhythm for the class. Lecture in the morning, project in the afternoon, prep for tomorrow in the evening. It may sound obvious, but it has been a while since I have been in school full time and it has taken a bit to get into that mode. It is crazy what you can cover in two weeks when that is your cycle. We have covered most of the material in Apple’s ‘App Development For Swift’. And not just covered it, but I’ve written all the code from scratch at least twice. So it is getting ingrained into my memory. Things that never really made sense to me before, like knowing when you need a delegate for a custom table view cell, and how to implement it, have just clicked in my mind in a way that I won’t soon forget them. On top of that, I feel more comfortable reading documentation and figuring out how to learn about other things than what we’ve talked about in class. Last week I was able to implement a search bar in my sprint challenge app (albeit probably not in the best way, but it worked) and this week I added a swipe gesture recognizer and peek/pop to my app, even though we have covered none of those things so far.
One other thing, that I think comes mostly with time, is that I feel like I am beginning to build actual relationships with my classmates. Part of it is that our class was cut in half by people repeating the first week, so the people I see on a day to day basis is smaller. But we do code reviews a couple of times a week, and we help each other when we get stuck, we have stand up meetings at the end of the day, and we are all going through this very challenging program at the same time. So it does not take long to go from seeing everyone as strangers on the other end of a web cam to being friends.
All that said, I don’t think you would want to start this program if you don’t have a lot of self discipline or drive. There are long stretches of the day where you are left alone and no one is going to force you to sit down and go through the project. There is a lot of reading and watching videos and stuff that you have to do on your own. It seems like people sometimes pair program, so that might help a little bit if you are more extroverted than me, but even so, lots and lots of the day is spent with just you and a computer so you have to be okay with that. It seems like that is a lot of what life is if you are a developer though, so in some sense it is probably good prep for that, or at least a good way to try it out and see if it is something you hate.