Node is all there is, right?
We use it to install and run all our web development tools, even the ones not made in node. Use your shell to call npm, which runs in node, which then calls the shell again with what you intended to run in the first place.
We use it to manage our dependencies.
We use it to run tools to bundle our code, even though those bundlers are almost never implemented in node themselves, and even though the project in question might not need a bundler.
And we use it to run our tests.
Occasionally, somebody uses it to write server-side software, but many of us are – for good reasons – often using something else for the server.
The weight we have hanging off a single runtime is enormous and it isn’t surprising that this pressure translates into complexity.
Node is all there is and it’s become one of the biggest sources of complexity in non-node projects.
Web Development with node is a complexity tax on all software development
You know that feeling of dread: coming back to a PHP, Ruby, or Python web project after a while and crossing your fingers – hoping that the fragile JS setup hasn’t broken somehow in the meantime.
—Oh, no. Why do we have all of these security alerts? All we’re using the JS for is to validate some forms!
—Why doesn’t the testing framework work any more? Dot releases should be safe, right?
—Crap! The new version of the form-handling library has breaking updates. I don’t have time to deal with this.
—Damn. There’s a new version of Typescript out. Now I need to figure out if upgrading would break something.
Most of us have stories and none of them are of the happy “they all lived happily ever after” kind.
It’s a pain, but node is just a hard requirement for modern web development, right?
Right?
Well, maybe not.
Web servers and browsers are amazing tools in their own right
Wouldn’t it be nice if you could do modern web dev with just the tools of your language of choice and the web browsers you already have set up?
That's what this course will help you to do.
Uncluttered Test-Driven Web Development is a web-based course will that will guide you through test-driven web development using the just the web browser, a web server, some HTML, and some JS modules that run natively in the browser without building.
It’ll take you through the exact steps of setting everything up, introducing you to specific approaches to test-driven development and how they directly apply to specific contexts in web development (DOM APIs, web components, Workers, etc.). But the heart of the course is showing you how import maps give you testing superpowers.
Import maps, which let you re-map map pretty much any import made by a JavaScript module, are the best thing to happen to test-driven web development in years.
The course will also give you a primer on ES modules and how they work in the browser.
It's intended for both those who might be less familiar with modern JS (WTF is let
and const?
) and to those who only know the abstractions layered on top of the web API foundation.
But, above all, it's pragmatic. What matters is what works for your, for your project, for your workplace, not ideological purity.
Coming soon.
Example Curriculum
- The downloads
- What you need to know
- WTF is test-driven development?
- You’re going to need a web server
- Loosely coupled systems
- Setting up the project
- Don’t just curl|sh random scripts
- Don’t over-engineer basic setup
- The browsers are our runtime
- The browser are our primary web development tool
- EXAMPLE: browser launch scripts
- EXAMPLE: the mocha HTML file
- Continuous Integration (CI)
- On code smell and gut feeling
- JavaScript modules are great, but also a little bit broken
- The troubled history of standard JavaScript modules
- We can do better
- Managing dependencies in code is bad
- Import maps bring loose coupling to ES modules and it’s genuine magic
- We can use import maps right now, today
- A new primitive for decoupling JavaScript modules