Python и его синтаксис

В течении уже года разнаботки на ЯП Python я так и н смог привыкнуть к его синтаксису. Сам язык вроде как и не плохой, но ! отсутсвие маркеров начала и конца блоков кода и использование вместо этого пробелов- это жесть, иногда эта экономия лишней строки кода приносит разработчикам 2 мешка головной боли...

Предположим в чужом питоновском коде indenting строк теряется и мы получаем не выровненый код. (Не нужно рассказывать, что такого не бывает, потому что этого не может быть никогда и т.д. Порстой пример- если код присылают по скайпу или копируем с какой то html страницы).
Так вот! в это случае восстановить питоновский код не возможно, в отличаи от тех языков, где есть явные маркеры блоков кода ({} или begin/end).

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn

Найкращі коментарі пропустити

Слишком толсто.
Алсо, есть масса сервисов с помощью которых можно расшарить код. Зачем создавать себе лишнюю головную боль? Не нравится питон, не нравится его синтаксис — пишите на чем-то другом.

Во всем есть положительные и отрицательные стороны. Python — это как раз тот случай, когда плюсы существенно перевешивают минусы. Если в этом языке люди спорят по поводу отступов, то просто отлично, что это единсвенное его свойство, вызывающее неприятие у пользователей.

А если по теме (не холиварить, а решить проблему), то -> pastebin.com

за рік роботи на досить великому python-проекті (на разі повернувся до Java) залишились лише позитивні спогади! звичайно спочатку шпортався об відступи таб/пробіл та віндові/лінуксові переноси рядків, так як з попередніми мовами таких проблем не було, але до всього адаптувався (наприклад PyCharm нормально підсвічує відступи лініями) і побачив, що переваг такого стилю значно більше ніж недоліків

Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

а мне во всех этих ООП языках не понятна функция «self/this»

В с++ это не функция, а специальный/скрытый параметр метода класса.

Имелась в виду функция такого слова, я полагаю. И тут сложно прочитать как-то иначе.

Кстати, меня это уже заинтересовало:) Что именно может быть непонятно в функции слова this (self)?

Вот это: «Display d = Display.getDisplay(this);» Что тут делает «this» в параметрах метода?

Передаёт указатель на объект, у которого вызван текущий метод. А что тут может быть непонятного? К кому именно относится этот this?
Это я говорю, предполагая C++ или Java, судя по синтаксису.

1) непонятно почему и зачем в методе, в качестве параметра употребляется ссылка на на объект? Иногда встречал я что и сам объект пишут в скобках. 2) Да и зачем употребляют в параметрах объект, там же цифры пишут?

Да и зачем употребляют в параметрах объект, там же цифры пишут?

Ээээ... вы это серьёзно? Или так шутите?
По-моему, даже в Фокале можно было кроме цифр что-то ещё передавать в качестве параметра :) а уж тем более ссылки или указатели на объекты, функции и так далее.
Давайте вы сначала с этим разберётесь, а там наверняка и остальные ответы станут сами понятны.
А если это была шутка — считайте, я оценил :)

Вот и вы тоже, как и все которых я спрашивал, не смогли мне эту тему объяснить. :(

А как это, извините, объяснить? Переложить весь учебник и рассказать, что такое ссылка? Извините, для этого и придуманы учебники, и они давно написаны.

Короче вы тоже разбираетесь в этой теме.

Здається, ти просто не хочеш розібратись у питанні.

Розберемо твій приклад:

Display d = Display.getDisplay(this);

оголошується змінна d типу Display (який є класом),
значення для змінної вертає статичний метод getDisplay класу Display,
параметром для виклику getDisplay передається посилання на «себе» — посилання на об’єкт, у методі якого робиться цей виклик

Кожен об’єкт — це кусок виділеної пам’яті, де розміщені дані об’єкту, він має свою адресу. Коли викликається метод для даного класу, у нього неявним чином передається ще один параметр — посилання на конкретний об’єкт, з яким, власне, має працювати метод. Власне, для того, щоби мати змогу звернутись до цього конкретного об’єкту всередині методу, використовується слово this.

У python, до речі, це виведено явно — він вимагає, щоби у методів був перший параметр, куди буде передаватись поточний об’єкт — зазвичай, його називають self.

Дякую!

++ Здається, ти просто не хочеш розібратись у питанні.++

Хочу разобраться, но нормального объяснение данной темы нигде не видел.

Ну по крайне мере в С++ это (this) базовый ф-ционал.

MyClass m1;
m1.fun1(); // тут мы можеи обратиться к объекту m1 через его имя.
//--------------------------

void MyClass::fun1()
{
// Нестатический метод класса, вызывается только для инстансов класса MyClass
>>> вопрос !!!
Как тут получить доступ к инстансу класса MyClass, для которого данный метод вызывается ???
}

1) у меня вопрос по Джаве был, а не по C++

2) В вашем примере объект m1 вызывает функцию fun1();

2) В вашем примере объект m1 вызывает функцию fun1();

Це не так. Приведений код створює об’єкт типу MyClass до звертається за іменем m1 і викликає його метод fun1. Сам m1 нічого не викликає.

В Java „m1” создает: „MyClass m1 = new MyClass();”, а „m1.fun1();” объект „m1” вызывает метод „fun1();”

Коллега, не тратьте бисер. При нулевых знаниях он уже успел мне нахамить за то, что не разжёвываю ему. Пусть сам продирается.

он уже успел мне нахамить за то, что не разжёвываю ему

Так вы и не объясняли мне.

Насправді тут все простіше ніж може здатися, як правило що написано то воно і означає:

1) непонятно почему и зачем в методе, в качестве параметра употребляется ссылка на на объект?

Щоб передати посилання/вказівник в той метод як параметр виклику

2) Да и зачем употребляют в параметрах объект,

Щоб передати його під час виклику як параметр

там же цифры пишут?

Там пишуть значення які передають через параметри.

Спасибо большое! Вот, что значит: человек знает тему.

просто обычно слово «this» употребляется:

1) в геттерах и сеттерах.

2) в конструкторе.

За год не привыкнуть к синтаксису это уже диагноз.

... 2 Года.
С удовольствим вернулся к привычной маркировке кода в С++/С#.

Это я к тому что за год можно к синтаксису языка привыкнуть.

Привыкнуть это одно, а работать это другое.

За 20 лет я нифига не привык в веб-разработке и привыкать не собираюсь. Хотя ничего сложного и мега заумного там нету.
Так же и с отступами питона, вот не нравится мне такой варинт и все, но при необходимости, всегда готов вернуться к этому ЯП.

Значит дело во вкусах, а не в привычке.

-

Python хорош по своему, есть ряд задач, которые легче решаются именно на этом языке. К тому же у него есть ряд очень неплохих библиотек, которые облегчают жизнь разработчиков. А относительно синтаксиса, так он создан таким образом, чтоб выработать в прогере аккуратность, что не мало важно при разработке кода. И вообще ненужных и плохих языков программирования не бывает...Есть просто разные задачи...

Плиз, под какую задачу мне юзать brainfuck, Whitespace и прочий мусор?

Python чудеснейшим образом используется для серверных задач. А все ваше негодование по поводу Whitespace и тому подобное — это всего лишь стиль данного языка. Разработчик просто пытался сделать этот язык компактнее. Если вы когда- то писали файловые поисковики, или что-то в этом роде, на Python, то вы сразу наверное ощутили насколько меньшим по размерах становиться этот код. А вообще все ваши претензии выдвигайте шоу Монтей Питона ))) Вот)

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

Автори вайтспейса просто імплементували жарт Страуструпа який запропонував додати в С++ оператор пробіл. Крім того через те що усе крім пробілів інтерпретатор ігнорує можна впусивати якісь віруси чи інші деструктивні програми просто в текстові файли, це теж типо жарт такий.

За более детальной информацией по задачам которые пишут на Python можете обращаться в booking.com или Yandex и во много других фирм, которые ищут питоностов и готовы платить им по несколько тысяч долларов в месяц!

brainfuck, Whitespace
ну насколько я читал, что т.к. они оба полніе по тьюрингу, то на них в принципе можно написать все то, что и на обычном языке программирования (на брэйнфаке вроде даже какие-то соревнования проводят).

Другое дело, что "эзотерика" как бы не предназначается для написания программ - это обычно в шутку написанное (как LOLCODE или HQ9+, например), либо в качестве издевательства на программистом (как Malbolge).

развлечь — это раз. потешить самолюбие — в случае успешной компиляции — два.
целых две задачи.

питон старперское говно, все чоткие модные паца пишут на руби. и да, там есть бэгин/энд

это ж сарказм был, так?

Писали. В год появления слова «хипстер», а это был 2009. Сейчас модные паца пишут на Go.

это все Goвно. эликсир и феникс наше все в этом сезоне. стильно модно актуально etc

за рік роботи на досить великому python-проекті (на разі повернувся до Java) залишились лише позитивні спогади! звичайно спочатку шпортався об відступи таб/пробіл та віндові/лінуксові переноси рядків, так як з попередніми мовами таких проблем не було, але до всього адаптувався (наприклад PyCharm нормально підсвічує відступи лініями) і побачив, що переваг такого стилю значно більше ніж недоліків

відступи таб/пробіл та віндові/лінуксові переноси рядків
щось знайоме з досвіду на PHP. Це проблема, яку однозначно потрібно вирішувати незалежно від обраної мови програмування.
щось знайоме з досвіду на PHP

Це була відома проблема Perl.

будь яка якісна мова програмування має фігурні дужки

эзотерические языки очень качественные

Аристотель разочарован вами

Де ж ти був, коли розробник Python по вечорах творив свою мову і дивився шоу Монтей Пітона, в честь якої цю мову і назвав)))

А взагалі, мова досить якісна, ще якщо selenium прикрутити, то можна творити дива!

ага, скрепингом, к примеру, заниматься.

Lisp. фигурных скобок не имеет — почти все скобки круглые) или скажете, что лисп — некачественный язык из-за отсутствия фигурных скобочек?)

в пайтоні фігурні дужки для позначення словників ;)

Насправді всі ці пітоні пехопе, жабоскрипт і що ще там — мови для дітей. Справжня тру мова це щось потужне типу JAVA, C# ну і т.д. Просто констатація факту.

Естественно у Вас большой опыт разработки на всех вышеперечисленных языках и вы знаете о чем говорите?

не нужно быть лингвистом чтобы отличить суржик и чистого языка.
скриптовые языки ограниченные, но взамен увеличена скорость разработки и уменьшение порога входа для программиста за счет простоты языка, пока дела обстоят именно так

Но вследствии их упрощения, область разработки ухудшается значительно. Школота набежит(причем дело не в возрасте) и пишет как попало. Вообщем, низкий порог входа полезен только для мелкого бизнеса, ну и для тех кто в программировании только ради денег, или не могет в что то сложное.

Писать как попало можно на любом языке. И если для Вас язык, на котором код написан, есть показателем качества кода или программного продукта в целом боюсь повадки

Школоты
вам знакомы не по наслышке и надеюсь что с возрастом пройдет.
Писать как попало можно на любом языке.
 не можно. Все кто идет чтобы писать как попало — идут в легкие языки. В тяжелых они неосиляторы. И вообще, хватит уже оправдываться этой глупой банальщиной. Чем менее язык безопасен — тем менее он хорош. И суть не в разработчике.
не можно
Запости сюда свой Java-проект и я тебе докажу обратное.

Суть в том, что я еще только учусь, а в ваших скриптовых, с моим уровнем, большинство работает(В php, по крайней мере). Это не вспоминая то, что в Java по дефолту используются хорошие практики, та же статическая типизация. Безопасность разработки...

И да — не запощу, не буду

Суть в том, что я еще только учусь, а в ваших скриптовых, с моим уровнем, большинство работает
т.е. все таки ваше авторитетное мнение не базируется на личном опыте?
Безопасность разработки
Это как? Под охраной?
В php, по крайней мере
php вообще отдельный разговор. Но он востребован и будет таковым еще очень долго в силу объективных причин.

та харош уже вестись. либо жирный тролляка, либо заносчивый новичок.

Так ведь учит кто то этих новичков так.

с моим уровнем, большинство работает
Анекдот бородатый слышали про «Джо, эти парни сидели с другой стороны стола»? Вот думается мне, что и у вас представление о собственном уровне несколько искаженное...
о собственном уровне несколько искаженное
Ну Вам конечно виднее, спорить не буду

Так а все очень просто, несложный логический вывод: если вы можете написать «я еще учусь, а большинство с моим уровнем работает», то это в первую очередь показывает ваш уровень мышления.

несложный логический вывод можно сделать только такой что по-честному выиграть спор у тебя не получится и ты подсознательно оппонента смешал с гвном прямым текстом, чтобы другие глянули ну да, Костя прав, он же уже матерый программер, а тут новичок под ноги лезет

