Category Archives: Programming Languages

Topic 2 – 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 about 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 should I do now?

Please read this Stephen Prata (2011). C Primer Plus. Pearson book.
Alternatively, you can read from Chapter 1 to Chapter 9 of this Stephen Prata (2012). C++ Primer Plus. Pearson book.
Alternatively, you can read from Chapter 1 to Chapter 9 of this John M. Zelle (2017). Python Programming: An Introduction to Computer Science. Franklin, Beedle & Associates book.

Alternatively, you can read from Chapter 1 to Chapter 11 of this Charles Severance (2013). Python for Informatics: Exploring Information book.
Alternatively, you can read from Chapter 1 to Chapter 11 of this Chris Pine (2013). Learn to Program: The Facets of Ruby Series. The Pragmatic Bookshelf book.
Alternatively, you can read 
- 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 please read this Harold Abelson and Gerald Jay Sussman (1996). Structure and Interpretation of Computer Programs. The MIT Press book to get vocabularies and in-depth knowledge about programming, especially the relationship between mathematics and programming, and ideas of functional programming and logic programming.
Alternatively please read these Course Notes.
After finishing the books please click Topic 3 - Introduction to Algorithms and Data Structures to continue.

How to Completely Uninstall Python on macOS?

Problem:

You have an issue with a Python version (e.g. the 3.7 version) and want to install another version (e.g. the 3.6 version). In order to install a fresh version you need to uninstall the current version first.

Solution:

Assume that the current version is 3.7. Replace 3.7 with another version that you installed.

Follow these 3 steps below.

1. Remove the third-party Python 3.7 framework

sudo rm -rf /Library/Frameworks/Python.framework/Versions/3.7

2. Remove the Python 3.7 applications directory

sudo rm -rf "/Applications/Python 3.7"

3. Remove the symbolic links, in /usr/local/bin, that point to this Python version. Ensure that the links exit using below command

ls -l /usr/local/bin | grep '../Library/Frameworks/Python.framework/Versions/3.7'

then run the following commands to remove all the links:

cd /usr/local/bin/
ls -l /usr/local/bin | grep '../Library/Frameworks/Python.framework/Versions/3.7' | awk '{print $9}' | tr -d @ | xargs rm

Installing a new version:

  1. Download a version from https://www.python.org/downloads/mac-osx/, double click the file and follow the instructions.
  2. Verify installation: python3 –version
  3. Install Homebrew from https://brew.sh
  4. Install virtualenv
pip3 install virtualenv
pip3 install virtualenvwrapper

5.  Create and activate a virtual environment

cd /Users/admin/Downloads/training_model/model 
python3 -m virtualenv /Users/admin/Downloads/training_model/model
source bin/activate

Topic 19 – Introduction to Computation and Programming using Python

Why do I need to learn about computation and programming using Python?

Computational thinking and Python are fundamental tools for understanding many modern theories and techniques such as artificial intelligence, machine learning, deep learning, data mining, security, digital imagine processing and natural language processing.

What can I do after finishing learning about computation and programming using Python ?

You will be prepared to learn modern theories and techniques to create  modern  security, machine learning, data mining, image processing or natural language processing software.

That sounds useful! What should I do now?

Please read this John V. Guttag (2013). Introduction to Computation and Programming using Python. 2nd Edition. The MIT Press book.

Alternatively, please watch
- this 6.0001 Introduction to Computer Science and Programming in Python. Fall 2016 course (Lecture Notes) and

- this MIT 6.0002 Introduction to Computational Thinking and Data Science, Fall 2016 course (Lecture Notes).
After finishing reading the book please click Topic 20 - Introduction to Applied Machine Learning to continue.

Topic 8 – 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 "Matthew Mathias and John Gallagher (2016). Swift Programming: The Big Nerd Ranch Guide. 2nd Edition. Big Nerd Ranch" book or
- this "Matt Neuburg (2018). iOS 12 Programming Fundamentals with Swift. O'Reilly Media" book first.

After that please read 
- this "Christian Keur and Aaron Hillegass (2016). iOS Programming: The Big Nerd Ranch Guide. 6th Edition. 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 "Stephen G. Kochan (2013). Programming in Objective-C" book or 
- this "Neil Smyth (2012). Objective-C 2.0 Essentials" book.
The third option for developing mobile applications is either

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

(ii) to leverage HTML/CSS/Javascript language and 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 React Native framework; please read this "Alex Banks and Eve Porcello (2017). Learning React Functional Web Development with React and Redux" book; then read this "Bonnie Eisenman (2016). Learning React Native: Building Native Mobile Apps with JavaScript" 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 invested 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.
After finishing these books please click Topic 9 - Software Requirements to continue.

 

Topic 7 – Introduction to Web Application Development

Why do I need to learn about web application development?

Desktop applications are very powerful and convenient but their development, deployment and maintenance are daunting. The reason is that the platform dependency makes it very expensive to create a desktop application working on different versions of different operating systems, such as Windows, Linux and Mac OSX. Deployment and updates of desktop application typically require high privileges access to a computer machine, causing a problem for companies requiring high security.

