Post

The Pragmatic Programmer: From Journeyman to Master

The Pragmatic Programmer: From Journeyman to Master

Hi all,

Today I want share with you my notes after read the following book:
The Pragmatic Programmer: From Journeyman to Master.

Opinions

  • Extreme Programming Explained: Embrace Change - Kent Beck book
  • Refactoring and UML version 2.0 - Martin Fowler book
  • Kevin Ruland
  • John Lakos
  • Eric Cought
  • Pete McBreen
  • Jared Richardson
  • Chris Cleveland

Introduce word

  • QWAN

Preface

  • Who should read this book?
  • Advice no. 1
    Take care of your craftsmanship.
  • Advice no. 2
    You should think about what you are doing.
  • Tools:
    • LaTeX
    • Pic
    • Perl programming language
    • Dvips
    • Ghostview
    • Ispell
    • GNU make
    • CVS
    • Emacs
    • XEmacs
    • egcs
    • GCC Compiler
    • Java programming language
    • iContract
    • SmallEiffel
    • Bash shell
    • Z shell
    • Linux

Chapter 1

  • Najwiekszą słabością jest strach przed strach przed wygladaniem na słabego - J. B. Bossuet - Politics from Holy Writ
  • Kot zjadł mój kod źródłowy
  • Advice no. 3
    Offer solutions instead of using lame excuses.
  • Entropia oprogramowania
  • Software rot
  • Advice no. 4
    Do not accept any broken glass.
  • Zupa z kamieni i gotowane żaby
  • Advice no. 5
    Be a catalyst for change.
  • Advice no. 6
    Remember the broader context.
  • Odpowiednio dobre oprogramowanie
  • Advice no. 7
    Quality should be included in the requirements.
  • Portfolio wiedzy
  • Advice no. 8
    Invest in your knowledge portfolio regularly.
  • Advice no. 9
    Watch with a critical eye what you read and hear.
  • Komunikuj się
  • Advice no. 10
    It is not only what we say but how we say it that matters.

Chapter 2

  • Przekleństwo powielania
  • Advice no. 11
    Don’t Repeat Yourself.
  • COBRA technology
  • Advice no. 12
    You should take care of the possibility of reusing the code.
  • Ortogonalność
  • Advice no. 13
    The mutual influence of unrelated elements should be eliminated.
  • MVC (Model - View - Controller)
  • RMI (Remote Method Invocation)
  • AOP (Aspect-Oriented Programming)
  • Design Patterns book
  • Odwracalność
  • Propos sur la religion book - Emil-Auguste Charter
  • Advice no. 14
    There are no final decisions.
  • Pociski smugowe
  • Advice no. 15
    Find your target with tracers.
  • Advice no. 16
    Prototypes should be built with science in mind.
  • Programming languages and tools:
    • TCL/Tk
    • Visual Basic programming language
    • PowerBuilder
    • Delphi programming language
    • SWIG
    • YACC compiler - the bison (free YACC compiler implementation)
    • JavaCC compiler
    • Screen Scraping
    • Expect.JS - open source minimalistic assertions tool
  • Języki dziedzinowe
  • Advice no. 17
    Program as close to the problem area as possible.
  • Backus-Naur Form - BNF
  • Lex and YACC book
  • Szacowanie
  • Advice no. 18
    Estimating avoids unpleasant surprises.
  • Advice no. 19
    The schedule and code should be iterative.
  • Powinnismy pomoc przełożonym w zrozumieniu, że o harmonogramie prac decyduje zespół, jego produktywność i otoczenie, w którym pracuje.

Chapter 3

  • ‘Każdy rzemieślnik rozpoczyna pracę od skompletowania podstawowego zestawu narzędzi odpowiednio wysokiej jakości’.
  • ‘In lepsze są nasze narzędzia i im lepiej potrafimy ich używać , tym większa może być nasza produktywność.’
  • awk, perl, python
  • Potęga zwykłego tekstu
  • XML, SGML, HTML
  • Advice no. 20
    Knowledge should be written in plain text.
  • MD5 checksum
  • diff, fc, sum
  • Shells
  • WYSIWYG
  • WYSIAWYG
  • Advice no. 21
    Use the potential of shell commands.
  • Cygwin
  • UWIN
  • Tom Christiansen - Perl Power Tools
  • Efektywna edycja
  • Advice no. 22
    One editor should be well-mastered.
  • emacs, vi, crisp, brief
  • Source code control
  • George Santayana - Life of Reason book
  • Life of Reason - George Santayana book
  • Advice no. 23
    A source code control system should always be used.
  • sccs, rcs, cvs
  • Advice no. 24
    You have to solve problems, don’t look for the culprit.
  • Advice no. 25
    Don’t panic.
  • DDD Debugger
  • Perl programming language
  • Greg Purge
  • Advice no. 26
    The select call works.
  • Advice no. 27
    You shouldn’t assume anything - you should prove it.
  • Python, Tcl, Perl
  • Inżynieria oprogramowania - Kernighan book
  • Advice no. 28
    One language that works with the text should be mastered.
  • Advice no. 29
    You should write code that writes code.