вывод здесь только что что Саша не уверен в себе, т.к. только начинает карьеру, было бы намного хуже если бы он, объективно, ничего еще не зная говорил бы обратное, тогда можно было бы сделать неутешительный вывод

напиши плз анекдот про джо, а то он не гуглится :)

У меня почти два года коммерческого опыта программирования на С++(и сложнее он любых ваших Джава, Сярпов итд). Вроде серьёзный язык, да, высокий порог вхождения. А вот вариантов набыдлокодить на нём в десятки раз больше, чем в Python.
Быдлокодеры встречаются независимо от языка, поверь опыту =) Бывает пишешь-пишешь всё вроде красиво, а потом через год понимаешь, каким ты был быдлокодером =D И сделал бы сейчас проще, и лучше, и надёжней.

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

Если тот большой заказчик решит сэкономить на разработке, то это отобъется на поддерже и развитии. Или я неправ?

а ты заказчик?) заказчик умеет денежки вложить и газету читать, а оте непонятные слова что ты пишешь он не знает, он что-то сказал надо, ему предложили варианты, он выбрал пальцем в небо основываясь на бюджете и дело в шляпе, деньги отбились, заказчик доволен, вот и появился проект на пхп, деньги перестал приносить — всех уволили

Забавно) Т.е. скриптовые языки — будущее? Раз забить на качество, даешь дешевизну? И будет ли в будущем еще более упрощение синтаксиса, вообще разработки?

Т.е. скриптовые языки — будущее? Раз забить на качество, даешь дешевизну?
ты странно делаешь выводы... если будущее для тебя это угодить чьему-то бизнесу, то да; скриптовые языки != дешевизна, неквалифицированный труд == дешевизна
И будет ли в будущем еще более упрощение синтаксиса, вообще разработки?
конечно будет, за 20 лет языки программирования получили невиданное упрощение, почему же не продолжить
Но вследствии их упрощения, область разработки ухудшается значительно.
вам же не составит труда написать на примитивном tcl какой-нибудь визуализатор трассировки пути, правда?
ну и для тех кто в программировании только ради денег
Не первый раз встречаю эту фразу и чем-то она меня смущает. Очевидно, что те, кто в программировании только ради денег, если они не совсем уж законченные идиоты, быстро замечают, что больше денег как правило получают те, кто говорит, что они там не только ради денег, и одновременно замечают перемены в самих себе, в том смысле, что не единой корысти ради тащатся они на очередное интервью. В сухом остатке можно выделить очень небольшое число истинных рыцарей чистой идеи, гордо несущих на щите своем одинокого золотого тельца, чья прямота и цельность заслуживают глубокого уважения.

А помойму хватает.
Скорей наооборот, люди начитаються форумов, наслушаються разговоров бывалых, и тоже начинают вливать басни аля «фу, багфикс», «мы творческая профессия», и прочий бред, хотя реально то чисто изза денег в профессии.

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

Отец спускается вниз, ведерком черпает дерьмо и сыну наверх подает, а тот в бочку выливает. И вот как-то сын ведерко не удержал, и папаше содержимое на голову вылилось. Тот утерся, посмотрел задумчиво и говорит: «Видно не будет из тебя толку, сынок. Так всю жизнь наверху и простоишь! »
какие-то основания для самоуважения

Самоуважение это какаято абстрактная абстракция, о которой никто не думает. О ней не думают вдвойне, если нужны деньги чтобы жить.

логика проститутки, простите..
Если что-то мне очень-очень не нравится, я не буду это делать за деньги, даже если не за что жить. Можно искать другие пути заработка ,что тебя не вывернуло в первый день такой работы..

Если что-то мне очень-очень не нравится, я не буду это делать за деньги, даже если не за что жить.

Поверте, будете; вдвойне будете, если вашим детям нечего есть.

пока нет детей, тут вы правы. Я за лично себя говорю..

логика проститутки, простите..

Так у них нормальная логика, а «логика» :

Если что-то мне очень-очень не нравится, я не буду это делать за деньги
это какого то мажорчика-неженки, который суровой житухи не познал, руки в гвно не пачкал, в лесах Сибири своего сокамерника на костре не готовил, сбежавши перед этим с ним из колонии СР и т.д. :)))

вы пересмотрели фильм «Новая земля»?
И причём тут

который суровой житухи не познал, руки в гвно не пачкал, в лесах Сибири своего сокамерника на костре не готовил, сбежавши перед этим с ним из колонии СР и т.д. :
Где тут
делать за деньги
??
По-моему -тут чистый фан:)
Если что-то мне очень-очень не нравится, я не буду это делать за деньги, даже если не за что жить
вы наверно не смотрели док фильм об людях, которые разбились на самолете в горах и потом около месяца им пришлось там жить. Многие умерали. Через некоторое время, чтобы выжить, они ели умерших по частям. Потому не надо тут сказки рассказывать. Нечего вам будет есть то и туалеты мыть будете, если вариантов не будет.

Ещё один-

суровой житухи не познал, руки в гвно не пачкал, в лесах Сибири своего сокамерника на костре не готовил, сбежавши перед этим с ним из колонии СР
-не умеющий читать?
Причём тут
ели умерших по частям
к работе за деньги?
Даже если и за деньги- а если я каннибал и мне это понравится? )
Тогда уже не в тему.
Но мы говорим о
делать за деньги
а не о выживании в стиле Беарза Грилза..

как правило даже в такой ситуации

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

Язык под задачу выбирают, учитывая ряд факторов в том числе экономические. И сравнивать целесообразно только в контексте конкретного проекта.

вот ты сейчас сам косвенно подтверждаешь что есть более сложные языки, а есть более простые, ясное дело что никто не на си писать сайт не будет, но это же не влияет на тот факт что си сложный

О чем и речь! Я к тому что

всі ці пітоні пехопе, жабоскрипт і що ще там — мови для дітей
фраза как минимум странная. Если человек не ребенок, а специалист то он выберет тот инструмент который удобней для задачи. А не будет тулить куда только можно
JAVA, C# ну і т.д
только чтобы потешить самолюбие.
ЗЫ: Лет 5 назад когда писал на С++ имел похожее мнение про JAVA, C#)
Если человек не ребенок, а специалист то он выберет тот инструмент который удобней для задачи. А не будет тулить куда только можно
если человек такой оркестр, что может на любом языке писать без ущерба качеству то ему надо было в цирковое поступать; в действительности такой человек — это типичный говнокодер, знающий только синтаксис языка, ничего хорошего это не предвещает, работать с таким человеком другим программистам неприятно
только чтобы потешить самолюбие. ЗЫ: Лет 5 назад когда писал на С++ имел похожее мнение про JAVA, C#)
я тоже, и до сих пор имею такое же мнение: с++ сложнее и лучше джавы с шарпом
с++ сложнее и лучше джавы с шарпом
И вседа будет. А джава с шарпом это как мне кажется золотая середина для более легких вещей. Ну и, конечно же, для небольших веб страничек надо использовать скриптовые. НО! Так сложилось, что эти скриптовые используют как человек описал:
тулить куда только можно
для небольших веб страничек надо использовать скриптовые
Гуглу, Яндексу и Дропбоксу сообщите. Они не в курсе что там Python не нужен.

Гугл создал язык GO, и почему то он таки не скриптовый, а с строгой типизацией и т.д. Наверно поняли суть

А че ж Джаву не взяли? Суть поняли?) Появились задачи — появился язык.

не скриптовый, а с строгой типизацией
не сравнивайте бульдогов с носорогами.

С чего ты взял что не взяли? В гугле джаву юзают в полный рост. Вон андроид почему то не на питоне писан.

Вы не правильно поняли. Я имел ввиду не взяли для тех задач для каких собрались использовать Go.

для каких собрались использовать Go
А для каких собрались его использовать? С какими бы джава не справилась?

Java далеко не серебреная пуля. Легко заметить что Go (как и такие новые языки как Rust и Nim) не нуждаются в виртуалке.

не сравнивайте бульдогов с носорогами.
Да, я немного неточно выразился. Имелось ввиду что они не пошли по упрощению.

По упрощению чего? Это как раз упрощенный с++, если говорить очень грубо.

Синтаксиса. Та же динамическая типизация и 1 массив для всего.

Типизация не есть частью синтаксиса.

1 массив для всего
Это что значит?
Типизация не есть частью синтаксиса.
Не есть, она определяет синтаксис. Но больше докопаться как я понимаю не к чему. Пошло балабольство.
Это что значит
Это $array в PHP и 4*3, если хорошо помню, видов массивов в JAVA. Не говоря уже о определении типов данных которые в них.
PHP
решает узкий круг задач там есть то что нужно. (Там есть ряд своих специфичных именно для ПХП проблем но они к теме не относятся). А если Вам все таки не хватает какой то коллекции то кто мешает написать?
кто мешает написать?
Что, простите? Предлагаете писать библиотеки для языка? Исправлять его баги, недоработки? Не, я лучше норм язык выберу. Впрочем уже выбрал.
узкий круг задач
ПХП тычут даже в хайлоад. Так что не узкий круг задач.
ПХП тычут даже в хайлоад. Так что не узкий круг задач.
ПХП используют только для веба. Это узкий круг. Хайлоад можно сделать на чем угодно.
Предлагаете писать библиотеки для языка?
А вы что на Java используете только те классы которые входят в его библиотеку?
Вот реально интересно какого именно массива по Вашему мнению в ПХП не хватает и почему Вы думаете что Вам виднее какие там должны быть массивы чем разработчикам языка?

Ти ніфіга не знаєш ні джаву, php.

PHP будь яка домогосподарка знає, а от JAVA — так, ще не знаю, серйозна то мова.

Ти або троль, або просто недалекий. Аж нецікаво.

А в питоне, по-Вашему, какая типизация?

А кто сказал что код пишет тот же кто решает на чем писать?
И С++ хорош не потому что он сложнее, а теми возможностями что он дает.

А кто сказал что код пишет тот же кто решает на чем писать?
а действительно — кто?)
И С++ хорош не потому что он сложнее, а теми возможностями что он дает.
высокий порог входа отсеивает тех кого стоит отсеять :) не всех, но лучше чем порог джаваскрипта например

Да дело не только в пороге. Сама строгость языка не дает ляпать как попало.

дает, еще как дает, строгая типизация это настолько слабая защита от ляпанья как попало, ты себе даже не представляешь, ошибок компиляции толком не встречается, обычно есть ошибки логики и рантайм ошибки, типизация ничего не дает в этом случае

Понятно. Ну хоть есть, все же какая то да защита.

Порог вхождения и квалификация разработчиков несколько разные вещи, хотя связанные. Разве это проблема языка что контора кого попало набирает?

Низкий порог для того и создают чтобы понизить необходимую для разработки квалификацию .

Ну не скажите. Не всегда. Это бывает чисто побочным эффектом или второстепенной задачей. При создании того же Си решали совсем другую задачу. И тем не менее даже при таком раскладе никто не мешает найти квалифицированного разработчика. Они есть. Хотя должен признать писать хороший код на Питоне помогает хотя бы понимание как работает Си. Тогда понятней что и как работать будет. Как минимум исходники интерпретатора/библиотек глянуть иногда.

никто не мешает найти квалифицированного разработчика
Так а я и не спорил. Middle Senior Python всяко поумнее будет Junior Java. Но речь о большинстве, и чем ниже порог входа — тем то большинство ниже по уровню. Ведь «зачем парится, если и так работает, и деньги платят? »

Ну так где тут проблема языка? Так везде и не только в IT. Одни работают лучше другие хуже. Зарабатывают соответственно.

Ну так где тут проблема языка?
Уже много раз описали где. По новой? Или скажете что большинство дажвистов по квалификации равны большинству пехопистов?

Какое мне дело до большинства? Меня волнует квалификация исключительно моя и тех с кем я работаю и возможности инструмента с которым я работаю. То что вы что то пишите на Java еще не говорит о том что вы чем то лучше среднестатистического ПХПшника.

Большое. Ответ тут:

и тех с кем я работаю

Я работаю не с большинством, а с конкретными людьми.

Одни работают лучше другие хуже. Зарабатывают соответственно.
популярное заблуждение, зарабатывает больше более наглый

Ну не всегда. Но есть такое

не языка, но проблема есть и проблема эта у самих разработчиков, а решают не они итого проблема нерешаемая, а тут отсеиватеть встроен — удобно

проблема эта у самих разработчиков, а решают не они
не надо всех ровнять.
с++ сложнее и лучше джавы с шарпом

Haskell сложнее и лучше с++) (докажите обратное)

Даешь холивар, что лучше, а что хуже) ибо каждый кулик свое болото хвалит: питонист будет хвалить питон, джавист — джаву, сишник — с/с++, хаскелист — хаскель (есть хзаскелисты, которые ничего не признают, кроме хаскеля) и т.д.

