SlideShare ist ein Scribd-Unternehmen logo
1 von 64
Downloaden Sie, um offline zu lesen
Reference:
The Pragmatic Programmer: From
Journeyman to Master
by Andrew Hunt and David Thomas
Addison-Wesley Professional, October 1999
ISBN-13: 078-5342616224
ISBN-10: 020161622X
http://www.amazon.com/The-Pragmatic-
Programmer-Journeyman-
Master/dp/020161622X
Thanks:
Jeff Atwood aka The Coding Horror
Pragmatic adjective prag·mat·ic prag-ˈma-tik - dealing with
the problems that exist in a specific situation in a reasonable and
logical way instead of depending on ideas and theories
1. Care About Your Craft
2. Think! About Your Work
3. Provide Options, Don't Make Lame Excuses
4. Don't Live with Broken Windows
5. Be a Catalyst for Change
6. Remember the Big Picture
7. Make Quality a Requirements Issue
8. Invest Regularly in Your Knowledge
Portfolio
9. Critically Analyze What You Read and Hear
10. It's Both What You Say and the Way You
Say It
11. DRY – Don't Repeat Yourself
12. Make It Easy to Reuse
13. Eliminate Effects Between Unrelated Things
14. There Are No Final Decisions
15. Use Tracer Bullets to Find the Target
16. Prototype to Learn
17. Program Close to the Problem Domain
18. Estimate to Avoid Surprises
19. Iterate the Schedule with the Code
20. Keep Knowledge in Plain Text
21. Use the Power of Command Shells
22. Use a Single Editor Well
23. Always Use Source Code Control
24. Fix the Problem, Not the Blame
25. Don't Panic When Debugging
26. "select" Isn't Broken.
27. Don't Assume It – Prove It
28. Learn a Text Manipulation Language
29. Write Code That Writes Code
30. You Can't Write Perfect Software
31. Design with Contracts
32. Crash Early
33. Use Assertions to Prevent the Impossible
34. Use Exceptions for Exceptional Problems
35. Finish What You Start
36. Minimize Coupling Between Modules
37. Configure, Don't Integrate
38. Put Abstractions in Code, Details in Metadata
39. Analyze Workflow to Improve Concurrency
40. Design Using Services
41. Always Design for Concurrency
42. Separate Views from Models
43. Use Blackboards to Coordinate Workflow
44. Don't Program by Coincidence
45. Estimate the Order of Your Algorithms
46. Test Your Estimates
47. Refactor Early, Refactor Often
48. Design to Test
49. Test Your Software, or Your Users Will
50. Don't Use Wizard Code You Don't Understand
51. Don't Gather Requirements – Dig for Them
52. Workwith a User to Think Like a User
53. Abstractions Live Longer than Details
54. Use a Project Glossary
55. Don't Think Outside the Box – Find the Box
56. Start When You're Ready
57. Some Things Are Better Done than Described
58. Don't Be a Slave to Formal Methods
59. Costly Tools Don't Produce Better Designs
60. Organize Teams Around Functionality
61. Don't Use Manual Procedures
62. Test Early. Test Often. Test Automatically
63. Coding Ain't Done 'Til All the Tests Run.
64. Use Saboteurs to Test Your Testing.
65. Test State Coverage, Not Code Coverage
66. Find Bugs Once
67. English is Just a Programming Language
68. Build Documentation In, Don't Bolt It On
69. Gently Exceed Your Users' Expectations
70. Sign Your Work
1. Care About Your Craft
2. Think! About Your Work
3. Provide Options, Don't Make Lame Excuses
4. Don't Live with Broken Windows
5. Be a Catalyst for Change
6. Remember the Big Picture
7. Make Quality a Requirements Issue
8. Invest Regularly in Your Knowledge
Portfolio
9. Critically Analyze What You Read and Hear
10. It's Both What You Say and the Way You
Say It
11. DRY – Don't Repeat Yourself
12. Make It Easy to Reuse
13. Eliminate Effects Between Unrelated Things
14. There Are No Final Decisions
15. Use Tracer Bullets to Find the Target
16. Prototype to Learn
17. Program Close to the Problem Domain
18. Estimate to Avoid Surprises
19. Iterate the Schedule with the Code
20. Keep Knowledge in Plain Text
21. Use the Power of Command Shells
22. Use a Single Editor Well
23. Always Use Source Code Control
24. Fix the Problem, Not the Blame
25. Don't Panic When Debugging
26. "Select" Isn't Broken
27. Don't Assume It – Prove It
28. Learn a Text Manipulation Language
29. Write Code That Writes Code
30. You Can't Write Perfect Software
31. Design with Contracts
32. Crash Early
33. Use Assertions to Prevent the Impossible
34. Use Exceptions for Exceptional Problems
35. Finish What You Start
36. Minimize Coupling Between Modules
37. Configure, Don't Integrate
38. Put Abstractions in Code, Details in Metadata
39. Analyze Workflow to Improve Concurrency
40. Design Using Services
41. Always Design for Concurrency
42. Separate Views from Models
43. Use Blackboards to Coordinate Workflow
44. Don't Program by Coincidence
45. Estimate the Order of Your Algorithms
46. Test Your Estimates
47. Refactor Early, Refactor Often
48. Design to Test
49. Test Your Software, or Your Users Will
50. Don't Use Wizard Code You Don't Understand
51. Don't Gather Requirements – Dig for Them
52. Work with a User to Think Like a User
53. Abstractions Live Longer than Details
54. Use a Project Glossary
55. Don't Think Outside the Box – Find the Box
56. Start When You're Ready
57. Some Things Are Better Done than Described
58. Don't Be a Slave to Formal Methods
59. Costly Tools Don't Produce Better Designs
60. Organize Teams Around Functionality
61. Don't Use Manual Procedures
62. Test Early. Test Often. Test Automatically
63. Coding Ain't Done 'Til All the Tests Run
64. Use Saboteurs to Test Your Testing.
65. Test State Coverage, Not Code Coverage
66. Find Bugs Once
67. English is Just a Programming Language
68. Build Documentation In, Don't Bolt It On
69. Gently Exceed Your Users' Expectations
70. Sign Your Work
1. Care About Your Craft
2. Think! About Your Work
3. Provide Options, Don't Make Lame Excuses
4. Don't Live with Broken Windows
5. Be a Catalyst for Change
6. Remember the Big Picture
7. Make Quality a Requirements Issue
8. Invest Regularly in Your Knowledge
Portfolio
9. Critically Analyze What You Read and Hear
10. It's Both What You Say and the Way You
Say It
11. DRY – Don't Repeat Yourself
12. Make It Easy to Reuse
13. Eliminate Effects Between Unrelated Things
14. There Are No Final Decisions
15. Use Tracer Bullets to Find the Target
16. Prototype to Learn
17. Program Close to the Problem Domain
18. Estimate to Avoid Surprises
19. Iterate the Schedule with the Code
20. Keep Knowledge in Plain Text
21. Use the Power of Command Shells
22. Use a Single Editor Well
23. Always Use Source Code Control
24. Fix the Problem, Not the Blame
25. Don't Panic When Debugging
26. "Select" Isn't Broken
27. Don't Assume It – Prove It
28. Learn a Text Manipulation Language
29. Write Code That Writes Code
30. You Can't Write Perfect Software
31. Design with Contracts
32. Crash Early
33. Use Assertions to Prevent the Impossible
34. Use Exceptions for Exceptional Problems
35. Finish What You Start
36. Minimize Coupling Between Modules
37. Configure, Don't Integrate
38. Put Abstractions in Code, Details in Metadata
39. Analyze Workflow to Improve Concurrency
40. Design Using Services
41. Always Design for Concurrency
42. Separate Views from Models
43. Use Blackboards to Coordinate Workflow
44. Don't Program by Coincidence
45. Estimate the Order of Your Algorithms
46. Test Your Estimates
47. Refactor Early, Refactor Often
48. Design to Test
49. Test Your Software, or Your Users Will
50. Don't Use Wizard Code You Don't Understand
51. Don't Gather Requirements – Dig for Them
52. Work with a User to Think Like a User
53. Abstractions Live Longer than Details
54. Use a Project Glossary
55. Don't Think Outside the Box – Find the Box
56. Start When You're Ready
57. Some Things Are Better Done than Described
58. Don't Be a Slave to Formal Methods
59. Costly Tools Don't Produce Better Designs
60. Organize Teams Around Functionality
61. Don't Use Manual Procedures
62. Test Early. Test Often. Test Automatically
63. Coding Ain't Done 'Til All the Tests Run
64. Use Saboteurs to Test Your Testing.
65. Test State Coverage, Not Code Coverage
66. Find Bugs Once
67. English is Just a Programming Language
68. Build Documentation In, Don't Bolt It On
69. Gently Exceed Your Users' Expectations
70. Sign Your Work
1. Care About Your Craft
2. Think! About Your Work
3. Provide Options, Don't Make Lame Excuses
4. Don't Live with Broken Windows
5. Be a Catalyst for Change
6. Remember the Big Picture
7. Make Quality a Requirements Issue
8. Invest Regularly in Your Knowledge
Portfolio
9. Critically Analyze What You Read and Hear
10. It's Both What You Say and the Way You
Say It
11. DRY – Don't Repeat Yourself
12. Make It Easy to Reuse
13. Eliminate Effects Between Unrelated Things
14. There Are No Final Decisions
15. Use Tracer Bullets to Find the Target
16. Prototype to Learn
17. Program Close to the Problem Domain
18. Estimate to Avoid Surprises
19. Iterate the Schedule with the Code
20. Keep Knowledge in Plain Text
21. Use the Power of Command Shells
22. Use a Single Editor Well
23. Always Use Source Code Control
24. Fix the Problem, Not the Blame
25. Don't Panic When Debugging
26. "Select" Isn't Broken
27. Don't Assume It – Prove It
28. Learn a Text Manipulation Language
29. Write Code That Writes Code
30. You Can't Write Perfect Software
31. Design with Contracts
32. Crash Early
33. Use Assertions to Prevent the Impossible
34. Use Exceptions for Exceptional Problems
35. Finish What You Start
36. Minimize Coupling Between Modules
37. Configure, Don't Integrate
38. Put Abstractions in Code, Details in Metadata
39. Analyze Workflow to Improve Concurrency
40. Design Using Services
41. Always Design for Concurrency
42. Separate Views from Models
43. Use Blackboards to Coordinate Workflow
44. Don't Program by Coincidence
45. Estimate the Order of Your Algorithms
46. Test Your Estimates
47. Refactor Early, Refactor Often
48. Design to Test
49. Test Your Software, or Your Users Will
50. Don't Use Wizard Code You Don't Understand
51. Don't Gather Requirements – Dig for Them
52. Work with a User to Think Like a User
53. Abstractions Live Longer than Details
54. Use a Project Glossary
55. Don't Think Outside the Box – Find the Box
56. Start When You're Ready
57. Some Things Are Better Done than Described
58. Don't Be a Slave to Formal Methods
59. Costly Tools Don't Produce Better Designs
60. Organize Teams Around Functionality
61. Don't Use Manual Procedures
62. Test Early. Test Often. Test Automatically
63. Coding Ain't Done 'Til All the Tests Run
64. Use Saboteurs to Test Your Testing.
65. Test State Coverage, Not Code Coverage
66. Find Bugs Once
67. English is Just a Programming Language
68. Build Documentation In, Don't Bolt It On
69. Gently Exceed Your Users' Expectations
70. Sign Your Work
1. Care About Your Craft
2. Think! About Your Work
3. Provide Options, Don't Make Lame Excuses
4. Don't Live with Broken Windows
5. Remember the Big Picture
6. Invest Regularly in Your Knowledge
Portfolio
7. DRY – Don't Repeat Yourself
8. Make It Easy to Reuse
9. Prototype to Learn
10. Estimate to Avoid Surprises
11. Fix the Problem, Not the Blame
12. Don't Panic When Debugging
13. "Select" Isn't Broken
14. You Can't Write Perfect Software
15. Design with Contracts
16. Crash Early
17. Minimize Coupling Between Modules
18. Don't Program by Coincidence
19. Refactor Early, Refactor Often
20. Don't Gather Requirements – Dig for Them
21. Some Things Are Better Done than
Described
22. Don't Be a Slave to Formal Methods
23. Don't Use Manual Procedures
24. Test Early. Test Often. Test Automatically
25. Find Bugs Once
26. English is Just a Programming Language
27. Gently Exceed Your Users' Expectations
28. Sign Your Work
Computing-Tabulating-Recording Company (CTR)
https://www.youtube.com/watch?v=QL1dQuK5Wsg
Thomas John
Watson Sr. -
chairman and CEO
of International
Business Machines
(IBM)
“The trouble with every one of us is that we don't think
enough. We don't get paid for working with our feet —
we get paid for working with our heads” (1911)
Criminal Procedure Law Section 140.50
(code)
BWM ZX-6 Concept
3rd year students of Transportation Design School at Turin Based IED (Istituto Europeo di Design)
* - although prototyping does not result in “real” solution, there is always a temptation to use it as one ;(
Prototypes may ignore:
- Correctness (use dummy data)
- Completeness (limited functionality*)
- Robustness (no error checking)
- Style (no documentation, even UI)
*YAGNI principle – You Ain't Gonna Need It
Надійність
Accuracy: The closeness of a given measurement to its true
value, i.e. whether the measure is correct.
Precision: The stability of that measurement when repeated
many times, i.e. whether the measurement is consistent with
other measurements.
Accuracy – достовірність, Precision - збіжність
* - not really, but we are not talking about really specific complex cases here
* - Keep It Simple Stupid ;)
Keywords:
- Code quality
- Continuous Integration
Pragmatic adjective prag·mat·ic prag-ˈma-tik - dealing with the problems that exist in a specific situation in a
reasonable and logical way instead of depending on ideas and theories
Pragmatic adjective prag·mat·ic prag-ˈma-tik - dealing with the problems that exist in a specific situation in a
reasonable and logical way instead of depending on ideas and theories
Pragmatic adjective prag·mat·ic prag-ˈma-tik - dealing with the problems that exist in a specific situation in a
reasonable and logical way instead of depending on ideas and theories
Pragmatic adjective prag·mat·ic prag-ˈma-tik - dealing with the problems that exist in a specific situation in a
reasonable and logical way instead of depending on ideas and theories
Pragmatic adjective prag·mat·ic prag-ˈma-tik - dealing with the problems that exist in a specific situation in a
reasonable and logical way instead of depending on ideas and theories
Apollo 13 За все берется, ничего не удается
Tough means we are forever accountable for
what we do or what we fail to do.
Competent means we will never take anything
for granted.
Spaceflight will never tolerate carelessness,
incapacity, and neglect – космічний політ
ніколи не потерпить недбалість,
недієздатність і халатність.
Ears, Open. Eyeballs, Click. (2005 documentary by Canaan Brumley) Generation Kill (2008 HBO Mini-series)
Oleksandr Valetskyy - Pragmatic programmer. Theory and practice
Oleksandr Valetskyy - Pragmatic programmer. Theory and practice
Oleksandr Valetskyy - Pragmatic programmer. Theory and practice

