The long way through Software Craftsmanship

The role of a software consultant

Jun 10, 2016 - 1 minute read - Comments - bookquotereinventing-organizationsfrederic-lalouxteal-organizationconsultant

A quote from Reinventing Organizations, about roles, job descriptions and job titles in Chapter 2.2: Self-management (structures), page 90:

[In] Teal Organizations […] people are not made to fit pre-defined jobs; their job emerge from a multitude of roles and responsibilities they pick up based on their interests, talents, and the needs of the organization.

  • Frederic Laloux, Reinventing Organizations

In my opinion, this is the role of the software consultant when working with a client: even if the customer has asked for help in some parts of their activity, a senior-enough consultant can discover other areas where they can add value, even if that new work doesn’t have much in common with the initial request (this change should be approved by the people that will be affected).

This is also a thought that Mash and Sandro were discussing lately.

Unwritten principles for coaching, a quote

Jun 10, 2016 - 1 minute read - Comments - bookquotereinventing-organizationsfrederic-laloux

A quote from Reinventing Organizations, about a few unwritten principles for coaching, in Chapter 2.2: Self-management (structures), page 70:

  • It’s okay for teams to struggle. From struggle comes learning. And teams that have gone through difficult moments build resilience and a deep sense of community. The coach’s role therefore is not to prevent foreseeable problems, but to support teams in solving them (and later help them reflect on how they’ve grown in the process).
  • The coach’s role is to let teams make their own choices, even if she believes she knows a better solution.
  • The coach supports the team mostly by asking insightful questions and mirroring what she sees. She helps teams frame issues and solutions in light of [the company’s] purpose and its holistic approach to care.
  • The starting point is always to look for enthusiasm, strengths, and existing capabilities within the team. The coach projects trust that the team has all it takes to solve the problems it faces.

  • Frederic Laloux, Reinventing Organizations

Self-Study in June 2016

Jun 1, 2016 - 7 minute read - Comments - self-study-aggregationjune2016readaaron-batalionabbreviationactive-management-technologyadrien-jolyadversaryafter-workagileagilityalex-beregszasziamtappapp-storeassistantawsaws-lambdabackdoorbasecampben-terrettblikicareercareer-managementcodecomparisoncompassioncompilerconferenceconsolecoursecraftcraftsmanshipcvcycledamien-zammitdesigndevopsdiversitydylan-ginsburgeggheadelmelm-compileremma-youngempathyenemyevan-czaplickifeelingfreelancefrenchgdsgendergithubgiulia-mantuanogovernmenthackheartbleedhiringhrhuman-resourceshypehype-cycleillnessimprovingintel-management-enginejavajavascriptjonathan-whitejoshua-chambersjustin-balthropkalyana-sundaramlambdalastpasslaw-instrumentleaklearninglifelong-learninglistloggingmanifestomartin-fowlermashooq-badarmemike-loukidesmistakemobile-appmykola-bilokonskynative-appnish-raooathparodypassionpasswordpassword-vaultpasswordlesspaul-galvinproduct-teamprofessionprofessional-careerprogrammerprogrammingpull-requestpythonquincy-larsonqutheoryratingrealityrejection-letterresume-driven-developmentreviewrobert-martinsecurityserverlessserverless-architecturesicknesssocratessocrates-uksocrates-uk-2016speedswifttalenttariq-alitcp-ipteamteam-managementtech-interviewtony-youukuncle-bobuser-engagementvaultvent-free-zonewebappworkforce

DiversityMediocrityIllusion

I’ve read this article by Martin Fowler (on his bliki) about the diversity in conferences and the profession. How it is our job to incentive a positive feedback cycle that brings more diverse people into the workforce.

Explains how they do it in ThoughtWorks and how they have changed in the last decade.

Tags: martin-fowler, diversity, gender, workforce, conference, profession, bliki

What do cryptic Github comments mean?

I’ve read this article by Alex Beregszaszi on the abbreviations used in Github comments and pull requests.

Tags: github, pull-request, alex-beregszaszi, abbreviation

6 erreurs à éviter en tant que développeur freelance

I’ve read this article (in French) by Adrien Joly on the mistakes freelancers shouldn’t do when working with clients.

Tags: adrien-joly, freelance, list, mistake, french

Agile Methodology’s Promise Seems To Fall Short in the Face of Reality

I’ve read this article on an experience by Paul Galvin on some failing agile implementations.

Tags: paul-galvin, agile, reality, agility, team-management

How sharing other people’s feelings can make you sick

