Linux jak Windows

Przez długie lata żyłem w mocnym przekonaniu, że nie zobaczę nigdy Linuxa, który w użytkowaniu byłby równie prosty jak Windows. Po wczorajszym dniu moje przekonanie zdecydowanie osłabło. Do dnia wczorajszego na moim dysku dzielnie sprawował się OpenSUSE (na zmianę z Windows oczywiście :)), ale postanowiłem ściągnąć i sprawdzić cóż takiego cudownego oferuje Ubuntu skoro o nim tak głośno.

Po ściągnięciu okazało się, że MS Virtual PC 2007 niespecjalnie chce go uruchomić. Zależało mi na tym, aby nie musieć wypalać płytki i restartować komputera ale skoro los chciał inaczej - trzeba było z nim walczyć. Nagrałem Ubuntu na płytę.

Przy bootowaniu systemu z płyty przywitało mnie logo Ubuntu z ładnym paskiem postępu na dole - nie trzeba chyba specjalnie długo się zastanawiać skąd taki pomysł ^^. Tak czy inaczej, wygląda to zdecydowanie ładniej niż “Mounting local filesystems… [ ok ]“, prawda? :) Z drugiej strony wadą jest to, że jeśli coś nie działa to nie widać tego przy uruchamianiu systemu i trzeba później przekopać logi. Pamiętajmy jednak, że Ubuntu to system dla użytkownika przesiadającego się z Windows. Takiemu nawet informacja o tym co nie działa i tak by nic nie dała więc ją ukryto ;)

Po uruchomieniu system ubrał się w GNOME - plus dla niego bo to moje ulubione środowisko graficzne. Aby nie tracić czasu, włączyłem Firefox’a z zamiarem pooglądania stronek. Okazało się jednak, że komputer nie jest podłączony do internetu. Mogłem się tego spodziewać. Problem tkwił w sterowniku do bezprzewodowej karty sieciowej. Na początku sądziłem, że nie jest on zainstalowany, ale okazało się, że sterowniki MadWiFi są i nawet działają! Problem w tym, że nie z moją kartą sieciową ^^.

To jednak nie był wielki problem, przy użyciu sterowników windows’owych, ndiswrapper‘a i herbaty uporałem się z tym dość szybko (mam doświadczenie z OpenSUSE - tam w ogóle nie było sterowników). Po uruchomieniu połączenia bezprzewodowego przyszedł czas na sprawdzenie działania filmów i plików muzycznych. Tutaj spotkała mnie wielka niespodzianka. Wszystko działa bez żadnego cudowania. Wystarczy po prostu kliknąć dwa razy na plik z filmem czy MP3 i system uruchamia odpowiedni program i zaczyna odtwarzanie! To jest nawet lepiej niż w Windows, ponieważ nie trzeba instalować programów do multimediów ani kodeków do filmów - wszystko już jest.

Pobawiłem się w systemie jeszcze trochę i postanowiłem go zainstalować. Co ciekawe - nie musiałem nawet uruchamiać ponownie komputera. Na pulpicie znajdowała się ikonka z opisem “Zainstaluj”. Kliknąłem na nią wyskoczył jakiś tam kreator instalacji, w którym wystarczyło właściwie wszędzie klikać “Dalej”. Po wszystkim na ekranie pojawiło się małe okienko (z 20×20px - mówiłem, że małe! :P). To rozpoczęła się instalacja. Problem w tym, że nie wiedziałem ile już zainstalowano i jak długo jeszcze to potrwa. Poszedłem więc odkurzać.

Po skończonym odkurzaniu wróciłem do komputera i ujrzałem komunikat o tym, że system został zainstalowany. Fajnie. Uruchomiłem ponownie komputer i zbootowałem mojego nowo zainstalowanego Linux’a. Znów trzeba było pobawić się z siecią WiFi, ale to krótka chwila. Później rozpocząłem bawienie się systemem :) Chcąc sprawdzić jak się sprawuje Wine zainstalowałem Unreal Tournament. Oczywiście nie miałem jeszcze sterowników do grafiki więc uruchomiłem go z opcją Software Rendering. Okazało się, że uruchamia się i chodzi jak marzenie! Postanowiłem więc zainstalować sterownik do grafiki. Trochę czasu mi to zajęło, ale to głównie przez moją nieuwagę. Wszystko można było zrobić w 10 minut korzystając z pomocy w internecie gdzie krok po kroku było opisane jak należy zainstalować grafikę.