если человек такой оркестр, что может на любом языке писать без ущерба качеству то ему надо было в цирковое поступать; в действительности такой человек — это типичный г*овнокодер,

а как быть с фразой: «Сколько знаешь языков программирования — столько раз ты программист»?
да и, ИМХО, знание нескольких языков еще не означает, что человек знает их одинаково плохо) хотя, да — есть хелоувордщики, которые написали хэллоуворд на нескольких языках и уже считают, что они все эти языки знают и что они уже асы)))

(какой-то глюк с камментами у меня че-то :( )

Haskell сложнее и лучше с++) (докажите обратное)
это редкий случай когда я выразил все мнение, а не база для доказательств превосходства других языков
а как быть с фразой: «Сколько знаешь языков программирования — столько раз ты программист»?
да и, ИМХО, знание нескольких языков еще не означает, что человек знает их одинаково плохо) хотя, да — есть хелоувордщики, которые написали хэллоуворд на нескольких языках и уже считают, что они все эти языки знают и что они уже асы)))
удобно когда в вопросе содержится ответ :)

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

Тоже самое и питон — у него есть свои преимущества перед с++ и джавой, помимо синтаксиса, из-за чего он и стал популярный, в т.ч. и в сфере Big Data и всяких сложных вычислений.

удобно когда в вопросе содержится ответ :)

это относится к

«Сколько знаешь языков программирования — столько раз ты программист»
или к хэллоувордщикам?
каждый имеет право считать его любимый язык ничем не хуже
Естественно. Без любви к языку, выучить его нормально невозможно.
это относится к 
первая часть — вопрос, вторая часть — развязка

т.е. считаете, что те, кто знает несколько языков программирования хэллоувордщики поголовно?
или я не правильно понял?

разъясню — есть хэллоувордщики, которые считают, что они знают все те языки, на которых они писали свои хэллоуворды. Но ИМХО их не 100%. Есть и те. которые действительно на довольно хорошем уровне знают несколько языков программирования (обычно 2-3 языка), ибо если челу 25 лет и он говорит, что он знает 10 языков программирования, то это 100% хэллоувордщик, ибо он вряд ли успел за свои годы хорошо освоить эти самые 10 языков, о которых он говорит)..

т.е. считаете, что те, кто знает несколько языков программирования хэллоувордщики поголовно?
или я не правильно понял?
нет, не все, есть исключения, но только зачем исключения рассматривать-то?
Есть и те. которые действительно на довольно хорошем уровне знают несколько языков программирования (обычно 2-3 языка)
когда 2 это обычно язык, на котором написан бекенд и второй язык жс, а третий типа скл, такое можно хорошо знать; но набор в виде пхп, с++, джава это верный признак что человек не знает ничего вообще
но набор в виде пхп, с++, джава это верный признак что человек не знает ничего вообще
а если чел пишет модули для пхп на с/с++? например, есть такой фреймворк для php — phalcon, который написан на с/с++ в качестве модуля для пхп. Т.е. чел, который написал его должен был знать по крайней мере как работает пхп.

и в целом — и джава, и пхп, и с++ имеют схожий (сиподобный) синтасис, т.е. хороший программер, ИМХО, может их вполне выучить на нормальном уровне.

другое дело, если это совершенно разные языки (как по синтаксису, так и по идеологии), например, Haskell, Assembler и Basic. Вот такое сочетание действительно будет смотреться очень странно...

а если чел пишет модули для пхп на с/с++? например, есть такой фреймворк для php — phalcon, который написан на с/с++ в качестве модуля для пхп.
да, давай только исключения рассматривать, выводы волшебные получим

Кстати, я тут исключение вспомнил: как шахтер стал программистом в 40 лет. Т.е. делаем вывод что все шахтеры потенциальные программисты, а все программисты потенциальные шахтеры и это типа норма. Бредово звучит? Ну а че, зато пабедил в споре!1111

ну вообще-то исключения на то и исключения, чтобы подтверждать правила. ;)
я к тому, что я не призываю к тому, чтобы все сразу бросались изучать несколько языков только потому, что какой-то известный программист знает 3 или 4 языка программирования. Не все же гении. :)
и я согласен с тем, что лучше знать один язык программирования, но хорошо, чем десять, но плохо. ;)

и джава, и пхп, и с++ имеют схожий (сиподобный) синтасис
О май гад
но набор в виде пхп, с++, джава это верный признак что человек не знает ничего вообще

Тут несколько вопросов, во первых сколько лет опыта разработки на каждом языке у человека ? Во вторых — что такое «не знает ничего вообще» ?
Тут несколько вопросов, во первых сколько лет опыта разработки на каждом языке у человека ?
не знаю, я таких не встречал чтобы знали круто много языков, но встречал ребят, которые на любых языках писали... писали кошмары...
Во вторых — что такое «не знает ничего вообще» ?
неужели это такая непонятная абстракция? попробую пояснить: код пишет, он кое-как работает, но там треш со всеми антипатернами, копипастом, техническими долгами и худшими практиками
не знаю, я таких не встречал чтобы знали круто много языков,
Я не встречал ни одного человека который знал бы «круто» хоть один язык. Круто — не круто, сугубо субъективное определение, отличающегося от того может ли человек эффективно решать определенный круг задач или нет.

Просто как правило 100500 языков тулят в резюме джуны, которые действительно ничерта не знают, тем не мение это не значит что не бывает нормальных полиглотов.

я не говорил что не бывает, просто их так мало что решил не выделять малочисленную группу, сказал лишь про большинство

во первых сколько лет опыта разработки на каждом языке у человека
А жизни может хватить что б досконально-идеально хоть один с++ узнать ? :)
Во вторых — что такое «не знает ничего вообще» ?
Пример где используется связка джавы с++ и пхп в промышленых маштабах одним человеком ? :)))

Ну, мне например на одной работе, где все джава, оч изредка приходилось лезть в спецефические нейтив либы написанный на с, и лезть в какието вордпрес и медиавики плагины написанные на пыхе.
Я при этом не утверждаю что знаю пых или с. Но моего уровня

треш со всеми антипатернами, копипастом, техническими долгами и худшими практиками
вполне хватило чтобы справиться с поставленными задачами.
стал популярный, в т.ч. и в сфере Big Data
Это где такое?

вот в «облаках» он вроде как используется. OpenStack, например, судя по википедии на питоне написан — ru.wikipedia.org/wiki/OpenStack . Еще — в «машинном обучении»: вот, например, пару книжечек по этому поводу machinelearningmastery.com/...n-machine-learning-books . Вот насколько это имеет отношение конкретно к Big Data сказать не могу, но вроде как имеет.

Ты абсолютно прав, это никакая ни бигдата, в бигдате питон сасет.

с++ сложнее и лучше джавы с шарпом
сравнение происходит по толщине мануалов «... за 21 день»?

нет, объяснять долго, но я думаю про сложность многие согласятся

не-а. я, вот, не согласен.
сравниваем сложность синтаксиса? или возможности по низкоуровневому доступу(управлению памятью, например)?
даже если мы говорим про синтаксис. то неужели с вашей точки зрения сложнее запомнить синтаксис принудительного приведения типов, чем не во всем очевидную таблицу автоматического приведения типов при нестрогом сравнении?
если шо, моя позиция «сравнивать сложность — бессмысленное занятие», а не «джаваскрипт всех сложней и фиг осознаешь»

таблицу автоматического приведения типов при нестрогом сравнении?

BTW на Хабре как-то нарисовали версию нагляднее:
habrahabr.ru/post/218061
хотя всё равно белый полярный.

А ту таблицу кто то учит? Кстати, неочевидность приведения типов — один из больших минусов динамической типизации.

шо значит «учит»? мы тут некую «сложность языков» обсуждаем. вот, вы в Java что _учите наизусть_?

А ту таблицу кто то учит?

Её вешают на стенку, потому что выучить это, не сойдя с ума, невозможно:)

Кстати, неочевидность приведения типов — один из больших минусов динамической типизации.

Ещё один не знающий азов и путающий динамическую типизацию с нестрогой.

В Python, Erlang, куче других мест типизация динамическая, но строгая. Автоматических конверсий между числами и строками, даже для сравнения, нет вообще; аналогично с массивами, мапами и т.п. объектами. Выражение типа [] + {} не может иметь никакой интерпретации и вызовет исключение. То же для "5"+3 и других знаменитых глупостей JS.

Более того, там устраняются даже такие древние, привычные и почтенные, глупости языков, как двойственность деления (в массе языков от Фортрана до C++ - при обоих целых аргументах это деление нацело, иначе — с вещественным частным); Python сейчас для деления нацело требует знак «//», Erlang — «div». И это очень правильно.

Бывает и наоборот, типизация статическая, но нестрогая — см. хотя бы в C правила конверсии между разными видами целых. В Go это решили радикальнее — там даже от int до равного ему по размеру int32 надо приводить явно и отвечать за последствия этого.

Вам же рекомендую более тщательно изучить эту тему и не путаться в основах — для Java и прочего андроида это тоже важно.

Зашел в старую тему, увидел топ коммент — ответ мне, хотел лайкнуть, увидел что уже лайкнул. Значить не зря этот коммент в топе.

сперва было написал, что эрланг со статической типизацией — посмотрел на википедии прверить, все таки да с динамической))
в общем поддерживаю)

/* жаль, что каммент нельзя удалить, а можно только изменить */

жаль, что каммент нельзя удалить, а можно только изменить
все можно, нужно только желание, в данном случае словить бан. Будьте оптимистом.

По-моему, это тупо — искать более сложное решение. Лови мамонта руками.

а как же сложные задачи, челенж и т.п.?

В том и дело, что есть разница — сложные задачи и решение тех же задач сложным способом.

я не предлагал такого, ты что-то путаешь

скриптовые языки
определение, плиз. по какому принципу вы сейчас ограниченность приписываете.
а то даже вики не дает строгого определения «сценарного языка».

ну выпиши на листочек языков 10 и пропиши каждому ограничения, которые знаешь про них, получишь вывод что скриптовые языки могут меньше, неужели ты веришь что я сча тут в двух словах распишу все, задавая такие вопросы?

А ну-ка назовите парочку чистых языков (я про естественные языки, если что). Из таких, которыми ну хоть бы 10 тысяч носителей есть.

Неужели не понятно что я имел ввиду под словосочетанием «чистый язык»? Или ты считаешь что если язык меняется или набирает слова с других языков, то он становится суржиком?

«Java GOD language community» выкидывает ксенофобо-расистские под.ёбы в сторону других программистов? Или люди пишущие на других языках недостойны называться программистами?

У меня рядом чел сидит и на Джаве «прогает», что то связано с базами данных : код автоматом херячится фреймворками всякими, он только имена заменяет... Бред, а не программирование. Трушное програмирование это когда блокнот открыл и пишешь код с нуля :)))

пишешь код с нуля
Для себя — пожалуйста, а бизнесу нужна эфективность разработки. Увы и ах. И еще — одним программированием нынче тяжеловато ограничиться, приходится и интерфейсы клепать с дизайнов.

И еще по поводу как плохо работать с фреймворками — Вы еще не видели что творится в пыхпых разработке, когда надо устанавливать и настраивать вордпресики. Сколько там остается для программирования — думаю понятно.

блокнот — в топку
skype driven development — в топку

и будет счастье )

skype driven development — в топку

А чем заменить ?

Вы предлагаете шило на мыло поменять.

Чем плохи gitter и slack? Часто использую по работе. Проблем не возникало.

чем slack driven development например, принципиально отличаеться от skype driven development ?

Поддержкой сниппетов и маркдаун?

Как Я понимаю, проблема skype была описана топикстартером.

Предположим в чужом питоновском коде indenting строк теряется и мы получаем не выровненый код. (Не нужно рассказывать, что такого не бывает, потому что этого не может быть никогда и т.д. Порстой пример- если код присылают по скайпу или копируем с какой то html страницы).

Используя slack Вы получаете возможность нормально поделиться кодом. То есть вышеописанной проблемы не возникает.

Порстой пример- если код присылают по скайпу
можно юзать теги
{code} some code; {code}

не нравится, что нельзя объявить переменную. любая опечатка в имени переменной и лови ошибку на стадии выполнения

«любая опечатка в имени переменной и лови ошибку»
Це ж прекрасно! Чи ні?

прекрасно когда на этапе компиляции.
например в перле можно use strict; my $variable; потом $varieble = 4; получишь ошибки перед запуском скрипта. а в питоне плохо:( как и в пхп

Кто не пользуется pychecker, pyflakes, pylint — сам себе злобный буратин.

то есть, без сторонних утилит питон не может ...

А нафига они должны быть встроены в интерпретатор?

что бы интерпретатор сообщил что ему фигню на интерпретацию суют :)