Weitere ähnliche Inhalte

Ähnlich wie Oleksandr Valetskyy - Pragmatic programmer. Theory and practice

Basic software engineering principles - Session 1
Basic software engineering principles - Session 1Basic software engineering principles - Session 1
Basic software engineering principles - Session 1LahiruWijewardana1
 
30% faster coder on-boarding when you have a code cookbook
30% faster coder on-boarding when you have a code cookbook30% faster coder on-boarding when you have a code cookbook
30% faster coder on-boarding when you have a code cookbookGabriel Paunescu 🤖
 
Cinci ug-january2011-anti-patterns
Cinci ug-january2011-anti-patternsCinci ug-january2011-anti-patterns
Cinci ug-january2011-anti-patternsSteven Smith
 
GOOD PROGRAMMING
GOOD PROGRAMMINGGOOD PROGRAMMING
GOOD PROGRAMMINGBilal Zaka
 
Clean Code - Part 2
Clean Code - Part 2Clean Code - Part 2
Clean Code - Part 2Knoldus Inc.
 
Building a CAD Proving Ground – Robert Green, Robert Green Consulting Group
Building a CAD Proving Ground – Robert Green, Robert Green Consulting GroupBuilding a CAD Proving Ground – Robert Green, Robert Green Consulting Group
Building a CAD Proving Ground – Robert Green, Robert Green Consulting GroupSynergis Engineering Design Solutions
 
