Piękny kod. Tajemnice mistrzów programowania

Book description

Wbrew pozorom programowanie to nie tylko nauka ścisła, to także sztuka! Trudna sztuka! Napisanie kodu poprawnie działającego czy kodu spełniającego oczekiwania użytkowników programu to niewątpliwie wyzwanie! Wymaga bowiem doskonałego zaplanowania architektury, skutecznej optymalizacji kodu źródłowego oraz umiejętności przewidywania potencjalnych problemów i ich odpowiednio wczesnej eliminacji.

Właśnie w tej książce prawidziwi mistrzowie programowania podzielą się z Tobą swoimi doświadczeniami, przemyśleniami i spostrzeżeniami dotyczącymi tworzenia profesjonalnych rozwiązań. Znajdziesz tu wiele praktycznych porad dotyczących pisania kodu, rozwiązywania problemów programistycznych, projektowania architektury, tworzenia interfejsów użytkownika i pracy w zespole projektowym. Dowiesz się, kiedy należy postępować dokładnie według wskazań metodologii, a kiedy „pójście na skróty” może okazać się najlepszym rozwiązaniem. Poznasz sposób myślenia i zasady pracy najlepszych programistów świata, dzięki czemu użytkownikom Twoich aplikacji zapewnisz maksymalny komfort.

