All posts by admin

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 8 – 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 exactly 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, and
– this Jon Duckett (2011). HTML & CSS – Design and Build Websites. John Wiley & Sons book first to get familiar with web application development.

After that please read
– this Stephen Greig (2013). CSS3 – Pushing the Limits. John Wiley & Sons book and
– this Anne Boehm and Zak Ruvalcaba (2018). Murach’s HTML5 and CSS3. Mike Murach and Associates book to learn in-depth about HTML and CSS.

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, and
– this Jon Duckett (2014). JavaScript and JQuery. Interactive Front-End Web Development. John Wiley & Sons 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 Alex Banks and Eve Porcello (2020). Learning React Modern Patterns for Developing React Apps. O’Reilly book to learn how to create a single page application (SPA).

After that please read
– this Michael Geers (2020). Micro Frontends in Action. Manning Publications book, and
– this Luca Mezzalira (2022). Building Micro-Frontends. O’Reilly Media book to learn how to create micro-frontends.

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 technology, 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 it still takes us much time to learn how to apply an approach to real world web application.

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 (2021). Learning PHP, MySQL & JavaScript. O’Reilly book.

After that depending on your projects you may need to read the books below
Brad Williams et al. (2015). Professional WordPress: Design and Development. Wrox.

The second option is ASP.NET.
Please read
– this 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 that is a technology that you need to master if you are maintaining a legacy project.
Please read this Imar Spaanjaars (2014). Beginning ASP.NET 4.5.1 in C# and VB. Wrox book to learn about ASP.NET Web Forms.

The third option is Java world.
If you are not familiar with Java language then 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 first.

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.

After that please read this Mark Heckler (2021). Spring Boot – Up and Running – Building Cloud Native Java and Kotlin Applications. O’Reilly Media book.

The 4th option is Node.js world.
Please read
– 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 if you are required to learn them for a maintenance project.
These options include
Ruby on Rails, please read this Michael Hartl (2020). The Ruby on Rails Tutorial. Addison-Wesley Professional book,
Flask, please read this Miguel Grinberg (2018). Flask Web Development: Developing Web Applications with Python. O’Reilly Media book, and
Django
.

If you need to convert a web application from one platform to another or create a web application framework then 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.

Terminology Review:

  • Networking
  • HTTP
  • HTML
  • Cascading Style Sheets (CSS)
  • CGI
  • Web Applications
  • Multiple Page Application
  • Single-Page Application (SPA)
  • RESTful APIs
  • gRPC APIs
  • GraphQL APIs
  • XML
  • SOAP APIs
  • Web Application Frameworks
  • Portal Frameworks
  • Content Management System (CMS)
  • Payment Gateways

After finishing learning about web application development please click Topic 9 – Introduction to Mobile Application Development to continue.

 

Topic 7 – 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 design and implement database part for software systems. These systems may include airlines and railways, banking, education, telecommunications, digital libraries and digital publishing, finance, sales, health care information systems, e-commerce system, content management system.

You will also know how to build a data warehouse. You will know how to design a relational database and write SQL code PROPERLY (i.e. for specific purposes) too.

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.

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, or
– this Vinicius M. Grippa and Sergey Kuzmichev (2021). Learning MySQL. O’Reilly Media book, or
– this Regina O. Obe and Leo S. Hsu (2017). PostgreSQL Up and Running. O’Reilly Media book.

After that please read this Stephane Faroult and Peter Robson (2006). The Art of SQL. O’Reilly Media book first to learn how to write SQL code efficiently.

After that please read
– this C. J. Date (2019). Database Design and Relational Theory: Normal Forms And All That Jazz. Apress book and
– this C. J. Date (2015). SQL and Relational Theory: How to Write Accurate SQL Code. O’Reilly Media book to learn about normal forms and relational theory behind relational databases for creating more efficient logical designs for your databases.

After that please read
– this W.H. Inmon (2003). Building The Data Warehouse. Wiley book and
– this Ralph Kimball and Margy Ross (2002). The Data Warehouse Toolkit: The Complete Guide to Dimensional Modeling. Wiley book and
– this Vincent Rainardi (2008). Building a Data Warehouse: With Examples in SQL Server. Apress book to learn how to build a data warehouse.

After that please read
– this Pramod J. Sadalage and Martin Fowler (2012). NoSQL Distilled: A Brief Guide to the Emerging World of Polyglot Persistence. Addison-Wesley Professional book, and
– this Jeff Carpenter and Eben Hewitt (2022). 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.