Później znajomy zapytał mnie jak się sprawuje Wine z grami, więc opowiedziałem mu o UT. Poprosił mnie abym sprawdził czy Starcraft pójdzie. Sprawdziłem. Poszedł. Wystarczyło go normalnie zainstalować i wszystko śmiga jak należy. Później sprawdziłem jeszcze Heroes Of Might And Magic III - moją ulubioną wersję z całej serii. Także chodziła bez zarzutu.

Podsumowując, Ubuntu Linux jest godnym polecenia systemem dla każdego. Myślę, że kilka udogodnień nie będzie przeszkadzać zagorzałym linuxowcom skoro wszystko nadal da się zrobić w konsoli, a jest to niewyobrażalne ułatwienie dla każdego przeciętnego użytkownika komputera. Nie muszę już chyba wspominać o tym, że Ubuntu jest systemem darmowym.

Drupal

Wreszcie mam trochę czasu wolnego. Tak to jest jak sie zbyt beztrosko podchodzi do Analizy matematycznej ;) (pozdrawiam pana doktora od ćwiczeń ^^). Ale wróciłem i mam chwilę czasu, żeby coś naskrobać :)
Jako, że ostatnio dostałem zlecenie na stworzenie strony internetowej dla pewnej firmy, zacząłem sobie przypominać wszystko czego się w życiu dowiedziałem o tworzeniu stron internetowych ;) Przy okazji postanowiłem ją postawić na jakimś ciekawym CMS-ie.

Całkiem niedawno ukończono pracę nad najnowszą wersją Drupal’a, który jest już w wersji 6.0. Już przy jego instalacji widać pierwsze różnice w stosunku do poprzednich wersji. Ogromnym plusem, IMO jest możliwość tłumaczenia strony na różne języki i późniejszy wybór języka za pomocą jednego kliknięcia. Pięknie.

Jest jednak jedna wada wynikająca wprost z zalet Drupal’a: trudność w nauce obsługi. Jest duży i tego się nie przeskoczy. Wiele rzeczy da się na szczęście wyklikać. Jest jednak coś czego wyklikać się nie da i trzeba jednak nad tym posiedzieć. Mówię oczywiście o tworzeniu własnych skinów. Nie chodzi mi oczywiście o stworzenie podstawowej struktury strony tak, żeby coś się wyświetlało i było ładne. Chodzi o dodanie ciekawych możliwości na stronie i wykorzystanie do tego ogromnego potencjału Drupal’a.

Na początku jest to dość trudne do ogarnięcia, ale z czasem daje sie poznać. Nieocenioną pomocą okazuje się strona domowa Drupal’a, na której można znaleźć wiele ciekawych rzeczy do wstawienia, lub po prostu zapytać jak coś zrobić. Ktoś powinien odpowiedzieć - przy okazji powiem, że ludzie pomagający za darmo zazwyczaj są zdecydowanie milsi od ludzi z obsługi technicznej, którzy dostają za to pieniądze.

Aktualnie jestem w trakcie nauki obsługi tegoż wspaniałego CMS-a, stąd nie ma co się spodziewać mojej aktywności w programowaniu AGE w najbliższym czasie ;)

Sztuka - Programowanie

Od kiedy napisałem mój pierwszy program minęło już trochę czasu (~8 lat), ale nigdy nie zapominam jaką radość sprawiło mi, kiedy zmusiłem komputer do posłusznej współpracy. Przez te wszystkie lata każdy kolejny program - nawet jeśli był najprostszy - sprawiał mi taką samą radość. Kiedy teraz o tym myślę zdaje mi się, że programowanie jest dla mnie bardziej sztuką niż narzędziem. Oczywiście moje podejście do tej sprawy wydawało mi się naturalne i nie sądziłem, że można do tego podchodzić bezdusznie i rzeczowo. Odkryłem jednak drugą stronę lustra… Na uniwersytecie. Tutaj wszyscy, których spotkałem traktują programowanie jako zwykłe narzędzie pomocne do wykonywania ich pracy. To smutne.