Chapter 4

  • Advice no. 30
    Writing great software is impossible.
  • Projektowanie kontraktowe (ang.) design by contract - DBC
  • Eiffel programming language
  • Advice no. 31
    Design should be based on contracts.
  • Eiffel programming language
  • Sather programming language
  • Nana preprocessor (C and C++)
  • iContract (Java)
  • Martwe programy nie kłamią
  • Advice no. 32
    Failures should occur as early as possible.
  • Programowanie asertywne
  • Advice no. 33
    If something can’t happen, use an assertion to ensure it doesn’t actually happen.
  • Kiedy używać wyjątków
  • Advice no. 34
    Exceptions should be used for exceptional problems.
  • Jak zrównoważyć zasoby
  • Advice no. 35
    What begins should be completed.
  • Pufiry software
  • Insure++ software

Chapter 5

  • Izolacja i prawo Demeter
  • Advice no. 36
    Relationships between modules should be minimized.
  • C++. Projektowanie systemów informatycznych. Vademecum profesjonalisty - John Lakos book
  • Metaprogramowanie
  • Ósme prawo Levy’iego
  • Advice no. 37
    Should be configured, not integrated.
  • Advice no. 38
    The code should contain abstractions; details should be included in the metadata.
  • Enterprise Java Beans
  • Advice no. 39
    It’s a good idea to analyze your workflow to improve concurrency based on that.
  • OLTP - On-Line Transaction Processing
  • Hungry Consumer
  • Advice no. 40
    You should design by using services.
  • Programowanie przez koincydencję
  • Advice no. 41
    Always design with concurrency in mind.
  • To tylko widok
  • Observer Design Pattern
  • CORBA Event Service
  • MVC - Model View Controller
  • Advice no. 42
    Separate views from models.
  • Tablice
  • JavaSpaces
  • T Spaces
  • Linda programming language
  • Advice no. 43
    You should use arrays to coordinate your workflow.

Chapter 6

  • Programowanie przez koincydencję
  • Advice no. 44
    Do not program by coincidence.
  • Szybkość algorytmu
  • Notacja wielkiego O.
  • Advice no. 45
    You should estimate the orders of magnitude of the algorithms.
  • Advice no. 46
    Be sure to test your estimates.
  • Robert Sedgewich book series
  • Sztuka programowania - Donald Knuth book
  • www.pragmaticprogrammer.com - sort functions examples
  • Refaktoryzacja
  • Advice no. 47
    Refactoring should be done as early and as often as possible.
  • Refaktoryzacja. Ulepszanie infrastruktury istniejącego kodu book
  • Testy regresji
  • Kod łatwy do testowania
  • IC - (ang.) Integratic Circuit
  • Object-Oriented Programming - Coks, Novobilski book
  • BIST - (ang.) Built-In Self Test
  • TAM - Test Access Mechanism
  • Unit Test
  • Regression Test
  • Advice no. 48
    Design with testing in mind.
  • Perl programming language
  • Refections in Java Programming Language
  • xUnit - Kent Beck and Erich Gammy tool
  • JUnit tool
  • Web Server Survey (news.netcraft.com/archives)
  • Advice no. 49
    Test your software; otherwise our users will.
  • Złe kreatory
  • IBM 3270 Terminal
  • OLE
  • MDI
  • SDI
  • Advice no. 50
    Don’t use wizards to build code that you don’t understand.

Chapter 7

  • Kopalnia wymagań
  • Ziemia, planeta ludzi - Antoine de St. Exupéry book
  • Advice no. 51
    Requirements should not be collected - they should be retrieved from hiding.
  • Advice no. 52
    To think like a user, you need to work with them.
  • Przypadki użycia - Use cases
  • Alistair Cockburn
  • Advice no. 53
    Abstractions live longer than details.
  • Advice no. 54
    The project glossary should be used.
  • Rozwiązywanie niemożliwych do rozwiązania łamigłówek
  • Advice no. 55
    You should not go beyond the pattern in your thoughts - rather, find this pattern.
  • Nie, dopóki nie jesteś gotowy
  • Advice no. 56
    Listen to persistent doubts - don’t start work until you are ready.
  • Pułapka specyfikacji
  • Advice no. 57
    Some things are better to do than talk about.
  • Okręgi i strzałki
  • Advice no. 58
    We cannot be slaves to formal methods.
  • Robert Glass
  • Advice no. 59
    Expensive tools don’t generate better designs.

