I have completed my fourth assignment in the Code Fellows iOS Foundations II course. I find programming to be addicting. I put in fourteen hours today and a couple each day prior, plus class. How productive were those hours? That depends on how you think about it. If I'd already had the experience I gained today, my final outcome would have taken one or two hours...
I sit down, think I am going to do awesome work, then proceed to break my program, in a myriad of ways. There is this masochistic thrill of repeated excitement, thinking I nailed the problem, followed by bouts of profuse swearing. I can't stop going until it is nailed, though, because all those "almost theres" just increase the anticipation of success, resulting in obsession.
What did I learn? Xcode is complex. My code can be awesome, but there are so many ways to break the program with things like an unset reuse identifier. Those need to be checked often, and I have to make sure to hit enter after typing in the string, or I will think it's set when it's not. This leads to tweaking the wrong things, trying to fix the problem. Also, if anything is deleted in the storyboard, I have to delete everything that related to it, like outlet connectors. If not, things may end up falsely appearing to be hooked up.
Programming will take mindfulness, patience, and the willingness to recheck everything as if I didn't just write it. When my code breaks, I have to switch roles and act as if I am investigating someone else's code. Assumptions about "what I have already done" can make the debugging process painful. Another thing I will have to get good at is recognizing the point where I need to seek help (a more seasoned investigator or maybe just a fresh set of eyes). It's easy to be hurried and have a chain of "this will only take a few more minutes to fix."
In summary, when things break, patiently check over everything as if someone else built it. Set a limit for the number of times through and/or the time to take going through, troubleshooting an issue. Seek help at that point, because though it feels good to single handedly solve it, there are other things that also need doing and our time is finite. Slow is smooth and smooth is SWIFT. ;)