Texbook: The Elements of Computing Systems, By Noam Nisan and Shimon Schocken (MIT Press)
Website with supplemental reading materials: From Nand to Tetris
C is indeed the "lingua franca" of systems programming, and because it has been around since the 1970s, there is a wealth of high-quality, Open Educational Resources (OER) that you can legally share, remix, or link to without needing specific permission from the authors.
Here are some of the best openly licensed resources to cover the "nuts and bolts" (syntax, pointers, memory management) so we can focus on the "weird applications."
These are comprehensive guides that serve as the modern, open-source equivalents to the classic K&R (Kernighan & Ritchie) book.
License: CC BY-SA 4.0 (Attribution-ShareAlike).
Why it works: It is modular and covers everything from basic syntax to advanced topics like threading and networking. Since it’s a wiki, it stays relatively up-to-date with modern C standards (C11/C17).
License: CC BY-NC-ND (Attribution-NonCommercial-NoDerivs).
Why it works: It is one of the few free books that focuses on modern C. It divides the learning into "Levels" (Encounter, Acquaintance, Cognition, Experience), making it easy to assign specific "levels" as pre-reading.
The C Book by Mike Banahan et al.
License: Custom Open License (Permits anyone to reprint, redistribute, or amend, provided original authorship is acknowledged).
Why it works: It’s a classic, thorough deep-dive into the language’s mechanics, originally published by Addison Wesley and later released for free by the authors.
If your students already know another language (like Java or Python), they may only need high-level summaries.
Essential C (Stanford CS Library)
License: Open/Free (Author Nick Parlante allows free use, reproduction, and excerpting).
Why it works: This is a legendary 45-page PDF that covers the core mechanics—variables, types, and the dreaded pointers—without any fluff. It’s perfect for a "week zero" asynchronous review.
License: CC BY-NC-ND 3.0.
Why it works: Beej is famous in the C world for his "Guide to Network Programming," but his general C guide is just as good. It’s written in a conversational, witty tone that keeps students engaged during asynchronous study.
To learn C, students have to break things. These platforms allow for automated, hands-on practice.
License: MIT/CC (Open Source platform).
Why it works: It offers 50+ exercises with automated testing. You can have students complete the "basics" track (Variables, Loops, Pointers) before they get to your lecture.
Harvard CS50 (Week 1–5 Materials)
License: CC BY-NC-SA 4.0.
Why it works: Harvard releases all their slides, source code, and lab assignments under Creative Commons. Their "Memory" and "Data Structures" weeks are arguably the best introductory C content available online.
Since C is all about how the hardware works, visual aids are essential for explaining things like the Stack vs. the Heap.
We discuss these more in depth later. All you need to know is that to take this course, you don't need access to a computer. Just a pencil and paper and ideally some string and maybe some beads.
CADE MOORE POLYTECHNIC INSTITUTE
Course Preview
Introduction to C and Assembly Language
Why the World Still Runs on “Old” Languages
— And Why Learning Them Could Change Your Career
From The CM-Tech Team
When people talk about learning to code, the conversation usually starts with trendy languages: Python, JavaScript, maybe even Rust. And those are great tools. But here’s something most people don’t realize: the most important software on the planet is built on languages that were created decades ago — and the people who know how to work with them are retiring faster than they can be replaced.
This course teaches you two of the most foundational technologies in all of computing: the C programming language (created in 1972) and Assembly language (which has existed in various forms since the 1950s). These are not museum pieces. They are the invisible foundation that holds up the entire digital world.
If that sounds like an exaggeration, keep reading. The numbers tell a story that might surprise you.
To understand why learning a “classic” language matters, consider COBOL — a programming language created in 1959. Most people in tech today have never even touched it. But here are the facts:
COBOL by the Numbers
• Over 220 billion lines of COBOL code are still running worldwide
• About 70% of global financial transactions are processed by COBOL-based systems
• 95% of ATM swipe transactions in the United States flow through COBOL code
• COBOL processes an estimated $3 trillion in financial transactions every single day
• 43% of major American banking systems still rely on COBOL
So what’s the problem? The people who know COBOL are disappearing. The average age of a COBOL programmer in the United States is estimated at 55–58 years old. Roughly 10% of the existing COBOL workforce retires every year. Meanwhile, over 85% of universities dropped COBOL from their curriculum since the 1990s. The pipeline of new talent is nearly empty.
During the COVID-19 pandemic, this crisis became impossible to ignore. The Governor of New Jersey had to make a public plea for volunteer COBOL programmers because the state’s 40-year-old unemployment benefits system couldn’t handle the surge in claims. Kansas, Connecticut, and other states faced the same problem.
Today, mainframe COBOL developers earn an average of over $125,000 per year, with demand projected to grow 15% over the next decade. Companies are scrambling to hire people with these skills — and they’re having a very hard time finding them.
The Lesson: The most in-demand programming skill of the next decade might be one that was invented before the moon landing. Follow the demand, not the hype.
What COBOL is to banking, the C programming language is to virtually everything else. C was created in 1972, and more than fifty years later, it remains one of the most important and widely used languages on Earth.
Every major operating system — Windows, macOS, Linux, Android, and iOS — has its core (called the “kernel”) written primarily in C, with some portions in Assembly language. The Linux kernel alone powers about 97% of the world’s 500 most powerful supercomputers, and a modified version of it is the foundation of every Android phone on the planet.
The world’s most popular databases — Oracle, MySQL, PostgreSQL, Microsoft SQL Server — are all coded in C or a combination of C and C++. When you swipe a credit card, check a bank balance, or look up a flight, there’s C code working behind the scenes.
The TIOBE Programming Community Index is one of the most widely cited rankings of programming language popularity. As of April 2026, C holds the #2 spot worldwide — right behind Python — and has been gaining momentum. In the January 2026 TIOBE rankings, C jumped from fourth place to second, recording growth of 2.13 percentage points in a single year. The TIOBE CEO attributed this to C being “simple, fast, and extremely well suited” to the ever-growing market of embedded systems.
C has held a position in the top three programming languages for over three decades. It ranked #1 on the TIOBE Index in 1991, 1996, 2001, and 2006. Even now, in 2026, it continues to outperform many younger languages.
Notice something? Assembly language also entered the TIOBE top 10 in early 2026, reflecting growing demand for embedded systems, IoT devices, and performance optimization at the hardware level. This course covers both C and Assembly — #2 and a top-10 language on the global charts.
Here’s a fact that surprises many people: the most popular version of Python (called CPython, which stands for “C Python”) is itself written in C. When you run a Python program, under the hood, it’s C code doing the heavy lifting.
This pattern is everywhere in the world of software. Think of it like a building: the floors people walk on might be polished and modern (that’s Python, JavaScript, and similar high-level languages), but the foundation, the beams, and the plumbing underneath are all built with C.
Artificial Intelligence is one of the hottest fields in technology right now. The two most important AI frameworks in the world are TensorFlow (built by Google) and PyTorch (built by Meta/Facebook). Developers write their AI code in Python — but here’s the key: the performance-critical engine inside both frameworks is written in C++.
PyTorch’s original engine (called Torch) was a machine-learning library written in C++ and CUDA. Today, its core backend remains C++, and major AI products including ChatGPT, Tesla Autopilot, and Hugging Face’s Transformers are all built on top of PyTorch. TensorFlow similarly runs on a C++ core, and Google even built custom chips (called TPUs) optimized for this kind of low-level, high-speed computation.
When a Python programmer uses a high-performance library like NumPy (the standard tool for heavy math), they’re essentially calling optimized C code under the surface. C’s Application Binary Interface (ABI) is the standard by which different software components talk to each other. Almost every high-level language — from Python to Rust — provides a way to call C functions for exactly this reason.
Think of it this way: Python is the steering wheel. C is the engine. You can drive without understanding the engine — but the person who understands both can build better cars, diagnose problems others can’t, and command a higher salary.
Here’s a field you may not have heard of, but it’s growing fast: Software-Defined Radio (SDR). A traditional radio uses fixed hardware circuits to tune frequencies, filter signals, and decode transmissions. An SDR replaces most of that hardware with software running on a computer. One device can receive and transmit across a huge range of frequencies just by changing the software it runs.
SDR is used in military communications, satellite tracking, radar systems, emergency communications, amateur radio, and even wireless research at universities. It’s a field with real-world applications that keeps expanding.
The most widely used SDR framework is called GNU Radio. It’s a free, open-source toolkit used in hobbyist, academic, government, and commercial environments around the world. The way it works is clever: you build “flowgraphs” by connecting signal processing blocks together, and data streams through them in real time — filtering, frequency-shifting, demodulating, and decoding radio signals.
The front-end interface for GNU Radio uses Python, making it relatively easy to set up and configure. But the core signal processing blocks — the parts that do the hard, real-time mathematical work — are written in C++. This is because signal processing demands speed and efficiency that only a low-level language can provide.
Here’s where your C skills become directly relevant: C++ is backwards compatible with C. That means everything you learn about C — pointers, memory management, data types, control flow — transfers directly into C++. C is essentially a subset of C++. When you learn C, you’re learning the foundation that C++ is built on.
GNU Radio 4.0, which reached its first release candidate (RC1) in 2026, represents a major rewrite focused on high-performance signal processing — and it’s still built on C++. This technology isn’t going away.
If C is the engine, Assembly is the individual pistons, valves, and spark plugs. Assembly language lets you write instructions that map almost directly to what the computer’s processor physically does. There’s no translation layer, no garbage collector, and no runtime overhead. It’s raw computing.
Why does this matter? Because there are situations where every single clock cycle counts — a medical device monitoring a patient’s heartbeat, a flight control system keeping an airplane stable, a microcontroller inside an antilock brake system. In these environments, a delay caused by a higher-level language could literally be dangerous. Assembly gives engineers precise, deterministic control over timing and resources.
Even the Linux kernel — the most widely used operating system kernel in the world — contains Assembly code for architecture-specific tasks like optimizing memory use and task execution. Every new computer chip that gets designed needs Assembly-level work before any higher-level language can run on it.
The job market reflects this. Embedded firmware engineers — professionals who work at the intersection of hardware and software, typically using C and Assembly — earn strong salaries. According to Glassdoor (April 2026), the average salary for an embedded firmware engineer in the United States is approximately $168,000 per year, with top earners reaching $205,000 or more. Job listings on platforms like Indeed routinely list “C/C++ and Assembly languages” as required skills.
C is often described as “portable Assembly.” It gives you direct control over memory and hardware while remaining readable across different computer architectures. Learning both C and Assembly together gives you a complete picture of how computers actually work — from the code you write, all the way down to the electrical signals in the processor.
The global shortage of software engineers is serious and getting worse. According to industry research, the worldwide shortage of full-time software engineers was projected to reach 4 million by 2025, and the IT talent shortage is expected to cost organizations $5.5 trillion in losses by 2026.
Within that broader shortage, low-level programming skills — C, C++, Assembly, embedded systems — are in an especially tight spot. Here’s why:
Only about 8% of new developers learn C as their first language, according to an analysis of tech job listings. Most beginners start with Python or JavaScript.
C and C++ skills grew by over 594% in demand in 2024, the fastest growth among all technology skills tracked that year.
An estimated 64 billion connected IoT devices are projected by 2026 — and most of them need efficient C code to run on their limited hardware.
87% of organizations report already experiencing a talent gap or expect to face one in the near future.
What this means in practical terms: employers are competing for a small pool of people who understand how computers work at a fundamental level. C programmers earn median salaries of around $152,800 — roughly 17% higher than the industry average for software developers. Embedded systems roles, which demand C and Assembly skills, are among the most reliably compensated positions in all of technology.
Most coding bootcamps and popular tutorials teach web development and high-level scripting. That creates a lot of competition at the top of the stack. But the people who understand the bottom of the stack — operating systems, embedded hardware, memory management, processor-level instructions — are in much shorter supply. This course puts you in that second category.
The bottom line: While millions of people are learning to build websites and apps, far fewer are learning to build the systems those websites and apps run on. C and Assembly are the keys to that deeper layer.
A fair question: if artificial intelligence is getting so smart, will it make programming skills obsolete? The short answer is no — but the longer answer is more interesting.
AI is very good at generating boilerplate code in popular high-level languages. It can write a Python script or a JavaScript function quickly and often correctly. But AI tools are far less reliable when it comes to low-level systems programming, where the consequences of errors are severe and the code must interact directly with hardware. Buffer overflows, memory leaks, race conditions, timing-critical embedded logic — these are domains where human expertise is not just valuable, it’s essential.
Moreover, AI itself runs on low-level code. As one industry report put it: organizations need human developers who understand legacy and low-level systems to oversee AI-assisted modernization, validate translated code, and make sure nothing breaks during migration. The IEEE (one of the world’s largest technical professional organizations) has noted that deep-stack languages like C may have a long shelf life precisely because full replacement of the systems built on them is so complex and risky.
In other words: AI won’t eliminate the need for C and Assembly skills. It will amplify it.
This course is designed to teach you C and Assembly language from the ground up. You don’t need previous programming experience, though it helps to be curious and willing to think carefully about how things work. Here’s a taste of what you’ll learn:
How computers actually execute instructions — from the code you type, to the compiler, to the processor.
C fundamentals: variables, data types, loops, functions, arrays, pointers, and memory management.
Assembly fundamentals: registers, the stack, addressing modes, and how to read and write instructions the processor directly understands.
Memory management: the elegant simplicity of C that lets you control exactly how your program uses the computer’s resources.
How C connects to everything else: understanding why Python, AI frameworks, databases, operating systems, and radio systems all depend on C under the hood.
Real-world problem solving: applied scenarios and assessments that test your ability to think like a systems programmer.
One of C’s greatest strengths is its simplicity. The entire language specification is compact compared to modern languages. There are only about 32 keywords in C (compared to hundreds in languages like C# or Java with all their libraries). What this means for you as a learner is that you won’t be memorizing enormous vocabulary lists — you’ll be learning a small set of powerful tools and understanding deeply how they work.
C gives you exactly what you ask for, nothing more and nothing less. There’s no hidden memory manager making decisions behind your back. There’s no automatic garbage collection that might cause a delay at the wrong moment. This transparency is what makes C perfect for learning how computation actually happens — and it’s what makes it irreplaceable in performance-critical systems.
Here’s the truth most coding tutorials won’t tell you: the people who get the best jobs in technology aren’t always the ones who learned the trendiest language. They’re the ones who understand how the machine works. They’re the ones who can look at a system and say, “I know what’s happening under the hood.”
That’s what this course gives you. Whether you go on to work in embedded systems, contribute to open-source operating systems, explore software-defined radio, or simply use this knowledge as a foundation for learning other languages, you’ll be starting from a position of real understanding.
The COBOL crisis taught us that ignoring the “old” technologies is a mistake. C and Assembly aren’t old in the way a rotary phone is old. They’re old in the way steel and concrete are old — still holding up every building on the skyline, still essential, and still the thing you need to understand if you want to build anything that lasts.
Welcome to the course.
Let’s build something that matters.
— The CM-Tech Team
The statistics cited in this preview come from the following sources. Because you may not have access to the internet, we have included them here for transparency and so that staff, mentors, or future researchers can verify the information.
1. COBOL Financial Transactions: Metaintro, “The $3 Trillion Code Nobody Knows How to Fix,” March 2026. Reports COBOL processes $3 trillion in daily financial transactions, 95% of U.S. ATM swipes, average developer age of 55, and 10% annual retirement rate. Also cites average mainframe COBOL salary of $125,525 and projected 15% demand growth over next decade.
2. COBOL Lines of Code: Reuters (2017); MicroFocus/OpenText (2022); Forbes. Estimated 220 billion+ lines of COBOL in active use; MicroFocus higher estimate of 800 billion. Forbes reports 80% of face-to-face financial transactions globally use COBOL. DistantJob, “Why COBOL Still Matters,” December 2025.
3. COBOL Workforce Shortage: Phil Teplitzky study (2019) via DistantJob and TechChannel. Average COBOL programmer age 58; 10% annual retirement rate; 85%+ of universities dropped COBOL since the 1990s. ACM Communications, “COBOL Programmers Are Back in Demand. Seriously.”
4. C Language TIOBE Ranking: TIOBE Index, April 2026 via TechRepublic. C holds #2 position; jumped from #4 to #2 in January 2026 with 2.13 percentage-point gain. TIOBE CEO: C is “simple, fast, and extremely well suited” to embedded systems. Codegnan, “Programming Language Popularity Statistics 2026.”
5. Assembly Language Top 10: TechEduByte, “TIOBE Index for February 2026: Top 10 Most Popular Programming Languages,” February 2026.
6. C in Operating Systems: Toptal, “After All These Years, the World Is Still Powered by C.” Linux kernel written in C per official Linux Kernel documentation (docs.kernel.org). Windows NT kernel mostly C per Microsoft. 97% of Top 500 supercomputers run Linux. Wikipedia, “Linux Kernel.”
7. CPython: Wikipedia, “CPython.” CPython is the reference implementation of Python, written in C and Python.
8. PyTorch C++ Backend: Wikipedia, “PyTorch.” Original Torch library written in C++ and CUDA. PyTorch’s C++ backend (LibTorch/ATen). ChatGPT, Tesla Autopilot, Hugging Face Transformers built on PyTorch. PyTorch C++ API documentation (docs.pytorch.org).
9. TensorFlow C++ Core: Wikipedia, “TensorFlow.” Open-source ML library with C++ core, supporting Python, C++, Java, JavaScript. Built In, “PyTorch vs. TensorFlow.”
10. GNU Radio / SDR: Wikipedia, “GNU Radio.” Free software toolkit for SDR; core signal processing blocks written in C++, Python front-end. GNU Radio 4.0 RC1 announced 2026. SCIRP, “SDR Prototyping with Visual C++” confirms core blocks in C++. gnuradio.org.
11. Software Engineer Shortage: Second Talent, “Engineering Talent Shortage Statistics by Programming Language,” December 2025. IDC projects 4 million global software engineer shortage; $5.5 trillion in losses by 2026. 87% of organizations face talent gap; 1.4 million unfilled tech jobs.
12. C Programmer Salaries: MarkAICode, “Why Learning C in 2025 Still Lands $150k Jobs,” May 2025. Analysis of 50,000 job listings: C programmers earn median $152,800, 17% above average. Only 8% of new developers learn C first. C/C++ skills grew 594% in demand in 2024.
13. Embedded Engineer Salaries: Glassdoor, “Embedded Firmware Engineer Salary,” April 2026. Average $168,233/year; top earners $205,000+. Glassdoor, “Embedded Software Engineer Salary,” April 2026. Average $170,374/year.
14. IoT Projections: IBM embedded systems market projections via MarkAICode. 64 billion connected devices projected by 2026; embedded market growing 11.7% annually through 2027.