Terminology Review:

  • Databases.
  • Flat Files.
  • Database Management Systems.
  • Relational Databases.
  • (Oracle) Tablespaces, Datafiles, and Objects.
  • (Oracle) Databases, Instances, Schemas.
  • Tables, Rows, Columns, Primary Keys, Foreign Keys.
  • Normal Forms.
  • Relational Model: Relations, Tuples, Primary Keys, Foreign Keys, Constraints.
  • Data Manipulation Languages (DMLs): Relational
    Algebra, Relational Calculus.
  • Relational Algebra: σ Select, π Projection, ∪ Union, ∩ Intersection, – Difference, × Product, ⋈ Join.
  • Data Models: Entity-Relationship (ER) Model, Relational Model, Object-Oriented Model, NoSQL Model.
  • Schemas.
  • Entity-Relationship Model.
  • SQL, TSQL.
  • Stored Procedures.
  • Functions.
  • Queries.
  • Aggregates (AVG, MIN, MAX, SUM, COUNT), ANY_VALUE, GROUP BY, HAVING, LIKE (Strings).
  • Output Redirection.
  • ORDER BY, ROW_NUMBER, RANK.
  • Subqueries.
  • Views.
  • Common Table Expressions.
  • Indexes.
  • Recovery.
  • Replication.
  • Data Warehouse.
  • Dimensional Modeling.
  • NoSQL.
  • Key-Value Databases.
  • Document Databases.
  • Column-Family Databases.
  • Graph Databases.
  • Array (Vector, Matrix, Tensor) Databases.

After finishing learning about database management systems please click Topic 8 – Introduction to Web Application Development to continue.

 

Topic 6 – Introduction to Windows Programming

Why do I need to learn about Windows programming?

Because Windows is the most popular OS and most companies use it for their daily work. So your software must run on Windows in order to help users do their work.

What can I do after finishing learning Windows programming?

You will know how to create Windows applications that are similar to Notepad, or Paint, or Calculator.

You could also create a dictionary application or an application for storing and searching for books.

It sounds interesting! What should I do now?

Windows  programming is a very big topic. You need to master at least 3 specific technologies: Windows API, Windows Forms and Windows Presentation Foundation.

First, please read this book Charles Petzold (1998). Programming Windows. Microsoft Press, and this book, Jeffrey Richter (1999). Programming Applications for Microsoft Windows. Microsoft Press, to learn about Windows APIs.

After that, please read this book, Chris Sells and Michael Weinhardt (2006). Windows Forms 2.0 programming. Addison-Wesley, to learn about Windows Forms.

After that, please read this book, Chris Sells and Ian Griffiths (2007). Programming WPF: Building Windows UI with Windows Presentation Foundation. O’Reilly Media, learn about Windows Presentation Foundation.

Can I learn Java stuff instead of Microsoft stuff for Windows programming?

Yes, you can. However please remember that Microsoft is the one who created and has been developing Windows. Therefore we believe that the good approach for learning programming for Windows is to learn Microsoft technologies.

Can I create a desktop application that can run in Windows, macOS and Linux using one code base?

Yes, you can.  Please consider Electron framework and Tauri toolkit.

Terminology Review:

  • Windows, Menus, Panels, Tabs.
  • Buttons, Text Boxes, Combo Boxes, Images, Trees.
  • Windows API.
  • Windows Forms.
  • Windows Presentation Foundation (WPF).
  • Graphics Device Interface (GDI).
  • Dynamic-Link Library (DLL).
  • Processes.
  • Threads.
  • Shared Memory.
  • Windows Sockets 2 (Winsock).
  • Windows Services.
  • Office Add-ins.

After finishing the books please click Topic 7 – Introduction to Database Management Systems 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?

First, please read this book, Jim Keogh and Mario Giannini (2004). OOP Demystified. McGraw-Hill, to gain a fundamental understanding of object-oriented programming with intuitive examples, and to distinguish object-oriented concepts from procedural programming concepts.

After that, please read this book RB Whitaker (2017). The C# Player’s Guide. Starbound Software, 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 book, Joseph Albahari (2023). C# 12 in a Nutshell – The Definitive Reference. O’Reilly Media,  or this book, Herbert Schildt (2010). C# 4.0 The Complete Reference. McGraw Hill 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 book, Bjarne Stroustrup (2013). The C++ Programming Language. Pearson Education, to learn the core concepts of object-oriented programming with C++ implementation and specific features.

