Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

W czym programować? Czyli mnogość technologii...

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.
 

porady programowanie hobby

Komentarze

0 nowych
Frankfurterium   10 #1 24.07.2012 13:19

"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."

Nie. Javę można spokojnie przeplatać z innymi językami dostępnymi na JVM (a jest tego masa), a kiedy bawimy się w JNI, nawet z C, C++ i ASM-em.

"Poza tym do C++ jest mnóstwo frameworków ułatwiających tworzenie międzyplatformowego GUI jak np. obiektowy Qt framework"

I nie tylko do C++. Qt Jambi - bezproblemowo działające Qt dla Javy. Qt Scampi - nieco problemowo (ale devowie się starają :p) działające Qt dla Scali. Że PyQt "jest dobre", nie warto nawet przypominać.
No i jeśli chodzi o liczbę (całkowicie abstrahując od jakości) frameworków i ogólnie narzędzi towarzyszących, Java spokojnie wdeptuje w ziemię wszystko inne.


Wtryniam się tak dla zachowania równowagi. Wcale nie twierdzę, że Java Uber Alles, ale wysmażyłeś pełną subiektywizmu miniaturkę opisów kilku języków i jeszcze ktoś wziąłby to za obiektywne zestawienie ;->

Autor edytował komentarz.
GBM MODERATOR BLOGA  20 #2 24.07.2012 13:22

hmm... trochę mam wątpliwości, czy aby (mówię to z pełnym szacunkiem) nie jesteś za "młodym programistą" żeby pisać takie treści ?
Imho - aby radzić komuś w czym i jak programować - suma sumarum, ogólnie prawić o programowaniu - potrzeba trochę doświadczenia mierzonego w latach, a także ogarnięcia przynajmniej kilku języków w stopniu, pozwalającym bezproblemowe stworzeniu programu na podstawie np. algorytmów sortowania różnorakiego.

Generalnie, sądzę że trochę za wcześnie na takie teksty w Twoim przypadku.

PS. Nie mówię tego ze złośliwości, żeby nie było :)

revcorey   7 #3 24.07.2012 13:58

""Poza tym do C++ jest mnóstwo frameworków ułatwiających tworzenie międzyplatformowego GUI jak np. obiektowy Qt framework" "
Pisanie o qt tylko w kontekście gui to duże nadużycie. Tam jest obsługa sieci,opengl, grafiki 2d itd.

Pisanie o visual basic a wspomnienie o python to też pewnego rodzaju nadużycie moim zdaniem. Jak już to na odwrót powinno być.

Autor edytował komentarz.
DjLeo MODERATOR BLOGA  18 #4 24.07.2012 14:08

@GBM

Oj tam oj tam. Beethoven swój pierwszy koncert dał w wieku 7 lat :) Wszystko jest możliwe :)

  #5 24.07.2012 14:08

Ciekawy wpis, jednak brakuje mi w tym tekście Assembly.

GBM MODERATOR BLOGA  20 #6 24.07.2012 14:18

@DjLeo: Nie mówię nie, ale hmm... po prostu wyrażam swoje obawy, i wbrew pozorom - naprawdę się nie czepiam :P

alucosoftware   7 #7 24.07.2012 14:37

Kolega stara się jak tylko potrafi... +1

Na końcu i tak wybór należy do czytelników. Najczęściej wybór narzędzi programistycznych nie gra dużej roli. Ważne jest przecież, aby wybrany język i technologia posiadały bogatą dokumentację i nie zrażały do siebie "na dzień dobry".

Wszystkie języki programistyczne świata są dobre, ale niektóre bardziej przypadają mi do gustu :)

Airborn   8 #8 24.07.2012 14:41

@Frankfurterium szkoda tylko, że do czasów JavyFX 2 naprawdę ciężko było o coś ładnego graficznie co można by było dostosować do swoich potrzeb (ok, odrazu przyznaję, nie testowałem zbytnio Qt Jambi, bo jak sprawdzałem to po rozstaniu z Nokią projekt zrobił się prawie martwy, nie wiem jak jest teraz) :P

guildos   4 #9 24.07.2012 14:43