Odkąd poszedłem na studia, uświadomiłem sobie także, że jeśli programowanie to zapisanie algorytmu rozwiązującego problem 8 hetmanów w jakimś języku programowania to ja nie lubię programować. Ja lubie tworzyć kod. Pisanie go, tak aby wyglądał przejrzyście w pliku zródłowym, działał szybko i poprawnie - to jest to co na prawdę sprawia mi radość. Co ten kod będzie robił nie jest aż tak ważne - choć niewątpliwie nie jest bez znaczenia :) Dlatego nigdy nie brałem udziału w konkursach programistycznych bo jedyne co mają wspólnego z prawdziwym programowaniem to Język Programowania - cała reszta to w większości zwykła matematyka.

Wielu moich znajomych z roku, którzy pierwszy raz zetknęli się z programowaniem mają negatywne odczucia co do tego. Trudno się im dziwić jeśli sam wykładowca nie podchodzi do tematu zbyt entuzjastycznie. Rozumiem, że może nie wszystkim się to podobać, ale przecież jeśli zdali maturę z Matematyki to znaczy, że maja w mniejszym lub większym stopniu zdolności ścisłego myślenia, a tyle przecież wystarczy, żeby pojąć o co w tym całym programowaniu chodzi.

Wracając jednak do głównego tematu czyli programowania jako sztuki to jest tutaj - dla tak myślącego programisty - pewna straszliwa niedogodność. Wezmy najpierw takiego artystę malarza. To co stworzy, będą potrafili ocenić specjaliści oraz zwykli zjadacze chleba - spodoba im się albo i nie. Inny artysta. Aktor. Jego gra jest oceniana przez specjalistów oraz zwykłych widzów. Co ma jednak powiedzieć biedny artysta-programista? Może napisać coś co będzie działało super szybko do tego będzie łatwo rozszerzalne o nowe funkcje itd., ale tak długo jak wyniki działania będą wyświetlane w konsoli - nie uzyska on zbyt wielkiego uznania laików. Specjaliści oczywiście będą sie tym zachwycać i podziwiać, a inni tylko popatrzą i powiedzą “Ale Ci informatycy to są dziwni! Zachwycają się takim badziewiem.”. Tutaj jednak należy bardziej współczuć biednym matematykom bo, o ile programiści mogą stworzyć zapierający dech w piersiach efekt graficzny to matematycy rzędami kwantyfikatorów, liczb i znaczków własnej produkcji żadnego szału na widzu nie zrobią ;) To mnie trochę podbudowało :P

Nie lubię grać w nowe gry?

Ostatnio pomyślałem, o grach. Zastanowiłem się trochę nad tym w jakie gry lubię grać, a jakie przyciągnęły moją uwagę tylko na chwilę. Wnioski jakie wyciągnąłem są zawarte już w tytule. Nie wiem co robią twórcy nowych gier że aż tak bardzo mnie do nich zniechęcają. Być może są to proporcje cen do długości rozgrywki? Zakładając, że nie przeszedłem The Settlers 2 i The Settlers 6, gdybym miał do wyboru - kupić “dwójkę” za 19zł i rozgrywać jedną mapę ładnych parę godzin, a czasem nawet i dni, oraz kupić “szóstkę” za 40-60zł (strzelam bo nie wiem ile kosztuje) i przejść ją w 3 dni - oczywiście kupiłbym The Settlers 2.

