The long way through Software Craftsmanship

Books read in 2018Q4

Dec 31, 2018 - 9 minute read - Comments - bookreading2018Q4self-studyreading-club

Read this quarter:

Note: re+read means I’m re-reading this book. The (+) stands for one-or-more times, as in the regexes.

  • Como ganar amigos e influir sobre las personas; Carnegie (+)
  • Oliver Twist; Dickens
  • Building evolutionary architecture; Ford, Parsons
  • Selfie: How We Became So Self-Obsessed and What It’s Doing To Us; Storr. Just chapter 1: The dying self
  • Sota la cistella; Gasol

Como ganar amigos e influir sobre las personas; Carnegie (+)

I’ve re-read this classic book (How to win friends and influence people), by Carnegie.

Explains a few tricks on communication and leadership, such as:

  • The most important name to somebody is their own

Oliver Twist; Dickens

I’ve read this classic novel by Dickens, to try to understand the character of Oliver Twist, his adventures and misadventures.

I was interested in grokking how it compares to ‘El Lazarillo de Tormes’, a previous Spanish novel.

Building evolutionary architecture; Ford, Parsons

I’ve read this book on software architecture. On how a previous definition of architecture (‘Architecture is what needs to be defined upfront and/or is difficult to change’) is no longer valid and we should strive to approach ‘evolutionary architecture’, where -ilities (features) of the system are easier to change, where architecture changes to accommodate business requirements and where systems are designed with -ilities (features) in mind.

Selfie: How We Became So Self-Obsessed and What It’s Doing To Us; Storr

I’ve just read the chapter 1: The dying self

I’ve read this chapter relating the perfectionism with suicide.

Explains many stories of attempted or committed suicides, giving some insight into them and trying to define a pattern

I got interested in it by reading this article: Improving Ourselves to Death (from newyorker.com)

Sota la cistella; Gasol

I’ve read this book by pau Gasol on his experiences playing basketball professionally, with regards to leadership, motivation, career management, etc

One takeaway is ‘the important thing is not to reach there, but to stay there’.

He explains part of his professional successes, and failures as well. How some failures allowed him to progress further in his career, how he reached levels that he only dreamed in the past, how important it is to have a goal and work towards it.

