Software Craftsmanship
Introduction and Philosophy
April 19, 2016
Gaurav Kale
July 2015
EDS
Big Apple
https://pollev.com/scottfranks188
J. Colin Crowley
July 2015
EDS
Jobs & Wozniak
I see software development as a creative blend of art, science, and engineering, whose purpose is to deliver effective systems. The best way I have been able to describe this idea is by talking about software craftsmanship. The software craftsmanship metaphor allows developers to acknowledge all aspects of their craft – the artistic and aesthetic aspects as well as the measurable and mechanical aspects. - Peter McBreen
Software Craftsmanship is a metaphor. The goal being to emphasize personal skill, mastery of tools and techniques, along with productive relationships with your peers and clients.
A craftsman or artisan is a skilled manual worker who makes items that may be functional or strictly decorative.
Writing code is similar to painting a picture. A programmer who writes clean code is an artist who can guide a blank screen through a series of transformations until it is an elegantly coded system.
Easy to recognize a good painting.
Hard to paint a good picture.
Programmers are authors – responsible for communicating well with their readers.
You write for readers who need to comprehend your motivation and intentions.
The ratio spent reading vs. writing code is usually at least 10:1.
The communal growth of Software Craftsmanship is analogous to the Scientific Method. There have been many developers before you:
If I have seen further, it is by standing on the shoulders of giants. - Isaac Newton
The best practices, design patterns, and design principles we are going to go over in this course were created by "giants". Leveraging them will allow you to produce more value than reinventing the wheel through trial and error.
Tackle development tasks with a structured approach.
Science
UI/UX Design
Programming
Bridge Building
Ask a Question
Background Research
Construct Hypothesis
Test with Experiment
Analyze Data &
Draw Conclusions
Communicate Results
Identify a User Problem
User Research and Interviews
Construct
Prototype
User Testing and Feedback
Incorporate Feedback
Hand Off / Implement Design
Proposal Request
Survey Site
Design to Specifications
CAD and Physical Model
Improve Structure
Build Bridge
Identify Technical Problem
Gather Requirements
Plan Stories and Design System
PoC, User and Perf Testing
Improve Structure
QS Validation and Release
Thinking of software development as a Science will help break the bad habit of:
"I don't know what to do so I'll just write code and see what happens..."
A civil engineer wouldn't say:
"I don't know what to do so I'll just start building this bridge and see what happens..."
Effective way to transition from the college mindset of software development to a professional mindset.
Aligns with Capital One's objective of becoming an industry leader in technology.
Important for improving your technical skills and succeeding in the workplace.
As a student:
As a professional:
Your knowledge and experience are your most important professional assets.
Unfortunately, they're expiring assets.
Expand your knowledge portfolio regularly; not only with technical expertise but also Capital One expertise.
Code Reading Competition
https://gist.github.com/ClassicThunder/17f860ec37bc0e304ccc369911f865c8