Podobnie sprawy się mają jeśli chodzi o kontynuacje innych wielkich tytułów takich jak na przykład Heroes Of Might And Magic, który zrobił przecież ogromną karierę. HoM&M 3 było moim zdaniem najlepszą wersją i do dzisiaj gram sobie z bratem i siostrą czasami ^^. Później była HoM&M 4, która miała tylu zwolenników co wrogów. Przypuszczam, że zwolennikami byli Ci, który nie grali wcześniej w żadną inną wersję. Ja miałem ogromne trudności aby się przekonać do “czwórki” jednak wystarczyło spojrzeć na nią nie jak na Heroesów, a jak na zupełnie nową grę - wtedy była nawet fajna.

Jeśli chodzi o HoM&M 5, które pojawiło się z wielkim hukiem niczym sylwester - nie podchodzi mi. Grafika jest bardzo ładna, grywalne w miarę też to jest, kampania całkiem ciekawa… Ale coś mnie w tej grze denerwuje i nie jestem w stanie stwierdzić co… Dodatkowo kamera, która zawsze patrzy dokładnie w przeciwną stronę do tej w którą chcę jechać… A ja chciałbym po prostu pograć, zamiast oglądać ładne tekstury…

Ostatnio w modzie są również super wypasione graficznie gry MMORPG. Wiele z nich dostępnych jest w internecie nawet za darmo. Są cudowne - grafika dla oczu jest niczym miodek dla Kubusia Puchatka, ale to oczywiście tylko jeden z wielu klocków z jakich składa się gra. Pozostałe klocki są jednak trochę przygaszone, stare albo po prostu brzydkie. Dźwięki czasem są ładne i dopasowane czasem nie. Grywalność? W MMORPG jest to zależne w większości od graczy więc chytrze pominę ten temat nieuchronnie dążąc do najważniejszego - Fabuły.

Na tym klocku gry autorzy rzadko skupiają się na dłuższą chwilę. Większość zadań czekających na potencjalnego gracza jest bardzo ambitna: “Idź do X, przeklep potwory typu Y i pozbieraj z nich przedmioty Z w ilości Ź” (na szczęście żyjemy w Polsce więc nie zabrakło mi literek ;) ). Takie podejście do gry RPG jest [ while(true && !readerBored ) { ] bardzo [ } ] uproszczone. Jak można cokolwiek z takimi zadaniami w ogóle nazywać RPG? IMO typ MMORPG powinien się nazywać “MMO_KOX_POSTACI”. Jak takie ‘coś’ ma się do takich produkcji jak Baldur’s Gate czy Icewindale? Gdzie są zadania, w których trzeba było wysilić minimalnie czaszkę aby poskładać wszystko do tzw. kupy? Zadania, które pomimo tego, że trwały długo były ciekawe, w przeciwieństwie do zadań znanych z nowiutkich produkcji.

Ponarzekałem trochę, już mi lepiej. Najbardziej przerażające jest to, że wszyscy widzą jak jest i nikt nic z tym nie robi. Dlaczego? Bo na MMO_KOX_POSTACI można zarobić! Nikt nie przejmuje się zidiocaniem społeczeństwa.

Izometryczna zmora

Nie pisałem dość długo [pozdrowienia dla Xiona ;) ] ponieważ ostatnio zamiast tworzyć AGE postanowiłem go użyć. Może nie do stworzenia gry, ale chciałem stworzyć kawałek kodu obsługujący renderowanie mapy izometrycznej. Niewiele w tym, może udziału ma samo AGE, ale jest dość pomocne i całkiem wygodne (nie chwaląc się rzecz jasna :P).

Teraz już przejdę do sedna tego posta - izometrii. Mapę w pamięci opisałem jako tablicę obiektów CTileList wielkości size_x * size_y. CTileList to lista grafik leżąca na aktualnej pozycji ( nazwa bardzo średnio trafiona - później zmienię ;) ). Na samym dole jest zazwyczaj grafika podłoża (np. trawa, piasek, drewniana podłoga) natomiast na pozostałych w przyszłości będą wszelkie inne rzeczy jak roślinność, budynki czy co innego tam może jeszcze być.

Gdzie ta zmora?

