SlideShare a Scribd company logo
1 of 68
NEW PERSPECTIVE
Asher Barak
PART ONE
ne principle to rule them all
1920 - 2012
one of the founders of the cognitive
psychology field
GEORGE A.
MILLER
THE MAGICAL
NUMBER
2
1930 - 2002
Dutch computer scientist
Edsger W.
Dijkstra
Go To Statement Considered Harmful
SOFTWARE
Is Too Complex
For Our
BRAIN
MANAGING
COMPLEXITY
Your #1 goal should be
ARISTOTLE
Geek philosopher
384 – 322 BCE
Essential Accidentalvs
SOFTWARE COMPLEXITY
• Computers speak a binary language
• Computers are batch machines
• There is a wide gap between coding and
running software
• Computers are terrible with concurrency
• Computers have physical limitations
• Computer software model a complex world
Essential
ONE THING AT A TIME
CARE ABOUT LESS
• Do as little as possible
• Divide (& conquer)
• Hide the details - Work
with layered
abstractions
• Reduce the noise
LANGUAGE
FUNDAMENTALS
Class
Method
Procedural
Code
Layer
Module
Class
USE INTERFACES
• Do as little as possible
• Divide (And Conquer)
• Hide the details - Work
with layered
abstractions
• Reduce the noise
CODING
PRACTICES
THINK OF YOUR
AUDIENCE
(It’s not the compiler)
NAME STUFF
• With the right name
• In a standard way
• Methods – For what they do
• Functions – For what they return
• Classes – For what they represent
• Modules – For what they pack
USE CONVENTIONS
Any convention is better than no convention
Every convention is one less thing to think about
USE CONVENTIONS
• Naming Conventions
• Method parameters conventions
• Resources placing conventions
• Documenting conventions
• Code layout conventions
• Meeting conventions
• Everything conventions
USE CONVENTIONS
CONSISTENT ABSTRACTIONS
Problem Domain
Language/Platform
CONSISTENT ABSTRACTIONS
Problem Domain
Problem Domain Lower Level
USE DESIGN PATTERNS
• They represent a higher abstraction
over coding details
• They simplify communications in the
team
• They are conceptual standard reusable
units
TDD
• Promotes better divisions
• Promotes better abstractions
• Promotes better documentation
• Promotes better personal
character
• Restrains complexity
DESIGN BEST
PRACTICES
• Do as little as
possible
• Divide (And
Conquer)
• Hide the details -
Work with layered
abstractions
• Reduce the noise
• Do as little as
possible
• Divide (And
Conquer)
• Hide the details -
Work with layered
abstractions
• Reduce the noise
• Do as little as
possible
• Divide (And
Conquer)
• Hide the details -
Work with layered
abstractions
• Reduce the noise
• Do as little as
possible
• Divide (And
Conquer)
• Hide the details -
Work with layered
abstractions
• Reduce the noise
• Do as little as
possible
• Divide (And
Conquer)
• Hide the details -
Work with layered
abstractions
• Reduce the noise
• Do as little as
possible
• Divide (And
Conquer)
• Hide the details -
Work with layered
abstractions
• Reduce the noise
• Do as little as
possible
• Divide (And
Conquer)
• Hide the details -
Work with layered
abstractions
• Reduce the noise
• Do as little as
possible
• Divide (And
Conquer)
• Hide the details -
Work with layered
abstractions
• Reduce the noise
• Do as little as
possible
• Divide (And
Conquer)
• Hide the details -
Work with layered
abstractions
• Reduce the noise
• Do as little as
possible
• Divide (And
Conquer)
• Hide the details -
Work with layered
abstractions
• Reduce the noise
• Do as little as
possible
• Divide (And
Conquer)
• Hide the details -
Work with layered
abstractions
• Reduce the noise
• Do as little as
possible
• Divide (And
Conquer)
• Hide the details -
Work with layered
abstractions
• Reduce the noise
PART TWO
Make it your own
PROGRAMMING IS
DONE SOLO
Creating a culture requires communication
FACE THE TRUTH
Some people program
for the wrong reasons
ACTIVELY ENCOURAGE
SOCIALIZING
Preferably of people who like their job
TALK
ABOUT
THE
PROCESS
BE OPENLY EXCITED
ABOUT GOOD
CRAFTSMANSHIP
(With tears if possible)
TALK ABOUT
READABILITY
Is it good for readability or is it bad?
TALK ABOUT
ABSTRACTIONS
Try splitting discussion the way code is split
ACTIVELY ENCOURAGE
MORE DESIGN
This is hardly ever a problem
ACTIVELY ENCOURAGE
DESIGN CONSULTING
Everyone ends up smarter
PUT PERFORMANCE &
EFFICIENCY SECOND
Maintainability first
PUT PERFORMANCE &
EFFICIENCY SECOND
• We are not good at anticipating
resources issues
• We are not good at anticipating
performance issues
• KISS until otherwise proven
HAVE EXPECTATIONS
• Read (and understand) error messages
• Read (and understand) compiler warning
• Document and read documentation
• Know (and avoid) code smells (Keep a
document)
TALK ABOUT
CONVENTIONS
• Keep a document
• Make newbie's read the document
• Discuss conventions with your team
• Make any code feel at home to
everyone in the company
TALK ABOUT CODE
• Code reviews
• Code analysis sessions
• Talk about code when you give advice
• Talk about code when you take a
break – be creative
TALK ABOUT CODE
• Talk about your experience with the
code
• This made me expect that…
• From this I understood right away
that…
• This was misleading/ did not follow
the standard/ was too long / short
DON’T
TALK ABOUT CODE
When you cannot understand it
USE TOOLING
• To measure (size, relations complexity
etc.) – do not count lines
• To enforce quality standards and
conventions
• To boost productivity
• To avoid human errors
MAKE SURE
EVERYONE
READS
CODE COMPLETE
PART THREE
Trade secrets
CULTURE CLASH
SW Business and SW craftsmanship
are not the same
THINGS ARE IMPROVING
• Human factor weighs in
• AGILE – development as a partnership
• Costs and benefits of quality are better
understood
• SW management is more experienced
STILL, THIS
Is sometimes applicable to the quality
of your code
USE YOUR BRAIN
• Say what you think
• Stick to your estimates
• Accept lower quality
as a legitimate
business decision
• Pick your battles
• Keep doing what you love
in acceptable conditions
KEEP CALM !!!
THANK YOU,
972-54-8003775
Asher . Barak @ gmail . com
CONNECT WITH ME
GET THE SLIDES
http://goo.gl/AWWUKf
If you want to reuse
the slides for your
talk, Please contact
me first.

