Application Building

How do these pieces become useful software?
Put the pieces to work.

Combine language fundamentals in small, complete programs. Follow data through configuration, files, HTTP, storage, and concurrent work.

Work in progress. 1 of 16 lessons are drafted and open to read; they're still being reviewed.

Useful foundations: functions, collections, errors, and cleanup. Craft supplies testing habits; Runtimes explains processes, files, and concurrent execution.

16 topics

Still being written 1 of 16 lessons are drafted and open to read while they're reviewed. Planned topics show where the catalog is going.

CLI tools and configuration

Build understanding

Give a small program a clear interface and predictable configuration.

Concept planned

Arguments, standard streams, and exit codes

How does another person or program interact with your tool? Parse arguments, distinguish output from diagnostics, and report failure.

TypeScriptGoRustCHaskellJava
Concept planned

Project structure and dependency boundaries

Where should parsing, domain behavior, and I/O live? Organize a small project around responsibilities and explicit dependencies.

TypeScriptGoRustCHaskellJava

Files and external data

Build understanding

Turn bytes outside the program into usable values, then write results with explicit failure behavior.

Concept planned

Reading lines and processing text

How do you count, filter, and summarize a text file? Build a small word-count tool and handle the last line and the empty file.

TypeScriptGoRustCHaskellJava
Concept planned

Files, parsing, and serialization

How does external text become a checked value? Separate decoding, parsing, validation, and representing failures.

TypeScriptGoRustCHaskellJava
Concept planned

Paths, directories, and portability

Will this path work on another machine? Join paths safely, walk a directory, and handle files that disappear mid-walk.

TypeScriptGoRustCHaskellJava
Concept planned

Safe file updates and interrupted writes

What remains if a write fails halfway through? Compare overwriting, temporary files, replacement, and the limits of atomicity and durability.

TypeScriptGoRustCHaskellJava
Concept planned

Serialization and foreign interfaces

What survives when a value crosses a file, wire, or language boundary? Compare encodings, layouts, and ownership contracts.

TypeScriptGoRustCHaskellJava

HTTP clients and small servers

Build understanding

Follow a request through parsing, application behavior, and a response.

Concept planned

HTTP requests, responses, and timeouts

What does a client actually send and receive? Handle status codes, body decoding, cancellation, and owned resources.

TypeScriptGoRustCHaskellJava
Concept planned

Handlers, validation, and error responses

Where does an untrusted request become a domain input? Separate transport handling from behavior and map failures deliberately.

TypeScriptGoRustCHaskellJava
Concept planned

Testing a network boundary

Which behavior needs a real connection, and which can be checked locally? Test protocol interactions without making every test depend on a remote service.

TypeScriptGoRustCHaskellJava

Persistence and transactions

Build understanding

Make the boundary between an in-memory result and stored state explicit.

Concept planned

Storage operations and repository boundaries

What does the rest of the program need from storage? Express operations and errors without hiding important consistency assumptions.

TypeScriptGoRustCHaskellJava
Concept planned

Transactions, commit, and rollback

Which changes must succeed together? Trace success and failure while separating database transactions from in-memory mutation.

TypeScriptGoRustCHaskellJava
Concept planned

Testing persistence and restart behavior

What survives after the process exits? Check migrations, constraints, failed writes, and reload behavior with a representative storage environment.

TypeScriptGoRustCHaskellJava

A bounded concurrent worker

Go underneath

Combine task lifetime, errors, resource ownership, and testing in one small application.

Concept planned

Bounded work and backpressure

What happens when jobs arrive faster than they finish? Limit active work and queue growth, and define how callers observe overload.

TypeScriptGoRustCHaskellJava
Concept planned

Cancellation and graceful shutdown

What happens to queued and active work when the program stops? Trace cancellation, draining, cleanup, and explicit completion guarantees.

TypeScriptGoRustCHaskellJava