Gdzie? Otóż w rysowaniu. W internecie jest dostępnych kilka artykułów na temat izometrii jednak żaden z tych, które znalazłem nie mówi o rysowaniu fragmentu mapy izometrycznej w sposób wydajny ładnie i przejrzysto. Dlatego od kilku dni w wolnych doświadczalnie pracuję nad różnymi sposobami rysowania tych rombów. Jak coś mądrego wymyślę to chętnie się podzielę ;)

Następny post - jak będę miał czas - napiszę o tych sposobach, które już odkryłem znalazłem albo zasłyszałem ;)

Ładowanie Kontrolek

Zmieniając nieco znane przysłowie, tak aby pasowało do sytuacji i ogólnie do kodzenia:

“Kto nie ma w głowie, ten ma w palcach”

Dlaczego o tym mówię? Chyba nie trudno się domyślić. Skutki zakodowania czegoś na szybko i bez przemyślenia są dość łatwe do przewidzenia. W celu poprawienia ładowania kontrolek tak, aby można było dodawać właściwości specyficzne dla danej kontrolki ( takie jak np. zaznaczenie w CheckBox ) musiałem zdrowo przeorganizować to co do tej pory napisałem.

Nie ma jednak tego złego co by na dobre nie wyszło - zawsze to jakaś nauczka :) Na szczęście mam już duże doświadczenie w poprawianiu i przeorganizowywaniu kodu bo mój styl programowania można określić jako eksperymentalny lub też improwizacyjny. Można go podzielić na 2-3 fazy:

  1. Zakodzenie czegoś byle działało w celu sprawdzenia co będzie potrzebne i jak to będzie mniej więcej wyglądać.
  2.  Wstępne zakodzenie wersji finalnej. Jeśli jest dostatecznie dobra to faza 3 jest pomijana.
  3. Olanie wstępnej wersji finalnej i napisanie wszystkiego od nowa tak jak być powinno.

Na szczęście często kończę już na 2 fazie. ;)

C#

Od jakiegoś czasu zastanawiałem się co takiego fenomenalnego jest w C#, że wszyscy go chwalą. No dobra, nie wszyscy, ale wielu. Postanowiłem więc sprawdzić to na własnej skórze.

Ściągnąłem i zainstalowałem Microsoft Visual C# Express Edition 2008. Po odpaleniu na pierwszy rzut oka jedynym szczegółem, który odróżnia VC# od VC++ jest kolor zielony splash screen’a podczas gdy ten z VC++ jest żółty ^^

Postanowiłem stworzyć nowy projekt w celu testów. Kiedy moim oczom ukazała się wreszcie forma na której mogłem umieścić kontrolki, zaszalałem… Umieściłem jeden przycisk. Na początek chciałem sprawić aby po wciśnięciu przycisku pojawił się mały prosty Message Box. Dzięki świetnemu uzupełnianiu składni okazało się to prostsze niż napisanie “Hello world” w konsoli ^^

W dalszej części testu pomęczyłem jeszcze kilka innych kontrolek sprawdzając z czym się je zajada ;) Jako, że nic mądrego nie mam na ten temat do powiedzenia - przejdę do następnej kwestii :P

Teraz chciałbym się pozachwycać trochę uzupełnianiem składni i “zgadywaniem” przez VC# tego co chcę wpisać. Bardzo fajną rzeczą podczas powoływania do życia nowego obiektu za pomocą new jest automatyczne zgadywanie konstruktora. Polega to na tym, że po wpisaniu operatora new i spacji od razu pojawia się okienko z podpowiedziami z zaznaczonym konstruktorem klasy znajdującej się po lewej stronie `=` (który oczywiście jest przed new ;) ).

