Archive for Culture

Co tam, panie, w WoW-ie słychać?

2008-07-06 0:27

WoWScrnShot_101807_213347.jpgJakiś tydzień temu naszła mnie ochota, by zagrać sobie znowu w “jedynie słusznego MMORPG-a”, czyli sławetny World of Warcraft. Ciężko powiedzieć, dlaczego, skoro przez prawie 10 miesięcy nie chciało mi się tykać tej gry nawet końcem małego palca… Pewnie dobrą wymówką będą wakacje – krótkie wprawdzie, ale jednak :)
Wnioski z ponownego odwiedzenia wirtualnego świata WoW są, ogólnie mówiąc, różne i ciekawe zarazem. Najważniejszą obserwacją jest chyba to, co ktoś nazwał coraz większym “zcasualowaniem się” tej gry, a ja określam mianem “syndromu zbliżającego się dodatku”. (Drugi expansion pack do tej gry wejdzie właśnie niedługo w fazę beta-testów, na które można się już zapisywać). W skrócie polega to na tym, iż wszystkie elementy gry określane zgrabnie jako endgame – czyli te najtrudniejsze i najbardziej wymagające – są teraz znacznie bardziej dostępne nie tylko dla 5 czy 10 procent hardcore‘owych graczy. Lokacje, które kiedyś wymagały dobrze skoordynowanej drużyny 10 lub 25 osób (raidy), najlepiej z jednej gildii, są teraz w zasięgu grup formowanych spontanicznie z graczy w gruncie rzeczy mniej lub bardziej przypadkowych.

WoWScrnShot_063008_101143.jpgJest to w sumie naturalna kolej rzeczy, że dodawany na bieżąco przez twórców gry content z czasem się dewaluuje, co skutkuje wprowadzeniem nowych lokacji, bossów, itp. – i tak to się zasadniczo kręci :) Wielkim problemem chyba wszystkich MMORPG-ów jest jednak schematyczność, bowiem po pewnym czasie (czasem dłuższym – zwłaszcza w przypadku tak dopracowanej gry jak WoW) stwierdzić można, że to wszystko tak naprawdę już było. Trochę inaczej, ale duże analogie są jednak widoczne.
WoWScrnShot_062908_233755.jpgRecykling pomysłów jest zauważalny zwłaszcza w przypadku walk z bossami, co jest esencją każdego raidu. Dla niewtajemniczonych wyjaśniam, że podstawowy schemat przebiegu takiej walki w klasycznym MMORPG-u typu fantasy wyróżnia trzy elementy, czyli role pełnione przez poszczególnych graczy:

  • Rola tanka, pełniona przez postać (postaci) w ciężkiej zbroi z dużą ilością życia, czyli klasy wojownika, paladyna lub podobnych. Jej (ich) zadaniem jest skupić na sobie uwagę bossa i przyjąć większość zadawanych przez niego obrażeń.
  • Rola healera, czyli jednej lub kilku osób utrzymujących przy życiu cała grupę, ze szczególnym uwzględnieniem tanków. Zwykle jest to zadanie dla postaci posługujących się jakąś formą magii.
  • Rola damage dealera (“zadawacza obrażeń”), czyli postaci mających za zadanie zrobić złemu bossowi odpowiednio dużą krzywdę :) Wachlarz sposobów jest tutaj szeroki i obejmuje zarówno magię, jak i walkę fizyczną wręcz czy strzelanie z dystansu.