[DevDay2018] Let’s all get along. Clean Code please! - By: Christophe K. Ngo,...
[DevDay2018] Let’s all get along. Clean Code please! - By: Christophe K. Ngo,...[DevDay2018] Let’s all get along. Clean Code please! - By: Christophe K. Ngo,...
[DevDay2018] Let’s all get along. Clean Code please! - By: Christophe K. Ngo,...DevDay.org
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven DevelopmentSamnang Chhun
 
Software engineering 101 - The basics you should hear about at least once
Software engineering 101 - The basics you should hear about at least onceSoftware engineering 101 - The basics you should hear about at least once
Software engineering 101 - The basics you should hear about at least onceAlexey (Mr_Mig) Migutsky
 
How To Think Like A Programmer (1).pptx
How To Think Like A Programmer (1).pptxHow To Think Like A Programmer (1).pptx
How To Think Like A Programmer (1).pptxanesthesia2023
 
Upwork time log and difficulty 20160523
Upwork time log and difficulty 20160523Upwork time log and difficulty 20160523
Upwork time log and difficulty 20160523Sharon Liu
 
Collective ownership in agile teams
Collective ownership in agile teamsCollective ownership in agile teams
Collective ownership in agile teamsJyaasa Technologies
 
Software Development Essential Skills
Software Development Essential SkillsSoftware Development Essential Skills
Software Development Essential SkillsJohn Choi
 

