Dla gościa z Javy Python jest anarchiczną zabawą, w której każdy może złapać klub i zacząć manipulować głową.
Dla faceta Python Java jest orwellowskiego wszechświat, w którym stale przykuty do czyimś zmniejsza widok tego, jak kleszcza wszechświata.
Prawda jest wszystkim, co możesz zrobić w jednym języku, możesz zrobić w drugim równie czysto. Jednak, jak wspomniałeś, w obu społecznościach istnieje istotna różnica co do tego, co oznacza czyste .
Sposób Java:
czysty system to taki, który robi to, co jest przeznaczone i nic więcej, nie pozwoli rozszerzeń ani modyfikacji, które są sprzeczne z charakterem zamierzonego celu i będzie próbował je egzekwować w jak największym stopniu za pośrednictwem kompilatora. Elastyczność uzyskuje się poprzez staranne wykonanie prostych interfejsów w ścisłych strukturach. W Javie piaskownica zawsze powinna być wyraźnie ograniczona, a przekroczenie ich spotkało się z szybkim sprzężeniem zwrotnym z kompilatora. Java zapewnia środki do statycznego definiowania struktur obiektów i tworzenia dynamicznych interakcji z ich wystąpień. Kiedy pracuję w Javie, staram się sprytnie tworzyć podstawowe elementy składowe w kierunku rozwiązania martwego mózgu. Przeważnie pracuję oddolnie, gdy mam już roboczą teorię, jak rozwiązać problem.
Java będzie produkować duże oprogramowanie, które może obejmować duże zespoły oraz zapewnia narzędzia i środki do kontrolowania stada. Jeśli pozostanie niezaznaczone, doprowadzi to do tego, że bardzo oderwane zespoły będą działać niezależnie w kierunku coraz bardziej niejasnego celu. W końcu każda drużyna staje się własną „raison d'être”, a system jako całość ulega rozcieńczeniu, prowadząc na manowce główny projekt. Mogą one prowadzić do skrajnych przekroczenia kosztów i ogromnych systemów oprogramowania, które wykonują i utrzymują słabo.
Prawie nigdy nie ma małego, szybkiego i łatwego sposobu na robienie rzeczy w Javie, ale IDE i oprzyrządowanie służą do wykonywania bolesnych zadań zaledwie kilkoma kliknięciami.
Sposób w języku Python:
czysty oznacza zwięzły i czytelny. Dobry system python został zaprojektowany tak, abyś mógł dostać się do jego serca i ujawnić jego najskrytsze sekrety w sposób, który można zrozumieć z kodu zamierzonego zastosowania i celu. Pozwoli również na zaprojektowanie własnego rozwiązania poprzez rozszerzenie i / lub zamknięcie oryginalnego projektu, tak aby działał dokładnie w twoim kierunku. Python zapewnia środki do tworzenia szablonów obiektów, z których można dynamicznie zmieniać instancję w celu dopasowania do potrzeb. W Pythonie mam tendencję do natychmiastowego rozwiązania problemu, a następnie rozłożenia kodu w logicznej strukturze, dzięki czemu ostateczne rozwiązanie pozostaje tak proste i czytelne, jak to tylko możliwe. W Pythonie mam tendencję do pracy z góry na dół i zarządzania złożonością wzrostu poprzez podejście dziel i zwyciężaj.
Zespoły Python będą miały tendencję do produkowania lekkich systemów i bardzo szybko dostarczą działające rozwiązanie. Będą raczej zwartą grupą działającą zamiennie na dowolnej części systemu, sprawdzając nawzajem swoje rozwiązania przy każdej okazji. Żywią się nawzajem, tworząc synergię, która jest dość ekscytująca. Tworzy to jednak zespoły, które trudno skalować do większych systemów i często uderzają w coś w rodzaju szklanego sufitu. Wprowadzenie nowych członków do zespołu pomoże, ale zajmie to trochę czasu, zanim wiedza rozprzestrzeni się na tyle, aby odczuć dodatkową wydajność. Zespół zostaje podzielony, a stały przegląd całego systemu osłabia się, podobnie jak atmosfera z pierwszych dni. Może to prowadzić do nadmiernie skomplikowanego kodu tego, co kiedyś było prostym problemem,
Jest prawie zawsze szybki i łatwy sposób robić rzeczy z Pythona, ale złożoność może być trudniejsze do utrzymania w ryzach gdy system osiągnie określony próg.
Krótko mówiąc, oba mają ciemną stronę i oba mają wyraźną siłę. Jednakże, popychając wzdłuż obu społeczności, przekonasz się, że siła jednej prowadzi do ciemnej strony drugiej i odwrotnie.
Stąd ożywione debaty na temat tego, który jest najlepszy.
Cóż, Python nie ma interfejsów, ma metaklasy i pozwala na pisanie kaczek. W Pythonie dostępne są listy, które są bardzo wydajne i nie istnieją w Javie. Java ma bogaty system typów z dużą ilością struktur danych, a Python ma tylko listy. Więc jeśli wykorzystujesz to, co ma Python, zamiast próbować odtworzyć to, co Java ma w Pythonie, prawdopodobnie piszesz kod w języku Python.
Ale jeśli chodzi o kod OO, istnieją pewne podstawy stylu, które nie powinny zmieniać się z języka na język: zawsze powinieneś starać się pisać kod, który jest Nieśmiały i SUCHY, niezależnie od tego, czy piszesz w Applescript, Python, Java lub C ++.
----Edytować----
Jak pedantycznie wskazuje @delnan, w rzeczywistości istnieje PIĘĆ typów danych złożonych zdefiniowanych przez Pythona na poziomie jądra (lista, dict, krotka, zestaw i zamrożony, zgodnie z moją kopią „Python w pigułce”). Chociaż jest to prawda, nie ma to istotnego znaczenia do tego, co próbuję zrobić: Python opiera się na listach jako podstawowej strukturze danych. Tak, możesz użyć listy jako stosu, ale możesz użyć dokładnie tej samej listy jako kolejki. A potem znowu stos.
Z drugiej strony Java ma jedną strukturę danych jądra (tablicę, zgodnie z „The Java Pocket Guide”), ale w powszechnym użyciu nie można wiele zrobić w Javie bez importowania kolekcji. Gdy to zrobisz, masz dostęp do „bogatej” (w tym sensie mam na myśli niezwykle złożoną) biblioteki typu, za pomocą której można uzyskać taką samą funkcjonalność, jak w przypadku listy Pythona.
Oczywiście oba języki mają klasy, a Java ma interfejsy, ale chociaż są to złożone typy danych, to tak naprawdę nie są strukturami danych w sensie podręcznikowym.
Jedną różnicą jest to, że nie można wstawić elementu z kolejki Java i nie można przekazać obiektu kolejki Java w miejscu, w którym oczekuje się listy połączonej z Javą. Być może przez „bogaty” rozumiem „sztywny”.
Aby wyjaśnić, co mam na myśli mówiąc „Python po prostu ma listy”, mam na myśli to, że możesz zrobić prawie wszystko, co musisz zrobić w Pythonie, co zrobiłbyś z kolekcjami Java przy użyciu typu Listy Pythonów. Ten pojedynczy typ działa w Javie bardzo wielu typów.
Co to oznacza dla programisty Python? Oznacza to, że możesz użyć typu Python List do napisania bardzo zwięzłego, bezpośredniego kodu bez użycia dodatkowych bibliotek - a zwięzłość (to jest cecha przekazywania większej wartości w mniejszej liczbie znaków) jest podstawową cechą kodu „Pythonic” .
źródło