Mało skomplikowane, prawda? W czystej wersji (zwanej wyjątkowo obrazowo tank & spank) byłaby to w istocie wielka nuda. Dlatego zawsze występują liczne dodatkowe atrakcje, których może być niewiele lub całkiem sporo, ale według mnie wpadają zawsze w jedną z czterech poniższych grup:

  • Niebezpieczeństwa wymagające od graczy poruszania się albo przynajmniej odpowiedniego ustawienia. Zazwyczaj oznacza to konieczność stania w odpowiednim odstępie od innych, gdyż inaczej może wydarzyć się coś niedobrego. W bardziej skomplikowanym przypadku może to być konieczna okresowa zmiana pozycji, oznaczająca czasem długi bieg, wymagająca szybkiego refleksu, uwzględnienia kwestii widoczności lub poruszania się w trzech wymiarach. Niekiedy pomyłka kończy się bardzo nieprzyjemnie :)
  • Dodatkowi wrogowie, towarzyszący głównemu bossowi, z którymi trzeba sobie jakoś poradzić. Bywa, że problemem jest głównie ich ilość; niekiedy też są znacznie większym kłopotem od samego bossa. I wreszcie: wrogowie ci mogą mieć również całkiem dużo wspólnego z samymi graczami…
  • Innowacje w dziedzinie tankowania. Niestety (a może raczej -stety) bossowie generalnie nie wykazują się inteligencją: jako byty całkowicie oskryptowane nie koncentrują się na szybkim wyeliminowaniu kluczowych postaci, czyli healerów, lecz z uporem biją w ciągle leczone postaci ciężkozbrojne. Cóż, takie życie ;) Tym niemniej bywa, że czasami i tutaj zdarzają się jakieś innowacje, co objawia się na przykład koniecznością rotacji tanków, pełnienia tej roli przez klasy zupełnie nietypowe lub nawet przez postacie nie będące graczami (non-player characters – NPCs). Wyjątkowo boss może w ogóle nie potrzebować tankowania lub zwyczajnie być na nie odporny.
  • Łamanie schematów dotyczących ról poszczególnych typów postaci w całej walce. Healerzy mogą na przykład niemal całkowicie stracić możliwość leczenia na ten czas, co zmusza ich do zadawania obrażeń. W innym przypadku część graczy zwykle zajęta tym właśnie zadaniem musi dla odmiany zająć uwagę dodatkowych przeciwników biorących udział w walce. A bywa i tak, że tradycyjne klasy postaci zupełnie przestają mieć znaczenie, choć taka oryginalność jest wielce rzadka.

WoWScrnShot_070308_223122.jpgJaki jest wniosek z tej nieco przydługiej wyliczanki? Ano taki, że w WoW-ie nowatorskie pomysły pojawiają się niestety coraz rzadziej. Spośród 17 przykładów, które mimochodem wymieniłem (tak, chodzi o te dziwne linki ;D), tylko cztery pochodzą z wydanego półtora roku temu pierwszego dodatku, The Burning Crusade. Wszystkie inne koncepty pojawiły się już w podstawowej wersji gry i są tylko użytkowane ponownie z niewielkimi zmianami.
Czy to oznacza niedaleki zmierzch jej popularności? To niewykluczone. Ale przecież zawsze pozostaje jeszcze rozgrywka typu Player vs Player. Tam tendencje są zgoła odwrotne – upraszczające, a najlepszych ich wyrazem są areny. Weźmy po prostu dwie drużyny składające się z 2, 3 lub 5 graczy i niech wygra lepsza. Mało oryginalne, ale zadziwiająco popularne :D

Tags:
Author: Xion, posted under Games, Thoughts » Comments Off on Co tam, panie, w WoW-ie słychać?

Vista i Eksplorator gier

2008-05-06 19:40

Oprócz wsparcia dla wielkiej i wspaniałej wersji 10 biblioteki DirectX, system Windows Vista ma przynajmniej jeszcze jeden feature związany z programowaniem gier (i przy okazji z graniem w nie). Nie jest on aczkolwiek aż tak szeroko znany, chociaż wszystkie niezbędne narzędzia potrzebne do korzystania z niego są zawarte – nomen omen – w DirectX SDK.

Eksplorator gier w Windows Vista
Eksplorator gier z zaznaczoną
najciekawszą pozycją ;-)

