Записки реликта - Ещё программистское [entries|archive|friends|userinfo]
Latimeria chalumnae

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

Ещё программистское [Aug. 13th, 2008|12:55 am]
Previous Entry Add to Memories Tell A Friend Next Entry
[Tags|, , ]

Сейчас довольно много пишу на С++/Qt4 и на Python/PyQt4, и вот что я заметил.

Скорость разработки на Python действительно значительно выше. Если ты неплохо знаком с используемой библиотекой (а я знаю Qt4 уже, скажем так… нормально), написать приложение на Питоне, десять раз переделать, оттестировать и переписать на C++, подглядывая в питоний код, может быть в разы быстрее, чем писать всё с самого начала на C++. Питон — действительно куда более приятный, лаконичный и выразительный язык, чем Кресты. Настолько, что можно простить ему несколько раздражающих мелочей типа не слишком красивого синтаксиса описания классов или недостаточно гибких технологий связывания модулей. Питон, вообще, занимает фантастическую нишу, из общих соображений такое вообще невозможно: "язык для работающих (в отличие от какого-нибудь PHP) и поддерживаемых (в отличие от того же Перла) наколеночных решений". (Да, пользуясь случаем, хочу ещё раз сказать спасибо ЖЖ-пользователю [info]haron@lj, который убедил-таки меня в том, что Питон рулит.)

Однако, как только что-то идёт не так (глюки/непонятки с архитектурой программы/необходимость осваивать незнакомые куски библиотеки), меня охватывает желание схватиться за C++, обычно непреодолимое. Интересно — почему?

Дело ли тут в статической типизации C++? Вообще в большей бюрократичности Крестов, заставляющей каждые пять минут останавливаться и думать? В том, что Qt4 прикручена к Питону всё же слегка через задницу? В тем, что C++ для меня привычнее (хотя на сознательном уровне Питон всё равно кажется читабельнее)? Во всплывающем всё же скрытом раздражении от бесконечных self и необходимости писать имя модуля перед именем класса?

Я пока не понял.
LinkОставить комментарий

Comments:
From:[info]sdfgh153.ru
Date:August 13th, 2008 - 06:26 am
(Link)
Лично меня питон напрягает своим вайт-спейс синтаксисом, ну и все непонятки, которые ты озвучил тоже имеют место быть.
Но, как известно, there is no silver bullet. Питону многое можно простить, если нет другого выбора. Если он есть, я бы питону предпочёл ruby, io или CommonLisp.
[User Picture]
From:[info]uri
Date:August 13th, 2008 - 10:07 am
(Link)
Я как раз тащусь от идеи сделать отступы элементом синтаксиса. На мой взгляд, это одна из причин хорошей читабельности питоновского кода.

При наличии неограниченного выбора я бы тоже, наверное, предпочёл Scheme или Erlang. Но ничего сопоставимого с Qt4 для них нет (на guile-gtk и guile-gnome я смотрел, это АдЪ).
[User Picture]
From:[info]beshenov
Date:August 13th, 2008 - 06:46 am
(Link)
и поддерживаемых (в отличие от того же Перла)

Можно прилично писать на Perl и с тем же успехом неприлично на Python.
[User Picture]
From:[info]uri
Date:August 13th, 2008 - 10:34 am
(Link)
С этим никто не спорит. Вопрос в усилиях, которые для этого нужно приложить.

Обратите внимание: я писал не о том, что на Перле нельзя писать поддерживаемые решения (это неправда, конечно), а о том, что наспех, "на коленке" сделанное на Перле решение обычно трудно поддерживать. Будете спорить?