I’ve read this article by Emma Young on how being empathic to others can make you sick on their own illness. How illness can be socially transmitted, by loved ones or even by strangers.

How algorithms (that display news) can affect your own well-being and how this is reduced by using compassion instead of empathy.

Borders on the difference of empathy vs compassion.

Tags: emma-young, empathy, compassion, feeling, team-management, vent-free-zone, sickness, illness

AWS Lambda for Beginners

I’ve read this article by Mashooq Badar on an introduction to AWS Lambdas, where the basics are covered until getting a Lambda service in production. Using Python or Java.

Tags: mashooq-badar, serverless, aws, aws-lambda, lambda, python, java, devops, serverless-architecture

Advanced Logging with the JavaScript Console

I’ve watched this course by Mykola Bilokonsky at egghead.io.

In it, he covers the following methods on the console:

console.log
console.warn
console.error
console.info
console.debug

The amount of parameters does not matter, it will put a space in between. printing an object will print its values

console.log with the C’s printf syntax, as long as the first parameter is a string

  %o for an object
  %c for CSS
console.group / groupCollapsed / groupEnd

Tags: mykola-bilokonsky, logging, javascript, console, egghead, course

After work, is what determines your future! Spend one hour per day doing these 5 things and your life will change forever!

I’ve read this post by Kalyana Sundaram on the activities we do at night, after a day’s work and how they influence our learning.

Tags: kalyana-sundaram, after-work, career, career-management, learning, lifelong-learning

Expert Resumé Driven Development

I’ve read this article by Tariq Ali, where he explains the Resume-Driven Development, as a subset of the Principal-Agent Problem:

The Principal (management) hires an Agent (a developer) to build a program and allow the Agent to choose the tech stack. But the Agent’s interest (making his resumé more impressive) can be orthogonal to the Principal’s interest (producing a great product by using the “right tool” for the job). If the Principal allows the Agent to do as he wish, then the Agent will do as he wishes, thereby leading to the Agent to prosper and the Principal to suffer.

References the Gartner Hype Cycle

Tags: tariq-ali, resume-driven-development, hype, cycle, hype-cycle, career, professional-career

Resume Driven Development

I’ve read this article by Mike Loukides about the problem of finding a technical person based on CVs and the Law of the instrument:

[…] the inability of a technical team to specify what they really want (a developer with good programming taste and instincts), and instead hiring someone who has a particular skill or credential […]

Tags: law-instrument, mike-loukides, cv, career, resume-driven-development

Why Britain banned mobile apps

I’ve read this interview with Ben Terrett, former design chief at the UK Government Digital Services (GDS), that explains why they prefer webapps rather than native (mobile) apps: it’s a matter of cost, having to maintain and update so many mobile versions, versus a single one for the webapp.

Also talks about user research and productagile teams inside the GDS.

The interview is written by Joshua Chambers.

Tags: joshua-chambers, ben-terrett, gds, webapp, mobile-app, native-app, product-team, agile, government, uk

Most Tech Interviews Suck — The Only 4 Questions That Matter

I’ve read this article on why the majority of technical interviews could be improved, asking four questions instead of following other practices. By Aaron Batalion

Tags: aaron-batalion, tech-interview, hiring, team

Why Socrates UK is not just a conference for software craftsmen

I’ve read this article by Giulia Mantuano on the SoCraTes UK 2016 conference, where she gave a talk on the importance of design in our environment, where we craft beautiful interfaces in our programs.

Tags: socrates, socrates-uk, socrates-uk-2016, giulia-mantuano, design

360 million reasons to destroy all passwords

I’ve read this article by Quincy Larson about the insecurity of passwords, both managed by vaults (like LastPass) or remembered ones. They all are susceptible to being discovered, leaked or shared to other sites / accounts.

The author suggests to use passwordless login, which sends a link to your email account, which allows you to log in to the application

Tags: passwordless, lastpass, vault, password-vault, quincy-larson, hack, leak, password

A Brutally Honest Rejection Letter by an HR

I’ve read this parody letter by Nish Rao, on the real reasons so HR uses these templates for rejecting candidates

Tags: nish-rao, parody, rejection-letter, hr, human-resources

Passwords are Obsolete

I’ve read this article by Justin Balthrop on how to set up a passwordless system and how is that related to the Heartbleed bug.

Tags: passwordless, justin-balthrop, heartbleed, password

Server Side Swift vs. The Other Guys — 2: Speed

