Przeglądając numer 10/94 PCkuriera natknąłem się na ciekawy artykuł pana Marka Wierzbickiego pod tytułem "Pascal potrafi". Przedstawiono w nim "pozornie nierozwiązywalny w Pascalu" problem zabezpieczenia przed wielokrotnym uruchomieniem tej samej aplikacji w środowisku Windows.
0195c - Diody LED na klawiaturze PC
Często trzeba urozmaicić wizualnie swój program. Niestety trudno jest wpaść na dobry pomysł. Rysowanie w Pascalu kółeczek, kwadracików i linii w grafice BGI lub układanie muzyczek z wykorzystaniem instrukcji Sound stało się już nieciekawe.
0195b - Hasło inaczej
Powracając do nieśmiertelnego tematu zabezpieczeń programu przed dostępem osób niepowołanych, chciałbym zaprezentować swój dość oryginalny sposób. Do uwierzytelniania wszelkich dokumentów bardzo dobry jest "wyrobiony", czyli powtarzalny i mający swoje cechy chrakterystyczne podpis.
0195a - Moduł - SaveWin
Aby zachować fragment ekranu graficznego w napisanym przez siebie programie pascalowym, najlepiej posłużyć się stosunkowo szybką procedurą ekranową GetImage, która wskazany obszar zapamięta na stosie lub w tablicy. Co jednak zrobić, jeśli chcemy zapamiętaną w ten sposób ilustracją posłużyć się w przyszłości lub jeśli ilustracji jest tak dużo, że nie starcza dostępnej pamięci? Odpowiedź jest prosta - należy je zapamiętać na dysku.
Amiga DOS cz.10
CPU - Rozkaz ten pozwala sterować "zachowaniem się" procesora 68020 lub "wyższego". Można też za pomocą CPU sprawdzić, czy mamy zainstalowany koprocesor, układ MMU lub otrzymać wiele mniej lub bardziej potrzebnych informacji o posiadanym systemie.
Amiga DOS cz.9
Check - służy jako nakładka, dopasowująca działanie starej karty A2090 do wymagań stawianych przez system 3.1. Rozkaz ten nie spowoduje żadnego widocznego na ekranie działania niemniej dokona odpowiednich zmian w odwołaniach do bibliotek DOS.library i Expansion.library
Amiga DOS cz.8
To, co wszyscy uważają za program pomocniczy, w rzeczywistości także jest rozkazem DOS-u i może być stosowany na przykład w sekwencji startowej po to, aby taki kalkulator (od czasu do czasu przydatny) umieścić rezydentnie. W zależności od systemu operacyjnego Calculator znajdziemy w katalogu Tools lub Utilities.
Amiga DOS cz.7
BRU jest programem do archiwizowania zbiorów z twardego dysku na dyskietkach oraz do "odzyskania" tak zarchiwizowanych zbiorów. Działa podobnie jak inne programy archiwizujące.
Amiga DOS cz.6
BINDDRIVERS - Rozkaz ten może być użyty wyłącznie w sekwencji startowej i tylko raz. Powoduje dołączenie do systemu sterowników urządzeń zewnętrznych, które znajdują się w ROM-ie lub w katalogu Expansion (na przykład samo konfigurujące się rozszerzenie pamięci czy twardy dysk).
Amiga DOS cz.5
Jeden z najważniejszych, o ile nie najważniejszy, z rozkazów ADOS (zwłaszcza dla posiadaczy twardego dysku). Przez zmianę przypisania pozwala zainstalować program w miejscu, w którym MY chcemy, aby się znajdował. ASSIGN potrafi jednak o wiele więcej. W zależności od użytych parametrów możemy sterować działaniem rozkazu.
Amiga DOS cz.4
Alias - Rozkaz ten pozwala na zastąpienie często używanych i wymagających dużo pisania rozkazów AmigaDOS dowolnym krótszym tekstem złożonym z liter, co pozwala oszczędzić stukania w klawiaturę.
Amiga DOS cz.3
Apostrof pozwala na umieszczenie w łańcuchach alfanumerycznych znaków zastrzeżonych dla wzorca (patrz opis poniżej) i ich kombinacji. Uwaga! Tylko w angielskim obłożeniu klawiatury (z trzech najczęściej używanych obłożeń - "usa", "d" i "gb"; instaluje się ono automatycznie np. na Workbenchu dodawanym do CDTV z angielską klawiaturą) "normalny" apostrof (`) uzyskiwany jest przez naciśnięcie [Alt] i [`] i działa w sposób opisany niżej.
Amiga DOS cz.2
Przed przystąpieniem do omawiania poszczególnych rozkazów Amiga DOS należy jeszcze ustalić wzorzec, według którego będzie opisywana składnia. Przyjmiemy go następująco:
Amiga DOS cz.1
Cykl ten miał być kontynuacją cyklu "Nie miała baba kłopotu". W międzyczasie otrzymaliśmy jednak mnóstwo listów od czytelników zarzucających nam, że faworyzujemy nowsze komputery kosztem starszych Amig, których jest (i będzie) w Polsce najwięcej. Postanowiłem zatem cykl opisujący system operacyjny Amigi rozszerzyć tak, aby mogli z niego skorzystać wszyscy.
0588 - OrCAD Cz.4
Czwarta, ostatnia już runda walki z OrCAD-em powinna być zatytułowana "Tylko dla leniwych". Kierujemy ją do osób, które mając już za sobą pewną praktykę w posługiwaniu się tym pakietem programów, szukają sposobów ułatwienia czy uprzyjemnienia sobie rysowania schematów. Najprościej byłoby stwierdzić, że należy dążyć do uzyskania maksimum efektów przy minimum nakładów jednak spełnienie tego postulatu wymaga dodatkowej pracy. Aby efektywnie posługiwać się programem DRAFT, trzeba zaznajomić się ze zleceniami, które na pierwszy rzut oka wydają się niejasne. Uchylamy rąbka tajemnicy. O efektywnym rysowaniu.
0488 - OrCAD Cz.3
Niewątpliwie najbardziej spektakularnym programem pakietu OrCAD jest DRAFT. Niestety, zaznajomiliśmy z nim Czytelników już w zeszłym miesiącu. Dziś zapraszamy więc na wycieczkę po okolicach DRAFT-a. Aby nie zagubić się w gąszczu szczegółów, proponujemy zwiedzanie w stylu amerykańskim - rzut oka przez okno pędzącego autokaru. Celem, majaczącym gdzieś w oddali, jest płytka drukowana, zaprojektowana na podstawie schematu narysowanego za pomocą programu DRAFT oraz dokumentacja tego schematu.
0388 - OrCAD Cz.2
Poprzedni odcinek kierowaliśmy głównie do Czytelników którzy OrCAD-a albo w ogóle nie mają, albo też dopiero co go uzyskali. Obecnie zwracamy się do początkujących entuzjastów rysowania schematów za pomocą klawiszy komputera: przedstawiamy "serce" OrCAD-a, czyli program DRAFT.
0288 - OrCAD Cz.1
Burzliwy rozwój mikrokomputerowego wspomagania prac związanych z projektowaniem konstrukcji inżynierskich zaowocował nareszcie narzędziem dla tych, którzy konstruowali komputery. Nareszcie, gdyż pierwsze wzmianki o programie OrCAD pojawiły się znacznie później niż programy dla inżynierów innych specjalności. Nie oznacza to, że na rynku oprogramowania dla konstruktora elektronika była całkowita pustynia, lecz właściwie dopiero ostatni rok przyniósł znaczący postęp i programy, które są godne polecenia.
0193 - Język FORTH cz.11
W poprzednim numerze TA zamieszczony został listing Edytora FORTH-a. Edytor ten napisałem cztery lata temu. Używam go do tej pory i sądzę, że czytelnikom zainteresowanym programowaniem w języku FORTH, będzie on dobrze służył. W tym odcinku zajmiemy się opisem pozostałych funkcji tego edytora.
1192 - Język FORTH cz.10
W tym odcinku nie będę przedstawiał nowych słów FORTH-a, gdyż nie starczy na to miejsca. Cały artykuł dotyczy jednego, ale jakże ważnego elementu tego języka, jakim jest Edytor FORTH-a (nie mylić z Edytorem Wprowadzania). W pierwszym odcinku cyklu obiecałem przedstawić kasetową wersję Forth-a. Aby dotrzymać słowa rozszerzyłem obsługę Edytora na to urządzenie. Dzięki temu możliwy jest zapis wersji źródłowej na kasetę, oraz odczyt i kompilacja z tego urządzenia.
1092 - Język FORTH cz.9
W tym odcinku podam pewne wiadomości związane z wykorzystaniem asemblera w języku FORTH. Znajomość działania samego FORTH-a znacznie ułatwia pisanie programów w asemblerze, gdyż umożliwia pełnie współdziałanie obu języków. Wiadomości te są niezbędne dla bardziej zaawansowanych programistów. Ostatnie odcinki z tego cyklu zawierały wiadomości o asemblerze. Zdaję sobie sprawę, że nie wszystkich sympatyków FORTH-a mogło to interesować. Chciałbym jednak zadowolić także tych, którzy co nieco na temat FORTH-a już wiedzą i chcieliby praktycznie go wykorzystać.
0992 - Język FORTH cz.8
W numerze 2 Tajemnic Atari ogłosiłem mały konkurs na zapis pewnego wyrażenia w języku FORTH. Ponieważ konkurs został już rozstrzygnięty, jestem winien czytelnikom przedstawienie zwycięzcy. Został nim Grzegorz Wysocki w Warszawy. Prawidłowy zapis powinien wyglądać następująco :
0892 - Język FORTH cz.7
W poprzednim odcinku przedstawiłem Edytor Wprowadzania. Dzięki niemu będę mógł prezentować czytelnikom dłuższe programy w języku FORTH, a ich wprowadzenie do komputera nie powinno sprawiać żadnych trudności. Jeżeli ktoś nie wklepał jeszcze Edytora Wprowadzania, powinien zrobić to natychmiast, gdyż tylko wtedy będzie mógł uzyskać inne programy.
0692 - Język FORTH cz.6
W poprzednim odcinku zajmowaliśmy się słowem WORD. Było ono używane do wprowadzenia dowolnego ciągu znaków do komputera. Wielu czytelników zauważyło zapewne, że nie da się użyć tego słowa do wprowadzania tekstu w czasie wykonywania programu, gdyż nie czeka ono na wykonanie tej czynności.
0592 - Język FORTH cz.5
Wielu czytelników w swoich listach pyta po czym rozpoznać implementację Extended fig FORTH. Nie jest to takie proste, gdyż wiele wersji tej implementacji ma zmieniony nagłówek. Sam nie jestem pewien, czy wersja, którą posiadam, nie została przez kogoś przerobiona. Po wczytaniu implementacji o której wspomniałem, pojawia się napis: fig FORTH 1.1. Mam nadzieję, że nagłówek ten jest autentyczny.
0492 - Język FORTH cz.4
Na Początku tego odcinka chciałbym zacytować fragment listu, jaki otrzymałem od pewnego właściciela Amigi. Była to odpowiedź na moje pytanie o język FORTH na ten Komputer. Zacytuję : "Chciałam Pana poinformować, że języki FORTH, FORTRAN nie istnieją na Amigę. Myślę że nie ma sensu programować w języku FORTH, jeżeli on praktycznie wychodzi z użytku". Mam nadzieję, że użytkownicy komputerów ATARI XL/XE nie podzielają poglądów zawartych w tych słowach.
0392 - Język FORTH cz.3
W poprzednim odcinku rozważań o języku FORTH poznaliśmy dwa ważne słowa operujące na pamięci komputera. Były to "C@" i "@". W języku TURBO BASIC XL znaleźlibyśmy odpowiadające im instrukcję "PEEK" i "DPEEK". Poznajmy teraz dwa nowe słowa operujące bezpośrednio na pamięci RAM. Są to : "C!" i "!". Wpisują one podaną wartość w dowolne komórki pamięci. W TURBO BASIC XL ich odpowiednikami byłyby instrukcje : "POKE" i "DPOKE".
0292 - Język FORTH cz.2
W pierwszym odcinku prezentującym język FORTH poznaliśmy dwa podstawowe słowa: ":" oraz ";" (dwukropek i średnik). Znajomość ich działania będzie nam obecnie potrzebna, dlatego też radzę zajrzeć do poprzedniego numeru TA.
0192 - A jednak FORTH !
Długo zastanawiałem się nad tym, czy miłośnicy komputerów w Polsce są Jeszcze zainteresowani programowaniem. Mam nadzieję, że po wielu latach bezkarnego piractwa została jednak spora liczba amatorów programowania. Uwzględniając panujące nam miłościwie prawodawstwo, wszyscy programiści powinni byli wymrzeć jak dinozaury. Jeżeli tak się nie stało, nie jest to na pewno zasługą naszych polityków. Tym wytrwałym, którzy nie dali się ponieść bieżącym prądom i nie założyli pirackiej meliny, chciałbym zaproponować jedno z najbardziej efektywnych narzędzi programowania jakie znam. Narzędziem tym jest język FORTH.
0288 - MS-Dos - Od środka cz.8
W ostatniej części cyklu omówione zostaną dalsze wywołania systemowe oraz krótki program ilustrujący sposób wywołania programu z innego programu.
0288 - MS-Dos - Od środka cz.7
W kolejnym odcinku cyklu "MS-DOS" od środka omawiamy dalsze wywołania funkcji obsługi zbiorów i urządzeń zewnętrznych oraz wywołania funkcji zarządzających programami.
0188 - MS-Dos - Od środka cz.6
Omówione dotąd wywołania systemowe były bardzo podobne do wywołań istniejących w systemie operacyjnym CP/M. Teraz zostaną przedstawione wywołania rozszerzone (ang.extended calls) - umożliwiające dostęp do hierarchicznej struktury zbiorów - wprowadzone po raz pierwszy w wersji MS-DOS 2.0 i przypominające wywołania istniejące w systemie XENIX.
0887 - MS-Dos - Od środka cz.5
W poprzedniej części omawiane były uniwersalne wywołania funkcji. Oto pozostałe.
0887 - MS-Dos - Od środka cz.4
W cyklu o MS-DOS publikujemy informacje pozwalające efektywnie korzystać z usług tego systemu. W tym odcinku omówione zostaną wywołania funkcji uniwersalnych, związanych z obsługą plików dyskowych. Istnieją one wprawdzie we wszystkich wersjach systemu, jednak umożliwiają dostęp tylko do plików znajdujących się aktualnie wybranym katalogu.
0887 - MS-Dos - Od środka cz.3
Po wykonaniu zadania przez program, który nie jest już dłużej potrzebny, należy zwolnić zajmowaną przez niego pamięć i przekazać sterowanie z powrotem do systemu operacyjnego. Można to zrealizować różnymi metodami, np. umieszczając w końcowym fragmencie programu jedną z trzech sekwencji rozkazów :
0887 - MS-Dos - Od środka cz.2
Na czym polega różnica między plikami .COM i .EXE ? Dlaczego programy są przesunięte względem początku segmentu o 256 bajtów ? Co sprawia, że programy są przesuwalne, że mogą być wykonywane na dowolnej pozycji w pamięci ?
0787 - MS-Dos - Od środka cz.1
Prawdopodobnie najbardziej rozpowszechnionym systemem operacyjnym w Polsce jest MS-DOS, wykorzystywany przez użytkowników kopii IBM PC XT/AT. W rozpoczętym dzisiaj cyklu publikacji o MS-DOS - adresowanym do programistów tworzących oryginalne programy i użytkowników "dopasowujących" programy gotowe - będzie mowa o interfejsie pomiędzy MS-DOS a użytkownikiem, opisane zostaną funkcje systemowe pozwalające nieco bardziej zgłębić problem i przyjrzeć się szczegółom przemilczanym przez podręczniki obsługi.
1187 - Jak Zrobić Majątek ?
Komputer ma wyręczać człowieka w różnych żmudnych pracach, np. rachunkach. Tym, który ma zagonić go do roboty jest programista. Spróbujmy przeanalizować prosty przykład, ilustrujący typowe problemy występujące przy programowaniu praktycznych zadań. Nasze zadanie jest niezwykle proste : obliczyć objętość kuli o promieniu r = 55.
1094 - Czcionkami Pisane cz.2
Czcionki typu DefaultFont nie zachwycają swym pięknem. Na szczęście procedura OutText pozwala prezentować tekst w grafice w bardziej efektownej postaci za pomocą czcionek wektorowych. Cóż to takiego czcionki wektorowe? Są to czcionki, których nie tworzy się poprzez wyświetlenie ich w postaci siatki punktów (matrycy), lecz przez narysowanie jako grupy linii. Taki typ reprezentacji pozwala na bardziej finezyjny sposób ich skalowania. Powiększając literę uzyskujemy lepszy obraz jej struktury, nie zaś ogromne, toporne i kanciaste kształty, jak w wypadku czcionek rastrowych (do takiego bowiem typu czcionek należy zaliczyć DefaultFont).
0994 - Czcionkami Pisane cz.1
Celem mojego artykułu jest próba odpowiedzi na pytanie, jakie zadał pan Jarosław Witkowski w post scriptum do swojego artykułu "CRT w trybie graficznym" (PCKurier 20/93, str.153). Chodziło o informację na temat formatu borlandowskich zbiorów czcionek wektorowych *.CHR i ich ewentualnej modyfikacji. Za pytaniem tym kryje się oczywiście odwieczny problem polskich liter. Liczba artykułów na jego temat, opublikowanych w PCkurierze, bije wszelkie rekordy.
1087 - Interpreter, Kompilator, Assembler Cz.3
Zanim przejdziemy do assemblera, który będzie dziś naszym głównym tematem, jeszcze kilka słów o wyborze translatora. Porównując różne programy tego typu należy brać pod uwagę szybkość działania, ilość zajmowanej pamięci, ale także łatwość korzystania.
0987 - Interpreter, Kompilator, Assembler Cz.2
Dziś kontynuujemy nasze rozważania o translacji na język maszynowy programów napisanych w językach wysokiego poziomu. Z samej zasady interpretacji wynika, że poprawność każdej instrukcji programu źródłowego jest badana dopiero gdy przyszła kolej na wykonywanie tej instrukcji.
0887 - Interpreter, Kompilator, Assembler Cz.1
Większości czytelników znane są wymienione w tytule pojęcia, często jest to jednak znajomość dość pobieżna, więc spróbujmy przyjrzeć się im dokładniej.
0787 - Efektywność i Elegancja Cz.2
Kontynuujemy przegląd podstawowych elementów techniki pisania programów, mających wpływ na efektywność otrzymanego kodu. Zaczniemy od przykładu, w którym wyjątkowo uda się zaoszczędzić i czasu i pamięci. Poniższy program nadaje wartości początkowe elementom dwóch tablic T i A:
0687 - Efektywność i Elegancja Cz.1
Ustaliliśmy, że decydujący wpływ na szybkość działania programu ma przyjęty algorytm rozwiązania problemu. Decydujący ale nie jedyny, choćby dlatego, że ten sam algorytm można zaprogramować na wiele sposobów: bardzo dobrze i bardzo źle. Dziś zajmiemy się przeglądem konstrukcji, które warto stosować oraz tych, których należy unikać jeśli chcemy, aby nasze programy były optymalne.
0587 - Rozsądna Oszczędność Cz.2
Miesiąc temu zajmowaliśmy się konstruowaniem i oceną algorytmów, czyli metod rozwiązywania zadań. Jeśli ktoś z was miał problemy z zapisaniem podanych algorytmów w postaci programów, to może pomogą w tym szkice programów realizujących podane miesiąc temu metody.
0487 - Rozsądna Oszczędność Cz.1
Szybkość działania programu zależy przede wszystkim od przyjętej przez autora metody rozwiązywania problemu (zamiast metoda będziemy raczej mówili ALGORYTM - na poziomie naszych rozważań słowa te znaczą właściwie to samo).
0492 - Wieloprocesowość w TurboVision ?
Aby odpowiedzieć na pytanie, czy możliwa jest wieloprocesowość w Turbo Pascalu 6.0, należy najpierw zdefiniować to pojęcie. W komputerach klasy IBM PC wieloprocesowość polega na pozornym wykonywaniu dwóch (lub więcej) czynności w tym samym czasie. Obserwatorom wydaje się, że procesy wykonywane są jednocześnie - wynika to jednak tylko z dużej szybkości pracy komputera.
1692 - Generator Menu
Programowanie w Turbo Vision ma to do siebie, że przy każdym, nawet małym, próbnym programie należy zdefiniować typ, a w nim zadeklarować procedury. Są to przeważnie: HandleEvent, InitMenuBar i InitStatusLine. Cała struktura programu jest niewątpliwie rzeczą pozytywną, jednak zniechęca młodych "praktyków" programistów, którzy rozwijają swoje zdolności bardziej kreatywnie (tzn. nie stosują przykładów z książki, lecz sami chcą wypróbować działanie danej procedury lub przydatność danego typu).
0196 - Lepszy Przycisk
Jednym z najczęściej używanych w programach obiektów jest przycisk tButton. Ma on jednak dwie dość irytujące wady. Po pierwsze, nie pozwala na skonstruowanie przycisku zawierającego więcej niż jedną linię tekstu. Po drugie, nie daje możliwości wyłączenia cienia pojawiającego się zawsze przy przycisku.
1597 - Symulacja cyfrowych układów kombinacyjnych
Artykuł ten poświęcony jest komputerowej symulacji cyfrowych układów kombinacyjnych, tzn. składających się z bramek, a także koderów i dekoderów. Zagadnienie zostało zilustrowane przykładami w C++, ze względu na łatwość operowania wskaźnikami i wysoki stopień abstrakcji danych oferowany przez ten język
1395 - Duże Liczby
Podczas pisania programu do wyszukiwania dużych liczb pierwszych pojawił się przede mną problem, polegający na tym, że musiałem napisać procedury operujące na takich liczbach za pomocą czterech podstawowych działań. W grę miały wchodzić liczby całkowite rzędu ok. 1040. Typy standardowo zdefiniowane w C i Pascalu nie wchodziły w grę - typy całkowite mogą przedstawić na swych 32 bitach liczby rzędu 1010, natomiast typy rzeczywiste przedstawiają wartości przybliżone. Stąd wziął się pomysł zdefiniowania klasy obiektów Very Long Int.
1896 - DPMI - Własny DOS Extender
W roku 1990 firmy: Borland, Eclipse, IGC, Intel, Lotus, Microsoft, PharLap, Phoenix, Quarterdeck i Rational opracowały specyfikację interfejsu programowego dla trybu chronionego procesora. Jest to specyfikacja DPMI (ang. DOS Protected Mode Interface). Do najpopularniejszych programów oferujących DPMI należy QEMM firmy QuarterDeck. Sama specyfikacja nie określa listy funkcji dostępnych przez przerwanie 21h, poza funkcją 4Ch. Jednak serwery DPMI poszczególnych producentów obsługują wiele z tych funkcji. QDPMI, który omówię w dalszej części artykułu, obsługuje m.in. funkcje operacji dyskowych.
0395 - Rozszerzajac CRT
W rubryce "Dla praktyków" padło już wiele propozycji rozwiązań zastępujących funkcjonalnie standardowy moduł CRT. Nie będę zatem prezentować podejścia do tego problemu. Przedstawię natomiast coś, co może stanowić bardzo przyjemny dodatek do wspomnianych prac - kilka procedur i funkcji niskiego poziomu znacznie rozszerzających możliwości zarówno pascalowskiego modułu CRT, jak i modułów zastępujących go. Przy okazji powiem kilka słów na temat szybkości działania programów w Pascalu, wykorzystania wbudowanego w kompilator asemblera i różnych zalet stąd płynących.
2595 - Długie skoki
Wiemy wszyscy, że używanie instrukcji "goto" w Pascalu nie przynosi zaszczytu programiście, a nawet może ściągnąć na niego opinię niedouczonego i nieudolnego. Jesteśmy też wszyscy świadomi, że dowolny algorytm o jednym wejściu i jednym wyjściu można zapisać bez posługiwania się skokiem, jeśli tylko stosowany język programowania zawiera w sobie instrukcje "if" i "while".
1795 - Macierzowe Przekształcenia Przestrzenne
Jeśli chcesz kogoś zadziwić (zainteresować, zaintrygować), to na pewno pokażesz napisany przez siebie program. Jeśli jednak chcesz wprawić kogoś w kompletne osłupienie, program ów powinien zawierać animację czegoś, i to najlepiej w przestrzeni. Jeśli ponadto włożysz w ten program trochę serca i dobrych pomysłów, powstanie dzieło, które rzuci na kolana każdego, kto nań spojrzy, dzieło, które może być namiastką tak ostatnio modnej rzeczywistości wirtualnej. A jak to zrobić ?
0387 - Programowanie - Rzemiosło Czy Sztuka ?
''Programować rzeczywiście może każdy, ale... Po pierwsze, nie każdy musi - można korzystać z komputerów nie umiejąc programować. Po drugie, pewne nieskomplikowane zadania można wykonać programując byle jak. Jeśli chcemy pisać programy rozwiązujące duże, poważne zadania nie wystarczy po prostu programować. Trzeba programować dobrze.''