O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Piękny kod. Tajemnice mistrzów programowania

Book Description

Właśnie w tej książce prawdziwi mistrzowie programowania podzielą się z Tobą swoimi doświadczeniami, przemyśleniami i spostrzeżeniami dotyczącymi tworzenia profesjonalnych rozwiązań.

Table of Contents

  1. Piękny kod. Tajemnice mistrzów programowania
  2. Dedykacja
  3. Słowo wstępne
  4. Wstęp
    1. Układ książki
    2. Konwencje typograficzne
  5. 1. Wyrażenia regularne
    1. Programowanie w praktyce
    2. Implementacja
    3. Omówienie
    4. Alternatywy
    5. Rozszerzanie
    6. Podsumowanie
  6. 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
  7. 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
  8. 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
  9. 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ł
  10. 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
  11. 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
  12. 8. Generowanie w locie kodu do przetwarzania obrazów
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. 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
  19. 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
  20. 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
  21. 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?
  22. 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
  23. 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
  24. 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
  25. 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
  26. 22. Łyżka dziegciu
  27. 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
  28. 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
  29. 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
  30. 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
  31. 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
  32. 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
  33. 29. Traktując kod jako esej
  34. 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
  35. 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
  36. 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
  37. 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
  38. A. Posłowie
  39. B. Autorzy
  40. Indeks
  41. Copyright