More Related Content

Viewers also liked

MOST_OpenFoundry_version control system_Git
MOST_OpenFoundry_version control system_GitMOST_OpenFoundry_version control system_Git
MOST_OpenFoundry_version control system_GitSu Jan
 
Java scriptcore brief introduction
Java scriptcore brief introductionJava scriptcore brief introduction
Java scriptcore brief introductionHorky Chen
 
Code tuning techniques
Code tuning techniquesCode tuning techniques
Code tuning techniquesAsha Sari
 
程序员实践之路
程序员实践之路程序员实践之路
程序员实践之路Horky Chen
 
代码大全(内训)
代码大全(内训)代码大全(内训)
代码大全(内训)Horky Chen
 
Defencive programming
Defencive programmingDefencive programming
Defencive programmingAsha Sari
 
Design in construction
Design in constructionDesign in construction
Design in constructionAsha Sari
 
Code tuning strategies
Code tuning strategiesCode tuning strategies
Code tuning strategiesAsha Sari
 
高品質軟體的基本動作 101 for NTHU
高品質軟體的基本動作 101 for NTHU高品質軟體的基本動作 101 for NTHU
高品質軟體的基本動作 101 for NTHUSu Jan
 
Code Tuning
Code TuningCode Tuning
Code Tuningbgtraghu
 
Time-Variable Networks in Candida Glabrata
Time-Variable Networks in Candida GlabrataTime-Variable Networks in Candida Glabrata
Time-Variable Networks in Candida GlabrataMichael Stumpf
 
Biz Online Insights: Movie viewing
Biz Online Insights: Movie viewingBiz Online Insights: Movie viewing
Biz Online Insights: Movie viewingBizcommunity
 
POBLES DE CATALUNYA - LA POBLA DE LILLET I CASTELLAR DE N ´HUG EN CATALÁ
POBLES DE CATALUNYA - LA POBLA DE LILLET I CASTELLAR DE N ´HUG EN CATALÁPOBLES DE CATALUNYA - LA POBLA DE LILLET I CASTELLAR DE N ´HUG EN CATALÁ
POBLES DE CATALUNYA - LA POBLA DE LILLET I CASTELLAR DE N ´HUG EN CATALÁManel Cantos
 