To Eksplorator gier – małe, dosyć niepozorne, ale w gruncie rzeczy całkiem potężne narzędzie – w tym sensie, że potrafi ono czasami… zablokować dostęp do niektórych plików na dysku :) To aczkolwiek robota kontroli rodzicielskiej, czyli funkcji bardzo ściśle z wspomnianym Eksploratorem związanej. Ale po kolei.
Eksplorator gier (dostępny przez Start > Gry) to program, za pomocą którego możemy przeglądać gry zainstalowane na naszym komputerze. Prezentuje on nam ich nazwy, loga, gatunki, wymagania sprzętowe (w postaci Indeksu wydajności Windows), klasyfikację treści (wymagany wiek, zawartość przemocy, wulgaryzmów, itp.) i oczywiście pozwala także rzeczone gry uruchamiać – o ile nie zabrania tego ewentualna kontrola rodzicielska. Niby proste, chociaż na pierwszy rzut oka można by przypuszczać, że aplikacja ta dysponuje jakąś sztuczną inteligencją lub zdolnościami paranormalnymi. No bo skąd właściwie bierze ona te wszystkie informacje?…

Edytor plików GDF
Edytor plików GDF
zawarty w DXSDK

Prawda jest naturalnie taka, że wszystkie te dane muszą być podane przez twórców gier. W tym celu należy stworzyć tzw. Game Definition File (GDF), który jest plikiem XML opisującym różne parametry gry. Do niego możemy też dołączyć kilka grafik, a następnie całość należy zlinkować jako zasoby (resources) do jakiegoś pliku wykonywalnego – .exe lub .dll. Część tych czynności jest wspomagana przez Game Definition File Editor – niewielkie narzędzie dostarczane wraz z DirectX SDK począwszy od zeszłego roku. Potrafi ono mianowicie wyprodukować skrypt zasobów (plik .rc), który możemy dołączyć np. do projektu w Visual C++, skompilować do .res i z linkować z naszą grą.

Taphoo w Eksploratorze gier
Klasyfikacji treści wymaga
niestety (albo raczej stety)
cyfrowego podpisania gry

Lecz niestety nie jest to koniec zabawy :) Cały ten system, dzięki któremu Eksplorator posiada informacje o zainstalowanych grach, działa częściowo w oparciu o COM, a sama gra wymaga rejestracji w systemie w dość specjalny sposób, zanim będzie ona widoczna w programie. Ten sposób spokojnie można nazwać “ręcznym”, bo obejmuje on:

  1. Stworzenie instancji interfejsu COM IGameExplorer.
  2. Wywołanie jego metody VerifyAccess z podaniem pliku GDF.
  3. Wywołanie metody AddGame z kilkoma parametrami, m.in. wspomnianym plikiem i ścieżką do katalogu instalacyjnego gry.
  4. Stworzeniu przynajmniej jednego skrótu (w ściśle określonym miejscu), który pozwoli np. uruchomić grę przy pomocy Eksploratora.

Urocze, prawda? ;-) Żeby było śmieszniej, wszystkie te czynności powinny być wykonane w trakcie instalacji gry (a dokładniej: na sam jej koniec), co wymaga intensywnej grzebaniny w używanym programie instalacyjnym (w celu wywołania funkcji z pomocniczej biblioteki DLL) lub po prostu napisania małego programiku, który zostanie odpalony na końcu setupu i wszystkim się zajmie. O ile mi wiadomo, ani InstallShield, ani Windows Installer, ani freeware’owy Inno Setup nie wspierają natywnie procesu rejestracji gier w podobny sposób jak chociażby instalacji czcionek w systemie.

“A więc po co to wszystko?”, można zapytać. Ano chociażby po to, żeby nasza cudna produkcja jakoś się wyróżniała :] Obecnie gry retailowe w większości rejestrują się Eksploratorze, lecz z pewnością czyni tak mniejszość gier typu casual czy share/freeware. Możemy więc choć trochę zabłysnąć w oczach przyszłego użytkownika (chociaż zasadniczo zalecam świecenie innymi zaletami).
Na koniec – jeśli zdecydujemy pobawić się całym tym mechanizmem – warto pamiętać o tym, że Eksplorator gier to rzecz istniejąca jedynie na Viście, więc tylko na tym systemie powinniśmy przeprowadzać proces rejestracji.

Wielkanocne jaja

2008-03-23 20:19

Wprawdzie Google ostatecznie rozstrzyga rywalizację między Gwiazdką a Wielkanocą na korzyść tej pierwszej, ale to zwyczaj z okolic święta wiosennego użyczył nazwy dla pewnej zabawnej praktyki programistycznej. Chodzi o easter eggs, czyli ukryte napisy, ekrany, a czasem całe pod-aplikacje, obecne w programie acz niedostępne niewtajemniczonym użytkownikom. Mimo tego, wiele spośród tych ‘jaj’ stało się wyjątkowo znanych.