Данные проверки в интерпретаторе усложняют его. Иногда — существенно. Задача интерпретора — выполнять как можно более качественно и быстро, а не проверять стилевые моменты.
Статический анализ — это отдельная от исполнения задача. Её отделяют даже от компилятора, который делает некоторую часть такого анализа просто для своего функционирования; а интерпретатору она вообще как собаке пятая нога. Тем более интерпретатору, который может выполнять через eval() произвольный сгенерированный работающей программой код — статический анализ в метапрограммировании это нонсенс.

дак питон компилируется в байт код, прежде чем интерпретировать. в перле такая проверка есть. а в питон получается нужно еще какую-то програмку запускать после каждого изменения? не очень удобно

дак питон компилируется в байт код, прежде чем интерпретировать.

Это можно сказать про почти любой скриптовый язык.

а в питон получается нужно еще какую-то програмку запускать после каждого изменения?

Не «после каждого», а перед коммитом. И точно так же в Perl надо запускать через perl -wc проверку независимо от собственно исполнения.

не очень удобно

Вы думаете о каких-то нереальных сценариях, а не о том, как люди обычно работают.

#!/usr/bin/perl

use strict;

$t = 1;

./test.pl
Global symbol «$t» requires explicit package name at ./test.pl line 5.
Execution of ./test.pl aborted due to compilation errors.

ничего в Перле специально для этого запускать не нужно в отличии от Питона. Если для вас простой запуск скрипта после измененния это нереальный сценарий, мы наверное живем на разных планетах. я очень удивлен.

Execution of ./test.pl aborted due to compilation errors.

Знаю. ~5 лет Перла не забудутся:) Особенно с тем, как постепенно и радостно сползал с него на Питон:)

Если для вас простой запуск скрипта после измененния это нереальный сценарий,

OK, надо было выразиться точнее. Реальный — да, в том смысле, что можно так делать. Но бессмысленный — в том, что так делать не нужно. Это достаточный подход, но никак не необходимый.

Более того, в процессе написания он может даже мешать, за счёт того, что приходится слишком много акцентироваться на деталях, которые в этот момент не существенны. Так что его «достаточность» часто оказывается из категории «из пушки по воробьям».

если вас не затруднит, где можно найти информацию о необходимом взрослом подходе? чтоб «не из пушкам по воробьям». похоже я пребываю на низком уровне профессионального развития — изменил и запустил. хочу знать правильные подходы

если вас не затруднит, где можно найти информацию о необходимом взрослом подходе?

Этого не скажу, и вопрос не ко мне. Кажется, я ни разу в этой теме не упоминал какой-то «взрослый» подход.

похоже я пребываю на низком уровне профессионального развития — изменил и запустил.

Свидетельствует ли это об низком профессионализме, не знаю. А вот об ограниченности задач — да, вполне. У вас не было, судя по этому рассказу, задач типа написания хэндлера FastCGI, или библиотеки реализации какого-то хитрого алгоритма манипуляции данными. У таких модулей в принципе может не быть варианта запуска из командной строки или аналогичным лёгким образом; может быть тестовое окружение, которое ещё надо суметь создать во всех рабочих деталях.

Да, через perl -wc даже такие модули можно проверить на самые базовые ошибки типа опечатки в названии переменной. Но все названные статические анализаторы Питона шире по возможностям: они загружают подключаемые модули, проверяют корректность вызова функций этих модулей и методов классов, просто определяемые логические ошибки типа никогда не срабатывающего except... также есть базовые настройки стиля (объём функции/метода, количество аргументов...) По-нормальному эти все проблемы надо проверять при написании кода, а strict слишком слаб для них.

да был и FastCGI. но были и другие задачи, что изменил и запустил. теперь так не получится по-простому. но зато у Питона анализаторы шире по возможностям, и более строгие проверки.
может ради этого и стоит постоянно запускать pychecker.
наверное я просто мало понимаю в серьезном написании кода. если Питон так популярен, не могут же все ошибаться.. значит проблема во мне..
Спасибо за ваши разъяснения

в чужом питоновском коде indenting строк теряется

Еще один плюс питона — он помогает бороться с копипастом :)

он не бороться с ним помогает, а почти гарантирует совершинеие ошибок при его использовании, бороться с копипастом помогает вырванный ctrl, а в запущенных случаях еще и права кнопка мыши

О чём речь? set paste не лечит?

речь о ’y’/’p’ в визуальном режиме, и «бороться с копипастом помогает вырванный ctrl,»

Ааа... так в таком варианте нигде вырванный ctrl не поможет:) всегда есть меры типа «cat file file >file.new».

если код присылают по скайпу там еще смайлы всякие мешаются... В течении уже года разнаботки я так и н смог привыкнуть использовать его вместо VCS

Писав на джава, потім на джаваскрипт і зтикнувшись з кофіскріптом, я трохи ошарашився). Мені не зручно. Але, напевно, справа в звичках.

В Haskell (Agda, Epigram) двумерный синтаксис. Emacs восстанавливает правильную идентацию одной командой M-x make-everything-work-motherducker. Рекомендую.

На это нужен особый модуль __light_or_dark_future__

Если для Вас проблема в «если код присылают по скайпу или копируем с какой то html страницы», то вы *Личное оскорбление*.

Ну, /*уважаемый товарищ*/, что бы вы понимали, это код, который ПМ находит в сети , как вариант решения какой то прикладной проблемы, и за 5 минут до ухода с работы, кидает в скайп девелоперам, что бы они ознакомились с вариантами решения. Это не то,что бы не продакшен, это даже далеко не попадает, в какие то потусторонние бранчи свн, просто рабочий процесс...
Если у вас такие моменты делаются через 20...30...40 этапов валидации и документирования и т.д, то молодцы ... «возьмите с полки пирожок»...

что бы вы понимали, это код, который ПМ находит в сети , как вариант решения какой то прикладной проблемы, и за 5 минут до ухода с работы, кидает в скайп девелоперам
Пожалуйся на ПМ на митинге. :)

Это такой тест на АйКью, девелопер должен догадаться скопипастить код в строку поиска бубна или гугла и найти оригинал.

Проджект вказує як писати код? Цікаво...

РМ одих не влаштовує як «секретутка на проекті», а інших, бо «вказує як писати код»

Значит вы меня не так поняли, как писать код и какой код писать никто никому не указывает.
p.s. изначально тема была пор синтаксис питона.

В питоне радует отсутствие синтаксического мусора. Ну или хотя бы сведение его к минимуму. Но о вкусах, как говорится...

Пишите на лиспе, раз «мусор» не любите :)
ПС: некоторые называют его «сахаром».

Не путайте мусор с сахаром, они противоположны. Когда то, что в Питоне пишется как a.b.c, в Perl надо писать $a->{b}{c} уже после применения значительного количества «сахара», а без него это вообще что-то вроде ${${$a}{'b'}}{'c'} - то все эти ${} это мусор. Когда вместо with надо писать как минимум try-finally с реакцией на выход за контекст — то finally это мусор (хотя не как замена with это полезно).

Нет, спасибо=) Под автотесты питона пока с головой хватает, а непосредственно в дэв не планирую.

p.s. посмотрел примеры, поверхностное впечатление — в питоне мусора (сахара) меньше.

по-моему лисп не менее «засахареный», чем питон) хотя минималистичные реализации лиспов (например, TinyScheme) действительно имеют по сути дела только ядро языка, а уже всякие либы и сахар каждый «лиспер-схемист» дописывает себе сам.

хотя я могу ошибаться конечно насчет лиспа (особенно классического коммон лисп, ибо с ним не знаком вообще), но смотрел основы Clojure (лисп же, пусть и для джавы), так «сахар» вроде как есть...

если вся проблема в том, что хочется скобочек в питоне, то есть язык Hy ( en.wikipedia.org/wiki/Hy и hy.readthedocs.org/en/latest/index.html (оффициальные доки) ). 1. исполняется поверх питона и, насколько понимаю, может транслировать свой код в код питона. 2. скобочки таки присутствуют (лисп же). 3. вдохновлен лиспами (в частности clojure).
Из недостатков: 1. пока еще сыроват (как я слышал от одного знакомого питониста), 2. не всем нравятся лисповые скобочки...

если же нравятся языки с си-подобным синтаксисом, но надо писать проги на питоне — то может есть транслятор кода си++ в питон?)

Предположим в чужом питоновском коде indenting строк теряется и мы получаем не выровненый код. (Не нужно рассказывать, что такого не бывает, потому что этого не может быть никогда и т.д.

ну это да — может быть проблемой, если вставлять код питона прямо в html-страницу без соответствующего форматирования голым текстом. Но все-равно, как мне кажется, опытным питонист какую-то часть получившегося кода восстановить сможет, ибо можно ж отделить блоки кода, относящиеся, например, к одной функции, от блока кода, относящегося к другой функции. А так да — разребать неотформатированный код еще тот гоморой (особенно если там много строк кода)... ну и сам такой код будет неработоспособным естесно.

А если по теме (не холиварить, а решить проблему), то -> pastebin.com

Наверное, имеется в виду gist.github.com где сеть нормальная версионность и можно клонить/форкать и тд

О, спасибо. Как-то пролетело мимо меня. Буду пользоваться!

Во всем есть положительные и отрицательные стороны. Python — это как раз тот случай, когда плюсы существенно перевешивают минусы. Если в этом языке люди спорят по поводу отступов, то просто отлично, что это единсвенное его свойство, вызывающее неприятие у пользователей.

то просто отлично, что это единсвенное его свойство, вызывающее неприятие у пользователей.
У отдельно взятого пользователя. У питона проблем вагон и маленькая тележка — однопоточный тормоз с динамической типизацией.

Поосторожней с оскорблениями, питон может обидеться, и укусить Вас ночью за пятку!

Питон — это маркетинговый термин. Ему бы больше подошло название «комар».

Зато на питоне можно
1) Писать сложные скрипты, быстро, эффективно и удобно. Для девопс питон это незаменимый инструмент.
2) Быстро и приятно девелопить веб аппликухи
3) Использовать его для математических задач — вычисления, machine learning, computer vision
4) Написать кучу кода которую в сравнении с другими языкам c динамический типизацией будет легко поддерживать.

Не везде нужен супер перформанс и трединг, иначе бы программы до сих пор не писали бы, а паяли.

Не соглашусь, пожалуй, с третьим пунктом. Для математических задач Python не годен вовсе. Типичный пример — попробуйте посчитать на нем 50-е число Фибоначчи по классической рекуррентной формуле. Учебный рекурсивный алгоритм с экспоненциальной сложностью. У Вас экспонента взлетит вверх уже примерно после 30-го числа и вряд ли к вечеру Вы дождетесь результата. Зато Java/Scala на моем старом макбуке 55-е число считала чуть более получаса.

И как тебе нампи поможет в наивном алгоритме вычисления чисел фибоначи?

Там не наивное, там возведение матрицы в степень.
И кстати с чего ты взял что помогло? Там бенчмарков никаких нету.

У Вас экспонента взлетит вверх уже примерно после 30-го числа и вряд ли к вечеру Вы дождетесь результата. Зато Java/Scala на моем старом макбуке 55-е число считала чуть более получаса.
а в чем секрет? хвостовую рекурсию не заюзать ведь в топорной реализации.

ну там через стек оверфлоу щось таки вилетить... але заново перераховувати попередня 54 значення, якщо і 53те, 54те в тебе тільки що пораховане, і в масиві вже лежить ... який сенс? :)))

Какой массив, простите? Зачем?

Если F(n) = F(n-1) + F(n-2), то

1) переводим в неразветвляющуюся рекурсию:

a*F(n) + b*F(n-1) == a*F(n-1) + a*F(n-2) + b*F(n-1) == (a+b)*F(n-1) + a*F(n-2)

2) переписываем это в виде рекурсивной функции

F(n,a,b) = F(n-1,a+b,a)

3) замечаем, что рекурсия хвостовая, и на ФЯ так и оставляем (разберётся без нас), на ПЯ превращаем в цикл. Питон справится не за полчаса, а за миллисекунду :)

Этот пример чётко показывает, почему и хорошо, и плохо демонстрировать преимущества рекурсивных подходов на факториале и фибоначчи: надежда, что любую рекурсию можно перевести в хвостовую. Но ещё больше он показывает, что оптимизировать алгоритм — надо.

На джавке сложно обойти какой нибудь граф рекурсивно поместится в десяток строк кода и столько же минут, а на пистоне стало быть деятели будут чето разворачивать и городить какие то циклы.

Спасибо за явный слив :)

Та как то у тебя слив получился, раз тебе сказать нечего.

Какой массив, простите? Зачем?
для повторного доступу, таки підрахунки, якщо не лабораторні, рідко пишуться для разу за час життя програми
семпл нижче по гілці
для повторного доступу,