Ähnlich wie Oleksandr Valetskyy - Pragmatic programmer. Theory and practice (20)

Basic software engineering principles - Session 1
Basic software engineering principles - Session 1Basic software engineering principles - Session 1
Basic software engineering principles - Session 1
 
30% faster coder on-boarding when you have a code cookbook
30% faster coder on-boarding when you have a code cookbook30% faster coder on-boarding when you have a code cookbook
30% faster coder on-boarding when you have a code cookbook
 
Cinci ug-january2011-anti-patterns
Cinci ug-january2011-anti-patternsCinci ug-january2011-anti-patterns
Cinci ug-january2011-anti-patterns
 
Code Review
Code ReviewCode Review
Code Review
 
Best pratice
Best praticeBest pratice
Best pratice
 
GOOD PROGRAMMING
GOOD PROGRAMMINGGOOD PROGRAMMING
GOOD PROGRAMMING
 
Clean Code - Part 2
Clean Code - Part 2Clean Code - Part 2
Clean Code - Part 2
 
Building a CAD Proving Ground – Robert Green, Robert Green Consulting Group
Building a CAD Proving Ground – Robert Green, Robert Green Consulting GroupBuilding a CAD Proving Ground – Robert Green, Robert Green Consulting Group
Building a CAD Proving Ground – Robert Green, Robert Green Consulting Group
 
UI vs Speed
UI vs SpeedUI vs Speed
UI vs Speed
 
[DevDay2018] Let’s all get along. Clean Code please! - By: Christophe K. Ngo,...
[DevDay2018] Let’s all get along. Clean Code please! - By: Christophe K. Ngo,...[DevDay2018] Let’s all get along. Clean Code please! - By: Christophe K. Ngo,...
[DevDay2018] Let’s all get along. Clean Code please! - By: Christophe K. Ngo,...
 
Pragmatic programmer 2
Pragmatic programmer 2Pragmatic programmer 2
Pragmatic programmer 2
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Software engineering 101 - The basics you should hear about at least once
Software engineering 101 - The basics you should hear about at least onceSoftware engineering 101 - The basics you should hear about at least once
Software engineering 101 - The basics you should hear about at least once
 
Put to the Test
Put to the TestPut to the Test
Put to the Test
 
How To Think Like A Programmer (1).pptx
How To Think Like A Programmer (1).pptxHow To Think Like A Programmer (1).pptx
How To Think Like A Programmer (1).pptx
 
Tdd
TddTdd
Tdd
 
Upwork time log and difficulty 20160523
Upwork time log and difficulty 20160523Upwork time log and difficulty 20160523
Upwork time log and difficulty 20160523
 
Collective ownership in agile teams
Collective ownership in agile teamsCollective ownership in agile teams
Collective ownership in agile teams
 
Object Calisthenics in Objective-C
Object Calisthenics in Objective-CObject Calisthenics in Objective-C
Object Calisthenics in Objective-C
 
Software Development Essential Skills
Software Development Essential SkillsSoftware Development Essential Skills
Software Development Essential Skills
 

Kürzlich hochgeladen

Weeding your micro service landscape.pdf
Weeding your micro service landscape.pdfWeeding your micro service landscape.pdf
Weeding your micro service landscape.pdftimtebeek1
 
Lessons Learned from Building a Serverless Notifications System.pdf
Lessons Learned from Building a Serverless Notifications System.pdfLessons Learned from Building a Serverless Notifications System.pdf
Lessons Learned from Building a Serverless Notifications System.pdfSrushith Repakula
 
Transformer Neural Network Use Cases with Links
Transformer Neural Network Use Cases with LinksTransformer Neural Network Use Cases with Links
Transformer Neural Network Use Cases with LinksJinanKordab
 
A Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdfA Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdfICS
 
Community is Just as Important as Code by Andrea Goulet
Community is Just as Important as Code by Andrea GouletCommunity is Just as Important as Code by Andrea Goulet
Community is Just as Important as Code by Andrea GouletAndrea Goulet
 
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)Gáspár Nagy
 