I’ve read this comparison of languages and frameworks (Vapor (Swift), Ruby on Rails (Ruby), Laravel (PHP), Lumen (PHP), Express (JavaScript), Django (Python), Flask (Python), Spring (Java), Nancy (C#), Go (Pure Go, no framework)) and to benchmark Plaintext, JSON, Random SQLite Fetch.

Tags: comparison, qutheory, speed, swift

Compilers as Assistants

I’ve read this article by Evan Czaplicki on seeing the compiler as an assistant to your work, instead of an adversary. Of how the compiler should give the most useful errors and warnings.

He also explains what features have been removed from the Elm language in 0.16.

Tags: compiler, assistant, adversary, enemy, elm, elm-compiler, evan-czaplicki

Craftsmanship, design, and code

I’ve read this article by Jonathan Z. White about the relation between design and code and what craftsmanship is about.

Suggests learning more about the counterpart (design vs code), to better understand the activity of creating software as a whole. For developers, suggests a few activities to improve (e.g., read better code, write unit tests, analyze code). Cites that the only way of measuring progress is comparing where you are today compared to some time ago.

Tags: craftsmanship, jonathan-white, design, code, improving

The Programmer’s Oath

I’ve read this oath by Robert C Martin.

Tags: oath, programmer, craft, manifesto, robert-martin, uncle-bob

Intel x86s hide another CPU that can take over your machine (you can’t audit it)

I’ve read this article by Damien Zammit on the Intel Management Engine (ME), a hardware system that is embedded in the newer Intel chipsets. Its function is to provide low-level management services. ME (like Active Management Technology [AMT] in the past), provides great services, but has access to any memory location and to the TCP/IP stack, without any control from the operating system.

The firmware is currently checked before booting, but it is highly-valuable as a security risk, as it has full access to the physical hardware.

Tags: security, damien-zammit, intel-management-engine, active-management-technology, me, amt, tcp-ip, backdoor

Programming Doesn’t Require Talent or Even Passion

I’ve read this list of examples of why programming doesn’t require talent or passion, by Tony You

Tags: talent, passion, list, programming, tony-you

Getting from ⭐️⭐️ to ⭐️⭐️⭐️⭐️⭐️

I’ve read this article on how Basecamp increased their ratings at the App Store: notify the user about new features and, in that modal, ask them to review the app or dismiss. By Dylan Ginsburg

Tags: review, user-engagement, rating, basecamp, dylan-ginsburg, app-store, app

Self-Study in May 2016

May 1, 2016 - 4 minute read - Comments - self-study-aggregationmay2016read1u-serveradrian-kosmaczewskiagealdous-broder-algorithmalgorithmbinary-tree-algorithmbookcareercareer-managementcodecode-generationcode-generatorcomfort-zoneconcurrent-connectionconstraintcoworkerdatadeliberate-practicedesign-patterndesign-principlediego-kartonesdummyeller-algorithmemployeeemployereventeverydayfakefiringfluxflux-iogalaxygerard-meszarosgithubgrowing-tree-algorithmgwendolyn-faradayhunt-and-kill-algorithmjakob-nielsenjamis-buckjavajen-carlilejhipsterjobjorge-diazjunitkaran-goelkoreakruskal-algorithmlearn-to-codelifelistlong-termmartin-fowlermazemaze-generationmicroservicemigratorydatamihai-rotarumocknetworkingnextnir-benitaolapeterssonpatternpattern-catalogphilosophypracticeprim-algorithmprofessionprofessional-careerproverbpythonrecursive-backtrackerrecursive-division-algorithmrelationshipsamir-talwarscalabilityscott-dinsmoresidewinder-algorithmsoftwarespystreakstubteam-managementtest-doubletest-patterntestingusabilityuxwebsocketwilson-algorithmwipworkwork-in-progressxunitzach-holman

Being A Developer After 40

I’ve read this article by Adrian Kosmaczewski on the required topics to be a developer at age 40 and keep enjoying it:

  • Forget The Hype
  • Choose Your Galaxy Wisely
  • Learn About Software History
  • Keep on Learning
  • Teach
  • Workplaces Suck
  • Know Your Worth
  • Send The Elevator Down
  • LLVM

He references galaxy, the big stack you are positioned (JVM, .net, PHP, etc). He makes a special mention of the LLVM

Take conscious decisions in your life. Be aware of your actions and their effect. Do not blush or be embarrased for changing your opinions. Say “I’m sorry” when required. Listen. Do not be a hotshot. Have integrity and self-respect.

Recommends these books:

  • Dealers of Lightning by Michael A. Hiltzik
  • Revolution in the Valley by Andy Hertzfeld
  • The Cathedral and the Bazaar by Eric S. Raymond
  • The Success of Open Source by Steven Weber
  • The Old New Thing by Raymond Chen
  • The Mythical Man Month by Frederick P. Brooks Jr.
  • Peopleware by Tom DeMarco and Tim Lister
  • The Psychology of Software Programming by Gerald M. Weinberg
  • Facts and Fallacies of Software Engineering by Robert L. Glass
  • The Design of Everyday Things by Don Norman
  • Agile!: The Good, the Hype and the Ugly by Bertrand Meyer
  • Rework by Jason Fried and David Heinemeier Hansson
  • Geekonomics by David Rice

Tags: adrian-kosmaczewski, career, profession, age, galaxy, long-term, book

Firing people

I’ve read this article by Zach Holman on firing people at your current work, both from the perspective of the employee (fired), employer, coworker.

Also explains his personal experience of being fired from Github.

You’ll know the difference between doing far and away your best work, and doing work that is still good, but just nominally better than what you’ve been doing. Once you catch yourself adjusting to that incremental progression… maybe it’s time to leave, to change things up

Tags: zach-holman, github, team-management, firing, coworker, employee, employer, job, relationship, next

10 design principles — for developers

I’ve read this article that explains what are the 10 design principles for programmers, as outlined by Jakob Nielsen. The article itself is by Nir Benita

Tags: design-principle, ux, jakob-nielsen, nir-benita, usability, testing, list

Design Patterns — Coming Full Circle, Part Two

I’ve read this article that explains how design patterns can be observed and then discovered and shows a list of four patterns dot working with data, by flux.io. Article by Jen Carlile

Tags: design-pattern, data, pattern, flux, flux-io, pattern-catalog, jen-carlile

Why I’m Ending my Github Streak after 844 Days

I’ve read this article by Karan Goel on the mechanics of following a pattern, of an activity sliced in small parts (1 problem a day or half an hour) and how this can be counterproductive sometimes.

Discusses ROI of this type of activity at the beginning of your career and later.

Tags: karan-goel, github, streak, python, code, everyday, practice, deliberate-practice, career, career-management

Good lessons learned from past jobs

I’ve read this article by Diego ‘Kartones’ on a synopsis of his work experience, job by job and what he has learned on each job.

Tags: diego-kartones, job, professional-career, career

Too Much Work In Progress

I’ve read this article by Samir Talwar on factors that indicate work in progress.

Tags: wip, work-in-progress, list, samir-talwar

TestDouble

I’ve read this article by Martin Fowler describing the test doubles that Gerard Meszaros describes in xUnit Test Patterns.

Tags: test-double, martin-fowler, gerard-meszaros, stub, fake, mock, dummy, spy, xunit, junit, pattern, test-pattern

Scaling to 12 Million Concurrent Connections: How MigratoryData Did It

I’ve read this article by Mihai Rotaru on how MigratoryData scaled to 12 million concurrent connections in a 1U server. They explain what optimizations they did in order to achieve this.

Tags: migratorydata, mihai-rotaru, concurrent-connection, 1u-server, scalability, websocket

Do what you love

I’ve read this article by Jorge Diaz on doing what takes you out of your comfort zone, changing careers, and life-work in general.

Cites this TED talk: How to find work you love

Tags: jorge-diaz, work, life, career, comfort-zone, scott-dinsmore, career-management

JHipster - The best way to breed a new app

I’ve read these slides by Ola Petersson, where he describes the architecture and contents of the jHipster, its pros and cons.

Tags: jhipster, ola petersson, java, code-generation, code-generator, microservice

How going to coding events helped me get an awesome job

I’ve read this article by Gwendolyn Faraday on how to kickstart a career in web development, attending events, pairing and networking. That netted her some interviews to start programming for a living.

Tags: networking, gwendolyn-faraday, event, job, learn-to-code

Maze Generation: Algorithm Recap

I’ve read this list of maze-generation algorithms by Jamis Buck. Including:

  • recursive backtracker
  • Eller’s algorithm
  • Kruskal’s algorithm
  • Prim’s algorithm
  • recursive division algorithm
  • Aldous-Broder algorithm
  • Wilson’s algorithm
  • Hunt-and-Kill algorithm
  • Growing Tree algorithm
  • Binary Tree algorithm
  • Sidewinder algorithm

Tags: recursive-backtracker,eller-algorithm,kruskal-algorithm,prim-algorithm,recursive-division-algorithm,aldous-broder-algorithm,wilson-algorithm,hunt-and-kill-algorithm,growing-tree-algorithm,binary-tree-algorithm,sidewinder-algorithm, jamis-buck, maze, maze-generation, algorithm, list

The Poverty of Constraints

I’ve read this article by Jamis Buck on interpreting two Korean proverbs in the world of software:

  • A dutiful son comes from a poor home
  • A poor house has many children

Tags: proverb, korea, philosophy, software, constraint, jamis-buck

Quote: Characterization tests

Apr 18, 2016 - 2 minute read - Comments - quotewewlcmichael-featherslegacy-codecharacterization-testtestlegacy

In Working effectively with legacy code, Michael Feathers talks a type of tests to define or characterize the current behavior of the legacy system:

In nearly every legacy system, what the system does is more important than what it is supposed to do.

A characterization test is a test that characterizes the actual behavior of a piece of code. […] The test document the actual current behavior of the system. Here is a little algorithm for writing algorithm for writing characterization tests:

  • Use a piece of code in a test harness
  • Write an assertion that you know will fail
  • Let the failure tell you what the behavior is.
  • Change the test so that it expects the behavior that the code produces
  • Repeat

M Feathers, in the chapter 131, section “Characterization tests” of Working effectively with legacy code. Actual page, 186.

Later on, he goes to describe them in a bigger environment:

Characterization tests record the actual behavior of a piece of code. If we find something unexpected when we write them, it pays to get some clarification. It could be a bu. That doesn’t mean that we don’t include the test in our test suite; instead, we should mark it as suspicious an find out what th effect would be of fixing it.

M Feathers, in the chapter 132, section “Characterization tests” of Working effectively with legacy code. Actual page, 188.


  1. Chapter 13, “I need to make a change, but I don’t know what tests to write” [return]
  2. Chapter 13, “I need to make a change, but I don’t know what tests to write” [return]

Brownish Greenfield Gilded Rose Kata

Apr 18, 2016 - 3 minute read - Comments - formulationkata-formulationkatagilded-rosetrikitrokmanuel-riverogreenfieldlegacy-codebobby-johnsonterry-hughes

(This formulation has been copied and adapted from Bobby Johnson and Terry Hughes’s repository)

Formulation

Hi and welcome to team Gilded Rose. As you know, we are a small inn with a prime location in a prominent city ran by a friendly innkeeper named Allison. We also buy and sell only the finest goods.

Unfortunately, our goods are constantly degrading in quality as they approach their sell by date. We have a system in place that updates our inventory for us. It was developed by a no-nonsense type named Leeroy, who has moved on to new adventures.

Your task is to rewrite the system using an old class, that already exists. First an introduction to our system:

  • All items have a SellIn value which denotes the number of days we have to sell the item
  • All items have a Quality value which denotes how valuable the item is
  • At the end of each day our system lowers both values for every item

Pretty simple, right? Well this is where it gets interesting:

  • Once the sell by date has passed, Quality degrades twice as fast
  • The Quality of an item is never negative
  • “Aged Brie” actually increases in Quality the older it gets
  • “Sulfuras”, being a legendary item, never has to be sold or decreases in Quality
  • The Quality of an item is never more than 50, however “Sulfuras” is a legendary item and as such its Quality is 80 and it never alters.
  • “Backstage passes”, like aged brie, increases in Quality as it’s SellIn value approaches; Quality increases by 2 when there are 10 days or less and by 3 when there are 5 days or less but Quality drops to 0 after the concert
  • “Conjured” items degrade in Quality twice as fast as normal items

Your task is to create the system from scratch, with only a restriction: you must use the class Item that Leeroy developed. This class is:

  • unmodifiable, if you do, a goblin in the corner who will insta-rage and one-shot you as he doesn’t believe in shared code ownership. This prohibition applies to modifying it, deleting it, adding new methods, deleting methodts, changing visibility of stuff, etc
  • cannot be inherited, if you do, a goblin in the corner who will insta-rage and one-shot you as he doesn’t believe in code inheritance

The Item class can be found in many programming languages in Emily Bache’s repository. You are looking for the class / type Item

Happy katas and happy koding. Please be careful with the goblin!

How to start

  • Create a new repo
  • Find the class Item in this repo
  • Use TDD to develop the functionality. Remember, Item will stay as it is.
  • Have fun

Acknowledgements

Thanks to @trikitrok for the idea, Bobby Johnson and Terry Hughes for allowing me to copy and modify their kata.