The long way through Software Craftsmanship

Self-Study in March 2016

Mar 2, 2016 - 7 minute read - Comments - self-study-aggregationmarch2016readabstract-data-structureadoptionadtagileambitionanalogyanalysisautomationbecodeweekbemben-orensteinbenedict-fritzblogbook-comparisonbook-reviewburnoutcapacitychristopher-buiclean-codecodecationcodingcodurancecohesioncoman-hamiltoncomparisoncontinuation-stylecraftsmancraftsmanshipcsscss-architecturecss-methodologyculturedaniel-irvinedeath-marchdeductive-learningdeep-workdeliberate-practicedeploydesigndesign-level-cohesiondesign-problemdesk-surfingdetaildevopsdlc-cohesiondomain-specific-languagedslduncan-stuartedward-yourdonessayestjetsyexclusive-orexperienceexperience-reportfeminismfibonaccifragile-test-problemfullstackgarbage-collectiongiving-up-tddgroup-belongingheinz-kabutzhireholidayhypothesisiain-taitian-sommervilleimplementation-patternsimprovementin-companyinductive-learninginternalizinginterviewintpintroductionivan-fraixedesjamis-buckjavajaxenterjemima-kissjessica-livingstonjobjoe-richardsonjohn-allspawjohn-rawlsjoseandreslabellambdalarry-constantinelawlaw-of-ruthless-prioritizationlazinesslearn-to-programlearninglearning-cyclelearning-processlistmachine-learningmagic-bullet-problemmagical-thinkingmanagementmartin-fowlermaturity-levelmetametaphormotivationmyers-briggs-typenon-strictnessoctopressoffice-cultureonboardingpaul-grahamperfectionpersonalpet-projectplaipomodoroproblemprocessprocess-theoryproduct-managementproduct-strategyproductivityprogramming-languagepsychologyq-and-aquotereactive-programmingred-black-treerefactoringresponserich-mironovrobert-martinrobin-rendlerubysandro-mancusosarah-tavelsassschemeshallow-workshippingshriram-krishnamurthisimplificationslacksmc-cohesionsoftware-designsoftware-economicsspamspammerstorystrictnesstddteachingteamteam-managementteammateteamworktechniquetestable-design-problemtime-managementtip-and-tricktnstaafltype-soundnessuncle-bobuser-experiencevacationveil-of-ignorancevincent-partingtonvlogwarfarewolfgang-goerlichworky-combinatorycyeray-darias

Learning Programming Isn’t That Hard, Deep Work Is Hard

I’ve read this article by Benedict Fritz on two types of work (i.e., deep and shallow) and how programming is of the deep type. He links the difficulty of learning to program to the difficulty of practicing deep work.

Tags: analogy, benedict-fritz, deep-work, shallow-work, learn-to-program, psychology

BeCodeWeek by Yeray Darias

I’ve read this category of posts by Yeray Darias about his BeCodeWeek, a desk-surfing experience at BeCode.

Publishes one entry per day detailing his activities: working for an open-source library, discussions, etc

Tags: becodeweek, yeray-darias, desk-surfing, experience, experience-report, analysis

BeCodeWeek by Yeray Darias

I’ve read this category of posts by Yeray Darias about his BeCodeWeek, a desk-surfing experience at BeCode.

Publishes one entry per day detailing his activities: working for an open-source library, discussions, etc

Tags: becodeweek, yeray-darias, desk-surfing, experience, experience-report, analysis

Tracer Bullets

I’ve read this page about tracer bullets, an analogy from the military warfare to a software project.

Serves the purpose of adjusting the aim of the cannon to better reach the target.

Tags: analogy, metaphor, warfare, management

Cohesion - the cornerstone of software design

I’ve read this article by Sandro Mancuso on the topic of cohesion. Describes the 7 types of cohesion, as described in Structured Design1, from worst to best:

  • Coincidental cohesion
  • Logical cohesion
  • Temporal cohesion
  • Procedural cohesion
  • Communicational/informational cohesion
  • Sequential cohesion
  • Functional cohesion