Microsoft365_Dev_Security_2024_05_16.pdf
Microsoft365_Dev_Security_2024_05_16.pdfMicrosoft365_Dev_Security_2024_05_16.pdf
Microsoft365_Dev_Security_2024_05_16.pdfMarkus Moeller
 
Optimizing Operations by Aligning Resources with Strategic Objectives Using O...
Optimizing Operations by Aligning Resources with Strategic Objectives Using O...Optimizing Operations by Aligning Resources with Strategic Objectives Using O...
Optimizing Operations by Aligning Resources with Strategic Objectives Using O...OnePlan Solutions
 
Automate your OpenSIPS config tests - OpenSIPS Summit 2024
Automate your OpenSIPS config tests - OpenSIPS Summit 2024Automate your OpenSIPS config tests - OpenSIPS Summit 2024
Automate your OpenSIPS config tests - OpenSIPS Summit 2024Andreas Granig
 
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...naitiksharma1124
 
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypseTomasz Kowalczewski
 
OpenChain @ LF Japan Executive Briefing - May 2024
OpenChain @ LF Japan Executive Briefing - May 2024OpenChain @ LF Japan Executive Briefing - May 2024
OpenChain @ LF Japan Executive Briefing - May 2024Shane Coughlan
 
The Strategic Impact of Buying vs Building in Test Automation
The Strategic Impact of Buying vs Building in Test AutomationThe Strategic Impact of Buying vs Building in Test Automation
The Strategic Impact of Buying vs Building in Test AutomationElement34
 
how-to-download-files-safely-from-the-internet.pdf
how-to-download-files-safely-from-the-internet.pdfhow-to-download-files-safely-from-the-internet.pdf
how-to-download-files-safely-from-the-internet.pdfMehmet Akar
 
Effective Strategies for Wix's Scaling challenges - GeeCon
Effective Strategies for Wix's Scaling challenges - GeeConEffective Strategies for Wix's Scaling challenges - GeeCon
Effective Strategies for Wix's Scaling challenges - GeeConNatan Silnitsky
 
BusinessGPT - Security and Governance for Generative AI
BusinessGPT  - Security and Governance for Generative AIBusinessGPT  - Security and Governance for Generative AI
BusinessGPT - Security and Governance for Generative AIAGATSoftware
 

Kürzlich hochgeladen (20)

Weeding your micro service landscape.pdf
Weeding your micro service landscape.pdfWeeding your micro service landscape.pdf
Weeding your micro service landscape.pdf
 
Lessons Learned from Building a Serverless Notifications System.pdf
Lessons Learned from Building a Serverless Notifications System.pdfLessons Learned from Building a Serverless Notifications System.pdf
Lessons Learned from Building a Serverless Notifications System.pdf
 
Transformer Neural Network Use Cases with Links
Transformer Neural Network Use Cases with LinksTransformer Neural Network Use Cases with Links
Transformer Neural Network Use Cases with Links
 
A Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdfA Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdf
 
