Introduction

Learning can be time-consuming depending on the topic that you’ve chosen to learn. It is important to be consistent and learn with direction in mind. It’s easy to get strayed away from your goals and start learning something else just like it is easy to browse the internet for a topic and 30 minutes later find yourself looking into a totally different thing.

What can this post do for you? If you have plenty of time and no concrete end goal, then you can just continue having fun learning what interests you. In this case, this post can give you ideas what to learn or where. If you are limited by time, or have a specific goals, or you are looking for a learning plan, then this post can give you a starting point.

The benefits of following a learning path are:

  • have a big picture view - it helps you to decide what is relevant
  • optimize the order of learning - by having an overview, you can spot topics that are the base for others. It’s much easier to learn something new, when you build on top of stable foundation.
  • keep your focus and don’t get distracted - you can consult your plan and make sure you’re on track

Objective-C vs. Swift

If you just start out iOS development, which language should you start with - Objective-C or Swift? Both Objective-C and Swift are languages primarily used in the Apple ecosystem. Objective-C exists for 30+ years and has been battle tested. So, why change it? Why invent Swift now when Objective-C already does the job? Swift is the new preferred language of Apple, but why force all developers to learn a new language? In short, because times have changed and the new dynamics require a better language. Apple is thinking long-term and investing in a good language that will reduce the bugs and increase the development speed is a good deal. If you want to develop for iOS, then you better go with the Apple flow and stick to Swift. Besides, I like Swift. Let’s see the pros of both languages.

Pros of selecting Swift:

  • Swift is the new “favorite child” of Apple. Expect intensive development and improvement of Swift, new tools to support it, new guides and tutorials in Swift, programs to support developers switching to Swift, guides how to leverage the language to its best, etc… On the other hand, the improvmenets made to Objective-C are just to support the evolution of Swift and to keep them interoperable. In fact, many new features introduced to Objective-C exist only because of Swift. In several years, probably nobody will write in Objective-C and new developers will be required to know Swift only. Objective-C will be used for big legacy projects that were written in it.
  • Swift is easier. It is shorter and with a friendlier syntax. Many developers are afraid of the brackets in objc and the unusual syntax of the language. On the other hand, Swift is quite attractive for a large audience. Swift can be written using iPad using “Swift Playgrounds” and you can also create playgrounds in Xcode to quickly experiment with the language.
  • Swift goes to a new level enforcing developers to write better code and pushing paradigms like protocol oriented programming
  • new tutorials and new demos are in Swift. Initiated by Apple and followed by the developers, this change is inevitable. If you resist it, in a few years you will be rendered obsolete.
  • Swift and Objective-C have a lot in common and when working on a real project, you can achieve the same results using Swift. So, why not just use Swift? It’s easier and shorter.

Pros of selecting Objective-C:

  • it is more stable and mature than Swift. Swift is still evolving and changing.
  • there are plenty of libraries written in Objective-C. Keep in mind that the interoperability between them allows you to use Swift with Objective-C seamleslly. This means that any library written in any of these languages can be used without a problem. Unless you want to contribute to these libraries, you don’t need to know Objective-C.
  • the way of working is already known. Patterns and best practices are already in use and you don’t have to rediscover the wheel. While this is true, in a very short period this will change as a lot of effort is put into exploring Swift.
  • knowing Objective-C helps you learn Swift. But why learn Objective-C in the first place. You can directly learn Swift and skip the double work.

Although, there are pros in learning Objective-C, they seem to be useless because almost all you can do with it you can do with Swift as well. As an extra bonus, newcomers appreciate the easier syntax of Swift. Besides, Swift is more powerful and has more features. This means that everything you can learn with Objective-C you can learn with Swift and even more. Swift is a language that takes advantage of being invented later and to learn from the mistakes of other languages and the needs of the developers.

Knowledge layers

Foundations

Why the foundations are important?

With solid fundamentals it’s a lot easier to learn new information. You can build on top and not spend time wondering if that piece that you don’t know is important or not. Having a good foundation gives you more confidence and helps you understand better why the things should be the way they are and how it all fits together.

What are the foundations for iOS?

There are several things that I consider to be foundation:

  • know the iOS platform and what it is capable of. If you’re new to iOS and you don’t know how it works or what is the expected behavior, then you should educate yourself. Users have expectations about how things should work and it could be a bad experience if things don’t work as smooth. In general, it’s bad idea to mix Android patterns to iOS if they don’t feel natural. Users of both platform have a base understanding of the OS and behave without thinking. Some may argue that this is something more advanced and that a developer should focus on more technical stuff first. I think that if you don’t understand the platform from the user’s perspective, developing for it will be even harder.
  • basics of programming. This includes things that are common in many languages - declaring variables, control flow, loops, collections, functions, classes, etc… No matter what language you start to learn, these are the basic building blocks. In Swift, these can be slightly different than, say, JavaScript… but the idea remain the same.
  • basic OOP. You should know how to build classes and what inheritance is. How to layout a basic program. This builds on top of the basics of programming. You should understand what is encasuplation, decoupling, polymorphism, etc…
  • searching the web. Maybe obvious, but this is a required skill that developers depend on. Every day you will search for information, read artciles, code, solutions, opinions, etc… You should be able to navigate and quickly filter what’s relevant.

The foundations above are general for all languages and platforms. If you want to build something for iOS, you need a bit more on top of that. Here is a short list of things that you will need to get started:

  • basics of iOS design patterns, concepts and how different parts of the app interact between each other.
  • understand Views and View Controllers.
  • understand Table View Controllers

The foundations will allow you to build simple apps. You will be able to play around and explore. Depending on what you want to build, maybe thsi is enough to release to the App Store.

Advanced

When do you need Advanced knowledge?

  • what are the advanced topics

Specific

  • when do you need specific
  • some examples

Resources

  • why do we need resources?
  • official documentation
  • websites
  • books
  • videos
  • keeping up to date with feedly

Conclusion

  • what’s next
  • when and how to use this information

To make sure that you follow the plan, schedule a time block to review your progress and apply adjustments if needed.