Tag Archives: Objective-C

Topic 9 – Introduction to Mobile Application Development

Why do I need to learn about mobile application development?

Desktop applications are very useful but their deployment and updating are daunting. Web applications overcome many limitations but you still need a workstation to work with it. This is often a PC or MAC that is too large and heavy to bring on-the-go.

Nowadays most of us always bring a mobile device with us everywhere. It’s very convenient if we could use our daily software inside our mobile devices. In order to  leverage our mobile devices we need to develop software for them.
Therefore you need to learn mobile programming.

What can I do after finishing learning mobile programming?

You can create applications like WhatsApp, Instagram or games like Temple Run, Angry Birds, Fruit Ninjia.

How interesting! What should I do now?

Mobile programming requires a lot of reading. You have to master at least a programming language and a mobile platform. Currently, there are 2 major platforms for mobile development: Android and iOS. There are 3 options for developing a mobile application:
– native Android application or
– native iOS application or
– hybrid mobile application.

The first option for learning mobile programming is Android programming.
If you are not familiar with Kotlin language, please read this Josh Skeen and David Greenhalgh (2018). Kotlin Programming – The Big Nerd Ranch Guide. Pearson Education book first.

After that please read this Bill Phillips et al. (2019). Android Programming – The Big Nerd Ranch Guide. Big Nerd Ranch Guides book.

After that please read
– this Cay S. Horstmann (2019). Core Java. Volume I – Fundamentals. Pearson book, and
– this Cay S. Horstmann (2019). Core Java. Volume II – Advanced Features. Pearson book.

The second option for learning mobile application development is iOS programming.
Please read
– this Mikey Ward (2020). Swift Programming – The Big Nerd Ranch Guide. Big Nerd Ranch book or
– this Matt Neuburg (2021). iOS 14 Programming Fundamentals with Swift. O’Reilly Media book first.

After that please read
– this Christian Keur and Aaron Hillegass (2020). iOS Programming – The Big Nerd Ranch Guide. Big Nerd Ranch book or
– this Jonathon Manning et al. (2018). Learning Swift – Building Apps for macOS, iOS, and Beyond. O’Reilly Media book.

A complementary part of this option is Objective-C. Please read
– this Stephan G. Kochan (2014). Programming in Objective-C. 6th Edition. Addison-Wesley book or
– this Neil Smyth (2012). Objective-C 2.0 Essentials book.

The third option for developing mobile applications is

(i) to leverage C# language and the Xamarin framework; please read this Charles Petzold (2016). Creating Mobile Apps with Xamarin.Forms book; or

(ii) to leverage HTML/CSS/Javascript language and the Ionic framework; please read this Jeremy Wilken (2015). Ionic in Action: Hybrid Mobile Apps with Ionic and AngularJS book; or

(iii) to leverage HTML/CSS/Javascript language and the React Native framework; please read this Alex Banks and Eve Porcello (2020). Learning React Modern Patterns for Developing React Apps. O’Reilly book; then read this Bonnie Eisenman (2016). Learning React Native: Building Native Mobile Apps with JavaScript book; or

(iv) to leverage Dart language and the Flutter framework; please read this Priyanka Tyagi (2021). Pragmatic Flutter. CRC Press book.

Mobile is a great environment for games because of its mobility. If you are interested in developing games for Android please read this  Jayme Schroeder and Brian Broyles (2013). AndEngine for Android Game Development Cookbook book.

If you already have a background of C or C++ and want to develop games for both Android and iOS then please read
– this Roger Engelbert (2015). Cocos2d-x by Example: Beginner’s Guide book or
– this Raydelto Hernandez (2015). Building Android Games with Cocos2d-x book.

It seems that there are a lot of topics to learn. I am totally new to mobile programming. What are the only essential knowledge should I learn in order to reduce my learning time?

You could focus on these topics first?

– How to install necessary tools and create a Hello World application?

– What is the physical structure of a project and how to build it using both IDE and command line?

– How to deploy an application to Play Store or App Store?

– How to create UIs, transfer data between UIs, compose new UI using existing UIs using SDK features or frameworks?

– How to use built-in or 3rd party libraries to interact with camera, microphone, media player, GPS device, local files, local databases, external databases and external services.

– How to call native code libraries to improve performance or access low-level features.

Terminology Review:

  • Android.
  • iOS.
  • Native Apps.
  • Hybrid Apps.
  • Build Tools.
  • Views.
  • Controls.
  • Layouts.
  • Game Programming.
  • Game Development.
  • Native Development Kit.
  • Google Play Console.
  • App Store Connect.

After finishing learning about mobile application development please click Topic 10 – Software Requirements to continue.

 

Topic 5 – Object-Oriented Programming

Why do I need to learn about object-oriented programming?

Because most of modern software are written using object-oriented programming languages. Using object-oriented programming as a tool and more importantly as a problem solving approach will save you a lot of time and cost when you create modern software systems.

What can I do after finishing learning object-oriented programming?

You will be able to write a program to allow a user
– to draw a picture, save it, then load it, or
– to play ping-pong game, or
– to store and search for an employee’s CV.

Alright! What should I do now?

Please read this Jim Keogh and Mario Giannini (2004). OOP Demystified. McGraw-Hill book.

Is that all?

Unfortunately, the book is not sufficient for writing real world object-oriented software. Although the book already gives you the fundamental concepts of object-oriented programming the examples are only to illustrate the concepts, not to demonstrate real world situations.

We recommend that you read it first because it introduces basic concepts of object-oriented programming very well. It helps you to distinguish object-oriented concepts from procedural programing concepts very clearly so that you could read other books to dig into real world object-oriented programming in a proper way.