Pinball w Wordzie 97Dotyczy to naturalnie tych aplikacji, które są szeroko znane – czyli na przykład tych wyprodukowanych przez znaną i (nie)lubianą firmę z Redmond. Różne wersje pakietu Office zawierają przykładowo przynajmniej kilka różnych gier, począwszy od prostego flippera (Word 97) przez symulator lotu aż po… grę FPP (we wczesnej wersji Excela). W Windows poniżej wersji XP można było też wykorzystać ciekawostkę ukrytą w jednym z wygaszaczy ekranu, który mógł wyświetlać kolejno nazwy znanych wulkanów na świecie.
Okno About programu mIRCSpora ilość easter eggs jest zawarta w okienkach About programów – co jest całkiem zrozumiałe, zważywszy że prawie nikt tam nie zagląda :) Do bardziej znanych należy chyba odgłos wydawany po kliknięciu w nos na fotografii twórcy programu mIRC.

Jaja możemy jednak znaleźć nie tylko w programach użytkowych, ale także w grach. Kto nie zna słynnego “krowiego poziomu” (cow level) z Diablo II? Blizzard ma zresztą więcej takich kwiatków w zanadrzu – jak choćby zabawne dźwięki wydawane przez jednostki w obu znanych RTS-ach (WarCraft i StarCraft). W World of Warcraft ilość różnych smaczków liczy się co najmniej w tysiącach.

Niestety, przed easter eggs przyszłość rysuje się ponuro. Możliwość umieszczenia w kodzie programu nieudokumentowanego kodu jest bowiem potencjalnym zagrożeniem i może prowadzić do powstania tzw. bomb logicznych. To oczywiście zmartwienie koncernów, które mogą nie ufać swoim programistom. Amatorskich produkcji siłą rzeczy to nie dotyczy.
Tak więc umieszczajmy w swoich grach i aplikacjach jak najwięcej jajcarskich pomysłów, póki jeszcze możemy :) Wesołych świąt!

Tags:
Author: Xion, posted under Applications, Games » 2 comments

Języki całkiem naturalne

2008-03-13 10:48

Języki programowania są tworami sztucznymi, ale wykazują pewne podobieństwo do języków naturalnych – czyli tych, którymi posługują się ludzie. Mają na przykład swoje gramatyki, składnie i semantyki, chociaż pojęcia te rozumiemy oczywiście nieco inaczej. W obu typach języków można też wyrazić bardzo wiele różnych myśli i relacji, z tym że domena języków naturalnych jest rzecz jasna znacznie szersza.

