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.

Topic 3 – Introduction to Data Structures and Algorithms

Why do I need to learn algorithms and data structures?

Your software must solve real-world problems.

Knowing a  programming language does help you to write software but it does not help you to reuse the existing solutions to save your time and effort when creating a software system.

Many real world problems were already solved and the solutions were documented as data structures and algorithms.

You need to learn them so that you will not reinvent the wheel and can apply them to solve your specific problems to reduce your time and effort or optimize your solutions.

What can I do after finishing learning algorithms and data structures?

You will be able to write a program to tell a computer
- to store and search for something efficiently,
- to sort something for you,
- to encrypt or decrypt sensitive information for you.

Given some programs, you will be able to tell which one will run faster when looking at their source code.

Given a problem, you will be able to choose appropriate data structures for representing concepts in a computer.

That sounds useful! How can I learn algorithms and data structures?

Please read this Jay Wengrow (2017). A Common-Sense Guide to Data Structures and Algorithms. Pragmatic Bookshelf first.

After that please read this Richard J. Trudeau (1994). Introduction to Graph Theory book to learn about graph theory.
After that please read this Thomas H. Cormen et al. (2009). Introduction to Algorithms. The MIT Press book to learn in depth about algorithms and data structures.
After finishing the book please click Topic 4 - Object-Oriented Programming to continue.

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.

Topic 1 – Operating Systems

Why do I need to learn about operating systems?

Because you will develop your software using an operating system or for an operating system.

How many operating systems should I know?

As many as possible. We recommend that you learn how to work with Windows first. Then you learn about basic concepts of an operating system.

How do I learn about operating systems under a user’s view?

Please read this Andy Rathbone (2015). Windows 10 For Dummies. Wiley book.

How about other operating systems such as macOS, Linux or Unix?

If you have a Mac then you can read this Pogue David (2019). macOS Mojave: The Missing Manual. O'Reilly Media book.

If you have a PC with Ubuntu Linux or Unix then you can read this Mark G. Sobell (2015). A Practical Guide to Ubuntu Linux. Prentice Hall book.
After reading these books please read this Abraham Silberschatz et al. (2013). Operating System Concepts. Wiley book to grasp basic concepts of an operating system.

Once you finish reading these books please click Topic 2 - Introduction to Programming to continue.