Apple has from the start done everything possible to encourage developers to develop apps on Mac OS or iOS. They provide their free IDE (Xcode) which is easy to use and well documented. For $99 a year you can become a member of the apple development program to gain access to even more resources.
Last year Apple – instead of developing objective-c further- introduced Swift as the next language for app development. So if you want to start developing for iOS this may be the right time. The web abounds with tutorials and courses for writing iOS apps ranging from basic tutorials to full blown courses so what is the best strategy; dive straight in or take a more structured approach? I chose the structured one….
Yesterday I started with my trial week of Udacity’s iOS Developer nanodegree program (https://www.udacity.com/course/nd003). During the program you will make a number of apps in growing complexity using Swift. The first part of the program is the *Intro to iOS App Development with Swift* course (which you can also do as a stand-alone course); a combination of video’s and assignments.
I have started a number of online courses the last few years (mostly at Coursera) but did not finish all of them due to quality issues. Some courses were well thought out, engaging for the student and a pleasure to invest your time in while others were more like a random collection of videos with the odd question thrown in (and a waste of time). So what do I think of this Udacity nanodegrees program?
Let me start out by stating that I spend only 2 days (total 6-10 hours) in the program so it’s a bit early for a definitive conclusion but from what I have seen and done until know, I can make some substantiated comments.
First let’s take a look at the technicalities: the video’s are all HD with a good sound quality and specifically made for the online course (many online courses just show recorded college sessions – some of them of poor sound/video quality). The videos are short and to the point mixing theory with practical examples. They are interrupted by asking you to answer a questions or perform a task. If specific information or materials like project files (pictures etcetera) are needed, links to the resources are provided, so you don’t waste time searching for them. In general I have not encountered any (technical) glitches yet. Oh yeah what is also important, the instructor Kunal Chawla is great; enthusiastic, clear and to the point.
I’m no expert in online education but from my point of view as a student the course is well thought of. The easiest way of setting up a course like this would be to record some video’s, add lecture notes and assignments and let students in essence just follow/copy each the steps necessary for making an app (and believe me, a lot of online courses on whatever subject use this setup).
This course takes a different approach. Obviously there is a lot of material to study, more than can be shown in a couple of videos so you are expected to fill in the blanks in your knowledge yourself. The course stimulates this by offering assignments which make you actively search for the answer either with a Google search or by encouraging you to look for it in the (Apple) documentation. By doing this you not only get an answer to the question at hand, but also learn the routine of finding a solution to other problems you might encounter during the course.
And there is more; some assignments involve posting something on the discussion forums. This is a very useful feature; you process the material much better because you are forced to think things through before you post them (aiding the comprehension of the material instead of just reproducing stuff) and as an added value by posting and reading other posts you get more involved in the course and with your fellow students. And this blog post is another example; it is actually an assignment in the course (lesson 3b to be exact) to post something about either what I have learned so far or a How could you do ….. in Swift? Whatever your choice is, you are forced to reflect on what you have learned.
So what have I learned so far? Foremost: the basics of app building both on a theoretical and practical level. On a theoretical level I have learned the desired general architecture for an app (MVC – Model, View and Controller) and how to translate this to actual Swift code.
How multiple screens are handled, the function of the Navigation Controller and again how to implement this in working code. On a practical level I have learned the basics of Xcode as a development environment; the setup of a project, the project structure and where and how to find the functionality you might need. Regarding apps, I have build a one screen app with a nice layout and some basic functionality (hiding and showing of buttons and texts). As a second step an extra screen was added which allows the user tho navigate between screens and to play a sound file at different speeds. The next step will be adding the possibility to record and play back my own sounds (looking forward to that).
“So what” you might say, you can learn this with the aid of almost all internet tutorials or with a book on Swift and you are right. But…. We all know examples of people who taught themselves and ended up as excellent developers (perhaps you are one of them) but for every one of those there are multiple examples of self taught developers who ended up as really bad programmers (I know you have met some of them and have seen their code). The problem with coding/developing is that it’s easy to learn the basics and you can come a pretty long way by just trying something and looking for quick solutions, but it usually ends somewhere along the line (usually when complexity kicks in). If you have spend some time (and money) in the App Store you will have encountered a wide range of apps varying in both complexity and quality. The basic ones you probably can fabricate yourself after studying a tutorial (thinking of an app I saw last year which just plays different donkey sounds), but you would not be able to build the functional and technical complex apps out there without a rock solid understanding of UI design, app architecture and a lot of technical details. It’s a bit like DIY; with some basic understanding you might be able to build a shed in your back garden (maybe even do some masonry for it) but without a solid background in building you can’ t build your own two-story house.
So I am up to a good start with this course but there is a catch: there is a 1 week free trial and after that you pay $200 a month. With a duration of 6-9 months it will set you back $1200 – $1800. This is a fairly large amount of money for something which has not proven its worth (not every employer will be impressed by a nanodegree by Udacity). And this ROI (Return On Investment) question was how I originally wanted to start this blog because I had som serious doubts about whether to continue with the program or not. But then I went for another intro. And I am glad I did, because during the writing of this post my doubts have disappeared.
I have worked as an IT consultant for almost 20 years now and I have done my share of (live) courses ranging from 1 day workshops to a couple of weeks of training (a COOL:gen course) and they all were expensive and many of them where not that great (instructors too late, long breaks, technical issues with equipment, missing course material, bad preparation of the instructor, endless diversions from the original subject etcetera). If I say that the average costs for these courses was about $1000 a day I wouldn’t be far off. This is about $100 – $125 an hour with breaks included!
When I look at the Udacity program and take the default trajectory (6 months, 10 hours a week, $200 per month) I will pay $4,6 for every hour spend on the course. That is some great value! So what if “nanodegree” doesn’t mean anything to employers yet; in these 6 months I will make a couple of real working apps, learn Swift and hopefully meet some great people along the way.
Udacity: I am here to stay.