2012
speakers

Sarah Allen has been writing code and teaching others since the 1980s. She has a history of developing leading-edge products, such as After Effects, Shockwave, and Flash video; she wrote a book about cross-platform mobile development, and is the co-creator of TestFirst.org and Pie, a programming language for kids.
sarah allen

FRI, NOV 9 @ 11:00AM
@ultrasaurus
Crafting Software Products
How do you craft a software product that people want to use? This talk will explore how agile design is different from agile development, yet both disciplines need to work together to create a product. What are the methodologies that help us figure out what code to write? We don't want to create a stack of paper specs to define the product far in advance, but neither do we want to dive into coding before we've figured out who will use our product and what problem we're solving. What do we need to do before we start writing code? How do we use test-first techniques outside of the code to validate that we are building the right product, while remaining productive in the face of change?

Aaron Bedra is a Senior Software Engineer at Groupon working on Groupon's Now! real-time deals platform. He is the co-author of Programming Clojure, Practical Software Security, and another upcoming Pragmatic Press book.
aaron bedra

SAT, NOV 10 @ 12:00PM
@abedra
Pontificating Quantification: Verifying Correctness in Software
In 1969, Tony Hoare published a paper that would change computer science forever. He reflected on the ideas of consequence in program execution and created a set of formal definitions for proving correctness. This is a far cry from how most software is verified today: through automated unit testing in the style of X-Unit. In this talk, Aaron will brave the forgotten paths of software verification beyond the realm of unit tests. He will look at some of Hoare's original concepts and how others have built on them, gain a deeper understanding of type theory and the limitations of language-integrated proof systems, and finally examine the restrictions that can be imposed on language expressiveness to make verification more tractable.

Gary Bernhardt is a creator and destroyer of software, compelled to understand both sides of heated software debates: Vim and Emacs; Python and Ruby; Git and Mercurial. He runs Destroy All Software, which publishes advanced screencasts for serious developers covering Unix, Ruby, OO design, and TDD.
gary bernhardt

SAT, NOV 10 @ 9:00AM
@garybernhardt
Boundaries
Some people test in isolation, mocking everything except the class under test. We'll start with that idea, quickly examine the drawbacks, and ask how we might fix them without losing the benefits. This will send us on a trip through behavior vs. data, mutation vs. immutability, interface vs. data dependencies, how data shape affords parallelism, and what a system optimizing each of these for natural isolation might look like.

Michael Feathers is a Member of the Technical Staff at Groupon. Prior to joining Groupon, Michael was the Chief Scientist of Obtiva, and a Senior Consultant with Object Mentor. Over the years, Michael has spent a great deal of time helping teams alter design over time in code bases. Michael is also the author of the book Working Effectively with Legacy Code (Prentice Hall, 2004).
michael feathers

FRI, NOV 9 @ 4:00PM
@mfeathers
Testing Revisited
We write tests. We use to them to probe design, maintain the behavior of our code when we change it, and demonstrate that it is working. All of these things are valuable. Why then, do we sometimes feel that our tests own us? That we are spiraling down a path of over-testing and maintenance headaches?
In this session, Michael Feathers will talk about how we can reframe our relationship with automated testing, maintaining the bulk of their utility without unreasonable costs. Doing so takes courage, but no more courage than we have applied to other aspects of development.

Cory Foy is an agile developer, consultant and coach with a passion for looking at the entire system within an organization. He currently works as a Software Craftsman running the Tampa, FL office of 8th Light, Inc.
cory foy

FRI, NOV 9 @ 9:00AM
@cory_foy
When Code Cries: Listening to What Your Code is Saying
Christopher Alexander defines building as alive or dead based on how well they resolve the forces of the people who use them. Likewise, the software we write can be alive or dead. In this talk, Cory Foy will explain how you can listen to the things your code is saying to you as it cries out to be great, and mold it into something that teems with life.

Sarah has been developing commercial software for a number of startups and small businesses since 2001. She currently builds software for web and iPhone, mentors budding programmers, organizes the Chicago Bootstrappers Breakfast, and works on products & projects alike with her partner, Corey Haines.
sarah gray

