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 the instructions of your computer programs.
Without knowledge of a programming language, you cannot develop 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, and Lisp.
How many programming languages should I know?

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

What can I do after finishing learning programming language?

You will be able to write programs that tell a computer to:

  • perform calculations,
  • count the occurrences of a string,
  • store and search for a string,
  • sort a list of numbers, or
  • display an image.

What should I do now?

Please read this book to learn programming using the C language: Stephen Prata (2011). C Primer Plus. Pearson.

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

Alternatively, you can read these books to learn programming using the Python language:,

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

Alternatively, you can read these books to learn programming using the Go language:

After that, if you would like to study system programming in depth, please read one of the following books:

After that, if you would like to build your vocabulary and gain in-depth knowledge of programming, especially the relationship between mathematics and programming, as well as the ideas of functional programming and logic programming, then please read the book or the notes below:

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, Dictionaries.
  • 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 programming, please click on 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 within an operating system environment, and your software will also run on top of 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 the concepts that help you understand programming terminologies.

    You will 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 can learn the core concepts of any operating system.

    How do I learn to use operating systems?

    Please read this book to learn how to use Windos 10: Andy Rathbone (2015). Windows 10 For Dummies. John Wiley & Sons.

    Aternatively, please read the books below 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 to learn how to use macOS: Pogue David (2019). macOS Mojave: The Missing Manual. O’Reilly Media.

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

    After that, please read these lecture notes and try the code to grasp the core concepts of computing: Introduction to Computing Principles.

    After that, please read this book to learn the core concepts of an operating system: Abraham Silberschatz et al. (2018). Operating System Concepts. Wiley.

    Terminology Review:

    • Central Processing Unit (CPU).
    • Random-Access Memory (RAM).
    • Hard Disk Drive (HDD).
    • Solid-State Drive (SSD).
    • Programs: How does a program start and run?
    • Boot Loaders.
    • Basic Input/Output System (BIOS)
    • Unified Extensible Firmware Interface (UEFI).
    • Computers: The interplay of CPU, RAM and Devices.
    • Interrupts.
    • ∞×∞
    • Operating Systems.
    • Modes of Execution.
    • Process Management.
    • Memory Management.
    • I/O System Management.
    • ∞×∞
    • Kernel, Drivers and Apps.
    • Loading and Executing OS.
    • OS User Mode.
    • OS Kernel Mode.
    • System Calls.
    • CPU User Instructions.
    • CPU Kernel Instructions.
    • CPU Protection Rings.
    • Monolithic Structure.
    • Microkernels.
    • ∞×∞
    • Processes.
    • Threads.
    • Process Synchronization.
    • ∞×∞
    • Logical Address.
    • Physical Address.
    • Memory Management Unit.
    • Paging, Flat Page Tables, Page Size, Frame Table, Page-Table Base Register (PTBR), Translation Look-aside Buffer (TLB), Protection Bits.
    • ∞×∞
    • File System.
    • Security and Protection.
    • Networks.
    • Virtual Memory.
    • Virtualization.
    • Virtual Machines.

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