Ponieważ jednak wszystkimi językami posługują się głównie ludzie, niektóre języki programowania dorobiły się pewnej “otoczki” podobnej do tej, jaka towarzyszy części języków naturalnych. Myślę nawet, że bazując na tym, można wyróżnić odpowiedniki między obiema grupami. Może nie zawsze będą one wystarczająco sugestywne, ale przecież nie zaszkodzi spróbować ;-)
Jak dotąd w przypływie niewytłumaczalnej kreatywności wymyśliłem takie oto pary:

  • Książka “Hello World”C++ ma to do siebie, że jako tako znają go prawie wszyscy, lecz poziom tej znajomości pozostawia zwykle sporo do życzenia. Tak więc mimo tego, iż należy on do najpopularniejszych języków programowania, osób posługujących się nim zupełnie poprawnie nie ma znowu aż tak dużo. Zaś ekspertów znających na wyrywki każdy z jego niezliczonych kruczków znaleźć jeszcze trudniej.
    Który spośród języków naturalnych posiada podobne cechy? Ano angielski, oczywiście. Mówi się nawet, że większość świata mówi jego uproszczoną wersją, czyli “McEnglish”; możliwe, że na podobnej zasadzie istnieje “McC++” ;-] (Prawdę mówiąc, patrząc na niektóre posty na forum Warsztatu, jestem tego pewien ;P).
  • Java to z kolei kolejny bardzo popularny język programowania, który jest wykorzystywany do wielu różnych celów. W każdym zastosowaniu wygląda jednak nieco inaczej: wiadomo na przykład, że inaczej tworzy się aplikacje na J2ME (telefony komórkowe, itp.), a inaczej na J2EE (zastosowania serwerowe). Java ma więc sporo lokalnych ‘dialektów’, a w połączeniu z tym, że jest stosunkowo łatwa do nauki i codziennego posługiwania się, daje się porównać do języka hiszpańskiego.
  • Pascal również do trudnych języków nie należy. Charakteryzuje się ponadto dość rozwlekłą i sztywną składnią, która wymaga używania całkiem sporej ilości słów kluczowych. Słowa te zresztą też do krótkich nie należą, podobnie jak nazwy wbudowanych typów i funkcji.
    Z bardziej znanych języków naturalnych podobnie długie wyrazy i długie zdania oraz w miarę ścisła składnia występują chociażby w niemieckim.
  • W przypadku PHP mamy do czynienia z językiem, który niełatwo przyjmuje “nowinki techniczne” z zewnątrz. Obiektowość na przykład zaczęła być na poważnie wspierana dopiero w piątej jego wersji. Jednocześnie mamy tutaj kilka oryginalnych rozwiązań, które trudno uświadczyć gdzie indziej, jak choćby wstawianie HTML w środku bloku kodu PHP, konstrukcje typu DoSomething() || die(); albo funkcja list. Aha, i wypada też wspomnieć o najpopularniejszym znaku w tym języku, czyli $ ;)
    Podobną awersję do zapożyczeń oraz niespotykane gdzie indziej rozwiązania (np. liczebniki oparte na dwudziestkach, a nie dziesiątkach) w połączeniu z intensywnym użyciem znaczku apostrofa charakteryzują rzecz jasna język francuski.
  • Natomiast Basic miał w założeniu być językiem przede wszystkim dla początkujących. Jego założeniem była łatwość nauki i używania, co miało zapewnić mu popularność. W praktyce wyszło nieco gorzej i jego warianty nie mają w sumie zbyt wielu zwolenników, a cała ta historia przypomina trochę dzieje języka esperanto. Różnica jest taka, że Basic na pewno Nobla nie dostanie :)
  • I wreszcie mamy też C. Kiedyś było to narzędzie bardzo popularne, ale wraz z rozwojem nowszych języków pole jego zastosowań zawęziło się do specyficznych nisz. Z niego jednak wywodzi się cała gałąź języków, które przypominają go co najmniej składniowo: nawiasy klamrowe, sposób deklaracji zmiennych, itd. Rola przodka, który nie jest już szeroko stosowany, w połączeniu ze sporym stopniem skomplikowania sprawia, że C możemy przyrównywać do łaciny.

Trochę to naciągane? :) Zapewne. Między językami programowania a naturalnymi istnieje przecież jedna zasadnicza różnica: tych pierwszych można się nauczyć zdecydowanie łatwiej i szybciej niż tych drugich. Ale w obu przypadkach sprawdza się stwierdzenie, że ‘znać’ to nie znaczy ‘umieć zastosować’. Więc może szukanie analogii podobnych do powyższych nie jest takie zupełnie bez sensu :]

Tags:
Author: Xion, posted under Culture, Thoughts » 8 comments

Podsumowanie magicznej siódemki

2008-02-16 14:02

Pozwolę sobie poczynić zupełnie niekoderski wpis, jako że od ostatniego podobnego minęło już dobrych kilka miesięcy. Myślę, że mogę od czasu do czasu pozwolić sobie na coś takiego :) Zwłaszcza, że mam ku temu pewną dość szczególną okazję…