and about Design-Level Cohesion:

  • Coincidental relation (R1)
  • Conditional relation (R2)
  • Iterative relation (R3)
  • Communication relation (R4)
  • Sequential relation (R5)
  • Functional (R6)

Tags: cohesion, codurance, edward-yourdon, larry-constantine, list, sandro-mancuso, software-design, design-level-cohesion, smc-cohesion, dlc-cohesion

Etsy CTO Q&A: We Need Software Engineers, Not Developers

I’ve read this interview with John Allspaw, where they explain the onboarding experience for new hires at Etsy, the DevOps philosophy and the need for engineering skills, more than developer skills. This can be exemplified in the need to know more, defining the boundaries of your job and finding the right tool for the job.

Tags: devops, interview, q-and-a, john-allspaw, etsy, onboarding, hire, team-management, deploy

Frequency Reduces Difficulty

I’ve read this article by Martin Fowler on why we should repeat things that are difficult for us:

  • Perfectioning the technique
  • Internalizing the details
  • Easing its automation

Tags: martin-fowler, automation, process, perfection, internalizing, technique, detail, process-theory, agile

Lambdas are confusing

I’ve watched this video where Coman Hamilton from JAXenter interviews Dr. Heinz Kabutz about Java’s lambda syntax. Cites the problem with exceptions, generics, method overloading.

Tags: java, lambda, coman-hamilton, jaxenter, heinz-kabutz, problem

El full-stack developer en 2016

I’ve read this article by Jose Ignacio Andrés about the job descriptions of 2016.

El principal valor de un full-stack es poder simplificar el trabajo a los demás miembros del equipo.

My translation:

The main value of a full-stack developer is to be able to simplify other teammates' work

Tags: teamwork, teammate, fullstack, simplification, work, team-management, jose andres

I am a software craftsman

I’ve read this article by Daniel Irvine about calling yourself a craftsman or not. He says that if you adhere to their values, you should.

Tags: craftsmanship, label, daniel-irvine, craftsman, group-belonging

Teaching Programming Languages in a Post-Linnaean Age

I’ve read this paper by Shriram Krishnamurthi where he explains the need for books like PLAI:

  • lack of paradigms in new languages, and its separation (or lack of)
  • design of languages cheaper and cheaper these days
  • rigor level in publications
  • inductive and deductive learning


post-Linnaean refers to the Carl Linnaeus:

He is known as the father of modern taxonomy

Tags: inductive-learning, deductive-learning, dsl, domain-specific-language, type-soundness, continuation-style, garbage-collection, reactive-programming, scheme, plai, teaching, programming-language, shriram-krishnamurthi

Lazy Ruby

I’ve read this article by sonnym about using ruby’s lazy (non-strict) features, detailing an example with Fibonacci’s sequence.

Tags: laziness, strictness, non-strictness, ruby, fibonacci, comparison

Jessica Livingston

I’ve read this essay by Paul Graham about his co-founder at the Y-combinator: Jessica Livingston. She was considered the Social Radar at YC

The essay also talks about the non-existent separation between working hours and not and about her implication and personality.

Tags: jessica-livingston, paul-graham, y-combinator, feminism, yc, essay

Four Laws Of Software Economics (Part 1)

I’ve read this article by Rich Mironov on why the development team will never be big enough (because of economics, because there are more things to be done than time to do them, so we have to prioritize them) and about the communication problems between the dev team and the client(s).

Also talks about the general personality of clients and devs and task prioritization

Tags: exclusive-or, magical-thinking, tnstaafl, management, agile, team, capacity, death-march, estj, intp, software-economics, product-strategy, law-of-ruthless-prioritization, law, rich-mironov, slack, myers-briggs-type

You Should Take A Codecation

I’ve read this article by Ben Orenstein explaining what is a codecation and what he’s done in the two codecations he’s taken.

Tags: codecation, ben-orenstein, vacation, holiday, coding, shipping, in-company

Giving Up on TDD

