Для парня из Java Python - это анархическая игровая площадка, где любой может захватить клуб и начать наносить вред своей голове.
Для парня из Python Java - это оруэлловская вселенная, в которой вы постоянно скованы чьим-то чужим взглядом на то, как работает вселенная.
Правда в том, что вы можете делать на одном языке, вы можете делать на другом так же чисто. Однако, как вы упомянули, в обоих сообществах есть важное различие в том, что такое чистый .
Путь Java:
чистая система - это система, которая выполняет то, для чего предназначена, и ничего больше, она не допускает расширений или модификаций, которые противоречат природе предполагаемой цели, и будет пытаться применять их в максимально возможной степени через компилятор. Гибкость достигается за счет тщательного создания простых интерфейсов внутри строгих структур. В Java песочница всегда должна быть четко ограничена, и превышение этих параметров встречается с быстрой обратной связью компилятора. Java предоставляет средства для статического определения структур объектов и создания динамических взаимодействий из их экземпляров. Когда я работаю на Java, я стараюсь умело создавать базовые строительные блоки для решения «мертвого мозга». Я в основном работаю снизу вверх, когда у меня есть рабочая теория о том, как решить проблему.
Java будет стремиться производить большое программное обеспечение, которое может охватывать большие команды и предоставлять инструменты и средства для контроля за стадом. Если его не остановить, это приведет к тому, что очень отдельные команды будут работать независимо друг от друга для достижения еще более неясной цели. В конце концов, каждая команда становится своим собственным «смыслом существования», и система в целом растворяется, сбивая с толку основной проект. Это может привести к чрезмерному перерасходу средств и огромным программным системам, которые плохо работают и обслуживаются.
В Java почти никогда не бывает простого и быстрого способа сделать что-либо, но IDE и инструментарий созданы для выполнения болезненных задач всего за несколько кликов.
Путь Python:
Чистый означает краткий и легко читаемый. Хорошая система Python разработана таким образом, чтобы вы могли понять ее суть и раскрыть ее внутренние секреты таким образом, чтобы вы могли понять из кода предполагаемое использование и цель этого. Это также позволит вам разработать собственное решение, расширяя и / или инкапсулируя оригинальный дизайн так, чтобы он шел точно в вашем направлении. Python предоставляет средства для создания шаблонов объектов, из которых вы можете динамически изменять экземпляр в соответствии с имеющимися потребностями. В Python я стремлюсь решить проблему сразу, а затем распространять код в логической структуре так, чтобы окончательное решение оставалось настолько простым и читабельным, насколько это возможно. В Python я склонен работать сверху вниз и управлять сложностью увеличения с помощью подхода «разделяй и властвуй».
Команды Python будут стремиться создавать легкие системы и очень быстро предоставлять работающее решение. Они, как правило, будут сплоченной связкой, работающей взаимозаменяемо в любой части системы, проверяя решения друг друга при каждой возможности, которую они получают. Они питаются друг другом, создавая синергию, которая очень волнует. Однако это создает команды, которые трудно масштабировать до более крупных систем и часто попадают в своего рода стеклянный потолок. Введение новых членов в команду поможет, но потребуется некоторое время, чтобы знания распространились настолько, чтобы можно было почувствовать дополнительную производительность. Затем команда разделяется, и постоянный обзор всей системы разбавляется, как и атмосфера первых дней. Это может привести к чрезмерно запутанному коду, который когда-то был простой проблемой,
Почти всегда есть быстрый и простой способ сделать что-то с Python, но сложность может быть сложнее контролировать, когда система достигает определенного порога.
Короче говоря, у обоих есть темная сторона, и у обоих есть ясная сила. Однако, подталкивая к обоим сообществам, вы обнаружите, что сила одного ведет к темной стороне другого и наоборот.
Отсюда горячие споры о том, какой из них лучше.
Ну, у Python нет интерфейсов, есть метаклассы, и он позволяет вводить утки. У Python есть списочные представления, которые очень мощные и не существуют в Java. У Java есть система с богатым типом данных с большим количеством структур данных, а у Python просто есть списки. Поэтому, если вы используете то, что есть в Python, вместо того, чтобы пытаться воссоздать то, что есть в Java в Python, вы, вероятно, пишете код Pythonic.
Но что касается ОО-кода, существуют определенные основы стиля, которые не должны меняться от языка к языку: вы всегда должны стремиться писать код Shy и DRY, пишете ли вы в Applescript, Python, Java или C ++.
----Редактировать----
Как педантично указывает @delnan, на самом деле есть пять составных типов данных, определенных Python на уровне ядра (list, dict, tuple, set и frozenset, согласно моей копии «Python in a Nutshell»). Хотя это действительно так, на самом деле это не имеет отношения к вопросу, который я пытаюсь сформулировать: Python использует списки как важную структуру данных. Да, вы МОЖЕТЕ использовать список в качестве стека, но вы можете использовать точно такой же список в качестве очереди. А потом снова стек
Java, с другой стороны, имеет одну структуру данных ядра (Array, в соответствии с «Руководством по Java Pocket»), но в общем случае вы не сможете добиться многого в Java без импорта коллекций. Как только вы это сделаете, у вас будет доступ в «богатую» (в этом смысле я имею в виду чрезвычайно сложную) библиотеку типов, с помощью которой можно получить те же функциональные возможности, что и в списке Python.
Конечно, у обоих языков есть классы, а у Java - интерфейсы, но, хотя они являются составными типами данных, на самом деле они не являются структурами данных в смысле учебника.
Единственное отличие состоит в том, что вы не можете извлечь элемент из Java-очереди, и вы не можете передать объект Java-очереди в другое место, которое ожидает Java Linked List. Так что, возможно, под «богатыми» я имею в виду «жесткие».
Итак, чтобы объяснить, что я имею в виду, говоря «у Python просто есть списки», я имею в виду, что вы можете делать практически все, что вам нужно делать в Python, что вы делаете с коллекциями Java, используя тип списка Pythons. Этот единственный тип выполняет работу множества типов в Java.
Что это значит для программиста на Python? Это означает, что вы можете использовать тип списка Python для написания очень содержательного, прямого кода без использования дополнительных библиотек - и содержательность (то есть характеристика передачи большего значения в меньшем количестве символов) является основной характеристикой кода «Pythonic» ,
источник