Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Exploring the Unknown with Scala

Julie Pitt
November 12, 2016

Exploring the Unknown with Scala

Whatever your experience level, I'm willing to bet that you want to become a better engineer and problem-solver. You have probably already noticed that exploring unfamiliar technologies, patterns, algorithms and approaches helps you become better at your job, and sometimes even identify what job you want to be in. At this point you probably have a voice in your head saying that exploring, while fun and exciting, takes time. Perhaps you often tell yourself that you're too busy getting things done to indulge your curiosity.

I'm going to tell you the story of my personal confrontation with a dilemma facing every human being on earth: exploration vs. exploitation. I'll share with you the lessons I've learned about becoming a better explorer. I'll discuss how my usage of Scala and engineering mindset have changed as I have gone from developing large-scale production applications to conducting a series of experiments that test hypotheses. I hope you walk out of this talk with a renewed enthusiasm for exploration and a framework that you can use to decide when to explore and when to exploit.

Julie Pitt

November 12, 2016
Tweet

Other Decks in Technology

Transcript

  1. prototype #1 • distributed, async neural net • actor =

    “neuron” • message passing between neurons
  2. prototype #2 • embarrassingly simple • case classes • pure

    functions http://github.com/oomagnitude/scala-spatialpooler
  3. but the spec says... unused code is dead code we

    need a single peer-reviewed codebase we need a project plan
  4. • building to spec • low-risk releases • continuous deployment

    • minimal tech debt I was optimizing for...
  5. • index of what you know ◦ be greedy •

    be lazy ◦ ease of use, versatility • don’t over-engineer ◦ think println toolbox considerations
  6. • primitives -> pure functions ◦ analogous to numpy •

    what is possible -> types • how to do it -> methods ◦ builds on primitives • types ensure tools are used correctly our toolbox
  7. • easily import tools • Amm REPL for gut checks

    • Scala scripts for repeatable tests • SBT for involved tests Ammonite to the rescue http://www.lihaoyi.com/Ammonite/
  8. • hypotheses ◦ divide & conquer • tools • requirements*

    ◦ *as they become clear what to share
  9. mode switching algorithm 1. which mode am I in? 2.

    am I ready to switch? 3. how much time to I need to switch?
  10. activate creative mode when... • your assumptions are wrong •

    you’re tempted to add unnatural assumptions • complexity is mounting
  11. activate execution mode when... • you can describe the goal

    • you can’t find evidence against your hypotheses • achieving the goal is probable
  12. give yourself time to switch The farther in or out

    you need to zoom, the more time it will take to switch modes
  13. prototyping • build the embarrassingly simple version first • just

    because you can do it doesn’t mean you should
  14. mode switching • creativity and execution are modal • know

    which mode you’re in and when to switch • give yourself time to switch