Менее убедительная (и труднее проверяемая) часть моего утверждения — что для Питона это скорее не так. С одной стороны, сам мой пост был как раз попыткой поговорить о границах поддерживаемости наспех сляпанных питоновских программ. С другой, код на Питоне, написанный кое-как в два часа ночи полгода назад, гораздо проще понимать, чем написанный в аналогичных обстоятельствах код на C++, это проверенный факт. Кроме того, у [info]zmey с коллегами есть очень положительный опыт использования "быстро и грязно" написанной на Python/SimPy программы в имитационном моделировании: модель на SimPy собирались использовать как прототип для модели на C++/MPI, но в итоге все нужные результаты получили уже на прототипе, и код на C++ писать не стали вообще.
[User Picture]
From:[info]beshenov
Date:August 13th, 2008 - 10:39 am
(Link)
Ну, что планируется поддерживать, то и наспех не делается.
[User Picture]
From:[info]uri
Date:August 14th, 2008 - 12:11 am
(Link)
Давайте переформулируем это так: то, что делается наспех, обычно не планируется поддерживать. Но случаи, они, как известно, того… разные бывают.

Ежу понятно, что если у вас есть ТЗ, диаграмма классов в UML, блок-схемы всех нетривиальных алгоритмов и дофига времени, то более или менее пофигу, на чём писать. Из соображений производительности обычно оказывается, что лучше всего на C++. Но часто на разработку по waterfall model нет ни ресурсов, ни времени (не говоря уже о том, что сейчас многие считают, что сама waterfall model — ересь).

Ну, представим себе, что вам нужно работающее решение, с крайним сроком сдачи, как обычно, вчера. Потом вы его пару раз допиливаете в том же режиме. Потом вы забываете об этом коде на полгода-год, а потом он вам нужен ещё раз, причём в виде, пригодном для дописывания и использования другими людьми. В нашей фирме такое происходит постоянно, например.

Так вот, в таких ситуациях, по моим наблюдениям, Питон показывает себя гораздо лучше любого другого известного мне популярного языка.
[User Picture]
From:[info]beshenov
Date:August 14th, 2008 - 07:01 am
(Link)
В свое время мне очень понравилась Java, как «дисциплинирующий язык».
В зависимости от ситуации, я бы вместо Qt4 использовал AWT/Swing.

Python для меня был уже не первым «новым и замечательным языком,
который стоит выучить», в этом плане «страшней» только Ruby :-)

Не про Python, но про любителей всё на нем переписывать:
http://lj.rossia.org/users/beshenov/35641.html
[User Picture]
From:[info]uri
Date:August 14th, 2008 - 09:56 am
(Link)
В свое время мне очень понравилась Java, как «дисциплинирующий язык».

Дисциплинирующий — очень правильное слово. Когда надо силами двухсот индусов получить вменяемый код, другого выбора нет (С#, возможно, разве что). Но писать на Java быстро и одному невозможно: когда на каждый чих заводится новый класс, волей-неволей приходится сначала думать над архитектурой и пр. Иногда это раздражает.

В зависимости от ситуации, я бы вместо Qt4 использовал AWT/Swing.

Swing довольно похож на GUI-часть Qt4: тот же MVC, много чего ещё. Даже названия классов похожи. В общем, тоже ничего так библиотечка. Но с Java любая ошибка проектирования отливается в изрядный геморрой. На C++ тоже, но исходный пост как раз и был в том числе про средство обхода этих граблей: Python/PyQt4 для быстрого прототипирования, C++ для окончательной реализации. На удивление удобно.

Не про Python, но про любителей всё на нем переписывать

Ну, с Лиспом, по крайней мере в инкарнации Scheme (CL я не знаю и говорить о нём не возьмусь), Питон как раз сравнивать невыгодно: лисповский синтаксис, на самом деле, более читабельный (потому что более простой и последовательный), и Лисп более гибок, чем Питон. Питоновская lambda выгдядит пародией на схемную, call/cc в Питоне просто нет (есть, правда, yield, позволяющий реализовать часть фокусов с call/cc; кроме того, call/cc, кстати, есть в Ruby).

Но под Лисп нет приличной библиотеки для рисования гуя, например. По крайней мере, я такой не знаю.