SAT, NOV 10 @ 11:00AM
@fablednet
Visualizing Enumerable: Own Abstract Concepts Through Physicalization
One of the things that stops beginner programmers from owning their knowledge is a difficulty visualizing what is happening when a line of code runs. We Rubyists are happy using our terse, expressive language—but without a mental model, beginners can be lost when it comes to "seeing" what's happening when the code executes. In this session, Sarah will go through some of her visual representations of Ruby's Enumerable Module in order to illustrate pathways through the code for some commonly used—and commonly misunderstood—methods. This talk will demonstrate alternate learning approaches for people who are visual or physical learners. Good for non-beginners, too, as anyone who has ever tried to explain #inject will testify.

Leon has been bringing value to clients large and small for over ten years, and has a passion for technology, art and community. A believer in building strong communities, Leon spends time presenting on a wide variety of development topics at events and user groups in the region. He can be found tending binary zen gardens with fellow artisans at { New Context } in Columbus.
leon gersing

SAT, NOV 10 @ 4:00PM
@rubybuddha
Keep Software Weird
How much code coverage does it take it ship a minimal viable product? How many Scrum Certifications does it take to make your team agile? How many languages learned make a journeyman a master? Currently, in software, there is an expressed desire to be taken seriously as craftspeople. To this end, we've introduced process, metrics and quantifiable boundaries as goal posts to hold up to those who may not understand what is involved in shipping quality software. As this practice becomes normal, developers are faced with an ever-expanding landscape of techniques, practices and pressure from thought leaders to take extra course work or certifications to validate the assertion that you are, in fact, a software developer. While some may see this as a necessary evolution of our field, I see it as a albatross round the neck of the creative developer looking to explore the depths of what is possible. While the safety of a well worn path may provide solace to the uninitiated, I find dogmatic implementation oppressive and exclusionary to those interested in exploring alternative approaches to solving problems with technology. Join me in an exploration of what I believe makes us unique as a subculture in this business world; examples of how we came to be by challenging the established idioms of the past in order to move forward into something exciting and new. To be our best we must be willing to dive into the unknown, to loose the binds of convention and explore the vast expanse of the unfamiliar. We must dare to be wrong, to be new, to be foolish, to be amazing and keep software weird.

Brian Marick was a Lisp and C programmer in the 80's, a testing consultant in the 90's, and an Agile consultant in the 00's. This decade he's a Clojure and Ruby programmer. He was one of the authors of the Manifesto for Agile Software Development and is the author of three books.
brian marick

SAT, NOV 10 @ 2:00PM
@marick
Logic Programming and Test Data Generation
Primum: Logic programming computes values for variables based on relationships between known facts. In the main, introductions to it are either based on logic puzzles (cannibals and boats!) with an at best unclear relationship to the problems we write programs to solve, or on laboriously reimplementing things (arithmetic!) that we can already do perfectly well, thank you very much.
Secundum: Generating complex test data is a hard problem, in part because constraints (relationships) amongst bits of the data have to be obeyed. The sadly common result is fragile tests that know too much about the details of their data.
Ergo: I will explain logic programming by showing how it can be used to generate test data from minimal descriptions of what's needed.

Robert Martin (Uncle Bob) has been a programmer since 1970. He is the Master Craftsman at 8th Light inc, an acclaimed speaker at conferences worldwide, and the author of many books including: The Clean Coder, Clean Code, Agile Software Development: Principles, Patterns, and Practices, and UML for Java Programmers.
robert martin

FRI, NOV 9 @ 2:00PM
@unclebobmartin
The Reasonable Expectations of Your CTO
Welcome. I am your new CTO. I know that in the past we've had some quality problems, some productivity problems, and some morale problems. I know that you've sometimes felt overworked and under-appreciated. I know there have been issues of trust between you and the rest of the business. But that's the past. I have a different expectation of what you are capable of.
I believe you are all world class programmers, engineers, and craftsmen. From now on I'm going to expect you to behave that way. Indeed, I have a list of very specific expectations that I want to go over with you now. These expectations are reasonable, rationale, achievable, and will define us as the world-class, highly professional, deeply competent team that I know we can be.

