DEV Community

Jason Barr
Jason Barr

Posted on • Updated on

Simply JavaScript: learn computer science and programming in the world's most ubiquitous language (introduction and index)

A few months back I asked about JavaScript tutorials for new coders that taught a declarative/functional style from the beginning.

Having received no solid answers here or elsewhere, I decided to consider writing my own.

Two days later I had a completely unwieldy outline for a tutorial program that would have taken months if not years to write, in keeping with my general tendency to plan enormous projects I will probably never finish. I kept it for posterity, although the current series will almost certainly be far more modest.

Introducing Simply JavaScript

Simply JavaScript is my attempt to create a series of tutorials teaching solid, modern programming techniques and computer science basics through the JavaScript programming language.

The title is an homage to Simply Scheme, an introductory computer science text published in the late 1990s for Berkeley undergraduates to prepare them for more rigorous coursework with the venerable Structure and Interpretation of Computer Programs.

I am under no illusion that I will produce some monumental, groundbreaking computer science and programming introduction, but I do hope to provide the resource I wish I'd had when I first started getting serious about programming.

I also think I'm going to learn a lot in writing this, which is honestly my primary motivation.

From the project repo:

Programming, not web development

The purpose of this series is to teach students how to write well-structured, efficient programs using the JavaScript language.

It is not a web development tutorial.

This is an important distinction. The latter will teach you how to build applications for a specific environment: a web browser and/or web server users will interact with via the browser.

These tutorials will teach you how to program, a skill that will enable you to build applications for any environment.

There's nothing wrong with web development tutorials as such, but it's crucial to have a strong programming foundation. If you know programming, you will build better web applications.

Given that web applications are the most common use for JavaScript, you will also learn a little about how to apply your programming knowledge to both client- and server-side web development, but it's not the main focus.

Computer science fundamentals, with modern programming techniques

After working through these tutorials you will have a solid understanding of basic computer science: how computers work, how machines parse and execute programs, how to organize and process data, and how to evaluate and improve program efficiency.

You will also develop the basic skills needed to write programs other developers can read, understand, and work on (and sometimes that "other programmer" will be you, 6 months in the future).

When you understand these things you'll have a massive advantage over others who have only learned the framework du jour or the basics of the JavaScript language itself.

You'll also be able to apply these fundamentals to any other programming language or framework.

Currently published tutorials

  1. Getting started with computing and 💻 computer science (with examples in JavaScript... and dessert! 🍰)
  2. In the beginning Kernighan created "Hello, world!"

Additional planned tutorials (titles and topics may change)

Section I: Basics of computer science, programming, and JavaScript

  1. Working with data and types
  2. Program control and Boolean expressions
  3. Functions: the building blocks of complex programs
  4. Complex data types and iteration
  5. Interlude: Programming languages in depth and the history of JavaScript

Section II: Abstracting with functions

  1. Scopes and closures
  2. Higher-order functions
  3. Recursion, but first: recursion
  4. Composition and the flow of data
  5. Lists and streams
  6. Declarative control logic
  7. Interlude: Declarative vs. imperative programming styles

Section III: Abstracting with data

  1. Simple vs. compound data
  2. Strings and string operations
  3. Numbers, math, and dates
  4. Arrays and iterators
  5. Dictionaries and maps
  6. Sequential abstractions (lists, stacks, and queues)
  7. Hierarchical abstractions (trees and graphs)
  8. Sorting and searching data
  9. Interlude: Algorithms and analysis

Section IV: Abstracting with state

  1. Program state and mutability
  2. Objects with prototypes
  3. Objects with classes
  4. Design patterns and object-oriented state management
  5. Functional Object composition
  6. Declarative state with reducers
  7. Interlude: Program decomposition and state management

Section V: Developing applications

  1. Designing programs
  2. Mastering asynchronous programming
  3. Event-driven programming and reactivity
  4. Programming the browser: The Document Object Model
  5. Programming the browser: Additional Web APIs
  6. Programming the server: Node.js basics
  7. HTTP requests and working with external data sources
  8. Full-stack development: Managing state with reactive UI
  9. Full-stack development: API development with Node and Express
  10. Full-stack development: Putting it all together

Epilogue: What's next?

Top comments (0)