Some not quite curated links
A collections of bookmarks to interesting stuff, some read or watched, some not. So the content at the end of the link may not be of value, but it probably is.
###Table of contents
- Not yet categorised stuff
- Some random talks
- Kotlin related stuff
- Architectural Decision Records
- I18N -> L10N tooling
- Some DDD stuff
- Some stuff on #noprojects and similar
- Languages that would be interesting to know more about
- HA and Zero Downtime
- Java
- Systems Thinking
- Patterns
- Architecutre
- Kata and Code Retreat resources
- Software Craft and Apprenticeship
- Progression Frameworks/Engineering Ladders
Not yet categorised stuff
- docToolchain - ASCIDoc code documentation tool chain for "docs as code" and "arc42", and perhaps Architecture in the code (Simon Browns work).
- Good naming is a process, not a single step - An eight part article series on how to find good names for things when programming. There is some very good advice here.
- Bootstrapping Inclusion Article series about one persons experience with the transformation in a small company growing large:
- Release Flow: How We Do Branching on the VSTS Team - This is a blog from the Visual Studio Team Service teams findings on x based development which talks about some of the issues they have experienced.
- Zero trust security tooling
- The State of Java Serialization - About Java's Serialisation issues and possible remedies for it
- Contract Testing with Spring Cloud Contract
- Microservice Websites - By Gustaf Nilsson Kotte - working with Microservices frontends at IKEA. A lot of interesting ideas and thought both on frontend constraints and on a different approach to splitting up a website to different teams.
- Agile Retrosepctive Resource Wiki
- Fun Retrospecitves
- The Little Mocker - Robert C. Martin on the difference between mocks, stubs, fakes, spys and dummies.
- The Practical Test Pyramid - What is the test pyramid, and how can we implement it.
- Kent Beck on when to write tests and when not
- DAMP and DRY code - Descriptive And Meaningful Phrases and Don't Repet Yourself, what does each mean and how does it help us in creating meaningful code.
- Refactoring - The web site.
- Does TDD really lead to good design? - Sandro Mancuso on TDD as a design tool, where he argues it's not!
- WireMock - a tool to mock out REST APIs of external systems.
- edison-hal - a competing, and according to some considerably better, link tool then for example spring-hateos
- Deckdown - creates slide decks from Markdown files - online tool.
- Forecasting for beginners - how to forecast delivery
- On Uncertainty, Prediction, and Planning - article explaining the problems with predictions (I.E. estimation) on delivery schedules and how to address this problem.
- Pratical Guide to Build an API Backend with Spring Boot - InfoQ mini book
- Defense in Depth - 40min talk.
- Work/life balance in employee intellectual property agreements - Github has done some work on how to incorporate employees interests into their IP policy.
- OpenAPI specification
- Chaos Engineering - InfoQ eMag
- Java's Service Loader - howto guide to create a Java Module service
- Upbound - a multi cloud provider API
- mkcert and blog about it - is a tool to create valid https certificates for localhost (and other selected hosts) that only works locally but are fully trusted, like a proper CA certificate.
- Dagger - a static compile-time annotation driven dependency injection framework for Java and Android, should also work with Kotlin.
- AssertJ is an assertion library for Java, kinda like Hamcrest but different. I need to try this out, it might be better than Hamcrest, which is what I'm used to.
- Docs as Code - A site dedicated to working with documentation as an automated part of the build cycle. Tooling and advice.
- Impact Mapping
- Java Regex Tester
- Correctness vs Change: Which Matters More? - by Jessica Kerr - a very nice breakdown of the different problems we work with in programming, and how to optimise for each.
- To PUT or to POST? what verb should we use for what in REST?
- Connascence - A way to measure code and architectural coupling.
Some random talks
- Data visualisation with R - Matthew Renze introduces the R programming language as well as demonstrates how R can be used to create data visualizations to complete day-to-day developer tasks.
- The Hardest Yards - Aslam Khan; I have studied and used methodologies for changing teams. I recognise the change patterns. I have read these, tried these and none prepared me sufficiently for the last few years. This is a story of extreme change at a pace and intensity that I never imagined. What would you do when co-option is not an option, when the only choice is to force change?
- Is Boilerplate Code Really So Bad? - Trisha Gee explores common coding scenarios using Java and Kotlin, discussing Java's evolution to improve productivity, and why staying up to date with Java can help.
- 55 New Features in JDK 9 - Simon Ritter discusses some of the new features in JDK 9.
- JDK 9, 10, 11 and beyond - Presentation from SprinOne by Simon Ritter
- Spring 5.1 and upgrade to Java 11 - from SpringOne 2018
- Hands On with Clojure - Bodil Stokke: Of all the strange new JVM languages, Clojure, with its roots in the alien world of Lisp, may well be the strangest. It is also, its proponents insist, by far the most powerful. They'll show you weird and incomprehensible proofs of this—macros, lazy lists, monads, what have you—that may well send academics into orgies of rapturous debate, but the question always remains: "does this have any real world application at all, or are you all just geeking out on us?"
- Programming, Only Better - Bodil Stokke: Have you noticed that in spite of all our oft repeated Best Practices, those bugs don't seem to stop coming back no matter how many tests we write, that pile of technical debt still seems to keep growing no matter how much we refactor, and we keep missing those deadlines no matter how we organise our scrum board?
- Move Slow and Mend Things - Kevlin Henney. Velocity. Sprints. Move fast and break things. There is a seeming obsession with speed of software development that is often at the expense of the software and its development. Velocity is a question of direction, not just magnitude. Sprints are not about sprinting; they're about sustainable pace. Time to market is less important than time in market. Full-stack development is normally a statement about technology, but it also applies to individuals and interactions. The full stack touches both the code and the world outside the code, and with that view comes responsibility and pause for thought.
- Patterns of Effective Teams - Dan North; Some teams are orders of magnitude more effective than others, turning around business solutions in days or even hours. Their secret is a combination of smart technology choices, great development habits and a powerful team dynamic. In this talk Dan describes a number of patterns of behaviour that he's identified working with some great teams, beyond the basics of co-location, stand-ups and pair rotation. You'll gain a new appreciation for old techniques like code reviews, and even working in silos won't seem so bad!
- Guide refactorings with behavioral code analysis - Adam Tornhill; Adam Tornhill is a programmer who combines degrees in engineering and psychology. He's the founder of Empear where he designs tools for software analysis. He's also the author of Your Code as a Crime Scene, Software Design X-Rays, Lisp for the Web, and Patterns in C. Adam's other interests include modern history, music, and martial arts
- Complexity sucks - Aslam Khan; Aslam Khan about his session "Complexity sucks": Building software is mostly about trying to wrap our heads around the complexity of a domain. If we understand the domain, we have a better chance of producing a simpler design. The harsh reality is that there is a pretty good chance of deforming that simple design over months and years. The challenge we face is dealing with inherent complexity up front and insidious complexity that sneaks in later. In this talk I will share some techniques that I find useful in tackling domain complexity.
- Beyond Lambdas & Streams - Functional Fluency in Java - Naresha K discusses writing functional code in Java 8, the limitations and using Vavr to circumvent those limitations.
- Documenting RESTful APIs with Spring REST Docs - Jenn Strater introduces Spring REST Docs and its test-driven approach to RESTful API documentation.
- The Journey to Continuous Delivery - Dan North argues that the purpose of Continuous Delivery is to support business agility, and that people shouldn’t try to boil the ocean, but instead choose one thing to go after.
- Structure and Interpretation of Test Cases - Kevlin Henney; Throw a line of code into many codebases and it's sure to hit one or more testing frameworks. There's no shortage of frameworks for testing, each with their particular spin and set of conventions, but that glut is not always matched by a clear vision of how to structure and use tests — a framework is a vehicle, but you still need to know how to drive.
- John Ousterhout: "A Philosophy of Software Design" | Talks at Google John Ousterhout, Professor of Computer Science at Stanford University, discusses complex techniques on how to become a more confident coder. John is excited to announce that he just published the first edition of a new book on software design, based on material from a software design class he has been teaching at Stanford for the last several years.
- Programming with GUTs - Presentation by Kevlin Henney
- Seven ineffective coding habits of many programmers - Presentation by Kevlin Henney about how we as programmers often don't do what we should and how to change our bad habits. Very enlightening and entertaining.
- A question about craftsmanship - Kevlin Henney pick apart the concept of Software Craftsmanship and discusses its shortcomings and strengths.
- Software Faster - Dan North talks about a couple of patterns from his book Software Faster (so far only 7% complete so the talk is a better source of information then the book).
- Complexity is Outside the Code - Jessica Kerr and Dan North about how the human brain deals with complexity.
- Programming with GUTs by Kevlin Henney - Kevlin Henney talks about unit testing, how we write them and how we should write them. What is the takeaway from a well written test.
- Refactoring Mount Doom - Tackling Legacy Code - Franziska Sauerwein discusses how to refactor code for the right reasons and the right methods to use for time efficiently.
- Software that fits you head - Dan North talks about our capacity to tackle complexity and ideas on how to deal with our limitations.
- Simple Made Easy - Rich Hickey emphasizes simplicity’s virtues over easiness’, showing that while many choose easiness they may end up with complexity, and the better way is to choose easiness along the simplicity path.
- Making Security Fun - by Siren Hofvander; Security work has a reputation of being both difficult and time consuming, this presentation will prove that it is neither. We will begin på focusing on what security work actually involves and ending with some practical steps and tips to keep security work in all the work that you do. Siren Hofvander has a masters degree in information security and works as an application security expert at Verisure. In her daily work she is responsible for designing and with the help of various teams implement the companys security strategy. Albeit highly technical, a big part of her work is still focused on the "soft values" of software development, making people think security is fun, necessary and something you should invest time and energy into. On her spare time, Siren does volunteer IT-security work for non-profits and enjoys spending time with her family, friends and dogs.
- Git secrets - by Brent Beer; From pull request ref specs to patch mode, this session will examine some of the hidden features that can make git easier and more efficient to work with. For experienced git users only
- Functional Principles for Object-Oriented Developers - by Jessica Kerr; The artist travels to foreign lands for inspiration. I sojourned in F# and brought back souvenirs to share with you. These six principles are useful every day in my home language of Java. Some are part of good practice already, some express patterns both old and new, and all give us different ways of thinking about problems. Examples in C# and Java prove that we don't need to work in a functional language to carve our intentions into code. Each day we output some code and a new version of ourselves. The latter matters more, and melding a new paradigm embiggens both.
- Kicking the Complexity Habit - Dan North talks about ways we can rid our self from the habit of creating complexity we do not need.
- Software Architecture for Developers - by Simon Brown; The software development industry has made huge leaps in recent years; with agile, lean, software craftsmanship, evolutionary design and microservices being just a few of the buzzwords we throw around. Despite this, software development teams are often more chaotic than they are self-organising, with the resulting code being more of a mess than was perhaps anticipated. Successful software projects aren't just about good code though, and sometimes you need to step away from the IDE for a few moments to see the bigger picture. This session is about that bigger picture and is aimed at software developers who want to learn more about software architecture, technical leadership and the balance with agility.
- Implementing Programmer Anarchy - by Fred George; The Forward Internet Group in London implemented the original Programmer Anarchy process. Detractors point out that Anarchy would not work in a traditional organization with its established processes and roles. In the second implementation of Programmer Anarchy, the detractors seem to be wrong.
- Implementing MicroService Architectures - by Fred George; SOA, serviceoriented architectures, burst on the scene in the new millennium as the latest technology to support application growth. In concert with the Web, SOA ushered in new paradigms for structuring enterprise applications. At the Forward Internet Group in London, SOA was implemented in an unusual way. Rather than a few, businessrelated services being implemented per the original vision, we have developed systems made of myriads of very small, usually shortlived services. We have now moved to another company, MailOnline, the online version of the Daily Mail newspaper in the UK. And we are once again developing microservices.
- A Comment on how we learn - by Aino Vonge Corry; Aino Vonge Corry about her session "A Comment on how we learn": As an expert you will be asked to facilitate the learning of others, not to mention your personal eternal learning in your field. Join an interactive session about how our brains accept new knowledge and store it for later use. Your take-away will be three-fold; how to chunk information you give to others, how to improve your own learning AND something to entertain with at dull parties.
- Teaching TDD to Different Learning Styles - Tiffany Larson give some great advice on how to teach TDD, taking peoples different ways of thinking into account.
- Beyond Feature - Dan North makes the case for thinking differently about what we do, perhpas it's not so much about civil engineering, perhaps it's more about surgery.
Kotlin related stuff
- InfoQ article on Kotlin
- InfoQ talk on Kotlin
- Talk from InfoQ about useful ways to go from Java to Kotlin
- Best Practices for Unit Testing in Kotlin is a rather informative blog post on how to work with unit tests in Kotlin.
- MockK - mocking library for Kotlin.
Architectural Decision Records
- ADR - Architecture Decision Record - A pattern like format for capturing architecture decisions
- adr - a command line tool to work with ADRs - Create, update, supersede in a numbered manner. From Nat Pryce
- This software project uses ADRs so it's a small example: https://github.com/getgauge/gauge/wiki/ADR
- Documenting architecture decisions, the Reverb way - some more thoughts on ADRs
- Here is a compilation of some ADR formats
- Here is the GitHub organisation for ADRs (I.E. a community around the idea).
I18N -> L10N tooling
- Serge by Evernote - has more functionlalty but written in perl
- Mojito by Box - with litle functionlaity, build in Spring Boot for Java8
Some DDD stuff
- How to implement DDD models - article from InfoQ
- A high level introduction to DDD - from TechBeacon
- Another high level pitch, perhaps more for developers - from TechBeacon
- Yet another high level pitch, with a brief introduction to some of the patterns.
- Event Sourcing: What is is and why it's awesome - rather informative blog post on ES.
- Don't let the Internet Dupe you, Event Sourcing is Hard - explaining some of the pitfialls with Event Sourcing.
Some stuff on #noprojects and similar
Languages that would be interesting to know more about
HA and Zero Downtime
- Zero Downtime upgrade patterns - by Matthew Lucas
- Blue Green Deployment from Martin Fowlers bliki.
Java
- Amazon Corretto Seems to be a JDK8 with LTS, security and fixes included for free. Currently in preview, and have not reviewd the licence terms.
- AdoptOpenJDK
- Zing Azul's JDK
- OpenJDK Home
- A categorized list of all Java and JVM features since JDK 8
- pitest is a mutation testing framework, I.E. a tool that will change the production code under your feet to verify that your tests covers the code.
Systems Thinking
- Thinking in Systems, a primer is a very good introductory book on Systems Thinking by Donella H. Meadows.
- The System Thinker is a site set up to share knowledge about Systems Thinking. There is so much good stuff here you must not miss it!
- Guide for Drawing Causal Loop Diagrams from The System Thinker.
- From Event Thinking to Systems Thinking - how to understand and deal with reoccurring patterns. Uses a case study of continuous late launches to describe a better way to understand why and how to deal with it.
Patterns
Architecture
- Architectural Katas
- ArchUnit - unit testing tool for architecture, definitely worth a look.
- The Rule of Three - on reusable code (not really related to test actually)
- Pact - API Contract based testing, supported by Spring Cloud Contract and others. (It may be possible to use this output to create a WireMock server, seems likely but haven't checked)
- Building Evolutionary Architectures
Kata and Code Retreat resources
- Fitness Function Katas
- A collection of Legacy Code katas by Emily Bache
- Empty projects for different languages with failing tests - The basic setup needed for a code retreat or kode kata training session.
- Online code dojo
- Coffee Machine Project
- Katacombs game
- Train Reservation Kata
Software Craft and Apprenticeship
- 7 Ranks of Coderhood- One way to define levels of mastery in crafters.
Progression Frameworks/Engineering Ladders
- CapGemini UK's Engineering Grade Ladder
- Medium's Growth Ladder
- Squeakyvessel's collection of frameworks and ladders
- Monzo's progression frameowrk
Slightly more unorganised stuff of interest, but not strictly relating to software in any way
- Thwink.org - Finding and Resolving the Root Cause of the Sustainability Problem. Not quite sure what this is but needs to be looked at, seems interesting.
- Dao De Ching - several different translations of this book full of wisdom on most things in life.
- And naturally The Tao of Programming has to follow.