I’m in grade 4 now.
2012-2013, a lot has changed, we moved from Shanghai to Melbourne, I became a full-time iOS developer. Can’t deny that I’m missing my freelancer life so bad: working on the projects I like, deciding when to work and when not to, no time wasted commuting, etc… the obvious reason I went back to 9-to-5 life, after 3 years career gap, is to get a steadier income stream, to provide my family more, yeah, it’s life, just like what Gus told Walter in Breaking Bad
“What does a man do Walter? A man provides for his family. And he does it even when he’s not appreciated, or respected, or even loved. He simply bears up and he does it. Because he’s a man.”
- Gustavo Fring
only I’m not that desperate.
After landed in Australia, I worked and am working on 2 iOS projects, they are much bigger than the largest project I had ever worked on. It’s truly beneficial to collaborate with my peer developers (iOS guys, Android guys and back-end guys), not mentioning great opportunities to be merged in the local iOS/Mac developer community. It’s eye-opening for me to discover, among local app developers (large or small), how Agile is widely practised, and how test-driven development is commonly recognised. Forgive my ignorance, but I was working alone, in a cave,
“The more you learn the less you know”
I can’t agree more with this saying. I used to tell myself, after done 10 client projects, “this is it, this is iOS app development, I’ve dealt with all sorts of user requirements, and I’ve likely conquered most parts of iOS development land if not every of them, I’m a really good iOS developer.” It sounds more like a joke to myself today.
Now I think myself as an okay iOS developer with some project experience and an eager heart to grow. By looking back at how I finished projects and by observing what other experienced iOS developer do, I came up with a list of things, things I wish I had done better in the past:
Write more tests: I barely wrote any test cases when I was freelancing, neither unit test nor UI automation test. I wouldn’t use the excuse like time/budget was limited or client wouldn’t appreciate, it was just my unawareness. In the first local Cocoaheads meetup I attended shortly after arrived in Melbourne, the whole night people up stage were talking about all sorts of iOS testing tools, Frank, Zucchini, etc … I was amazed how well the test-driven-development (TDD) concept was received by the local developer community, though I didn’t realise its importance until later on, when my projects gained more complexity and many requirement changes arose, regression bugs kept appearing which often put me into the thought “I should have done some test cases in the first place”. After couple of months trial-and-error, I managed to figure out the unit test framework (Kiwi) and automation test framework (UIAutomation + tuneup.js + bwoken) that best suit me. While my instinct still drives me into coding the feature, I look forward to converting the Red-Green-Refactor approach as a natural thing for me to do in the future development work.
Rely less on third-party libraries/code: I don’t deny I’m a github/stackoverflow developer, when things are out of my comfort zone, I always reach github and stackoverflow for help. Yes, I truly enjoy leveraging other developer’s mature solutions to certain problems, but just because “don’t reinvent the wheel” it doesn’t mean I shouldn’t learn how to build a wheel. MagicalRecord is so sweet when working with Core Data, that I didn’t bother looking deeper into multi-thread handling, performance tuning and migration; MBProgressHUD is so prevailing that I stopped to enhance my own skills in Quartz2D; AFNetworking is too good to study some fundamental network APIs in Cocoa. I need to change my dependency on other’s code, I need to go down go fundamental. When third-party libs have unsolved issue or have features yet to implement, when I have to be own my own, I wish I won’t feel panic as I used to.
I reckon these shall keep my busy for this year…