# Learning Android/iOS development

# Starting out development

My first programming language to learn was _Visual Basic 6_. I had this book that gave a nice introduction to the language with all the _Sub…End Sub_, _Dim title() As String_ etc. Using forms with drag and drop support, I’d create beautiful UI on my PC that gave me that super power I longed for — _instructing a computer to do what I want_. If you think about it, that’s what programming is all about.

I desired to write mobile apps but didn’t know where to start. My research led to _Java2ME_ and NetBeans 6.0 was installed. I toyed around with this new found tech but lacked a proper introduction to the language used — Java.

If I remember correctly, the first Java book to encounter on was [Teach Yourself Java in 21 days](https://www.oreilly.com/library/view/sams-teach-yourself/9780133755848/). Such a quick walk through of the language! Later on, I found out about [Deitel & Deitel, Java How to Program](http://deitel.com/Books/Java/JavaHowtoProgramLateObjectsVersion11e/tabid/3685/Default.aspx)_, 6th Edition_ and I fell in love with their books and mode of teaching. Armed with these, I went on to write _routines_ for those pesky maze games on the Java2ME platform.

# Android Programming


![android.jpeg](https://cdn.hashnode.com/res/hashnode/image/upload/v1587881765381/Zqfg2502_.jpeg)

I first laid my hands on Android development at a Google event dubbed

**gKenya 2.0** (I think I also attended _gKenya 1.0_ 🤔). I’m surprised the schedule is still up [here](https://sites.google.com/site/gkenya20/) at the time of writing. Day 2 was the most interesting as it was focused on developers. Someone at the event made a remark:

> If you know Java, you know 50% Android development!

That was my cue. How true this was, I left it to chance. I learnt the basics; Activities, Services, Broadcast Receiver and Content Providers. This got me going as I continued to learn from the official documentation and samples I would gather online + Stack Overflow. I have written several hobby apps since then (just [published](https://play.google.com/store/apps/details?id=com.charlesmuchene.kotlin.learn) one of them — [open source](https://github.com/charlesmuchene/learn-kotlin-app)) and also had a chance to be a consultant on an app rewrite; Ionic to native Android.

Full time employment as a mobile application developer altered the course of my development career. Writing a hobby app is one thing. Delivering a business solution is another. Being in a work environment adheres to two major points:

*   Delivering quality solutions
*   Delivering those solutions in a timeframe

These two requirements seem paradoxical for a beginner/junior developer but experience teaches you that’s how a business runs. To the first point, you need to learn Computer Science fundamentals; commonly used data structures such as arrays, sets, lists, maps, hash tables etc as well as have some skills in problem solving — knowing how and when to use these data structures alongside common techniques like Dynamic Programming or general recursion. My two go to practice sites are the famous [LeetCode](https://leetcode.com/) and [CodeSignal](https://codesignal.com/). [Pramp](https://www.pramp.com/) is also a good resource especially for interview-like preparation.

# iOS Programming

![ios.jpeg](https://cdn.hashnode.com/res/hashnode/image/upload/v1587881783172/KEoGMVOUr.jpeg)

Diving into iOS was by self-inflicted fire. I had to deliver a clone of an Android app within the shortest time possible. I mention this in the introductory section of another [article](/@charlesmuchene/activity-vs-uiviewcontroller-lifecycle-5a7a5a2e219f). [Official documentation](https://developer.apple.com/library/archive/referencelibrary/GettingStarted/DevelopiOSAppsSwift/) served me well for this task as well as samples online for a couple of features. YouTube tutorials from [Brian Voong](https://www.youtube.com/channel/UCuP2vJ6kRutQBfRmdcI92mA), [Sean Allen](https://www.youtube.com/channel/UCbTw29mcP12YlTt1EpUaVJw), [Cocoacasts](https://www.youtube.com/channel/UCAK-zGL8Gf7oZQciX4JZvbA/), [Brian Advent](https://www.youtube.com/channel/UCysEngjfeIYapEER9K8aikw) among others came in handy in bootstrapping my iOS learning journey. Awesome writers such [John Sundell](https://www.swiftbysundell.com/) and [Paul Hudson](https://www.hackingwithswift.com/) keep me up to date with content. I am currently reading [iOS 13 Programming fundamentals](https://www.amazon.com/iOS-13-Programming-Fundamentals-Swift/dp/1492074535), a great book by [Matt Neuberg](https://twitter.com/mattneub).

* * *

YouTube has been a great resource in my learning. I’ve watched videos from [Devoxx](https://www.youtube.com/channel/UCCBVCTuk6uJrN3iFV_3vurg), [Android Dev Summit & Google IO](https://www.youtube.com/user/androiddevelopers), WWDC [videos](https://www.youtube.com/channel/UC-ngzACBMva8T81KEyIwwmQ), [William Fiset](https://www.youtube.com/channel/UCD8yeTczadqdARzQUp29PJw) (Graph theory + Data Structures) and [My Code School](https://www.youtube.com/channel/UClEEsT7DkdVO_fkrBw0OTrA) (Algorithms and DS).

# Conclusion

I engage a lot with my peers on their view on development and find out how they keep up with the industry: books, conference videos, code labs, tutorials, blog posts, twitter, OSS and podcasts among others come up as some ways to learn content. I write apps using Swift, Kotlin and Java. These 3 languages, in addition to the various frameworks and libraries on Android and iOS, sure keep me learning something everyday. Keep learning!

# Resources

## Data Structures + Algorithms

*   [William Fiset](https://www.youtube.com/channel/UCD8yeTczadqdARzQUp29PJw)
*   [My Code School](https://www.youtube.com/channel/UClEEsT7DkdVO_fkrBw0OTrA)
*   [Introduction to Algorithms](https://mitpress.mit.edu/books/introduction-algorithms-third-edition)
*   [LeetCode](https://leetcode.com/)
*   [CodeSignal](https://codesignal.com/)
*   [HackerRank](https://www.hackerrank.com/)
*   [BaseCS](https://medium.com/basecs)

## iOS

*   [Matt Neuburg](https://www.oreilly.com/library/view/ios-13-programming/9781492074526/)
*   [John Sundell](https://www.swiftbysundell.com/)
*   [Paul Hudson](https://www.hackingwithswift.com/)
*   [WWDC + other videos](https://developer.apple.com/videos/)
*   [Kickstarter iOS OSS](https://github.com/kickstarter/ios-oss)
*   [Brian Advent](https://www.youtube.com/channel/UCysEngjfeIYapEER9K8aikw)
*   [Cocoacasts](https://www.youtube.com/channel/UCAK-zGL8Gf7oZQciX4JZvbA)
*   [Sean Allen](https://www.youtube.com/channel/UCbTw29mcP12YlTt1EpUaVJw)
*   [Brian Voong](https://www.youtube.com/channel/UCuP2vJ6kRutQBfRmdcI92mA)

## Android

*   [Kotlin](https://kotlinlang.org/docs/reference/)
*   [Android Dev Summit + IO](https://www.youtube.com/user/androiddevelopers)
*   [Codelabs](https://codelabs.developers.google.com/)
*   [Devoxx](https://www.youtube.com/channel/UCCBVCTuk6uJrN3iFV_3vurg)
*   [Kickstarter Android OSS](https://github.com/kickstarter/android-oss)
*   [Fragmented Podcast](https://fragmentedpodcast.com/)