I’ve read this article by Ian Sommerville about the problems he’s found while doing TDD, mainly about design, but also about being conservative in the amount of tests you allow yourself to break while refactoring.

Tags: tdd, ian-sommerville, refactoring, problem, design-problem, design, giving-up-tdd

Giving Up on TDD - answer

I’ve read this article by Robert C. Martin on the common issues for people adopting TDD:

  • The Fragile Test Problem
  • The Design Problem
  • The Testable Design Problem
  • The Magic Bullet Problem

This article is an answer to another by Ian Sommerville.

Tags: tdd, uncle-bob, robert-martin, adoption, ian-sommerville, fragile-test-problem, giving-up-tdd, design-problem, testable-design-problem, magic-bullet-problem

Seek out jobs with fast learning cycles

I’ve read this article by Sarah Tavel on learning on the job and how fast these learning cycles can happen at companies at different stages of maturity.

So if you’re thinking of changing jobs, or taking your first, my advice: find a place with a fast learning cycle, and a steep learning curve.

Tags: learning, job, hypothesis, sarah-tavel, learning-cycle, maturity-level, learning-process, product-management

Clean Code Vs. Implementation Patterns

I’ve read this comparison of Clean Code vs Implementation Pattern books, by Vincent Partington.

In it, the author explains the differences in style in both books, and how they compare to others.

Tags: clean-code, implementation-patterns, comparison, book-review, book-comparison, vincent-partington

Stuck in Traffic vlog #103 - New Spammer Techniques

I’ve seen this vlog entry on machines fighting machines (exemplified with the spam producing and filtering) and how some spammers are trying more direct techniques focusing on higher-value targets, sometimes even handcrafting messages and modifying them every few units.

Tags: wolfgang-goerlich, spam, vlog, spammer, machine-learning

Becoming A Finisher

I’ve read this article by Christopher Bui where he explains that projects that are too ambitious stall your productivity and make you lose your focus.

Tags: christopher-bui, pomodoro, time-management, productivity, motivation, ambition, paul-graham, quote

Hanging around with red-black tree implementations: the beginnings

I’ve read this article by Ivan Fraixedes where he details the progress of implementing a red-black tree, and also his motivation for doing it.

Tags: ivan-fraixedes, red-black-tree, abstract-data-structure, adt, deliberate-practice, pet-project

Some Tools for Faster Blogging in Octopress

I’ve read this article for tips and tricks on how to blog faster with octopress. Written by Duncan Stuart.

Tags: duncan-stuart, blog, improvement, meta, octopress, tip-and-trick

The veil of ignorance

I’ve read this article by Adam Morse on how not being on the top of the skills performance can affect your design and your user experience. Also, references the concept of “The Veil of Ignorance”, a concept by John Rawls.

Tags: john-rawls, veil-of-ignorance, user-experience, design

To Smile Again – Recovering from the paralysis of burnout

I’ve read this article by Jamis Buck on his story of burnout, what symptoms had on him and how he got out of it.

Tags: burnout, jamis-buck, psychology, productivity, personal, story, analogy

Beyond email: could startup Slack change the way you work?

I’ve read this article on Slack’s office culture, with their diversity, policies and values after a high people growth in a short period of time. By Jemima Kiss

Tags: culture, office-culture, slack, jemima-kiss

Slack: Work This Way

I’ve read this article, a response to my above read, about the office culture at Slack.

Tags: iain-tait, response, slack, office-culture

BEM 101

I’ve read this introduction to a CSS style called Block, Element, Modifier methodology (BEM).

In it,

  • a block is a top-level abstraction of a new component
  • Child items, or elements, can be placed inside and these are denoted by two underscores following the name of the block […]. modifiers can manipulate the block so that we can theme or style that particular component without inflicting changes on a completely unrelated module. This is done by appending two hyphens to the name of the block […].

By Joe Richardson, Robin Rendle et al.

Tags: joe-richardson, robin-rendle, bem, css, css-methodology, introduction, css-architecture, sass

  1. Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design by Yourdon and Constantine. ↩︎