Table of contents

  1. Piękny kod. Tajemnice mistrzów programowania
  2. Dedykacja
  3. SPECIAL OFFER: Upgrade this ebook with O’Reilly
  4. Słowo wstępne
  5. Wstęp
    1. Układ książki
    2. Konwencje typograficzne
  6. 1. Wyrażenia regularne
    1. Programowanie w praktyce
    2. Implementacja
    3. Omówienie
    4. Alternatywy
    5. Rozszerzanie
    6. Podsumowanie
  7. 2. Edytor delty w Subversion — interfejs jako ontologia
    1. Kontrola wersji i transformacja drzewa
    2. Prezentacja różnic pomiędzy drzewami
    3. Interfejs edytora delty
    4. Ale czy to jest sztuka?
    5. Abstrakcja jako sport widowiskowy
    6. Wnioski
  8. 3. Najpiękniejszy kod, którego nigdy nie napisałem
    1. Najpiękniejszy kod, jaki kiedykolwiek napisałem
    2. Coraz więcej za pomocą coraz mniejszych środków
    3. Perspektywa
    4. Dodatkowa analiza
    5. Co to jest pisanie
    6. Zakończenie
    7. Podziękowania
  9. 4. Wyszukiwanie
    1. Na czas
    2. Problem — dane z pamiętnika sieciowego
    3. Wyrażenia regularne
    4. Korzystanie z wyrażeń regularnych
      1. Pamięć asocjacyjna
      2. Czas na optymalizację?
    5. Problem — kto zażądał, czego i kiedy
      1. Wyszukiwanie binarne
      2. Kompromisy wyszukiwania binarnego
      3. Wychodzenie z pętli
    6. Wyszukiwanie na dużą skalę
      1. Wyszukiwanie z orzeczeniami
      2. Ocenianie wyników
      3. Przeszukiwanie sieci
    7. Podsumowanie
  10. 5. Poprawny, piękny, szybki (w takiej kolejności) — lekcje z projektowania weryfikatorów XML
    1. Znaczenie walidacji XML
    2. Problem
    3. Wersja 1. Naiwna implementacja
    4. Wersja 2. Imitacja gramatyki BNF O(N)
    5. Wersja 3. Pierwsza optymalizacja O(log N)
    6. Wersja 4. Druga optymalizacja — nie sprawdzaj dwa razy
    7. Wersja 5. Trzecia optymalizacja O(1)
    8. Wersja 6. Czwarta optymalizacja — buforowanie
    9. Morał
  11. 6. Framework for Integrated Test — piękno poprzez delikatność
    1. Acceptance Testing Framework w trzech klasach
    2. Wyzwanie zaprojektowania środowiska
    3. Otwarte środowisko
    4. Jak prosty może być parser HTML
    5. Podsumowanie
  12. 7. Piękne testy
    1. To niesforne wyszukiwanie binarne
    2. Wstęp do JUnit
    3. Rozprawić się z wyszukiwaniem binarnym
      1. Testy integracji
      2. Przekraczanie granic
      3. Testowanie z losowaniem
      4. Niepokój związany z wydajnością
    4. Podsumowanie
  13. 8. Generowanie w locie kodu do przetwarzania obrazów
  14. 9. Kolejność wykonywania operatorów
    1. JavaScript
    2. Tablica symboli
    3. Tokeny
    4. Kolejność
    5. Wyrażenia
    6. Operatory wrostkowe
    7. Operatory przedrostkowe
    8. Operatory przypisania
    9. Stałe
    10. Zakres
    11. Instrukcje
    12. Funkcje
    13. Literały tablicowe i obiektowe
    14. Rzeczy do zrobienia i przemyślenia
  15. 10. Poszukiwanie szybszych metod zliczania bitów w stanie wysokim
    1. Podstawowe metody
    2. Dziel i zwyciężaj
    3. Inne metody
    4. Suma i różnica liczb ustawionych bitów w dwóch słowach
    5. Porównywanie liczby ustawionych bitów w dwóch słowach
    6. Zliczanie jedynek w tablicy
    7. Zastosowania
  16. 11. Bezpieczna komunikacja — technologia wolności
    1. Początki
    2. Rozwikłać tajemnicę bezpiecznego przesyłania wiadomości
    3. Klucz to użyteczność
    4. Podstawa
      1. Cele projektowe i decyzje
      2. Podstawy projektu systemu
    5. Zestaw testów
    6. Działający prototyp
    7. Oczyść, podłącz i używaj
      1. Reorganizacja kontenera wiadomości
      2. Trwałość deszyfracji
    8. Hakowanie w Himalajach
      1. Zabezpieczanie kodu
      2. Audyt modułu Crypt::GPG
    9. Niewidoczne ruchy ręką
    10. Prędkość ma znaczenie
    11. Prywatność komunikacji dla praw jednostki
    12. Hakowanie cywilizacji
  17. 12. Hodowanie pięknego kodu w języku BioPerl
    1. BioPerl i moduł Bio::Graphics
      1. Przykłady danych zwracanych przez moduł Bio::Graphics
      2. Wymagania Bio::Graphics
    2. Proces projektowania modułu Bio::Design
      1. Projektowanie sposobu interakcji dewelopera z modułem
      2. Ustawianie opcji
    3. Wybór klas obiektowych
      1. Przetwarzanie opcji
      2. Przykładowy kod
      3. Opcje dynamiczne
    4. Rozszerzanie modułu Bio::Graphics
      1. Wspieranie programistów sieciowych
      2. Obsługa obrazów nadających się do publikacji
    5. Dodawanie nowych glifów
    6. Wnioski i lekcje
  18. 13. Projekt programu Gene Sorter
    1. Interfejs użytkownika programu Gene Sorter
    2. Podtrzymywanie dialogu z użytkownikiem przez internet
    3. Nieco polimorfizmu
    4. Filtrowanie w celu znalezienia odpowiedniego genu
    5. Ogólna teoria pięknego kodu
    6. Podsumowanie
  19. 14. Jak elegancki kod ewoluuje wraz ze sprzętem — przypadek eliminacji Gaussa
    1. Wpływ architektury komputerów na algorytmy macierzowe
    2. Metoda dekompozycyjna
    3. Prosta wersja
    4. Podprocedura DGEFA biblioteki LINPACK
    5. Procedura LAPACK DGETRF
    6. Rekursywna dekompozycja LU
    7. Procedura ScaLAPACK PDGETRF
    8. Wielowątkowość w systemach wielordzeniowych
    9. Słowo na temat analizy błędów i liczby operacji
    10. Przyszłe kierunki badań
    11. Literatura zalecana
  20. 15. Długoterminowe korzyści z pięknego projektu
    1. Moje wyobrażenie o pięknym kodzie
    2. Wprowadzenie do biblioteki CERN
    3. Zewnętrzne piękno
    4. Piękno wewnętrzne
      1. Piękno zwięzłości i prostoty
      2. Piękno oszczędności
      3. Piękno przepływu sterowania
    5. Podsumowanie
  21. 16. Model sterowników jądra systemu Linux — korzyści płynące ze współpracy
    1. Skromne początki
    2. Redukcja do jeszcze mniejszych rozmiarów
    3. Skalowanie do tysięcy urządzeń
    4. Małe, luźno połączone obiekty
  22. 17. Inny poziom pośredniości
    1. Od kodu do wskaźników
    2. Od argumentów funkcji do wskaźników argumentów
    3. Od systemów plików do warstw systemów plików
    4. Od kodu do języka konkretnej domeny
    5. Multipleksacja i demultipleksacja
    6. Na zawsze warstwy?
  23. 18. Implementacja słownika w Pythonie — być wszystkim dla wszystkich
    1. Wewnątrz słownika
    2. Warunki specjalne
      1. Specjalny przypadek — optymalizacja dla małych haszy
      2. Gdy tworzenie przypadków specjalnych się opłaca
        1. Implementacja w Javie — kolejna optymalizacja dla przypadku specjalnego
        2. Implementacja w C — dynamiczne wybieranie funkcji przechowującej
    3. Kolizje
    4. Zmiana rozmiaru
      1. Określanie nowego rozmiaru tablic
    5. Wiele wart kompromis — wolna lista
    6. Iteracje i zmiany dynamiczne
    7. Podsumowanie
    8. Podziękowania
  24. 19. Wielowymiarowe iteratory w NumPy
    1. Kluczowe wyzwania w operacjach na N-wymiarowych tablicach
    2. Modele pamięci dla tablicy N-wymiarowej
    3. Początki iteratora NumPy
      1. Projekt iteratora
      2. Rozwój iteratora
      3. Przerwanie iteratora
      4. Ustawianie iteratora
      5. Śledzenie licznika iteratora
      6. Struktura iteratora
    4. Interfejs iteratora
    5. Wykorzystanie iteratora
      1. Iteracja przez wszystkie wymiary oprócz jednego
      2. Wiele iteracji
      3. Anegdoty
    6. Podsumowanie
  25. 20. System korporacyjny o wysokim stopniu niezawodności dla misji Mars Rover NASA
    1. Misja i Collaborative Information Portal
    2. Wymagania misji
    3. Architektura systemu
    4. Studium przypadku — usługa strumieniowa
      1. Funkcjonalność
      2. Architektura usługi
    5. Niezawodność
      1. Rejestrowanie
      2. Monitorowanie
    6. Solidność
      1. Dynamiczna rekonfiguracja
      2. Wymiana podczas pracy
    7. Podsumowanie
  26. 21. ERP5 — projektowanie maksymalnej giętkości
    1. Ogólne cele ERP
    2. ERP5
    3. Podstawowa platforma Zope
    4. Założenia ERP5 Project
    5. Pisanie kodu dla ERP5 Project
    6. Podsumowanie
      1. Podziękowania
  27. 22. Łyżka dziegciu
  28. 23. Programowanie rozproszone z zastosowaniem MapReduce
    1. Motywujący przykład
    2. Model programistyczny MapReduce
    3. Inne przykłady MapReduce
    4. Implementacja rozproszonego MapReduce
      1. Omówienie wykonywania
    5. Rozszerzenia modelu
    6. Wnioski
    7. Literatura zalecana
    8. Podziękowania
    9. Dodatek: przykład algorytmu zliczającego słowa
  29. 24. Piękna współbieżność
    1. Prosty przykład: konta bankowe
      1. Konta bankowe z wykorzystaniem blokad
      2. Blokady nie są dobre
    2. Pamięć transakcyjna STM
      1. Efekty uboczne i wejście-wyjście w Haskellu
      2. Transakcje w Haskellu
      3. Implementowanie pamięci transakcyjnej
      4. Blokowanie i wybór
      5. Podsumowanie podstawowych operacji STM
    3. Problem Świętego Mikołaja
      1. Renifery i elfy
      2. Bramki i grupy
      3. Program główny
      4. Implementacja Świętego Mikołaja
      5. Kompilowanie i uruchamianie programu
    4. Refleksje na temat Haskella
    5. Wnioski
    6. Podziękowania
  30. 25. Abstrakcja składniowa — rozszerzenie syntax-case
    1. Krótkie wprowadzenie do syntax-case
    2. Algorytm rozwijania
      1. Reprezentacje
      2. Tworzenie wyjścia ekspandera
      3. Wydobywanie obiektów składniowych
      4. Błędy składniowe
      5. Predykaty strukturalne
      6. Tworzenie opakowań
      7. Manipulowanie środowiskami
      8. Translacja identyfikatora
      9. Ekspander
      10. Transformatory bazowe
      11. Parsowanie i tworzenie obiektów składni
      12. Porównywanie identyfikatorów
      13. Konwersje
      14. Rozpoczynanie rozwijania
    3. Przykład
    4. Wnioski
  31. 26. Architektura oszczędzająca nakłady — obiektowy framework dla oprogramowania sieciowego
    1. Przykładowa aplikacja — usługa rejestrowania
    2. Zorientowany obiektowo projekt frameworku serwera rejestrowania
      1. Poznajmy cechy wspólne
      2. Przyswajanie zmienności
      3. Łączenie wszystkiego
    3. Implementacja sekwencyjnych serwerów rejestrowania
      1. Iteracyjny serwer rejestrowania
      2. Reaktywny serwer rejestrowania
      3. Ocena rozwiązań sekwencyjnych serwerów rejestrowania
    4. Implementacja współbieżnych serwerów rejestrowania
      1. Serwer rejestrowania w technologii wątek-dla-połączenia
      2. Serwer rejestrowania w technologii proces-dla-połączenia
      3. Ocena rozwiązań współbieżnych serwerów rejestrowania
    5. Wnioski
  32. 27. Integracja partnerów biznesowych z wykorzystaniem architektury REST
    1. Tło projektu
    2. Udostępnianie usług klientom zewnętrznym
      1. Definiowanie interfejsu usługi
    3. Przekazywanie usługi za pomocą wzorca fabryki
    4. Wymiana danych z użyciem protokołów e-biznesowych
      1. Parsowanie XML z użyciem XPath
      2. Składanie odpowiedzi XML
    5. Wnioski
  33. 28. Piękne debugowanie
    1. Debugowanie debugera
    2. Systematyczny proces
    3. Szukany problem
    4. Automatyczne wyszukiwanie przyczyny awarii
    5. Debugowanie delta
    6. Minimalizacja wejścia
    7. Polowanie na usterkę
    8. Problem prototypu
    9. Wnioski
    10. Podziękowania
    11. Literatura zalecana
  34. 29. Traktując kod jako esej
  35. 30. Gdy ze światem łączy cię tylko przycisk
    1. Podstawowy model projektu
    2. Interfejs wejściowy
      1. Drzewo
      2. Długie kliknięcie
      3. Dynamiczne zasiedlanie drzewa
      4. Proste wpisywanie
      5. Przewidywanie — Word Completion (uzupełnianie słów) i Next Word (następne słowo)
      6. Templates i Replace (szablony i zastępowanie)
      7. Implementacja pamięci podręcznej
      8. Common Words (częste słowa) i Favorites (ulubione)
      9. Śledzenie ścieżek
      10. Bufor wpisywania, edycja i przewijanie
      11. Schowek
      12. Wyszukiwanie
      13. Makra
    3. Wydajność interfejsu użytkownika
    4. Pobieranie
    5. Przyszłe kierunki rozwoju
  36. 31. Emacspeak — kompletne dźwiękowe środowisko pracy
    1. Tworzenie wyjścia mówionego
    2. Włączanie mowy w Emacsie
      1. Pierwsza implementacja
      2. Iteracja po pierwszej implementacji
      3. Krótki kurs advice
      4. Generowanie bogatego wyjścia mówionego
        1. Formatowane dźwięku za pomocą voice-lock
        2. Rozszerzanie Emacsa o tworzenie dźwiękowych list wyświetlania
        3. Formatowanie wyjścia dźwiękowego na podstawie słuchowych list wyświetlania
      5. Wykorzystanie Aural CSS (ACSS) do stylizowania wyjścia mówionego
      6. Dodawanie ikon dźwiękowych
      7. Odtwarzanie ikon dźwiękowych podczas wypowiadania zawartości
      8. Kalendarz — rozbudowa wyjścia mówionego o semantykę zależną od kontekstu
    3. Bezbolesny dostęp do informacji online
      1. Podstawowy HTML z Emacs W3 i Aural CSS
      2. Moduł emacspeak-websearch do wyszukiwań zorientowanych na zadania
      3. Internetowy wiersz poleceń oraz szablony URL
      4. Nadejście czytników kanałów
    4. Podsumowanie
      1. Zarządzanie złożonością kodu wraz z upływem czasu
      2. Wnioski
    5. Podziękowania
  37. 32. Kod w ruchu
    1. O byciu „podręcznikowym”
    2. Podobne wygląda podobnie
    3. Niebezpieczeństwa wcięć
    4. Poruszanie się po kodzie
    5. Wykorzystywane przez nas narzędzia
    6. Burzliwa przeszłość DiffMerge
    7. Wnioski
    8. Podziękowania
    9. Literatura zalecana
  38. 33. Pisanie programów dla Księgi
    1. Niekrólewska droga
    2. Ostrzeżenie dla nawiasofobów
    3. Trzy w rzędzie
    4. Śliskie nachylenie
    5. Nierówność trójkąta
    6. Meandrowanie
    7. „No przecież!”, znaczy się „Aha!”
    8. Wnioski
    9. Zalecana literatura
  39. A. Posłowie
  40. B. Autorzy
  41. Indeks
  42. SPECIAL OFFER: Upgrade this ebook with O’Reilly
  43. Copyright

Product information

  • Title: Piękny kod. Tajemnice mistrzów programowania
  • Author(s): Andy Oram, Greg Wilson
  • Release date: August 2012
  • Publisher(s): Helion
  • ISBN: 9788324614080