Chapter 8

  • Pragmatyczne zespoły
  • The Rational Unified Process: An Introduction book
  • Advice no. 60
    Work should be organized around the functions being implemented, not the positions held.
  • Wszechobecna automatyzacja
  • Advice no. 61
    Manual procedures should not be used.
  • CACM magazine
  • Robert Glass article in CACM article
  • cron tool
  • Bezlitosne testy
  • Advice no. 62
    You should test early. Should be tested frequently. Should be tested automatically.
  • Advice no. 63
    The coding is not complete until all the tests are done.
  • Testy:
    • Jednostkowe
    • Integracyjne
    • Sprawdzanie poprawności i weryfikacja
    • Wyczerpywanie zasobów, błędy i odzyskiwanie
    • Wydajnościowe
    • Użyteczności
  • Ograniczone zasoby:
    • Pamięć
    • Przestrzeń dyskowa
    • Wydajność procesora
    • Czas
    • Wydajność dysku
    • Przepustowość sieci
    • Paleta kolorów
    • Rozdzielczość ekranu
  • Advice no. 64
    Use sabotage techniques to test the tests.
  • Test tests by making a break in code.
  • Tools to analyze how much source code is covered by tests.
  • Advice no. 65
    You should test state coverage, not code coverage.
  • Aegis - source code version control system
  • ‘make test’ command
  • Advice no. 66
    You only need to find each bug once.
  • Test source code automatically without GUI
  • Pisanie przede wszystkim
  • Donald Knuth - connect documentation with source code
  • JavaDoc - Sun company tool
  • Advice no. 67
    Polish should be treated as one more programming language.
  • user’s Guidep
  • Advice no. 68
    The documentation is part of the product, not an accessory.
  • Put in code comments why something has been done - not how.
  • When you put in code how you implemented it you violate DRY rule.
  • Variables names should be intuitive.
  • Stroop effect
  • RCS system
  • DOC++ tool
  • When in project information about database table exist in SQL command, documentation and tool for manage database scheme it is DRY rule violation.
  • HTML, LaTeX, troff
  • Perl programming language
  • XSL - eXtensible Style Language
  • CSS - Cascading Style Sheets
  • DocBook tool
  • SGML language
  • DSSSL language
  • RTF file
  • TeX file
  • INFO file
  • PostScript file
  • HTML file
  • Wielkie oczekiwania
  • Jeremiasz 2:12
  • Advice no. 69
    Users’ expectations should be slightly exceeded.
  • During adding a little function to the application we could do:
    • Pomoc w postaci chmurek lub podręcznych podpowiedzi
    • Skróty klawiszowe
    • Krótki przewodnik jako uzupełnienie standardowego podręcznika użytkownika
    • Wyróżnianie kolorami
    • Analizatory pliku dziennika
    • Automatyczna instalacja
    • Narzędzia do sprawdzania integralności systemu
    • Możliwość uruchamiania wielu wersji systemu na potrzeby szkolenia
    • Ekran powitalny z grafiką wskazaną przez organizację
  • Duma i uprzedzenie
  • “Zachwycałeś nas dostatecznie długo” - “Duma i uprzedzenie” - Jane Austen book
  • Advice no. 70
    Sign the results of your work.
  • Kent Beck
  • XP (ang. eXtreme Programming) methodology

