Gry w pascalu

Moje spostrzeżenia co do C#

Wstęp

Zacząłem programować na Atari 800XL w Basicu. Tworzyłem proste programiki z muzyką i efekty graficzne. Basic był elastyczny, prosty, chociaż porządek programu był tworzony za pomocą numerowania linii kodu. Żeby dodać linijkę wcześniej trzeba było wybrać wcześniejszy numer, wpisać komendy i zatwierdzić. Kolejne lata spędziłem na Commodore 64. Tu dało radę zrobić odrobinę więcej, np. Program graficzny do projektowania obiektów Sprite oraz kilka strategii tekstowych.

Około 2000 roku zbudowałem swój pierwszy komputer 386 o prędkości 40MHz, z monitorem Hercules (pomarańczowo-czarnym). Tak, byłem trochę do tyłu z technologią i do tej pory uważam, że dla programisty nie trzeba najszybszego komputera. Dobre algorytmy powinny dawać prędkość programowi a nie jakość hardware’u. I znowu wybrałem Turbo Basic oraz Quick Basic. Ale ich nie polubiłem na stałe. Chociaż zdziwiony byłem, że już nie trzeba numerować linijek kodu.

Na szczęście ktoś mądry doradził mi poprogramować w Pascalu. Pascal zawierał naprawdę wiele mechanizmów, które pozwalały na więcej. Kiedy zaczynały ograniczać mnie sposoby programowania, w Pascalu poznawałem świetne sposoby na omijanie ograniczeń. Udawało się zdobywać dowolne ilości pamięci, rysować szybką grafikę w trybie 320x200x256 kolorów, odgrywać dźwięki za pomocą karty muzycznej a nawet zaprogramować prosty okienkowy interfejs graficzny. Kończyłem wtedy szkołę policealną. Lubiałem eksperymentować. Poznałem trochę assemblera. Podobało mi się, że każda instrukcja wymagała określonej liczby taktów procesora i można łatwo wpływać na wydajność programu poprzez odpowiednie operacje przyśpieszające. Zamiast odrabiać zadanie domowe z krzywych drugiego stopnia, postanowiłem napisać program, który pozwalał na wprowadzeniu wzoru a on je rysował. Po napisaniu wielu modułów w Pascalu, mogłem szybko tworzyć nowe programy i gry, niektóre nawet w kilka dni.

Po Pascalu zacząłem zajmować się Delphim. Był całkiem praktyczny i szybki do tworzenia programów. Pozwalał na projektowanie fachowych aplikacji obiektowych.
Ale moja pierwsza gra Mario nie bardzo przypominała programowanie obiektowe. Pojechałem na tablicach i procedurach jak tylko się dało. Zrozumiałem, że programowanie strukturalne nie jest drogą w dobrą stronę.

W którymś momencie znajomy poprosił o napisanie dla niego strony internetowej. Sam już dobrze nie pamiętam w którym momencie skończyła się zabawa a zaczęła praca w branży programistycznej. Przez kilka lat przeplatałem raz pracę w Delphi a raz w PHP. W Delphi miałem zlecenie na program do fakturowania. Był oparty na MySQL/Postgres. Tu zacząłem z wielowątkowością. W Delphi zaczęło mi brakować swobody php więc zacząłem tworzyć klasy obiektowe, które symulowały zmienne z php.

W PHP spędziłem dobrych kilka lat. Z początku przeszkadzało mi, że zmienne są niekonkretne, potem zaczęło mi się to podobać. Na koniec trochę nadużyłem tych mechanizmów. PHP pozwala na wiele luzu. Poza tym w tamtym czasie był w nim lekki bałagan. Niespójne nazewnictwo, 2 systemy wyrażeń regularnych ale świetna pomoc i dostępność. Z początku pisałem programy zupełnie od podstaw. Potem zacząłem używać Code Ignitera. Moje programy były mocno nastawione na generowanie HTMLa, rzadko kiedy opierały się na dostarczaniu JSONa do aplikacji.

O JavaScript mogę powiedzieć że był to koszmar przed pojawieniem się jQuery. Każda przeglądarka miała swoje wyjątki i niemożliwe było poznanie ich wszystkich nie poświęcając się front-endowi. Było zrozumiałe, że aby zapewnić uniwersalność trzeba dokładać warstwę pośrednią.

Wrażenia z C#

Od około 2013 roku mam najwięcej do czynienia z .NET, szczególnie z C#. Pierwsze wrażenie to porządek. Wszystko ma swoje miejsce. Co prawda, pomiędzy wersjami pojawiają się pewne przesunięcia, ale ogólnie sprzyja to czystości środowiska.

Jest dość konkretny ale pozwala na dużo za pomocą typów generycznych. Podoba mi się to, choć z początku składnia może przerażać.

Idealnie współpracuje z bazą danych Microsoft SQL Server. Ta baza również pozytywnie zaskoczyła mnie prędkością i możliwościami.

Wydaje mi się że czasem może trochę idzie w stronę przeintelektualizowanego, tzn. idąc śladami wszystkich dobrych praktyk powstaje kod przepełniony drobnymi pliczkami, tzn. Klasami i interfejsami, które ciężko ogarnąć jeśli nie ma dobrego projektu. Z kolei jeśli chcę napisać szybko dobry program, wiem że trzeba będzie pójść na kompromis, kosztem dobrych praktyk. Jeśli chciałbym je zachować, być może wybrałbym inny język.

Zaskoczeniem dla mnie była wydajność niektórych operacji. Poprzez niewiedzę łączyłem źle stringi, co skutkowało naprawdę mocno odczuwalnym spadkiem wydajności. To samo było z klasami refleksyjnymi. Chcąc badać, która właściwość ma ustawiony atrybut standardową metodą można stracić olbrzymie zasoby, trzeba szukać rozwiązań w internecie. Trzeba po prostu poznać środowisko i platformę .NET żeby wszystko szło gładko.

Ogólnie, lubię C#, choć brakuje mi w nim bezpośredności assemblera lub chociażby Delphiego. Gdybym miał zaczynać duży poważny projekt, dobrze finansowany, byłby to właśnie C#. Gdyby to miałby być prosty i szybko napisany programik nie zrobiłbym tego w technologii MVVM z repozytorium podłączonym do SQL. Musiałbym dla uproszczenia pomijać niektóre fachowe warstwy aplikacji. Porównując do PHP jest wiele bardziej fachowy, przejżysty i zaawansowany. Niestety utrzymanie serwerów z oprogramowaniem Microsoft jest wiele bardziej kosztowne niż utrzymanie PHP.

Polecam C# do nauki. Można w nim napisać praktycznie wszystko i można nauczyć się dobrego programowania.

About the author

Lester Forestjump

View all posts