RECORDANDO A CAMARÓN DE LA ISLA- Enrique F. Widmann-Miguel (2013)
RECORDANDO A CAMARÓN DE LA ISLA- Enrique F. Widmann-Miguel (2013)RECORDANDO A CAMARÓN DE LA ISLA- Enrique F. Widmann-Miguel (2013)
RECORDANDO A CAMARÓN DE LA ISLA- Enrique F. Widmann-Miguel (2013)Carlos Cueto
 

Viewers also liked (18)

MOST_OpenFoundry_version control system_Git
MOST_OpenFoundry_version control system_GitMOST_OpenFoundry_version control system_Git
MOST_OpenFoundry_version control system_Git
 
Coding Style
Coding StyleCoding Style
Coding Style
 
Integration
IntegrationIntegration
Integration
 
Java scriptcore brief introduction
Java scriptcore brief introductionJava scriptcore brief introduction
Java scriptcore brief introduction
 
Code tuning techniques
Code tuning techniquesCode tuning techniques
Code tuning techniques
 
程序员实践之路
程序员实践之路程序员实践之路
程序员实践之路
 
代码大全(内训)
代码大全(内训)代码大全(内训)
代码大全(内训)
 
Defencive programming
Defencive programmingDefencive programming
Defencive programming
 
Design in construction
Design in constructionDesign in construction
Design in construction
 
Code tuning strategies
Code tuning strategiesCode tuning strategies
Code tuning strategies
 
高品質軟體的基本動作 101 for NTHU
高品質軟體的基本動作 101 for NTHU高品質軟體的基本動作 101 for NTHU
高品質軟體的基本動作 101 for NTHU
 
Code Complete
Code CompleteCode Complete
Code Complete
 
Code Tuning
Code TuningCode Tuning
Code Tuning
 
Junta angelissima web
Junta angelissima webJunta angelissima web
Junta angelissima web
 
Time-Variable Networks in Candida Glabrata
Time-Variable Networks in Candida GlabrataTime-Variable Networks in Candida Glabrata
Time-Variable Networks in Candida Glabrata
 
Biz Online Insights: Movie viewing
Biz Online Insights: Movie viewingBiz Online Insights: Movie viewing
Biz Online Insights: Movie viewing
 
POBLES DE CATALUNYA - LA POBLA DE LILLET I CASTELLAR DE N ´HUG EN CATALÁ
POBLES DE CATALUNYA - LA POBLA DE LILLET I CASTELLAR DE N ´HUG EN CATALÁPOBLES DE CATALUNYA - LA POBLA DE LILLET I CASTELLAR DE N ´HUG EN CATALÁ
POBLES DE CATALUNYA - LA POBLA DE LILLET I CASTELLAR DE N ´HUG EN CATALÁ
 
RECORDANDO A CAMARÓN DE LA ISLA- Enrique F. Widmann-Miguel (2013)
RECORDANDO A CAMARÓN DE LA ISLA- Enrique F. Widmann-Miguel (2013)RECORDANDO A CAMARÓN DE LA ISLA- Enrique F. Widmann-Miguel (2013)
RECORDANDO A CAMARÓN DE LA ISLA- Enrique F. Widmann-Miguel (2013)
 

Recently uploaded

DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 

Recently uploaded (20)

DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 

Software Craftsmanship Code Complete

Editor's Notes

  1. דבר בשפת הבעיהצור רמת הפשטה אחרישה בשכבה – כאן מדברים על DB, כאן על חבילות בלוניםכמה שפחות קשרי גומלין
  2. With the right name– if you are not sure of the name you do not know what you are doing
  3. שלח את מי שכתב אותו למקצה שיפורים
  4. בפיתוח כמו RESHARPERבדיקות COVERAGEב QUALITY GATES ב CHECKINבתהליך ה BUILD
  5. שלח את מי שכתב אותו למקצה שיפורים
  6. אני חושב שיש לנו מזל שאנחנו עושים משהו שאנחנו PASSIONATE לגביו. אני מתפעל מזה שמישהו אחר עומד מול הלקוחות.
  7. אני חושב שיש לנו מזל שאנחנו עושים משהו שאנחנו PASSIONATE לגביו. אני מתפעל מזה שמישהו אחר עומד מול הלקוחות.