Fortunately, you can overcome these limitations by creating a web application running on a browser. To create a web application you need to learn about web application development.

What can I do after finishing learning web application development?

You will be able to create web applications like The BBC News, The WordPress Blog or The White House Website.

This is just what I want to learn! What should I do now?

Web application development requires a lot of reading. You have to master networking concepts, HTML, CSS, JavaScript, a programming language and a database management system for web.
Please read this Semmy Purewal (2014). Learning Web App Development. O'Reilly Media book first to get familiar with web application development.
JavaScript is the language for web development because it is implemented in most of the web browsers. Please read 
- this David Flanagan (2020). JavaScript: The Definitive Guide. O'Reilly Media book, and 
- this Kyle Simpson (2015). You Don't Know JS. O'Reilly Media book to master it. Strong knowledge of JavaScript will ease your web development learning very much.
Single page application is the default front-end choice for most of new web development projects. Please read 
- this Kirupa Chinnathambi (2018). Learning React. Addison-Wesley Professional book, and 
- this Robin Wieruch (2020). The Road to React - Your Journey to Master Plain Yet Pragmatic React. Leanpub book to learn how to create a single page application (SPA).
After that you will have 4 main options. You can choose one of them. We STRONGLY recommend that you choose only ONE option. You should NOT learn all of them at the beginning. You could save your time by digging into only one option. After mastering the selected path, you will realize that all of them are very similar in the sense of use. One note is that although their concepts are similar to one another but they will still take us much time to learn how to apply implementation of an approach in real world solutions.
When developing a real world web application, you often use only one or two of these 4 approaches. If you cannot make your own selection then we recommend you 
- a combination of the first and second option, or
- a combination of the first and third option, or
- a combination of the first and fourth option.
The first option is PHP world.  Please read 
- this Luke Welling and Laura Thomson (2016). PHP and MySQL Web Development. Addison-Wesley Professional book or 
- this Robin Nixon (2018). Learning PHP, MySQL & JavaScript. O'Reilly book.
After that depending on your projects you can read these books below. 
- Brad Williams, David Damstra and Hal Stern (2015). Professional WordPress: Design and Development. Wrox.
The second option is ASP.NET Core. Please read
- Adam Freeman (2020). Pro ASP.NET Core 3: Develop Cloud-Ready Web Applications Using MVC, Blazor, and Razor Pages. Apress book and
- this Andrew Lock (2021). ASP.NET Core in Action. Manning book.
A complementary part for this option is ASP.NET Web Forms. Please read this "Imar Spaanjaars (2014). Beginning ASP.NET 4.5.1: in C# and VB" book.
The third option is Java world. Please read this Cay S. Horstmann (2019). Core Java. Volume I - Fundamentals. Pearson book first if you are not familiar with Java language.

Then please read 
- this Tim Downey (2021). Guide to Web Development with Java - Understanding Website Creation. Springer book or 
- this Nicholas S. Williams (2014). Professional Java for Web Applications. John Wiley & Sons book.
The 4th option is Node.js world.  Please read this
- this Jonathan Wexler (2019). Get Programming with Node.js. Manning Publications book, and
- this Bruno Joseph D'mello et al. (2017). Web Development with MongoDB and Node. Packt Publishing book.
There are also several other options that you may consider. These options include Ruby on Rails and Flask.
If you need to convert a web application from one platform to another or create a web application framework please read 
- this Leon Shklar and Richard Rosen (2009). Web Application Architecture. John Wiley & Sons book, and
- this Leonard Richardson and Mike Amundsen (2013). RESTful Web APIs. O'Reilly Media book.
After finishing the books please click Topic 8 - Introduction to Mobile Application Development to continue.

Topic 6 – Introduction to Database Management Systems

Why do I need to learn about database management systems?

Your software must help users to do their work. The most important part of the users' work is the information. You need to learn about database management systems to store, manipulate, retrieve and secure this information.

What can I do after finishing learning database management systems?

You can create enterprise systems, such as airlines and railways, banking, education, telecommunications, digital libraries and digital publishing, finance, sales, health care information systems.

It sounds interesting! What should I do now?

Learning about database management systems requires a lot of effort. First you need to learn how to use database management systems under a user's point of view.
Please read
- this Ignatius Fernandez (2015). Beginning Oracle Database 12c Administration: From Novice to Professional. Apress book, or
- this Adam Jorgensen et al. (2012). Microsoft SQL Server 2012 Bible. Wiley book.
After that please read
- this Jeff Carpenter and Eben Hewitt (2020). Cassandra: The Definitive Guide: Distributed Data at Web Scale. O'Reilly Media book, and
- this Bradshaw Shannon, Eoin Brazil and Kristina Chodorow (2019). MongoDB: The Definitive Guide: Powerful and Scalable Data Storage. 3rd Edition. O'Reilly Media book.

After finishing the books please click Topic 7 – Introduction to Web Application Development to continue.

Topic 4 – 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.

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 and Eric Johannsen (2020). C# 8.0 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.
After finishing the books please click Topic 5 - Introduction to Windows Programming to continue.