Następnym udogodnieniem, które bardzo mi przyspieszyło pisanie aplikacji testowej było zgadywanie nazw zmiennych. Jeśli na przykład używałem ostatnio zmiennej o nazwie “zmienna” to wpisując “z” w edytorze od razu pojawi się okienko z podpowiedzią i zaznaczoną nazwą: “zmienna” (nawet jeśli w porządku leksykograficznym nie będzie to pierwsza zmienna na `z`). To pomaga zwłaszcza podczas korzystania ze struktur. Wpisując pierwszą literę nazwy obiektu jakiejś struktury od razu pojawi się okienko `dobrą` podpowiedzią (jeśli już wcześniej użyliśmy tej nazwy) - wtedy wystarczy już tylko wcisnąć `.` i do edytora zostanie wpisana cała nazwa obiektu razem z kropką i dodatkowo wyświetlone zostaną elementy struktury (co już raczej nikogo nie dziwi ;) ).

Jako ostatnią rzecz, która mnie  w VC# zachwyciła wymienię tą, która zaskoczyła mnie jako pierwsza. Jest nią szybkość kompilacji kodu. Tak niesamowite tempo kompilacji po prostu wgniotło mnie w fotel!

Istnieje jednak pewna sprawa, która jest trochę irytująca i jak dla mnie trochę brzydko wygląda w kodzie. Chodzi mi o dodawanie `private` lub `public` przed każdą zmienną i metodą.

Podsumowując: Moja ocena C# jest bardzo pozytywna. Dla programistów C++ prawdopodobnie pomocna będzie ta strona.

BTW: dzisiaj czytałem art o tworzeniu zegara analogowego w C#. Artykuł byłby całkiem w porządku gdyby nie fakt, że autor bardzo beztrosko podchodził do pamięci zarówno komputera jak i czytelnika. Powinienem tutaj wyjaśnić co miałem na myśli mówiąc o pamięci czytelnikowej. Otóż chodziło mi o to, że autor artykułu używał 1000 zamiennych, kiedy tak na prawdę mógł pracować na zaledwie kilku.

Szczytem tej techniki było zaimplementowania przesuwania okna przez złapanie okna w dowolnym punkcie i przesuniecie myszki. Autor użył do tego 5 zmiennych podczas gdy mi wystarczyły tylko dwie.

PS.: Musiałem napisać o tym arcie żeby mi ulżyło bo strasznie mnie to piekło ;)

STL + DLL = QPA!

Do tej pory AGE było tylko biblioteką statyczną. Zechciałem więc żeby dało się skompilować jako DLL. Dowiedziałem się co trzeba zrobić, wrzuciłem odpowiednie kawałki kodu tam gdzie trzeba. Kompilacja. Linkowanie. Wszystko poszło OK. Mam age.dll oraz age.lib więc zabieram się za test.

Tworzę sobie nowy projekcik piszę to co trzeba i uruchamiam. Działa! Pokazało mi się puste czarne okienko - i o to chodziło ^^ Problem pojawił się kiedy stworzyłem klasę dziedziczącą po ageTask. Nagle wyskoczył błąd i program się wywalił.

Skompilowałem sobie więc age_d.dll (debug) i spróbowałem raz jeszcze. Krótka randka z debuggerem i okazało się, że std::string ma jakieś problemy z alokowaniem pamięci. Poszperałem w necie, zapytałem na forum i moje przypuszczenia się potwierdziły: DLL i STL to nie jest dobre połączenie.

Udało mi się jednak znaleźć stronę na której jest sposób na obejście tego problemu. Okazuje się jednak, że możliwe jest to dla std::string oraz std::vector a co z potrzebnym mi std::map? Nic z tego!

Dlatego też postanowiłem napisać własną mini-bibliotekę zawierającą klasy  list, string oraz map. Klasę string właściwie już skończyłem. Interfejs ma prawie identyczny z std::string. Mówię prawie, bo dodałem do niej metodę print( char *format, … ) dzięki której będzie można formatować wygodnie tekst oraz powycinałem te mniej potrzebne metody ^^.

Jeśli chodzi o list to interfejs będzie zupełnie inny niż ten z std::list lub std::vector. Powodem jest nie mniej nie więcej tylko to, że są po prostu brzydkie ^^.

GUI: Sposób na rysowanie

Podczas pisania obsługi eventów wpadła mi do głowy pewna myśl. Mianowicie, zastanowiłem się po co rysować w każdej klatce całe GUI skoro i tak rzadko kiedy coś się tam zmienia.

