|
|
|
Ksiazki - Informatyczne .pl » informatyka » informatyka Kod doskonały. Jak tworzyć oprogramowanie pozbawione błędów. Wydanie II | Wydawnictwo: Helion Autor: Steve McConnell Liczba stron: 960 Wymiary: 17.2 x 24.5 cm Oprawa: miękka ISBN: 978-83-246-2752-3
|
Czas dostawy: 2 - 4 dni Cena detaliczna: 129,00 zł Nasza cena: 122,60 zł
|
Opis Kod doskonały. Jak tworzyć oprogramowanie pozbawione błędów. Wydanie II: Kultowy podręcznik tworzenia doskonałego oprogramowania!
- Twórz wolny od błędów, najwyższej jakości kod
- Utrzymuj stałą kontrolę nad złożonymi projektami
- Wcześnie wykrywaj i rozwiązuj problemy
- Sprawnie rozwijaj i poprawiaj oprogramowanie
Steve McConnell wie więcej o budowie oprogramowania niż ktokolwiek inny; mamy ogromne szczęście, że zdecydował się podzielić swoim doświadczeniem oraz wiedzą w tej ważnej i oryginalnej książce.
Alan Cooper, "ojciec" języka Visual Basic, autor książki About Face
Zapewne każdy zgodzi się ze stwierdzeniem, że jeśli jakiś proces odpowiada za nawet 70% błędów w gotowym produkcie, z pewnością wymaga znaczącego usprawnienia... Czy masz jednak świadomość, że właśnie tyle problemów generuje samo wytwarzanie oprogramowania? Te błędy powodują nie tylko usterki w już gotowych programach, niespełniających oczekiwań klientów - odpowiadają także za znaczne opóźnienia przy realizacji zleconych projektów i nagminne przekraczanie zaplanowanego budżetu. Każdy ambitny programista staje zatem przed koniecznością zdobycia wiedzy o takich metodach pracy, które pozwolą szybciej i efektywniej realizować projekty, a przy tym zapewniać najwyższą jakość tworzonego kodu. W końcu na podstawie tych właśnie umiejętności oceniana jest także wartość danego programisty w zespole.
Z tych właśnie powodów niniejsza książka, będąca przejrzystą kompilacją najlepszych technik programowania, zdobyła tak wielkie uznanie w środowisku zawodowców i studentów, osiągając miano podręcznika kultowego. Przed Tobą drugie, zaktualizowane wydanie słynnej publikacji, w której Steve McConnell przedstawia wszystkie aspekty budowy programów, takie jak jakość czy podejście do procesu wytwarzania. Autor rozwija tu tak istotne zagadnienia, jak przebieg budowy klasy, techniki pracy z danymi i strukturami sterującymi, debugowanie, refaktoryzowanie oraz metody i strategie optymalizacji. Znajdziesz tu dziesiątki list kontrolnych, pomocnych w ocenianiu architektury, jakości klas i procedur, nazw zmiennych czy struktur sterujących, a także ponad 500 przykładów dobrego i złego kodu. Dowiesz się, co było przyczyną wielu typowych problemów w przeszłości i jak ich dzisiaj unikać. Opisane metody pracy pomogą utrzymać kontrolę nad dużymi projektami oraz efektywnie rozwijać i modyfikować oprogramowanie w odpowiedzi na zmiany wymagań. Co ważne, można je skutecznie wykorzystywać niezależnie od stosowanego języka programowania!
Dzięki tej książce nauczysz się skutecznie:
- projektować z zachowaniem minimalnej złożoności;
- praktycznie wykorzystywać metody pracy zespołowej;
- programować defensywnie, by unikać błędów w kodzie i jak najszybciej je z niego usuwać;
- wykorzystywać okazje do refaktoryzacji oraz rozwijania kodu i robić to w sposób bezpieczny;
- korzystać z metod programowania dopasowanych do projektu;
- szybko i efektywnie debugować;
- wcześnie i we właściwy sposób rozwiązywać najważniejsze problemy z konstrukcją oprogramowania;
- dbać o jakość kodu od pierwszego do ostatniego dnia projektu.
Posiądź kluczowe umiejętności tworzenia najwyższej jakości oprogramowania!
Spis treści Kod doskonały. Jak tworzyć oprogramowanie pozbawione błędów. Wydanie II: Wstęp (15)
Podziękowania (23)
Listy kontrolne (25)
Tabele (27)
Rysunki (29)
Część I: Proces budowy oprogramowania (35)
1. Budowa oprogramowania (37)
-
1.1. Czym jest budowa oprogramowania (37)
-
1.2. Znaczenie procesu budowy oprogramowania (40)
-
1.3. Jak korzystać z tej książki (41)
2. Metafory procesu programowania (43)
-
2.1. Znaczenie metafor (43)
-
2.2. Jak korzystać z metafor w programowaniu (46)
-
2.3. Popularne metafory programowania (47)
3. Przed programowaniem - przygotowania (57)
-
3.1. Przygotowania i ich znaczenie (58)
-
3.2. Określanie rodzaju budowanego oprogramowania (65)
-
3.3. Definicja problemu (70)
-
3.4. Określenie wymagań (72)
-
3.5. Architektura (77)
-
3.6. Ilość czasu poświęcanego na przygotowania (89)
4. Kluczowe decyzje konstrukcyjne (95)
-
4.1. Wybór języka programowania (95)
-
4.2. Konwencje programowania (100)
-
4.3. Twoje położenie na fali technologii (101)
-
4.4. Wybór podstawowych praktyk programowania (103)
Część II: Pisanie dobrego kodu (107)
5. Projektowanie (109)
-
5.1. Podstawowe problemy projektowania (110)
-
5.2. Podstawowe pojęcia projektowania (113)
-
5.3. Heurystyki - narzędzia projektanta (122)
-
5.4. Techniki projektowania (146)
-
5.5. Uwagi o popularnych metodykach pracy (155)
6. Klasy z klasą (161)
-
6.1. Abstrakcyjne typy danych (162)
-
6.2. Dobry interfejs klasy (169)
-
6.3. Problemy projektowania i implementacji (179)
-
6.4. Przesłanki dla utworzenia klasy (188)
-
6.5. Specyfika języka (192)
-
6.6. Pakiety klas (192)
7. Procedury wysokiej jakości (197)
-
7.1. Przesłanki utworzenia procedury (200)
-
7.2. Projektowanie na poziomie procedur (204)
-
7.3. Dobra nazwa procedury (207)
-
7.4. Jak długa może być procedura? (209)
-
7.5. Jak używać parametrów procedur (211)
-
7.6. Używanie funkcji (217)
-
7.7. Makra i procedury inline (218)
8. Programowanie defensywne (223)
-
8.1. Zabezpieczanie programu przed niewłaściwymi danymi wejściowymi (224)
-
8.2. Asercje (225)
-
8.3. Mechanizmy obsługi błędów (230)
-
8.4. Wyjątki (234)
-
8.5. Ograniczanie zasięgu szkód powodowanych przez błędy (239)
-
8.6. Kod wspomagający debugowanie (241)
-
8.7. Ilość kodu defensywnego w wersji finalnej (245)
-
8.8. Defensywne podejście do programowania defensywnego (246)
9. Proces Programowania w Pseudokodzie (251)
-
9.1. Budowanie klas i procedur krok po kroku (251)
-
9.2. Pseudokod dla zaawansowanych (253)
-
9.3. Budowanie procedur metodą PPP (256)
-
9.4. Alternatywy dla pseudokodu (269)
Część III: Zmienne (273)
10. Zmienne w programie (275)
-
10.1. Podstawowa wiedza o danych (276)
-
10.2. Deklarowanie zmiennych (277)
-
10.3. Inicjalizowanie zmiennych (278)
-
10.4. Zakres (282)
-
10.5. Trwałość (289)
-
10.6. Czas wiązania (290)
-
10.7. Związek między typami danych i strukturami sterowania (292)
-
10.8. Jedno przeznaczenie każdej zmiennej (293)
11. Potęga nazwy zmiennej (297)
-
11.1. Wybieranie dobrej nazwy (297)
-
11.2. Nazwy a rodzaje danych (303)
-
11.3. Potęga konwencji nazw (308)
-
11.4. Nieformalne konwencje nazw (310)
-
11.5. Standardowe prefiksy (317)
-
11.6. Nazwy krótkie a czytelne (319)
-
11.7. Nazwy, których należy unikać (322)
12. Podstawowe typy danych (327)
-
12.1. Liczby (327)
-
12.2. Liczby całkowite (329)
-
12.3. Liczby zmiennoprzecinkowe (331)
-
12.4. Znaki i ciągi znakowe (333)
-
12.5. Zmienne logiczne (336)
-
12.6. Typy wyliczeniowe (338)
-
12.7. Stałe nazwane (343)
-
12.8. Tablice (345)
-
12.9. Tworzenie własnych typów (aliasy) (346)
13. Inne typy danych (355)
-
13.1. Struktury (355)
-
13.2. Wskaźniki (359)
-
13.3. Dane globalne (371)
Część IV: Instrukcje (383)
14. Struktura kodu liniowego (385)
-
14.1. Instrukcje, które wymagają określonej kolejności (385)
-
14.2. Instrukcje, których kolejność nie ma znaczenia (388)
15. Instrukcje warunkowe (393)
-
15.1. Instrukcje if (393)
-
15.2. Instrukcje case (398)
16. Pętle (405)
-
16.1. Wybieranie rodzaju pętli (405)
-
16.2. Sterowanie pętlą (410)
-
16.3. Łatwe tworzenie pętli - od wewnątrz (422)
-
16.4. Pętle i tablice (424)
17. Nietypowe struktury sterowania (427)
-
17.1. Wiele wyjść z procedury (427)
-
17.2. Rekurencja (429)
-
17.3. Instrukcja goto (434)
-
17.4. Nietypowe struktury sterowania z perspektywy (444)
18. Metody oparte na tabelach (449)
-
18.1. Metody oparte na tabelach - wprowadzenie (449)
-
18.2. Tabele o dostępie bezpośrednim (451)
-
18.3. Tabele o dostępie indeksowym (462)
-
18.4. Tabele o dostępie schodkowym (464)
-
18.5. Inne metody wyszukiwania w tabelach (467)
19. Ogólne problemy sterowania (469)
-
19.1. Wyrażenia logiczne (469)
-
19.2. Instrukcje złożone (bloki) (480)
-
19.3. Instrukcje puste (481)
-
19.4. Praca z głębokimi zagnieżdżeniami (482)
-
19.5. Programowanie strukturalne (490)
-
19.6. Struktury sterujące i złożoność (493)
Część V: Sprawna praca z kodem (497)
20. Jakość oprogramowania (499)
-
20.1. Składowe jakości (499)
-
20.2. Metody podwyższania jakości (502)
-
20.3. Skuteczność metod podwyższania jakości (505)
-
20.4. Kiedy przeprowadzać kontrolę jakości (509)
-
20.5. Ogólna Zasada Jakości Oprogramowania (509)
21. Programowanie zespołowe (513)
-
21.1. Przegląd metod programowania zespołowego (514)
-
21.2. Programowanie w parach (517)
-
21.3. Formalne inspekcje (519)
-
21.4. Inne metody programowania zespołowego (526)
22. Testowanie (533)
-
22.1. Rola testów programisty (534)
-
22.2. Zalecane podejście do testów programisty (537)
-
22.3. Praktyczne techniki testowania (539)
-
22.4. Typowe błędy (550)
-
22.5. Narzędzia wspomagające testowanie (556)
-
22.6. Usprawnianie testów (561)
-
22.7. Gromadzenie informacji o testach (563)
23. Debugowanie (569)
-
23.1. Wprowadzenie (569)
-
23.2. Wyszukiwanie defektu (574)
-
23.3. Usuwanie defektu (585)
-
23.4. Debugowanie a psychologia (588)
-
23.5. Narzędzia debugowania - oczywiste i mniej oczywiste (591)
24. Refaktoryzacja (597)
-
24.1. Ewolucja oprogramowania i jej odmiany (598)
-
24.2. Refaktoryzacje - wprowadzenie (599)
-
24.3. Wybrane refaktoryzacje (605)
-
24.4. Bezpieczne przekształcanie kodu (613)
-
24.5. Strategie refaktoryzacji (615)
25. Strategie optymalizacji kodu (621)
-
25.1. Wydajność kodu (622)
-
25.2. Optymalizowanie kodu (625)
-
25.3. Rodzaje otyłości i lenistwa (632)
-
25.4. Pomiary (637)
-
25.5. Iterowanie (639)
-
25.6. Strategie optymalizacji kodu - podsumowanie (640)
26. Metody optymalizacji kodu (645)
-
26.1. Struktury logiczne (646)
-
26.2. Pętle (651)
-
26.3. Przekształcenia danych (660)
-
26.4. Wyrażenia (665)
-
26.5. Procedury (674)
-
26.6. Reimplementacja w języku niskiego poziomu (675)
-
26.7. Im bardziej świat się zmienia, tym więcej zostaje bez zmian (677)
Część VI: Środowisko programowania (681)
27. Jak rozmiar programu wpływa na jego budowę (683)
-
27.1. Wielkość projektu a komunikacja (684)
-
27.2. Skala rozmiarów projektów (684)
-
27.3. Wpływ wielkości projektu na liczbę błędów (685)
-
27.4. Wpływ wielkości projektu na efektywność pracy (687)
-
27.5. Wpływ wielkości projektu na wykonywaną pracę (687)
28. Zarządzanie w programowaniu (695)
-
28.1. Zachęcanie do budowy dobrego kodu (696)
-
28.2. Zarządzanie konfiguracją (698)
-
28.3. Budowanie harmonogramu (705)
-
28.4. Pomiary (712)
-
28.5. Ludzkie traktowanie programistów (715)
-
28.6. Współpraca z przełożonymi (721)
29. Integracja (725)
-
29.1. Znaczenie metod integracji (725)
-
29.2. Częstość integracji - końcowa czy przyrostowa? (727)
-
29.3. Przyrostowe strategie integracji (730)
-
29.4. Codzienna kompilacja i test dymowy (738)
30. Narzędzia programowania (747)
-
30.1. Narzędzia do projektowania (748)
-
30.2. Narzędzia do pracy z kodem źródłowym (748)
-
30.3. Narzędzia do pracy z kodem wykonywalnym (754)
-
30.4. Środowiska narzędzi programowania (758)
-
30.5. Budowanie własnych narzędzi (759)
-
30.6. Narzędzia przyszłości (761)
Część VII: Rzemiosło programisty (765)
31. Układ i styl (767)
-
31.1. Wprowadzenie (768)
-
31.2. Techniki formatowania (774)
-
31.3. Style formatowania (776)
-
31.4. Formatowanie struktur sterujących (782)
-
31.5. Formatowanie instrukcji (789)
-
31.6. Formatowanie komentarzy (800)
-
31.7. Formatowanie procedur (802)
-
31.8. Formatowanie klas (804)
32. Kod, który opisuje się sam (813)
-
32.1. Zewnętrzna dokumentacja programu (813)
-
32.2. Styl programowania jako dokumentacja (814)
-
32.3. Komentować czy nie komentować (817)
-
32.4. Zasady pisania dobrych komentarzy (821)
-
32.5. Metody pisania komentarzy (828)
-
32.6. Normy IEEE (849)
33. Cechy charakteru (855)
-
33.1. Czy osobowość jest bez znaczenia? (856)
-
33.2. Inteligencja i skromność (857)
-
33.3. Ciekawość (858)
-
33.4. Uczciwość intelektualna (862)
-
33.5. Komunikacja i współpraca (865)
-
33.6. Kreatywność i dyscyplina (865)
-
33.7. Lenistwo (866)
-
33.8. Cechy, które znaczą mniej, niż myślisz (867)
-
33.9. Nawyki (869)
34. Powracające wątki - przegląd (873)
-
34.1. Walka ze złożonością (873)
-
34.2. Wybierz swój proces (875)
-
34.3. Pisz programy dla ludzi, nie tylko dla komputerów (877)
-
34.4. Programuj do języka, a nie w nim (879)
-
34.5. Konwencje jako pomoc w koncentracji uwagi (880)
-
34.6. Programowanie w kategoriach dziedziny problemu (881)
-
34.7. Uwaga, spadające odłamki! (884)
-
34.8. Iteruj, iteruj i jeszcze raz iteruj (886)
-
34.9. Nie będziesz łączył religii z programowaniem (887)
35. Gdzie znaleźć więcej informacji (891)
-
35.1. Programowanie (892)
-
35.2. Szersze spojrzenie na budowę oprogramowania (893)
-
35.3. Periodyki (895)
-
35.4. Plan czytelniczy programisty (896)
-
35.5. Stowarzyszenia zawodowe (898)
Bibliografia (899)
Skorowidz (919)
Steve McConnell (947)
|
|