Appendix A

  • Pragmatic Developer still learning
  • IEEE organization - www.acm.org
  • ACM organization - www.computer.org
  • www.pragmaticprogrammer.com
  • BCS organization
  • Magazines
    • IEEE Computer
    • IEEE Software
    • Communications of the ACM
    • SIGPLAN
    • Dr. Dobbs Journal
    • The Perl Journal
    • Software Development Magazine
  • Books
    • Analiza i projektowanie
      • Programowanie zorientowane obiektowo - Bertrand Meyer book
      • Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku - Erich Gamma, Richard Hełm, Ralph Johnson, John Vlissides book
      • Analysis Patterns: Reusable Object Models Martin Fowler book
  • Teams and Projects
    • The Mythical Man Mouth - Fred Brooks book
    • Dynamics of Software Development book
    • Surviving Object-Oriented Projects: A Manager’s Guide - Alistair Cockburn book
  • Environments
    • Unix
      • Programowanie w środowisku systemu UNIX - W. Richard Stevens book
      • UNIX Programowanie usług - W. Richard Stevens book
    • Windows
      • Win32 System Services - Marshall Brains book
      • Programming Windows - Charles Petzold book
      • C++
        • C++. 50 efektywnych sposobów na udoskonalenie Twoich programów - Scott Meyers book
        • Język C++ bardziej efektywny - Scott Meyers book
        • C++. Projektowanie systemów informatycznych. Vademecum profesjonalisty - John Lakos book
        • C++. Styl i technika zaawansowanego programowania - Jim Coplien book
        • Nutshell - O’Reilly book
        • Almanach - Helion book
  • Internet
    • Slashdot - web service
    • Cetus Links - web service with links with object oriented topics
    • WikiWikiWeb - design patterns service - www.c2.com
  • Internet resources
  • Editors
    • Emacs
      • Emacs
      • XEmacs
    • vi
      • Vim
      • Elvis
      • Viper mode for Emacs editor
  • Compilers, languages and development tools
    • GCC compiler - www.gcc.gnu.org
    • Java programming language - www.java.sun.com
    • Perl programming language - www.perl.com
    • Python programming language - www.python.org
    • SmallEiffel programming language - www.smarteiffel.loria.fr
    • ISE Eiffel - www.eiffel.com
    • Sather programming language - www.icsi.berkeley.edu/~sather
    • Common Lisp programming language
    • CLU programming language
    • Scheme programming language
    • C programming language
    • C++ programming language
    • Fortran programming language
    • VisualWorks
    • Squeak programming language
    • TOM programming language
    • Objective-C programming language
    • Beowulf project
    • iContract - contract programming software for Java
    • Nana project
    • DDD (ang. Data Display Debugger)
    • John Brant software - browser with refactoring fiction
    • DOC++ - Documentation generator
    • xUnit - unit tests framework
    • TCL programming language
    • Expect - based on Tcl programming language tool for interaction with applications
    • T Spaces - communication buffer for solutions based on databases
    • javaCC (ang. Java Compiler-Compiler) - syntax analyzer generator
    • bison - syntax analyzers generator
    • swig - development tool to connect C, C++ and Objective-C applications with Perl, Python, Tcl, Tk, Java, Eiffel, Guile and many other way
    • Guile programming language
    • The Object Management Group Inc
    • The organization which secure object oriented fuzzy systems
    • CORBA
    • IIOP
  • Narzędzia systemu UNIX w systemie DOS
    • UWIN tool - www.gtlinc.com/products/UWIN
    • Global Technologies Inc
    • Cygwin software
    • Cygnus Solutions
    • Perl Power Tools
  • Narzędzia do kontroli kodu źródłowego
    • RCS - www.prep.ai.mit.edu
    • CVS - www.nongnu.org/cvs
    • Aegis - www.aefis.sourceforce.net
    • Clearcase - www.rational.com
    • MKS Source Integrity - www.mks.com
    • PVCS configurations management - www.merant.com
    • Visual SourceSafe - www.microsoft.com
    • Perforce - www.perforce.com
  • Pozostałe narzędzia
    • WinZip
    • Powłoka Z
    • Samba
  • Artykuły i publikacje
    • comp.object Group FAQ section - www.cyberdyne-object-sys.com/oofaq2
    • Extreme Programming - www.xprogramming.com
    • Chrysler C3 project
    • Smalltalk programming language
    • Alistair Cockburn homepage - www.members.aol.com/acockburn
    • Martin Fowler homepage - www.ourworld.computerserve.com/homepages/martin_fowler
    • Analysis Patterns book
    • UML w kropelce, wersja 2.0 book
    • Refactoring: Improving the Design of Existing Code
    • Robert C. Martin homepage - www.objectmentor.com
    • Aspect Programming - www.aosd.net
    • JavaSpaces specification - www.jini.org.wiki/JavaSpaces_Specificarion
    • Linda system
    • Java programming language
    • Netspace web browser - www.mozilla.org
    • The Jargon File - www.catb.org/Jargon/HTML
    • Eric S. Raymond
    • Eric S. Raymond’s articles - www.catb.org/~esr/writings
    • The Cathedral and the Bazar article
    • Homesteading the Noosphere article
    • Open source environment
    • K Desktop Environment
    • Gnu Image Manipulation Program - www.gimp.org
    • Demeter project - www.ccs.neu.edu/research/demeter
    • the adaptive programming
  • Różne
    • GNU Project
    • Free Software Foundation
    • Web Server Survey - www.news.netcraft.com/archives/2011/05/02/may-2011-web-server-survey.html