Okładka książki “Harry Potter i Insygnia Śmierci”Dotarłem właśnie do końca niezbyt może ambitnego, za to niezwykle popularnego kawałka literatury. Mówię tu oczywiście o serii książek pod tytułem Harry Potter i jeszcze coś, której to (prawdopodobnie) ostatni tom niedawno trafił na półki polskich księgarń. Jak nietrudno się domyślić, mam nieodpartą ochotę, aby podzielić się wrażeniami z lektury ;P
I muszę przyznać, że jestem nią w pełni usatysfakcjonowany. Opowieści o przygodach Pottera już od jakiegoś czasu nie były bajkami dla dzieci, lecz chyba dopiero w tym ostatnim tomie ujawniło się, iż mamy tutaj do czynienia z całkiem dojrzałą pozycją z gatunku fantasy. Pod względem fabularnym też nie można jej wiele zarzucić, chociaż wiadomo, że dla wszystkich najważniejsze były suche fakty: jak to się skończy, kto zwycięży, kto przeżyje?… Tym niemniej cieszy to, że ostatecznie kilka spraw wyjaśnia się na sposób daleki od przewidywań: ci, którzy wydawali się być charakterami bezwarunkowo czarnymi, nie zawsze takimi się okazują, a na kryształowych obliczach postaci wyjątkowo “czystych” pojawiają się wyraźne rysy.

Koniec sagi o młodym czarodzieju to pewnie najlepsza okazja, aby zastanowić się, dlaczego historie te stały się aż tak popularne. Bo chyba stwierdzenie, że obecnie przy sprawnym marketingu można wypromować cokolwiek, nie będzie w pełni zadowalające (miejmy przynajmniej taką nadzieję). Ten produkt musi mieć po prostu takie obiektywne coś, co zadecydowało o jego sukcesie. Według mnie lista tych “cosiów” zawiera przynajmniej trzy pozycje:

  • Dopracowany i bogaty w szczegóły świat. Książki o Potterze są osadzone w świetnie zaprojektowanych, fikcyjnych realiach. Może nie mają one rozmachu tolkienowskiego Śródziemia, ale bezsprzecznie działają na wyobraźnię. Dodatkowo świetnie sprawdzają się jako miejsce akcji dla historii dowolnego typu, od przygodowych po obyczajowe.
  • Historia oparta na sprawdzonym niezliczoną ilość razy motywie. Oto bohater, który nagle znajduje się w zupełnie nieznanych dla siebie okolicznościach i musi przy tym spełnić ogromnie trudną i niezwykle ważną misję, od której zależy bardzo, bardzo wiele. Seria Star Wars, Matrix, Władca Pierścieni, większość opowieści o superbohaterach, a nawet część starożytnych mitów i chrześcijańskie ewangelie – wszystkie opierają na wariantach tego pomysłu. Nie inaczej jest z Harrym Potterem, który z każdym kolejnym tomem coraz bardziej czuje na sobie ciężar nieuchronnego przeznaczenia.
  • Dopasowanie stylu do grupy docelowej. Wyjątkową cechą książek o Potterze jest to, że zdają się dorastać wraz ze swoim czytelnikiem. O ile pierwsze części są prostymi i efektownymi historyjkami dla dzieci, o tyle dalej rozwijają się w znacznie bardziej rozwinięte (także objętościowo) powieści. Pomijając potwornie nudny i okropnie infantylny tom szósty, są one też świetnie skrojone pod względem fabularnym i stylistycznym. Na początku dominują w nich dialogi i wartka akcja, lecz potem (czyli po odpowiednim wyrobieniu czytelnika) autorka pozwala sobie – i słusznie – na dłuższe popisy narracyjne.

Czy to prosty przepis na sukces? Bynajmniej. Połączenie tych wszystkich elementów w spójną i atrakcyjną całość to z pewnością wielka sztuka.
Najciekawsze jest jednak to, że powyższą receptę można wcale nieźle dopasować do… wytworów działalności koderskiej. W końcu tu też liczy się dobry projekt, korzystanie ze sprawdzonych rozwiązań oraz dobra treść i forma. Efekty może nie są aż tak “magiczne”, ale niekiedy udaje się nimi zachwycić nawet mało obeznanych z tematem mugoli ;-)

Tags:
Author: Xion, posted under Books, Thoughts » 11 comments

‘No i co tu jest źle?’ w wersji książkowej

2008-02-02 17:57

