Written & published my first ebook

I’ve recently published my first ebook (yeah!).

I’ve put quite some effort into it for about half a year or so – including periods in which I’ve not worked too much on it. However, it really took some work to get this book ready ready and it felt awesome when I had actually published it.

As you may have guessed, it’s a book about software development in general and about concepts in programming languages in special.

It covers the following topics:

  • Basics
    • Values and Symbols
    • Types
    • Bindings
    • Static, Dynamic, Strong & Weak Typing
    • Lifetime of a program
    • Mutable state
    • Recursion and Iteration
    • Statements vs. Expressions
    • Language Paradigms (imperative & declarative etc.)
    • Lexical & Dynamic Scoping
    • Side Effects
    • Tail Recursion
  • Advanced Concepts
    • First Class Functions
    • Short Circuiting
    • Closures
    • Currying
    • Destructuring
    • Pattern Matching
    • Guards
    • Multiple Dispatch
    • Macros (C- & Lisp-style)
    • Homoiconicity
    • Immutability
    • Persistent Data Structures
    • Algebraic Datatypes
    • Type Classes
    • Pure Functions
    • Memoization
    • Type Inference
    • Lazy & Eager Evaluation
    • Coroutines
    • Continuations
    • Design by Contract
    • Monads
  • Parallelism & Concurrency
    • Natural Problems with Concurrency
    • Locking
    • Software Transactional Memory
    • Concurrency & Immutability
    • Futures
    • Promises
    • Actors
    • Message Queues
    • Agents

Phew, so that seems quite a lot in retrospective…

Actually, in the book I try to briefly explain each of these concepts in general, and give an example or two in arbitrary programming languages to visualize what I’m trying to convey. For me it’s most important to get the general idea across instead of explaining everything in detail.

I think the difficult part in learning and improving in software development is being (and staying) aware of the options and concepts available. As soon as you are aware of that an approach / general solution / concept exists that solves this or that problem, it is easy to find out more. I felt there are only very few books available that try to give a rather high level overview over what concepts exist in today’s programming languages – so that is why I chose to write one about exactly this.

You can get hold of the ebook at all major publishers, like for example:

PS: I already have some more topics in mind that I’ve not covered in that book. Go & Clojure’s core.async channels are for example a very interesting feature that will be covered in the next edition.