backlog (partially sorted):

  • unsorted V
  • The Machine That Changed the World: The Story of Lean Production
  • Haskell Programming
  • Software Architecture in Practice
  • The five disfunctions of a team: a leadership fable; Lencioni
  • lucha por la desigualdad, la; Pontón; non-technical
  • psicología del dinero, la; Hammond; non-technical
  • Invirtiendo a largo plazo; García Paramés; non-technical, finance
  • Well-Grounded Java Developer, the; own-it
  • Learn You a Haskell for Great Good!; own-it
  • camino al 18J, el; Payne; non-technical
  • Cartas desde la revolución bolchevique; Sadoul; non-technical
  • Java Performance: The Definitive Guide
  • Why programmers work at night
  • Shogun: The Life of Tokugawa Ieyasu; Sadler; non-technical
  • Scrum and XP from the trenches, 2nd edition;
  • Els jueus i Catalunya; Villatoro; non-technical
  • El problema de los tres cuerpos; Liu; non-technical
  • Amazon Web Services in Action; own-it
  • Clojure Programming - Practical Lisp for the Java World
  • Mature optimization
  • XUnit Test Patterns
  • Let Over Lambda
  • The Haskell Road to Logic, Math and Programming
  • Types and Programming Languages
  • Fundamentals of Object-oriented Design in UML
  • Clojure for the brave and true
  • How to Solve It: A New Aspect of Mathematical Method
  • Conceptual Mathematics: A First Introduction to Categories
  • Understanding Computation: From Simple Machines to Impossible Programs
  • Programming in Haskell
  • Programming Languages: Application and Interpretation
  • Doing Math with Python
  • Perfect Software: And Other Illusions about Testing
  • Computability and Complexity - From a Programming Perspective
  • Thinking Forth: a language and philosophy for solving problems
  • Concepts, Techniques, and Models of Computer Programming
  • Bridging the Communication Gap; Adzic
  • Specification by Example; Adzic
  • Cucumber book, the; Adzic
  • Software Architecture for Developers; Brown
  • Object Design: Roles, Responsibilities, and Collaborations
  • RESTful Web APIs
  • RESTful Web Services Cookbook
  • Building Maintainable Software
  • Serverless - Patterns of Modern Application Design Using Microservices (Amazon Web Services Edition)
  • A Pattern Language; Alexander
  • Types and Programming Languages, TAPL; Pierce; own-it
  • Speed Reading Book: Read More, Learn More, Achieve More, the; Buzan
  • Cómo crear mapas mentales (Crecimiento personal); Buzan
  • First things first; Covey
  • What’s best next; Perman
  • problems of philosophy, the; Russell
  • Requiem for the American dream; Chomsky
  • sun also rises, the; Hemingway
  • travels, the; Polo; non-technical
  • Homo Deus: A Brief History of Tomorrow; Harari; non-technical
  • Books by Aristotle; non-technical
  • Books by Plato; non-technical
  • Books by Descartes; non-technical
  • The idea of culture; Eagleton; non-technical
  • Hereditary Intelligence; Galton; non-technical
  • Lean Software Development: An Agile Toolkit; Poppendieck (+)
  • Chaos Monkeys: Obscene Fortune and Random Failure; Garcia Martinez
  • Implementing Lean Software Development: From Concept to Cash; Poppendieck
  • Joel on Software; Spolsky
  • Death March; Yourdon
  • Psychology of Computer Programming, The; Weinberg
  • Introduction to General Systems Thinking; Weinberg
  • Lao Tzu : Tao Te Ching : A Book About the Way and the Power of the Way; Tzu, Le Guin; non-technical
  • Gay Science, the; Nietzsche; non-technical
  • Being Geek; Lopp
  • Finance for Freelancers; Retallick; non-technical, finance
  • Object-oriented software engineering: a use case driven approach; Jacobson
  • Patterns of Enterprise Application Architecture; Fowler; own-it
  • Romeo y Julieta; Shakespeare; non-technical
  • Computer Systems: A Programmer’s Perspective; Bryant, O’Hallaron
  • My Journey to Lhasa: The Classic Story of the Only Western Woman Who Succeeded in Entering the Forbidden City; David-Néel; non-technical
  • Cathedral and the bazaar, the ; Raymond
  • Coding dojo handbook, the; Bache; own-it
  • Making software; Oram and Wilson; own-it
  • Code complete; McConnell; own-it
  • Soft skills; Sonmez; own-it
  • DSLs in action; Ghosh; own-it
  • Purely functional data structures; Okasaki; own-it
  • Working effectively with unit tests; Fields (+); own-it
  • First Nazi, the; Ludendorff; non-technical
  • Greatest story ever told … so far; Krauss; non-technical
  • Master algorithm, the; Domingos; non-technical
  • Invention of Science, the; Wootton; non-technical
  • Tesla: Inventor of the electrical age; Bernard Carlson; non-technical
  • Psychology in minutes; Weeks; non-technical
  • Alan Turing: The Enigma; Hodges; non-technical
  • How to think more about sex; de Botton; non-technical
  • Piccolo manuale di persuasione; Taylor; non-technical
  • arte de la guerra, el; Sun Tzu; non-technical, own-it
  • Piccolo manuale di leadership Confuciana; Adair; non-technical
  • How to Stop Worrying and Start Living; Carnegie; non-technical
  • Uomo - Guida allo stile; Roetzel; non-technical
  • Unwritten Laws of Engineering: Revised and Updated Edition; King
  • Test-Driven JavaScript Development (Developer’s Library); Johansen
  • Test Driven Development: By Example; Beck
  • Arquitectura Java JPA Domain Driven Design; Alvárez, Peláez
  • End of loyalty, the; Wartzman; non-technical
  • Basic Economics; Sowell; non-technical
  • Introduction to Economic Analysis; McAfee; non-technical
  • Patterns of Software; Gabriel
  • Coders at work; Seibel
  • Clean architecture; Martin
  • How to Be a Stoic: Using Ancient Philosophy to Live a Modern Life; Pigliucci; non-technical
  • Introduction to Object-Oriented Programming, an; Budd
  • Gafas de la felicidad, las; Santandreu; non-technical
  • Ser feliz en Alaska; Santandreu; own-it, non-technical
  • Mochila para el universo, una; Punset; non-technical
  • Gods themselves, the; Asimov; non-technical
  • Panamá papers, the; Obermayer, Obermaier; non-technical
  • Originals; Grant; non-technical
  • Optimism over despair; Chomsky; non-technical
  • SCIENCE OF BREATH: A Practical Guide; Ballentine, Hymes; non-technical
  • Yoga Explained: A New Step-by-step Approach to Understanding and Practising Yoga; Mehta,‎ Arjunwadkar; non-technical
  • Wanderlust: A Modern Yogi’s Guide to Discovering Your Best Self; Krasno; non-technical
  • How to Think About Money; Clements; non-technical, finance
  • By Way of Deception; Ostrovsky; non-technical
  • Printemps des sayanim, le; Cohen; own-it, non-technical
  • Deep work; Newport; non-technical, own-it
  • Hooked: How to Build Habit-Forming Products; Eyal, Hoover; non-technical
  • Irresistible: The Rise of Addictive Technology and the Business of Keeping Us Hooked; Alter; non-technical
  • The Attention Merchants: The Epic Scramble to Get Inside Our Heads; Wu; non-technical
  • Willpower: Why Self-Control is The Secret to Success; Baumeister, Tierney; non-technical
  • Principles of Psychology, the; James; own-it, non-technical
  • Our mutual friend; Dickens; non-technical
  • Crucial Conversations: Tools for Talking When Stakes Are High, Second Edition; Patterson, Grenny, McMillan, Switzler; non-technical
  • Amusing Ourselves to Death - Public Discourse in the Age of Show Business; Postman; non-technical
  • Mastery; Greene; non-technical, own-it
  • Silence in the age of noise; Kagge; non-technical
  • Functional programming simplified; Alexander; own-it
  • Your money or your life; Dominguez, Robin; non-technical, finance
  • Batalla del Ebro, la; Reverte; non-technical
  • Historia de la guerra civil española; Rojo; non-technical
  • Lucha por el poder, la; Evans; non-technical
  • Revolución rusa, la; Pipes; non-technical
  • Holocausto, el; Rees; non-technical
  • Martín Lutero, renegado y Profeta; Roper; non-technical
  • Siglo de la revolución, el ; Fontana; non-technical
  • Història de la revolución rusa; Trotsky; non-technical
  • Dispossessed, the; Le Guin; non-technical
  • Left hand of darkness; Le Guin; non-technical
  • Lathe of heaven; Le Guin; non-technical
  • https://www.amazon.com/Schopenhauer-Cure-Novel-Irvin-Yalom/dp/0060938102/
  • https://www.amazon.com/How-Schopenhauer-Through-Mid-Life-Crisis-ebook/dp/B00QXNB5PC/
  • Books in general – Epstein
  • Affluent society, the; Galbraith; non-technical, finance
  • Philosophy of the Buddha; Bahm; non-technical
  • Tribe of mentors; guillem, non-technical, own-it
  • 5 dysfunctions of a team; non-technical
  • Ziglar’s Top Performance; non-technical
  • Pragmatic Programmer (+)
  • High Output Management; Grove; non-technical
  • First Break All the Rules; non-technical, guillem
  • Managing for happiness; Appelo; non-technical
  • Meditations; Marcus Aurelius; non-technical, own-it
  • How to be a stoic - Pugliucci; non-technical
  • Why budism is true; Wright; non-technical
  • 7 hábitos de la gente altamente productiva
  • art of readable code; guillem
  • Domain modeling made functional; guillem
  • Sketchbook handbook; guillem, own-it
  • Agile samurai, the; guillem
  • Miracle of Mindfulness, the; Hanh; non-technical, own-it
  • No mud, no lotus: The Art of Transforming Suffering; Hahn; non-technical
  • Lean Architecture: for Agile Software Development; Coplien, Bjørnvig
  • Agile IT Organization Design: For Digital Transformation and Continuous Delivery; Sriram Narayan
  • Philosophy of Software Design, a; Ousterhout
  • Hope in the Dark; Solnit
  • Agile!: The Good, the Hype and the Ugly; Meyer

