Struggling: you’re not alone, you’re learning!
by Thomas Durand
I started iOS development in 2014, right when Swift language was announced at WWDC. Starting iOS was something I wanted to do for a long time, but this announcement alone was exactly the push I needed to buy a Mac, and begin this very long journey.
It leaded me to a lot of small wins, but also to a lot of frustrations. Learning something new is long, but it guided me to what I actually wanna do after my studies: iOS apps! It became a goal.
After my studies ended, in 2015, I had a final foreign internship to achieve; and I found myself in Montreal building data representation for buildings in Unity3D motor. Not exactly what I would have liked. But aside this job, I found a group of students that were building apps, and they helped me grow, and learn a bit more on iOS development.
Their core app was in Objective-C, Core-Data backed, things that I was completely foreign with! But it allowed me to build and ship my first apps on the App Store:
- A Kerbal Space Program calculator still on Github
- A Minesweeper still in the store!
From interview to interview…
This brings me at the end of 2015, looking out for a job in Paris.
I was doing interviews for a Junior iOS developer role, and I sucked at it!
Basic questions were not answered correctly or at all, and I wasn’t very confident at all.
But after each failure, I reviewed the questions I failed on, and it helped me learning new things I wasn’t aware of, like what was ARC, and what was
weak meaning. The very same evening, I solved a few memory leaks in my apps!
By failing and struggling, I grew, and my Apps became better with each lesson.
But by doing so, it brought to me a new feeling: that I was a twister, an impostor. For me, knowing the answer because I was asked in a previous interview wasn’t giving me the legitimacy I was seeking of just “being an iOS developer”.
But still, I became better at interviews, and got my first job as an iOS Junior Developer after developing a small PDF viewer as a technical test.
A fresh junior in the lion’s den
I started my new job in November 30th, 2015. I was excited about my brand new iMac they provided me, and about discovering their codebase.
I was expecting to be mentored into the codebase, grew with the actual developer for a few weeks (he was alone working on the app), before taking over. I knew that the developer was leaving the company. What I missed at that time is that this developer was leaving at the end of the week! Bye mentorship.
Plus, to really make things simpler, the developer was based in Montreal, and I was in Paris. So timezone included, we only had a few hours the afternoon to transfer the knowledge from him.
The app was 100% in Objective-C (a language that I did not mastered at all) ; with basically no architecture.
There were a few models, but most of the data was passed around using
NSDictionary; with views specifics keys.
And everything was backed with Core Data for persistency. My knowledge with Core Data stopped at knowing it exists.
Needless to say that there were numerous moments I felt abandoned in a very dirty codebase.
Learning on the job
My first weeks were very complex. I couldn’t write Swift at the very beginning because of some bridging headers and things to clean before. But still I had to ship some expected bugfixes, and work in Objective-C. And also make heavy tests of the app to find all the bugs introduced by the lack of modelized object.
I started to plan something to introduce Swift in the app. Fixed some bugs, broke things, repaired them after. Broke the production app. Repaired it later…
I doubted, had my wins and my losses. I spent the whole Christmas eve day of 2015 making commit dichotomy to find where I introduced a concurrency crash in the PDF viewer.
I introduced real models objects in the app, rewrote things in Swift. There are some part of this new code that still subsist in today’s codebase. Some I’m proud of, and some … not so much.
There were some days I was really feeling like an impostor, in front of a codebase where I understood barely a fraction; and some others, often after a win or after understanding a key principle of the app, where I was glad to get the opportunity to get paid money to learn!
Today’s app code base is 100% swift. It took about a year to rebuild entirely. Lot of things that were in the app at the beginning were though differently. Learning this codebase to rebuild it after with that knowledge did not allowed me to built it like a Senior with 10 years of experience would have. But it was the opportunity to sharpen my skills; and make the application a bit more maintainable than what it was before. Was it perfect? Absolutely not. A code base is never perfect. But it was better.
That by rebuilding the application with maintenance in mind that my vocation became clear. I’m not a creator. I’m more like a builder that want what I build to be solid. And when I learn a new technique to make things more solid, I love to apply them.
That’s also why I grew to become Architect and Code Owner at my company, and that today, iOS development is more my evening hobby to build Indie Apps like Padlok
But I have something to say: I’m still learning. Every day. And that’s what makes my job fun and satisfying. And when I discuss with any other developer, they’re also learning on a daily basis. And they share what they saw in a different lifetime. All of them have had their struggle moments. All of them outgrew them and become better on a skill afterward.
If you’re struggling, good, it means you’re learning. When I define myself as a developer, it does not mean that I write code. It means that I struggle everyday on new problems, that will ultimately be solved by code.
Developing is struggling with new and past problems. Struggling is learning. My brother once told me about software development: “If it works at your first attempt, it means you were not ambitious enough!”