Ну вот потому я и говорю, что пример плохой, потому что легко поддаётся сворачиванию в цикл.
В качестве более реальной задачи нужно было взять что-то, что требует «динамического программирования» в терминах Беллмана. Только не опошляться до Аккермана:)

да, но там речь шла про топорную реализацию.

попробуйте посчитать на нем 50-е число Фибоначчи по классической рекуррентной формуле
олсо, Питон «не хочет» оптимизировать хвостовую рекурсию. ever.
олсо, Питон «не хочет» оптимизировать хвостовую рекурсию. ever.

Ну это и не его задача, мне кажется.

не то определение.
это может быть частью его возможностей. или не быть.
или вы предлагаете под tail recursion optimization или под Short-circuit evaluation отдельный компилятор/интерпретатор использовать?

это может быть частью его возможностей. или не быть.

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

шо это было? моя вас не понять.
какая же задача у языка программирования общего назначения?

какая же задача у языка программирования общего назначения?

Самая общая, естественно. Работать эквивалентом машины Тьюринга в пределах доступных ресурсов.
Классически рассматриваемая в качестве базы машина Тьюринга, иногда используемая машина Поста, или популярная сейчас в базовых курсах машина Шенфилда не являются рекурсивными. То же самое, как ни странно, относится практически ко всем современным железным реализациям.

тогда какие есть

возможности, сильно выходящие за пределы задачи
применительно к Питону? это я все еще пытаюсь осознать ваше предыдущее сообщение

Оптимизация хвостовой рекурсии. Да, это было бы вкусно, приятно, и т.д. — но реально не необходимо. Включать её при этом в интерпретатор или нет — вопрос больше вкуса.

попробуйте посчитать на нем 50-е число Фибоначчи по классической рекуррентной формуле. Учебный рекурсивный алгоритм с экспоненциальной сложностью. У Вас экспонента взлетит вверх уже примерно после 30-го числа и вряд ли к вечеру Вы дождетесь результата. Зато Java/Scala на моем старом макбуке 55-е число считала чуть более получаса.
спірне питання — нащо там рекурсія, але от пробував як найбільше “сповільнити” мій алгоритм на шарпі, і підбирати типи даних щоб в оверфлоу не вилітати, максимум вдалось на даблі до 1000чі ітерацій долетіти — все одно 0.2 секунди на все...
i61.tinypic.com/2qan0h1.jpg
п.с. класична рекурсивна формула, не значить що її розкладати треба в програмну рекурсію, а не в рекурсію циклічну ;)

5 Ways of Fibonacci in Python
technobeans.wordpress.com/...s-of-fibonacci-in-python

p.s. Добре було б, якби хтосьдав цифри для кожного способу реалізації ))

Для математических задач Python не годен вовсе.

Python = Matlab. Медленный язык-клей плюс быстрые нативные библиотеки.

И это, а каким образом вычисление чисел Фиббоначи по классической формуле относится к математическим задачам?

Python = Matlab. Медленный язык-клей плюс быстрые нативные библиотеки.
Не надо ляля, в матлабе вполне себе быстренький jit компилируемый язык.

Матлаб, говорят, значительно проще для решения именно математических задач.

если использовать обычную рекурсию, то большинство современных языков могут быстро загнуться. Поэтому, если не ошибаюсь обычную рекурсию в любом языке для математики не юзают (разве для какого-то маленького числа фибоначчи или маленького факториала).
Для математики следует юзать хвостовую рекурсию, и тут уже без большой разницы что используется, питон или джава, или даже джаваскрипт — переполнения стека не будет (хотя JS будет наверное дольше всех вычислять).

з.ы. а обычную рекурсию для вычисления фибоначчи юзают наверное только в учебных целях, и то обычно показывают, почему обычную рекурсию для сложных вычислений (например, указанное Вами 50-е число фибоначчи) юзать не стоит, а нада юзать хвостовую.

хвостовая рекурсия(ёё оптимизация) поддерживается далеко не всеми.
про Питон с Джаваскриптом погуглил. можете повторить :)

ну по большому счету да — не всеми. Но можно же наверное написать такой алгоритм, который будет эквивалентен хвостовой рекурсии (если не ошибаюсь, в питоне именно такой подход и используется).

_руками_ развернуть в цикл :)

Я наивный решил проверить и запустил, жду уже минут 30 и пока глухо (((((

Снижайте сложность алгоритма. Питон используют для математических задач широко — погуглите сначала, перед тем, как делать такие заявления.

Думаю, Вы не совсем правильно поняли меня. Идея примера и была как раз продемонстрировать скорость работы на «тупом», сложном алгоритме «в лоб», что называется. Без оптимизаций, хаков, костылей и прочих хитростей.

То есть Вы хотели взять в данном случае единственный критерий — быстродействие в подобного рода задачах? По-моему, еще Страуструп заявлял, что скорость разработки должна иметь более высокий приоритет, чем скорость выполнения программы. В солюшенах встречаются узкие места, но чаще именно встречаются, нежели превалируют. Если нужно ускорить какую-то часть — это решается. И в питоне, и в джаве(почему-то не идет из головы их знаменитая бага в бинарном поиске) и в других ЯП. Кроме алгоритмов, в питоне, если уж совсем хочется — выносится в сишную либу. В C# - неуправляемый код. В целом на джаву столько всего вылили по поводу ее быстройдействия и использования ресурсов компа, что сейчас смотреть на аналогичные сравнения но где джава указывается как более продуктивная — символично ))

Безусловно, Вы абсолютно правы. Преждевременная оптимизация — корень многих бед. Когда низкая производительность становится очевидной, то всегда можно найти узкое место и ускорить его либо уменьшив сложность алгоритма, либо вынесши что-то в сишный модуль. Я сравнил с джавой по той простой причине, что это сейчас мой основной инструмент работы. На самом деле, этот опыт с числами Фибоначчи возник, когда мы с другом ради интереса решили сравнить скорость выполнения одного и того же алгоритма на разных языках: Java, Scala, C, C++, Python, JavaScript и каких-то еще. Результаты другу не понравились. Он сразу начал протестовать, что у джавы кешируются результаты рекурсивных вызовов, что у его сишного компилятора неправильные флаги стоят и так далее. Он предложил другой, более честный вариант — отсортировать пузырьком большие массивы. Поверьте, python и js тут не вырвались вперед, а java не оказалась внизу. Проблема «кофейной» производительности действительно имела место быть, вот только очень давно, не сегодня.

Я бы ещё заметил, что питон идеален как язык для автоматизации тестирования и написания тестов для api. К сожалению у нас все ещё действует стереотип насчёт джавы, и многие тестеры на неё фапают.

питон идеален как язык для автоматизации тестирования и написания тестов для api
Не дай Бог! Какое там идеальный? По степени «идеальности» для автоматизации его обгоняет только джаваскрипт

А можно услышать обоснование вашего мнения?

Услышать нельзя, мне некогда с вами встречаться, а по существу, сперва хотелось бы узнать какие у вас критерии «идеальности» языка для автоматизации и как в них вписывается python, а затем, исходя из этого, можно будет продолжить разговор.

Вы возразили на конструктивное и почти неконкурентное утверждение (кроме сравнения с Java) деструктивным и конкурентным. В нормальной ситуации именно за вами теперь бремя доказательства, причём первым.

По вашему назвать хоть что-то в этом мире идеальным это конструктивно? Ваше утверждение было ничем иным как провокацией, поэтому вам сейчас и трудно обосновать свои слова.

Ваше утверждение было ничем иным как провокацией, поэтому вам сейчас и трудно обосновать свои слова.

После того, как Вы меня спутали с Nikolay Faletskiy (утверждение было от него), я сомневаюсь, что Вы способны внятно что-то обсуждать. Предлагаю на этом остановиться.

По вашему назвать хоть что-то в этом мире идеальным это конструктивно?

Да.

кроме джавы я видел, почемуто, руби в обиходе. А вот питона не видел... чтото там не клеиться насчет «идеален».

selenium + python так же популярен, как и selenium + java
возьмем вакансии на ДОУ:
selenium+java(у меня выдает 488)
selenium+python(у меня 610)
а на руби я только про cucumber слышал.
UPD сорри, про «API» не сразу заметил. коммент — мимо.

1) Писать сложные скрипты, быстро, эффективно и удобно. Для девопс питон это незаменимый инструмент.
go
2) Быстро и приятно девелопить веб аппликухи
Та на всех языках сейчас быстро и удобно воять веб апликухи. Даже в своей нише динамических языков питон слил джаваскрипту.
3) Использовать его для математических задач — вычисления, machine learning, computer vision
Ты чета попутал, это все делают на ц++ или фортране каком, у питона да, есть байндинги к паре либ, ну так и у других языков есть.
4) Написать кучу кода которую в сравнении с другими языкам c динамический типизацией будет легко поддерживать.
А со статическими?
go

И чем лучше этот мертворожденный уродец на аппарате искусственного сердца?

Даже в своей нише динамических языков питон слил джаваскрипту.

Только за счёт того, что JS успел проникнуть в браузеры. Для него не было иной альтернативы, кроме как написать V8 (и то asm.js медленно просачивается в реализации). Классический пример того, как нормальная разработка теряется перед кривослепленным хаком, который успел создать собственную нишу.

у питона да, есть байндинги к паре либ, ну так и у других языков есть.

Удобство работы над этими байндингами — аналогов нет.

А со статическими?

А со статическими и не сравнивают.

И чем лучше этот мертворожденный уродец на аппарате искусственного сердца?
Тем что по сравнению с ним мертворожденный уродец на апарате искувственного сердца это как раз пистон.
Только за счёт того, что JS успел проникнуть в браузеры. Для него не было иной альтернативы, кроме как написать V8 (и то asm.js медленно просачивается в реализации). Классический пример того, как нормальная разработка теряется перед кривослепленным хаком, который успел создать собственную нишу.
Мне лень дискутируовать на эту тему, но факт остается фактом — питон слил.
Удобство работы над этими байндингами — аналогов нет.
Или есть
А со статическими и не сравнивают.
Ты как обычно ч. нечитатель, дискуссия началась с того что я указал на недостаток пистона — его динамическую типизацию.
Мне лень дискутируовать на эту тему, но факт остается фактом — питон слил.

А пофиг. Он остаётся лучшим инструментом для широчайшей ниши прототипирования и написания того, что не требует существенной оптимизации по скорости и ресурсам, в этой нише он самый удобный.

Ты как обычно ч. нечитатель, дискуссия началась с того что я указал на недостаток пистона — его динамическую типизацию.

Это ты воображала с раздувательством собственных глюков на всю тему. Дискуссия началась вообще с синтаксиса, и твой оппонент правильно сказал — то, что там динамическая типизация, не мешает.

Тем что по сравнению с ним мертворожденный уродец на апарате искувственного сердца это как раз пистон.

Вернись на Землю.

Он остаётся лучшим инструментом для широчайшей ниши прототипирования и написания того, что не требует существенной оптимизации по скорости и ресурсам, в этой нише он самый удобный.
Та нет, не остается.
Это ты воображала с раздувательством собственных глюков на всю тему. Дискуссия началась вообще с синтаксиса, и твой оппонент правильно сказал — то, что там динамическая типизация, не мешает.
Ну пусть будет так, но я давно уже начал обсуждать дин против статической типизации, потому что это важный вопрос, поэтому твое «а со статическими не сравнивают», из-за твоего нечитания.
Вернись на Землю.
Я уже на Земле.
Я уже на Земле.
Правда в своём манямирке.

Девопсы не используют go, python не слил никому, и других языков для работы с математикой open-source есть всего один — R и он сильно проигрывает, если доходит до реализации в промышленных задачах.

www.tiobe.com/...paperinfo/tpci/index.html — это к вопросу о мертворожденности. Python живее всех живых, как впрочем и Java.

(кстати Go там где-то между Forth и Icon).

Правда в своём манямирке.
Или ты в своем.
Девопсы не используют go
Докер слышал? Нет.
python не слил никому
Та нет, слил.
и других языков для работы с математикой open-source есть всего один — R и он сильно проигрывает, если доходит до реализации в промышленных задачах.
Во первых ты говоришь о очень узкой области математики, дяди которые считают термоядерные реакции на кластерах по прежнему используют скажем фортран. Во вторых то что эр сливает пистону — чистый высос из пальца.
www.tiobe.com/...paperinfo/tpci/index.html — это к вопросу о мертворожденности. Python живее всех живых, как впрочем и Java.
то что джаваскрипт там на 9-ом а пистон на 6-ом, говорит о адекватности этого рейтинга.

использовать docker и писать скрипты на go это вещи похоже не отличающиеся в твоём манямирке.

Я говорю например статистике, я говорю например о data-science, я говорю например о machine-learning. В конце-концов приведи мне оппозитный пример. Во-вторых, я не говорил что R сливает питону, я говорил что R сливает в тех случаях, когда программа-прототип по анализу написанная на R работает, медленнее, чем такая-же на питоне, плюс опять таки в решениях enterprise или просто web-приложения легче использовать python, чем R.

то что джаваскрипт там на 9-ом а пистон на 6-ом, говорит о адекватности этого рейтинга.

Маня сомневается в tiobe.com, тебе ссылочку на russia today?

использовать docker и писать скрипты на go это вещи похоже не отличающиеся в твоём манямирке.
Ну вот в компании гугл судя по их митапам, на го как раз и пишут скрипты для девопса, пересев с питона.
Я говорю например статистике, я говорю например о data-science, я говорю например о machine-learning.
Лол, hadoop, spark и т.д. слышал? Где там пистон?
В конце-концов приведи мне оппозитный пример. Во-вторых, я не говорил что R сливает питону, я говорил что R сливает в тех случаях, когда программа-прототип по анализу написанная на R работает, медленнее, чем такая-же на питоне, плюс опять таки в решениях enterprise или просто web-приложения легче использовать python, чем R.
Или не сливает, или не легче
Маня сомневается
Ты че, гей?
в tiobe.com, тебе ссылочку на russia today?
Можешь кроме раша тудей почитать еще скажем статистику проектов на гитхабе, тренды работы на indeed.com, гугл тренды.
я говорил что R сливает в тех случаях, когда программа-прототип по анализу написанная на R работает, медленнее, чем такая-же на питоне, плюс опять таки в решениях enterprise или просто web-приложения легче использовать python, чем R.
Если б R хоть в чем то сливал питону, то он бы не смог приобрести такую популярность и конкурировать с языками общего назначения.
(Например, R популярнее Ruby o_O
www.tiobe.com/...paperinfo/tpci/index.html )
Я сам болтяру на питон +numpy+scipy положил еще 1.5 года назад и полностью перешел на R...

Построить приложение, допустим тот же веб-сервер на R очень проблематично...

blog.datacamp.com/.../05/R-vs-Python-216-2.png

чувак, ну сириузли, найди 10 человек программистов с опытом построения веб-приложений на R, в Киеве. Это не серьёзно. Я говорю о реальных промышленных системах с нагрузкой, с сервисами и т.д., там не используют R

чувак, ну сириузли, найди 10 человек программистов с опытом построения веб-приложений на R, в Киеве
Да мне хоть одного б найти :) Есть вопросы меня интересующие :(
Я говорю о реальных промышленных системах с нагрузкой, с сервисами и т.д., там не используют R
 Странно, я думал ты говоришь о :
Я говорю например статистике, я говорю например о data-science, я говорю например о machine-learning.

Если имеется «промышленные системы с нагрузкой», то наверно, невпадло и забашлять за что то типа :
ru.wikipedia.org/...on_Analytics#Revolution_R
Пошустрее питона буит, правда стоит 999 бачинских за год:) Но всяко дешевле тех же SASa и SPSSa....
Да мне хоть одного б найти :) Есть вопросы меня интересующие :(
Именно.
Я говорю например статистике, я говорю например о data-science, я говорю например о machine-learning.
и промышленных системах, которые используют это в больших объёмах.

P.S. Спасибо за наводку на «конкурентов», узнаем о них по лучше :)