Jen Myers is a web/interface designer at the software company Relevance. She works from Columbus, Ohio, where she also teaches HTML/CSS and organizes the coding education program Girl Develop It Columbus. Her particular areas of interest are user experience, teaching innovation and using design as a tool for communication.
jen myers

FRI, NOV 9 @ 3:00PM
@antiheroine
Developers Can't Understand Design (And Other Completely Mistaken Design Myths)
Designers are designers and developers are developers and never the twain shall meet, right? Except—not really. There are some imaginary lines drawn around the two disciplines of design and development, but the truth is they are closely intertwined, and it can be very useful for software creators to be able to understand the value and process of design. This presentation will correct some commonly-held misconceptions about design and focus on how software development companies can integrate designers into their workflows in order to create clearer, cleaner and more usable applications.

Ade is a Senior Developer Advocate in Google's London office and works on the Google+ project. Over the last decade he's worked on trading systems for a variety of investment banks as well as on Google's advertising and mobile search systems. He's also the co-author of "Apprenticeship Patterns."
adewale oshineye

FRI, NOV 9 @ 12:00PM
@ade_oshineye
What Happens When Software Craftsmanship Meets User Experience?
Developer Experience (also known as DX or DevExp) involves applying the tools and techniques of User Experience professionals to developer-facing artefacts. In this talk I'll walk you through the basic principles of DX and show why failure to apply them is hurting your work. I'll describe some DX patterns we've gathered and share some of the painful lessons we've learned as we've evolved Google's APIs. Finally I'll argue that craftsmanship has to manifest itself in every interface, API, and tool we expose to our fellow software developers if we as an industry are to move forward.

Since 1996, Susan has been working with trading firms and software startups designing and building large production-deployed distributed services and applications. Since 2006, she has worked primarily with Erlang, Scala, Haskell and Ruby as well as dabbled in Clojure. Prior to Susan's enlightenment she used and abused Java/J2EE/JEE, C++, Perl.
susan potter

SAT, NOV 10 @ 3:00PM
@SusanPotter
Functional Algebra: Monoids Applied
In functional programming, words from Category Theory are thrown around, but how useful are they really?
This session looks at applications of monoids specifically and how using their algebraic properties offers a solid foundation of reasoning in many types of business domains and reduces developer error as computational context complexity increases.
This will provide a tiny peak at Category Theory's practical uses in software development and modeling. Code examples will be in Haskell and Scala, but monoids could be constructed in almost any language by software craftsmen and women utilizing higher orders of reasoning to their code.

Chad Pytel is founder and CEO of thoughtbot, a leading Ruby on Rails development firm and the creators of popular plugins like paperclip, factory_girl, shoulda, and well as their own products Airbrake, and Trajectory.
chad pytel

FRI, NOV 9 @ 10:00AM
@cpytel
Apprentice.io
http://Apprentice.io is a new apprentice program which trains developers and designers in a three month apprenticeship. This talk will give an overview of how the program works and review the important lessons learned.

Justin Searls has two professional passions: writing great software and sharing what he's learned in order to help others write even greater software. He recently co-founded a new software studio called Test Double, where he's currently helping clients build well-crafted user experiences for the web.
justin searls

SAT, NOV 10 @ 10:00AM
@searls
To Mock or Not to Mock
Some say "mocks suck," because they reduce a test's realism and with it the confidence that the code being tested actually works. Others use mocks to demarcate the outer boundary of an application, guarding the test from expensive or external dependencies (e.g. by faking a database or network resource). Still others see mocks as a "setup of last resort", using them only to mitigate the pain of hard-to-test code. Finally, some developers mock out every collaborator in every test, and their rationale is probably the least understood of them all!
This talk will serve as an opinionated (if broad-stroke) survey of the different ways people use test doubles (be they mocks, fakes, stubs, or spies). Our goal will be to establish a more sophisticated means of communicating on the topic. We'll discuss the pros & cons of the different approaches toward mocking, the smells of test double abuse, and the lessons I took away from writing my own test double library.
