Software Craftsmanship

Slides:



Advertisements
Similar presentations
Software Engineering CSE470: Process 15 Software Engineering Phases Definition: What? Development: How? Maintenance: Managing change Umbrella Activities:
Advertisements

CS 3500 SE - 1 Software Engineering: It’s Much More Than Programming! Sources: “Software Engineering: A Practitioner’s Approach - Fourth Edition” Pressman,
CS540 Software Design Lecture 1 1 Lecture 1: Introduction to Software Design Anita S. Malik Adapted from Budgen (2003) Chapters 1.
Software Engineering and Design Principles Chapter 1.
Unit 231 Software Engineering Introduction to SWE What is SDLC Phases of SDLC.
R R R CSE870: Advanced Software Engineering (Cheng): Intro to Software Engineering1 Advanced Software Engineering Dr. Cheng Overview of Software Engineering.
Jump to first page 1 System Design (Finalizing Design Specifications) Chapter 3d.
CS350/550 Software Engineering Lecture 1. Class Work The main part of the class is a practical software engineering project, in teams of 3-5 people There.
Applied Software Project Management 1 Introduction Dr. Mengxia Zhu Computer Science Department Southern Illinois University Carbondale.
Planning and Tracking Software Quality Yordan Dimitrov Telerik Corporation
Software Architecture. Agenda " Why architect? " What is architecture? " What does an architect do? " What principles guide the process of architecting?
Essence and Accident in Software Engineering By: Mike Hastings.
Katanosh Morovat.   This concept is a formal approach for identifying the rules that encapsulate the structure, constraint, and control of the operation.
Chapter 5CSA 217 Design in Construction Chapter 5 1.
Planning and Tracking Software Quality.  What Is Software Quality?  Causes of Software Defects  What is Quality Assurance?  Improving the Software.
CPSC 871 John D. McGregor Module 0 Session 1 Introduction.
Top-Down Design and Modular Development
Facts and Fallacies of Software Engineering (Rob Glass) CSE301 University of Sunderland Discussed by Harry R. Erwin, PhD.
Software Engineering Principles. SE Principles Principles are statements describing desirable properties of the product and process.
Introduction to Design. What is Design? 2 minutes Pairs.
ECE450 - Software Engineering II1 ECE450 – Software Engineering II Today: Introduction to Software Architecture.
Lecture 2 Intro. To Software Engineering and Object-Oriented Programming (1/2)
Software Engineering Issues Software Engineering Concepts System Specifications Procedural Design Object-Oriented Design System Testing.
CS223: Software Engineering Lecture 15: Software construction.
Text INTERNAL February 11, 2011 Problem Solving. INTERNAL Tech Republic’s railway department wants a solution Tech Republic’s railway department.
Lecture 2 Intro. To Software Engineering and Object-Oriented Programming (1/2)
INTRODUCTION CSE 470 : Software Engineering. Goals of Software Engineering To produce software that is absolutely correct. To produce software with minimum.
Code Simplicity: Software Design In Open Source Projects Max Kanat-Alexander
TDD Unit tests from a slightly different point of view Katie Dwyer.
Advanced Software Engineering Dr. Cheng
Object Oriented Systems Design
Embedded Systems Software Engineering
Software Design.
EI Architecture Overview/Current Assessment/Technical Architecture
Introduction: Computer programming
Information Systems Development
Top Ten List for Directors of Technology
Fundamentals of Information Systems, Sixth Edition
Creating Our Common Wealth Supporting the Growth of Others
Types for Programs and Proofs
How to use the internet safely and How to protect my personal data?
How to use the internet safely and How to protect my personal data?
Consultation: Your Say ….
C++ coding standard suggestion… Separate reasoning from action, in every block. Hi, this talk is to suggest a rule (or guideline) to simplify C++ code.
Software Life Cycle “What happens in the ‘life’ of software”
Growth Mindset vs Fixed Mindset
Object Oriented Systems Development
Structure We saw early on the importance of algorithms, but what about structuring our code? What's the best way to structure a larger project made of.
Chapter 5 Design in Construction
SOFTWARE ENGINEERING PRESENTATION
Design Thinking Elizabeth Matchefts.
Johanna Rothman Create Technical Excellence Chapter 9
Accidental and Essential Problems Excise Tasks
© Ian Davis 2017 Spring (c) Ian Davis.
Objective of This Course
INEOGroup presents:.
Why Object-oriented Programming?
Need for the subject.
For University Use Only
CSE 403, Winter 2003 Software Engineering
Software Engineering Practice: A Generic View
UNIT 5 EMBEDDED SYSTEM DEVELOPMENT
UNIT 5 EMBEDDED SYSTEM DEVELOPMENT
CS 2530 Intermediate Computing Dr. Schafer
COMPUTATIONAL THINKING COMPUTATIONAL THINKING IN PROGRAMMING
My Top Five Themes – Mark Neff
What Is Good Software(Program)?
REMINDERS: This is the last lecture.
Structure We saw early on the importance of algorithms, but what about structuring our code? What's the best way to structure a larger project made of.
Presentation transcript:

Software Craftsmanship Creating a Culture of Software Craftsmanship -- About ME – Thank everyone for coming 18 years Software Consultant One of my responsibilities to improve software quality @KeithDHar keithdharrison

Agenda Managing Complexity How to creating a culture of software craftsmanship Managing Complexity – primary activity in software development, problems cause when we don’t manage complexity Creating a Culture of Software Craftsmanship can help manage compl

Why Projects Fail Poor Planning Poor Requirements Poor Management Code Complete 2 – Steve Mcconell

Fail For Technical Reasons Uncontrolled Complexity

Accidental Languages IDEs CI/CD Fred Brooks - Mythical Man Month, Paper - no silver bullets 1986 Accidental complexity - problems which engineers create and can fix; for example, the details of writing and optimizing assembly code or the delays caused by batch processing. Languages - Managing memory, high level programming languages IDE – command line tools for compliers to integrated IDEs that do everything for us. Masively decreased over time

Essential Business rules Interactions with real world Algorithms Essential complexity is caused by the problem to be solved, and nothing can remove it; if users want a program to do 30 different things, then those 30 things are essential and the program must do those 30 different things.

How complex? Data from byte to petabyte Millions lines of code Age calculation from DoB Google search data/Netflix movies

What happens if I don’t Manage Complexity? Defects Ever increasing dev times Afraid to change No reuse Unhappy developers Rewrites

Func1() var1 Func4() Func3() var2 var3 Func2() Minimize the amount of essential complexity that anyone’s brain has to deal with at any one time. (Code sample) Dijkstra pointed out that no one’s skull is really big enough to contain a modern computer program (Dijkstra 1972), which means that we as software developers shouldn’t try to cram whole programs into our skulls at once; we should try to organize our programs in such a way that we can safely focus on one part of it at a time. The goal is to minimize the amount of a program you have to think about at any one time. You might think of this as mental juggling—the more mental balls the program requires you to keep in the air at once, the more likely you’ll drop one of the balls, leading to a design or coding error.

Characteristics of Good Design Minimal complexity Ease of maintenance Loose coupling Cohesion Minimal complexity – no overly complex solutions, reduce accidental complexity Ease of maintenance – Write code for people not computers. Minimise thinking Loose coupling – Reduce dependencies (TDD helps with this ) Cohesion- degree to which the elements inside a module belong together. High cohesion is associated with several desirable traits of software including robustness, reliability, reusability, and understandability

Levels of Design Microservices, layer architecture

How do we create a culture of Software Craftsmanship? Put developers at the centre (not process/management) Not a science/engineering discipline or art. Combination of the three. A Craft Process – compare to factory Not just programming but programming well. Putting people at the centre Maintainable code, works today and can be changed tomorrow Not an Engineering discipline but a craft Software Craftsmanship: The New Imperative Paperback by Pete McBreen http://www.amazon.co.uk/Software-Craftsmanship-The-New-Imperative/dp/0201733862

Quality Deadlines Conflicting interests Meeting their deadlines in the short term Making the code maintainable in the long term. Quality -> Maintainability, Usability, Performance Quality

Refactor or hack? What do I name this variable? What do I test? -- Decisions a developer faces -- -> What do I call this variable -> Should these functions be in there own class -> Should I refactor design or hack a solution -> Should I use a library or write from scratch Choices are endless Choices will have a large effect on the short terms and long success of the project. -- Management reviewing all these decisions is impossible -> developers must be trusted to make the right decisions -> A culture must exist to promote this -> How can management create this culture? People before process Call centre worker reading a script Command and control NeoTaylorism - https://itrevolution.com/neo-taylorism-or-devops-anti-patterns/

-- ‘Liars and Outliers’ 4 social pressures that enable us to cooperate with and trust others: American cryptographer, computer security and privacy specialist, and writer. He is the author of several books on general security topics, computer security and cryptography.

Moral Reputational Institutional Security I do it because it’s right I do it because of what others will think of me Reputational I do it because I get rewarded/sanctioned Institutional I do it because I’m forced to Security -> Moral – I do it because it’s right -> Reputational – I do it because of what others will think of me -> Institutional – I do it because I get rewarded/sanctioned -> Security – I do it because I’m forced to

EXAMPLES

Reputational Reviews Code reviews Pair programming Reputational- I’ll write good code because others will see my bad code.   Institutional – I’ll write good code because I’ll be asked to rewrite my bad code. Reputational

Moral Group learning Coding dojos In house training sessions I’ll write good code because it’s the right thing to do and that’s what others are doing. Moral

Institutional Moral Project Management Quality Related Tasks Moral – I’ll write good code because I like my fellow employee and don’t want them to be stuck with my bad code

Conclusion Create a culture of software culture to manage complexity Think about your culture Think about your culture Try these ideas Think up your own Share them! #CultureSoftCraft

CODECRAFTCONF FRIDAY 14th SEPT 2018 ROYAL COLLEGE OF PHYSICIANS AND SURGEONS, GLASGOW

@KeithDHar keithdharrison Questions?