raw.githubusercontent.com/...ster/2-rf/x-plot-time.png
:) Ну и ? Там вася заюзал обычный «случайный лес» из одноименного пакета «Эр», а потом начал сравнивать с моделью намученой с «Н2О» ? Это насколько надо быть упоротым :
1) Функция «Эр» из этого пакета использует одно ядро проца.
2) Обьект класса «случайный лес» содержит куеву тучу дополнительных параметров, таблиц и т.д. поэтому обьект жирный немеряно (но это облегчает усовершенствование самой модели). Понятно что лес из 500 деревьев над датой в 1000 переменных на 1М наблюдений не влез в оперативу.
3) Он тупо юзает функцию нихера не оптимизировав. Неизвестно вообще его датасет (например лес посасывает в бинарной классификации со стандартными настройками если один класс слишком большой. Надо взвесить классы. Важность переменных «тру» не поставил и т.д.)
4) Сомнительно оценивать качество модели под площадью под кривой. Надо было заюзать проверочную выборку.

Ну и последнее :

А что мешает заюзать Н2О или xgboost, если впадло ждать ? Ведь все равно это, можно сказать, тоже «Эр» :) Просто джава машину установи и скачай пару пакетов к «Эру», как это сделал этот чел :)
Ведь у него весь код на долбаном «Эре» же и написан :)


library(h2o)
h2oServer <- h2o.init(max_mem_size="60g«, nthreads=-1)

Да, поздравляю «xgboost» что он порвал всех в скорости. Это было не сложно, с такими то библиотеками «Эра» :


library(readr)
library(ROCR)
library(xgboost)
library(parallel)
library(Matrix)

:))))

на недостаток пистона — его динамическую типизацию.
ребята, не стоит дискуссировать с таким человеком. Как можно вести дискуссию если он считает, что «динамическая типизация — это недостаток ЯП». Кто не типизирует — тот москаль?

Ну опоненты за многие годы споров никаких внятных мыслей почему динамическая типизация хороша так ни одной и не выразили. Может ты попробуешь вместо того что бы набрасывать?

почему динамическая типизация хороша
Не надо ипать себе мозги с типами, когда это тебе совершенно не надо.
Не надо ипать себе мозги с типами, когда это тебе совершенно не надо.
Но в программировании оно всегда надо, если ты конечно не обезьяна с надеждой после 100млн итераций выдать работающую программу.
Но в программировании оно всегда надо
 Ну смотря что программируешь :) Если, например, делаешь интерактивный анализ данных / строишь модель / график крутой бацаешь, то лишний гемор с типами только во вред, ведь во всех этих случаях кода выходит на строчек 20-30 (вот почему для статы «питон» и «ар» рулят со своей динамической типизацией). Мало того там кучу своих приколов намучено, потипу :
вектор (1,2,3) + вектор (1, 2) = вектор (2, 4, 4)
и т.д.
Что очень упрощает некоторые вычисления, но выглядит бредовато...
о лишний гемор с типами только во вред, ведь во всех этих случаях кода выходит на строчек 20-30
Ужеж на примере со скалой выяснили что в статическом языке такая же фигня

Вот и выяснили: статическая строгая типизация больше подходит для средних-больших проектов, а динамическая лучше в мелких.

Нет, динамическая типизация лучше не подходит ни для каких проектов, не выяснилось никаких преимуществ ее перед статической.

Зацените пацаны, тут неосиляторы подтянулись

Я типо на пальцах с кусками кода обьяснил почему я так считаю, а тебе есть что сказать по теме?

Вижу только как ты снова пукнул в лужу, расписавшись за всю динамическую типизацию. Хотя, подобные сливы от тебя уже традиция...

Ну давай уже свои контраргументы, или «пукаешь в лужу» ты сам.

почему динамическая типизация хороша так ни одной и не выразили
может, потому и не выразили — что формулировка странная?
хороша-плоха, нравится-не нравится.
преимущество статической — упрощается статический анализ с ранним выявлением ошибок.
преимущество динамической — короче код, значит, читабельнее и понятнее.
если же, вдруг, речь о строгой-не строгой типизации, то, в принципе, то же самое «многословность и простота валидации vs краткость-простота»
олсо, в веб-ориентированном программировании, где в НТТР-заголовках всё суть строки, возможность написать $_GET[’pageId’]> 1 опять же — немногословность.
преимущество динамической — короче код, значит, читабельнее и понятнее.
Я оспариваю это мнение. Примеры в студию.

SomeLib::SomeNamespace::Shape area = new SomeLib::SomeNamespace::Rectangular();
UPD не, все фигня.
возьмите обобщенную реализацию qsort для статически типизируемых языков.
например, на С++ с его темплейтами.
или на java с generic’ами(сэмпл-велосипед: stackoverflow.com/...ction-sort-with-generics
и скажите мне, что нет, все эти замысловатые конструкции с <E extends Comparable<E>> никак не влияют на читаемость.
и что вызывать compareTo это намного очевиднее, чем a> b
а то мне это кажется странным.
PS а потом загляните в generics wildcards в Java. и скажите мне, что эти все ? super/? extends это не ради того, чтоб реализовывать код, не привязанный к конкретному типу. в языке со статической типизацией.

это вариант со статической типизацией? или чего?

да, переменная area имеет вполне конкретнуй тип, и если ты попытаешься ее приплюсовать к строке, то компиллер выдаст ошибку, если такая операция где то не определена конечно.

или на java с generic’ами
скажите мне, что нет, все эти замысловатые конструкции с E extends Comparable никак не влияют на читаемость.
В питоне тоже ж контракт где то запишут что аргументу нужно иметь реализацию какого то compare. Ну сделают это в доках, а потом будут обильно писать юнит тесты что бы отследить ошибки, сложность и нечитабельность только увеличится.
Ну сделают это в доках, а потом будут обильно писать юнит тесты что бы отследить ошибки
какие ошибки? типа отустствия набора необходимых методов? для того, чтоб определить отустствие каких-то методов надо писать сложные юнит-тесты? o’rly?
кстати, а как мне в статически типизируемом языке записать контракт, если мне нужен инстанс с реализацией IComparable и ISerializable?
function ...(... IComparable && ISerializable item...) ?
для того, чтоб определить отустствие каких-то методов надо писать сложные юнит-тесты?
Я не говорил «сложные», но все эти телодвижения подкидывают Г в систему.
кстати, а как мне в статически типизируемом языке записать контракт, если мне нужен инстанс с реализацией IComparable и ISerializable?
function ...(... IComparable && ISerializable item...) ?
stackoverflow.com/...ing-with-multiple-classes
Я не говорил «сложные», но все эти телодвижения подкидывают Г в систему.
тесты будут обращаться к методам, чтоб проверить логику. рантайм эррор «метод не найден» с зафейленным тестом мне кажется настолько же надежным и даже более информативным(по причине запуска остальных тестов), чем ошибка времени компиляции.
stackoverflow.com/...ing-with-multiple-classes
ага, фак зе систем
public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)
это же так просто и читаемо.
Collection#max.
тесты будут обращаться к методам, чтоб проверить логику. рантайм эррор «метод не найден» с зафейленным тестом мне кажется настолько же надежным и даже более информативным(по причине запуска остальных тестов), чем ошибка времени компиляции.
ладно, это сложная для дискуссии тема. Но факт заклучается в том что в джаве я это написал в определении функции, и все автоматически чекается, а в пистоне я это пишу в доке в надежде что кто-то ее полностью прочитает, плюс заморочки с тестами. Первый случай как минимум не сложнее чем второй.
ага, фак зе систем
Ну это заморочки джавы, к статической типизации по сути это отношения не имеет.
Ну это заморочки джавы, к статической типизации по сути это отношения не имеет.
ээээ, то есть, как?
а в каком тогда языке статическая типизация сразу по двум интерфейсам будет выглядеть нормально? чтоб читаемо и при этом — защищено от ошибок «ой, не там вставил < и теперь это все совсем о другом»?

Я не сильно шарю во всех статических языках, но никто ж не мешает написать T implements A,B или что то такое, просто в джаве до этого не доперли.

я не про декларацию типа.
я про указание типа аргумента в функции/методе.
что гораздо мощнее и важнее указания типа для локальной переменной(где как раз можно было бы динамическую/выводимую типизацию использовать — как в Скале).

Ну я тоже про нее: никто не мешает задизайнить статический язык в котором можно написать что то типа: <Т implements A,B> void do(List<t> l) ;

динамическую/выводимую типизацию использовать — как в Скале
Выведение типов это не динамическая типизация.
рантайм эррор «метод не найден» с зафейленным тестом мне кажется настолько же надежным и даже более информативным(по причине запуска остальных тестов), чем ошибка времени компиляции.
Кстати думаю что нет, ошибка в дебрях метода «переменная а не имеет метода» не так информативна как «параметр должен имплементировать интерфейс.»
НУ и еще учти тот факт что в мире есть куча гавнокода слабо покрытого тестами, и куча программистов которые его непрерывно рожают
НУ и еще учти тот факт что в мире есть куча гавнокода слабо покрытого тестами, и куча программистов которые его непрерывно рожают
вот здесь — данунафиг. где-то(кажись, на Хабре) попадался мне офигительный опус в духе «статическая типизация не решает проблему кривого кода: если у вас нету тестов/они хилые — вы в жопе независимо от типизации; и наоборот».
ссылку не найду, потому пересказываю в духе «Рабинович напел». И тут я полностью поддерживаю это утверждение.

та ну. в каком это мире статическая типизация отлавливает то, что не проверяется тестами? или может, юнит тесты не могут кроме логики проверять аргументы/результат на соответствие контракту? выше ж обсуждали уже.

