1. Computer science is fake

Clickbait, but hear me out.

1.1. Distinctions

Electrical, Computer Engineers believe in hardware and design it to do things.

Software engineers and computer scientists believe in the idea of a comput-er that runs code, but doesnt involve things like energy in joules, power in watts, or voltage, or current, or mass, or volume. Sometimes they even forget about time in seconds.

Creating embedded systems involves ALL of these domains, from the physics to the computation theory.

1.2. Electrical Engineering / Computer Engineering

Software engineering is the process of writing software in a reliable and structured way. It applies knowledge from Computer Science about algorithms, theory of computation, techniques for organizing data and programs, and other ideas.

  • Software engineering is to computer science, as

  • electronic circuits is to physics.

Table 1. Overlap between Electrical and Computer Engineering

Electrical Engineering

Computer Engineering

physics, power and energy,

electronics, embedded systems,

software, computer science

An embedded system includes a microcontroller and all of the other circuits and hardware that makes the whole device function.

2. Arduino or Microcontroller or Processor or ???

A microcontroller is a small computer that includes all the parts needed for its operation on a single integrated circuit (chip). Short names include MCU or μC or uC

“Arduino” is a company that makes popular boards that contain a microcontroller and adds other circuitry to make programming, powering, and connecting to other devices easier. The most famous product is the Arduino UNO which is based on the Microchip (formerly Atmel) ATmega328P microcontroller chip.

Microcontrollers (really all processors) have various architectures that set what sorts of instructions and operations they can run. ECE 424 Computer Architecture covers one CPU architecture in depth. ECE 322 and 422 Embedded Systems 1 and 2 use microcontrollers with other CPU architectures and focuses on the unique abilities of a MCU to interact with the outside world.

3. How “computers” work

Read the following list as a "computing technology stack" from the reality of materials and physics to the ideas in software design as offered here at Valpo in Electrical and Computer Engineering:

  • ECE 340 Electronics 1 — semiconductors, logic gates using transistors

  • ECE 221 Digital Logic 1 — Boolean algebra, logic gate types, and logic gate circuits

  • ECE 222 Digital Logic 2 — Larger logic circuits described in a Hardware Description Language

  • ECE 429 Integrated Circuit Fabrication and Design — Physical design of large circuits (CPUs) down to the silicon wafer

  • ECE 424 Computer Architecture — Creating processors from logic modules containing gates

  • ECE 251 Engineering Programming — Writing programs in the C language

  • ECE 322 Embedded Microcontrollers 1 — Processors interacting with external inputs and outputs

  • ECE 422 Embedded Microcontrollers 2 — Support peripherals and more interaction

  • ECE 251 Engineering Programming 2 — More programming techniques, using C++ language features

Notice how the courses are not necessarily taken in this order. It is helpful to be aware of where you are in this stack and either look forward to or remember past courses to connect the various ideas together across the layers.

Here’s how the “stack” works from the bottom up:

  • Semiconductors like silicon are physically modified to make electronic devices such as resistors, capacitors, inductors, diodes, and transistors.

  • Logic gates are built from transistors.

  • Flip-flops and blocks like adders and other functions are build from various types of logic gates.

  • Boolean algebra is the symbolic math that describes how these circuits behave in concept.

  • Larger blocks of logic functions are difficult to describe using schematics or even boolean expressions, so we use a special language that describes hardware — a Hardware Description Language (HDL) such as Verilog or VHDL.

  • With an organization strategy, we can describe the connection of logic blocks such that the logic circuit can do different operations depending on the machine code that is input.

  • A processor executes machine code as 1s and 0s in chunks of 8, 16, 32, or 64 (or 10 or 12 or 20) bits at a time.
    Video: Programming by Datasheet: AVR machine code

  • An assembler outputs this machine code from input assembly code that is more easily written by humans, but still is essentially 1:1 with machine code.
    Video: Programming by Datasheet: AVR assembly code

  • A compiler generates assembly code from a file written in a high-level programming language of some dialect (e.g. C, C++, Rust, Go, Lisp). It translates an algorithm or procedure into the appropriate list of assembly instructions for a particular CPU architecute. This is the first layer where the programmer gets separated from the tiny details of a CPU’s operation --- the compiler “takes care of” things.

  • Some programming languages are interpreted instead of compiled. The interpreter translates (“compiles” is the correct term) the text into bytecode. Then the bytecode is executed in a virtual machine (VM) which is simply another program running on a real CPU. Writing bytecode for this VM means that it will run anywhere that can run the virtual machine, allowing the programmer to not care about the details of any specific processor.
    Python, Javascript, and Java are the most popular interpreted languages.[1]


You may have heard of a “Full Stack Developer”. This usually means that the person can write software for both a web browser and the web server that the browser talks to. Included is also an ability to run the server and the database software that holds the information and storage.

Let’s continue up the stack and (finally) get to the rest of the stack.

  • An operating system is a bunch of code that provides common services to a programmer. These include managing files, switching between multiple pieces of software that are running at the same time, handling network data and communication, handling user display and inputs, and so on.

  • Application code is the program that runs when you double-click on an app.

  • A server is a computer connected to the Internet that waits for requests from other computers and serves the results of those requests back to them. This computer also is running on an operating system (mostly Linux)

  • A web browser is an epic application that: talks to servers to request information from a server such as HTML code, displays the visual result of rendering HTML to an image, and also manages a Javascript virtual machine so the website can run code on your computer.


1. Javascript and Java are not related despite using the same prefix.