The long way through Software Craftsmanship

Tip: committing to the repo file by file

Jul 8, 2015 - 1 minute read - Comments - tipprotipgitbashpolish-your-toolsautomation

I was prefer committing to the repo with commits that are as small as possible as long as it makes sense. It makes it much easier to rever the changes. This is why I have some scripts to commit all the changes, even with the same message. This is one of them: for f in $(git status -s |grep "^M"|awk '{print $2}'); do git add $f git commit -m "generic commit for all files" done

Paper: Fundamental concepts on programming languages

Jul 6, 2015 - 8 minute read - Comments - christopher-stracheyprogramming-languagetheory1967coursefundamental-conceptspaperlecture

Note: all quotes on this post come from this paper: Strachey, C. Fundamental Concepts in Programming Languages. Published in Higher-Order and Symbolic Computation, 13, 11–49, 2000. Contents This paper starts slow, from the mathematical and philosophical point of view, until it gets to the basic concepts on the fundamental concepts: Assignment command L-Value and R-Value Definitions Names Numerals Conceptual models: an explanation about the relationship between the code, the memory store and the abstract concepts Later, it gets more in depth to the conceptual constructs, where most of the content is explained and contains:

Iterate with index in clojure

Jul 4, 2015 - 2 minute read - Comments - sampleclojurerubyiteratelanguage-comparisonprotip

Scenario: iterate a sequence (seq) with its index The lines have an implicit line number (starting by 1, in most editors): [1] line1 [2] line2 [3] hello When you read it from file to a variable, it is converted to: ("line1" "line2" "hello") This implicit line number value is not present, therefore you need to assign them one. In ruby, you have this construct: array = ["A", "B", "C"] array.

What to developers think about

Jul 2, 2015 - 1 minute read - Comments - samplefood-for-thoughtdeveloperjunior-developersenior-developerkaizenreadingimprovementbookshelf

Junior programmer's bookshelf: 90% APIs and programming languages; Senior programmer's bookshelf: 80% applied psychology. — ☕ J. B. Rainsberger (@jbrains) July 1, 2015 @jbrains @natpryce I've been suggesting psychology, sociology, or anthropology as a minor or second major to incoming CS students for years. — wallingf (@wallingf) July 1, 2015 @wallingf @jbrains @natpryce psychology certainly. I’ve found it a real challenge over the years working with people rather than code.

Brown-bag session: refactoring legacy code

Jul 1, 2015 - 1 minute read - Comments - refactoringlegacy-codetrainingbrown-bag-sessionclientlegacyslidespresentation

Today I have done a brown bag session about refactoring legacy code. It includes: legacy code definition. There is no agreement about this in the team. the legacy code change algorithm (source is Feathers, Working effectively with legacy code). Plus an example about it. working with legacy code experience with it. The slides are available here (PDF format) We also did a practical session, whose experience report is here

Self-study in July 2015

Jul 1, 2015 - 11 minute read - Comments - self-study-aggregationjuly2015rich-hickeyclojurejava-onepair-programmingcarlos-blerest-apijeff-knupppythonkris-jenkinsbackwards-compatibilityintegration-testjeremy-millerblack-box-testingwhite-box-testingedson-yanagadddjava-eevideorainsbergerintegrated-testintegration-testraul-rojaslambda-calculuspapersantiago-pinotdd-mistaketddmartin-fowlercouplingdesignmockmock-frameworkreadingself-studymeagan-wallerapprenticeship8th-lightpete-mcbreenchristopher-stracheyprogramming-languagetheory1967coursefundamental-conceptsreificationtype-erasureangelika-langerbjorn-tiplingintellij-ideapluginmisko-heverytestabilitytestable-codeclean-codementorrole-modeljoanne-wilsontype-theoryhashcodejavaralf-sternbergdvarianteric-normandfred-zemkesql-2011sqltracking-toolstakipisentryairbrakeraygunstackhunteralex-zhitnitskyblikip-vs-nptheoretical-computationelvira-mayordomodripstatjava-9unsafebackwards-compatibilityrob-austinnp-completelucia-mourayitz-schaffertpptransformation-priority-premisekatalinked-listbig-o-notationdata-structurebenchmarkattila-mihaly-balazsshortcutoleg-shelajevsummer-trainingpaymillxavi-hidalgooutsourcingvasco-duartedominic-krimmeragilepodcastoliver-whitelanguagecomparisonben-nadelbook-reviewrobert-c-martincraftsmanshipmonogamyanalogylocalstorageangularjszero-knowledgeclipperzdanijel-arsenovskic-sharpjava-agenttom-leightonmitocwopen-coursewarejulie-zelenskystanforddmitri-tikhanskijmeterheadless-testheadlessclojure-unraveledandrey-antukhalejandro-gomezradhika-ghosalalgosaurusbozhidar-bozhanovmark-hibberdstreamincremental-streamslidesmike-caulfieldfederationfederated-wikiandrew-montalentiparselyapache-kafkakafkapost-mortem-analysisalgorithmic-complexitybig-oh-notationrecursionclojurescriptmanuel-riveroproperty-based-testingquickchecktest-checkmanuel-chakravartywiptomas-rybingmike-cavalierecory-bergskillrockstarmichael-bernsteinprotocol-bufferprotobufferjsonjosh-szmajdatomasz-nurkiewiczeric-meyerconsidered-harmfulvenkat-subramaniamlambdacohesioncarin-meierjustin-weisspeter-provostkoanmichael-church

I’ve grouped all small posts related to the self-study from July 2015 into a single post Clojure made simple I’ve watched this talk by Rich Hickey at the Java One. It references the talk Easy made simple polymorphism without inheritance; single dispatch on the first parameter Productive pair programming I’ve read this article about pair programming, using the driver & copilot technique, written by Carlos Blé Building Automated REST APIs with Python Investigating QA automation for REST APIs, I’ve read these slides about it