Kiedy ma się dość pokaźną biblioteczkę książek, czasami natrafia się na pozycję, która nie wiadomo skąd się w niej wzięła. Pytanie takie staje się tym bardziej uzasadnione, gdy rzeczoną książkę otworzymy, przekartkujemy i pobieżnie przeglądniemy, by po krótkim czasie uznać, że najchętniej widzielibyśmy ją w… punkcie skupu makulatury :P
Okładka książki “Jak NIE programować w C++”Coś takiego przytrafiło mi się zupełnie niedawno. Książką o której mam taką “pochlebną” opinię, jest dziełko opatrzone tytułem Jak NIE programować w C++. Jeszcze ciekawszy jest chyba podtytuł, który mówi, że wewnątrz znajdziemy dokładnie 111 programów z błędami oraz trzy działające. Statystyka jest imponująca, ale o co tak naprawdę tutaj chodzi?… Autor przedstawia nam mianowicie coś w rodzaju zbioru koderskich zagadek do samodzielnego rozwiązania, które polegają oczywiście na znalezieniu błędu w przedstawionym kawałku kodu.

Jak podejrzewam, celem tej książki w zamyśle autora było ustrzeżenie programistów C++ przez różnego rodzaju typowymi błędami, jakie mogą się zakraść do pisanego przez nich kodu. Cel to chwalebny, chociaż dość utopijny – w końcu nie wystarczy wiedzieć, na czym błąd polega, aby w magiczny sposób już nigdy więcej go nie popełnić. Trochę więcej wątpliwości mam natomiast co do obranej metody. Nie wiem, w jaki sposób obejrzenie ponad stu błędnych kodów ma sprawić, że będziemy częściej pisali poprawny kod. Spodziewałbym się raczej podświadomego nauczenia się prezentowanych tam złych przykładów i ich spontanicznego stosowania w rzeczywistych programach, co raczej nie ułatwiłoby nikomu pracy :)
Byłoby oczywiście świetnie, gdyby przykłady te były jedynymi niepoprawnymi kawałkami kodów, z którymi przychodzi nam się mierzyć. Ale przecież jest to odległe od prawdy o całe lata świetlne. Jako koderzy sami nieuchronnie produkujemy niepoprawny kod, który co rusz musimy korygować. Prawdopodobnie więc nie potrzebujemy dodatkowych łamigłówek tego rodzaju, bo wystarczą nam te, które w nieumyślny sposób tworzymy sami dla siebie. I niestety nie możemy w ich przypadku – w przeciwieństwie do kodów z książki – zajrzeć do części końcowej po wskazówki i odpowiedzi.
Jednak nawet wobec takich mankamentów, prezentowane w książce przykłady mogłyby mieć pewną wartość poznawczą. Rzecz w tym, że naprawdę interesujące zagadki można bez trudu policzyć na palcach obu rąk. Pozostałe są albo pomyłkami aż do bólu klasycznymi (na czele z pomyleniem operatora przypisania i równości w warunku logicznym), albo trywialnymi literówkami, albo świadectwami na – delikatnie mówiąc – niekompletną znajomość języka. (Moim faworytem jest deklaracja int n = 1,000,000;, w założeniu inicjująca zmienną wartością równą milion).

Aż chce się zapytać, czy są w tej książce jakieś cechy pozytywne. Odpowiadam prędko, że jak najbardziej, tyle że mają się one nijak do jej zasadniczej treści. Do każdej zagadki autor dołączył bowiem krótką, zabawną historyjkę “z życia wziętą” lub inny śmieszny tekst – wszystko oczywiście z dziedziny IT. Paradoksalnie więc ta “książka o C++” lepiej sprawdza się jako książka z dowcipami.
Jest też druga dobra strona. Przypomniałem sobie mianowicie, skąd u mnie wzięła się ta dziwna pozycja. Otóż zakupiłem ją podczas jakichś tragów wydawniczych, które akurat odbywały się na uczelni, zapłaciwszy za nią około dziesięć złotych. Nietrudno przeboleć taką niewielką sumę, nawet mimo tego, że nikomu nie poleciłbym wydania na tę książkę nawet jednej złotówki :)

Tags: ,
Author: Xion, posted under Books, Programming » 4 comments

Wyrazy obce i ich odmiana