Please read this RB Whitaker (2017). The C# Player’s Guide. Starbound Software book to learn how to apply object-oriented concepts to creating real world software using a specific object-oriented programming language (i.e. C# language).

After that please take a quick look at
– this Joseph Albahari (2023). C# 12 in a Nutshell – The Definitive Reference. O’Reilly Media book or
– this Herbert Schildt (2010). C# 4.0 The Complete Reference. McGraw Hill book so that you can refer to a specific topic that needs more study when developing real world software.

I hear that there are many object-oriented programming languages such as C++, C#, Java, PHP, Objective-C, Swift, Python, Ruby.
How many object-oriented programming languages do I need to know?

You should learn as many as possible. However, in this stage, we recommend that you learn only C++ or C# or Java.

C++ is the most used language for creating software systems that need high performance, including games, operating systems, compilers, database management systems, web browsers, graphics editors, medical and engineering applications.

Java and C# are the most used languages for creating enterprise systems.

If you are required or prefer to learn C++, please read this Bjarne Stroustrup (2013). The C++ Programming Language. Pearson Education book.

If you are required or prefer to learn Java, please read this Herbert Schildt (2019). Java: The Complete Reference. McGraw-Hill Education book.

After that please read
– this Matt Weisfeld (2019). The Object-Oriented Thought Process. Pearson Education book and
– this Bertrand Meyer (1997). Object-Oriented Software Construction. Prentice Hall book to get deeper understanding about object-oriented concepts and learn how to design software using object-oriented approach more efficiently.

Terminology Review:

  • Abstraction.
  • Encapsulation.
  • Class-based Inheritance.
  • Prototype-based Inheritance.
  • Polymorphism.
  • Types.
  • Method Variables (C++ Function Pointers, C# Delegates).
  • Concurrency.
  • Collections.
  • Object-Oriented Analysis.
  • Object-Oriented Design.
  • Object-Oriented Programming.

After finishing learning about object-oriented programming please click Topic 6 – Introduction to Windows Programming to continue.

Topic 3 – Introduction to Programming

Why do I need to know a programming language?

Because you will develop your software using a programming language.
A programming language is a language that both you and a computer will understand.
It’s a tool for you to express what you want a computer to do.
It’s a tool for you to write instructions of your computer programs.
Without knowledge of a programming language, you cannot develop any software.

I hear that there are many programming languages such as C, C++, C#, Objective-C, Java, Swift, Ruby, Python, JavaScript, PHP, F#, Kotlin,  Clojure, Go, or Lisp.
How many programming languages should I know?

As many as possible. However, at this stage, you should learn about structure of a computer program and a procedure language (e.g. C or C++) first.

What can I do after finishing learning programming language?

You will be able to write a program to tell a computer
– to do a calculation, or
– to count for occurrence of a string, or
– to store and search for a string, or
– to sort a list of numbers, or
– to display an image.

What should I do now?

Please read this Stephen Prata (2011). C Primer Plus. Pearson book.

Alternatively, you can read

– this Stephen Prata (2012). C++ Primer Plus. Pearson book (from Chapter 1 to Chapter 9), or

– this John M. Zelle (2017). Python Programming: An Introduction to Computer Science. Franklin, Beedle & Associates book (from Chapter 1 to Chapter 9), or

– this Charles Severance (2013). Python for Informatics: Exploring Information book (from Chapter 1 to Chapter 11), or

– this Chris Pine (2013). Learn to Program: The Facets of Ruby Series. The Pragmatic Bookshelf book (from Chapter 1 to Chapter 11), or

– this Alan A. A. Donovan and Brian W. Kernighan (2015). The Go Programming Language. Addison-Wesley Professional book, and this Nathan Youngman and Roger Peppe (2018). Get Programming with Go. Manning Publications book.

After that if you would like to study system programming in depth then please read

– this Brian W. Kernighan and Dennis M. Ritchie (2016). The C Programming Language. Prentice Hall book, or

– this Michael Kerrisk (2018). The Linux Programming Interface. No Starch Press book.

After that if you would like to get vocabularies and in-depth knowledge about programming, especially the relationship between mathematics and programming, and ideas of functional programming and logic programming then please read

– this Harold Abelson and Gerald Jay Sussman (1996). Structure and Interpretation of Computer Programs. The MIT Press book, or

– these Course Notes.

Terminology Review:

  • Computer Programs.
  • Compilers.
  • Just-In-Time Compilers.
  • Interpreters.
  • Structured Programming.
  • Procedural Programming.
  • Object-Oriented Programming.
  • Functional Programming.
  • Declarative Programming.
  • Logic Programming.
  • Primitive Types: int, float, double, string, date/time, null.
  • Basic Constructs: variables & assignments, pointers, declarations, functions, macro.
  • Control Flow: if/else, while, switch, for, break, continue, recursion, exception, parallelism, signal, jump.
  • User-defined Types: struct, class, type.
  • Data Structures: Arrays, Lists, Linked Lists.
  • Object-Oriented Programming: abstraction, encapsulation, class-based inheritance, prototype-based inheritance, polymorphism.
  • Functional Programming: first-class and higher-order functions, no side effects, recursion.
  • Modularity: files, packages, namespaces, libraries, modules.
  • Concurrency: processes, threads, locks, channels, timers, callbacks, events, promises, event loop.
  • Type system: static type, dynamic type.
  • Error handling: try/catch.
  • Metaprogramming: reflection, template programming, DSL.
    • Clojure.

    After finishing learning about programming languages please click Topic 4 – Introduction to Algorithms and Data Structures to continue.