Мы тут как бы обсуждаем тему кода без тестов, и вот статическая типизация позволяет избежать в нем туеву хучу ошибок, и очень просто рефакторить.

и очень просто рефакторить.
речь о переименовании метода?
или о выделении части логики в отдельную иерархию(ну, «стратегия»)?
или про что?

Про все, джава айде имеет кучу возможностей для рефакторинга, и то что ты написал, и многое другое, и при этом все делается парой кликов мышки и код не ломается от слова совсем.

и то что ты написал, и многое другое
воу-воу, шо-то не видел. можно примеры?
www.jetbrains.com/...res/code_refactoring.html как бы ничего похожего на «отрефакторить общий код в шаблонный метод родительского класса».

Про шаблонный ты ничего выше не писал. Остальное — вытащить кусок кода в метод, и перенести его в родительский класс, или создать этот класс если он не существует там вроде есть.

а до этого я писал про стратегию.
это структурный рефакторинг, выделить кусок кода в отдельный метод — IDEA такое и с JS может. всякие extract param/method и прочее.
и даже нюанс — вынесение в родительский класс — не впечатляет, так как в JS прототипное наследование. соответственно, менять прототип бесконтрольно автоматически — не лучшая идея.

Ок, может я не понял твою изначальную мысль, и не в курсе можно ли такое сделать, просто потому что никогда не пробовал. Но у языков с динамической типизацией возникают проблемы при рефакторинге при элементарном переименовании метода, просто потому что IDE не знает какая переменная имеет какой тип, и непонятно какие вызовы переименовывать а какие нет.

есть простое решение — полнотекстовый поиск.
впрочем, конкретно IDEA это делает как-то хитрее, потому что я редко получаю много ложных срабатываний.
может, jsdoc помогает, не знаю.
а изначальная мысль была — что со структурным рефакторингом статическая типизация никак не поможет.

изначальная мысль была — что со структурным рефакторингом статическая типизация никак не поможет.
Почему, может, у ИДЕ есть вся необходимая информация, просто твой случай видимо слишком редкий что бы им заморачивались.

www2.warwick.ac.uk/...earch/reed/rexercises.pdf

Реши любую задачу из примера что б код был короче и понятнее, чем это делается на, например, R...

Реши любую задачу отсюда на эр читабельнее чем на скале: pavelfatin.com/scala-for-project-euler

Скала :


val r = (1 until 1000).view.filter(n => n % 3 == 0).sum
Р :

x<-sum (as.numeric (which (1:1000 %% 3==0)))

?

А где там сумма? Ну и в скале можно записать: val r = (1 until 1000).filter(_ % 3 == 0).sum. Где то одинаково получается.за исключением что в R все эти :,% и т.д. не добавляют читабельности.

о, кстати, а где это Скала статически типизируемая?

val r = (1 until 1000).view.filter(n => n % 3 == 0).sum
где здесь типы?
у неё смешанная система: все, что можно определить по коду — не требует объявления типов.
но так же работает type hinting в PHP — если его явно указывать, при несоответствии типов параметров будут эрроры и все дела. но РНР не становится это этого статически типизируемым. или становится?

Я на скале не пишу, но думаю что это просто «вывод типов». Типа упрощает код...Ты ж не можешь потом этой переменной присвоить строку символов, значит типизация статическая... хз, я не шарю что такое «смешаная типизация» :)

.Ты ж не можешь потом этой переменной присвоить строку символов,
это относится к «строгая-не строгая» или «сильная-слабая»

Нет, это именно статическая типизация.

да, лажанул.
ой, лажанул-так лажанул.
только ща допер.
для меня «статическая типизация» — это про явное объявление типов переменных. а ведь, статическая типизация только о том, что после связывания нельзя запихнуть значение другого типа.
то есть, получается, мы ща тут спорим о том, что
some_var = 2; some_var = "sss";
должно или не должно выдавать ошибку компиляции/рантайм ошибку?
и все?
и как это застрахует нас, например, от присваивание NULL в переменную классового типа?
ох ты ж, в шо я влез-то :(

NULL это отдельная тема. Егоможет и вовсе не быть в языке, как и связанными с ним проблемами.
Не зря нул в джаве называют billion dollar mistake.

для меня «статическая типизация» — это про явное объявление типов переменных. а ведь, статическая типизация только о том, что после связывания нельзя запихнуть значение другого типа.
Явное обьявление типов это тоже отдельная тема компромисов. В джавку много раз пытались пропихнуть выведение типов, и даже Гослинг лично засылал патч, но после многих споров решили оставить как есть, потому что типа в промышленном программировании так легче читать код, когда пишешь var r = f(); читателю очень тяжело понять какого же типа переменная f.
о, кстати, а где это Скала статически типизируемая?
В примере выше когда ты пишешь 1, скала знает что это Int, и потом использует соответствующие типы в дженериках функций, и в результате r имеет тип Seq[Int] или что то такое.

Могут привести свой пример из практики.
Вот есть 10 серверов которые построены на одном code base. Они поставщики вебсервисов. Есть один потребитель этих сервисов. С точки зрения поставщиков, они все предоставляют разные типы. С точки зрения потребителя они поставляют один тип, поскольку свойства и методы в этих вебсервисах совпадают. Чтобы разрулить красиво эту ситуацию в коде потребителя используется кейворд dynamic из .NET, который недавно ввели.

Ну опоненты за многие годы споров никаких внятных мыслей почему динамическая типизация хороша так ни одной и не выразили.
...но суровых теоретиков не смущали очевидные факты...

вы как-то не заметили сколько работающего кода написано на ЯП с динамический типизацией :)

Процитирую, сам на том стою много лет, и на доу уже писал не раз:

Главная и единственная цель ЯП.

Язык можно адекватно оценить только с одной лишь целью — производство.

Производство — это когда мы знаем что мы должны сделать (хотя и не можем знать как), имеем сроки и прочие ограничения, и имеем реальное вознаграждение / пенальти за результат или его отсутствие. Под такое определение подходит как реальное производство, так и, например, курсовая работа и оценка ка результат (ну я имею ввиду так, как оно должно быть).

Язык, как средство производства, должен обладать только одним свойством. Одним долбанным свойством, и все остальные не важны. То есть вообще не важны. Не важно есть ли у вас генерики или нет, и прочее, важно лишь влияние совокупности этих свойств на продуктивность. Инструмент производства должен повышать производительность команды в краткосрочной, среднесрочной, и долгосрочной перспективах. Всё.
Как я нашел лучший в мире язык программирования

так что если питон не может сдвинуть тот же PHP — значит пых для производства — лучше!

и с джавой — так. и со скалой, которая НЕ может сдвинуть джаву.

Всё.
остальное все — философия, или, что чаще — хфилософия.

...конечно, есть специальные случаи производства, где свойства ЯП дают преимущество.
например области где родился Erlang.
или — Haskell.
но это уже так, узорчики на общей картине.

Лень читать статью ту с хабра, скажите что лучший язык — JAVA, и хватит.

это вообще-то третья его статья из цикла.

скажите что лучший язык — JAVA, и хватит.
на основе количества кода работающих приложений — НЕ лучший.

хотя, где-то в первой 5ке.

Как я нашел лучший в мире язык программирования
офигительное эссе. спасибище за ссыль!

Я бы вступил в дискуссию, но не с троллем. Он знает свою тему, да. Но сам формат его сообщений таков, что на них имеет смысл отвечать только тогда, когда можно сформировать хорошее сообщение для других читающих, а не для него. Если перестанет вести себя как моська — можно будет и нормально поговорить.

А помоему это ты ведешь себя как моська и тролль, с переходами на личности и постулированиями крайне спорных выражений.

спасибо за подтверждение ;)

Внезапно в Python 3.5, вышедшем вчера, появился type hinting (куцый кстати был с 3.0 версии) с поддержкой дженериков прямо как в жабке с сисярпом, который резко повышает удобство отлова ошибок связанных с типизацией на этапе компиляции исходника в байт-код. Вот почитайте —
www.python.org/dev/peps/pep-0483
www.python.org/dev/peps/pep-0484

По поводу однопоточности — вынужден отметить, что многопоточный подход прежде всего, сам по себе является источником ещё большего количества ошибок, нежели динамическая типизация; кроме этого, часто многопоточность тащат туда, где она и вовсе не нужна — например, в веб-приложения, вы же согласитесь, что писать веб приложение, которое запускает больше одного потока на процесс — дикий моветон ?

Внезапно в Python 3.5, вышедшем вчера, появился type hinting (куцый кстати был с 3.0 версии) с поддержкой дженериков прямо как в жабке с сисярпом, который резко повышает удобство отлова ошибок связанных с типизацией на этапе компиляции исходника в байт-код. Вот почитайте —
Ну вот через 100 лет, когда все перелезут на 3-ю ветку питона, все либы и фреймворки перепишут с использованием типов и дженериков, тогда и поговорим. Хотя к тому времени миром будет повелевать сильный АИ, и программисты будут не нужны.
По поводу однопоточности — вынужден отметить, что многопоточный подход прежде всего, сам по себе является источником ещё большего количества ошибок
Это смотря как его готовить
апример, в веб-приложения, вы же согласитесь, что писать веб приложение, которое запускает больше одного потока на процесс — дикий моветон ?
Шутниг что ли? А как твоя вебапликушка будет обрабатывать Х0 паралельно идущих запросов? Типа говорить рефрешните страницу, на меня навалилось сейчас слишком много клиентов?
А как твоя вебапликушка будет обрабатывать Х0 паралельно идущих запросов?
По очереди, разумеется, как и положено конечному автомату.
Шутниг что ли? А как твоя вебапликушка будет обрабатывать Х0 паралельно идущих запросов
www.quora.com/...h-a-single-worker-process

Он это делает не по очереди, а асинхронно.

Нгинкс это пингопонг сервер, ему очевидно не нужно посылать блокирующие запросы к БД например.

А зачем посылать блокирующие запросы к БД ? В этом есть некий сакральный смысл ? Вот никак не могу представить себе задачу из реальной практики, условия которой запрещают общение веб-приложения со сторонним сервисом в неблокирующем стиле.

Например отсутствие неблокирующих драйверов к бд, например у оракла.

Использовать глючную ретроградскую БД с проприетарным протоколом это лютое ССЗБ же. Так-то если б не закрытость протокола, я ответил бы — «напишите драйвер», а вот ораклофанбои очень сильно ограничивают разработчика в выборе инструментов, это да.

Это оракл по сравнению с майсиквелом глючный? Насмешил.
Ну и твой клевый майскл неблокирующий драйвер поддерживает например ту фейз комит менеджер транзакций? Или все ручками?

У меня есть клёвый postgres, который таки да, поддерживает с десяток лет уже.
Не стоит ёрничать, заниматься казуистикой и пытаться сравнить mySQL и Oracle, у них совсем разные области применения. Но вот postgres заруливает oracle абсолютно везде — начиная от совокупной стоимости владения ©, заканчивая отношением вендора/сообщества к поддержке third party приложений. И если ваши архитекторы настолько тыртырпрайзны, что решили использовать Oracle — могу только посочувствовать.

У меня есть клёвый postgres, который таки да, поддерживает с десяток лет уже.
Поддерживает что?
Не стоит ёрничать, заниматься казуистикой и пытаться сравнить mySQL и Oracle, у них совсем разные области применения.
Сам ты занимаешься ерничанием и казуистикой.
Но вот postgres заруливает oracle абсолютно везде — начиная от совокупной стоимости владения ©, заканчивая отношением вендора/сообщества к поддержке third party приложений.
Кто подсчитал совокупную стоимость владения? В каком нибудь из бенчмарков вот здесь постгрес победил? www.tpc.org
Чем меряли отношения вендора к третьесторонним приложениям?
Поддерживает что?
Вы же про высокоуровневую обёртку в язычке над prepare transaction .. commit prepared .. rollback prepared спрашивали, да ещё и над неблокирующим соединением ? В psycopg давно есть.
Сам ты занимаешься ерничанием и казуистикой.
Так быстро переходите на «ты». Ах да, это доу же.
Кто подсчитал совокупную стоимость владения? В каком нибудь из бенчмарков вот здесь постгрес победил? www.tpc.org
Гуглите Enterprise DB, у них на эту тему оч много понаписно.
Чем меряли отношения вендора к третьесторонним приложениям?
Хотя бы отсутствием-наличием задокументированного протокола общения с БД. На этом можно закончить.
Вы же про высокоуровневую обёртку в язычке над prepare transaction .. commit prepared .. rollback prepared спрашивали, да ещё и над неблокирующим соединением ? В psycopg давно есть.
Ну да, есть что-то подобное дистрибьютед JTA/JTS как в джаве?
Так быстро переходите на «ты». Ах да, это доу же.
Ты такой ранимый?
Гуглите Enterprise DB, у них на эту тему оч много понаписно.
Ну слив так слив.
Хотя бы отсутствием-наличием задокументированного протокола общения с БД. На этом можно закончить.
Есть отлично задокументированный АПИ драйвера, зачем разработчикам сторонних средств лезть в бинарный протокол?