unfinished (unsorted):

  • Working Effectively with Legacy Code (+); Feathers; own-it
  • Nonviolent communication (+); Rosenberg; own-it, non-technical
  • Introduction to Buddhism: Teachings, History and Practices, an; Harvey; non-technical, own-it
  • Effective Java; Bloch; own-it
  • Functional Programming Patterns in Scala and Clojure; own-it
  • Release It! - Design and Deploy Production-Ready Software; own-it
  • Refactoring (+); Fowler; own-it
  • Leprechauns of Software Engineering (+), the; Bossavit; own-it
  • Domain-Driven Design: Tackling Complexity in the Heart of Software; Vernon (+); own-it
  • Pragmatic Thinking and Learning: Refactor Your Wetware; own-it
  • Readings in Database Systems, 5th Edition; own-it
  • Structure and Interpretation of Computer Programs (SICP); Abelson, Sussmann, Sussmann; own-it
  • La Sociedad De Coste Marginal Cero (Estado y Sociedad); Rifkin; non-technical
  • Odisea; Homero; non-technical
  • Switch: How to Change Things When Change Is Hard; Heath, Heath; own-it, non-technical
  • Como leer un libro; Adler, van Doren; non-technical, own-it

next (2):

  • Who rules the world?; Chomsky; non-technical
  • Mundo nuevo, ahora, un; Tolle; own-it, non-technical
  • Continuous Delivery; Humble, Farley; own-it
  • Hombre multiorgásmico, el; Chía, Arava; own-it, non-technical

wip (2):

  • Thinking fast and slow; Kahneman; non-technical
  • Java Concurrency in Practice (JCIP); Goetz
  • Hombre en busca del sentido, el; Frankl; own-it, non-technical

done:

  • Como ganar amigos e influir sobre las personas; Carnegie (+); own-it, guillem
  • Oliver Twist; Dickens; own-it, non-technical
  • Building evolutionary architecture; Ford, Parsons; own-it
  • Selfie: How We Became So Self-Obsessed and What It’s Doing To Us; Storr. Just chapter 1: The dying self; own-it, non-technical
  • Sota la cistella; Gasol; own-it, non-technical

rejected:

  • Stanger in a strange land; Heinlein; own-it, non-technical

Self-Study in December 2018

Dec 1, 2018 - 2 minute read - Comments - self-study-aggregationdecember2018botdigital-nomaddocumentationeliteetsyexperimentfelix-krausefyihow-docimmutable-documentationinfobotlifelongformmanagementmoneymotivationnomadremoterichslackslack-integrationthe-atlanticultrarichwealthwealth-managementwhat-doc

One year nomad - a review

Tags: nomad, felix-krause, digital-nomad, remote, life

Id: 7784a1da-fc82-11e8-a2cc-0242ac110002 Read: Mon, 10 Dec 2018 13:49:51 +0000

The Reason Many Ultrarich People Aren’t Satisfied With Their Wealth

How the rich are motivated to earn more money

really rich people are often motivated to acquire more money by the thrill that comes with multiplying one’s fortune by making investments, buying up businesses

Those two ways of putting money to use—as a way of covering expenses or as a way of building a bigger fortune—

Every billionaire I’ve spoken to, and I’ve spoken to quite a number of them, is extremely excited by each additional increment of money they make

Do I have enough to buy this expensive thing I want? but rather Do I have as much or more than these people I’m comparing myself with?

feeling wealthy is about comparison with others in your reference group. So the question is not what individuals want to buy, but what they feel they must buy in order to keep up their status

Tags: rich, wealth, the-atlantic, longform, management, wealth-management, motivation, elite, ultrarich, money

Id: e5650e1c-0081-11e9-a127-0242ac110002 Read: Sat, 15 Dec 2018 15:55:51 +0000

Etsy’s experiment with immutable documentation

Trading freshness for completeness in documentation

Tags: how-doc, what-doc, fyi, documentation, etsy, experiment, immutable-documentation, infobot, bot, slack, slack-integration

Id: 6ef4bf24-0082-11e9-a076-0242ac110002 Read: Sat, 15 Dec 2018 15:59:41 +0000

Books read in 2018Q3

Sep 30, 2018 - 1 minute read - Comments - bookreading2018Q3self-studycoduranceaprendicesreading-club

Read this quarter:

Note: re+read means I’m re-reading this book. The (+) stands for one-or-more times, as in the regexes.

  • Ética a Nicómaco; Aristóteles
  • Book of Transformation; Dalai Lama

Ética a Nicómaco; Aristóteles

I’ve read this book on philosophy and ethics. This book contains an analysis of the relationship between the personality, intelligence and happiness.

Tries to describe what ‘virtues’ are, that they belong in a continuum of acts, aand the good term is always in the middle. Example: between cowardliness and temerity, there is braveness. The two extremes, and the middle or virtue, respectively.

This book describes the meaning of life, according to Aristotle; how to lead your life, as well.

Note: this book was a gift from some friends. To people from Payments, thank you so much

Book of transformation; Dalai Lama

I’ve read this book based on teaching from the Dalai Lama, on the importance of love, compassion, balanced attitudes, and positive thinking.

Contains the eight verses on transforming the mind, a lo-jong text, written in the 11th century by Langri Thangpa.

Contains four parts:

  • The basis of transformation
  • Transforming though altruism
  • Transformation through insight
  • The eight verses of transforming the mind

Self-Study in July 2018

Jul 1, 2018 - 3 minute read - Comments - self-study-aggregationjuly2018analogyawsbarbonilistaburn-outburnoutcareercareer-managementchesterton-fenceclientcloud-scalecollaboratorconsultingcontractordatabasedavid-bonilladeliverydependencydevelopmentdiscoverydummyexactly-once-deliveryfacebookfixgerard-meszarosgogolanggoosgrowing-object-oriented-softwarehacker-newshaskellhealthhistoryhypekafkakeith-leeksuidlearninglewis-menelawslisticlelucas-di-ciocciomanagementmessagemessage-deliverymockmonadnotificationoaooonboardingonce-and-only-oncepartpeoplepolicyprocessproductive-haskell-barproductivityproject-managementpsychologypyramidrelationshiprick-bransonrocksdbsabbaticalsegmentslack-timesteve-freemanstubtest-doubletime-managementtiptooltopicuuidvertical-slicexunitxunit-patternxunitpatterns

