Categories: Programming, Links
This page provides links to articles, books, and videos, which may be of interest to programmers of all levels; they are certainly things I thought were useful.
Getting Started with Programming
- Beginners in Open Source - how to get involved in the Open Source world.
- Programming Ruby: The Pragmatic Programmer’s Guide (see link “Programming Ruby by Dave Thomas”) - a guide to learning the Ruby programming language.
- Git Ready: learn git one commit at a time - how to use the Git version control system
Development Processes
- Meetings - where work goes to die.
- Maintaining Software - maintaining software sucks, and what we can do about it.
- Pounding a Nail - how to respond to questions which have false assumptions.
- The Oracle Effect - how rituals can override common sense.
- Is Project Management Killing Good Products? - how time-estimates and delivery deadlines can damage software development
- The Manifesto for Agile Development and [video] “Pragmatic” Dave Thomas: Agile is Dead
- Too much collaboration hurts productivity
- Hivemind: the problem of interruptions
- Kurt Cagle: The End of Agile - a critical view of Scrum methdology
- Matt Asay: What Makes Developers Happy?
- Thoughtworks: Pairing, Are You Doing It Wrong?
- Heusser: NoEstimates in Action: 5 Ways to Rethink Software Projects
- Hansson/BaseCamp: Building Software (ShapeUp)
- Lightweight ADRs at willhaben
- [video] Rich Hickey: Hammock Driven Development aka Step Away From The Computer - solve problems by thinking instead of doing
- [video] Dan North: Beyond Developer - what it means to be a modern developer (roles, responsibilities, cooperation, community). First third is slow, the rest is very interesting!
Useful links related to Software Development Methodology and related topics
- Software Maintenance and Dynamically-Typed Languages - why do dynamic languages make it difficult to maintain large codebases?
- Chelsea Troy: Reviewing Pull Requests - some excellent advice on performing code-reviews
- [video] Sandy Metz: Go Ahead, Make a Mess - reducing interdependencies in code
Advanced Programming Topics (see also Java-specific resources)
- [video] Richard Feldman: Why Static Typing Came Back - why (some) static typed languages are more productive than dynamically typed ones
- Learning New Languages: Exercism - download and solve problems in 30 different programming languages.
- Bartosz Milewski: Programming Cafe - type theory and other abstract concepts; a dose of humility if you think you know how to program!
- Inside a super fast CSS engine – internals of the Mozilla Stylo component
- Graydon Hoare: What Next? – a list of open issues in theoretical programming language design
- The Commandline Challenge - a fun way to test your Unix commandline skills
- The Go Garbage Collector - how Go’s runtime achieves such low garbage-collection-pauses, and the tradeoffs it makes
- Evan Miller: Four Days of Go - an interesting and entertaining look at the Go programming language
- Functor and Monad Examples in Java
- Milewski: Category Theory for Programmers
- React as a UI Runtime - a deep dive into the implementation of React
- Project Jigsaw: Late for the Train - some background to the Java module system
- Planetscale: The Problem with using a UUID Primary Key in MySQL
React Programming (ie developing UI-centric apps using one of the React frameworks)
- React as a UI Runtime - a description of how React works “under the hood”
- [video] Every React Concept in 10 Minutes
Software Testing
- [video] Dave Farley/Continuous Development: TDD Isn’t Hard - some good stats on TDD productivity
- [video] Ian Cooper: TDD, Where Did It All Go Wrong – Argues that tests are intended to verify system requirements/behaviours, not methods - so do that, ie only write tests which express requirements on the overall system. Refactoring then doesn’t break tests - because refactoring never changes external behaviour, even when it changes internal implementations. This implies not testing classes in isolation; use “deep” tests instead of shallow ones. This in turn suggests that dependency isolation and injection is pointless except where code meets “the external world”.
- Continous Delivery: Don’t Chase Test Coverage - excellent advice on writing tests
- CodingHorror: doing terrible things to your code – a great discussion of code-testing and producing production-ready code.
Programming Reference Documents
- Bash Scripting for the Reluctant - helpful “cheat sheet” information for shell-scripting under Unix
- WebsiteSetup: CSS Cheat Sheet - a nice (and complete) summary of all CSS3 (cascading stylesheets) elements and attributes
- The jsonapi protocol specification - a standard describing how to represent RPC calls as JSON
Database-related Topics
- Faster SQL Paging Using the Seek Method
- Postgres Transaction Handling
- Seldo: ORM is an Anti-pattern
- Wikipedia: the Active Record Pattern
Security and Cryptography
- LearnCryptography - an introduction to cryptography for beginners/intermediates
- What is Kerberos
- [video] Michel Schudel/Youtube: Crypto 101 for Java Developers
- Schneier: The Availability Heuristic
Interesting Blogs
Distributed Systems
- Microsoft OAM and DAPR - tools for developing microservices and kubernetes-based applications.
Amusing (but also sadly true)
- [video] The Expert - a short example of the “business analysis” phase of a project
- The half-arsed Agile Manifesto - when the Agile Manifesto meets reality
-
OPS Lessons - the hard truth about how complex IT systems actually work, eg:
- Some of your most critical services are kept alive by a handful of people whose job description does not mention those services at all
- If you break it, you own it - for now; if you fix it, you own it - forever.
- Commit Strip: A Comprehensive and Precise Spec - when programmers are no longer needed..
Other
- Configuration Management Tools Review : Puppet, Chef, Ansible, Salt
- [video] Healthy Software Developer: Why Most Programmers Don’t Last - tips for a long career with reduced stress
- [video] Internet of Bugs: Tech Interviewing is Broken (part 1) - Very interesting discussion about job interviews in IT - partly as interviewee, but mostly from view of interviewer/HR. USA-centric but still interesting for others.
Quotes
- “A complex system that works is invariably found to have evolved from a simple system that worked.” – John Gall, Systemantics (as seen on slashdot)
- “My point today is that, if we wish to count lines of code, we should not regard them as ‘lines produced’ but as ‘lines spent’. – Edsger Dijkstra
- “Doubt is not a pleasant condition, but certainty is an absurd one.” – Voltaire