Blog (2)
Komentarze (2.5k)
Recenzje (4)

Programistyczna wojna

@__Tux__Programistyczna wojna25.04.2015 23:52

Jeden z praktykantów w moim zespole podjął dyskusję na temat doboru języków programowania zależnie od projektu. Dla mnie jako programisty z trzyletnim stażem taka rozmowa wydała mi się bez sensu, gdyż wybór wydaje mi się oczywisty. Jednak wspominając studia okazuje się, że początkujący programista nie ma łatwego życia. Na studiach nie ma czasu, żeby nauczyć wszystkiego, a fora są przepełnione krucjatami zwolenników różnych języków. Czyżby aż tak trudno było odpowiedzieć na pytanie jaki język jest najlepszy do nauki jako pierwszy?

Moje jest mojsze

Jednym z powodów, dla którego forumowicze są w stanie niemal umrzeć za język programowania jest to że w ich karierze jakiś język sprawdził się najlepiej. Niestety nie wszyscy mogą i chcą robić to samo, dlatego powstało tyle języków ile mamy. Rzetelnych porównań jak nie było, tak nadal nie ma. Nie chodzi do końca o same zestawienie gramatyki języków, ale też o sposób myślenia w każdym z nich, żeby osiągnąć dany cel. Na przykład wikipedia w opisach języków często ma akapity dotyczące zalet i wad, jednak te można mnożyć na potęgę, zależnie od kontekstu, np. że asembler nie ma odśmiecacza pamięci jak Java (poważnie, słyszałem taki tekst).

Jak szukać?

Nic nowego nie wymyślę ani nie zbawię świata tym, co napiszę poniżej, ale może komuś rzucę inne światło na ten problem. Na pewno nie da się odpowiedzieć na pytanie jaki język jest najlepszy, bo o tym decyduje się planując realizację projektu - ważniejsza jest w nim technologia. Tak samo nie można komuś doradzić czego najpierw się uczyć, bo wtedy najważniejsze jest zrozumienie zasad działania komputera i danego systemu. Dopiero potem dopracowuje się szczegóły. Tak jak mechanik musi wiedzieć czym jest silnik czy tłok zanim dotknie się do jakiegokolwiek samochodu. Modeli silników jest sporo, odpowiednie narzędzia dobiera się zależnie od modelu samochodu i silnika. Moim skromnym zdaniem przy dobieraniu technologii do projektu powinno się patrzeć na:

  • wielkość projektu
  • docelowa architektura
  • wygoda i szybkość pisania projektu
  • wygoda używania i użyteczność programu

Wielkość projektu

Czy ktoś chciałby pisać Facebooka albo Windowsa w całości w asemblerze? Chyba nikt. Facebook ma do tego HipHop: wygoda PHP i wydajność trochę mniejsza od C++. Czy ktoś będzie pisać okienkową aplikację w Javie, która kasuje pliki tekstowe starsze, niż rok? Można, ale to strzelanie z armaty do muchy. Lepiej napisać parę linijek w bashu czy Perlu.

Docelowa architektura

Czasami zdarza się pisać coś na telefon komórkowy, tablet czy serwer. Nie każdy system ma ekran, nie każdy obsługuje się dotykiem czy myszą. Na PC nie trzeba liczyć taktów procesora, a dodatkowe 4 MB RAM to żadem koszmar. Nie wszędzie uruchomienie Javy ma sens.

Wygoda i szybkość pisania projektu

Pisząc dla siebie, od razu wiemy, że jeśli szybciej odpalimy Netbeans, zrobimy okienko w Javie i mamy gotowy program, to wybieramy Javę. W Perlu za to możemy zmienić nazwę tysiąca plików za pomocą paru linijek. Mając firmę, musimy też wiedzieć ilu mieć ludzi i do czego ich wykorzystać.

Wygoda używania i użyteczność programu

Użytkownik też jest ważny. Jeśli do kalkulatora każemy mu instalować nową wersję .NET albo Javy, to może się trochę zdenerwować. To tak, jakbyśmy powiedzieli: "Zrób to, bo ja tak chcę!". No cóż, my jako programiści niby wiemy więcej, ale "klient nasz pan".

Jaki mamy wybór?

Teraz małe zestawienie. Nie ma sensu porównywać wszystkich cech, dlatego wybrałem moim zdaniem ważne wyróżniki.

C++

Standard 2011 wniósł sporo zmian w STL jak i w samym języku. C++ w końcu umie domyślić się typu po tym, co jest przypisywane do zmiennej. Obsługa wątków na poziomie standardu może bardzo odciążyć projektantów wieloplatformowych programów. Wyrażenia lambda są jednym z elementów pozwalających zaliczyć C++ do grona nowoczesnych. Tak więc w C++ mamy:

  • wybór kompilatorów
  • generyczną bibliotekę STL
  • kod tłumaczony na instrukcje asemblera
  • wybór paradygmatu programowania
  • kontrolę nad działaniem systemu

Java

Wersja 1.8 w porównaniu do pierwszych wersji jest demonem wydajności. Ma dobrze opisaną bibliotekę standardową i scentralizowaną bazę wiedzy. Nawet, jeśli zachwalana przez zwolenników przenośność nie działa, to możemy nadrobić używając JNI i refleksję. Używając Javy:

  • nie musimy martwić się o rzeczy specyficzne dla systemu, np. rozmiar zmiennych, zarządzanie pamięcią
  • mamy silną kontrolę typów (Java bardzo czepia się rzutowania itp.)
  • mamy mechanizm refleksji
  • mamy przykłady użycia bezpośrednio od producenta

Perl

Domyślnie instalowany z wieloma dystrybucjami Linuksa. Często jest używany do tworzenia prostych narzędzi systemowych i użytkowych. Bardzo długo był bazą do tworzenia stron internetowych. A zatem Perl:

  • jest całkiem zwięzły
  • nie wymusza deklaracji typu zmiennych
  • nie wymaga kompilacji
  • nie narzuca paradygmatu programowania
  • ma bogate archiwum CPAN

Python

Szczególnie użyteczny jako język do tworzenia wtyczek do programów. Projekty typu Django i Mercurial są przykładem na to, że w języku skryptowym można tworzyć potężne narzędzia. Python (cechy skryptowe jak Perl):

  • ma wbudowaną w składnię arytmetykę liczb zespolonych
  • dobre zaplecze w tworzeniu aplikacji internetowych
  • wymusza czytelną składnię

Podsumowanie

Pominąłem wiele innych języków, gdyż nie byłem wstanie znaleźć odpowiedniej ilości różnic. C# ma dużo wspólnego z C++ i Javą, a Ruby z Pythonem. Myślę, że mój pierwszy wpis tutaj będzie innym spojrzeniem na programowanie, aniżeli powodem do kolejnej świętej wojny. Jeśli oczekiwaliście, że znajdziecie tu odpowiedź jaki język wybrać, to jej tu nie ma, jest to tylko wskazówka :-) . Zamierzam dodać kolejny wpis na temat wydajności C, C++ i innych języków, ale najpierw muszę zebrać jakieś fajne dane do tabelek.

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.