Мне, будучи Java-разработчиком (а теперь уже и .Net) грех не провести хоть какое-то сравнение Java'ы и питона (попутно коснувшись и других языков). Да, знаю, что таких сравнений пруд пруди на просторах интернета. И тем не менее... Тут я хочу выйти немного в другую плоскость, отчасти философскую. Я не претендую на объективность, более того, вероятно, мои мысли покажутся вам довольно спорными.
Питон - язык с идеологией, есть особая культура написания программ на нем. О программе, написанной "правильно", по канонам питона говорят, что она pythonic, соответствует python way. Для непосвященных скажу, что есть своего рода Дзен Питона - сводка негласных правил правильного кодирования на питоне. Чтоб доказать, что питон - язык с идеологией, разработчики даже встроили эти правила в качестве стандартного модуля языка, вот пример работы:
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
Впрочем, я слукавил, правила эти вполне даже гласные, и они создают ту самую самобытность языка, за которую некоторые и изучают новые языки. Правила эти по сути были заложены в язык его создателем и главным идеологом, Гвидо ван Россумом. Он недаром получил статус BDFL (Benevolent dictator for life, Великодушный Пожизненный Диктатор).
Но позвольте высказать одну крамольную мысль: Java лучше соответствует этим правилам, нежели сам Питон. И вот почему.
Возьмем, например пресловутое
"There should be one-- and preferably only one --obvious way to do it."
но многим известно что питон - очень гибкий язык и на практике путей довольно таки много (не так мого, правда, как в перле =). Вот хотя бы почитайте рассуждения самого Россума об изысканиях при оптимизации.
Язык я бы оценивал по отношению двух параметров:
- Средствам программирования, реализованным в языке (предоставляемые языком) (ООП, функциональный стиль, исключения, замыкания, продолжения, система модулей)
- Языковые конструкции, синтаксический сахар, которыми достигается функциональность пункта 1.
А, например, перл совершенно не укладывается в эти рамки, у него достаточно посредственное ООП, исключения, при этом язык перенасыщен синтаксическими конструкциями настолько что позволяет писать даже такой, такой и такой код, ну скажите, о какой поддерживаемости кода тут может идти речь). Конечно мне возразят, что существуют стандарты кодирования на перл, в фирмах используются свои стандарты и т.п. Но в одном месте я слышал мысль что если что-то включено по умолчанию, то, хотя и присутствует очень простая опция сделать по-другому, но 90% пользователей (программистов) будут делать именно как по умолчанию. Применительно к перлу, слышал мысль, что большинство кода на CPAN написано хоть и не так как в вышеприведенных ссылках, но мягко говоря не по стандартам. Все из-за той-самой никому не нужной гибкости. Но ведь это гибкость из пункта 2, которая идет с минусом! Напротив, Java тем хороша, что она очень однородна по части синтаксиса. Вершиной идеала тут выступает, конечно смоллтолк. О минималистичности синтаксиса говорит тот факт, что в языке всего 6 ключевых слов и напрочь отсутствуют управляющие конструкции (if, while, for). Вместо этого там присутствуют методы ifTrue:, whileTrue:, each:, которые в сочетании с блоками дают такую функциональность, которой джава с питоном и руби только завидуют и слюнки пускают (продолжения, особая модель "откатываемых" исключений, чудесные возможности интроспекции кода и чудовищная гибкость). Впрочем, признаюсь, не знаю, куда отнести лисп, он вроде еще более однородный, довольно мощный, но при этом как по мне, у него плохо с читаемостью кода.
Питону, же, в отличие от того же руби который взял многое от смоллтолка, не хватает гибкости первого рода. Например, мне, в динамическом языке хотелось бы видеть
- Расширяемые базовые классы (Как в Руби, Смоллтолк, javascript(!!!))
- Любое выражение возвращает значение (руби) типа
a = if 2>5 then "more" else "less" end - Хотелось бы видеть продолжения, легковесные нити, но это уже больше касается не синтаксического дизайна языка, а его внутреннего устройства, его виртуальной машины.
По пункту 2. Тут мне возразят, дескать, в питоне 2.5 таки наконец ввели конструкцию условного присваивания.
a = "more" if 2>5 else "less"
Вот именно! В язык ввели сущность вида 2 из-за недостаточной гибкости по пункту 1. Вот в этом и проблема. В частности, здесь и видна обратная сторона медали синтаксиса основанного на отступах (а не там где склонны видеть некоторые). Тут же и проблема немногострочной ламбды, для нее просто не смогли придумать подходящего синтаксиса!
Ruby кажется (вернее мог бы показаться, если б я только выбирал, какой динамический язык учить) более интересным, чем питон по нескольким причинам: удовлетворяет пунктам 1) и 2), менее консервативен чем Python, а потому более инновационен, более целостный (нет различий между базовыми типами и классами, которые , впрочем в Питоне 2.5 наконец тоже сведены на нет, нет функций - только методы). Единственное, мне не нравится его синтаксис, и кроме того, в нем нет чего-то концептуально нового по сравнению со смоллтолком, а продолжения, и вообще в 1.9 хотят убрать.
Java vs Python. Опять же трудно (и немножко глупо) сравнивать, это довольно разные языки хотя и для довольно общих целей. Взять хотя-бы пресловутый вопрос типизации. Что дает отстутствие статической типизации питону? - гибкость, легкость переделки программы "на коленке". Что дает ее присутствие Java'е - как это не парадоксально, опять же гибкость (правда, за счет довольно развитых IDE, типа Intellij Idea, способности которых - рефакторинг, генерация кода, навигация, удобства отладки, возможны исключительно благодаря типизируемой природе языка). Второе - скорость выполнения программ - очевидно, что статически-типизированный код легче оптимизировать для выполнения. И третье - конечно, легкость поддержки и совместной разработки кода, поскольку целостность и непротиворечивость кода отслеживается на уровне самого языка (той же типизацией, модификаторами доступа, интерфейсами), еще можно упомянуть четвертое - надежность - в Java приложении программист обязан обработать все (!) исключения, иначе программа попросту не скомпилируется (точнее не все, а все не RuntimeException). В питоне обычно процесс разработки может представлять следующую картину - написал код, запустил, получил исключение, обработал его в коде, снова запустил, и т.д.
Java - как это не странно - академический язык. Он очень хорошо подходит и для обучения, поскольку прекрасно реализует концепции программирования. Мне кажется, он "очень правильный". "It just feels right". Его правильность заключается в логичности, стройности, полноте, консервативности, очень полной и правильной поддержке ООП. На джаву прекрасно ложатся паттерны программирования.
Да, на счет ООП. В питоне, я бы охарактеризовал его двумя словами: оно есть. Чего в нем нет: модификаторов доступа (то что возможно с помощью префиксования имен двойным подчеркивание - не серьезно, и не соотвествует Дзену Питона). Тем самым нарушается один из принципов ООП - инкапсуляция. Там отсутствуют интерфейсы, абстрактные классы, хотя, понимаю, что это фича типизируемых языков, однако они выступают очень полезными при построении архитектуры проекта.
Коснемся модульной структуры. Java имеет очень мощную модульную структуру. Стандартно, библиотеки распространяются в виде jar-архивов. Питоновские eggs (яйца) пока не так распространены. Даже в Руби быстро смекнули что модули это хорошо и gems там "из коробки". Если спуститься на уровень ниже, то у джавы прекрасные возможности по организации и проектирования кода в пакеты, классы, внутренние классы, внутренние статические, локальные классы, final классы, абстрактные классы и интерфейсы.
Единственное, что сложнее с Java'ой - это конечно, у нее выше порог вхождения. Чтоб начать комфортно программировать, нужно как минимум установить адекватную среду разработки (разработка "в блокноте" с джавой - пропащее и бездарное дело), создать проект, настроить библиотеки... собственно и все. Плюс, по мере необходимости, конечно, придется ориентироваться в целом ряде сопутствующих J-технологий и фреймворков (J2(S|M|E)E, JSP, EJB, JMX, JNDI, JAAS, Ant, JUnit).
На самом деле все приведенные аргумены, довольно субъективны. Конкретно мне Джава польше соответствует по духу, она позволяет все "разложить по полочкам". В ней удобнее проектировать. Думаю все сказанное в той или иной мере подходит и к C#.
Впрочем, в повседневной работе я использую Python тоже. Он прекасно дополняет джаву. Распарсить логи, сгенерировать тестовые данные или sql-скрипт для тестового заполнения базы, админские скрипты для работы с файлами на нем - одно удовольствие. Мне кажется, что комбинация статический + динамический язык (не важно, что вы изберете в качестве первого и второго) довольно обоснована и полезна.
49 коммент.:
Gostei muito desse post e seu blog é muito interessante, vou passar por aqui sempre =) Depois dá uma passada lá no meu site, que é sobre o CresceNet, espero que goste. O endereço dele é http://www.provedorcrescenet.com . Um abraço.
>>> print 2 > 3 and 'true' or 'false'
false
http://dirtsimple.org/2004/12/python-is-not-java.html
http://dirtsimple.org/2004/12/java-is-not-python-either.html
Hello. This post is likeable, and your blog is very interesting, congratulations :-). I will add in my blogroll =). If possible gives a last there on my blog, it is about the Notebook, I hope you enjoy. The address is http://notebooks-brasil.blogspot.com. A hug.
"но многим известно что питон - очень гибкий язык и на практике путей довольно таки много (не так мого, правда, как в перле =)
Who knows where to download XRumer 5.0 Palladium?
Help, please. All recommend this program to effectively advertise on the Internet, this is the best program!
Доброго времен суток,
Самая стабильная [url=http://popplers.ru/]партнерская программа[/url] [b]Popplers.ru[/b] предлагает Вам сотрудничество на выгодных условиях. Мы покупаем ваш ру трафик по выгодным ценам. Владельцам сайтов, вебмагазинов и веб мастерам мы предоставляем выгодные условия, отзывчивую поддержку и проффесиональный подход в нелегком бизнесе рунета.
отличная возможность быстро заработать, выгодная рефферальная программа, направьте ваш ру трафик в нужное русло, в русло прибыли которое принесет вам [url=http://popplers.ru/]Партнерка[/url] [b]Popplers.ru[/b] . Вывод средств в WebMoney или PayPal, возможность срочных выплат в любой день недели, личный подход к каждому партнеру.
Наши тарифы за 1000 уников:
DoorWays - 6у.е.
Popunder - 5у.е.
CJ - 5 у.е.
Clickunder - 4 у.е.
Ждем Вас в нашей программе!
ICQ: 498994074
Привет! С удовольствием почитал Ваш блог. Хочу также поздравить Вас и всех читателей этого блога с новым 2010 годом. Удачи всем, новых жизненных побед и исполнения всех ваших замыслов. :)
indian lesbians porn lesbian asslicking videos jannea jameson lesbian licking female celebrities that are lesbians free ten minute videos lesbian asian lesbian orgy analingus lesbian pics
с празником!
Уважаемые читатели. С Рождеством христовым хочется вас поздравить. Админу сайта отдельное пожелание-побольше читателей на блоге, креативных интересных статей и всего всего всего :)
А мне пост понрвился. Добавил в букмарки. (не спам)
Хороший сайт. Так держать!!!
А как на блоге можно заработать? У меня есть блог о игре на гитаре. Правда там народа в день не много ходит...человек 20. Можно с него что то заработать?
Хорошо написал. Так держать!!! :)
+1 поддерживаю
Молодец, хороший пост.
А у Вас талант писателя прям :)
А мне блог понравился
Админ, а много блог отнимает времени у тебя?
Привет!
Извиняюсь, что не в нужном разделе объявление запостил...
Кто знает, где можно приобрести золотые телефонные номера? Особо нужны номера Билайн, Мегафон и MTS.
Конечно, как вариант, эти номера можно посмотреть в офисах самих сотовых операторов. Но, наверное, есть множество других мест, где можно найти красивые номера.
Буду признателен за рекомендацию.
Данный блог я посвятил описанию языка MFC. Собрав наиполныейший обем информации
по тому как именно надо программирвать на данном языке я воплотил это в данный блог.
Задаем вопросы в разделе Контакты. Удачи!
Данный блог я посвятил описанию языка MFC. Собрав наиполныейший обем информации
по тому как именно надо программирвать на данном языке я воплотил это в данный блог.
Задаем вопросы в разделе Контакты. Удачи!
Данный блог я посвятил описанию языка MFC. Собрав наиполныейший обем информации
по тому как именно надо программирвать на данном языке я воплотил это в данный блог.
Задаем вопросы в разделе Контакты. Удачи!
Данный блог я посвятил описанию языка MFC. Собрав наиполныейший обем информации
по тому как именно надо программирвать на данном языке я воплотил это в данный блог.
Задаем вопросы в разделе Контакты. Удачи!
Данный блог я посвятил описанию языка MFC. Собрав наиполныейший обем информации
по тому как именно надо программирвать на данном языке я воплотил это в данный блог.
Задаем вопросы в разделе Контакты. Удачи!
Данный блог я посвятил описанию языка MFC. Собрав наиполныейший обем информации
по тому как именно надо программирвать на данном языке я воплотил это в данный блог.
Задаем вопросы в разделе Контакты. Удачи!
Данный блог я посвятил описанию языка MFC. Собрав наиполныейший обем информации
по тому как именно надо программирвать на данном языке я воплотил это в данный блог.
Задаем вопросы в разделе Контакты. Удачи!
Данный блог я посвятил описанию языка MFC. Собрав наиполныейший обем информации
по тому как именно надо программирвать на данном языке я воплотил это в данный блог.
Задаем вопросы в разделе Контакты. Удачи!
Данный блог я посвятил описанию языка MFC. Собрав наиполныейший обем информации
по тому как именно надо программирвать на данном языке я воплотил это в данный блог.
Задаем вопросы в разделе Контакты. Удачи!
Данный блог я посвятил описанию языка MFC. Собрав наиполныейший обем информации
по тому как именно надо программирвать на данном языке я воплотил это в данный блог.
Задаем вопросы в разделе Контакты. Удачи!
Данный блог я посвятил описанию языка MFC. Собрав наиполныейший обем информации
по тому как именно надо программирвать на данном языке я воплотил это в данный блог.
Задаем вопросы в разделе Контакты. Удачи!
Данный блог я посвятил описанию языка MFC. Собрав наиполныейший обем информации
по тому как именно надо программирвать на данном языке я воплотил это в данный блог.
Задаем вопросы в разделе Контакты. Удачи!
Не очень люблю такие тексты %:(
В Вашей RSS нельзя получать полные тексты записей, что ли?
Логотип мне нравится:)
У Вас долго загружается блог - видимо, хостинг плоховат
Об этом уже писал кто-то из моих ЖЖ-френдов :(
Прошу прощения за оффтопик.
Вы продаете сквозные ссылки с сайта? Если да, свяжитесь со мной, плз!
На словах ты Лев Толстой, а не деле ... простой!
На словах ты Лев Толстой, а не деле ... простой!
На словах ты Лев Толстой, а не деле ... простой!
А сегодня день архивного работника. У вас на сайте есть "Архив"? Можете праздновать! :))
У нас в жж за такой пост бы закидали какашками в каментах:)
У нас в жж за такой пост бы закидали какашками в каментах:)
Подскажите, а у вас сквозную ссылку купить можно? Если да, сообщите цену на мыло, пожалуйста?
http://lumerkoz.edu Where it is possible to buy the, http://www.comicspace.com/celexa/ binyes meakins http://www.comicspace.com/adalat/ manlius http://rc8forum.com/members/Buy-Atenolol.aspx hallenjoy vinay http://soundcloud.com/effexor versailles http://barborazychova.com/members/Buy-Nizoral.aspx tecnicas admittedto
Подскажите, а у вас сквозную ссылку купить можно? Если да, сообщите цену на мыло, пожалуйста?
коммуникации
strtelecom.ru
Отправить комментарий