Goals: Add links that are reasonable and good explanations of how stuff works. No hype and no vendor content if possible. Practical first-hand accounts of models in prod eagerly sought.
These resources (articles, books, and videos) are useful when you're starting to learn the language, or when you're learning a specific part of the language. This an opinionated list, no doubt. I've compiled this list from writing and teaching Clojure over the last 10 years.
- 🔴 Mandatory (for both beginners and intermediates)
- 🟩 For beginners
- 🟨 For intermediates
Peter Naur's classic 1985 essay "Programming as Theory Building" argues that a program is not its source code. A program is a shared mental construct (he uses the word theory) that lives in the minds of the people who work on it. If you lose the people, you lose the program. The code is merely a written representation of the program, and it's lossy, so you can't reconstruct
//Builder represeting only one entity in DSL | |
type Child1State = {SomeState : string} | |
type Child1Builder () = | |
[<CustomOperation("set_state")>] | |
member __.SetState (st, x) = {st with SomeState = x} |
- Web Server: Play (framework) or http4s (library)
- Actors: akka
- Asynchronous Programming: monix (for tasks, reactors, observables, scheduler etc)
- Authentication: Silhouette
- Authorization: Deadbolt
- Command-line option parsing: case-app
- CSV Parsing: kantan.csv
- DB: doobie (for PostgreSQL)
It's now here, in The Programmer's Compendium. The content is the same as before, but being part of the compendium means that it's actively maintained.
// A Formlet library for WPF - Inspired by Formlets in Websharper | |
// The Formlet concept will work fine for Windows.Forms and Xamarin.Forms as well | |
// This Formlet library doesn't try to be complete. It's an illustration on how | |
// a Formlet library can be built | |
#if INTERACTIVE | |
#r "PresentationCore.dll" | |
#r "PresentationFrameWork.dll" | |
#r "WindowsBase.dll" |
//http://www.navision-blog.de/blog/2015/12/21/adding-background-tasks-to-suave-io-websites/ | |
let startApp path = | |
let info = ProcessStartInfo(FileName = path) | |
let proc = new System.Diagnostics.Process(StartInfo = info) | |
start proc | |
proc | |
Picking the right architecture = Picking the right battles + Managing trade-offs
- Clarify and agree on the scope of the system
- User cases (description of sequences of events that, taken together, lead to a system doing something useful)
- Who is going to use it?
- How are they going to use it?
# content has to be in .config/fish/config.fish | |
# if it does not exist, create the file | |
setenv SSH_ENV $HOME/.ssh/environment | |
function start_agent | |
echo "Initializing new SSH agent ..." | |
ssh-agent -c | sed 's/^echo/#echo/' > $SSH_ENV | |
echo "succeeded" | |
chmod 600 $SSH_ENV | |
. $SSH_ENV > /dev/null |