Books to improve as a software developer

In the past few weeks, a junior developer asked me for some advice about books. I created this list, and I believe they should be a must-read for everyone involved in the software world:

  • The Pragmatic Programmer: Your Journey to Mastery, 20th Anniversary Edition
  • Clean Architecture: A Craftsman’s Guide to Software Structure and Design
  • Clean Code: A Handbook of Agile Software Craftsmanship
  • The Software Craftsman: Professionalism, Pragmatism, Pride
  • Extreme Programming Explained: Embrace Change
  • Release It!: Design and Deploy Production-Ready Software
  • Fundamentals of Software Architecture: An Engineering Approach
  • Head First Design Patterns: A Brain-Friendly Guide: Building Extensible and Maintainable Object-Oriented Software
  • The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win
  • Refactoring: Improving the Design of Existing Code (Second Edition)

A bonus: Lean Customer Development: Building Products Your Customers Will Buy.

I suggest this last one because we need to understand our customers. We build software for others.

Code on demand with REST

Code on demand

In the paper Architectural Styles and the Design of Network-based Software Architectures by Roy Thomas Fielding, REST is defined. Today, when people think of REST, they often associate it with CRUD operations, more or less. However, one of the properties defined in the paper is ‘Code on Demand,’ where the client can request a script or binary from the server (similar to what happens when a browser requests JavaScript files to extend the behavior of a web page).

It’s nice, but it’s not exclusive to the web world. Take a look at this example in Qt:

import QtQuick
import QtQuick.Controls 2.5

Page {
    id: page
    Button {
        text: "load"
        anchors.bottom: parent.bottom
        anchors.horizontalCenter: parent.horizontalCenter
        onClicked: {
            loader.source = new URL("https://server/test.qml")
        }
    }

    Loader {
        id: loader
        anchors.verticalCenter: parent.verticalCenter
        anchors.horizontalCenter: parent.horizontalCenter
    }
}

When you click the button, we load:

import QtQuick
import QtQuick.Controls 2.5

Item {
    anchors.fill: parent

    Column {
        anchors.fill: parent
        TextField {
            width: dp(100)
            placeholderText: "Write here"
        }
        Button {
            text: "Ok"
            onClicked: {
            }
        }
    }
}

I think that the power of code on demand is sometimes underrated, yet we have the tools to leverage it. Please try to use it in a real case.

Job to be done

Reading the third capitol – Identify digital capabilities – of “Principle of WEB API Design” (https://www.amazon.com/Principles-Web-Design), i discovered the JTBD (Job to be done) It can be an alternative to the user story. This concept is formuled by C. Christensen (author of The Innovator’s dilemma). The job is about the desidered outcome and the job stories identify the jobs to be done for every product. If the user story has the form:

  • As a
  • I want
  • so that

the job story has the form:

  • When (the trigger event)
  • I want (the capability)
  • So can (the outcome)

For example:

  • When I find a product I want to buy
  • I want to add the product to my shopping cart
  • so I can include it in my order.

I like this approach; I feel it is more pragmatic than the user story.

You can find more information take a look to https://jtbd.info/ and download or buy the book from here https://jtbd.info/when-coffee-and-kale-compete-in-paperback-kindle-8d4c11a3d90f