Community is Just as Important as Code by Andrea Goulet
Community is Just as Important as Code by Andrea GouletCommunity is Just as Important as Code by Andrea Goulet
Community is Just as Important as Code by Andrea Goulet
 
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
Tree in the Forest - Managing Details in BDD Scenarios (live2test 2024)
 
Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...
Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...
Abortion Clinic In Pretoria ](+27832195400*)[ 🏥 Safe Abortion Pills in Pretor...
 
Abortion Clinic In Polokwane ](+27832195400*)[ 🏥 Safe Abortion Pills in Polok...
Abortion Clinic In Polokwane ](+27832195400*)[ 🏥 Safe Abortion Pills in Polok...Abortion Clinic In Polokwane ](+27832195400*)[ 🏥 Safe Abortion Pills in Polok...
Abortion Clinic In Polokwane ](+27832195400*)[ 🏥 Safe Abortion Pills in Polok...
 
Microsoft365_Dev_Security_2024_05_16.pdf
Microsoft365_Dev_Security_2024_05_16.pdfMicrosoft365_Dev_Security_2024_05_16.pdf
Microsoft365_Dev_Security_2024_05_16.pdf
 
Optimizing Operations by Aligning Resources with Strategic Objectives Using O...
Optimizing Operations by Aligning Resources with Strategic Objectives Using O...Optimizing Operations by Aligning Resources with Strategic Objectives Using O...
Optimizing Operations by Aligning Resources with Strategic Objectives Using O...
 
Automate your OpenSIPS config tests - OpenSIPS Summit 2024
Automate your OpenSIPS config tests - OpenSIPS Summit 2024Automate your OpenSIPS config tests - OpenSIPS Summit 2024
Automate your OpenSIPS config tests - OpenSIPS Summit 2024
 
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...
COMPUTER AND ITS COMPONENTS PPT.by naitik sharma Class 9th A mittal internati...
 
Abortion Clinic In Springs ](+27832195400*)[ 🏥 Safe Abortion Pills in Springs...
Abortion Clinic In Springs ](+27832195400*)[ 🏥 Safe Abortion Pills in Springs...Abortion Clinic In Springs ](+27832195400*)[ 🏥 Safe Abortion Pills in Springs...
Abortion Clinic In Springs ](+27832195400*)[ 🏥 Safe Abortion Pills in Springs...
 
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
 
OpenChain @ LF Japan Executive Briefing - May 2024
OpenChain @ LF Japan Executive Briefing - May 2024OpenChain @ LF Japan Executive Briefing - May 2024
OpenChain @ LF Japan Executive Briefing - May 2024
 
Abortion Clinic In Johannesburg ](+27832195400*)[ 🏥 Safe Abortion Pills in Jo...
Abortion Clinic In Johannesburg ](+27832195400*)[ 🏥 Safe Abortion Pills in Jo...Abortion Clinic In Johannesburg ](+27832195400*)[ 🏥 Safe Abortion Pills in Jo...
Abortion Clinic In Johannesburg ](+27832195400*)[ 🏥 Safe Abortion Pills in Jo...
 
The Strategic Impact of Buying vs Building in Test Automation
The Strategic Impact of Buying vs Building in Test AutomationThe Strategic Impact of Buying vs Building in Test Automation
The Strategic Impact of Buying vs Building in Test Automation
 
how-to-download-files-safely-from-the-internet.pdf
how-to-download-files-safely-from-the-internet.pdfhow-to-download-files-safely-from-the-internet.pdf
how-to-download-files-safely-from-the-internet.pdf
 
Effective Strategies for Wix's Scaling challenges - GeeCon
Effective Strategies for Wix's Scaling challenges - GeeConEffective Strategies for Wix's Scaling challenges - GeeCon
Effective Strategies for Wix's Scaling challenges - GeeCon
 
BusinessGPT - Security and Governance for Generative AI
BusinessGPT  - Security and Governance for Generative AIBusinessGPT  - Security and Governance for Generative AI
BusinessGPT - Security and Governance for Generative AI
 

Oleksandr Valetskyy - Pragmatic programmer. Theory and practice

  • 1.
  • 2.
  • 3. Reference: The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt and David Thomas Addison-Wesley Professional, October 1999 ISBN-13: 078-5342616224 ISBN-10: 020161622X http://www.amazon.com/The-Pragmatic- Programmer-Journeyman- Master/dp/020161622X Thanks: Jeff Atwood aka The Coding Horror
  • 4. Pragmatic adjective prag·mat·ic prag-ˈma-tik - dealing with the problems that exist in a specific situation in a reasonable and logical way instead of depending on ideas and theories
  • 5. 1. Care About Your Craft 2. Think! About Your Work 3. Provide Options, Don't Make Lame Excuses 4. Don't Live with Broken Windows 5. Be a Catalyst for Change 6. Remember the Big Picture 7. Make Quality a Requirements Issue 8. Invest Regularly in Your Knowledge Portfolio 9. Critically Analyze What You Read and Hear 10. It's Both What You Say and the Way You Say It 11. DRY – Don't Repeat Yourself 12. Make It Easy to Reuse 13. Eliminate Effects Between Unrelated Things 14. There Are No Final Decisions 15. Use Tracer Bullets to Find the Target 16. Prototype to Learn 17. Program Close to the Problem Domain 18. Estimate to Avoid Surprises 19. Iterate the Schedule with the Code 20. Keep Knowledge in Plain Text 21. Use the Power of Command Shells 22. Use a Single Editor Well 23. Always Use Source Code Control 24. Fix the Problem, Not the Blame 25. Don't Panic When Debugging 26. "select" Isn't Broken. 27. Don't Assume It – Prove It 28. Learn a Text Manipulation Language 29. Write Code That Writes Code 30. You Can't Write Perfect Software 31. Design with Contracts 32. Crash Early 33. Use Assertions to Prevent the Impossible 34. Use Exceptions for Exceptional Problems 35. Finish What You Start 36. Minimize Coupling Between Modules 37. Configure, Don't Integrate 38. Put Abstractions in Code, Details in Metadata 39. Analyze Workflow to Improve Concurrency 40. Design Using Services 41. Always Design for Concurrency 42. Separate Views from Models 43. Use Blackboards to Coordinate Workflow 44. Don't Program by Coincidence 45. Estimate the Order of Your Algorithms 46. Test Your Estimates 47. Refactor Early, Refactor Often 48. Design to Test 49. Test Your Software, or Your Users Will 50. Don't Use Wizard Code You Don't Understand 51. Don't Gather Requirements – Dig for Them 52. Workwith a User to Think Like a User 53. Abstractions Live Longer than Details 54. Use a Project Glossary 55. Don't Think Outside the Box – Find the Box 56. Start When You're Ready 57. Some Things Are Better Done than Described 58. Don't Be a Slave to Formal Methods 59. Costly Tools Don't Produce Better Designs 60. Organize Teams Around Functionality 61. Don't Use Manual Procedures 62. Test Early. Test Often. Test Automatically 63. Coding Ain't Done 'Til All the Tests Run. 64. Use Saboteurs to Test Your Testing. 65. Test State Coverage, Not Code Coverage 66. Find Bugs Once 67. English is Just a Programming Language 68. Build Documentation In, Don't Bolt It On 69. Gently Exceed Your Users' Expectations 70. Sign Your Work
  • 6.
  • 7.
  • 8.
  • 9. 1. Care About Your Craft 2. Think! About Your Work 3. Provide Options, Don't Make Lame Excuses 4. Don't Live with Broken Windows 5. Be a Catalyst for Change 6. Remember the Big Picture 7. Make Quality a Requirements Issue 8. Invest Regularly in Your Knowledge Portfolio 9. Critically Analyze What You Read and Hear 10. It's Both What You Say and the Way You Say It 11. DRY – Don't Repeat Yourself 12. Make It Easy to Reuse 13. Eliminate Effects Between Unrelated Things 14. There Are No Final Decisions 15. Use Tracer Bullets to Find the Target 16. Prototype to Learn 17. Program Close to the Problem Domain 18. Estimate to Avoid Surprises 19. Iterate the Schedule with the Code 20. Keep Knowledge in Plain Text 21. Use the Power of Command Shells 22. Use a Single Editor Well 23. Always Use Source Code Control 24. Fix the Problem, Not the Blame 25. Don't Panic When Debugging 26. "Select" Isn't Broken 27. Don't Assume It – Prove It 28. Learn a Text Manipulation Language 29. Write Code That Writes Code 30. You Can't Write Perfect Software 31. Design with Contracts 32. Crash Early 33. Use Assertions to Prevent the Impossible 34. Use Exceptions for Exceptional Problems 35. Finish What You Start 36. Minimize Coupling Between Modules 37. Configure, Don't Integrate 38. Put Abstractions in Code, Details in Metadata 39. Analyze Workflow to Improve Concurrency 40. Design Using Services 41. Always Design for Concurrency 42. Separate Views from Models 43. Use Blackboards to Coordinate Workflow 44. Don't Program by Coincidence 45. Estimate the Order of Your Algorithms 46. Test Your Estimates 47. Refactor Early, Refactor Often 48. Design to Test 49. Test Your Software, or Your Users Will 50. Don't Use Wizard Code You Don't Understand 51. Don't Gather Requirements – Dig for Them 52. Work with a User to Think Like a User 53. Abstractions Live Longer than Details 54. Use a Project Glossary 55. Don't Think Outside the Box – Find the Box 56. Start When You're Ready 57. Some Things Are Better Done than Described 58. Don't Be a Slave to Formal Methods 59. Costly Tools Don't Produce Better Designs 60. Organize Teams Around Functionality 61. Don't Use Manual Procedures 62. Test Early. Test Often. Test Automatically 63. Coding Ain't Done 'Til All the Tests Run 64. Use Saboteurs to Test Your Testing. 65. Test State Coverage, Not Code Coverage 66. Find Bugs Once 67. English is Just a Programming Language 68. Build Documentation In, Don't Bolt It On 69. Gently Exceed Your Users' Expectations 70. Sign Your Work
  • 10. 1. Care About Your Craft 2. Think! About Your Work 3. Provide Options, Don't Make Lame Excuses 4. Don't Live with Broken Windows 5. Be a Catalyst for Change 6. Remember the Big Picture 7. Make Quality a Requirements Issue 8. Invest Regularly in Your Knowledge Portfolio 9. Critically Analyze What You Read and Hear 10. It's Both What You Say and the Way You Say It 11. DRY – Don't Repeat Yourself 12. Make It Easy to Reuse 13. Eliminate Effects Between Unrelated Things 14. There Are No Final Decisions 15. Use Tracer Bullets to Find the Target 16. Prototype to Learn 17. Program Close to the Problem Domain 18. Estimate to Avoid Surprises 19. Iterate the Schedule with the Code 20. Keep Knowledge in Plain Text 21. Use the Power of Command Shells 22. Use a Single Editor Well 23. Always Use Source Code Control 24. Fix the Problem, Not the Blame 25. Don't Panic When Debugging 26. "Select" Isn't Broken 27. Don't Assume It – Prove It 28. Learn a Text Manipulation Language 29. Write Code That Writes Code 30. You Can't Write Perfect Software 31. Design with Contracts 32. Crash Early 33. Use Assertions to Prevent the Impossible 34. Use Exceptions for Exceptional Problems 35. Finish What You Start 36. Minimize Coupling Between Modules 37. Configure, Don't Integrate 38. Put Abstractions in Code, Details in Metadata 39. Analyze Workflow to Improve Concurrency 40. Design Using Services 41. Always Design for Concurrency 42. Separate Views from Models 43. Use Blackboards to Coordinate Workflow 44. Don't Program by Coincidence 45. Estimate the Order of Your Algorithms 46. Test Your Estimates 47. Refactor Early, Refactor Often 48. Design to Test 49. Test Your Software, or Your Users Will 50. Don't Use Wizard Code You Don't Understand 51. Don't Gather Requirements – Dig for Them 52. Work with a User to Think Like a User 53. Abstractions Live Longer than Details 54. Use a Project Glossary 55. Don't Think Outside the Box – Find the Box 56. Start When You're Ready 57. Some Things Are Better Done than Described 58. Don't Be a Slave to Formal Methods 59. Costly Tools Don't Produce Better Designs 60. Organize Teams Around Functionality 61. Don't Use Manual Procedures 62. Test Early. Test Often. Test Automatically 63. Coding Ain't Done 'Til All the Tests Run 64. Use Saboteurs to Test Your Testing. 65. Test State Coverage, Not Code Coverage 66. Find Bugs Once 67. English is Just a Programming Language 68. Build Documentation In, Don't Bolt It On 69. Gently Exceed Your Users' Expectations 70. Sign Your Work
  • 11. 1. Care About Your Craft 2. Think! About Your Work 3. Provide Options, Don't Make Lame Excuses 4. Don't Live with Broken Windows 5. Be a Catalyst for Change 6. Remember the Big Picture 7. Make Quality a Requirements Issue 8. Invest Regularly in Your Knowledge Portfolio 9. Critically Analyze What You Read and Hear 10. It's Both What You Say and the Way You Say It 11. DRY – Don't Repeat Yourself 12. Make It Easy to Reuse 13. Eliminate Effects Between Unrelated Things 14. There Are No Final Decisions 15. Use Tracer Bullets to Find the Target 16. Prototype to Learn 17. Program Close to the Problem Domain 18. Estimate to Avoid Surprises 19. Iterate the Schedule with the Code 20. Keep Knowledge in Plain Text 21. Use the Power of Command Shells 22. Use a Single Editor Well 23. Always Use Source Code Control 24. Fix the Problem, Not the Blame 25. Don't Panic When Debugging 26. "Select" Isn't Broken 27. Don't Assume It – Prove It 28. Learn a Text Manipulation Language 29. Write Code That Writes Code 30. You Can't Write Perfect Software 31. Design with Contracts 32. Crash Early 33. Use Assertions to Prevent the Impossible 34. Use Exceptions for Exceptional Problems 35. Finish What You Start 36. Minimize Coupling Between Modules 37. Configure, Don't Integrate 38. Put Abstractions in Code, Details in Metadata 39. Analyze Workflow to Improve Concurrency 40. Design Using Services 41. Always Design for Concurrency 42. Separate Views from Models 43. Use Blackboards to Coordinate Workflow 44. Don't Program by Coincidence 45. Estimate the Order of Your Algorithms 46. Test Your Estimates 47. Refactor Early, Refactor Often 48. Design to Test 49. Test Your Software, or Your Users Will 50. Don't Use Wizard Code You Don't Understand 51. Don't Gather Requirements – Dig for Them 52. Work with a User to Think Like a User 53. Abstractions Live Longer than Details 54. Use a Project Glossary 55. Don't Think Outside the Box – Find the Box 56. Start When You're Ready 57. Some Things Are Better Done than Described 58. Don't Be a Slave to Formal Methods 59. Costly Tools Don't Produce Better Designs 60. Organize Teams Around Functionality 61. Don't Use Manual Procedures 62. Test Early. Test Often. Test Automatically 63. Coding Ain't Done 'Til All the Tests Run 64. Use Saboteurs to Test Your Testing. 65. Test State Coverage, Not Code Coverage 66. Find Bugs Once 67. English is Just a Programming Language 68. Build Documentation In, Don't Bolt It On 69. Gently Exceed Your Users' Expectations 70. Sign Your Work
  • 12. 1. Care About Your Craft 2. Think! About Your Work 3. Provide Options, Don't Make Lame Excuses 4. Don't Live with Broken Windows 5. Remember the Big Picture 6. Invest Regularly in Your Knowledge Portfolio 7. DRY – Don't Repeat Yourself 8. Make It Easy to Reuse 9. Prototype to Learn 10. Estimate to Avoid Surprises 11. Fix the Problem, Not the Blame 12. Don't Panic When Debugging 13. "Select" Isn't Broken 14. You Can't Write Perfect Software 15. Design with Contracts 16. Crash Early 17. Minimize Coupling Between Modules 18. Don't Program by Coincidence 19. Refactor Early, Refactor Often 20. Don't Gather Requirements – Dig for Them 21. Some Things Are Better Done than Described 22. Don't Be a Slave to Formal Methods 23. Don't Use Manual Procedures 24. Test Early. Test Often. Test Automatically 25. Find Bugs Once 26. English is Just a Programming Language 27. Gently Exceed Your Users' Expectations 28. Sign Your Work
  • 13.
  • 14.
  • 15.
  • 17. https://www.youtube.com/watch?v=QL1dQuK5Wsg Thomas John Watson Sr. - chairman and CEO of International Business Machines (IBM) “The trouble with every one of us is that we don't think enough. We don't get paid for working with our feet — we get paid for working with our heads” (1911)
  • 18. Criminal Procedure Law Section 140.50
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26. BWM ZX-6 Concept 3rd year students of Transportation Design School at Turin Based IED (Istituto Europeo di Design)
  • 27. * - although prototyping does not result in “real” solution, there is always a temptation to use it as one ;( Prototypes may ignore: - Correctness (use dummy data) - Completeness (limited functionality*) - Robustness (no error checking) - Style (no documentation, even UI) *YAGNI principle – You Ain't Gonna Need It Надійність
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33. Accuracy: The closeness of a given measurement to its true value, i.e. whether the measure is correct. Precision: The stability of that measurement when repeated many times, i.e. whether the measurement is consistent with other measurements. Accuracy – достовірність, Precision - збіжність
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39. * - not really, but we are not talking about really specific complex cases here
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45. * - Keep It Simple Stupid ;)
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51. Keywords: - Code quality - Continuous Integration
  • 52.
  • 53.
  • 54. Pragmatic adjective prag·mat·ic prag-ˈma-tik - dealing with the problems that exist in a specific situation in a reasonable and logical way instead of depending on ideas and theories
  • 55. Pragmatic adjective prag·mat·ic prag-ˈma-tik - dealing with the problems that exist in a specific situation in a reasonable and logical way instead of depending on ideas and theories
  • 56. Pragmatic adjective prag·mat·ic prag-ˈma-tik - dealing with the problems that exist in a specific situation in a reasonable and logical way instead of depending on ideas and theories
  • 57. Pragmatic adjective prag·mat·ic prag-ˈma-tik - dealing with the problems that exist in a specific situation in a reasonable and logical way instead of depending on ideas and theories
  • 58. Pragmatic adjective prag·mat·ic prag-ˈma-tik - dealing with the problems that exist in a specific situation in a reasonable and logical way instead of depending on ideas and theories Apollo 13 За все берется, ничего не удается
  • 59. Tough means we are forever accountable for what we do or what we fail to do. Competent means we will never take anything for granted. Spaceflight will never tolerate carelessness, incapacity, and neglect – космічний політ ніколи не потерпить недбалість, недієздатність і халатність.
  • 60.
  • 61. Ears, Open. Eyeballs, Click. (2005 documentary by Canaan Brumley) Generation Kill (2008 HBO Mini-series)