Programowałem aplikacje Java przez 10 lat, zanim przeszedłem na Python, ponad 4 lata temu. Wydaje mi się, że jestem znacznie bardziej produktywny przy użyciu Pythona i mogę zrobić znacznie więcej w krótszym czasie, i szczerze mówiąc, jestem znacznie szczęśliwszy, gdy rozwijam się w Pythonie. Oto niektóre z powodów, dla których uważam, że Python jest lepszy niż Java w oparciu o moje osobiste doświadczenia.
Frameworki internetowe:
Kiedy po raz pierwszy zacząłem programować aplikacje internetowe w Javie, Struts właśnie wyszło i nie było świetne, ale było najlepszą dostępną rzeczą. Po drodze stworzyłem kilka aplikacji Struts i kilka innych. Ilekroć pojawił się nowy framework (Tapestry, Wicket, GWT, stripe, grails, AppFuse, Play, RichFaces, Spring itp.), Wypróbowałem go i sprawdziłem, czy był lepszy, a większość razy była tylko trochę lepsza , a czasem wcale nie lepiej. Muszę powiedzieć, że ramy gry to krok we właściwym kierunku.
Nie zawiera baterii:
Jedną z najbardziej irytujących części Javy był fakt, że większość używanych bibliotek nie była zawarta w samej Javie, trzeba było dołączyć mnóstwo bibliotek stron trzecich z miejsc takich jak apache commons. Jeśli użyjesz czegoś takiego jak hibernacja z jakąkolwiek inną dużą biblioteką, skończysz w piekle zależnym od Jar, gdzie hibernacja potrzebuje jednej wersji słoika, a coś innego potrzebuje innej wersji. Jeśli załadujesz pliki jar w niewłaściwej kolejności, nie będziesz miał szczęścia. Musisz polegać na narzędziach takich jak maven i bluszcz, aby zarządzać swoimi zależnościami, a to po prostu wprowadza więcej zależności do twojego projektu, co powoduje, że projekty są ogromne. Miałem jakieś pliki wojenne 100 MB + pliki wojenne dla najprostszych aplikacji internetowych.
Zbyt wiele opcji:
Z jakiegoś powodu wydaje się, że jest zbyt wiele różnych sposobów na zrobienie tego samego w Javie. Istnieje ponad 38 różnych frameworków internetowych dla java według wikipedii ( http://en.wikipedia.org/wiki/Comparison_of_web_application_frameworks#Java ) i 23 różnych ORM ( http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software# Java ), żeby wymienić tylko kilka przykładów. Jeśli spojrzysz na inne języki, mają one bardziej rozsądną liczbę. Niektórzy uważają, że posiadanie wielu opcji jest dobrą rzeczą, ale nie prowadzi to do marnowania wysiłku w społeczności programistów, wszyscy odkrywają to samo koło, a jeśli jesteś nową osobą w języku, który znasz zbyt wiele opcji do wyboru.
Serwery aplikacji:
Aplikacje sieciowe Java są naprawdę ciężkie i wymagają do działania dużej ilości zasobów. Są szczególnie głodni pamięci. Jak każde oprogramowanie, można je dostroić, aby zmniejszyć zużycie zasobów, ale w porównaniu z innymi językami ich konfiguracja po wyjęciu z pudełka jest okropna. W przeszłości korzystałem z weblogic, websphere, Jboss, tomcat i jetty. Użyłem tylko pierwszych trzech, gdy byłem zmuszony do korzystania z EJB, ale nawet jeśli nie używasz EJB, były to duże serwery aplikacji i czasami trudno je skonfigurować i uruchomić poprawnie. Tomcat i Jetty są znacznie lepsze i łatwiejsze do skonfigurowania, ale nadal są świnią zasobów.
Hosting aplikacji:
Jeśli nie prowadzisz własnego serwera, naprawdę trudno jest znaleźć hosting współdzielony dla aplikacji Java w rozsądnej cenie. Głównym powodem jest to, że aplikacje Java wymagają znacznie więcej pamięci w porównaniu do innych języków, więc dostawca hostingu współdzielonego nie ma sensu wydawać swojej cennej pamięci RAM na prowadzenie witryny Java, gdy może uruchomić 5 witryn php w tym samym miejscu. Oznacza to, że jest mniej dostawców oferujących hosting Java, co z kolei oznacza wyższe koszty prowadzenia Twojej witryny.
Czas rozwoju:
Kiedy rozwijałem się w Javie, znalazłem się znacznie wolniej niż to, co mogę zrobić w Pythonie. Musiałbym dokonać zmiany, skompilować, ponownie wdrożyć, a następnie przetestować, a to spowalnia proces iteracyjny. Wiem, że istnieją sposoby na przyspieszenie tego procesu, ale nawet w najlepszym wypadku czułem się znacznie wolniej niż to, co mogę zrobić w Pythonie.
Istnieje również o wiele mniej kodu do zrobienia tego samego w Pythonie, więc spędzam też mniej czasu na rozwijaniu kodu.
Java wydaje się zbyt skomplikowana w wielu częściach. Wiele interfejsów API i interfejsów jest po prostu skomplikowanym sposobem na to, co chcesz zrobić. Wszyscy i ich brat uważają się za architekta Java, co powoduje, że powstają duże, skomplikowane systemy, które są trudne w użyciu i rozwijaniu.
IDE:
Kiedy rozwijałem się w Javie, czułem utknięcie w IDE, zgubiłem się bez niego. IntelliJ to najlepsze IDE na rynku i ciężko było przejść na Python, ponieważ nie było czegoś podobnego do Pythona. Więc zamiast IDE, użyłem tylko textmate, który jest zwykłym edytorem tekstu. Na początku było ciężko, ale ponieważ był to tylko edytor tekstowy, była to naprawdę szybka i responsywna aplikacja. Mógłbym otworzyć cały projekt w ciągu kilku sekund, podczas gdy gdy chcę otworzyć projekt w IDE, może to zająć minutę lub dłużej, na maszynie z dużą ilością pamięci RAM. Twórcy IntelliJ wyszli z edytorem Pythona o nazwie pycharm, kupiłem go, gdy pojawił się po raz pierwszy, i jest świetny. Ale zdałem sobie sprawę, że nie potrzebuję IDE dla Pythona, nie mam nic przeciwko edytorowi tekstów. Kiedy wracam do pracy nad aplikacjami Java, które muszę robić od czasu do czasu, staram się korzystać z edytora tekstu, ale nie do końca to opanowałem. Osobiście bardziej potrzebuję IDE dla Javy, ponieważ jeśli coś popsuję, kompilacja i ponowne wdrożenie zajmuje więcej czasu, co spowalnia mnie.
ORM:
Kiedy po raz pierwszy zacząłem używać Hibernacji jako ORM, myślałem, że to świetnie, że ma problemy i nie było idealne, ale było lepsze niż to, co robiłem wcześniej. Byłem z tego zadowolony, dopóki nie zrobiłem aplikacji z ORM Django w projekcie Pythona, i to otworzyło mi oczy, tak powinien działać ORM. Po tym projekcie wróciłem do hibernacji i poczułem rozczarowanie i tęskniłem za powrotem do ORM Django. Innym świetnym ORM Pythona jest sqlalchemy, który jest podobny do ORM Django, ale trochę inny. Mam ograniczone doświadczenie z ORM ROR, ale z tego co pamiętam, było również całkiem dobre.
Szablony:
Internetowe systemy szablonów w Javie nie są tak dobre i myślę, że wypróbowałem je wszystkie (kafelki, freemarker, prędkość itp.). Większość z nich oferuje jedynie podstawową funkcjonalność i jest uciążliwa w pracy. Po stronie Pythona moimi dwoma ulubionymi są szablony Django i Jinja2, mają wszystko, czego mógłbym potrzebować w silniku szablonów i są naprawdę łatwe w użyciu.