Bibliography

  • Chief programmer team management of production programming - F. T. Baker
  • A validation of object-oriented design metrics as quality indicators - V. Basili, L. Briand, W. L. Melon
  • Trudni współpracownicy - Albert J. Bernstein
  • Win32 Systems Services - Marshall Brain
  • The Mythical Man Month: Essays on Software Engineering - Frederick P. Brooks
  • How to Write Parallel Programs: A First Course
  • Pragmatic Project Automation - Mike Clark
  • Object-Oriented Programming, An Evolutionary Approach - Brad J. Cox, Andrex J. Novobilski
  • Goals and use cases - Alistair Cockburn
  • Surviving Object-Oriented Projects: A Manager’s Guide - Alistair Cockburn
  • C++. Styl i technika zaawansowanego programowania - James O. Coplien
  • Czynnik ludzki. Skuteczne przedsięwzięcia i wydajne zespoły - Tom Demarco, Timothy Lister
  • Refactoring: Improving the Design of Existing Code - Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts
  • Analysis Patterns: Reusables Object Models - Martin Fowler
  • UML w kropelce, wersja 2.0 - Martin Fowler, Kendall Scott
  • Wzorce projektowe. Elementy oprogramowania obiektowego wielokrotnego użytku - Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
  • Inspections - Some surprising findings - Robert L. Glass
  • The realities of software technology payoffs - Robert L. Glass
  • Math Puzzles and Games - Michael Holt
  • JUnit. Pragmatyczne testy jednostkowe w Javie - Andy Hunt, Dave Thomas
  • Object-Oriented Software Engineering: A Use-Case Driven Approach - Ivar Jacobson
  • Aspect-Oriented Programming - Gregor Kiczales, John Lamping, Anurag Mendhekar, Chris Maeda, Cristina Videira Lopes, Jean-Marc Loingtier, John Irwin
  • Sztuka programowania, tom I: Algorytmy podstawowe - Donald Ervin Knuth
  • Sztuka programowania, tom II: Algorytmy seminumeryczne - Donald Ervin Knuth
  • Sztuka programowania, tom III: Sortowanie i wyszukiwanie - Donald Ervin Knuth
  • Inżynieria oprogramowania, Lekcja oprogramowania - Brian W. Kernighan, Rob Pike
  • The Rational Unified Process: An Introduction - Philippe Kruchten
  • C++. Projektowanie systemów informatycznych. Vademecum profesjonalisty - John Lakos
  • Assuring good style for object-oriented programs - Karl J. Lieberherr, Ian Holland
  • Data abstraction and hierarchy - Barbara Liskov
  • Lex and Yacc - John R. Levine, Tony Mason, Doug Brown
  • Dynamics of Software Development - Jim McCarthy
  • Język C++ bardziej efektywny - Scott Meyers
  • C++ . 50 efektywnych sposobów na udoskonalenie Twoich programów - Scott Meyers
  • Programowanie zorientowane obiektowo - Bertrand Meyer
  • Programming Windows, The Definitive Guide to the Win32 API - Charles Petzold
  • Kryptografia dla praktyków. Protokoły, algorytmy i programy źródłowe w języku C - Bruce Schneider
  • Algorithms - Robert Sedgewich
  • Algorytmy w C++ - Robert Sedgewich
  • An Introduction to the Analysis of Algorithms - Robert Sedgewich, Philippe Flajolet
  • Programowanie w środowisku systemu UNIX - W. Richard Stevens
  • UNIX programowanie usług sieciowych, tom II: API: gniazda i XTI - W. Richard Stevens
  • UNIX programowanie usług sieciowych, tom II: Komunikacja miedzyprocesowa - W. Richard Stevens
  • Studies of interference in serial verbal reactions - James Ridley Stroop
  • Pragmatic Version Control Using CVS - Dave Thomas, Andy Hunt
  • The police and neighborhood safety - James Q. Wilson, George Telling
  • Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design - Edward Yourdon, Larry L. Constantine
  • Managing projects to produce goodenough software - Edward Yourdon

It is everything that I have for today.
Everyone is a blacksmith of own fate.
Mateusz.

This post is licensed under CC BY 4.0 by the author.