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
- Analiza i projektowanie
- 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
- Unix
- 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
- Emacs
- 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.