2008-01-14 17:44

Kilka dni temu doczekałem się w końcu materiałów w IV Ogólnopolskiej Konferencji Inżynierii Gier Komputerowej, która odbyła w Siedlcach w kwietniu zeszłego roku. W ich skład wchodzą między innymi teksty referatów, jakie zostały tam wygłoszone. Wprawdzie wśród nich nie ma tym razem żadnego referatu mojego autorstwa, ale i tak były one bardzo ciekawe ;-)

Przeglądając je, zauważyłem też, że reprezentują one całkiem niezły poziom językowy. Nie jest to oczywiście sprawa najważniejsza (w końcu o wiele istotniejsza jest zawartość merytoryczna), ale brak dbałości o poprawność dość często idzie w parze z niską jakością tekstu także według innych kryteriów. Wciąż zresztą zdarzają się pojawiać na rynku książki informatyczne, których redaktorzy “położyli” sprawę niemal pod każdym względem: od tłumaczenia po korektę.
Odpowiednie tłumaczenie to często – w przypadku publikacji z tej branży – decyzja, które terminy pozostawić w oryginalnej formie. Akurat w przypadku programowania gier bardzo dużo z nich nie tylko jest używanych wyłącznie w formie angielskiej, ale wręcz nie ma dobrych polskich odpowiedników (jako najlepszy przykład zawsze podaję ‘shader’). To sprawia, że teksty o tej tematyce są prawie zawsze naszpikowane obcojęzycznymi wyrazami, które jeszcze często podlegają odmianie tak samo, jak inne słowa. A to rodzi mnóstwo problemów natury ortograficzno-edytorskiej, jakich można uniknąć, jeżeli pamiętamy o kilku zasadach:

  • Terminy obcego pochodzenia zaleca się – jeżeli nie jest ich zbyt dużo i mamy odpowiednie możliwości formatowania – wyróżnić jakoś, na przykład kursywą. Oczywiście jeśli w ten sposób pochyła staje się połowa tekstu, lepiej z tego zrezygnować.
  • Wyrazy kończące się samogłoską, której nie wymawia się (np. sprite, frame, state), odmieniamy, dodając odpowiednią końcówkę poprzedzoną apostrofem (a więc: sprite’a, frame’ie, state’a, itp.)
  • Wyrazy kończące się spółgłoską lub samogłoską, którą wymawiamy, odmienia się tak, jak wszystkie inne: shadershadera, quadquadów, itp. Nie stosujemy więc żadnych apostrofów ani myślników, ale musimy pamiętać, aby całą końcówkę wyrazu zapisać zgodnie z jej polskim brzmieniem. Mamy zatem: LinuxLinuksa, vertexverteksy, i tak dalej.
    Przyznam, że nie bardzo wiem, jak postąpić z wyrazami, w których na końcu są spółgłoski, których nie wymawiamy. Na szczęście w języku angielskim takich słów praktycznie nie ma, a w dziedzinie programowania gier i grafiki są to chyba tylko nazwiska: Bezier [bezje] i Lissajous [lisażu]. Swoją drogą obaj panowie byli Francuzami i obaj są znani z wynalezionych przez siebie typów krzywych… i oba nazwiska równie ciężko się odmienia :-)
  • Akronimy, czyli skróty powstałe z pierwszych liter kilku wyrazów, odmienia się niezbyt często, lecz jeśli już się to robi, należy dodawaną końcówkę zawsze poprzedzać myślnikiem. Możemy więc mówić o DOS-ie, BIOS-ie, POSIX-ie i pewnie jeszcze wielu innych skrótach.
    Podobną regułę można też chyba zastosować do tych nazw, które kończą się wielkimi literami, czyli np. do DirectX-a czy OpenGL-a.

Nie są to jak widać specjalnie skomplikowane reguły, a stosując się do nich, powiększamy coraz bardziej zagrożony obszar poprawności językowej w Internecie i nie tylko.

Tags:
Author: Xion, posted under Computer Science & IT, Culture » 15 comments
 


© 2018 Karol Kuczmarski "Xion". Layout by Urszulka. Powered by WordPress with QuickLaTeX.com.