-
Programming Language Economics 101
- Languages are adopted to fill a void
- Enable a previously difficult/impossible application
- Orthogonal to language design quality (almost)
- Programmer training is the dominant cost
- And rewriting code
- Languages with many users are replaced rarely
- Popular languages become ossified
- But easy to start in a new niche…
- Languages are adopted to fill a void
Languages
Link to original
- Roast Programming Language
- Programming Language
- Learn C in 1 Hour
- C++
- Python
- Golang
- Rust
- CMake
- Makefile
- Lua
- Java
- Haskell
- OCaml
- Frontend
The Right Things
- Simplicity — the design must be simple, both in implementation and interface. It is more important for the interface to be simple than the implementation.
- Correctness — the design must be correct in all observable aspects. Incorrectness is simply not allowed.
- Consistency — the design must not be inconsistent. A design is allowed to be slightly less simple and less complete to avoid inconsistency. Consistency is as important as correctness.
- Completeness — the design must cover as many important situations as is practical. All reasonably expected cases must be covered. Simplicity is not allowed to overly reduce completeness.
Worse is Better
- Simplicity — the design must be simple, both in implementation and interface. It is more important for the implementation to be simple than the interface. Simplicity is the most important consideration in a design.
- Correctness — the design must be correct in all observable aspects. It is slightly better to be simple than correct.
- Consistency — the design must not be overly inconsistent. Consistency can be sacrificed for simplicity in some cases, but it is better to drop those parts of the design that deal with less common circumstances than to introduce either implementational complexity or inconsistency.
- Completeness — the design must cover as many important situations as is practical. All reasonably expected cases should be covered. Completeness can be sacrificed in favor of any other quality. In fact, completeness must be sacrificed whenever implementation simplicity is jeopardized. Consistency can be sacrificed to achieve completeness if simplicity is retained; especially worthless is consistency of interface.
What to Learn
- Syntax:
- keywords
- restrictions
- format
- Semantics:
- dynamic semantics: run-time behavior
- static semantics: type checking
- Idioms:
- Libraries:
- Tools:
What to Explore When Learning New Languages
- Read/write to a file
- Turn a structured object into JSON
- Parse JSON into an object
- A basic script that can be run from the CLI, parses flags/args, reads
stdin
- Send a HTTP request
- Implement a very basic web server