> For the complete documentation index, see [llms.txt](https://cctang.gitbook.io/softwarecrafting/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cctang.gitbook.io/softwarecrafting/seminars/scna2016.md).

# 2016 SCNA

## Links

* [Revisit the presentations](http://us7.campaign-archive2.com/?u=709dd89d34b097978fb5573d6\&id=a0fb1517f1\&e=236e5b1991)

## Keynote Presentation

### Michael Feathers

* Consider benefits and tradeoffs
  * Readability\\/familiarity vs using new language constructs
    * loops vs reject\\/map
* Conflict between learning and delivering value
  * Importance of trying out things, sketching out solutions
    * Key to software crafting
  * Still being mindful of producing value\\/solutions
* Appreciate and empathize with what we create
* Over-engineering tension
  * Sometimes we must over-engineer to recognize over-engineering

## Learn Better Together (Learning as a Team)

### Audrey Troutt

* She claims 20-70% of development time spent on learning
* Ashley Johnson *High Performing Virtual Team*
* Types of learning as a team
  * Classroom - "Protected Time"
    * "Junior" learning
      * Challenging to adopt to "real-world" environment
* Coaching through iteration and reflection
* Learning as you go
  * Brown bag
    * Not recommended because individuals who are forced to go won't really learn
* Book an expert and organize a hackathon
  * When a challenge presented itself, the group would stop and the expert would talk about it
  * Has the benefits of "protected time" learning
* Collaborate learning works best with groups of 3-4 people with mixed abilities
* Spike
  * Spike review is key for sharing knowledge at the conclusion
* Pair exchange program
  * Take a day to work as a pair in different programs
  * Host gains a new pair of eyes on a problem already being worked
  * Visitor gains new perspective and viewpoint of an unfamiliar project
  * Learning time is still protected
* Teaching solidifies learning
* Takeaways
  * Clarify goals
  * Apply immediately
  * Protect learning time
  * Include everyone
    * Learning is social
  * Iterate and reflect

## Reviving a Community with Code

### Jonathan Graham & Amanda Laucher

* Mined Minds
* <info@minedminds.org>

## Panel Discussion

### Uncle Bob, Michael Feathers, Amanda Laucher & Ray Hightower

* Choose software paradigm to fit the problem
  * Waterfall may be good for projects with long lead times
* Object oriented -> functional -> collections
  * APL?
* Parallelism vs server-less (AWS)
* Things to revisit that the software community has abandoned
  * Study some of the roots, such as practicing with assembly code
* *The Structure and Interpretation of Computer Language*
* `zip` is similar to a deginerate transpose
* Pre-testing vs post-testing
  * TDD is dead?

## Consequences of an Insightful Algorithm

### Carina Zona

* How do we mitigate unintended consequences of using data provided by users?
* Predictive analysis
* Deep learning
  * Algorithms for fast, trainable, artifical neural networks
    * Input
    * Execution
    * Output
* Machine learning fail
  * Target
    * 2nd trimester is a key for advertising because customer brand loyalty is up-for-grabs for not just the woman, but her child
      * Turns out the an algorithm determined that an increased purchase of moisturizer indicates a likelihood that a woman is pregnant
    * Invasion of privacy?
  * Shutterfly
    * False positives (such as a likelihood of a birth) can cause unintended consequences, such as a mailer about newborn photos may be hurtful to someone who miscarried
  * Fitbit
    * Treated all data as equal and public
      * In the early days it had an activity for sexual activity
  * Uber
    * Tracks things such as one-night stands
* Consder the failure modes, the edges cases
* Flipping the paradigm
  * Consider decisions' potential impacts
  * Evaluate potential impacts
  * Be honest
  * Be trustworthy
  * Build in recourse
    * Ability for user to correct an bad conclusion
  * Fully disclose limitations
    * Call attention to signs of risk of harm
  * Be visionary about potential biases
  * Anticipate divese ways to screw up
  * Audit outcomes constantly
  * Crowdsource all the time
  * Cultivate informed consent
  * Commit to data transparency
  * Commit to algorithmic transparency

## Exploring Parallelism with Parallella and Raspberry Pi

### Ray Hightower

* RayHightower.com
* Concurrency is not Parallelism
  * Currency: At least two threads are making progress
    * i.e. time partitioning
  * Parallelism: At least two threads are executing simultaneously
* "Mapping complicated algorithms to massively parallel harward architectures is considered a ..."
* How to BYOC
* Useful software
  * LanScan Pro
  * TightVNC
* Open MPI
* MPICH
* mpi4py
* ssh keygen
* What can we do with it?
  * hadoop
    * MapReduce
* Ventusky
  * Javascript implementation of weather forecasting
* Developments
  * Epiphany building a 32x32 core chip
  * RISC-V is a instruction set that has parallelism built-in

## How to Scratch and Itch (in 200 Repos or Less)

### Justin Searls

* Co-founded TestDouble
* Recognize when it's ok to make a mess
* Popularity without purpose is toxic
* Google "TDD failure"
* fine\_ants
* not winning != not worthwhile
* Criticism is easier than contributing
* GPL
* emoruby

## Code Retreat

### 4 Rules of Simple Design (Kent Beck)

* Tests Pass
* Expresses Intent
* No Duplication
* Short

### Conway's Game of Life

#### Game Basics

* A cell can either be alive or dead
* A cell's state change is dictated by:
  * Any live cell with `<2` live neighbors dies of under-population
  * Any live cell with `2 OR 3` live neighbors lives on
  * Any live cell with `>3` live neighbors dies of over population
  * Any dead cell with `exactly 3` live neighbors comes alive

#### Problem Set 1

* No constraints
* Ray Joseph De Castro
  * <https://github.com/raydecastro/node-es6-tdd>

#### Problem Set 2

* No primatives across method boundaries
* Input and output types must be defined by us

#### Problem Set 3

* No talking
* Ian
  * github: @ianDCarrol
  * <ian.d.carroll@gmail.com>
* Python test suite
  * nose
    * `import nose.util`
    * [Writing tests with nose](http://nose.readthedocs.io/en/latest/writing_tests.html)

#### Problem Set 4

* Programming like it's 1965
  * Can only test the code twice:
    * At the 30 minute mark
    * At the end