A może by tak zrenderować GUI  do tekstury i wyświetlać tylko teksturę? Takie rozwiązanie znacznie zwiększyłoby wydajność rysowania takiego GUI. Nawet idąc na łatwiznę i odrysowując całe GUI gdy tylko jeden przycisk zmieni swój kolor bo myszka jest akurat nad nim zyskujemy całą masę przebiegów, w których jednak nic ciekawego się nie dzieje.

Pokombinuję z tym trochę i pochwalę się efektami bądź ich brakiem ^^

Pascal

W końcu na studiach zostałem zmuszony do nauczenia się Pascal’a. Nigdy wcześniej nie chciało mi się tego uczyć bo i po co? Na lekcjach informatyki w liceum pisałem wszystko w C i nauczyciel nic do tego nie miał.

Teraz jednak już trzeba się go nauczyć. Jako, że programuję już około 7 lat w C++, myślałem że nauka Pascala będzie mnie męczyć i denerwować. Myliłem się chociaż nie jest to język specjalnie ciekawy ani ładny.

Wg mnie Pascal to zabawka dla dzieci i naukowców, którym nie chce się ( albo nie potrzebują ) uczyć się prawdziwego języka programowania albo chociaż jakiegoś poważniejszego języka skryptowego. Jest to język zawierający masę niepotrzebnych udogodnień, że nie wspomnę już o tym że jest po prostu brzydki.

Chcąc rozwinąć nieco te zarzuty o niepotrzebnych udogodnieniach wymienię chociażby stwór o nazwie SET. Zupełnie nie wiem dlaczego jest to część języka. Równie dobrze można by było to jakoś “okodzić” na tablicach. Dodatkowo zupełnie nie widzę potrzeby stosowania typów okrojonych oraz indeksowania tablic zaczynając od dowolnej liczby.

Jeśli chodzi o estetykę języka - IMHO jest okropny. BEGIN oraz END są różnej długości co daje blokowi instrukcji nieprzyjemny wygląd:

BEGIN
i := 5;
END .

Instrukcja przypisania też mi się nie podoba bo jest niewygodna do pisania ale już tego czepiać się nie będę. Następna rzecz składniowa która mnie denerwuje to blok VAR:

VAR    i, j : integer;
r : real;

Jak by człowiek nie próbował tego zapisywać zawsze wygląda szpetnie. Druga sprawa, że zmienne muszą być zadeklarowane w tym bloku i nie można ich deklarować później w kodzie w żaden sposób. Powoduje to często (przynajmniej u mnie) odrywanie się od kodu tylko po to żeby dodać jedną zmienną i przy okazji się rozproszyć :|

Takie rozwiązanie z blokiem zmiennych jest dobre jeśli się pisze jakiś algorytm na podstawie schematu blokowego. Wskażcie mi programistę, który robi schematy blokowe do programów które pisze… Musi być masochistą albo człowiekiem cierpiącym na nadmiar czasu.

Ja często piszę kod  “na żywca” i nie potrzebuję się dodatkowo rozpraszać dodawaniem zmiennej tam gdzie trzeba bo w międzyczasie mogę stracić wątek i będzie klops.

Nie dziwię się, że `młodzi` programiści mają problem z przestawieniem się na Pascala skoro jest tam tyle udogodnień wbudowanych, że później ciężko się pogodzić z ich utratą. Może dlatego panuje przekonanie, że C++ jest taki strasznie trudny.  Jeśli tak to można pójść dalej w tych rozważaniach i stwierdzić, że nauczyciele robią krzywdę uczniom przekazując im wiedzę dotyczącą Pascala.

Dlatego cieszę się, że sam się pokarałem książką o C++ w młodości i teraz mogę się cieszyć tym, że mogę pobawić się w Pascalu, w którym zdecydowanie łatwiej tworzy się małe programiki.

Wniosek z tego jeden: z programowaniem jest jak z pływaniem w morzu, lepiej rzucić się na głęboką wodę i płynąć w stronę brzegu niż na odwrót ^^