f you are required or prefer to learn Java, please read this book, Herbert Schildt (2019). Java: The Complete Reference. McGraw-Hill Education, to learn the core concepts of object-oriented programming with Java implementation and specific features.

After that, please read this book, Matt Weisfeld (2019). The Object-Oriented Thought Process. Pearson Education , and this book, Bertrand Meyer (1997). Object-Oriented Software Construction. Prentice Hall, to deepen your understanding of OOP concepts and to learn how to design software more efficiently using this approach.

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 4 – Introduction to Data Structures and Algorithms

Why do I need to learn data structures and algorithms?

Your software should address real-world problems. While knowing a programming language is important for writing software, it doesn’t help you leverage existing solutions to save time and effort when building a system.

Many real-world problems have already been solved, and their solutions are documented as data structures and algorithms. It’s important to learn these so you don’t reinvent the wheel, enabling you to apply them to your specific problems, thereby reducing time and effort, or optimizing your solutions.

Additionally, learning algorithms and data structures will help you develop algorithmic thinking and problem-solving skills, which are essential for any software developer.

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

Given a problem, you’ll be able to choose the appropriate data structures to represent concepts in a computer.

You’ll be capable of writing a program that instructs the computer to:
– store and search for data efficiently,
– sort information,
– compute irrational numbers,
– find the shortest path between two locations, or
– encrypt and decrypt sensitive information.

When examining source code, you’ll also be able to determine which program will run faster.

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

First, please read this book Jay Wengrow (2020). A Common-Sense Guide to Data Structures and Algorithms. Pragmatic Bookshelf, to gain intuitive understanding of data structures and algorithms.

After that, please read this book, Richard J. Trudeau (1993). Introduction to Graph Theory. Dover Publications, to learn about graph theory.

After that, please read this book, Thomas H. Cormen et al. (2022). Introduction to Algorithms. The MIT Press, to learn how to formally define, implement, and evaluate data structures and algorithms.

Alternatively, please audit this course, MIT 6.006 – Introduction to Algorithms, Fall 2011, and read its Lecture Notes, to learn the core data structures and algorithms through interactive explanations.

After that, you can audit this course, MIT 6.046J – Design and Analysis of Algorithms, Spring 2015, and read its Lecture Notes, to delve deeper into the design and analysis of data structures and algorithms through interactive explanations.

Terminology Review:

  • Arrays.
  • Selection Sort.
  • Invariant Reasoning.
  • Order of Growth, Big O, Big Theta.
  • Insertion Sort. Complexity: O(n²).
  • Merge Sort, Recursion Tree. Complexity: O(nlgn).
  • Bubble Sort. Complexity: O(n²).
  • Quick Sort. Complexity: O(nlgn).
  • Counting Sort. Complexity: O(n + k).
  • Radix Sort. Complexity: O(nlogₙk).
  • Sets.
  • Stacks.
  • Queues.
  • Lists, Linked Lists, Sorted Lists.
  • Trees, Binary Trees, Heaps.
  • Heapsort. Complexity: O(nlgn).
  • Hash Tables, Maps, Dictionaries: Chaining, Division Method, Multiplication Method, Open Addressing, Linear Probing, Double Hashing, Cuckoo Hashing.
  • Linear Search.
  • Binary Search.
  • String Matching: Karp-Rabin Algorithm, Rolling Hash ADT.
  • Binary Trees: Depth, Height, Traversal Order.
  • Binary Search Trees (BST).
  • AVL Trees, Rotations, AVL Sort.
  • Sequence Binary Trees.
  • Red-Black Trees.
  • 2-3 Trees.
  • B-Trees.
  • B+ Trees.
  • Comparison Model of Computation, Decision Tree, Search Lower Bound, Sorting Lower Bound.
  • Hierarchical Structure.
  • Karatsuba’s Algorithm.
  • Newton’s Method for Computing Square Roots.
  • Graphs: Complete Graphs, The Handshaking Lemma, Identical Graphs, Graph Isomorphism,  Adjacency Lists, Implicit Graphs, Adjacency Matrix, Incidence Matrix.
  • Breadth-First Search: Shortest Paths.
  • Depth-First Search: Tree Edges, Nontree Edges (Back Edges, Forward Edges, Cross Edges), Cycle Detection, Job Scheduling, Topological Sort.
  • Dijkstra’s Algorithm.
  • Bellman–Ford Algorithm.
  • Single-source Single-target Dijkstra.
  • Bi-Directional Search.
  • A* Algorithm.
  • Dynamic Programming: Subproblems, Guessing, Recursion and Memoization, Bottom-up, Topological Order, Original Problem and Parent Pointers.
  • Dynamic Programming Examples: Fibonacci Numbers, Text Justification, Parenthesization, Edit Distance.
  • Computational Difficulty: P, NP, EXP, R.
  • Hardness and Completeness: NP-hard, NP-complete, EXP-hard, EXP-complete.

