Technologiczny kogel-mogel. .NET vs Java vs PHP vs RoR…

29

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ą"?

Share.

About Author

Programista, trener, prelegent, pasjonat, blogger. Autor podcasta programistycznego: DevTalk.pl. Jeden z liderów Białostockiej Grupy .NET i współorganizator konferencji Programistok. Od 2008 Microsoft MVP w kategorii .NET. Więcej informacji znajdziesz na stronie O autorze. Napisz do mnie ze strony Kontakt. Dodatkowo: Twitter, Facebook, YouTube.

29 Comments

  1. Pozwolę się z Tobą nie zgodzić. Ja również jestem zdecydowanie dotnetowy, niż PHPowy, czy Javaowy, ale uważam, że każda technologia ma swoje unikatowe zalety i możliwości. Poprzez umiejętny dobór technologii do realizowanego zadania jesteśmy w stanie całkiem sporo zyskać.

    Przykład: hosting PHP+MySQL jest dużo tańszy, niż hosting Java lub .NET, więc na rynek małych witryn i portali ciężej dostać się, jeśli chce się tworzyć w .NET.

    Z drugiej strony: spróbuj napisać dużą aplikację biznesową w PHP. Oczywiście, że można, ale czy to znaczy, że jest to optymalne rozwiązanie? Cytowany przez Ciebie facebook to serwis społecznościowy, czyli system, w którym nacisk położony jest na dane, a nie na zachowanie/logikę — dlatego PHP wydaje się odpowiednie.

    RoR jest świetny do szybkiego tworzenia aplikacji, ale trzeba pamiętać, że wbudowany w niego wzorzec Active Record ma swoje ograniczenia i być może nie jest odpowiedni dla naszego konkretnego wdrożenia.

    Na koniec .NET vs Java. Możliwości tych technologii (w moim mniemaniu) są raczej zbliżone i w tym starciu decydującym czynnikiem jest wiedza i doświadczenie zespołu.

  2. @Szymon Pobiega:
    Dla "małych" portali podałem linki do home.pl – ceny hostingu są tam identyczne dla php+myslq i asp.net+mssql (ale nie będę się oczywiscie spierał że .net jest tu lepszy – sam kilkukrotnie doradzilem ten wybór klientom z tego "segmentu" rynku).
    Co do "społecznościówek" – Facebook jest w PHP, a MySpace w .NET. Oba działają, oba są wielkie. Jedna i druga technologia wykluła olbrzymie dzieci. A czy w facebook brak jest zachowania/logiki? Nie wydaje mi się.
    RoR i Active Record… dla .NET jest Castle ActiveRecord i mimo ograniczen tego wzorca, jest przecież popularny.
    Koniec końców wniosek pozostaje niezmienny – we wszystkim mozna napisać wszystko równie dobrze, jak we wszystkim można wszystko spier…

  3. Jest jedna mala rzecz – mianowicie zrobiles kogel mogel z technologiami webowymi (php mozna by tutaj raczej porownac bardziej do asp.net niz do calego ogolu .net), totez zrobiles taki miszmasz, ktory by mozna podsumowac tak – kazda technologia jest dobra – wazne bys mial kogos kto Ci to dobrze zrobi. Ale nie do konca jest tak, poniewaz niektore technologie sa duzo drozsze w wykorzystaniu niz inne (nawet z cena szkolenia pracownika, ktory nie korzystal z danej technologii).
    W pierwszej kolejnosci nalezy zwrocic uwage jakie technologie sie nadaja do danego rozwiazania np. po kiego grzyba pisac na sile w .necie na symbiana mimo ze framework do tego, ale ktorego stabilnosc moze byc rozna, produkt nie jest jeszcze do konca sprawdzony, skoro mamy Jave lub raczej nie bedziesz pisac aplikacji desktopowej w PHP? Obawiam sie w takiej sytuacji, taniej wyjdzie zatrudnic .netowca/zespol .netowy by sie nauczyl/i javy na poziomie wystarczajacym do stworzenia aplikacji w technologii ktora sie po prostu do tego nadaje. To byl tylko przyklad, ale ogolnie chodzi mi o to ze bardzo czesto jest tak, ze wybor technolgii jest z gory narzucony albo bardzo mocno ograniczony i nie ma co sie upierac by dostosowywac technologie do umiejetnosci zespolu…

  4. @yaceq:
    Nie no oczywiście że "nic na siłę". Tutaj skupiłem się na technologiach webowych, bo z taką dyskusją miałem do czynienia. Jasnym jest, że wybierać powinno się z technologii "nadających się" do danego zastosowania, a nie ze wszystkich jakie kiedykolwiek powstały. Chyba niewystarczająco naświetliłem kontekst wypowiedzi, ponieważ założyłem "budowanie" projektu od zera, wraz ze zbieraniem ludzi do zespołu, kiedy to naprawdę mamy właściwie dowolność nieskażoną decyzjami z przeszłości.

  5. Ja również się nie zgodzę, ale mam kilka innych "argumentów".
    1) Spytaj UncleBob’a (http://blog.objectmentor.com/), albo gości z Pragmatic Programmer – oni uważają, że należy poznawać nowe języki i technologie, a nie zamykać się tylko na jedną.
    2) Moim zdaniem od tego jest architekt systemu, żeby umiał, zaproponować mając rozeznanie w kilku technologiach zaproponować najlepsze z punktu widzenia klienta rozwiązanie. Uważam, że architekt od tego właśnie jest – co mi po kimś, kto będzie umiał mi zaproponować tylko i wyłącznie rozwiązanie z jednej półki nie mając pojęcia jak można to zrobić gdzieś indziej.

    Nie kieruję tego oczywiście osobiście, natomiast jestem zdania, że developerzy nie powinni się ograniczać do znajomości tylko i wyłącznie jednej platformy. Jest szczególnie widoczne przy porównaniu programisty, który zna (albo chociaż widział) jakiś język skryptowy do operowania na plikach (perl, python, sed, awk), a takim, który tego nie widział i będzie próbował obrabiać wielki plik tekstowy pisząc rozwiązanie w .NET. Taka ignorancja jest fatalna w skutkach, a taki developer niewiele warty nawet, jeśli będzie znał każdą instrukcję w CLR.

    Odpowiadając na Twoje pytanie – nie czuję się ekspertem, żeby autorytatywnie się wypowiadać na temat tego, że dla danego problemu dana technologia będzie lepsza, ale znam ludzi, którzy to potrafią. A sam na razie jestem na drodze do takiego stanu.

  6. @leszcz:
    Nie namawiam bynajmniej do zamknięcia się na alternatywne technologie, skądże znowu. Też uważam że trzeba być otwartym, nie spotkałem po prostu dotychczas programisty (architekta?) który potrafiłby równie dobrze zaimplementować dany system w więcej niż jednej technologii, w której się specjalizuje. I nie widzę w tym nic specjalnie złego – trzeba się w czymś specjalizować, a siłą rzeczy nie starcza wówczas czasu na "ekspercki" poziom gdzie indziej ( http://www.maciejaniserowicz.com/post/2010/02/28/Slowo-na-niedziele-o-wszechwiedzy.aspx ).
    Stąd właśnie mój apel na koniec – o nieodrzucanie technologii tylko dlatego, że się ich nie zna!
    Jeżeli masz tą przyjemność (zaszczyt?) znać/pracować z takim człowiekiem to zazdroszczę.

  7. Hmmm czytam wypowiedzi i wg mnie kazdy ma racje i kazdy daje dobre argumenty na ich obrone.
    Moje zdanie jest nastepujace w tej kwestji. Zazwyczaj kiedy pojawia sie nowy projekt i prosba o zaproponowanie czegos sesnsownego co moglo by wybic ow projekt i zrobic z niego sukces komercyjny/biznesowy jest technologia ktora znamy najlepiej (w danej chwili). Dla czesci bedzie to .NET, dla innych Java a dla pozostalych PHP. Kazdy ‘specjalista’ pewnie zaproponowal by najlepsze wg niego rozwiazanie.
    Niema sie co dziwic, poniewaz nikt nie bedzie promowac technologii ktorej niezna i na szybko nie bedzie w stanie ocenic gdzie sa potencjalne waskie gardla rozwiazania.

    Aktualanie zmagam sie z przygotowywaniem prototypu odnosnie nowego produktu. Aplikacja ma byc dostepna w Windows (wybralem wiec WinForms i C# bo to znam najlepiej oraz MS SQL bo odrazu mam polaczenia z C# ktore MS zaoferowal w tzw pakiecie). Pewnie bede potrzebowac (za jakis czas) aplikacji WEBowej jednak na tym sie nieznam ale … mam paru znajomych ktorzy sa biegli w Javie i/lub PHP.
    Napisze jak to bedzie wygladac z biznesowego puntu widzenia.
    Spotkamy sie, pogadamy, Ja powiem jakie mam wymagania i jaki mam budzet i wybiore ta technologie ktora spelni moje oczekiwania za wskazana wczesniej cene. W mojej glowie mam cel do zrealizowania i chce go wykonac jednak majac w kieszeni okreslona ilosc pieniadzy.

    Temat ktory poruszyles przypomina mi problem ktory ma kazdy z nas na codzien. A mianowicie wybor auta ktorym jezdzimy. Moze i mamy w glowie ze Audi jest lepsze od Fiata a Porshe lepszy od Audi ale odpowiedzcie sobie na pytanie czym jezdzicie jak macie w kieszeni np 30-50tys i musicie wybrac auto ktore bedzie spelniac Wasze oczekiwania i byc niezawodne. Oczywiscie wybor jest trudny ale kazdy pewnie wybral by inaczej i niema jednoznacznej odpowiedzi :)

  8. punkracy on

    Witam,
    zgodzę się z tobą, że wybór technologii nie ma, aż tak dużego znaczenia. W jednej lub drugiej można wykonać zadanie. Jednak w jednej można to wykonać szybciej, prościej i zgodnie z standardami. Liczy się znajomość wzorców, umiejętność ich użycia i jakby to powiedzieć "sprawność" umysłu :)
    Nie zgodzę się totalnie z argumentem 2. Piszesz, że Java i C# są językami bliźniaczymi i że na korzyść .NETa przemawia możliwość użycia więcej niż jednego języka (Python, Ruby). Przykro mi, ale jython i jruby były w pełni funkcjonalne zanim programiści MS słyszeli o czymś takim jak python czy ruby. Obecnie JRuby jest zgodny z Ruby 1.8.7 oraz bez problemu można stworzyć projekt Railsowy. O IronRuby powiedzieć tego nie można. Do tego istnieją takie języki jak Scala czy Clojure zyskujące na popularności.
    Co do ActiveRecord w Railsach to bez problemu możesz wymienić ten ORM na inny, np. DataMapper. Oczywiście Railsy były związane dość mocno z AR stąd problemy z generatorami itp przy takiej wymiance. Piszę były bo w wersji 3 już takiego ścisłego powiązania nie będzie.
    Jakiś rok temu zaczełem zabawę z ASP.Net MVC bo musiałem użyć technologii MS. Cieszyłem się, że MS kopiuje dobre wzorce z Railsów. Jednak po roku stwierdzam, że nie idzie im to do końca tak dobrze jak powinno. A gdy zobaczyłem na blogu Roba Connerego wpis o Railsach to już widzę, że nie ma nadziei.. przynajmniej na ten czas.
    pozdrawiam

  9. @Janet:
    Stosując analogię z samochodami:
    Klient przychodzi do sprzedawcy i mówi: "mam tyle i tyle kasy; chcę przyspieszyć do setki w 6 sekund; na szpanerskim wyglądzie mi nie zależy; nie zależy również na niskim spalaniu; dodatkowo ma się tam zmieścić moja 5-osobowa rodzina". Sprzedawca bierze wymagania i proponuje samochód.

    W informatyce podobnie, z tą różnicą że WSZYSTKIE popularne technologię mogą być w stanie spełnić żądane wymagania. W tym cały problem, i o to mi właśnie chodzi – klienta nie powinno obchodzić W CZYM coś zostanie napisane, tylko żeby działało tak jak tego oczekuje i mieściło się w budżecie.

  10. @punkracy:
    Dzięki za info, nie wiedziałem że Java ma inne popularne języki niż Java. Tym trudniej jednoznacznie wskazać technologię "lepszą", co niestety wiele osób z wielką pewnością siebie czyni.

    A Rob już nie pracuje w MS:).

  11. punkracy on

    Hej,
    tak wiem, że już nie pracuje, ale podobne wrażenie mam czytając wypowiedzi Phila Haacka, a także innych (S.Walther) zachwyty nad technikami wprost wyciągniętymi z świata Rubiego (nie mówie, że to źle). Dla przykładu BDD – tak, wiem że to nie technika typowo RoR, ale tam najłatwiej do zastosowania i stosowana najwcześniej (wraz z java). Podobnie halm, less css… i choćby w coraz większej ilości projektów .Net znajduję Rakefile (np. fluent nhibernate) czyli Rake – typowe narzędzie Ruby (nawiasem mówiąc piękne).
    Tak więc zgadzam się, że wszystkie technologie mogą spełnić żądane wymagania i z pewnością dobry programista .Net zrobi to lepiej niż słaby programista Ruby, PHP, Java. Jednak jak już wspomniałem pewne techniki/języki skłaniają lub wręcz wymuszają stosowania dobrych wzorców, technik – MVC, HTML5, unobstructive javascript, BDD.
    pozdrawiam
    PS. Przy okazji chciałem powiedzieć, że fajnie się czyta twojego bloga

  12. @punkracy:
    Na temat RoR słyszałem wielokrotnie same zachwyty, muszę kiedyś sam tam łeb wsadzić i się pobawić. A "zapożyczanie" najlepszych cech z innych paradygmatów/rozwiązań to moim zdaniem świetna rzecz, np. funkcyjność wkraczająca do c#.
    P.S. Dzięki, fajnie się czyta mądre komentarze:) ależ słodko…

  13. punkracy on

    Aha, żeby nie było, że transfer idzie tylko Ruby->.Net to powiem, że w Rails3 lib pośredniczący pomiędzy Rails core, a ORM – ARel (Relational Algebra for Ruby) był w jakimś tam stopniu inspirowany przez Linq: http://magicscalingsprinkles.wordpress.com/2010/01/28/why-i-wrote-arel/

    pozdrawiam
    PS. Jeśli chcesz zacząć z Railsami to polecam: http://www.railstutorial.org/book
    Świeże dane i od początku, zaczynając od MVC, poprzez git, TDD i BDD po utworzenie modeli, kontrolera i widoków.

  14. ok, to jezeli juz tak mowimy to LINQ bylo zapewne czesciowo zainspirowane przez xBase a xBase przez dBase a dBase przez i tak dalej. Potem mozemy dodac inne rzeczy i sie tak naprawde okaze ze to co teraz mamy wymyslili ludzie 50 lat temu – na przyklad lambda expression, 1930 rok, jezyk funkcyjny 1950 rok (LISP). wiec wiadomo ze kazdy z kazdego czerpie. Pytanie tylko kiedy to cos pojawi sie w danej technologii.

    Tutaj zgadzam sie i nie zgadzam sie z Procentem – w calym temacie, ale nie chce dolewac oliwy do ognia :)

    dobra wiecej sie nie wtracam :)

  15. @Gutek:
    Nie ma żadnego ognia do którego trzeba lub nie trzeba oliwy dolewać:). Napisz więcej jeśli w głowie coś siedzi. Im więcej komentarzy tym ciekawiej.

  16. jesli chodzi o facebooka to on jest pisany w php lecz! sprytni ludzie napisali narzedzie, ktore konwetuje kod z php do c (ostatnio to narzedzie zostalo gdzies opublikowane, wiec mozna sie z nim zaznajomic).

    pozdr.
    L.

  17. Argument 3. Ale te serwery w home różnią się ilością miejsca. Jak dla mnie nie obaliłeś tego argumentu. Uważam, że koszty hostingu/infrastruktury MS są wyższe, ale bardzo często (nie zawsze) ta różnica jest pomijalna przy kosztach całego projektu.
    A przy okazji, to problem kosztów występuje przy działaniach hobbistycznych/noprofit. Ostatnio rozglądam się za VPS dla swoich zabawek. Znalazłem z Linuxem za 25PLN/m a z Windowsem 99PLN/m.
    A co do meritum, to jeśli rozmawiamy o Facebook-u, to raczej nie ma znaczenia, czy to coś, jest napisane w RoR .NET, czy Django, ale dla systemu middleware przetwarzającego pliki (tu zgadzam się z leszcz) ma znaczenie, czy to będzie .NET/Java czy perl/python.

  18. Ja to widzę tak: jest do zrobienia projekt, 1. firma ma do dyspozycji niewielki zespół .NET(lub java/PHP) i trochę czasu – robimy wycenę i okazuje się, że dadzą radę: projekt jest 100% .NETowy(Javowy/PHPowy) 2. Do dyspozycji jest mały zespół .NETa i mały Javy, czasu niewiele – można podzielić prace np. usługi w Javie, reszta w .NETcie. 3. Firma robi wyłącznie w jednej technologii i nie ma wyboru, od razu robi co ma robić np. w PHP. Natomiast ktoś kto zleca tej firmie zadanie, może w ogóle nie mieć pojęcia co siedzi w środku – może np. powiedzieć, że wszystko co mają działa na Oraclu i chcą, żeby tak zostało albo i nie. Określa czas i dogaduje się z kasą, firma wykorzystuje Oracla i dowolną technologię. Większe systemy i tak chodzą na maszynach dedykowanych. Natomiast jeśli ktoś by przyszedł do mnie i powiedział abym mu zrobił małą stronkę jak najtańszą w utrzymaniu to wykorzystałbym php na hostingu za 40zł rocznie. Pozdrawiam – również jestem stałym czytelnikiem :)

  19. @leszcz
    [quote]Jest szczególnie widoczne przy porównaniu programisty, który zna (albo chociaż widział) jakiś język skryptowy do operowania na plikach (perl, python, sed, awk), a takim, który tego nie widział i będzie próbował obrabiać wielki plik tekstowy pisząc rozwiązanie w .NET. Taka ignorancja jest fatalna w skutkach, a taki developer niewiele warty nawet, jeśli będzie znał każdą instrukcję w CLR.[/quote]

    Zawsze przy obróbce pliku zaczynałem z perl, python (wybierz sam) i kończyłem na .NET z powodu kodowania znaków. A .NET robi to super fajnie. Mogę poczekać nawet z 4 minuty więcej :)

  20. Nie zgadzam się. Najważniejsze są oczywiście pomysł aplikacji i ludzie, ale technologia ma niebagatelne znaczenie. Jeśli jakiś dyrektor/kierownik mówi, że technologia jest bez znaczenia, to znaczy że jest ignorantem, i do tego nie zna się swoim fachu.

    Po pierwsze: nie należy kierować się ceną: .net jest najdroższy (potrzebne Visual Studio i zwykle VPS z Windows – serwery wirtualne z Windows to rzadkość), Java pośrodku (potrzebny VPS z Linuxem – serwery wirtualne z Javą to rzadkość), PHP najtańszy (prawie zawsze wystarczy supertani serwer wirtualny). Z drugiej strony jednak: .net jest technologią najbogatszą w możliwości, narzędzia i ułatwienia, PHP i Java są uboższe. (no cóż, jednak jeśli MS bierze słone pieniądze za Visual Studio, ma za co rozwijać .net)

    Co w .net zrobię w 1 dzień, w Javie zajmie mi 1.5 dnia. Pomnóżmy to przez jakieś 10 programistów – i wtedy może wyjść, że .net to najtańsza technologia! Oczywiście wszystko zależy od projektu, ale jako ‘reguła kciuka’ – .net jest obecnie najtańszą technologią, a to z kolei przekłada się na zysk z projektu.

  21. Zalozenia bedace podstawa wskazanych argumentow sa dosc powierzchowne i nie moge sie oprzec wrazeniu, ze autor wiecej ma wspolnego z teoria niz praktyka zarzadzania duzymi projektami informatycznymi.
    Facebook owszem byl tworzony w PHP jesli chodzi o warstwe prezetnacji. Obecnie jednak trudno mowic tu o technologii PHP, jest to raczej Frankenstein, poniewaz Facebook stworzyl szereg narzedzi, ktore umozliwiaja podtrzymywanie przy zyciu tak duzego systemu napisanego w tak ulomnej i nie nadajacej sie do implementacji duzych projektow technologii. Powod dlaczego PHP jest tak ulomny dla duzych projektow jest taki sam jak ten, dlaczego dzieciaki moga sie nauczyc szybko pisac skrypciki nie pamietajac o deklarowaniu zmiennych oraz kontroli typow. Do tego dochodzi brak powaznych narzedzi zapewniajacych refactoring. Wymieniac mozna dlugo, ale jak ktos jest teoretykiem programowania oczywiscie moze pojsc w kierunku tworzenia duzych systemow z uzyciem PHP.
    Co do wyboru Java/.net to kluczowa kwestia jest czesto koszt i dostepnosc programistow, koszt narzedzi, dostep do kodow odpowiednich bibliotek itp. Tak, .net jest bogaty w biblioteki, jesli jednak znajdzie sie w jednej z nich bug, to jedyne co pozostaje to wyslac ticket i oczekiwac jego szybkiego rozwiazania. W przypadku wielu bibliotek w Java mamy dostep do kodu opensource i mozna samemu zakasac rekawy i dostosowac kod do wlasnych potrzeb.
    Argumentow za wyborem systemu jest jeszcze wiecej, ale to zasluguje na osobny artykul. Zas komentowany artykul oceniam na bardzo powierzchowna i chyba wynikajaca z braku znajomosci tematu demagogie.

  22. Marcin Z on

    A ja tez to bede powtarzal zawsze i wszedzie:
    "Technologia nie ma znaczenia! Techonologia nie ma znaczenia! Technologia nie ma znaczenia! Technologia nie ma znaczenia!(…)"

    Zgadzam sie z procentem i od dluzszego czasu tak wlasnie mysle. Mam na koncie kilkanascie wdrozonych/zaplaconych i niektorych z nich nadal dzialajacych projektow w roznych technologiach. Nie wszystkie z tych wdrozonych projektow uwazam za zakonczone sukcesem (gdzie projekt zakończony sukcesem to projekt bez opóźnień, spełniający wszystkie wymagania i kosztujacy tyle ile otrzymano za niego kasy), ale technologia nie miala w gruncie rzeczy na to wplywu. Raczej był to „czynnik ludzki”, lub niewystarczajaca dojrzałość organizacyjna (CMMI poniżej 4). Krotko mówiąc były to czynniki kompletnie niezwiązane z wybrana technologia.

    Co do moich technologicznych preferencji to ja i tak zawsze bede preferowal .NET, C# i Visual Studio, ale tylko, dlatego ze bardzo go lubie! i na tym lubieniu jeszcze sie nie przejechalem. Znam go na tyle, ze moge smialo powiedziec, ze podczas tworzenia aplikacji internetowych mozna uzyskac nim elastycznosc i niskopoziomowosc lepsza niz w PHP, poza obsługę stringow i http response/request, oraz uzyskac znacznie wieksze korzyści niż podczas wykorzystywania Javy, która zaczyna przegrywac powoli z .NETem jeśli chodzi o popularność i tempo rozwoju, czy to się komus podoba, czy nie. Tak, osobiście uwazam, ze .NET jest najlepszy dlatego zawsze będę preferowal go, jak i inne technologie Microsoftu, nad innymi technologiami, do zastosowania projektow nad którymi pracuje. Jednak pomimo tego nie uwazam, ze to ze wybieram .NET ma wpływ na sukces (definicja powyżej) projektu nad którym pracuje.

    Dodatkowo moim zdaniem warto zauważyć, ze post procenta mowi o ryzyku powodzenia projektu, a nie o jego jakości. Jeśli mowimy o jakości rozwiązania, to tak, uwazam ze .NET i VS pomagaja mi w osiągnięciu lepszej jakości (co rozumiem przez jakosc produktu to już jest zdecydowanie dluzsza definicja niż sukces projektu) koncowego rozwiazania w okreslonym przez projekt ramach czasowych niż Java czy php, ale to także wynika z moich technologicznych preferencji! Zastosowanie poza technologicznych procesow i/lub zwiekszenie budzetu może pozwolic osiągnć porównywalny poziom pomiedzy rozwiązaniami wykonanymi w technologi X i Y.

    @Janek
    Nie zgadzam się, by modyfikacja źródeł i wytworzenie nowej kompilacji wirtualnej maszyny Javy było lepszym rozwiązaniem niż wyslanie ticketa do suportu i oczekiwanie na oficjalnego pacza.

    1) Koszt pracy członków zespolu nie pracujących nad tym nad czym pracowac powinni – poprawianie bledow w Javie zamiast pracy nad projektem – to pieniadze po prostu wyrzucone w bloto i zmarnowane.

    2) Zmuszenie klienta do zainstalowania VM Javy wytworzonej przez twoja organizacje może nie przejść w niektórych firmach, które „zarzadzanie bezpieczeństwem” traktuja w dojrzaly i swiadomy sposób – tworzy im to prostu dziure w zabezpieczeniach. Np. JVM w wersji 1.6.0-16.20 cierpial z powodu dosyc powaznego buga pozwalającego na eskalacje uprawnien i zdalne wykonanie kodu. Jeśli dostarczyłbyś klientowi domowa wersje JVM w ktorejs z tych wersji to byloby to równoważne z instalowaniem im trojana.

    3) Ww. blad zostal poprawiony w wersji 1.6.21, co w takim razie zrobiłbyś ty, gdybys buga w JVM poprawil? Wyznaczylbys swoich programistow do pracy nad nowa wersja wlasnej JVM, która bylaby zbudowana na podstawie 1.6.21? Jak wyglądałby historia nowych wersji JVM i twojej prywatnej wersji poprawiającej tego jednego malego buga?

    Kiedys, w czasach gdy aplikacje okienkowe pisano glownie w technologiach niezarzadzalnych, popularna była jedna z technologii Microsoftu, która była zawsze dostarczana z kodami źródłowymi. Chodzi mi o MFC. Microsoft nie zalecal tworzenia wlasnych wersji kompilacji tych bibliotek, wlasnie z wyzej wymienionych przyczyn. Jednak oczywiście byli i tacy, którzy wlasnie w ten sposób postepowali i pozniej często cierpieli z tego powodu. Kody do .NET sa dostępne do wglądu i podczas debuggowania, ale to ze nie jest możliwe skompilowanie wlasnej wersji, to akurat zaleta tej technologii a nie jej wada.

  23. Marcin Z on

    @Janek

    Moze JVM to nienajlepiej powiazany przyklad z trescia napisanego przez Ciebie postu, ale wstaw w jego miejsce nazwe dowolnej biblioteki opensourcowej, a wszystkie pytania nadal beda mialy racje bytu.
    Nigdy nie powinino sie zmieniac nieswojej biblioteki. Jesli dokonujesz w niej zmiany to juz za nia odpowiadasz i staje sie ona Twoja.

  24. A ja doleje w/w oliwy do ognia i powiem tak: do dowolnych projektow webowych najlepiej sprawdza sie php. Drupal to udowodnil.

  25. punkracy on

    @Seba
    Tak, a do wszystkiego innego Cobol. IBM to udowodnił ;)

    @procent
    Mógłbyś coś zrobić z tym spamem, bo od roku przychodzą mi maile, że jest nowy koment, który jest spamem (widzę, że na stronie się nie pojawia, ale na mojej skrzynce tak)

  26. Nie pisalem o modyfikacji JVM, to rzeczywiscie jest juz hardcore. Mozna jednak dokonac modyfikacji uzywanych bibliotek i to wcale nie oznacza, ze sa one "moje". Zgodnie z licencja wiekszosci z nich powinienem to zglosic jako wklad do rozwoju bibliotek. Sam mam za soba juz ponad 6 lat doswiadczenia wdrazania projektow w JAVA i PHP. Nie mialem okazji miec koniecznosci porawiania JVM jak do tej pory, miałem natomiast przypadki kiedy było wygodne poprawienie biblioteki i opublikowanie tego jako wkładu. Kosztowało mnie to godzinę pracy i miałem natychmiastowo poprawiony kod. Moje zmiany były uwzględniane w kolejnych wersjach biblioteki.

    Nie dyskutuje tutaj o wyzszosci .net vs. java vs. PHP. Nie zgadzam sie jednak z teza, ze wybor technologii nie ma znaczenia. Ta tez jest prawdziwa dla malych i srednich projektow.

    @Seba śmiale zauwazyl wszystkie aplikacje "webowe" najlepiej robi sie w PHP. Obecnie mozna powiedziec, ze prawie kazda nowa aplikacja posiada interfejs webowy. Jesli ta aplikacja jest prosty sklepik internetowy lub CMS to jest to prawda. Jesli zas mowimy o systemie, ktory powinien obsługiwać serwisy oparte na socketach i byc przygotowany na obsługę setek tysięcy użytkowników albo wykonywać zaplanowane zadania z dokładnością do sekund to nie podjąłbym się użycia PHP. Sam musiałem przepisać 2 systemy z PHP na Java, kiedy stopień złożoności i piętrzące się problemy technologiczne wynikające ze słabości PHP były przeszkodą dalszego rozwoju. Okazało się jednocześnie, że w Java taki system powstał 2krotnie szybciej.

    Druga rzecz, którą zauważyłeś to koszt pracy zespołu. Bardzo słusznie. Moje doświadczenia są takie, że większość "programistów" PHP nie powinno się nazywać programistami. Sam zatrudniłem dziesiątki i zwolniłem dziesiątki "pseudoprogramistów PHP". Niestety znalezienie wymiatacza w PHP jest conajmniej tak samo trudne jak programisty Java czy .net i jego koszt podobny w związku z tym. Mówię tutaj o ludziach, którzy rozumiej słowa Design Patterns, potrafią rozwinąć skrót TDD a najlepiej napisali w swojej "karierze" przynajmniej jeden test jednostkowy czy integracyjny, rozumieją zasady pracy w SCRUM itp. Do tego jakość narzędzi w PHP powoduje, ze dla bardzo dużych projektów wydajność pisania dobrej jakości kodu w PHP jest średnia.

    Chodzi mi zatem o to, że są pewne wskazania przy bardziej złożonych projektach, które pozwolą zbudować lepszej jakości oprogramowanie taniej i szybciej. Zatem stwierdzenie "Technologia nie ma znaczenia!" jest wg mnie tak samo trafne jak teoria Newtona zasad dynamiki – sprawdza się tylko w pewnych okolicznościach.

  27. @punkracy:
    Masz rację, sorry. Wydaje mi się że teraz jest już dużo lepiej i że nauczyłem antyspama jak ma działać, ale czasami coś się przemknie. Na stronie spamu nie widać bo na bieżąco usuwam.
    Dopiero wpadłem na pomysł że rozwiązaniem jest automatyczne zamykanie komentarzy do wątków starszych niż X dni, co też niniejszym czynię, do postów starszych niż miesiąc nie będzie można dodawać komentarzy. Gdyby sytuacja się powtarzała do daj znać przez stronę kontaktową.