Ja sobie czasem zaprogramuje przeglądarkę w Visual Basic.

budda86   9 #10 24.07.2012 14:44

Tekst byłby dużo lepszy, gdybyś napisał go w sposób obiektywny. Owszem, blog może być miejscem wyrażania poglądów i subiektywnych ocen, ale skoro na początku napisałeś "Postaram się tutaj najlepiej jak potrafię przedstawić kolejno kilka języków programowania", to chciałbym się dowiedzieć czegoś o tych językach, a nie o tym, co Ty lubisz i czego nie lubisz. Przy czym nie napisałeś nawet, czemu swoją sympatią obdarzasz akurat te technologie i języki... No i ta metafora o liniach kodu, które chciałyby się połączyć z programami Javovymi - zupełnie jej nie rozumiem. W tekście o językach programowania powinno być więcej konkretów, a mniej metafor.

I bardzo bym się chciał dowiedzieć, jakie to są te niezwykle ciekawe i wkurzające Cię usługi w Javie? Bo to mnie wyjątkowo zaintrygowało, o różnych usługach już słyszałem, ale o wkurzających jeszcze nie :)

@alucosoftware
Ale warto uczyć się języków, które są używane w biznesie. Zobacz, ile jest ofert pracy dla programistów C++, Java, C# czy PHP. A ile dla Fortrana, Pasacla czy Scali.

Autor edytował komentarz.
Druedain   14 #11 24.07.2012 14:48

FUD!!! Co to ma być o tej Javie? Człowieku! Pomijając to, że JRE odpala więcej języków niż .Net (brak źródła ;) ), pisząc tekst praktyczny robisz emocjonalny felieton o tym, że nie lubisz Javy. FUD!!!

  #12 24.07.2012 16:57

@alucosoftware, budda86

PHP nie nazwał bym językiem, to jakaś monstrualność stworzona przez bandę wyrostków :-) Żeby ni było, że nie opieram się na faktach: http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/

Java jest bardzo przyjemna, jak już zostało wspomniane, no i na JVM można odpalić więcej niż jeden język. A i integracja natywnego kodu przez JNI nie jest taka straszna jak ją malują, zwłaszcza jeśli użyje się narzędzi ułatwiających życie (n.p. Swig -> http://www.swig.org/).

C++ jest OK, ale moim zdaniem za duże, jeśli chodzi o ilość różnych pierdół. No ale jest to język standaryzowany, więc nie mogą za bardzo zerwać z kompatybilnością wstecz, więc rośnie to i rośnie... Może w końcu pęknie :-)

Stary VB jest stary, ot co, i nawet nie ma oficjalnie opisanej gramatyki języka, co jest dość... nieciekawe.

O C# się nie wypowiem, bo niewiele miałem z nim do czynienia.

C jest bardzo fajniutkie i minimalistyczne. Python jest genialny do pisania prototypów i ogólnie całych aplikacji, czy to przy użyciu PyGTK czy tam PyQT/PySide.

Ach dużo więcej tego, a mi się nie chce aż tyle pisać :-)

Miłego dnia :-)

  #13 24.07.2012 22:27

Ja polecam JS/Pythona do widoków i C/C++ do przetwarzania danych.

budda86   9 #14 25.07.2012 08:49

@profesor doktor
Ja też nie lubię PHP, ale ten język ma jedną niepodważalną zaletę - jest ekstremalnie popularny i wszędzie obsługiwany. Jak kupujesz niedrogi hosting na stronkę w stylu 'wizytówka firmy', to masz do wyboru PHP albo nic :) Oczywiście to jest język do zupełnie innych zastosowań niż C++ czy Java, więc nie ma tu czego porównywać. Ale jeśli jest popularny, to znaczy, że się sprawdza.

alucosoftware   7 #15 25.07.2012 10:48

Bardzo szanuję programistów Java i innych języków na JVM, ale na pewnym etapie mojego życia Java zraziła mnie do siebie swoim "wyglądem" (jak bym tego nie nazwał, trzeba to po prostu poczuć).

