Smartphones became the tool for reaping most of the magic modern society brought: they enable us to order lunch, get hotel rooms, consult the global knowledge, communicate with to each other, and so much more. In a world where the smartphone is akin to a magic wand, mobile apps are the spells. Everyone's more excited than ever to get more powerful spells from the mighty wizards, aka mobile developers.
I interviewed one of such wizards. In this article, expert iOS developer Konstantin Portnov shares his insights from the trade.
WLAD: How did you get started creating apps?
Konstantin: I first tried programming in 9th grade, I think, I was amazed I could create something from nothing. My first program was in Pascal, it drew a snowman in DOS. It was just three circles, but for me it was like magic. And there's also the eternity of it… I could die tomorrow, yet people could still use my programs, my creations.
The most exciting thing is that I can use the things I code. That's why I prefer to create applications for mobile phones, rather than database engines or financial stuff. My apps are also for me, I'm using them right now. I like to use the things that I do. A main principle in programming is "You should eat your dog food”—in using your creations you understand their good aspects and their bad ones.
WLAD: What's the most important thing for being an app developer?
Konstantin: Having passion about it is the most important thing. When you're passionate, you'll keep on wanting to do it faster, and better. It's like when you're passionate about a book: you don't get stuck reading the same chapter. Instead you you're eager to keep on advancing, always looking forward to read the next chapter, and then the next book in the series.
WLAD: How did you get started in mobile development?
Konstantin: After I finished university, I found a job as a J2ME programmer—it's platform based on Java for old mobile phones and embedded devices. We worked with tiny mobile games. Then I moved to a new job as a System Administrator. After three years, I knew that wasn't really a type of work I enjoyed. To return to programming, I decided to learn Android development by myself, as I already knew Java. After a while I found a job in a software company, where I also got started in iOS development.
WLAD: For those who are starting, what's a good way to begin creating apps?
Konstantin: Being a Russian developer, I can say the first thing you need is to know English well—at least for reading. It seems like 80% of all the information about my profession, I obtained in English. The next thing you need, if you want to create iOS apps, is an iPhone and a Mac desktop computer. Then you can start learning progressively.
Start with a clean program: a program that's a white screen that does nothing at all. Then add a button to your app that does nothing. Then, change the app to make some text appear in the screen after that button is pressed. You can keep on adding control elements to your app. Then you can add more screens, and make controls for operating with lists.
It seems that about 80% of the coding I do is related to lists. Users' lists, contacts lists, Instagram pictures list, tweets list… In a screen where you show the user his account name, first name, password, bio, in the end that's done using lists as well, a table of editable things. So you must know how to implement simple lists, and lists having a variable number of elements, and lists having elements that take up a variable height of the screen, and lists having images in it, lists having contents that are fetched from the internet, etc.
WLAD: What else should a beginner play with, before attempting to make a real app?
Konstantin: There's this very interesting website with a list of important things that one must know, called Raywenderlich. It has a lot of articles, tutorials, step-by-step guides on coding these fundamental things. You can start with theirs books: Swift Apprentice and iOS Apprentice. The site also puts out great articles about changes in the Apple iOS operating system, showing the relevant changes. With each operating system update, we get the possibility of making our job faster, prettier, with more effects. A lot of things these days that I can code in 30 minutes, used to take me like 3 days in the iOS operating system from 4 years ago.
To get things done, developers use generic libraries. But we developers aren't geniuses, and some of the libraries out there are not so great. To be current on the best libraries to use, it's very important to talk with other developers. I had a lot of help from fellow developers. I'm really not afraid to admit when I don't get a new technology or concept, and cry for help.
WLAD: What is your professional specialty?
Konstantin: I think roles in programming are as vast as roles in health care. There are surgeons, there are dentist, there are psychologists… My specialty now is mobile "desktop" applications. By "desktop" I mean not games. Most times I create something that communicates with a server, receives some data, processes, stores and present it. Very few times I've worked with multimedia or image processing. I think right now I've touched about 15 to 20 iOS apps—of which over 10 were created by me alone.
Now I'm working for a company called MercadoLibre. It's huge online e-commerce platform. It's interesting to work here because I resolve different kind of problems that I used to face before.
WLAD: Do you believe knowing math is important for coders?
Konstantin: I don't have a lot of math background. I wouldn't have enough knowledge to implement a database engine in Java, for instance. But I do have a strong logic sense, and applying it can take you very far. Even if you don't have a lot of mathematical education, you can have a very good logic sense. In our profession, logic is very important. I believe we use it like 90% of the time. Learning math is a very good way to strengthen this logic sense. It's way harder to build your logic mindset studying, say, literature.
For a first contact with logic, see the book Computer Science Distilled. It's a slim intro to computer science that includes many basic principles every programmer should know. Check it out!
WLAD: What do you believe is the hardest thing about mobile app development?
Konstantin: I think the hardest is the mindset shift. When you're creating a desktop app, you assume to have everything at your disposal: a fast internet connection, lots of storage space, a very large screen, and enough energy to keep the machine powered. But in a mobile app, that's very often not the case.
To make the best use of the tiny screen, you have to think of the best ways to organize and present information on it. You have to design the app for a network connection that may or may not be working at all times. You need to give the user a lot of feedback about what you're doing: how's the progress on fetching data from a server, whether it looks like the internet is disconnected…
Without a constant link, we have to buffer and cache things a lot more. If the user wants to post a picture and it fails because of the network, and the information gets lost, the user will blame your app. The mobile app development world is a lot more fragile. You cannot take anything for granted, you have to think about running out of everything: storage space, internet, screen space, battery… it's like a minefield of things that can go wrong.
WLAD: Besides app development, what skills are important for a mobile developer?
Konstantin: Knowledge of any Backend technology, For exmple a framework for creating Backend services APIs, such as Ruby on Rails. If you combine the knowledge of creating mobile clients, with the knowledge to create backend services, there's really a huge range of things you can do. Moreover, almost every app has Backend dependency these days.
WLAD: Do you think one coder can be multiple times more productive than others?
Konstantin: Yes. Coding is like a craftsman job. You do it your way, with your hands. You can choose to use tools to complete subtasks much faster. Many coders ignore or misuse important tools, and instead do everything manually. If you keep on growing your coder's toolbelt, you can implement complex things 10x or 100x faster than those without such tools.
Sometimes I look at my past, and I think, whoa, without my current knowledge I could have had spent weeks in what this thing that took me an hour.
WLAD: What's best: freelancing or having a job?
Konstantin: As a freelancer I had to switch between 3 to 5 different projects. My coding performance suffered with constant context switches. Even though I woke up and went to bed at anytime, I still had deadlines. Nobody's got your back if you miss a deadline. And you're on your own to reserve time to learn.
For instance, every year a new iOS version is released, and we gotta learn about it. We have to plan and schedule time for this task: which books or courses will be bought, which video-lessons to watch, where are we gonna learn? In the subway? In a cafe-shop?
The advantage of having a regular 9 to 5 job is the stability. You have a time to clock in an then clock out, no matter what. No customer will Skype you out of your sleep about a critical bug. And if you need to learn something, there is a boss you can count on helping you.
There are some bad things about working in an office. For instance, I have to communicate a lot with people, because on freelancing it's common for people to use the waterfall model instead of agile techniques. And it's very important to develop soft skills. We have very good office, but you can feel like the office is a cage sometimes.
WLAD: What about working on a startup?
Konstantin: If you have a family to support, you must have a fixed source of income. It's hard to guarantee that in a startup. For me a startup is a team of warriors. Usually there's just one person doing the iOS app, another one doing the Android app, another one doing the Backend. If you screw up, the responsibility is only yours. In my startup, I was the single mobile developer. It was a very interesting experience. I was responsible for the app's delivery deadlines, versioning, testing, everything.
I know developers who work in big companies that have senior developers. Their code probably will be reviewed before integrate to the product. In a startup, or when you're the sole developer, there is nobody to save you.
WLAD: What did you learn as a system administrator that's relevant as a coder?
Konstantin: As a sysadmin, one day I ended up losing financial data from a company that we served. That was really harsh. I had to assume I was the one responsible for a lot of people losing their tax filings, their payroll data… I felt horrible. A lot of developers never experienced this, because they are far from their users. When you're working right next to your clients, and you feel like you could get shot for losing the user's precious data, you realize how important your work is for your users.
Another thing that I learned as a sysadmin is that when you release a new version of an app, It's important to do it with a sound data migration plan. Users won't discard the data they have and start using your new version of the app from scratch. You have to be very careful not to mess your users' data with new versions. I know a lot of developers that aren't as careful with data migration as they should be.
WLAD: Do you think your education is Russia helped you as a developer?
Konstantin: I got my degree from a university in Saint Petersburg, Russia. The software development techniques being taught were out of fashion, and a lot of things were very theoretical, so I ended up learning programming by myself. The motto of Russian university education is "We'll teach you how to teach yourself". To complete assignments I'd ask questions to my professors, but they'd never tell me what exactly to do. They replied me with me other questions and book references, that helped me find the way.
For instance, I could ask, “How to implement the authentication?" And he'd ask back: "Imagine you are staying behind a door, and someone is knocking at the door. You have to decide if you let the person in. What are all the possible scenarios that could happen?"
Also, they don't care if you are actually learning or not. I think it's typical for colleges. I needed to motivate myself and learn by my own means. I learned English, for instance, by myself, because level of my English after the school was very low.
The most important thing I learned in university was this: if I want to learn or achieve something, I have to work a lot at it. Waiting to get it for free from someone takes you nowhere.