The Haskell Pyramid

I’ve read this article on how the productivity for Haskell is achieved: not using the topics discussed on social networks (monads, functors, laws, lenses, etc) but using more basic tools

Tags: haskell, productivity, lucas-di-cioccio, learning, development, tool, monad, hype, pyramid, productive-haskell-bar, bar

Id: 454f53fc-7dd6-11e8-8208-0242ac110003 Read: Mon, 02 Jul 2018 08:59:47 +0000

El verde más verde

I’ve read this article on how to structure creative projects (e.g., UX, programming) by professionals, as told by David Bonilla.

Tags: david-bonilla, bonilista, project-management, slack-time, sabbatical, vertical-slice

Id: ef00176e-7ddc-11e8-a33b-0242ac110003 Read: Mon, 02 Jul 2018 09:47:29 +0000

How to Fix Burnout as a Developer

I’ve read this article on burnout and how to fix it: Stop working so much. Prioritize your health. Try something new. Patience is key. Talk to your loved ones.

Tags: lewis-menelaws, burnout, burn-out, productivity, listicle, career, psychology, management, time-management, career-management, health

Id: 40d68542-7dff-11e8-89f2-0242ac110003 Read: Mon, 02 Jul 2018 13:53:09 +0000

Ask HN: What is the first thing you implement at a new company?

I’ve read this article on the first things that people do when joining a new client. Mentions the Chesterton’s fence: You don’t want to change something until you understand why it’s there in the first place.

Tags: chesterton-fence, hacker-news, contractor, client, onboarding, fix

Id: 9003a91a-7dff-11e8-a366-0242ac110003 Read: Mon, 02 Jul 2018 13:55:22 +0000

The Fallacy Of Chesterton’s Fence

I’ve read this article on the Chesterton’s fence.

don’t ever take a fence down until you know the reason why it was put up

The author explains that the walls (or contracts, or clauses, or practices) were put in place to cover for a specific need. Do not assume that this need does not exist now, before understanding what the need was in the first place.

Tags: chesterton-fence, keith-lee, consulting, tip, analogy, discovery, process, people

Id: 736e269e-7e00-11e8-ac4a-0242ac110003 Read: Mon, 02 Jul 2018 14:01:43 +0000

A brief history of the UUID

A brief history of UUID: of how it was developed, why, and a new library in go called ksuid Explains the origins of networked computers (as opposed to personal computers without any networking) in the 1980s. Also explains the origins of the UUID, some algorithms for generating them.

Tags: ksuid, uuid, golang, go, rick-branson, history

Id: c20e6ac4-8fe5-11e8-b54e-0242ac110003 Read: Wed, 25 Jul 2018 08:36:00 +0000

Delivering billions of messages exactly once

Explains how this company (segment) has solved the problem of delivering the messages once and only once (OAOO), using RocksDB, Kafka, UUIDs. Deployed to AWS, lowers the cost of the previous system (memcached-based). Impressive numbers: 1.5 TB worth of keys stored on disk in RocksDB a 4-week window of de-duplication before aging out old keys approximately 60B keys stored inside our RocksDB instances 200B messages passed through the dedupe system Also explains in depth how RocksDB works

Tags: rocksdb, facebook, database, once-and-only-once, oaoo, message, exactly-once-delivery, delivery, message-delivery, kafka, uuid, client, aws, segment, topic, cloud-scale

Id: 962c0c26-8fe6-11e8-bf2c-0242ac110003 Read: Wed, 25 Jul 2018 08:41:55 +0000

Object Collaboration Stereotypes

This post describes the relationships between two objects: Dependencies are services that the object needs from its environment so that it can fulfil its responsibilities. Notifications are other parts of the system that need to know when the object changes state or performs an action. Policies are objects that tweak or adapt the object’s behaviour to the needs of the system. Parts are components in the implementation that are not controlled from outside the object after being set.

Tags: dependency, notification, policy, part, collaborator, relationship, steve-freeman, goos, growing-object-oriented-software

Id: f7e738c8-8fe6-11e8-89be-0242ac110003 Read: Wed, 25 Jul 2018 08:44:39 +0000

Mocks, Fakes, Stubs and Dummies

Bibliography for mocks, stubs, fakes, dummies, spies.

Tags: mock, stub, test-double, dummy, xunit, xunit-pattern, gerard-meszaros, xunitpatterns

Id: ea7281ee-9012-11e8-bd95-0242ac110003 Read: Wed, 25 Jul 2018 13:59:15 +0000

Books read in 2018Q2

Jun 30, 2018 - 11 minute read - Comments - bookreading2018Q2self-studycoduranceaprendicesreading-club

Read this quarter:

Note: re+read means I’m re-reading this book. The (+) stands for one-or-more times, as in the regexes.

  • Quien se ha llevado mi queso; Johnson; own-it, guillem
  • One minute manager, the; Blanchard; own-it, non-technical, guillem
  • En defensa de los ociosos; Stevenson; non-technical, own-it
  • Ladybird Book of Mindfulness, the (Ladybirds for Grown-Ups); Hazeley, Morris; non-technical
  • Art of the start, the; Kawasaki; own-it, non-technical, guillem
  • Getting started with NoFap; non-technical
  • Emotional intelligence; Goleman; non-technical

Quien se ha llevado mi queso

I’ve read this fable explaining the little story of two mice and two lilliputians that end up without any cheese. The story is about how they react to the lack of cheese, how they were used to finding cheese, fighting for it.

The morale of the story is about change and how to deal with change.

More about it here: https://business-book-summary.blogspot.com.es/2008/10/who-moved-my-cheese.html

