W dzisiejszym świecie "nietechniczni" kreatywni ludzie nie mają łatwo. Obrotny biznesmen chce wsadzić w coś trochę kasy, rozkręcić jakiś projekcik, wpada na genialny pomysł: "a, zainwestuję sobie w portal!". Pomysł - betka. Założenia - betka. Analiza - betka. Ewentualna dotacja - betka. Okazuje się, że wszystko jest banałem w porównaniu z dokonaniem wyboru technologii. I, wbrew pozorom, im więcej ekspertów, tym trudniejszy wybór.
Chcesz wiedzieć jak jest naprawdę? Która z dzisiejszych technologii gwarantuje sukces, a która prowadzi prosto do ciemnych otchłani informatycznej rozpaczy? Chcesz wiedzieć jakie rozwiązanie zacznie generować zyski od razu po starcie, a jakie jest skazane na technologiczną porażkę? Statystyki nie kłamią, już na początku projekt ma marne szanse na powodzenie. Chcesz je zwiększyć? Czytaj dalej!
Która technologia jest najlepsza?
Nie wierzę, że ktoś autentycznie oczekiwał odpowiedzi na to pytanie. Jedyna słuszna odpowiedź to: "z biznesowego punktu widzenia wybór technologii nie jest istotny!". Jest to kwestia absolutnie trzecio-, czwarto- czy milion-rzędna. Oczywiście w końcu trzeba się na coś zdecydować, ale należy zdawać sobie sprawę z faktu, że KAŻDA technologia nadaje się do stworzenia świetnego, skalowalnego, wydajnego, bezpiecznego rozwiązania. Jednocześnie ŻADNA technologia nie gwarantuje w/w cech. Dowodów nie trzeba na to nawet przedstawiać. Dowodami możliwości sukcesu są miliony stron w internecie, szczęśliwie działające na różnych platformach. Dowodami możliwości porażki - przypadki informatycznych klęsk.
Pomijając kwestie finansowe i założeniowe, ponieważ one są rozpatrywane w innej płaszczyźnie niż wybór technologii do realizacji postawionych celów, dochodzę do dość banalnego wniosku: "wszystko zależy od umiejętności i zaangażowania zespołu". A czy zespół świetnie programuje w PHP, czy w .NET, czy w Javie - nie ma to absolutnie żadnego znaczenia.
Porównań tych technologii jest co niemiara dostępnych w internecie. Moim zdaniem takie porównania są jednak bez sensu. Nie można porównać wydajności Javy i .NET - ewentualna optymalizacja tak czy siak odbywa się na poziomie aplikacji, a nie używanej technologii. Nawet jeżeli jedna z tych technologii jest "szybsza" od drugiej (chociaż nie wiem w jaki sposób miałoby się to mierzyć) to i tak kluczowym elementem są umiejętności programisty. Fakt, że w którejś z nich milion instrukcji wykona się o 0,1 sekundy szybciej nie ma znaczenia, ma natomiast znaczenie odpowiednie cache'owanie danych, poprawne zarządzanie połączeniami do bazy danych, świadome wykorzystanie dodatkowych narzędzi wspomagających tworzenie rozwiązań.
Z życia wzięte
Prawie rok temu miałem przyjemność (tak, była to dość zabawna i relaksująca przygoda) uczestniczyć w trwającej dość długo (bo ze 2 miesiące) technologicznej przepychance przy planowaniu sporego przedsięwzięcia. Koniec końców wypisałem się z tej zabawy (argument podany powyżej - skoro przez 2 miesiące "owner" projektu nie potrafi zdecydować się na technologię to co będzie dalej?) bo stała się w moim odczuciu stratą czasu, ale kilka argumentów przytoczę ku rozrywce Czytelników.
Pierwsza moja wypowiedź w całej dyskusji miała identyczny ton jak poprzednie akapity: technologia NIE MA WPŁYWU na sukces bądź porażkę projektu. Po prostu jeśli ja mam w tym w jakiś sposób uczestniczyć, to będzie to .NET i koniec - bo na tym się znam.
Kilka urywków z dalszej korespondencji:
Argument 1: "większość poważnych serwisów jest zrobiona w Javie, a nie w .NETcie, więc jest jakaś tego obiektywna przyczyna"
Moja odpowiedź: "Chętnie zobaczyłbym źródło takiej wiedzy. Ja jestem praktycznie pewny, że większość dużych witryn stworzono nie w Javie ani nie w .NET a w PHP (np. Facebook, chyba największy portal na świecie). Z przykładowych implementacji .NET mamy MySpace - z pewnością również w czołówce "poważnych serwisów""
Argument 2: "sztywniejsze, niż w Javie, procedury technologii .NET i związane z tym ograniczenia elastyczności produktu – tu coś wolno, tam czegoś nie wolno"
Moja odpowiedź: "Nie mam pojęcia o co może chodzić. Java i C# są językami praktycznie bliźniaczymi, ograniczenia jednego i drugiego są bardzo podobne. Na korzyść .NET przemawia możliwość stosowania więcej niż 1 języka, w tym języków funkcyjnych (F#) i dynamicznych (Ruby, Python). Ale może po prostu nie zrozumiałem tego zarzutu."
Argument 3: "koszt utrzymania serwerów Microsoft po wdrożeniu systemu budzi pewne wątpliwości"
Moja odpowiedź: "Dla przykładu hosting na home.pl: http://home.pl/serwery/unix vs http://home.pl/serwery/windows. Ceny są takie same. O środowisku dedykowanym nie potrafię się wypowiedzieć, warto byłoby spytać kogoś kto faktycznie ponosił koszty jednego jak i drugiego rozwiązania - a nie kierować się... przeczuciem?."
Argument 4: "W Javie implementacja systemu będzie łatwiejsza"
Moja odpowiedź: "Taki argument jest niczym nieuzasadniony (żeby nie napisać "głupi"). Dla osoby piszącej na co dzień w Javie łatwiej będzie napisać w Javie. Dla programisty COBOL łatwiej będzie napisać w COBOL. Mi łatwiej będzie stworzyć cokolwiek w .NET bo zajmuję się tym od lat. Jeszcze kilka lat temu za Javą mogła przemawiać olbrzymia gama produktów pobocznych tworzonych przez społeczność (w końcu jest to technologia dużo starsza), znacznie usprawniających prace programistyczne, jednak od dłuższego czasu dla .NET dostępnych jest również bardzo wiele takich narzędzi, co w zupełności wystarcza i pozwala zapobiec wynajdowaniu koła na nowo."
Co dalej?
Teoretycznie jest to dyskusja na całe godziny. Bardzo ciężko jednak znaleźć osobę znającą więcej niż jedną technologię od podszewki, tak, aby mogła wypowiadać się w pełni autorytatywnie. Aby jej zdanie nie było skrzywione własnymi preferencjami, a faktycznie rzetelnie zdobytym na placu boju doświadczeniem.
Ja ze swojej strony mogę wymieniać najbardziej pchające się do głowy zalety .NET... ale nie mogę krytykować rozwiązań alternatywnych.
Nie jestem w stanie powiedzieć "Java jest zła bo...", "odradzam PHP ponieważ...", "Python się tu nie sprawdzi gdyż..." i wymienić milion powodów. WCALE nie uważam że te technologie są złe. Po prostu specjalizuję się w .NET. Argumenty takie jak powyżej są bez sensu - nie ma jak się do nich odnieść. W konkretnej dyskusji pod konkretny projekt można spierać się o konkretne rozwiązania zastosowane w konkurencyjnych technologiach, jednak powinno odbywać się na dużo bardziej szczegółowym poziomie niż "proszę wybrać Javę bo w .NET są sztywniejsze procedury".
Prośba na koniec
Jeżeli ktoś kiedyś zapyta Cię o to "która technologia nadaje się najbardziej do projektu X"... proszę Cię bardzo, nie utrudniaj życia kolegom po fachu podając idiotyczne argumenty przemawiające za Twoim ulubionym narzędziem. Czy jesteś pewien, że inne nie oferują czegoś lepszego?
Spójrzmy prawdzie w oczy - doba ma tylko 24 godziny, a nawet tego nie wystarcza do mistrzowskiego poznania całego ekosystemu .NET. Zakładam że w Javie czy PHP jest podobnie. Przyznaj uczciwie sam przed sobą - czy jesteś ekspertem w więcej niż jednej z nich na tyle, aby z ręką na sercu wskazać "tą najlepszą"?