Software Heritage
Semantic Versioning
France-IOI
Refactoring
Continuous integration
- CruiseControl
- Jenkins
- CircleCI
- Azure Pipelines
- Zuul
- TeamCity
- Bamboo
- Travis CI
- CodeShip
- Bitrise
- JFrog Pipelines
Build
- make: GNU, personal notes
- tmake
- Ant
Compilers
Linkers
Artefact repository
Code browsers
Debuggers
-
gdb
- rr: lightweight recording & deterministic debugging
- personal notes
- ddd: GNU
- AskIgor
Memory checkers
- Purify: personal notes
- Valgrind: personal notes
- dmalloc
- ccmalloc
- Electric Fence
- Boehm Collector
- LeakTracer
- MemWatch
- Memprof
- mpatrol
- AddressSanitizer (aka ASan)
Static analyzers
- C
- Multi-language
- C/C++
- Java
- JavaScript
- List
Dependency analysis
Metrics
Profilers
Diff / merge
Other tools
- Simian: detection of code duplication
Code reviews
- Tools
- Checklists
Jupyter
Games
RegExr
Kata-Log
Articles and videos
- Code As Documentation by (March 22nd, 2005) ► Code is the primary source of documentation, so it should be clear and readable.
- Fecophiles by (January 20th, 2012) ► An example of crappy code.
- Reducing Incidental Complexity in Our Code and in Our Teaching🚫 by (October 9th, 2013) ► Some thoughts about the fact that the code we write should be simpler.
- Branch By Abstraction by (January 7th, 2014) ► Gradually replacing a component largely used in an application by hiding it behind an abstraction layer before replacing it.
- How Long Is Too Long? by (September 11th, 2014) ► Source code files should have a maximum allowed number of lines.
- The Downsides of Clean Commits by (October 20th, 2015) ► Imposing clean commits results into doing less cleanup.
- List And Hash by (December 3rd, 2015) ► About the flexibility of data structures which are a composite of lists and hashmaps.
- ITT 2016 - Kevlin Henney - Seven Ineffective Coding Habits of Many Programmers🚫 by (April 5th, 2016) ► Miscellaneous thoughts about naming, code layout, encapsulation, getters/setters, tests…
- Testing Solid Code↓ by (May 11th, 2016) ► Some strongly-worded miscellaneous opinions about best practices and useless managers.
- What Will Your Legacy [Code] Be? by (August 30th, 2016) ► Thinking about legacy code, the one we inherit and the one we leave.
- Technical debt is real debt↓🚫 by and (January 19th, 2017) ► A description of technical debt, but the subject is much too simplified.
- Self Encapsulation by (March 9th, 2017) ► Martin explains that self-encapsulation, according to him, has little interest except in some particular cases.
- Code Health: Reduce Nesting, Reduce Complexity by (June 5th, 2017) ► The title says it all.
- Code Health: Obsessed With Primitives? by (November 13th, 2017) ► It is better to use classes rather than raw primitives.
-
A Common Mistake When Caching Nullable Values — It looks like there's a bug with the way Eclipse implemented modularity support. Let's see what happens when you try to cache nullable values in a non-modular project.🚫 by (December 16th, 2017) ► The problem of caching the
null
value. - Integers and Estimates by (June 21st, 2018) ► A meaningless mixture of Diophantine equations, Hilbert’s Entscheidungsproblem, and workload estimation.
- Too Clean? by (August 13th, 2018) ► Allowing for some slight mess in the code is helpful.
- Conditions Are Power-Law Distributed: An Example by (February 23rd, 2019) ► The title says it all.
- Vincent Jugé améliore l’algorithme au cœur de Python, Java et Android — En modifiant seulement quatre lignes de code, Vincent Jugé du LIGM surpasse les performances de l’algorithme de tri de référence : Timsort. Il présente sa nouvelle version, Adaptative Shivers Sort, lors de la conférence SODA20 à Salt Lake City, dans l’espoir de remplacer le vénérable algorithme. (January 6th, 2020) ► The title says it all.
- Why Minecraft is a Technical Feat | Explaining the Engineering Behind an Indie Icon↓ (February 17th, 2020) ► The title is true, but this video contains some errors or dubious claims.
- Curried Functions - Computerphile by (April 1st, 2020) ► A basic explanation of function currying.
- Branchless Programming: Why "If" is Sloowww... and what we can do about it! by (June 30th, 2020) ► An introduction to branchless programming, something that almost no developer should use.
- Fortunately, I don't squash my commits — The story of a bug, and how I addressed it. by (October 5th, 2020) ► The subtitle says it all.
- Program Correctness - Computerphile↓ by (November 27th, 2020) ► The title is very misleading, this is only about using Haskell’s QuickCheck on a very simple example.
- Brute Forcing The Countdown Numbers Game - Computerphile by (December 18th, 2020) ► The title says it all.
- How NOT to Sample Audio! - Computerphile by (January 15th, 2021) ► Rebuilding a voice record from a snapshot of a wave representation.
- Top 10 Craziest Assembly Language Instructions by (February 24th, 2021) ► Some of the most complex x86/64 instructions.
- Discussing node.js - Computerphile↓ by (March 1st, 2021) ► A short history of V8, Electron, Node, VS Code… with some incorrect statements.
- Coding Adventure: Ant and Slime Simulations by (March 25th, 2021) ► The title says it all, the results are spectacular.
- Mind the platform execution gap — Prerequisite capabilities for successful platform strategies by and (April 27th, 2021) ► Some advice for building and exploiting internal developer tools.
- WCF #5: A Most Elegant Data Structure — A data structure from the 1960’s is still pretty cool today. by (July 28th, 2021) ► A classical description of doubly-linked list.
- The Lightning Algorithm - Numberphile by (August 24th, 2021) ► The description of a program that solves a kind of simple maze and draws a kind of lightning.
- ↪The Dumbest Way To Solve A Maze - Numberphile by (September 11th, 2022) ► The same with particles moving randomly.
- Random Numbers with LFSR (Linear Feedback Shift Register) - Computerphile by (September 10th, 2021) ► The title says it all.
- Code Health: Now You're Thinking With Functions by (February 7th, 2022) ► The basic: using higher-order functions.
- Hit ’em High, Hit ’em Low: — Regression Testing and the Saff Squeeze by (March 28th, 2022) ► Digging out a bug in a failing test by recursively diving in the subroutines, inlining them, and removing code not related to the bug.
- The “dark yellow problem” in design system color palettes by (April 25th, 2022) ► The title says it all.
- 8 top SBOM tools to consider — These commercial and open-source tools will scan code and create software bills of materials automatically. by (July 25th, 2022) ► Some little information about SBOM and a list of such tools.
- Quiz yourself: The effects of declaring a Java class as final by and (September 20th, 2022) ► This quiz is about best practices rather than about Java.
- Model Driven Software Engineering - Computerphile↓ by (September 21st, 2022) ► This presentation is unclear: this is more a domain-specific language than model-driven engineering.
- Cloud Development Environments Tame Complexity By Reducing State by (October 31st, 2022) ► GitPod may be the solution to kill the cost of keeping a development environment working.
- Low-code/no-code platforms: The 10% trap and the limits of abstractions by , , , and (December 1st, 2022) ► The (few) pros and the (many) cons of low-code and no-code tools.
- Garbage Collection (Mark & Sweep) - Computerphile by (January 20th, 2023) ► The very basics of memory management.
- Optimisation du problème du voyageur de commerce par du Machine Learning by (January 31st, 2023) ► Using K-means as a heuristic to the Traveling Salesman Problem.
- 14 Ideas for Fun Python Free Time Projects by (February 24th, 2023) ► Some ideas of programs, if someone has no idea about a toy project to improve his/her development knowledge.
- Automata & Python - Computerphile by (March 16th, 2023) ► The very basics of state machines (Deterministic Finite Automata).
- ↪Non-Deterministic Automata - Computerphile by (May 26th, 2023) ► A presentation of Nondeterministic Finite Automata.
- DevOps is Dead? Au fait, c’est quoi le DevOps? Et pourquoi faut-il le sécuriser? (Fred SIMON)↓ by (April 13th, 2023) ► No information, some biased arguments, and some wrong facts.
- How a year-long LeetCode habit upped my professional game by (July 5th, 2023) ► The author describes the benefits she gets by daily practising on LeetCode.
- Mike's Cube Code - Computerphile by (July 11th, 2023) ► An interesting algorithmic challenge, but ’s first steps are not going far.
- Kernelless Kernel Programming (eBPF) - Computerphile↓ by (September 7th, 2023) ► A poorly prepared presentation of eBPF.
- Improve Readability With Positive Booleans by (October 17th, 2023) ► Code using a double negation is difficult to understand.
- Unlocking Clean Code: 20 Architectural Tips for Every Developer — Discover 20 key architectural tips for robust software. Embrace Clean Architecture for developers seeking efficient and adaptable code. by (October 26th, 2023) ► A good and classical list of coding best practices, but these ones are shortly described.
- Bug in Binary Search - Computerphile by (December 1st, 2023) ► The classical problem of the possible overflow when computing the middle between two numbers.
- Diff Debugging by (December 4th, 2023) ► Using a binary search to find the commit that introduced a bug.
- The curious case of the missing period — When Simple Mail Transfer Protocol is not simple by (February 20th, 2024) ► Hunting for the root cause of a tricky bug.
- Navigating Through Programming's Greatest Mistakes • Mark Rendle & Hannes Lowette by and (February 23rd, 2024) ► Some random thoughts about software development.
- The Documentation Tradeoff — A little, sure, but be careful about more by (June 12th, 2024) ► Documentation is not the only way to communicate.
-
This developer tool is 40 years old: can it be improved? — Would updating a tool few think about make a diff(erence)? by (August 5th, 2024) ► GitClear’s CEO explains that his Commit Cruncher is better than the historical
diff
. - The open-source ecosystem built to reduce tech debt — Today’s guest is Jonathan Schneider, co-founder and CEO of Moderne and creator of OpenRewrite, an open-source automated refactoring ecosystem for source code built to help developers eliminate tech debt. He tells Ben and Ryan about the challenges of automatic refactoring, how Java continues to evolve, and what kind of impact tech debt has on software development. Jonathan also describes the transition from open-source project to startup, why clean code is so important, and the role AI plays for developers right now. by , , and (November 19th, 2024) ► A presentation of OpenRewrite, an open-source tool to perform code transformation such as upgrading to a newer version of Java, Spring Boot…
- Storing times for human events by (November 27th, 2024) ► ’s advice for managing date/time: store the local date/time and the location, plus denormalise and also store the UTC date/time.
- Building a best-selling game with a tiny team – with Jonas Tyroller — Going behind the scenes of Thronefall, a minimalist indie strategy game. Developed by just two developers, the game sold 1M copies in the first year. How exactly was it built? (⧉) by and (January 29th, 2025) ► explains how he, with a single colleague, imagines and implements indie games.
- the sudoku affair by (February 5th, 2025) ► The story of ’s vs. ’s Sudoku solver: implementing by baby steps may not end up with a correct implementation, sometimes it is better to think about the design upfront or to fully redesign when you baby steps have reached a dead end.
- SDS 879: Serverless, Parallel, and AI-Assisted: The Future of Data Science is Here, with Zerve’s Dr. Greg Michaelson↓ (⧉) by and (April 15th, 2025) ► An advertisement for Zerve and some discussion about AI where these guys seem to known little about what they talk about.
- Exploring the fundamentals of software engineering by , , , and (May 1st, 2025) ► and speak about their future book, but there is no real engineering advice in this discussion.
-
Regular expressions
- Composed Regex by (July 24th, 2009) ► Splitting a regular expression into pieces to make it readable.
- this regex identifies prime numbers (reaction) by (June 24th, 2023) ► When you understand how numbers are represented (n is encoded as n characters "1"), you understand it is just a clever way to exploit regexps.
- ↪How on Earth does ^.?$|^(..+?)\1+$ produce primes? by (October 31st, 2024) ► The same.
- Using Zero-Width Assertions in Regular Expressions — Explore anchors, lookahead, and lookbehind assertions, which allow you to manage which characters will be included in a match and more. by (July 8th, 2024) ► A good description of positive/negative lookadheaf/lookbehind.
-
Multi-threading
- Fundamentals Of Multithreading🚫 by (June 15th, 2001) ► A good overview of the current implementation of multithreading at the CPU level: CMP, CMT, FMT, SMT…
- Near-Optimal Parallel Join Processing in MapReduce by (May 5th, 2011) ► A very technical presentation of an algorithm to implement join models in a MapReduce framework (see also this paper).
- The Silently Shifting Semicolon by , , , , and (April 11th, 2015) ► The authors explain that sequential consistency should be maintained instead of the current memory model of C, C++ and Java. This would simplify developers life while the performance loss would be acceptable.
- Four Solutions to a Trivial Problem - Guy Steele Jr. by (December 1st, 2015) ► How to parallelise the resolution of the volume of water held in a histogram, and some manifesto on the fact we must change our coding paradigms to be able to use parallelisation.
-
Hackable Projects
- Hackable Projects - Pillar 1: Code Health by (August 18th, 2016) ► A list of miscellaneous good coding practices.
- ↪Hackable Projects - Pillar 2: Debuggability by (October 11th, 2016) ► Run test locally, debugging mobile apps, proper logging, monitoring, testing small parts.
- ↪Hackable Projects - Pillar 3: Infrastructure by (November 10th, 2016) ► About the build and test environment: fast build and tests, presubmit queues, easy reverts, performance tests.
-
Build
- Building the PostgreSQL BuildFarm🗑️ by (February 24th, 2005) ► A description of the Internet-distributed PostgreSQL build farm. The article probably dives too much in some details, but it nevertheless gives a good idea of the whole mechanism.
- A (Long Overdue) BuildMaster Introduction↓ by (April 2nd, 2013) ► A presentation of BuildMaster, the author describes the Software Delivery Process model, but there is no real description of the software features.
- Mask of the Red Build by (December 26th, 2013) ► The reasons why builds must always be green.
- Gulp, Grunt, Whatever by (January 9th, 2014) ► An introduction to Gulp and a comparison with Grunt.
- CI/CD Tools Comparison: Jenkins, TeamCity, Bamboo, Travis CI, and More (January 31st, 2022) ► A short comparison of Jenkins, TeamCity, Bamboo, Travis CI, CircleCI, and CodeShip.
- Jenkins requires Java 11 or newer by (June 28th, 2022) ► Jenkins next LTS will require Java 11.
- Top 10 Jenkins Alternatives (2024) (May 2nd, 2024) ► A long list of CI/CD platforms, but the descriptions are poorly written.
-
Ant
- Improve Your Build Process with Ant↓🗑️ by (December 21st, 2005) ► An introduction to Ant, but I think that this article is not very clear.
-
gulp
- Gulp js Tutorial For Beginners🚫 by (March 9th, 2018) ► An introduction to gulp with simple examples: less, sass, minification and watching file updates.
-
Google
- Tools for Continuous Integration at Google Scale by (October 27th, 2010) ► A presentation of Google’s CI infrastructure.
- Building Software at Google Scale Tech Talk by , , and (March 21st, 2012) ► A more detailed and updated description of Google build environment.
- Tools for Continuous Integration at Google Scale by (June 19th, 2012) ► A description of Google’s infrastructure which uses dependency analysis to run only the impacted tests. But the whole required computation increases in a non-sustainable way…
- Building Software at Google Scale: Bazel by , , and (December 13th, 2016) ► A marketing presentation of Bazel, Google’s build system.
-
Travis CI
- Travis CI flaw exposed secrets of thousands of open source projects — Developers furious at Travis CI's "insanely embarrassing 'security bulletin.'" by (September 14th, 2021) ► The title says it all: Travis CI screwed up and failed to report its mistake.
-
Performance
-
Optimizing Applications with gcc & glibc (⧉) by (August 9th, 1999) ► This article gives some general advice (use
uint_least16_t
/int_fast16_t
/…, avoidstrcat
, usealloca
…) and explains some useful gcc (computedgoto
s,__stdcall__
,_builtin_constant_p
…) and glibc (mempcpy
,rawmemchr
…) features. -
↪Application Optimization on Linux Tutorial Material by (December 14th, 1999) ► After a presentation of
gprof
,sprof
,gcov
, andmemprof
, the author proposes an exercise to optimise a sample program. A paragraph contains some material of the previous article. - We have it easy, but do we have it right?⇈ by (November 8th, 2008) ► A very good proof that performance evaluation is very difficult: very minor changes in the environment or in the executable have a large impact on the measured performance.
- The Parallel Revolution Has Started: Are You Part of the Solution or Part of the Problem? by (December 18th, 2008) ► Random thoughts on parallelism: why CPUs are now multi-core? why software will have to effectively exploit parallelism? possible killer apps requiring yet further CPU performance improvements, autotunners, a simple performance model…
- Using inline assembly with IBM XL C/C++ compiler for Linux on z Systems, Part 2 — An analysis based on the computation of Fibonacci sequence🗑️ by (October 28th, 2015) ► A performance analysis of several Fibonacci implementations.
- Compiler Optimization (⧉) by and (September 30th, 2020) ► talks about her experience, both in academia and in companies, on optimising the code generated by compilers.
- Performance Engineering on Hard Mode (⧉) by and (November 28th, 2023) ► How to analyse the performance of a trading system: profilers, OCaml…
-
Optimizing Applications with gcc & glibc (⧉) by (August 9th, 1999) ► This article gives some general advice (use
-
Assertions
- Diagnosing Java code: Assertions and temporal logic in Java programming — Introduce temporal logic to assertions to supplement testing by (July 2002) ► The author introduces the idea of temporal logic: assertions taking into account the execution sequence into account ("always", "sometime", "until" and "next").
- Diagnosing Java code: Using temporal logic with bug patterns — Preventing common bugs with temporal logic assertions by (August 2002) ► Some samples of how to use temporal logic, but most of them could be verified with standard assertions (i.e. "always" is the same as defining an invariant). It would be more convincing to choose more tricky bugs, but maybe the article would have been too complex…
- Improve Test Asserts with Shouldly — Augment your testing framework with Shouldly for improved test code readability and better test failure messages. by (August 19th, 2015) ► Yet another C# assertion library.
-
Design by contract
- Building bug-free O-O software: An Introduction to Design by Contract ► A presentation of design by contract.
- Contracts: From Analysis to C++ Implementation by and (August 1999) ► The authors describe how they automatically transfer the assertions from a Python prototype to the C++ implementation.
- Using Design by Contract in C🗑️ by (October 28th, 2004) ► An introduction to Design by Contract for C.
-
Code review
- Is Software Inspection Value Added? by ► A numerical analysis of the ROI of code reviews.
- Single Committer Software Development - Introducing single committer and peer code review into your development process🚫 by (July 25th, 2002) ► This article is more about the code review process in some Open Source projects (they give the example of the participation to Wine) than about the fact that the code integration is centralised by a single person.
- Part of Your Complete Breakfast - Code Review is a Source of Essential Vitamins and Minerals🚫 by (November 20th, 2002) ► Nothing new here, but this is still a good argumentation for performing code reviews. A checklist is also provided.
- Your code sucks, and I hate you — The Social Dynamics of Code Reviews by (September 15th, 2008) ► Some evangelism for doing code reviews and some advice on how to perform them.
- Are you using a toolset in your code review?🗑️ by (February 23rd, 2010) ► Some good advice, but it would be better if it would detail further how to actually perform the code review.
- Agile Techniques: When and How to Conduct a Code Review — Code review is a tool to help teams increase their software engineering maturity, and in the end this means delivering higher value to customers🚫 by (October 20th, 2010) ► A description of a code review process, but I do not understand how the code review can last only 55 minutes.
- 11 Best Practices for Peer Code Review - IBM Innovate Conference 2011 by (June 2011) ► Some generalities about Code Reviews (with no link with the presentation title…) and a demo of Smart Bear’s CodeCollaborator.
- Six Ways to Make Your Peer Code Reviews More Effective↓🗑️ by (July 11th, 2013) ► Some short tips for code reviews.
- Code Health: Too Many Comments on Your Code Reviews? by (June 19th, 2017) ► A short list of good pieces of advice.
- Code Health: Understanding Code In Review by (May 1st, 2018) ► Don’t waste time reviewing code that is hard to understand, just ask for it to be clarified.
- Code Health: Respectful Reviews == Useful Reviews by , , and (November 6th, 2019) ► A short list of tips for code reviews.
- Five Code Review Antipatterns by (May 4th, 2020) ► Some sound advice for the code review process.
- Ship / Show / Ask — A modern branching strategy by (September 8th, 2021) ► A proposal to differentiate code changes that need no code review, changes that can be reviewed later on, and code that must be discussed before being committed in the product.
- Why Pull Requests Are a Bad Idea • Dave Farley • GOTO 2022 by (November 4th, 2022) ► Why pair programming is better than code reviews.
- Comment merger sa PR en 10 secondes ? Avez-vous essayé les mob code review ? by (May 3rd, 2024) ► proposes to perform mob code reviews. I am not convinced.
-
Promyze
- Comment booster l'onboarding dans vos équipes de développement ? by and (May 19th, 2022) ► Some well-known facts about the challenges of onboarding and a demo of Promyze.
-
Pair programming
- On Pair Programming by and (January 15th, 2010) ► A long list of thoughts and pieces of advice about pair programming.
- The Mortifying Ordeal of Pairing All Day — I had to confront a lot of my fears about myself, sometimes every day. I had to learn to show someone else all the things I didn’t know, my limitations as a human and a software engineer. by (May 7th, 2021) ► Pairing most of the time is exhausting.
-
Mob programming
- Mob Programming – A Whole Team Approach by Woody Zuill by (July 2014) ► A positive testimony on mob programming.
- Mob Programming : je ne développerai plus jamais seul (A. Victoor & J. Rouve) by and (April 18th, 2019) ► Some positive feedback on mob programming.
- Mob programming : un confort de l'ancien monde ? by (April 30th, 2020) ► The same. Given the spelling mistakes, I presume this blog was not written by a mob.
-
Compilers
- Get to know GCC 4 — What's new in the GNU Compiler Collection release series🗑️ by (October 28th, 2008) ► A short description of the GCC4 releases.
- GCC hacks in the Linux kernel — Discover GCC extensions for the C language🚫 by (November 18th, 2008) ► The presentation of some gcc extensions used by the Linux kernel.
- Stochastic Optimization for x86 Binaries by (January 12th, 2015) ► Using stochastic search to optimise object code.
-
Debuggers
- Debugging tools and techniques for Linux on Power🗑️ by (August 4th, 2005) ► Some very basic introduction of Valgrind, gdb, jdb and strace. This can interest only persons who are discovering debugging tools on Linux.
- Virtual Machine-Based Replay Debugging↑ by (October 30th, 2008) ► VMware allows to record a run demonstrating a bug and to replay it exactly the same way in Visual Studio. This is a neat use of virtualisation.
- Silver Bullet -- Time Travelling Debugger by (July 24th, 2009) ► Another debugger implementation enabling the record and analysis of a bug scenario. But this tool is limited to Java.
-
Dynamic analyzers
-
Developing Software in a Hostile Environment by ► Some tricks with the memory allocator to force some dormant
malloc
/free
bugs to become apparent. - Postmortem memory profiling with PERL — Find and fix memory leaks in wireless applications🗑️ by (December 4th, 2003) ► A simplistic solution for finding memory leaks, it is unwieldy and supposes that you liberate all your memory blocks when exiting. But this article can be a starting point if you want to think how a real memory checker could be implemented (yes, you will have to do some highly OS dependent stuff…).
- Visualize function calls with Graphviz — Open source software clarifies complex call structure🗑️ by (June 21st, 2005) ► Some low-level gcc hacking to create a graph call.
- Generating Low-Overhead Dynamic Binary Translators by (June 10th, 2010) ► A description of fastBT, a table-based binary translator that can be used to instrument dynamically the code.
- Testing Chromium: AddressSanitizer, a fast memory error detector. by (June 15th, 2011) ► Yet another memory access checker.
-
Purify
- How to improve Purify's run-time performance🗑️ ► Some tips and tricks to make faster Purify runs.
- How does Purify find errors on the stack?🗑️ ► A short description of the Purify stack check limitations.
-
Instrumenting X libraries under Solaris 2.6 and later🗑️ (March 8th, 2001) ► For those who are unable to link (under Purify) with the X libraries because they have forgotten
/usr/openwin/lib
in theirLD_LIBRARY_PATH
.
-
Developing Software in a Hostile Environment by ► Some tricks with the memory allocator to force some dormant
-
Static analyzers
- C++ Code Analysis: an Open Architecture for the Verification of Coding Rules🚫 by and ► An overview of a coding rules checker implemented with javacc.
- C# Coding Standards and Practices↓🚫 by (April 1st, 2011) ► The author states the obvious: define coding rules applicable to your domain and verify them with a static analyser.
- Why You Don't Trust Your Linter • Jeroen Engels • GOTO 2022 by (February 20th, 2023) ► Some opinionated comments on linters from someone who wrote one for Elm.
-
Microsoft
- User Interface Challenges in Static Defect Detection🚫 by (2001) ► Some interesting comments on the way developers interact with static analysis tools.
- Steering the Pyramids - Tools, Technology, and Process in Engineering at Microsoft🚫 by (2002) ► An overview of the tools used by Microsoft to improve the quality of their products, this is interesting to see what are their evolution and challenges.
-
PMD
- Static Analysis with PMD🗑️ by (February 12th, 2003) ► A presentation of PMD and how to define rules in it.
-
FindBugs
- FindBugs, Part 1: Improve the quality of your code🗑️ by (May 25th, 2004) ► Some examples of bugs reported by FindBugs and how to integrate it in the Ant build.
- ↪FindBugs, Part 2: Writing custom detectors — How to write custom detectors to find application-specific problems🗑️ by (May 25th, 2004) ► An example showing how to define his/her own rules.
- ↪Java theory and practice: Kill bugs dead — Inspection tools like FindBugs provide a second layer of defense against common coding errors🗑️ by (June 29th, 2004) ► The author describes how FindBugs can flag some bugs he described in previous articles.
- Using Static Analysis For Software Defect Detection↑ by (July 6th, 2006) ► A good overview of FindBugs: some examples of detected bug patterns, the results of running FindBugs on some well-known products, new features (using annotations, bug history), possible future improvements… Williams also speaks about its new project: Marmoset.
-
Coverity
- Checking System Rules Using System-Specific, Programmer-Written Compiler Extensions (⧉) by , , , and (2000) ► The authors describe how they created a tool with a simple language to catch some types of error in Linux, OpenBSD…
- Homeland Security helps secure open-source code by (January 10th, 2006) ► Coverity gets some money from DHS.
-
PC-lint/FlexeLint/ProLint
- A Bug a Month? It's Harder Than You Think — Writing a bug a month is child's play when you don't intend to. But when you try to do it.... by (June 1st, 2007) ► An interview of about his "Bug of the Month" ads.
-
Julia
- Nullness Analysis for Java by (September 17th, 2008) ► A presentation of Julia and a comparison with Eclipse and NIT for nullness analysis.
-
Sonar
- Kill the Noise! to Change Gear in our Code Analyzers🚫 by (June 1st, 2017) ► The Sonar team is reclassifying the rules as bugs vs. warnings.
- Porter le Flambeau du Clean Code à l’ère du GenAI↓ by and (May 3rd, 2024) ► Some little information about the history of code quality, the impact on AI, and an advertisement for Sonar.
- The new pair programming: an AI agent that cleans your code as you write — Ben welcomes Sonar CEO Tariq Shaukat for a conversation about AI coding tools’ potential to boost developer productivity—and how to balance those potential gains against code quality and security concerns. They talk about Sonar’s origins as an open-source code quality tool, the excellent reasons to embrace a “clean as you code” philosophy, and how to determine where AI coding tools can be helpful and where they can’t (yet). by and (October 22nd, 2024) ► This is mostly an advertisement for Sonar with little information of what their AI stuff can do.
-
Infer
- Facebook's Code Checker - Computerphile by (October 13th, 2020) ► Some basic non-technical information about static code analysers and Infer.
- ↪EXTRA BITS: Demonstrating How Code Checking Works - Computerphile by (October 13th, 2020) ► The continuation of the previous video.
-
Metrics
- Software Remodeling: Improving Design and Implementation Quality - Using audits, metrics and refactoring in Borland® Together® ControlCenter™ by (January 2003) ► Why static code analysis and software metrics are a good complement of human code reviews and can help to drive refactoring.
- In pursuit of code quality: Monitoring cyclomatic complexity — What to do when code complexity is off the charts🗑️ by (March 28th, 2006) ► A very basic introduction to cyclomatic complexity and some tools computing it. The CC computation formula is not even given.
- Introducing the Polyglot Code Explorer by (September 6th, 2020) ► Using some simple and language neutral metrics to analyse a code base.
- Code Red: The business impact of low code quality↓ by (March 2022) ► A lenghty whitepaper claiming that poor code is more costly. But there are no details, just marketing ststistics bullshit.
-
Futamura projections
- The Three Projections of Doctor Futamura↑ by (May 3rd, 2009) ► The title says it all.
- Ruby Conf 2013 - Compilers For Free by Tom Stuart by (November 9th, 2013) ► A description of partial evaluation and, too quickly, of Futamura projections.
- Compilers For Nothing, Executables For Free!🚫 by (March 24th, 2020) ► A too fast description of Futamura projections (the slides are here).
-
Formal verification
- Interface Grammars for Modular Software Verification by (June 4th, 2008) ► In order to simplify a system or to replace the components unavailable for analysis, stubs are used. These ones are generated by parsing a grammar modelling these components.
- Digital Design: Beyond Trial and Error by (August 19th, 2008) ► proposes a new methodology for performing formal verification in the case of concurrency. This one combines Boolean expressions and regular expressions. The idea seems interesting, but it is realistic for real, i.e. non trivial, systems?
-
Naming
- Creating Useful Naming Conventions: Business Considerations by (December 20th, 2013) ► Some thoughts about naming conventions.
- Hunting for great names in programming by (August 22nd, 2016) ► About the pleasure to choose good names for variables, methods and classes.
- Code Health: IdentifierNamingPostForWorldWideWebBlog by and (October 23rd, 2017) ► Some simple but good advice for chosing identifiers.
-
Partitioning complexity
- Making a mess less by (October 17th, 2017) ► How to handle a complex model.
- Constant/Migrate/Compute: A Workflow for Partitioning Complexity by (November 14th, 2017) ► A strategy for implementing a feature by splitting it in baby steps.
- One Bite At A Time: Partitioning Complexity by (November 28th, 2017) ► A list of strategies for splitting a code change into simple steps.
- Complexity Partitioning and Inheritance: Two Wins and a Big Loss by (November 29th, 2017) ► An example (using an inheritance hierarchy) where the partitioning may end up being more complex.
-
Documentation
- Writing, Technically (⧉) by and (September 1st, 2021) ► Why documentation is even more important at Janes Steet than in other companies; how it is written, and some thought about writing in general.
- No docs, no bugs by (May 22nd, 2025) ► A call for documentation, but the reasoning that no doc means no spec and no spec means no bug, is a too far-fecthed exageration.
-
Refactoring
- Refactoring Malapropism by (January 3rd, 2004) ► The word "Refactoring" should not be used for any kind of code restructuring.
- Debt Metaphor by (February 15th, 2009) ► explains how he coined the "technical debt" metaphor.
-
Comment lines by Kyle Brown: Paying back technical debt🗑️ by (January 27th, 2010) ► The author suggests a five steps process to manage the technical debt:
1) Assess what you owe
2) Stop incurring new debt
3) Choose your debt reduction strategy
4) Stick with the plan!
5) Track and reassess your progress. - Opportunistic Refactoring by (November 1st, 2011) ► Take the opportunity to clean up the code while adding a feature or fixing a bug.
- Use, Disuse, and Misuse of Automated Refactorings by (October 1st, 2012) ► A study of Eclipse refactoring tools: Which ones are used? Which ones are not used? Why? How can they be more accessible?
- Martin Fowler @ OOP2014 "Workflows of Refactoring" by (February 10th, 2014) ► Some thoughts about refactoring: how to sell it to managers, the different types of refactoring…
- RailsConf 2014 - All the Little Things by Sandi Metz by (April 24th, 2014) ► The gilted rose kata which is a refactoring kata: the open/close principle, many small objects, refactoring requires temporary complexity increase.
- Refactoring code that accesses external services — When I write code that deals with external services, I find it valuable to separate that access code into separate objects. Here I show how I would refactor some congealed code into a common pattern of this separation. by (February 17th, 2015) ► The title says it all: a detailed example of refactoring some code calling the YouTube API.
- The Core 6 Refactorings by (May 2nd, 2016) ► The author explains the basic refactorings and that it is better to rely on the IDE. But my experience is that some developers blindly following IDE refactoring proposals end up writing crappy code…
- The Life-Changing Magic of Tidying Up Code by (June 8th, 2017) ► Some non-technical rules for tidying up code.
- What Refactoring Is and Is Not by (April 4th, 2018) ► Big rewrites must not be called refactoring and they should be avoided by doing real refactoring i.e. doing continuous code cleanup under the control of a correct suite of automated tests.
- What To Tidy by (September 7th, 2018) ► Some examples of small code cleanups.
- Sipping the Big Gulp: 2 Ways to Narrow an Interface by (May 11th, 2019) ► A very simplistic example of tidying up: changing a routine so it accepts an object attribute instead of the whole object can be done by creating a new routine to replace the old one or by changing the parameter of the routine.
- Refactoring Java, Part 1: Driving agile development with test-driven development — Refactoring makes your organization’s code simpler, which means fewer bugs and easier maintenance. by (October 11th, 2020) ► The author tries to slowly detail the TDD process (and in particular the refactoring) but he goes too far and he starts by mixing production and test code. This will not help new comers to understand the whole process.
- ↪Refactoring Java, Part 2: Stabilizing your legacy code and technical debt — Pin-down tests are the key to stabilizing your legacy Java code. by (October 24th, 2020) ► Using the Gilded Rose kata to demonstrate writing unit tests (before refactoring) from the specification and by analysing code coverage.
- ↪Refactoring Java, Part 3: Regaining business agility by simplifying legacy code — By making the code easier to understand, you also make it easier—and safer—to maintain. by (December 5th, 2020) ► The author describes in details some refactorings (constant extraction, method extraction…). But I consider that he is wrong when using the extracted constants in his unit tests.
- On Exactitude in Technical Debt — What does a metaphor like “technical debt” mean? And what doesn’t it mean? by (November 17th, 2020) ► The usual description about the danger of improperly using the metaphor, the cost of the technical debt is the additional time and effort spent working on the code.
- Gilding the Rose: Refactoring-Driven Development - Kevlin Henney - ACCU 2023 by (June 9th, 2023) ► A detailed description of a gillted rose refactoring (in C#).
- Thoughts on “Tidy First?” by (June 11th, 2024) ► A review of ’s last book.
-
IntelliJ IDEA - Code Smells
-
Code Smells: Null by (August 8th, 2017) ► Some examples of improper use of
null
and cleaning them with IntelliJ IDEA. - ↪Code Smells: Deeply Nested Code by (August 16th, 2017) ► A violation of the law of Demether and how to fix it.
-
↪Code Smells: Iteration by (August 23rd, 2017) ► Some examples of using a
List
where aMap
or aSet
should be used. - ↪Code Smells: Mutation by (August 29th, 2017) ► Simplifying some complex code by removing mutable variables.
- ↪Code Smells: Multi-Responsibility Methods by (September 5th, 2017) ► Fixing a method that violates the Single Responsibility Principle.
-
↪Code Smells: If Statements by (September 13th, 2017) ► Some miscellaneous ideas on how to simply code using to many
if
s. - ↪Code Smells: Too Many Problems by (September 18th, 2017) ► The author proposes three strategies to clean up messy code: break into smaller methods, manage one problem at a time, model the data/algorithm.
-
Code Smells: Null by (August 8th, 2017) ► Some examples of improper use of
-
Katas
- Prime Factors Code Kata Screencast by (October 5th, 2011) ► A code Kata: computing prime factors in Java using TDD.
- Performing Code Katas by and (May 28th, 2013) ► Some advice for performing code katas.
- Using Katas To Improve by (September 26th, 2013) ► explains the benefits he got from practicing code katas.
-
Kent Beck’s limbo / test && commit || revert
- Limbo: Scaling Software Collaboration by (July 11th, 2018) ► Some thoughts about how to have a massive team of developers working on a code base.
- ↪Limbo on the Cheap by (September 27th, 2018) ► Experimenting ideas of the previous article with textual diffs and Git.
- test && commit || revert by (September 28th, 2018) ► Pushing the experiment in a new direction: if the tests fail, the code change is reverted.
- TCR (test && commit || revert). How to use? Alternative to TDD? by (November 14th, 2018) ► A description of TCR and a simple experiment with it.
- substring, TCR style by (January 9th, 2019) ► A demonstration of the TCR process.
- Trying out test commit or revert by (January 11th, 2019) ► A detailed try of using TCR on the Fizz Buzz kata on Node.js.
- TCR in VS Code by (January 12th, 2019) ► A minimalist setup for doing TCR is VS Code.
- Test && Commit || Revert (TCR) by (March 6th, 2019) ► Some small feedback on TCR: it does not enforce small steps, but it works when doing these.
- TCR to Tutorial by (April 18th, 2019) ► The author speaks about a tool to generate a tutorial from a TCR log, but there is little information here.
- SB Changes by (May 21st, 2019) ► Learning to separate and sequence structural and behavourial changes.
-
Software Design is Human Relationships
- Software Design is Human Relationships: Part 1 of 3, Perspective by (May 23rd, 2019) ► Introducing waiters (people waiting for system behaviour change) and changers (people who can change the behaviour).
- ↪Software Design is Human Relationships: Part 2 of 3, Waiters, Changers, and Sufficiency by (May 29th, 2019) ► Interleave behaviour and structure changes so waiters do not get frustrated.
- ↪Software Design is Human Relationships: Part 3 of 3, Changers & Changers by (July 18th, 2019) ► Changers may disagree on how the structure should be changed or on how to order behaviour and structure changes.
-
Jupyter
- À la découverte de Jupyter, un logiciel scientifique libre aux millions d'utilisateurs — Un logiciel pas si gazeux by (December 21st, 2022) ► Some (non-technical) information about Jupyter.
- Jupyter Notebooks vs Python Scripts | When to Use Which? by (August 18th, 2023) ► A short presentation of Jupyter and some pitfalls to avoid.
- How to Use Jupyter Notebook: A Beginner’s Tutorial↑ by (May 7th, 2024) ► A good introduction to Jupyter.
- ↪Tutorial: Advanced Jupyter Notebooks by (January 2nd, 2025) ► The continuation of the previous introduction: shell commands, line and cell magics, extensions, Seaborn, macros, loading and executing external code, executing and converting a notebook from the command line, styling, accessing a database…
-
Commenting the code
- Why You Shouldn't Comment (or Document) Code by (June 27th, 2013) ► Do not comment how the code works, but comment only its intends and write Really Obvious Code.
- ↪No Comment: Why Commenting Code Is Still a Bad Idea by (July 31st, 2013) ► Answers to the comments on the previous article, but there is almost nothing new here.
- ↪No Comment, Part 3: Writing 'Really Obvious Code' by (September 12th, 2013) ► An example of modifying the code to make it more readable.
- Necessary Comments by (February 23rd, 2017) ► It is sometimes really necessary to comment code.
- Code Health: To Comment or Not to Comment? by and (July 17th, 2017) ► Some good basic advice about commenting the code.
- Stop Writing Code Comments by (May 16th, 2019) ► A good overview of the usual problems with comments.
- ↪Don’t stop writing code comments — Or: Please stop giving absolute advices. by (June 4th, 2019) ► An answer to the previous article.
- Best practices for writing code comments — While there are many resources to help programmers write better code—such as books and static analyzers—there are few for writing better comments. While it's easy to measure the quantity of comments in a program, it's hard to measure the quality, and the two are not necessarily correlated. A bad comment is worse than no comment at all. Here are some rules to help you achieve a happy medium. by (December 23rd, 2021) ► Some basic and good advice on commenting code.
- Reduce technical debt by valuing comments as much as code by (January 18th, 2023) ► Some proselytising for code comments and comment driven development.
-
Horror stories
- Out To Lunch — Why user requests shouldn't always be granted. by (February 19th, 2014) ► Random error messages.
- Unlucky 13? — Would going above and beyond when fixing terrible code have serious consequences? by (March 12th, 2014) ► Being afraid of having done the right thing.
- The End of Days — It's a situation a coder should never have to face: perpetuating bad coding practices from years ago, or just fixing the darn thing! by (April 16th, 2014) ► A silly use of a relational database.
- Lost in Translation — After Wayne's employer decided to bring some outsourced code back in house, he discovered that developers in Kerbleckistan were doing some serious innovating in the science of passing parameters. by (July 23rd, 2014) ► Some offshore bashing, but, as pointed out by some cynical readers, Wayne also botched the work.
-
Dwarf Fortress
- 700,000 lines of code, 20 years, and one developer: How Dwarf Fortress is built — Dwarf Fortress is one of those oddball passion projects that’s broken into Internet consciousness. It’s a free game where you play either an adventurer or a fortress full of dwarves in a randomly generated fantasy world. The simulation runs deep, with new games creating multiple civilizations with histories, mythologies, and artifacts. I reached out to him to see how he’s managed a single, growing codebase over 15+ years, the perils of pathing, and debugging dead cats. Our conversation below has been edited for clarity. by and (December 31st, 2021) ► An interview of , the developer of Dwarf Fortress.
- ↪Podcast 377: You don't need a math PhD to play Dwarf Fortress, just to code it — I am a dwarf and I'm digging a hole. by , , and (September 21st, 2021) ► More information about Dwarf Fortress.
- Dwarf Fortress, the most inscrutable game of two decades, is getting a tutorial — Start off in a mineral-rich play area with hints, rather than primordial chaos. by (October 14th, 2022) ► Some little information about the current development.
- After 16 years of freeware, Dwarf Fortress creators get their $7M payday — "When we pass from this world, you will be the reason we are remembered." by (February 2nd, 2023) ► The title says it all.