Wisdom in a Nutshell from Who Moved My Cheese?

  • Anticipate change.
  • Adapt quickly.
  • Enjoy change.
  • Be ready to change quickly, again and again.
  • Having Cheese makes you happy.
  • The more important your Cheese is to you, the more you want to hold on to it.
  • If you do not change, you can become extinct.
  • Ask yourself “What would I do if I weren’t afraid?”
  • Smell the Cheese often so you know when it is getting old.
  • Movement in a new direction helps you find New Cheese.
  • When you move beyond your fear, you feel free.
  • Imagining myself enjoying New Cheese, even before I find it, leads me to it.
  • The quicker you let go of old cheese, the sooner you find New Cheese.
  • It is safer to search in the maze than remain in a cheeseless situation.
  • Old beliefs do not lead you to New Cheese.
  • When you see that you can find and enjoy New Cheese, you change course.
  • Noticing small changes early helps you adapt to the bigger changes that are to come.
  • Read the Handwriting on the Wall
  • Change happens. They keep moving the Cheese.
  • Move with the Cheese and enjoy it!

One-minute manager

I’ve read this book on management, the story of a young man looking for guidance in the one-minute manager.

The gist of it is RPG: Reprimand, Praise, Goal (Setting). All of that done in one-minute increments.

In case the goal setting does not happen by your manager, it’s your task to ask for it, so you can achieve your goals, rather than try to guess what your line manager is expecting from you.

The praising is an easy, cheap, straightforward way to encourage employees to keep doing what they’re doing.

The reprimand is the way of delivering feedback that can help change the employee behaviour.

Ladybird Book of Mindfulness, the (Ladybirds for Grown-Ups)

I’ve read this collection of (sarcastic) reflections about mindfulness, illustrated with classic British images.

En defensa de los ociosos - An apology for idlers

I’ve read this book, containing three main essays plus some experiences.

The first, defending the idlers of society, explaining the benefits of doing nothing but enjoying life.

The second, exposing true love, the effects on people.

Getting started with NoFap

I’ve read this book about the dangers of abusing PMO (porn, masturbation, orgasm), the downsides, how to fix it (reboot), what effects said reboot can have in your mind and body.

Inteligencia emocional - Emotional intelligence

I’ve read this book by goleman on the topics that are included in the emotional intelligence.

Why it is so important to develop this kind of intelligence and how it compares to other kinds.

Export of the database:

backlog (partially sorted):

  • unsorted V
  • The Machine That Changed the World: The Story of Lean Production
  • Haskell Programming
  • Software Architecture in Practice
  • The five disfunctions of a team: a leadership fable; Lencioni
  • lucha por la desigualdad, la; Pontón; non-technical
  • psicología del dinero, la; Hammond; non-technical
  • Invirtiendo a largo plazo; García Paramés; non-technical, finance
  • Well-Grounded Java Developer, the; own-it
  • Learn You a Haskell for Great Good!; own-it
  • camino al 18J, el; Payne; non-technical
  • Cartas desde la revolución bolchevique; Sadoul; non-technical
  • Java Performance: The Definitive Guide
  • Why programmers work at night
  • Shogun: The Life of Tokugawa Ieyasu; Sadler; non-technical
  • Scrum and XP from the trenches, 2nd edition;
  • Els jueus i Catalunya; Villatoro; non-technical
  • El problema de los tres cuerpos; Liu; non-technical
  • Amazon Web Services in Action; own-it
  • Clojure Programming - Practical Lisp for the Java World
  • Mature optimization
  • XUnit Test Patterns
  • Let Over Lambda
  • The Haskell Road to Logic, Math and Programming
  • Types and Programming Languages
  • Fundamentals of Object-oriented Design in UML
  • Clojure for the brave and true
  • How to Solve It: A New Aspect of Mathematical Method
  • Conceptual Mathematics: A First Introduction to Categories
  • Understanding Computation: From Simple Machines to Impossible Programs
  • Programming in Haskell
  • Programming Languages: Application and Interpretation
  • Doing Math with Python
  • Perfect Software: And Other Illusions about Testing
  • Computability and Complexity - From a Programming Perspective
  • Thinking Forth: a language and philosophy for solving problems
  • Concepts, Techniques, and Models of Computer Programming
  • Bridging the Communication Gap; Adzic
  • Specification by Example; Adzic
  • Cucumber book, the; Adzic
  • Software Architecture for Developers; Brown
  • Object Design: Roles, Responsibilities, and Collaborations
  • RESTful Web APIs
  • RESTful Web Services Cookbook
  • Building Maintainable Software
  • Serverless - Patterns of Modern Application Design Using Microservices (Amazon Web Services Edition)
  • A Pattern Language; Alexander
  • Types and Programming Languages, TAPL; Pierce; own-it
  • Speed Reading Book: Read More, Learn More, Achieve More, the; Buzan
  • Cómo crear mapas mentales (Crecimiento personal); Buzan
  • First things first; Covey
  • What’s best next; Perman
  • problems of philosophy, the; Russell
  • Requiem for the American dream; Chomsky
  • sun also rises, the; Hemingway
  • travels, the; Polo; non-technical
  • Homo Deus: A Brief History of Tomorrow; Harari; non-technical
  • Books by Aristotle; non-technical
  • Books by Plato; non-technical
  • Books by Descartes; non-technical
  • The idea of culture; Eagleton; non-technical
  • Hereditary Intelligence; Galton; non-technical
  • Lean Software Development: An Agile Toolkit; Poppendieck (+)
  • Chaos Monkeys: Obscene Fortune and Random Failure; Garcia Martinez
  • Implementing Lean Software Development: From Concept to Cash; Poppendieck
  • Joel on Software; Spolsky
  • Death March; Yourdon
  • Psychology of Computer Programming, The; Weinberg
  • Introduction to General Systems Thinking; Weinberg
  • Lao Tzu : Tao Te Ching : A Book About the Way and the Power of the Way; Tzu, Le Guin; non-technical
  • Gay Science, the; Nietzsche; non-technical
  • Being Geek; Lopp
  • Finance for Freelancers; Retallick; non-technical, finance
  • Object-oriented software engineering: a use case driven approach; Jacobson
  • Patterns of Enterprise Application Architecture; Fowler; own-it
  • Thinking fast and slow; Kahneman; non-technical
  • Romeo y Julieta; Shakespeare; non-technical
  • Computer Systems: A Programmer’s Perspective; Bryant, O’Hallaron
  • My Journey to Lhasa: The Classic Story of the Only Western Woman Who Succeeded in Entering the Forbidden City; David-Néel; non-technical
  • Cathedral and the bazaar, the ; Raymond
  • Coding dojo handbook, the; Bache; own-it
  • Making software; Oram and Wilson; own-it
  • Code complete; McConnell; own-it
  • Soft skills; Sonmez; own-it
  • DSLs in action; Ghosh; own-it
  • Purely functional data structures; Okasaki; own-it
  • Working effectively with unit tests; Fields (+); own-it
  • First Nazi, the; Ludendorff; non-technical
  • Greatest story ever told … so far; Krauss; non-technical
  • Master algorithm, the; Domingos; non-technical
  • Invention of Science, the; Wootton; non-technical
  • Tesla: Inventor of the electrical age; Bernard Carlson; non-technical
  • Psychology in minutes; Weeks; non-technical
  • Alan Turing: The Enigma; Hodges; non-technical
  • How to think more about sex; de Botton; non-technical
  • Piccolo manuale di persuasione; Taylor; non-technical
  • arte de la guerra, el; Sun Tzu; non-technical, own-it
  • Piccolo manuale di leadership Confuciana; Adair; non-technical
  • How to Stop Worrying and Start Living; Carnegie; non-technical
  • Uomo - Guida allo stile; Roetzel; non-technical
  • Unwritten Laws of Engineering: Revised and Updated Edition; King
  • Test-Driven JavaScript Development (Developer’s Library); Johansen
  • Test Driven Development: By Example; Beck
  • Arquitectura Java JPA Domain Driven Design; Alvárez, Peláez
  • End of loyalty, the; Wartzman; non-technical
  • Basic Economics; Sowell; non-technical
  • Introduction to Economic Analysis; McAfee; non-technical
  • Patterns of Software; Gabriel
  • Coders at work; Seibel
  • Clean architecture; Martin
  • How to Be a Stoic: Using Ancient Philosophy to Live a Modern Life; Pigliucci; non-technical
  • Introduction to Object-Oriented Programming, an; Budd
  • Gafas de la felicidad, las; Santandreu; non-technical
  • Ser feliz en Alaska; Santandreu; own-it, non-technical
  • Mochila para el universo, una; Punset; non-technical
  • Gods themselves, the; Asimov; non-technical
  • Panamá papers, the; Obermayer, Obermaier; non-technical
  • Originals; Grant; non-technical
  • Optimism over despair; Chomsky; non-technical
  • SCIENCE OF BREATH: A Practical Guide; Ballentine, Hymes; non-technical
  • Yoga Explained: A New Step-by-step Approach to Understanding and Practising Yoga; Mehta,‎ Arjunwadkar; non-technical
  • Wanderlust: A Modern Yogi’s Guide to Discovering Your Best Self; Krasno; non-technical
  • How to Think About Money; Clements; non-technical, finance
  • By Way of Deception; Ostrovsky; non-technical
  • Printemps des sayanim, le; Cohen; own-it, non-technical
  • Deep work; Newport; non-technical, own-it
  • Hooked: How to Build Habit-Forming Products; Eyal, Hoover; non-technical
  • Irresistible: The Rise of Addictive Technology and the Business of Keeping Us Hooked; Alter; non-technical
  • The Attention Merchants: The Epic Scramble to Get Inside Our Heads; Wu; non-technical
  • Willpower: Why Self-Control is The Secret to Success; Baumeister, Tierney; non-technical
  • Principles of Psychology, the; James; own-it, non-technical
  • Our mutual friend; Dickens; non-technical
  • Crucial Conversations: Tools for Talking When Stakes Are High, Second Edition; Patterson, Grenny, McMillan, Switzler; non-technical
  • Amusing Ourselves to Death - Public Discourse in the Age of Show Business; Postman; non-technical
  • Mastery; Greene; non-technical, own-it
  • Silence in the age of noise; Kagge; non-technical
  • Functional programming simplified; Alexander; own-it
  • Your money or your life; Dominguez, Robin; non-technical, finance
  • Batalla del Ebro, la; Reverte; non-technical
  • Historia de la guerra civil española; Rojo; non-technical
  • Lucha por el poder, la; Evans; non-technical
  • Revolución rusa, la; Pipes; non-technical
  • Holocausto, el; Rees; non-technical
  • Martín Lutero, renegado y Profeta; Roper; non-technical
  • Siglo de la revolución, el ; Fontana; non-technical
  • Història de la revolución rusa; Trotsky; non-technical
  • Dispossessed, the; Le Guin; non-technical
  • Left hand of darkness; Le Guin; non-technical
  • Lathe of heaven; Le Guin; non-technical
  • https://www.amazon.com/Schopenhauer-Cure-Novel-Irvin-Yalom/dp/0060938102/
  • https://www.amazon.com/How-Schopenhauer-Through-Mid-Life-Crisis-ebook/dp/B00QXNB5PC/
  • Books in general – Epstein
  • Affluent society, the; Galbraith; non-technical, finance
  • Philosophy of the Buddha; Bahm; non-technical
  • Tribe of mentors; guillem, non-technical, own-it
  • 5 dysfunctions of a team; non-technical
  • Ziglar’s Top Performance; non-technical
  • Pragmatic Programmer (+)
  • High Output Management; Grove; non-technical
  • First Break All the Rules; non-technical, guillem
  • Managing for happiness; Appelo; non-technical
  • How to be a stoic - Pugliucci; non-technical
  • Why budism is true; Wright; non-technical
  • 7 hábitos de la gente altamente productiva
  • Como ganar amigos e influir sobre las personas; Carnegie (+); own-it, guillem
  • art of readable code; guillem
  • Domain modeling made functional; guillem
  • Sketchbook handbook; guillem, own-it
  • Agile samurai, the; guillem
  • Miracle of Mindfulness, the; Hanh; non-technical, own-it
  • No mud, no lotus: The Art of Transforming Suffering; Hahn; non-technical
  • Lean Architecture: for Agile Software Development; Coplien, Bjørnvig
  • Agile IT Organization Design: For Digital Transformation and Continuous Delivery; Sriram Narayan

