1.introduction why should i use erlang? Why Should I Use Erlang? The History of Erlang Erlangs Characteristics High-Level Constructs Concurrent Processes and Message Passing Scalable, Safe, and Efficient Concurrency Soft Real-Time Properties Robustness Distributed Computation Integration and Openness Erlang and Multicore Case Studies The AXD301 ATM Switch CouchDB Comparing Erlang to C++ How Should I Use Erlang? 2.basic erlang integers the erlang shell floats atoms booleans tuples lists term comparison variables complex data structures pattern matching functions modules exercises 3.sequential erlang conditional evaluations guards built-in functions recursion runtime errors handling errors library modules the debugger exercises 4.concurrent programming creating processes message passing receiving messages registered processes timeouts benchmarking process skeletons tail recursion and memory leaks a case study on concurrency-oriented programming race conditions, deadlocks, and process starvation the process manager exercises 5.process design patterns client/server models a process pattern example finite state machines event managers and handlers exercises 6.process error handling process links and exit signals robust systems exercises 7.records and macros records macros exercises 8.software upgrade upgrading modules behind the scenes upgrading processes the .erlang file exercise 9.more data types and high-level constructs functional programming for real funs and higher-order functions list comprehensions binaries and serialization references exercises 10.ets and dets tables ets tables dets tables a mobile subscriber database example exercises 11.distributed programming in erlang distributed systems in erlang distributed computing in erlang: the basics the epmd process exercises 12.otp behaviors introduction to otp behaviors generic servers supervisors applications release handling other behaviors and further reading exercises 13.introducing mnesia when to use mnesia configuring mnesia transactions partitioned networks further reading exercises 14.gui programming with wxerlang wxwidgets wxerlang: an erlang binding for wxwidgets a first example: microblog the miniblog example obtaining and running wxerlang exercises 15.socket programming user datagram protocol transmission control protocol the inet module further reading exercises 16.interfacing erlang with other programming languages an overview of interworking interworking with java c nodes erlang from the unix shell: erl_call port programs library support for communication linked-in drivers and the ffi exercises 17.trace bifs, the dbg tracer, and match specifications introduction the trace bifs tracing calls with the trace_pattern bif the dbg tracer match specifications: the fun syntax match specifications: the nuts and bolts further reading exercises 18.types and documentation types in erlang typer: success types and type inference documentation with edoc exercises 19.eunit and test-driven development test-driven development eunit the eunit infrastructure testing state-based systems testing concurrent programs in erlang exercises 20.style and efficiency applications and modules processes and concurrency stylistic conventions coding strategies efficiency and finally appendix: using erlang index