After finishing learning about data structures and algorithms please click Topic 5 – Object-Oriented 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 book, Stephen Prata (2011). C Primer Plus. Pearson, to learn programming using the C language.

Alternatively, you can read this book, Stephen Prata (2012). C++ Primer Plus. Pearson (from Chapter 1 to Chapter 9), to learn programming using the C++ language.

Alternatively, you can read these books, Eric Matthes (2023). Python Crash Course. No Starch PressCharles Severance (2013). Python for Informatics: Exploring Information (from Chapter 1 to Chapter 11), and John M. Zelle (2017). Python Programming: An Introduction to Computer Science. Franklin, Beedle & Associates book (from Chapter 1 to Chapter 9), to learn programming using the Python language.

Alternatively, you can read this book, Chris Pine (2013). Learn to Program: The Facets of Ruby Series. The Pragmatic Bookshelf (from Chapter 1 to Chapter 11), to learn programming using the Ruby language.

Alternatively, you can read these books, Alan A. A. Donovan and Brian W. Kernighan (2015). The Go Programming Language. Addison-Wesley Professional, and Nathan Youngman and Roger Peppe (2018). Get Programming with Go. Manning Publications, to learn programming using the Go language.

After that if you would like to study system programming in depth then please read this book, Brian W. Kernighan and Dennis M. Ritchie (2016). The C Programming Language. Prentice Hall, or this book, Michael Kerrisk (2018). The Linux Programming Interface. No Starch Press.

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 book, Harold Abelson and Gerald Jay Sussman (1996). Structure and Interpretation of Computer Programs. The MIT Press, 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 Data Structures and Algorithms 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.

    What can I do after finishing learning operating systems?

    You will be prepared with skills that help you prepare environments for your your programming journey.

    You will be prepared with knowledge that helps you understand programming terminologies.

    You may even be inspired to learn programming to solve problems.

    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 to use operating systems?

    Please read
    – this book, Andy Rathbone (2015). Windows 10 For Dummies. John Wiley & Sons, to learn how to use Windos 10, or
    – this book, Andy Rathbone (2021). Windows 11 For Dummies. John Wiley & Sons and this book, Ciprian Adrian Rusen (2022). Windows 11 All-in-One For Dummies. John Wiley & Sons, to learn how to use Windows 11.

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

    If you have a Mac then you can read this book, Pogue David (2019). macOS Mojave: The Missing Manual. O’Reilly Media, to learn how to use macOS.

    If you have a PC with Ubuntu, or Linux, or Unix then you can read this book, Mark G. Sobell (2015). A Practical Guide to Ubuntu Linux. Prentice Hall, to learn how to use a Unix-based operating system.

    After that, please read these lecture notes, Introduction to Computing Principles.

    After that, please read this book, Abraham Silberschatz et al. (2018). Operating System Concepts. Wiley, to learn in depth about operating system concepts..

    Terminology Review:

    • Central Processing Unit (CPU).
    • Random-Access Memory (RAM).
    • Hard Disk Drive (HDD).
    • Solid-State Drive (SSD).
    • Programs.
    • Basic Input/Output System (BIOS)
    • Unified Extensible Firmware Interface (UEFI).
    • Boot Loader.
    • Operating System (OS).
    • Monolithic Structure.
    • Microkernels.
    • User Mode.
    • System Calls.
    • Kernel.
    • Kernel Mode.
    • Processes.
    • Threads.
    • Process Synchronization.
    • Memory Management Unit.
    • Logical Address.
    • Physical Address.
    • Paging.
    • File System.
    • Security and Protection.
    • Networks.
    • Virtual Memory.
    • Virtualization.
    • Virtual Machines.

    Once you finish learning about operating systems please click Topic 2 – Introduction to Computer Networks to continue.