Czasem zastanawiam się, czy dobrze zrobiłem odstawiając Javę na boczny tor, ale - tu mała uwaga dla początkujących programistów - lepiej dokładnie zapoznać się z jedną technologią i paradygmatem programowania, niż rozdrabniać swoją uwagę na szeregu innych. Życie to nie tylko programowanie. Pewnie fajnie byłoby być omnibusem, sypać rozmaitymi programistycznymi przykładami, tylko po co?

Nie ważne jaki język będzie się wykorzystywało i czy będzie on związany z tą czy z inną platformą programistyczną, jeśli jest się dobrym w tym co się robi, a sam język umożliwi nam utworzenie tego co mieliśmy na myśli. Sam preferuję .NET i staram się zrozumieć wszystkie aspekty z nim związane. Dzięki temu dokładnie wiem co w danej chwili moje oprogramowanie czyni. A czy sama technologia ma taką nazwę czy inną... proszę...

PHP złe, PHP dobre, Java zła, Java dobra, C# zły, C# dobry, Python zły, Python dobry, C++ złe, C++ dobre, Clojure zły, Clojure dobry, Scala zła, Scala dobra, ... . WTF?

Jak potrzebuję skorzystać z PHP, to po prostu siadam, zerkam w dokumentację, realizuję zadanie, zastanawiam się nad możliwością lepszej implementacji jakiegoś rozwiązania i nie rozwodzę się nad sensem istnienia samego PHP. I dotyczy to także innych języków.

Druedain   14 #16 26.07.2012 17:46

@alucosoftware Ja siadam do PHP, czytam dokumentację, robię kod, okazuje się, że użyta funkcja działa paskudnie, siadam ponownie, czytam, że zamiast poprawić poprzednią napisano nową funkcję, biorę ją, okazuje się, że działa paskudnie, siadam po raz trzeci, pier***e dokumentację, przeszukuję Google'a, znajduję trzecią wersję funkcji, która powstała bo ktoś wpadł na pomysł, że lepiej wymyślić koło na nowo niż poprawić poprzednią paskudę…

Autor edytował komentarz.
jmmzon   9 #17 26.07.2012 22:49

@Druedain
:D

alucosoftware   7 #18 29.07.2012 16:46

@Druedain
Powiedz to tym wszystkim, którzy korzystają z tych paskudnych funkcji - Panowie, od dziś wprowadziliśmy następujące poprawki... 1/4 (czy ile tam) stron i serwisów w Internecie pada :)

Nie martw się, z czasem przyjdzie Ci łatwiej segregować złe implementacje od dobrych. Kwestia wprawy.

Razi   5 #19 29.07.2012 21:19

Ja zaczynam dłubać w Scali. Bardzo fajny język, używa maszyny i bibliotek Javy, a możliwości języka ogromne, bo nie jest "częściowo" funkcyjny (nie, nie chodzi tu o to że ma funkcje, bo to paradygmat proceduralny, funkcyjny to co innego).

I co więcej: MOŻNA łączyć fragmenty języka Java ze Scalą i kilkoma innymi działającymi wewnątrz JVM.

  #20 06.09.2012 01:33

Java elengacka? Kod w deklaracji klasy to ma byc elegancja? C/C++ jest pod tym katem wyznacznikiem elegancji....wystarczy popatrzec jak wygladaja implementacje pewnych funkcji w javie, a to samo w C...

aphazel   8 #21 25.10.2012 10:33

Temat po prostu idealny do rozpalenia językowego flame war.

"Problem polega na tym, że C to język czasem nieco irytujący."
To mnie rozwalilo ;) Irytujące to jest jak się czegoś nie potrafi zrobić i się nad tym ślęczy - niezależnie od języka programowania. :P

  #22 24.09.2015 22:55

Porady szukam :)
- próbuję napisać prostego OS'a ... jak sądzicie oprócz Assemblera i C++ w jakich językach warto spróbować ? :P

sylwestrus   2 #23 13.01.2016 16:28

Bardzo ciekawy artykuł. Bardzo się zgadzam z tym co mówisz. Mnogość technologii oraz liczba języków programowania na początku jest dość przytłaczająca.