programming literature topic home

Though most programming resources are now online, it still makes sense to read books and magazines about it. Editors assemble related topics into an information-packed special magazine issue, authors help you digest complex matters by slicing and building up chapter after chapter. But maybe it's just because you experience a regular read in a quite, comfortable place differently from a quick, directed web search.


I've kept up with the rapid progress through these works:

May-2019
Ralf Westphal, The Incremental Architect's Napkin places an emphasis on data flow (modeled declaratively as a one-dimensional pipeline, introducing branches via continuations or events, finally extending into the third dimension by nesting complex flows) that models data as material that runs through a number of processing steps, and can be viewed at different levels of abstraction, which is better than traditional layering; the author calls this stratum, each consisting of a DSL, achieved by separating logic in leaf-level operations and aggregating integrations; illustrations all follow a drawn-on-napkin theme; unfortunately, that (and the frequent typos) hampers readability a bit; Leanpub, 2014

May-2019
Ralf Westphal, Messaging as a Programming Model; inspired by a set of blog posts of Steve Bate, in which a pipes-and-filters architecture is successfully applied in a simple single-process application, with separation and AOP features achieved by composition of a pipeline executor interface that takes a single message argument; the author emphasizes one-way communication, Principle of Mutual Oblivion (units don't know each other and are connected by supervisor) and Integration Operation Segregation Principle (operations contain logic, integrations aggregate operations and other integrations; they are never mixed), and exemplifies interaction flow design using pipes or a bus; though the author makes all of this sound like big and important principles, it just looks like common good practices to me; Leanpub, 2016

Apr-2019
Tomek Kaczanowski, Practical Unit Testing with JUnit and Mockito; hands-on summary of how to write good tests in the context of TDD, offering many hints and best practices from a dedicated practitioner; not a lot of new information (or stuff that isn't available elsewhere), but nicely packaged into a book that makes for a good table reference; self-published, 2013

Feb-2019
Brent Laster, Jenkins 2 Up & Running; covering both legacy Freestyle projects (based primarily on filling out UI forms), and the newer scripted and declarative pipelines, together with modern project types like multiconfiguration, GitHub Organization, Docker containers, and the new Blue Ocean UI; a thick book that aims to cover all of Jenkins (but has to refer to outside resources partially due to the newness of Jenkins 2, and because it's not a reference book), but also bloated by screenshots, duplication, and sometimes poor editing; it covers many topics, but I had wished for more practical advice and best practices, but that lack may be due to the evolution and design weaknesses of Jenkins itself, and not the author's fault; O'Reilly, 2018

Feb-2019
Sandi Metz, Practical Object-Oriented Design in Ruby; SOLID priciples shown with practical examples and an agile approach; though not fully applicable to statically typed languages, very interesting to see dynamic languages' approaches like Duck Typing and modules applied for a clean design and cost-effective tests without duplication; Pearson Education, 2013

Jan-2019
Kai Spichale, API-Design; Praxishandbuch für Java- und Webservice-Entwickler; a broad sweep across design, naming, fluent interfaces, immutability, design patterns, documentation, scalability, and architecture that either requires a lot of prerequisite knowledge or many side quests to study the material in depth; the book's saving grace is that it provides a compact overview, a kind of checklist for senior developers; I personally learned more from the REST part; dpunkt.verlag, 2018

Nov-2018
Christoph Fehling et al, Cloud Computing Patterns; Fundamentals to Design, Build, and Manage Cloud Applications; A pattern language that covers all essential cloud properties (on-demand self-service, broad network access, pay-per-use, resource pooling, rapid elasticity) of application workloads, Infrastructure / Platform / Software as a Service, with many similarities to Enterprise application and messaging patterns. Each pattern is documented separately, with many cross-links, which makes it a good work of reference, but (combined with sub-par editing) tedious to read through from cover to cover; does not contain many new insights if you're familiar with AWS or Kubernetes (which is expected for a pattern book), the benefit is in the standardized pattern names; Springer, 2014

Oct-2018
Joshua Bloch, Effective Java, Third Edition; worthwhile read for both beginners (who need to carefully study it) and experts (as a refresher and to still learn a bit here and there, if only for the interesting background stories and great illustrating examples, which will help them teach others, too). There are so many books about grammar and vocabulary of programming languages, but way too few on these important idioms (Modern Perl (see below) is another one). Packed with information, no fluff or fillers, every page worth its read. I'd buy this kind of book for every programming language on earth! Pearson Education, 2018

Jul-2018
Brian Goetz et al., Java Concurrency in Practice; deeply technical and well-written book about Java thread safety, synchronization, JRE classes (especially those new in Java 5 and 6) that covers virtually all you need to know about robust and effective multi-threading; Pearson Education, 2006

Jun-2018
David Chelimsky et al., The RSpec Book; Behaviour-Driven Development with RSpec, Cucumber, and Friends; great examples motivate the different view that makes BDD a successor of TDD, and show the practices of customer-facing scenarios that are then spec'ed out in detail; though the book uses Ruby-centric tools and covers Ruby on Rails web development in detail, too, it really covers the general practices for any (modern) language; the Ruby language just makes this very fluent and beautiful; Pragmatic Bookshelf, 2010

May-2018
Roy Osherove, The Art of Unit Testing with Examples in .NET; an in-depth look into the technical side of mocks, stubs, and frameworks, plus design and process tips; extolls the virtues of clean code, but itself uses suboptimal code examples; frequently refers to Michael Feather's Working Effectively with Legacy Code, and xUnit Test Patterns by Gerard Meszaros; I feel that after reading those, there's not much left in this one, especially because the .NET library references are dated by now; Manning, 2009

Mar-2018
Kent Beck, Smalltalk; Praxisnahe Gebrauchsmuster; coding style and design guidelines, with a whiff of design patterns, and one of the first mentions of refactorings; the stuff is Smalltalk-centric and dated, but still provides valuable advice and historical perspective on object orientation; Deutsche Ausgabe, Prentice Hall Verlag, 1997

Feb-2018
Alan C. Kay, The Real Computer Revolution hasn't happened yet; memo that highlights the analogies of learning mathematics by reading and understanding the physical world through simulation, and how a computer-aided tools (such as etoys) can enable children, creating a teaching revolution similar to what the printing press did centuries ago; VPRI Memo, 2007

Jan-2018
Meilir Page-Jones, What Every Programmer Should Know About Object-Oriented Design; written from an age of early adoption, it's dated in its description of OO design notation (a rather cumbersome predecessor of UML), but this is outweighed by precise, language-agnostic thoughts of encapsulation, connascence (important to understand the impact on maintainability), encumbrance, and cohesion; Dorset House, 1995

Jan-2018
Rebecca Wirfs-Brock and Alan McKean, Object Design; Roles, Responsibilities, and Collaborations; theory and practical discovery and modeling (via CRC cards, use cases, etc.) of the original interpretation of object orientation, with a distribution of functionality based on roles and object responsibilities; collaborations, control style, architecture, and how it affects flexibility and reuse; the role of documentation (via UML); Pearson Education, 2003

Nov-2017
David West, Object Thinking; Long historical and philosophical introduction into OO from the Smalltalk context, didn't know it was so closely linked to the Agile / XP movement; Object Cubes as an extension of good old CRC cards; objects build from behaviorism and anthropomorphism; design practices and modeling terms; found myself in full agreement with most of the book's statements, but left a bit helpless because the (dated and perfunctory) examples didn't really drive home the points made; Microsoft Press, 2004

Sep-2017
Yegor Bugayenko, Elegant Objects Vol. 2; More recommendations on what to avoid to achieve a good object-oriented design; a bit less thought-through than the first volume, but still thought-provoking, but one must be careful to gloss over the obvious fundamentalism of the author; Amazon Fulfillment, 2017

Sep-2017
Alan C. Kay, The Early History Of Smalltalk, Formative ideas, a motivation of building a learning and simulation environment for children, hardware limitations, politics in Xerox PARC, the elegance of the pure object-oriented paradigm in Smalltalk; ACM SIGPLAN Notices, Volume 28, March 1993

Aug-2017
chromatic, Modern Perl 4th edition; a short yet astoundingly complete introduction to Perl how it is supposed to be used today; covers syntax, built-ins, how to do testing, exception handling, object-orientation and Unicode properly, frequently recommends CPAN modules (and alternatives), and even has recommendations; Onyx Neo Press (free ebook), 2016

Aug-2017
Yegor Bugayenko, Elegant Objects Vol. 1; 23 recommendations on good object-oriented design, many of which are broken by current languages and libraries; no embellishments, up to the point, but also controversial (also the corresponding discussions on the author's blog) and suffering a bit from the non-native language; enlightening, and makes me wonder what the author thinks of Smalltalk...; Amazon Fulfillment, 2017

Aug-2017
c't Programmieren: Android and iOS programming, JavaScript vs. AppleScript, CMake and Python; Verlag Heinz Heise, 2017

Mar-2017
c't Raspberry Pi: New Pi 3, available operating systems; hardware, GPIO, comparisons with commercial routers and NAS; various projects; Verlag Heinz Heise, 2016

Aug-2016
Lowell Jay Arthur & Ted Burns, UNIX Shell Programming; very dated book about sh, Korn Shell, Bash, and csh, just as the Internet and CGI programming became real; First half is an introduction of basic commands, second half contains software engineering rambling about rapid prototyping and reuse; Wile, 1997

Jul-2016
Roger Sessions, COM+ and the Battle for the Middle Tier; introduction to components and transaction processing monitors, and their contribution to scaling modern three-tier applications; description of Microsoft technologies: DCOM, MSMQ, Cluster Service, and a preview of the Windows 2000 architecture; comparison of Microsoft's COM+, Sun's EJB, and CORBA, including case studies; dated, but still interesting to see what survived and what predictions went wrong, and to compare this with the current favorite web services architectures; Wiley, 2000

May-2016
iX Developer Effektiver entwickeln; continuous delivery through Jenkins and Liquibase, DevOps - culture and automation tools like Chef, Puppet, Ansible; micro services architecture and enterprise IT; containers with Docker and Kubernetes; Verlag Heinz Heise, 2/2016

Mar-2016
Harvey M. Deitel, An Introduction to Operating Systems; processes, synchronization, deadlock prevention, storage and virtual memory, job and processor scheduling, multiprocessing, networks and security; typical topics for university courses; case studies in Unix, VAX, CP/M, MVS, and VM; dated, but interesting, especially for the historical perspective and comparison with modern Linux and microcomputer virtualization like VMware; Addison-Wesley, 1984

Feb-2016
David Rensin, Kubernetes; scheduling the future at cloud scale; short booklet about cloud application deployment via Docker containers and the Google's Kubernetes cloud management software; entertaining introduction at the right level; O'Reilly, 2015

Dec-2015
c't Linux: Long-term and rolling releases, Wayland, Docker containers; Verlag Heinz Heise, 2015

Dec-2015
Fred Zlotnick, The POSIX.1 Standard A Programmer's Guide; complete discussion of all C functions for a basic API (mostly for shells), with historical motivations; Benjamin/Cummings, 1991

Nov-2015
Jan Goyvaerts, Steven Leviathan, Regular Expressions Cookbook; all details (and differences) of .NET, Java, Perl, PCRE, JavaScript, Python, and Ruby (unfortunately missing POSIX and Vim) via practical recipes; O'Reilly, 2009

Apr-2015
Dale Dougherty, Arnold Robbins, sed & awk 2nd Edition; a full run-down of all commands, including the (now mostly historical) differences between different awk versions; many practical examples and reviews of submitted samples; O'Reilly, 1997

Jan-2015
Steve Freeman, Nat Pryce, Growing Object-Oriented Software, Guided by Tests; developing a demo application TDD-style with Hamcrest matchers from the authors of the jMock framework; explains the importance of clean, expressive tests and shows how to actually achieve this (and with it, good software design); Pearson Education, 2010

Jul-2014
c't Linux: Raspberry Pi and other ARM boards, installation on modern hardware, esp. current notebooks, DBUS; Verlag Heinz Heise, 2014

Feb-2014
Neil Bradley, The XML companion; Third Edition; a full description of XML, DTDs vs. Schema, and how to model various documents, including hyperlinks and surrounding standards like XInclude, XLink, XPointer, XPath, XSLT; parsing via SAX and DOM, historical background (with SGML) and comparison with HTML and CSS; Addison-Wesley, 2002

Dec-2013
iX Developer JavaScript heute; asm.js, TypeScript, CoffeeScript, Dart - alternatives?; MVVM with Knockout.js, Backbone,js, AngularJS, or Ember.js, Meteor and jQuery Mobile; Node.js, Grunt, Mocha; HTML 5 frontend development; Verlag Heinz Heise, 1/2014

Nov-2013
Simson Garfinkel, PGP: Pretty Good Privacy; Though dated, the motivation for public key encryption is particularly relevant in times of Snowden's NSA leak; PGP's history also provides a great story about patents and export restrictions, plus all the technical details of key management, the web of trust, and encrypting and signing email messages; O'Reilly, 1995

Nov-2013
C. Michael Pilato, Ben Collins-Sussman, Brian W. Fitzpatrick, Version Control with Subversion (Second Edition, Subversion 1.5); A comprehensive reference of the Subversion commands and specialties like branches, properties, locking, peg revisions; O'Reilly, 2008

Sep-2013
Sonatype, Maven: The Definitive Guide; advantages of the project-centric, declarative Maven POM over predecessor build systems like Ant, examples introducing Maven followed by a comprehensive reference, rounded off with the advanced topics repository management and writing plugins; O'Reilly, 2008

Aug-2013
c't Hardware Hacks: Arduino vs. Android (TV sticks) vs. Raspberry microcontroller boards; hacker spaces and open source; various small electronics projects; Verlag Heinz Heise, 2/2013

Jul-2013
c't Linux: UEFI and new hardware, Ubuntu tips, Gaming on Linux; Verlag Heinz Heise, 2/2013

Feb-2013
c't Android: high-end smart phones vs. tablets; Android security, backup, LTE; Verlag Heinz Heise, 1/2013

Dec-2012
c't kompakt Programmieren: new web technologies Canvas, web workers, CSS animations; mobile apps; D vs. Smalltalk vs. Haskell; Verlag Heinz Heise, 3/2012

Jul-2012
c't kompakt Linux: SSDs and other hardware; Linux Mint 13 as an alternative to Ubuntu; OwnCloud and AWS, UEFI book and Btrfs; Verlag Heinz Heise, 2/2012

Dec-2011
Gerard Meszaros, xUnit Test Patterns Refactoring Test Code; Goals, Patterns and Smells for test automation with xUnit and mock frameworks; this tome gives names to and acknowledges the many good practices in test automation in design pattern form; Pearson Education, 2007

Dec-2011
c't kompakt Linux: Ubuntu 11.10 and the new Unity desktop, server hardening, management and DIY-cloud; Verlag Heinz Heise, 1/2012

Jul-2011
Miŝko Hevery, Guide: Writing Testable Code; Guide and set of lectures about designing for testability, split object creation from logic, avoid work in the constructor and global state, solve almost all problems via dependency injection; Google, 2011

Jul-2011
c't kompakt Programmieren: Comparison of C#, C++, ObjC, Java, Scala, Perl, Python, Python 3, JavaScript and PHP; development tutorials for iOS, Windows Phone 7 and Android; Verlag Heinz Heise, 2/2011

Jun-2011
c't praxis Android: Hardware, Tablets, a base set of useful apps, rooting and alternative firmware, Android architecture and app development; Verlag Heinz Heise, 1/2011

Feb-2011
c't kompakt Linux Server-Praxis: RHEL 6; NFS, VPN and NAS, Virtualization with KVM vs. Xen, system management; Verlag Heinz Heise, 1/2011

Dec-2010
iX Developer Programmieren heute: Mobile App-Entwicklung mit iOS, Android und Windows Phone; Visual Studio 2010 vs. Eclipse 4.0; moderne Sprachen (Clojure, Scala, Go, Groovy) und Trends (parallel computing, NoSQL, Saas, BPM); Verlag Heinz Heise, 12/2010

Dec-2010
c't kompakt Linux: Ubuntu 10.04 LTS; system start and booting with Grub, Kernel vs. user mode and libc; proprietary drivers; Verlag Heinz Heise, 1/2010

Aug-2010
c't kompakt Security; anti-virus, cybercrime; securing Windows, web, online payment, email and privacy; Verlag Heinz Heise, 2/2009

Nov-2009
Web on Rails iX magazine special; comparison of web frameworks for ASP.Net, Java, PHP, Perl, Python, Ruby and Smalltalk; Ruby on Rails, Groovy on Grails and Adobe Flex vs. Silverlight tutorials; Verlag Heinz Heise, 2/2009

May-2009
c't kompakt Linux Ubuntu 9.04; booting; special Linuxes; Verlag Heinz Heise, 4/2009

Oct-2007
Andrew Oram and Greg Wilson (editors), Beautiful Code (Theory in Practice) - Leading programmers explain how they think and what they deem beautiful; O'Reilly, 2007

Aug-2007
Michael Howard, David LeBlanc, John Viega, 19 Deadly Sins of Software Security - Programming flaws and how to fix them; McGraw-Hill, 2005

Jul-2007
Mark Jason Dominus, Higher Order Perl - Transforming programs with programs: caching, memoization, recursion, iterators, streams, higher-order functions and currying, functional programming in conjunction with OO; Morgan Kaufmann, 2007

Apr-2006
Programmieren mit .Net 2.0 iX magazine special, Verlag Heinz Heise, 1/2006

Apr-2005
Bruce Eckel, Chuck Allison, Thinking in C++ Volume Two: Practical Programming, Prentice Hall, 2004

Jul-2003
Douglas R. Hofstadter, Gödel, Escher, Bach; ein Endloses Geflochtenes Band: investigating a recurring theme of recursion, self-reference, contradiction and paradox, and how it applies to logic and programming; dtv, 1991

Mar-2002
Dov Bulka, Java Performance and Scalability Volume 1, Addison-Wesley, 2000

Dec-2001
Bruce Eckel, Thinking in Java Second Edition: The definitive introduction to object-oriented programming, Prentice Hall, 2000

Jul-2000
Bruce Eckel, Thinking in C++ Second Edition: Volume One: Introduction to Standard C++, Prentice Hall, 2000

Jun-2000
Andrew Koenig, Barbara Moo; Ruminations on C++: a decade of programming insight and experience, AT&T, 1997

1999-2000
Teach Yourself C Programming in 21 Days, SAMS Publishing
Teach Yourself C++ Programming in 21 Days, SAMS Publishing
Teach Yourself Visual C++ 6 Programming in 21 Days, SAMS Publishing

1997
Aho, Kernighan, Weinberger, The AWK Programming Language, Addison-Wesley, 1988
Randal L. Schwartz, Learning Perl (4.0), O'Reilly

1994
Roger Penrose, Computerdenken: Die Debatte um Künstliche Intelligenz, Bewußtsein und die Gesetze der Physik; Exploring algorithms, fractal geometry, Turing machines, quantum physics and neuronal networks to evaluate the future of AI; Spektrum der Wissenschaft, 1991

1993
Hilger Kruse, Roland Mangold, Bernhard Mechler, Oliver Penger, Programmierung Neuronaler Netze, eine Turbo Pascal Toolbox; Learning different neuronal network models (interactive, perceptron, backpropagation, Kohonen, Hopfield, Boltzmann) based on libraries and sample applications; Addison-Wesley, 1991

1991
Das große Buch zu Turbo Pascal 6.0: Pascal class libraries, BGI graphics programming, object-oriented GUI programming with TurboVision, DATA Becker, 1991