W czym programować? Czyli mnogość technologii...
24.07.2012 | aktual.: 24.07.2012 10:34
Wpis ten można potraktować jako rozwinięcie jednego z punktów w moim poprzednim artykyle
- Jaki język programowania wybrać?
Skąd pomysł na ten wpis?
Na forach dyskusyjnych dotyczących programowania można znaleźć całe megabajty tematów typu 'Java vs C#' albo 'C vs C++' a czasem nawet 'Java vs C++'. Cóż, nie dziwię się że ludzie zadają takie pytania. Dziwię się tylko, że sami czasem nie szukają korzystając z wyszukiwarek forumowych. Ale nie ważne. Postaram się tutaj najlepiej jak potrafię przedstawić kolejno kilka języków programowania oraz opisać ich zastosowanie i aspekty, które odróżniają ich od krewniaków.
Zestawienie i krótki opis wybranych języków programowania
Zacznijmy od...
C i Windows API
Dawno temu tworzenie aplikacji dla systemu Windows wymagało używania języka C w połączeniu z bardzo nielubianym dzisiaj przez niektórych Windows API zwanym powszechnie WinAPI. Pomimo, że prawdą jest iż ten owiany przeszłością sposób pozwolił na stworzenie naprawdę dużych i wydajnych aplikacji, to mało kto chyba zaprzeczy, że pisanie programów w surowym API to czynność...złożona. Problem polega na tym, że C to język czasem nieco irytujący. Programiści często muszą zmagać się z ręcznym zarządzaniem pamięcią, nieprzyjemną arytmetyką wskaźników i częstymi brzydkimi konstrukcjami samego języka. Poza tym język C jest językiem strukturalnym tak więc brak mu zalet obiektowości i wszystkich związanych z tym faktem przyjemności. No i powiedzmy sobie szczerze - nie jest on już tak popularny przy przy tworzeniu aplikacji pulpitowych w dobie dzisiejszych wysoko poziomowych języków jak C# czy Java. Nie ukrywajmy jednak...wiele aplikacji użytkowych (z wieloma błędami :P) nadal działa pod kontrolą tego języka. Zresztą całe jądro Linuksa na tym stoi więc nie można nazwać go umarłym.
C++ i Microsoft Foundation Classes (MFC)
Pod wieloma względami zdecydowanie dużym krokiem naprzód jest język C++. Jeszcze dobre kilka lat temu można go było nazwać "obiektową warstwą pokrywającą język C". Dzisiaj już jednak jest on samodzielnym językiem a jego obecny standard do C++11. Pomimo faktu, że programiści tego języka mogą korzystać z magii programowania obiektowego (jak enkapsulacja, polimorfizm czy dziedziczenie) to są dalej zdani na brzydką arytmetykę znaną z klasycznego C jak i czasem dziwne konstrukcje języka. Dzisiaj istnieje już wiele frameworków ułatwiających pracę w tym języku, np. wspomniany już przeze mnie Microsoft Foundation Classes. Podstawową rolą owego frameworka jest opakowanie rozsądnego podzbioru używanego WinAPI w wiele klas, magicznych makro i wielu narzędzi ułatwiających generowanie kodu zwanych kreatorami. Pomimo tych ułatwień ze względu na korzenie w C++ programować nie jest łatwo i przez naszą nieuwagę programy mogą stać się bardzo łatwo podatne na przeróżne błędy.
Visual Basic
Kiedy programiści zakosztowali przyjemnego życia jakim jest prostsze programowanie, wielu programistów odeszło od frameworków C/C++ do mniej niewdzięcznych, lżejszych jezyków takich jak Visual Basic. Ów język zyskał popularność przez stosunkowo łatwe tworzenie złożonych interfejsów użytkownika, bibliotek kodu oraz logiki dostępu do baz danych. Visual Basic dzięki wielu wbudowanym kreatorom kodu, wbudowanych typów danych, klas oraz specyficznych funkcji, o wiele lepiej niż MFC ukrywał złożoności WinAPI. Głowna wada tego języka polega na tym, że nie jest on w pełni obiektowy. Można powiedzieć, że on raczej pracuje na obiektach czyli nie ma możliwości ustalić relacji typu jest np.: obj is car. Co więcej Visual Basic nie pozwala tworzyć aplikacji wielowątkowych... no chyba, że ktoś ma ochotę bawić się niskopoziomowymi wywołaniami API co w najlepszym przypadku jest skomplikowane a w najgorszym niebezpieczne.
Uwaga:
Omawiany przeze mnie Visual Basic ma bardzo nie wiele wspólnego z Visual Basicem dostępnym na platformie .NET (VB.NET)!!
Java
W końcu pojawiła się (tak bardzo przeze mnie nie lubiana) Java - w pełni obiektowy język programowania, którego składnia bezczelnie wyrosła z ukochanego przeze mnie C++. Jak zapewne Wam wiadomo zalety (hehe) Javy nie kończą się na niezależności od systemu operacyjnego (i pisaniu bardzo wydajnych i niesamowicie szybkich gier jak Minecraft). Sama Java została uwolniona od niestrawnych w C++ dziwnych aspektów składniowych, a jako platforma zapewnia programistom bardzo wiele predefiniowanych pakietów, zawierających definicję różnych typów. Przy pomocy Javy programiści mogą tworzyć aplikacje składające się w pełni z Javy, a wyposażone w łączność z bazami danych, obsługę komunikatów, nakładki z obsługą sieci oraz atrakcyjne interfejsy użytkownika (nie licząc innych niezwykle ciekawych i naprawdę wkurzających mnie usług). Teraz wady (nareszcie..) - Mimo, że Java to bardzo elegancki język to pisanie w nim oznacza zwykle konieczność używania go przez cały czas cyklu rozwojowego aplikacji. W efekcie daje niewielkie nadzieje na integrację z innymi językami, ponieważ jest to sprzeczne z jej podstawowymi założeniami ]:‑> - jeden język programowania do absolutnie wszystkiego (w tym gier :P). No niestety w rzeczywistości są na świecie miliony linii kody, które bardzo by chciałby połączyć się z kodem napisanym w Javie ale ona takiej możliwości nie udostępnia.
Microsoftowe rozwiązanie - .NET Framework
Kończąc już ten nudny wykład z historii sztuki programistów można powiedzieć, że programiści Windows nie mieli łatwego życia. Na scenie pojawił się .NET Framework ale z faktu, że temat ten jest troszkę rozległy postanowiłem poświęcić mu osobny wpis, który pojawi się pod koniec tego tygodnia.
Podsumowanie
Tak więc zakończyliśmy te długą podróż po historii ewolucji języków programowania. Jednak dalej nie odpowiedziałem na podstawowe w tym wpisie pytanie: "Jaki język wybrać?". Niestety tutaj odpowiedź nie jest jednoznaczna. To zależy od tego co chcesz robić. Jeżeli chcesz uczestniczyć w developerowaniu takich systemów operacyjnych jak Linuks lub chcesz stworzyć swój własny - wybierz C. Jeżeli chcesz tworzyć wydajne, wieloplatformowe gry - wybierz C++. W połączeniu z .NET Frameworkiem (C++/CLI) daje on niesamowite możliwości (jednak ogranicza się tylko do Windowsa, ja osobiście nie bardzo uznaję Mono za dobrą platformę - póki co). Poza tym do C++ jest mnóstwo frameworków ułatwiających tworzenie międzyplatformowego GUI jak np. obiektowy Qt framework. Korzystając z niego możemy również z powodzeniem tworzyć aplikacje biznesowe.
Do "szybkiego" programowania i tworzenie aplikacji biznesowych służą takie języki jak właśnie Java i C#. Wybór należy do Ciebie. Jednak na twoim miejscu skosztowałbym każdego po trochu i sam stwierdził, który Ci najbardziej odpowiada. Nie zapomnij też, że istnieje wiele innych języków, których tutaj nie omówiłem. Takim jest np. Python. Ale tym językom z innej rodziny będę kiedyś poświęcał osobne wpisy.