
To właśnie programista może w znacznym stopniu przyczynić się do tego, iż wykrywanie błędów i walka z nimi staną się zadaniami łatwiejszymi i bardziej skutecznymi -- tę właśnie tezę Autor stara się udowodnić w niniejszej książce, ilustrując swe wywody konkretnymi przykładami.Niektóre ze wskazówek i zaleceń zawartych w treści niniejszej książki sprzeciwiają się wielu powszechnie przyjętym praktykom programowania i jako takie prowokować mogą do stwierdzeń w rodzaju "nikt tak nie pisze" lub "wszyscy łamią tę regułę". Warto wówczas zastanowić się nad przyczyną -- jeżeli "nikt tak nie pisze", to dlaczego? Czy przypadkiem stare nawyki nie okazują się silniejsze od racjonalności?
Odpowiedź na te i inne pytania Czytelnik znajdzie w tej książce.
Przedmowa do wydania polskiego (9)Wstęp (15)
- Dwa najważniejsze pytania (16)
- Nazewnictwo (17)
- Poznaj swój język programowania (23)
- Pożyteczne Narzędzie - Lint (27)
- To tylko kosmetyczne zmiany (27)
- Nigdy więcej błędów (28)
- Przypowieść o dwóch wersjach (32)
- Asercje (33)
- "Niezdefiniowane" oznacza "nieprzewidywalne" (36)
- Zagadkowe asercje (37)
- Kompatybilność kontrolowana (39)
- Gdy niemożliwe staje się możliwe (43)
- Nic o nas bez nas (45)
- Co dwa algorytmy, to nie jeden (48)
- Usuwaj błędy jak najwcześniej (52)
- Jest błąd, nie ma błędu (60)
- Zutylizuj swoje śmieci (62)
- Jestem już gdzie indziej (66)
- Kontroluj wykorzystanie pamięci (69)
- Spójrz na to, czego nie widać (72)
- Wybieraj rozsądnie (76)
- Szybki czy bezbłędny (77)
- Teraz lub później (77)
- Uwiarygodnij swój kod (82)
- Przetestuj wszystkie rozgałęzienia (83)
- Żywotne znaczenie przepływu danych (85)
- Czy czegoś nie przeoczyłeś (87)
- Spróbuj, a polubisz (88)
- getchar() zwraca liczbę, nie znak (92)
- realloc() a gospodarka pamięcią (94)
- Uniwersalny menedżer pamięci (96)
- Nieprecyzyjne parametry (98)
- Fałszywy alarm (101)
- Czytanie pomiędzy wierszami (103)
- Ostrzegaj przed niebezpieczeństwem (105)
- Diabeł tkwi w szczegółach (108)
- int intowi nierówny (112)
- Nadmiar i niedomiar (116)
- "Projekt" czy "prawie projekt" (118)
- Po prostu robią, co do nich należy (120)
- Przecież to to samo (124)
- ?: to także if (125)
- Precz z redundancją (128)
- Wysokie ryzyko, bez odwrotu (129)
- Przeklęta niespójność (133)
- Nie przypisuj zmiennym informacji diagnostycznych (135)
- Nie warto ryzykować (137)
- Szybkość, szybkość (142)
- Złodziej otwierający zamek kluczem nie przestaje być złodziejem (144)
- Każdemu według potrzeb (146)
- Nie uzewnętrzniaj prywatnych informacji (148)
- Funkcje-pasożyty (150)
- Programistyczne śrubokręty (153)
- Syndrom APL (155)
- Bez udziwnień, proszę (156)
- Na śmietnik z tymi wszystkimi trikami (158)
- Hokus-pokus, nie ma błędu (163)
- Zrób dziś, co masz zrobić jutro (165)
- Doktora!!! (166)
- Jeśli działa, nie poprawiaj (167)
- Funkcja z wozu, koniom lżej (169)
- Elastyczność rodzi błędy (169)
- Spróbuj (171)
- Święty Harmonogram (172)
- "Tester" - nazwa w sam raz dla testera (173)
- Programista zawinił, testera powiesili (175)
- Zdefiniuj swe priorytety (176)
Dodatek A Lista kontrolna kodowania (183)
Dodatek B Podprogramy zarządzania pamięcią (189)
Dodatek C Odpowiedzi (197)
Skorowidz (225)