В детстве дети меряются у кого папа круче, а потом вырастают программистами и меряются у кого база данных круче :)

А ты уже узнал в чем смысл жизни и как правильно?

В сырах смысл жизни. Ведь к этому все мы стремимся, или кто уже дошел — к возможности покупки дорогих сыров.

github.com/openresty вот эта штука кстати используется в том числе для общения с БД прямо из воркер-процесса Nginx (умеет правда только redis и mysql)

Это проблема только если нужно переключаться, я однажды на Си такое написал

if (cond)
   foo1();
   foo2();
и долго не мог понять почему у меня код работает как-то странно.

там можна написати
if ( a=b)
а потім довго втикати

почему у меня код работает как-то странно.

-Wall такую ошибку ловит, а оформление блоков кода в стиле пайтона — нет.

Так это принципиальный дефект именно сишного синтаксиса. Там много аналогичных ситуаций, например, такая хрестоматийная хохма:


if (cond1)
  if (cond2)
    action1;
else
  action2;

человеку видится тут одно, а компилятору — совсем другое.

Аналогичные проблемы были в Паскале, и Вирт в следующих своих разработках (Модула-1,2,3, Оберон), вылечил это путём чуть большей многословности. Обязательное закрытие конструкций if/while/etc. — черта многих языков. Но чума сишного стиля оказалась сильнее.

Кстати, не отменяя сишных скобок, это можно вылечить чуть большей многословностью в обычных ситуациях. Определим синтаксис так:


if ::= "if" "(" condition ")"
  block
  [if-elif-repetition]
  ["else" block]
  ";"

if-elif-repetition ::= "elif" "(" condition ")"
  block
  [if-elif-repetition]

block ::= statement | "{" statement-sequence "}"

statement-sequence ::= statement [statement-sequence]

В результате получится, что обычный однопутный if надо писать:


if (x == 0)
  ++zeros;;

тут первый ’;’ завершает оператор вложенного блока, второй — весь if. Но сразу видно, что никаких elif или else дальше к этому блоку не будет. Одна ’;’ - крошечная цена для такого результата.
Разумеется, можно второй вынести на отдельную строку.
(#define end ; для тех, кому так удобнее)

То же с блоком:


if (x == 0) {
  ++zeros;
};

закрывающая ’;’ принципиальна.

Тогда и показанный выше пример с неправильно повешенным else невозможен, потому что для задуманной интерпретации надо будет писать


if (cond1)
  if (cond2)
    action1;;
else
  action2;;

а для неправильной -


if (cond1)
  if (cond2)
    action1;
else
  action2;;;

Кроме того, можно будет в конструкции привернуть такие вкусности, как else для цикла (в Питоне это означает код, который выполняется, если цикл завершился не по break):


for (i = first; i != limit; ++i) {
  if (подходит(i)) {
    printf("нашёл\n"); break;
  };
} else {
  printf("ой что-то не могу найти\n");
};

на сейчас такое требует какого-то присвоения для передачи признака сработки наружу цикла (если это нельзя сделать собственно указателем на элемент, требуется отдельная переменная found).

В Питоне же такие конструкции уже принципиально расширяемы за счёт группировки отступами.

for (i = first; i != limit; ++i) {
if (подходит(i)) {
printf("нашёл\n"); break;
};
} else {
printf("ой что-то не могу найти\n");
};

Хоспади, как же я от этого имеративного г-на, за год успел то отвыкнуть :-)
Неужели пистон не уммет написать чтото типа
val item = (first untill limit).find(подходит(_)) println(item.fold("ой что-то не могу найти")("нашёл"))
?

С соответствующей библиотекой — можно. Пишется в час с перекурами. Но зачем?

Но зачем?

А вы попробуйте отказаться от форов и ифов, и писать вот так. Через некоторое время заметите что форы с ифами вызывают зуд и дискомфорт.

Я писал 6 лет на Erlang; я писал на LISP; я писал на Питоне и не только в максимально функциональном стиле; и мой вывод — нет, нету какого-то явного зуда и дискомфорта.
Да, укладка семантики типа «найти первый из», «переделать все элементы набора», etc. на функциональный стиль — явные find_first_of, map, etc. — прямее. Но достаточно много случаев находится, когда такая укладка хуже (например, путаные условия, необходимость каких-то усложнённых сравнений, анализ соседей по списку, etc.), а часто дороже (даже если сверх-умный компилятор сам внутри себя превращает вызовы таких псевдофункций в циклы, он не все случаи адекватно сконвертирует).
А вообще, какое это отношение имеет к удобству самих конструкций?

item = (подходит(i) for i in first).next()
:)
ну и если не нашло — вылетит StopIteration
Неужели пистон не уммет написать чтото типа
Ну можно так, например:
print(next(("нашёл" for i in range(first, limit) if подходит(i)), "ой что-то не могу найти"))
Или так:
print("нашёл" if any(подходит(i) for i in range(first, limit)) else "ой что-то не могу найти")
Короче, не без боли, но писать в функциональном стиле на нем можно.
________
val item = (first untill limit).find(подходит(_)) println(item.fold("ой что-то не могу найти")("нашёл")) 

Это кто, Scala?

ЗЫ. тред не читал, мимо проходил.

а використання завжди фігурних дужок — так

На си вполне можно написать вот так
if( cond ) foo1(), foo2();

без пистонов — это довольно редкая ошибка :-)

Согласен, начудить можно на любом ЯП.
Но в вашем случае с С/С++. ->
Текстовый редактор сразу подскажет, что foo1 относится к условию ,а foo2 — уже нет. То есть оператор «;» есть первостепенным по отношению к отсупам и любой редактор вам это сможет подсказать.
В случае с пайтоном есть только отступы и никаких дополнительных операторов, и если ты что то с ними (отступами) напутал, то сиди сам разбирайся, никакие редакторы/статические анализаторы тебе не в помощь.

То есть оператор «;» есть первостепенным по отношению к отсупам и любой редактор вам это сможет подсказать.

Какой редактор и как именно подскажет это?

и если ты что то с ними (отступами) напутал, то сиди сам разбирайся, никакие редакторы/статические анализаторы тебе не в помощь.

Помогают. Вы явно даже не пытались пробовать.

Тот случай, когда лучше бросить, чем привыкнуть. Питон действительно не лучший язык. И чем дальше, тем бросить будет сложнее.

Точно! Я уже много лет не могу бросить.

Аллен Карр, «Лёгкий способ бросить пайтон»

если код присылают по скайпу или копируем с какой то html страницы

Код можно выровнять вручную.
Если фрагмент кода настолько длинный, что его слишком долго выравнивать вручную, значит вы глобально что-то делаете не так.

Я извинясь, но иногда лучше не давать никаких советов/комментов, чем писать подобное —

Код можно выровнять вручную.
Я вот собственно этот топик и запостил, из за того, что синтаксис питона не позволяет создать автоматическое «выравнивание» кода с поломаным «lines indentation».

А почему не позволяет? Почему не написать парсер который будет высматривать двоеточия в конце строки — и после них начинать инденты? Правда остается вопрос — когда их заканчивать)
Как по мне — просто надо понять что да, инденты — это часть языка и смириться с этим. Забросить скайп и пользоваться pastebin. Или же уйти на любой скобочный язык. Или если так уж нравится питон, но не нравятся именно инденты(хотя сочетание странное) — написать свою оболочку которая будет их расставлять. Правда не думаю что другие питонисты оценят))
Вариантов-то масса!

Иногда лучше не признаваться на публике, что вы делаете copy/paste больших фрагментов кода из Skype. :-))

Это просто смехотворный наезд.

Во-первых, даже если синтаксис позволяет восстановление, то постоянно заниматься этим — дурная работа; лучше сразу использовать вменяемое средство.

Во-вторых, есть куча форматов, где начальные пробелы и табы имеют значение; даже классический Фортран этим отличался; куча ассемблеров; Makefile; Occam (откуда питоновые отступы и взяты); куча форматов типа wiki-разметки; markdown (файлы типа README.md); ряд конфигов; это только то, что с ходу вспомнилось. Во многих из них нельзя однозначно восстановить состояние до потери спейсинга. Почему такой акцент только на Питон?

В-третьих, «кто хочет — ищет метод, кто не хочет — ищет причину». Пусть даже надо передавать через дурь типа скайпового чата; делаем :%s/ /☂/g и передаём; обратно восстанавливается таким же инверсным действием. Вместо ☂ можно применить ☥, ☢, в общем, по вкусу :) или у вас все эти символы используются в программах? :)

во-первых, использовать скайп для передачи куска кода — это дилетанство низшего сорта. Специально для людей с такими потребностями есть pastebin.com, для передачи кода есть также git, в конце-концов использвать github issue для investigation с использование тега ```code_here
```
Даже на доу есть тег `code` а в скайпе нет. Короче, выглядит как проблемы индейца, серьёзно. Я понимаю если бы вы как с++ разработчик жаловались на отсутсвие ручного управления памяти, а тут просто детское «не буду одевать шапку, она колется».

если код присылают по скайпу или копируем с какой то html страницы
В чем вы правы, так это что пора сваливать из скайпа.
В интернете раскрашиватели кода прекрасно код и форматируют.
приносит разработчикам 2 мешка головной боли
Не приносит. А вот любители 14 конкурирующих стандартов отсеиваются прекрасно и дышать становится легче.

Сам пишу на питоне последний год после дюжины лет Perl/PHP/Java/Actionscript/Javascript/etc. Доволен как слон.

Это холивар буквально на пустом месте!

тут даже не холивар, в пеп8 чьотко прописано что пробелы.

C++ programmer
может в этом причина ?

Не думаю.
В мене з пітоном навіть такої думки як в ТС не появлялось.
Просто код тре пхати в zip, а тоді перекидати файл скайпом.
Мене більше РЕР 8 напрягає.

Я его творчески игнорирую;) имена функций и методов в mixedCase, пробелы вокруг ’=’ в списках аргументов.

Очень надеюсь что это не Ваш основной язык)) Как по мне ему не так тяжко следовать чтоб все было красивенько и понятно..

Очень надеюсь что это не Ваш основной язык))

Зря надеетесь. В течение 10 лет был основным для большинства проектов. Кстати, этот вариант стиля зачал не я, но мне он нравится больше, чем классика PEP8.

Как по мне ему не так тяжко следовать чтоб все было красивенько и понятно..

«Красивенько» меня не интересует. Понятно, эффективно и красиво — да, и это соблюдалось в огромных проектах.

Не холивара ради, а просто из интереса — а в чем разница между моим

красивенько и понятно
и вашим
Понятно, эффективно и красиво
. Ну кроме моей любви к уменьшительно-ласкательным формам?)
А вообще:
но мне он нравится больше, чем классика PEP8
Люди просто делятся на два типа — те которые считают что правила можно нарушать, и те, которые пытаются строго следовать им. Я явно отношусь ко второй категории. И когда я увидел ваш первый комментарий
Я его творчески игнорирую;)
я подумал что вы его вообще игнорите, а не следуете какой-то своей конвенции, не более.
а в чем разница

Наверно, таки в суффиксах :) Для меня «красивенько» это локальные завитушки, а «красиво» это эстетическая оценка конструкции в целом.

я подумал что вы его вообще игнорите, а не следуете какой-то своей конвенции, не более.

Неправильно подумали:) Я свой вариант правил оформил во всех подробностях (адаптация PEP8 только малая часть этих правил) и выложил во внутреннее вики.

имена функций и методов в mixedCase, пробелы вокруг ’=’ в списках аргументов.
повбивав би

Странно, PEP8 довольно адэкватен. Возможно, привыкли к другим языкам и их стандарты стали «родными».

Такова селяви. Когда создают эти языки, никто особо не задумывается о разработчиках. Добавляют кучу шифтовых символов, удлиняют идентификаторы и тд. Даже вот недавно разработчик стандарта веб признался что небыло никакой необходимости в аббревиатуре http, можно было чтото покороче придумать.

Слишком толсто.
Алсо, есть масса сервисов с помощью которых можно расшарить код. Зачем создавать себе лишнюю головную боль? Не нравится питон, не нравится его синтаксис — пишите на чем-то другом.

Не нравится питон, не нравится его синтаксис — пишите на чем-то другом.
Чесно говоря, с удовольствием бы...

ну так и? ЛинкдИн обновить фаервол не дает?

вакансий рубистов-похапистов выше крыши вроде

Підписатись на коментарі