unfinished (unsorted):

  • Effective Java; Bloch; own-it
  • Functional Programming Patterns in Scala and Clojure; own-it
  • Release It! - Design and Deploy Production-Ready Software; own-it
  • Refactoring (+); Fowler; own-it
  • Leprechauns of Software Engineering (+), the; Bossavit; own-it
  • Domain-Driven Design: Tackling Complexity in the Heart of Software; Vernon (+); own-it
  • Pragmatic Thinking and Learning: Refactor Your Wetware; own-it
  • Readings in Database Systems, 5th Edition; own-it
  • Structure and Interpretation of Computer Programs (SICP); Abelson, Sussmann, Sussmann; own-it
  • La Sociedad De Coste Marginal Cero (Estado y Sociedad); Rifkin; non-technical
  • Odisea; Homero; non-technical
  • Switch: How to Change Things When Change Is Hard; Heath, Heath; own-it, non-technical
  • Como leer un libro; Adler, van Doren; non-technical, own-it

next (2):

  • Who rules the world?; Chomsky; non-technical
  • Working Effectively with Legacy Code (+); Feathers; own-it
  • Nonviolent communication (+); Rosenberg; own-it, non-technical
  • Introduction to Buddhism: Teachings, History and Practices, an; Harvey; non-technical, own-it
  • Meditations; Marcus Aurelius; non-technical, own-it

wip (2):

  • Continuous Delivery; Humble, Farley; own-it
  • Ética a Nicómaco; Aristotle; own-it, non-technical

done:

  • Prince, the; Macchiavello; non-technical, own-it
  • Nuevo kama-sutra ilustrado, el; Gallotti; non-technical
  • Senior software developer, the; Copeland; own-it
  • Scandal in Bohemia, a; Doyle; own-it
  • Getting things done, …; Allen (+); own-it, non-technical
  • Nature of Software Development, the; Jeffries; own-it
  • Team Geek; Fitzpatrick, Collins-Sussman; own-it
  • Aprendo Yoga; Van Lysebeth; non-technical, own-it
  • Clean Coder: A Code of Conduct for Professional Programmers, the; Martin; own-it
  • ML for the working programmer, 2nd edition [5th chapter only]; Paulson; own-it
  • Lazarillo de Tormes, el; anónimo; non-technical
  • Tom Clancy’s power plays - Politika; Preisler; own-it, non-technical
  • Moon is a harsh mistress, the; Heinlein; own-it, non-technical
  • Old man’s war; Scalzi; non-technical, own-it
  • Nightfall; Asimov, Silverberg; own-it, non-technical
  • Interface; Stephenson, George; non-technical, own-it
  • Man who sold the moon, the; Heinlein; own-it, non-technical
  • Agents of innocence; Ignatius; own-it, non-technical
  • Fist of god, the; Forsyth; own-it, non-technical
  • Avaro, el; Molière; own-it, non-technical
  • Bogleheads’ Guide to Investing, the; Larimore, Lindauer, LeBoeuf; own-it, non-technical, finance
  • Lazyperson’s guide to investment; Farrell; own-it, non-technical, finance
  • Millionaire next door, the; Stanley, Danko; own-it, non-technical, finance
  • Little Book of Common Sense Investing; Bogle; own-it, non-technical, finance
  • Monje que vendió su Ferrari, el; Sharma; own-it, non-technical
  • Siddhartha; Hesse; non-technical, own-it
  • If you can: how millenials can get rich slowly; Bernstein; own-it, non-technical, finance
  • Odessa; Forsyth; non-technical, own-it
  • Bogle on mutual funds: new perspectives for the intelligent investor; Bogle; own-it, non-technical, finance
  • Perros de la guerra, los; Forsyth; own-it, non-technical
  • avaro y el oro, el; Esopo; non-technical
  • Aulularia; Plauto; own-it, non-technical
  • Tus zonas erróneas; Dyer; non-technical, own-it
  • Alternativa del Diablo, la; Forsyth; own-it, non-technical
  • Guía, el; Forsyth; own-it, non-technical
  • Pied piper; Forsyth; own-it, non-technical
  • Hunt for the Red October, the; Clancy; own-it, non-technical
  • Peopleware; DeMarco, Lister (+); own-it
  • Time to kill, a; Grisham; own-it, non-technical
  • Ética promiscua; Easton, Hardy; own-it, non-technical
  • Checklist manifesto, the; Gawande; own-it, non-technical, guillem
  • Team geek (+); guillem, own-it
  • Kata de la voluntad; guillem, non-technical
  • Phoenix project, the ; Kim, Behr, Spafford; own-it
  • Obstacle is the way, the; guillem, non-technical
  • Guide to stoicism, a; Stock; own-it, non-technical
  • Quien se ha llevado mi queso; Johnson; own-it, guillem
  • One minute manager, the; Blanchard; own-it, non-technical, guillem
  • En defensa de los ociosos; Stevenson; non-technical, own-it
  • Ladybird Book of Mindfulness, the (Ladybirds for Grown-Ups); Hazeley, Morris; non-technical
  • Art of the start, the; Kawasaki; own-it, non-technical, guillem
  • Getting started with NoFap; non-technical
  • Emotional intelligence; Goleman; non-technical

rejected:

  • Stanger in a strange land; Heinlein; own-it, non-technical

lists:

Testing a component that includes randomness

Jun 15, 2018 - 6 minute read - Comments - testingrandomnesstddjavacodesnippet

Context

We have been tasked with designing a component to generate secrets for two-factor authentication (2FA), to ensure that the you also own that other ‘channel’.

It has to be secure enough to pass to verify a user, meaning no other user should be able to impersonating another one by guessing the secret.

Solution

A first solution that he have implemented is to provide a 6-digit pin code.

The solution (in java) is straightforward: get a Random to generate ints for you.

public class PinCodeFactory {
    private Random secureRandom = new SecureRandom();

    public PinCode aNewPinCode () {
        return new PinCode(secureRandom.nextInt(1_000_000));
    }
}

public class PinCode {
    public final String value;

    public PinCode (final String value) {
        this.value = value;
    }
}

Note: this is not the final solution; it does not include package, imports; might not even compile. Take it as pseudo-code.

Now that we this “obvious implementation” in mind, how can we test drive it?

Let’s start with the requirements:

  • the numbers are always six digits
  • they should be pseudo-random

We can test the first by taking one of them and verifying that it has six digits.

First requirement: type of pin code

