Najlepsza technologia
Jest to w pewnym sensie nawiązanie do wcześniejszego wpisu „Od czego zacząć?!„. Jak zwykle wypowiadam się całkowicie subiektywnie, jednocześnie chcąc pokazać niektórym jakiś punkt widzenia, który może zmusi do przemyśleń, dlatego mam świadomość, że możesz mieć odmienne zdanie, co jest oczywiście dobre i jeśli chcesz możesz się nim podzielić np. w komentarzach. Dzisiaj co nieco o zastanawianiu się jaka technologia będzie najlepsza do projektu, który może stać się w bliżej nieokreślonej przyszłości popularny.
Kiedy już ktoś zdecyduje się zabrać za naukę programowania i opanuje podstawy zaczyna myśleć o własnym projekcie, w końcu wszędzie naokoło słyszy, że bez portfolio nie dostanie się pracy, właściwie nawet nie trzeba być na początku nauki programowania, wystarczy, że nie skończyło się jeszcze zbyt wielu własnych projektów i chce się w końcu coś zrobić, zwłaszcza, że ma się mnóstwo pomysłów. A kiedy będąc początkującym, myśli się o własnym projekcie to zawsze pojawia się też myśl, że może stanie się popularny, że dużo osób go będzie używać, że będziemy przez to sławni, w końcu nasz pomysł jest innowacyjny i idealnie wpasowuje się w rynek, nawet niektórzy są wręcz pewni tego i nie przyjmują innej myśli do siebie.
Sam pomysł stworzenia nowego projektu. a nawet myślenie o jego sukcesie nie jest jeszcze takie złe, w końcu gdyby od początku zakładać, że coś nad czym będziemy pracowali od razu pójdzie do szuflady to jak bardzo spadła by motywacja do rozpoczęcia takiego przedsięwzięcia. Ale przed rozpoczęciem takiego projektu bardzo wielu początkujących programistów zaczyna zadawać sobie i innym pytanie jaką technologię najlepiej wybrać do projektu XYZ żeby nie ograniczała nas wydajność kiedy np. nasz serwis zacznie odwiedzać 10 tys. osób dziennie.
To nic, że w tym momencie mamy ustaloną jedynie ogólną tematykę, badanie rynku skończyło się na pomyśleniu „brakuje mi takiej funkcjonalności, na pewno wszyscy mają ten problem”, a reklama nawet nie jest jeszcze w planach. Na pewno niedługo ludzie zaczną nagle tłumnie korzystać z naszego tworu. A skoro nasz serwis czy program będzie w niedługim czasie mocno eksploatowany to przecież muszę być pewny, że technologia w jakiej go stworzę mnie nie ograniczy.
Chcę napisać aplikację webową, znam w jakimś tam stopniu PHP, ale przecież każdy wie i wszędzie się o tym czyta, że to jest powolne, słabo się skaluje i w ogóle nie nadaje się na duże serwisy, więc lepiej nauczyć się Javy i Springa czy może C# i ASP.NET? A może lepiej jakiś Python lub Ruby, bo takie popularne teraz więc pewnie dobre? A czy baza Microsoftu da radę czy lepiej Oracle? Takie pytania można przeczytać dosyć często na forach internetowych.
Tylko bardzo wiele osób zapomina, że nawet największe produkty początkowo nie stały na najlepszych i najwydajniejszych technologiach. Zazwyczaj pierwsze ich wersje powstawały w technologiach, które po prostu założyciele znali. W końcu mając doświadczenie, nawet niewielkie, w danym języku możemy go dużo lepiej, efektywniej wykorzystać i szybciej zrobić w nim działający prototyp, który pozwoli nam sprawdzić czy ogólne założenia, sposób działania, i funkcjonalność są tym czego my i ewentualnie odbiorcy mogą oczekiwać.
Próbując od razu korzystać z „poważnych” rozwiązań tak na prawdę możemy tylko zmarnować czas. W najlepszym przypadku nauczenie się Javy czy C# i potrzebnych bibliotek zajmie co najmniej kilka miesięcy, potem proces tworzenia w nich aplikacji potrwa półtora raza tyle co w technologii, którą już znaliśmy wcześniej, a na koniec może się okazać, że to co powstało tak na prawdę miało błędne założenia, minęło się z oczekiwaniami czy było niewygodne.
Przyjmijmy, że jednak Twój pomysł jest dobry, masz w przynajmniej minimalnym stopniu zbadany rynek i wszystko funkcjonalnie zaplanowane. Zostało Ci tylko wybranie w czym projekt powstanie. No i w tym wypadku również dużo lepiej jest użyć tego co już znamy jeśli umożliwia nam realizację planów (wiadomo, że znając asemblera nie będziemy próbowali tworzyć w nim usługi internetowej). Dlaczego? Ponieważ jeśli jesteśmy nowi na rynku powinniśmy jak najszybciej dostarczyć potencjalnym klientom coś co działa i co będą mogli zobaczyć, sprawdzić czy spełnia ich oczekiwania tak żeby móc szybko zareagować na sugestie, uwagi i krytykę. Zazwyczaj pierwsi zgarniają najwięcej.
Chcę Ci przez to powiedzieć, że te kilka miesięcy, które masz zamiar poświęcić na naukę nowego języka czy biblioteki, które będę przydatne i przyniosą korzyści tak na prawdę dopiero w dalekiej perspektywie lepiej żebyś poświęcił na wypuszczenie swojego pomysłu w świat. A co w przypadku kiedy nagle produkt okaże się bardzo popularny? Takie coś dzieje się bardzo rzadko. A jeszcze rzadszy jest przypadek kiedy stanie się to z dnia na dzień. Zwykle wraz ze zwiększającą się liczbą użytkowników będziesz miał czas migrować do nowych, szybszych, lepiej skalujących się technologii.
Jeśli nie wiąże Cię żadna umowa z jakąś firmą to nawet nic nie stoi na przeszkodzie żeby od razu po wypuszczeniu prototypu w dowolnej, znanej Ci technologii od razu zacząć przepisywać całość na inny język uwzględniając przy okazji uwagi jakie zaczną spływać od osób korzystających z tego co już im pokazałeś.
Inną kwestią jest to, że dobrze napisany program w PHP lub Ruby będzie dużo szybszy od analogicznego programu w C# lub Javie gdzie jakość kodu i konfiguracji będzie słaba. Im bardziej korporacyjny framework tym więcej rzeczy można zepsuć już przy konfiguracji środowiska. Pomijam tutaj sytuację kiedy ktoś zna od początku tą Javę czy C#, wtedy może od razu zacząć w nich pisać aplikację. Jednak w tym przypadku rzadziej pojawiają się pytania o wybór innej technologii.
Tak więc ogólnie rzecz ujmując uważam, że w większości przypadków nie ma kompletnie sensu zastanawianie się nad nauką nowego języka czy biblioteki tylko po to żeby napisać przeceniany przez nas pod względem przydatności projekt, który ma jakieś 0,0001% szans na odniesienie sukcesu. Jeśli uda Ci się trafić w rynek, będziesz miał coraz więcej użytkowników i mimo robienia magii z konfiguracją powoli będziesz widział problemy z wydajnością wtedy dopiero będzie moment kiedy przyda się ta „lepsza” technologia, jednak prawdopodobnie wtedy również będzie Cię stać żeby zatrudnić dodatkowe osoby do pomocy przy przenoszeniu aplikacji do nowego środowiska. Wcześniej, kiedy jesteś na początku kariery i projektu, najlepsza technologia to ta, którą znasz, i w której możesz zrobić coś co pokaże jak działa Twój pomysł.
Na koniec tylko dodam, że tekst trochę bardziej skupiał się na problemie projektów webowych, ale to dlatego, że są one teraz najpopularniejsze, a poza tym to w ich przypadku zwiększona ilość użytkowników najbardziej wpływa na wydajność.
Osobiście będąc niemal fanboyem Ruby on Rails ze względu na przystępność myślę, że gdybym teraz miał wybrać język którego będę się uczył, to byłby to JS z myślą o Node.js. Jakby nie było JS to najpopularniejszy język obecnie, nawet jeśli praca w Node.js nie wypali to doświadczenie JSowe jest cenione wszędzie, bo niezależnie od tego co jest na backendzie, czy to RoR, czy ASP.NET, czy jakiś framework PHP, bez JSa ani rusz. Patrząc na założenia ES6 które mają wejść w lato 2015r. w życie widać, że JS się rozwija w kierunku języków funkcyjnych, nareszcie nadgonili też z osadzaniem zmiennych stringów w vanilla ES6, więc wszystko zapowiada się ekstra :). Dobrym miejscem do zaczęcia jest http://www.nodeschool.io. Polecam zwłaszcza workshopper count-to-6 przedstawiający wszystkie nowe feature’y ES6 :).