The problem with that is that the SecureRandom gives random data. Now, the test will be passing, but later in the future, the build will break as this implementation has (some) defects. If you keep generating pin codes, you will get one as “123”, as per the definition of the nextInt method.

Easy. You add a base amount to always make it in the six digits. But, are you affecting the distribution of the pseudo-random generator? At this time, I’m not even sure. Don’t make me think too much. To make it easier, let’s pad the numbers with zeros on the left:

@Test
public void the_numbers_are_left_padded_with_zeros () {
    verifyEachOf(pinCodes(100), pincode -> assertThat(pincode.length(), is(6)));
}

@Test
public void the_numbers_do_not_contain_spaces () {
    verifyEachOf(pinCodes(100), pincode -> assertThat(pincode.contains(" "), is(false)));
}

Now that these tests are failing, I can focus on finding a simple implementation that satisfies them.

A passing solution:

package com.example;

import com.example.Pincode;

import java.net.URI;
import java.security.SecureRandom;
import java.util.Random;

public class PinCodeFactory {
    private Random secureRandom = new SecureRandom();

    public PinCode aNewPinCode () {
        return new PinCode(String.format("%06d", random.nextInt(1_000_000)));
    }
}

But, if you execute these tests long enough, they will fail. Because of the underlaying randomness of the code. We don’t want to modify the design of this class, as we started with “wishful programming” (reference, reference), specifying the desired public API, to later fill the implementation details.

A possible solution to this randomness is to consider the random a ‘setting’ aka policy that I can later override. But only for the test. We don’t want to make the API more complicated, so we will offer a protected method for ‘friends’ to use, but not for everyone:

package com.example;

import com.example.Pincode;

import java.net.URI;
import java.security.SecureRandom;
import java.util.Random;

public class PinCodeFactory {

    private Random random;

    public PinCodeFactory () {
        random = new SecureRandom();
    }

    public PinCode aNewPinCode () {
        final String payload = String.format("%06d", random.nextInt(1_000_000));
        final PinCode pinCode = new PinCode(payload);
        return pinCode;
    }

    protected void setGenerator (final Random generator) {
        this.random = generator;
    }
}

(Note: this is the final version)

(Note: in java, the SecureRandom implements the same API as Random –in fact it is a child class– so we prefer accepting the parent class.)

In this way, the test can always set the random seed to a fixed value. Therefore, the numbers will be stable and the behavior is no longer random, but controlled.

This is just one way how you can test components that have randomness: eliminating it without affecting the public API.

Second requirement: the pin codes don’t repeat

Even if this requirement cannot be met with enough requests (because with enough requests, you will repeat a six-digit code), finding no repeated codes in 100 consecutive pin codes is enough. The user has to input the exact code they received, so the chance of repetition is quite low.

@Test
public void there_are_no_repeated_with_the_given_seed () {
    final int desiredProofSize = 100;
    verifyAll(pinCodes(desiredProofSize), pinCodes -> assertThat(pinCodes.size(), is(desiredProofSize)));
}

This test is passing from the beginning with the fixed seed 1L. But, if you enlarge the desiredProofSize to 1000, it does not pass anymore.

A note about process

We did not get much value of test-driving (TDD) this code, as the knew the desired API from the beginning, we had a clear implementation in mind and only a few cases left to iron out. Just test-first was enough in this case.

Conclusion

One way how you can test components that have randomness: eliminating it.

Do not use TDD (or any other tool) as an end in itself. Use it as a tool.

Appendix

All code can be found here

As a local copy:

//File PinCode.java
package com.example;

import java.util.Objects;

public class PinCode {
    public final String value;

    public PinCode (final String value) {
        this.value = value;
    }

    @Override
    public boolean equals (final Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        final PinCode pinCode = (PinCode) o;
        return Objects.equals(value, pinCode.value);
    }

    @Override
    public int hashCode () {
        return Objects.hash(value);
    }

    @Override
    public String toString () {
        final StringBuffer sb = new StringBuffer("PinCode{");
        sb.append("value='").append(value).append('\'');
        sb.append('}');
        return sb.toString();
    }
}
//File PinCodeFactory.java
package com.example;

import com.example.Pincode;

import java.net.URI;
import java.security.SecureRandom;
import java.util.Random;

public class PinCodeFactory {

    private Random random;

    public PinCodeFactory () {
        random = new SecureRandom();
    }

    public PinCode aNewPinCode () {
        final String payload = String.format("%06d", random.nextInt(1_000_000));
        final PinCode pinCode = new PinCode(payload);
        return pinCode;
    }

    protected void setGenerator (final Random generator) {
        this.random = generator;
    }
}
//File PinCodeFactoryTest.java
package com.example;

import org.junit.Before;
import org.junit.Test;

import java.util.Collection;
import java.util.HashSet;
import java.util.Random;
import java.util.function.Consumer;

import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;

public class PinCodeFactoryTest {

    private PinCodeFactory pinCodeFactory;

    @Before
    public void setUp () {
        pinCodeFactory = new PinCodeFactory();
        pinCodeFactory.setGenerator(new Random(1L));
    }

    @Test
    public void there_are_no_repeated_with_the_given_seed () {
        final int desiredProofSize = 100;
        verifyAll(pinCodes(desiredProofSize), pinCodes -> assertThat(pinCodes.size(), is(desiredProofSize)));
    }

    @Test
    public void the_numbers_are_left_padded_with_zeros () {
        verifyEachOf(pinCodes(100), pincode -> assertThat(pincode.length(), is(6)));
    }

    @Test
    public void the_numbers_do_not_contain_spaces () {
        verifyEachOf(pinCodes(100), pincode -> assertThat(pincode.contains(" "), is(false)));
    }

    public void verifyEachOf (final Collection<String> pincodes, final Consumer<String> assertion) {
        for (final String pincode : pincodes) {
            assertion.accept(pincode);
        }
    }

    public void verifyAll (final Collection<String> pincodes, final Consumer<Collection<String>> assertion) {
        assertion.accept(pincodes);
    }


    private Set<String> pinCodes (final int desiredProofSize) {
        return Stream.generate(() -> pinCodeFactory.aNewPinCode().value)
                .limit(desiredProofSize)
                .collect(Collectors.toSet());
    }
}