Ух, я недавно портировал большой серьезный проект с Django 1.7 на Django 2.2. Соответственно, в процессе также с Python 2 на Python 3, и с django-haystack (никогда не используйте — кажется, что удобно, но на самом деле мертвый и очень корявый инструмент!) на голые запросы к ElasticSearch (elasticsearch-dsl).
Работа заняла около 6 месяцев, работал в основном один. Изначально кодовая база была разработана австралийской компанией. После этого проекта, мое мнение о качестве австралийских программистов упало ниже нуля. Это заслуживает отдельной статьи, а статьи я писать не имею права на этом сайте из-за кармы. Хотя понимаю, что это отдельно взятый случай, но все же там было такое, что волосы много раз на голове шевелились. И git blame показывает, что это не индусы, не китайцы, не вьетнамцы — чистокровные австралийцы, получившие образование в Австралии, многих я потом нашел на LinkedIn, чтобы в этом убедиться.
После миграции размер кода уменьшился приблизительно на 40%, но это потому что австралийцы очень любили методологию copy-paste.
Самое сложное было не миграция c py2 на py3, и даже не миграция между версиями Django — все это заняло процентов 20-30% времени. Сложнее всего было переписать весь адский код django-haystack на elasticsearch-dsl. Ну и поскольку переход длился долго, то неизбежно пришлось во время перехода еще и добавлять множество новой функциональности, так что отделить чистое время портирования, конечно, уже невозможно.
Тут пишут в комментариях критику Django, что в нем, дескать, то же самое, что есть и в других фреймворках. Не могу ответить из-за кармы всем. Но я уже очень давно пишу на Django, и при этом периодически поглядывал по сторонам.
Так вот, все то, что есть в других фреймворках, оно там появилось после того, как было реализовано в Django. А какие-то вещи до сих пор не реализованы.
Теперь то конечно удобно говорить: «Да это и в моем фреймворке есть». А вот было оно там 3 года назад? 5 лет, 10 лет назад? То-то и оно.
У меня не очень много опыта поиска людей — около года искал кандидатов и собеседовал на несколько разных должностей. Мои впечатления:
1) Очень много людей врёт в резюме. «Я знаю то, и то, и это, и мастерски поработал здесь, и над тем». На деле часто оказывается враньём или раздуванием из мухи слона. Исправил опечатку в start.sh скрипта, запускающего корпоративную CRM — в резюме пиши: «Эксперт в программировании на Java, Bash, ABAP».
2) Людей, в которых сочетаются как навыки хорошего написания кода и понимания систем, так и навыки грамотного общения, почти нет. Если кто-то принес очень красивое резюме, очень красиво говорит, со всеми хорошо общается, к каждому индивидуальный подход, то такой человек как разработчик часто оказывается хуже среднего.
Но это мой индивидуальный небольшой опыт. Просто, если объяснять, как надо писать резюме и проходить интервью, то такие фрукты получат оружие в свои руки. Пришел в одну компанию обманом и лестью, допустим, даже, что выперли через несколько месяцев, но зарплата ведь шла. Затем в другую компанию. Мир большой, можно всю жизнь так скакать, получая не заоблачную, но вполне комфортную зарплату.
Offtopic по поводу прикосновения… Думаю, как хорошо, что я не эмигрировал в Европу/США, хотя сильное желание когда-то было, и начинал какие-то подвижки в эту сторону.
Недавно познакомился с девушкой, которая несколько лет живет в Европе. Рассказывает мне, что в кафе к ней несколько раз подсаживались знакомиться. Явно польщена таким вниманием. И тут же говорит мне: «Попробовали бы они познакомиться так со мной в XXX! Там все уже выдрессированы, что даже смотреть в мою сторону нельзя!» WTF??? Потом она же жалуется на проблемы с отношениями в Европе.
Мне одному кажется, что здесь есть какое-то фундаментальное противоречие?.. Или уж позволять знакомиться и смотреть на себя, или не жаловаться на проблемы со знакомствами и отношениями.
По поводу конференции: интересно и грустно. Вроде бы нашел на YouTube запись, постараюсь найти время посмотреть.
Я сделал однозначный вывод для себя: все сервисы, предоставляемые корпорациями — зло. Они либо продают твои данные, либо в определенный момент прекращают предоставлять сервис, либо задирают цены до небес.
Иметь свой сервер дешевле и надежнее. Хотя понимаю, что такое решение не для всех — многим будет слишком сложно настроить собственный сервер.
Есть native клиент для Slack — не на Electron — Ripcord. Требует в 10 раз меньше ОЗУ (или еще меньше, грубо замерял на своем ноутбуке), почти не создает нагрузку на GPU и CPU (Slack непрерывно загружает CPU хотя бы на 2%), темная тема в комплекте.
Правда пока еще не привык им пользоваться, недавно установил. UI конечно не такой красочный, но вполне достойный.
Все как с санкциями за мнимое вмешательство в выборы. Вмешательства не нашли, однако санкции остались. Более того, собираются вводить новые санкции авансом, за вмешательство в будущие выборы.
Более того, ничего не рассказано о том, как искать утечки памяти, кроме общих слов.
Два раза в жизни я сталкивался с утечками памяти в приложениях на Python. Первый раз это был развесистый сайт на Django. Объем кода очень большой. Недельные поиски не увенчались успехом, было перепробовано все. Проблема была «решена» добавлением параметра, который рестартит воркеры после нескольких сотен запросов.
Второй раз это был не очень большой демон на Python. Потребление памяти росло очень быстро. Практически переписал его два раза, проверил каждую строчку, что нигде не создается циклических ссылок. Использовал все существующие инструменты для поиска утечек памяти. Так и не смог найти.
Так что толковая статья на эту тему не помешала бы. В теории оно все просто. На практике, приходится смотреть в дамп памяти, в котором находятся миллионы примитивных объектов, типа tuple, str, и понять, какие из них должны были быть освобождены, и откуда они вообще взялись, бывает очень сложно.
В обоих случаях подозрение падало на расширения на C. Но данные расширения используются многими проектами, и, насколько я понимаю, ни один из инструментов для поиска утечек в Python, не помогает, если память течет в расширении на C.
Я год прожил в Камбодже. Пол Пот пришел к власти при помощи США.
США во-первых поддерживали Францию в борьбе за сохранение контроля над колониями в ЮВА. Это не секретная информация, можно легко найти речи, в которых администрация США заявляет, что надо поддерживать Францию в борьбе с освободительными движениями в колониях, чтобы сохранить контроль над богатствами (это не цитата, если что, а пересказ по памяти, так как читал давно).
Во-вторых, США устроило не менее 20 (!) покушений на короля Камбоджи, и в итоге устроили государственный переворот, одним из последствий которого стал приход к власти Пол Пота.
И, кстати, они и далее режим красных кхмеров поддерживали, потому что им он был выгоден. Пол Пот нетерпимо относился к вьетнамцам, и США было выгодно иметь его в правительстве соседней с Вьетнамом страны.
Забавно, как переписку из «невзламываемого» и «неподкупного» Telegram использовали для шантажа президента Эквадора, чтобы он выдал Ассанжа. Ну и письма из GMail заодно.
С одной стороны, кнут в виде сданной товарищу майору переписки, с другой стороны — пряник в виде кредита.
Ну и обвинения, построенные на песке, в «самых справедливых» судах мира.
Судя по комментариям, я один считаю автора снобом?
Начнем с первого вопроса. Буду говорить о Python, так как считаю себя экспертом в Python. Пишу на нем около 20 лет (начинал тогда, когда в России о Python еще никто даже не слышал). Сделал на нем множество проектов самой различной сложности. От CLI утилит до сайтов до десктопных GUI приложений.
Когда я только начинал писать на Python, то проштудировал от корки до корки все, что шло в поставке: Python Tutorial, Python Reference (где описаны формальным языком все конструкции языка), Python Library Reference (а она в Python большая была уже тогда, не то, что отсутствующая stdlib в Javascript).
Конкретно помню, что я заучивал специально, например, таблицу приоритетов операторов.
И вот статья автора заставила задуматься: а что же вернет type(None). И хотя когда-то я наверное это знал, то сейчас пришлось полезть в консоль, чтобы узнать результат. Хотя это за 20 лет самых разных проектов ни разу мне не пригодилось и с вероятностью 100% никогда не пригодится. Более того, если я увижу этот вопрос спустя год, то скорее всего, мне снова придется лезть в консоль, потому что я уже не буду помнить. Потому что это ненужная в повседневной работе информация, и потому она будет вытеснена другой в течение месяцев.
Значит, по мнению автора, я всего-навсего джуниор?
Или вот точно помню, что учил таблицу приоритетов 20 лет назад. Смогу ли сейчас правильно выписать её по памяти? Уверен, что нет.
Сделал ли я за 20 лет хотя бы одну ошибку, вызванную неправильной расстановкой скобок из-за того, что не помню назубок таблицу приоритетов? Тоже нет.
Более того, представим, что автор статьи передал обязанность проводить собеседования кому-то другому на пару лет (и слава макаронному монстру за это!). Более того, он наконец решил перейти на нормальный язык программирования, пускай, Clojure, и два года писал только на этом языке. А затем вдруг решил перейти в другую компанию и вернуться к Javascript. Пришел на собеседование к копии самого себя двухлетней давности и получил те же самые вопросы. Сможет ли он пройти собеседование и не пасть позорно до джуниора споткнувшись на собственных же вопросах двухлетней давности?..
А если интервьюер еще попросит его привести формальные определения всех нормальных форм? Как в Javascript вычислить sha256? Приоритет операций?
Да существует миллион способов унизить собеседуемого и показать собственную немерянную крутость. Только не думаю, что это имеет отношение к разделению на джуниоров, миддлов и сениоров.
На мой взгляд, нет никакой проблемы изучения. Есть проблема мотивации. Я знаю вокруг себя множество примеров, когда люди годами учат язык на курсах, ездят в дорогостоящие лагеря, но не могут сказать или написать даже простейшую фразу.
Все потому что им это неинтересно. Они учат ради карьеры или потому что модно, или еще по какой-то причине, которая происходит не из их собственных желаний, а пришла извне. Поэтому учат через силу.
Я английский никогда не учил специально. Просто когда только увлекся компьютерами и программированием, многое было только на английском: интерфейс программ, книги, статьи, и так далее. Так без всякого напряжения и даже не осознавая (я никогда не считал, что учу язык или что мне надо его учить), у меня сложился базовый словарный запас, и постоянно рос. Без всяких курсов, учебников, методик. Мне просто было интересно программировать, а это было невозможно без базовых знаний английского.
Затем уже начал читать художественную литературу на английском. Когда появились фильмы без перевода, старался смотреть их.
В итоге, когда впервые столкнулся с носителями языка, неожиданно даже для себя обнаружил, что могу свободно говорить на любые темы.
А если человек не хочет что-то делать, если мотивации нет, то любые курсы и методики не сделают ничего… Я бы не был так категоричен, если бы не видел людей, которые потратили на разные методики годы времени и кучу денег...
Помимо всего, что уже написали, работать с Docker банально менее удобно. И непонятно зачем добавлять лишние сущности и уровни абстракции в данном конкретном случае. Кроме лишней возни это ничего не добавит.
Ну и бонусом идет, например, невозможность безопасной настройки LetsEncrypt в докере. Все решения, которые я видел, реализованы с открытием лазейки позволяющей выходить за пределы контейнера.
Вы не уникальны — у меня тоже четкое ощущение, что обучение вживую намного интереснее и эффективнее. Это живое общение, и общение с людьми, которых в обычных обстоятельствах скорее всего не встретишь. Еще заметил, что когда целый день работаешь перед монитором — последнее, что хочется делать дома после работы — торчать еще 1-2 часа перед опостылевшим экраном.
Плюс по своему небольшому опыту попыток обучения на различных MOOC платформах, у меня сложилось впечатление, что все это конечно интересно и нужно, но эффективность таких методов обучения намного меньше, чем традиционных.
В общем, считайте меня луддитом и ретроградом, но если я захочу подтянуть свой испанский или изучить какой-нибудь другой язык, то однозначно выберу курсы в реале с живыми людьми. Онлайн курсы буду рассматривать только в качестве необязательного дополнения.
Выскажу крамольную здесь мысль: мне кажется, это фундаментальный недостаток капитализма и человеческой природы. Люди и компании стремятся к максимизации прибыли. Если компания не расширяется до бесконечности, выживая всех конкурентов и выжимая последнюю копеечку из каждого пользователя (сюда же относится цена по запросу: с бедного копеечку, с богатого миллион — все за один и тот же продукт), то она проиграет борьбу более шустрым и менее принципиальным конкурентам.
Вспоминается, например, Microsoft, который душил любую конкуренцию на корню, поскольку мог бомбить конкурентов просто сбрасывая на голову контейнеры с деньгами. Какие изощренные пасквили писал Microsoft про Linux! Но вот получилось, что если компанию конкурента можно купить и убить, то с Open Source так не получается — покупать нечего. Последнее, что вспоминается — атака на Linux через третье лицо — SCO (кстати, это очень интересная история с гораздо большим количеством смыслов, чем на поверхности).
Зато теперь Microsoft — лучший друг Linux. Не смогли убить в зародыше, теперь попытаемся возглавить.
Или Google, который казался каким-то глобальным борцом за все хорошее против всего плохого. И во что он превратился сейчас?..
И любая коммерческая соц. сеть будет стремится к тому же самому. Увы, рано или поздно даже Хабр до этого дойдет, так как тоже является коммерческой организацией с единственной целью: максимизация прибыли.
Практически одновременно к этому юбилею, делаю попытки уйти с GMail. Мне не нравится централизация всего Web в руках одной компании и попытки закуклить все на себе. Мне категорически не нравится собирание всех данных обо мне (раньше было все равно, но постепенно отношение меняется к резко отрицательному).
Пытаюсь поднять собственный сервер, уже делал это для клиентов, работает годами, хотя в самом начале были сложности (сейчас большая проблема сделать так, чтобы GMail не отфильтровывал ваши письма). Если не получится, то просто перееду к какому-нибудь конкуренту даже если придется за это платить.
Выше одной строкой уже упомянули, а я немного разверну. Что мешает использовать .po файлы и огромный развитой инструментарий gettext?
Когда я вижу переводы в Excel, у меня аж скулы начинает сводить. Потому что каждый проект, где использовались такие переводы, был болью. Сильной непрекращающейся болью. И сколько не автоматизируй этот ужас, легче не станет.
Совсем недавно в одном таком проекте заменил переводы через Excel на gettext, развернул weblate для переводчиков. Во-первых, все стали намного меньше тратить времени на возню с переводами. Во-вторых, перестали теряться переводы, что очень не нравилось переводчикам (никому не нравится заново переводить одно и то же несколько раз из-за несовершенства инструмента).
Поэтому решительно не понимаю, зачем люди в 2019 году строят велосипеды с квадратными колесами… И ладно бы уперлись в ограничения gettext (а таковые есть), так нет, просто с самого начала стреляют себе в ногу.
Работать в мужских коллективах нелегко. Нередко они матерятся, неприлично шутят или делятся при тебе интимными подробностями личной жизни
Вообще-то, я много раз встречал девушек из самых разных слоев общества, виртуозно матерящихся, неприлично шутящих, и делящихся интимными подробностями личной жизни. И что? Или девушкам можно? А вот большинству сотрудников IT-компаний все это совершенно не свойственно, независимо от пола.
Кроме этого много странного в статье… Ну и просто не верится. Я знаю несколько девушек, танцующих в клубах. Это своеобразная жизнь (мягко говоря), куда не пойдет человек, у которого есть задатки для IT. А если вдруг пошел, то 10 лет в этой профессии наложат очень серьезный отпечаток на личность.
Поэтому я автору просто не верю. Не бывает такого, это похоже на какую-то статью-провокацию.
Недостатки Javascript. Позволяет, нет, скорее провоцирует, писать нечитаемый код. На Javascript можно писать читаемый код. Но с большой вероятностью будет написан нечитаемый, потому что в первом случае надо прилагать значительные усилия, а во втором — нет.
В языке отсутствует стандартная библиотека. Отсюда эти кошмарные npm, сотни зависимостей даже для "Hello world", тысячи и десятки тысяч для любого нетривиального. Все это обновляется по нескольку раз в день. С изменениями в API. С конфликтами версий. С необходимостью регулярно вникать что там поломалось и почему.
Недавно я с обеда пришел и за время проведенное на обеде (1 час), какая-то зависимость сменила две версии. Я не шучу… Надо было сделать скриншот.
На мой взгляд, это кошмар.
Но вообще эту тему можно долго продолжать. Просто и так уже на несколько минусов наговорил и использовал единственную возможность что-то сказать за день.
По сути статьи мне сказать нечего… Мне кажется, каждый инструмент имеет область применения. Сложно придумать правила на все случаи жизни. Копья по поводу исключений ломаются десятилетиями...
Конкретно по поводу вашего кода могу сказать, что читается очень тяжело. Эти громоздкие строки логирования и названия переменных… Я считаю, что писать тип переменной в ее названии (list_, str_) — антипаттерн. Названия становятся громоздкими и менее читаемыми. А от отсутствия проверки типов это все равно не спасет.
И еще, вместо logger.error лучше использовать logger.exception — он сразу напечатает исключение и traceback.
Ух, я недавно портировал большой серьезный проект с Django 1.7 на Django 2.2. Соответственно, в процессе также с Python 2 на Python 3, и с
django-haystack(никогда не используйте — кажется, что удобно, но на самом деле мертвый и очень корявый инструмент!) на голые запросы к ElasticSearch (elasticsearch-dsl).Работа заняла около 6 месяцев, работал в основном один. Изначально кодовая база была разработана австралийской компанией. После этого проекта, мое мнение о качестве австралийских программистов упало ниже нуля. Это заслуживает отдельной статьи, а статьи я писать не имею права на этом сайте из-за кармы. Хотя понимаю, что это отдельно взятый случай, но все же там было такое, что волосы много раз на голове шевелились. И
git blameпоказывает, что это не индусы, не китайцы, не вьетнамцы — чистокровные австралийцы, получившие образование в Австралии, многих я потом нашел на LinkedIn, чтобы в этом убедиться.После миграции размер кода уменьшился приблизительно на 40%, но это потому что австралийцы очень любили методологию copy-paste.
Самое сложное было не миграция c py2 на py3, и даже не миграция между версиями Django — все это заняло процентов 20-30% времени. Сложнее всего было переписать весь адский код django-haystack на
elasticsearch-dsl. Ну и поскольку переход длился долго, то неизбежно пришлось во время перехода еще и добавлять множество новой функциональности, так что отделить чистое время портирования, конечно, уже невозможно.Тут пишут в комментариях критику Django, что в нем, дескать, то же самое, что есть и в других фреймворках. Не могу ответить из-за кармы всем. Но я уже очень давно пишу на Django, и при этом периодически поглядывал по сторонам.
Так вот, все то, что есть в других фреймворках, оно там появилось после того, как было реализовано в Django. А какие-то вещи до сих пор не реализованы.
Теперь то конечно удобно говорить: «Да это и в моем фреймворке есть». А вот было оно там 3 года назад? 5 лет, 10 лет назад? То-то и оно.
У меня не очень много опыта поиска людей — около года искал кандидатов и собеседовал на несколько разных должностей. Мои впечатления:
1) Очень много людей врёт в резюме. «Я знаю то, и то, и это, и мастерски поработал здесь, и над тем». На деле часто оказывается враньём или раздуванием из мухи слона. Исправил опечатку в
start.shскрипта, запускающего корпоративную CRM — в резюме пиши: «Эксперт в программировании на Java, Bash, ABAP».2) Людей, в которых сочетаются как навыки хорошего написания кода и понимания систем, так и навыки грамотного общения, почти нет. Если кто-то принес очень красивое резюме, очень красиво говорит, со всеми хорошо общается, к каждому индивидуальный подход, то такой человек как разработчик часто оказывается хуже среднего.
Но это мой индивидуальный небольшой опыт. Просто, если объяснять, как надо писать резюме и проходить интервью, то такие фрукты получат оружие в свои руки. Пришел в одну компанию обманом и лестью, допустим, даже, что выперли через несколько месяцев, но зарплата ведь шла. Затем в другую компанию. Мир большой, можно всю жизнь так скакать, получая не заоблачную, но вполне комфортную зарплату.
Offtopic по поводу прикосновения… Думаю, как хорошо, что я не эмигрировал в Европу/США, хотя сильное желание когда-то было, и начинал какие-то подвижки в эту сторону.
Недавно познакомился с девушкой, которая несколько лет живет в Европе. Рассказывает мне, что в кафе к ней несколько раз подсаживались знакомиться. Явно польщена таким вниманием. И тут же говорит мне: «Попробовали бы они познакомиться так со мной в XXX! Там все уже выдрессированы, что даже смотреть в мою сторону нельзя!» WTF??? Потом она же жалуется на проблемы с отношениями в Европе.
Мне одному кажется, что здесь есть какое-то фундаментальное противоречие?.. Или уж позволять знакомиться и смотреть на себя, или не жаловаться на проблемы со знакомствами и отношениями.
По поводу конференции: интересно и грустно. Вроде бы нашел на YouTube запись, постараюсь найти время посмотреть.
Я сделал однозначный вывод для себя: все сервисы, предоставляемые корпорациями — зло. Они либо продают твои данные, либо в определенный момент прекращают предоставлять сервис, либо задирают цены до небес.
Иметь свой сервер дешевле и надежнее. Хотя понимаю, что такое решение не для всех — многим будет слишком сложно настроить собственный сервер.
Есть native клиент для Slack — не на Electron — Ripcord. Требует в 10 раз меньше ОЗУ (или еще меньше, грубо замерял на своем ноутбуке), почти не создает нагрузку на GPU и CPU (Slack непрерывно загружает CPU хотя бы на 2%), темная тема в комплекте.
Правда пока еще не привык им пользоваться, недавно установил. UI конечно не такой красочный, но вполне достойный.
Все как с санкциями за мнимое вмешательство в выборы. Вмешательства не нашли, однако санкции остались. Более того, собираются вводить новые санкции авансом, за вмешательство в будущие выборы.
Аналогичная история и с Huawei.
Такая вот честная конкуренция.
Более того, ничего не рассказано о том, как искать утечки памяти, кроме общих слов.
Два раза в жизни я сталкивался с утечками памяти в приложениях на Python. Первый раз это был развесистый сайт на Django. Объем кода очень большой. Недельные поиски не увенчались успехом, было перепробовано все. Проблема была «решена» добавлением параметра, который рестартит воркеры после нескольких сотен запросов.
Второй раз это был не очень большой демон на Python. Потребление памяти росло очень быстро. Практически переписал его два раза, проверил каждую строчку, что нигде не создается циклических ссылок. Использовал все существующие инструменты для поиска утечек памяти. Так и не смог найти.
Так что толковая статья на эту тему не помешала бы. В теории оно все просто. На практике, приходится смотреть в дамп памяти, в котором находятся миллионы примитивных объектов, типа tuple, str, и понять, какие из них должны были быть освобождены, и откуда они вообще взялись, бывает очень сложно.
В обоих случаях подозрение падало на расширения на C. Но данные расширения используются многими проектами, и, насколько я понимаю, ни один из инструментов для поиска утечек в Python, не помогает, если память течет в расширении на C.
Я год прожил в Камбодже. Пол Пот пришел к власти при помощи США.
США во-первых поддерживали Францию в борьбе за сохранение контроля над колониями в ЮВА. Это не секретная информация, можно легко найти речи, в которых администрация США заявляет, что надо поддерживать Францию в борьбе с освободительными движениями в колониях, чтобы сохранить контроль над богатствами (это не цитата, если что, а пересказ по памяти, так как читал давно).
Во-вторых, США устроило не менее 20 (!) покушений на короля Камбоджи, и в итоге устроили государственный переворот, одним из последствий которого стал приход к власти Пол Пота.
И, кстати, они и далее режим красных кхмеров поддерживали, потому что им он был выгоден. Пол Пот нетерпимо относился к вьетнамцам, и США было выгодно иметь его в правительстве соседней с Вьетнамом страны.
Забавно, как переписку из «невзламываемого» и «неподкупного» Telegram использовали для шантажа президента Эквадора, чтобы он выдал Ассанжа. Ну и письма из GMail заодно.
С одной стороны, кнут в виде сданной товарищу майору переписки, с другой стороны — пряник в виде кредита.
Ну и обвинения, построенные на песке, в «самых справедливых» судах мира.
Судя по комментариям, я один считаю автора снобом?
Начнем с первого вопроса. Буду говорить о Python, так как считаю себя экспертом в Python. Пишу на нем около 20 лет (начинал тогда, когда в России о Python еще никто даже не слышал). Сделал на нем множество проектов самой различной сложности. От CLI утилит до сайтов до десктопных GUI приложений.
Когда я только начинал писать на Python, то проштудировал от корки до корки все, что шло в поставке: Python Tutorial, Python Reference (где описаны формальным языком все конструкции языка), Python Library Reference (а она в Python большая была уже тогда, не то, что отсутствующая stdlib в Javascript).
Конкретно помню, что я заучивал специально, например, таблицу приоритетов операторов.
И вот статья автора заставила задуматься: а что же вернет
type(None). И хотя когда-то я наверное это знал, то сейчас пришлось полезть в консоль, чтобы узнать результат. Хотя это за 20 лет самых разных проектов ни разу мне не пригодилось и с вероятностью 100% никогда не пригодится. Более того, если я увижу этот вопрос спустя год, то скорее всего, мне снова придется лезть в консоль, потому что я уже не буду помнить. Потому что это ненужная в повседневной работе информация, и потому она будет вытеснена другой в течение месяцев.Значит, по мнению автора, я всего-навсего джуниор?
Или вот точно помню, что учил таблицу приоритетов 20 лет назад. Смогу ли сейчас правильно выписать её по памяти? Уверен, что нет.
Сделал ли я за 20 лет хотя бы одну ошибку, вызванную неправильной расстановкой скобок из-за того, что не помню назубок таблицу приоритетов? Тоже нет.
Более того, представим, что автор статьи передал обязанность проводить собеседования кому-то другому на пару лет (и слава макаронному монстру за это!). Более того, он наконец решил перейти на нормальный язык программирования, пускай, Clojure, и два года писал только на этом языке. А затем вдруг решил перейти в другую компанию и вернуться к Javascript. Пришел на собеседование к копии самого себя двухлетней давности и получил те же самые вопросы. Сможет ли он пройти собеседование и не пасть позорно до джуниора споткнувшись на собственных же вопросах двухлетней давности?..
А если интервьюер еще попросит его привести формальные определения всех нормальных форм? Как в Javascript вычислить
sha256? Приоритет операций?Да существует миллион способов унизить собеседуемого и показать собственную немерянную крутость. Только не думаю, что это имеет отношение к разделению на джуниоров, миддлов и сениоров.
На мой взгляд, нет никакой проблемы изучения. Есть проблема мотивации. Я знаю вокруг себя множество примеров, когда люди годами учат язык на курсах, ездят в дорогостоящие лагеря, но не могут сказать или написать даже простейшую фразу.
Все потому что им это неинтересно. Они учат ради карьеры или потому что модно, или еще по какой-то причине, которая происходит не из их собственных желаний, а пришла извне. Поэтому учат через силу.
Я английский никогда не учил специально. Просто когда только увлекся компьютерами и программированием, многое было только на английском: интерфейс программ, книги, статьи, и так далее. Так без всякого напряжения и даже не осознавая (я никогда не считал, что учу язык или что мне надо его учить), у меня сложился базовый словарный запас, и постоянно рос. Без всяких курсов, учебников, методик. Мне просто было интересно программировать, а это было невозможно без базовых знаний английского.
Затем уже начал читать художественную литературу на английском. Когда появились фильмы без перевода, старался смотреть их.
В итоге, когда впервые столкнулся с носителями языка, неожиданно даже для себя обнаружил, что могу свободно говорить на любые темы.
А если человек не хочет что-то делать, если мотивации нет, то любые курсы и методики не сделают ничего… Я бы не был так категоричен, если бы не видел людей, которые потратили на разные методики годы времени и кучу денег...
Какой именно процент криптомошенников? 99.999%? 99.95?
При помощи ICO со всех наивных людей деньги выжали. Теперь переименовываем ICO и выходим на второй круг, так что ли?
Помимо всего, что уже написали, работать с Docker банально менее удобно. И непонятно зачем добавлять лишние сущности и уровни абстракции в данном конкретном случае. Кроме лишней возни это ничего не добавит.
Ну и бонусом идет, например, невозможность безопасной настройки LetsEncrypt в докере. Все решения, которые я видел, реализованы с открытием лазейки позволяющей выходить за пределы контейнера.
Вы не уникальны — у меня тоже четкое ощущение, что обучение вживую намного интереснее и эффективнее. Это живое общение, и общение с людьми, которых в обычных обстоятельствах скорее всего не встретишь. Еще заметил, что когда целый день работаешь перед монитором — последнее, что хочется делать дома после работы — торчать еще 1-2 часа перед опостылевшим экраном.
Плюс по своему небольшому опыту попыток обучения на различных MOOC платформах, у меня сложилось впечатление, что все это конечно интересно и нужно, но эффективность таких методов обучения намного меньше, чем традиционных.
В общем, считайте меня луддитом и ретроградом, но если я захочу подтянуть свой испанский или изучить какой-нибудь другой язык, то однозначно выберу курсы в реале с живыми людьми. Онлайн курсы буду рассматривать только в качестве необязательного дополнения.
Выскажу крамольную здесь мысль: мне кажется, это фундаментальный недостаток капитализма и человеческой природы. Люди и компании стремятся к максимизации прибыли. Если компания не расширяется до бесконечности, выживая всех конкурентов и выжимая последнюю копеечку из каждого пользователя (сюда же относится цена по запросу: с бедного копеечку, с богатого миллион — все за один и тот же продукт), то она проиграет борьбу более шустрым и менее принципиальным конкурентам.
Вспоминается, например, Microsoft, который душил любую конкуренцию на корню, поскольку мог бомбить конкурентов просто сбрасывая на голову контейнеры с деньгами. Какие изощренные пасквили писал Microsoft про Linux! Но вот получилось, что если компанию конкурента можно купить и убить, то с Open Source так не получается — покупать нечего. Последнее, что вспоминается — атака на Linux через третье лицо — SCO (кстати, это очень интересная история с гораздо большим количеством смыслов, чем на поверхности).
Зато теперь Microsoft — лучший друг Linux. Не смогли убить в зародыше, теперь попытаемся возглавить.
Или Google, который казался каким-то глобальным борцом за все хорошее против всего плохого. И во что он превратился сейчас?..
И любая коммерческая соц. сеть будет стремится к тому же самому. Увы, рано или поздно даже Хабр до этого дойдет, так как тоже является коммерческой организацией с единственной целью: максимизация прибыли.
Практически одновременно к этому юбилею, делаю попытки уйти с GMail. Мне не нравится централизация всего Web в руках одной компании и попытки закуклить все на себе. Мне категорически не нравится собирание всех данных обо мне (раньше было все равно, но постепенно отношение меняется к резко отрицательному).
Пытаюсь поднять собственный сервер, уже делал это для клиентов, работает годами, хотя в самом начале были сложности (сейчас большая проблема сделать так, чтобы GMail не отфильтровывал ваши письма). Если не получится, то просто перееду к какому-нибудь конкуренту даже если придется за это платить.
Выше одной строкой уже упомянули, а я немного разверну. Что мешает использовать .po файлы и огромный развитой инструментарий gettext?
Когда я вижу переводы в Excel, у меня аж скулы начинает сводить. Потому что каждый проект, где использовались такие переводы, был болью. Сильной непрекращающейся болью. И сколько не автоматизируй этот ужас, легче не станет.
Совсем недавно в одном таком проекте заменил переводы через Excel на gettext, развернул weblate для переводчиков. Во-первых, все стали намного меньше тратить времени на возню с переводами. Во-вторых, перестали теряться переводы, что очень не нравилось переводчикам (никому не нравится заново переводить одно и то же несколько раз из-за несовершенства инструмента).
Поэтому решительно не понимаю, зачем люди в 2019 году строят велосипеды с квадратными колесами… И ладно бы уперлись в ограничения gettext (а таковые есть), так нет, просто с самого начала стреляют себе в ногу.
Автор ни на один комментарий не отвечает.
Вот это очень странно:
Вообще-то, я много раз встречал девушек из самых разных слоев общества, виртуозно матерящихся, неприлично шутящих, и делящихся интимными подробностями личной жизни. И что? Или девушкам можно? А вот большинству сотрудников IT-компаний все это совершенно не свойственно, независимо от пола.
Кроме этого много странного в статье… Ну и просто не верится. Я знаю несколько девушек, танцующих в клубах. Это своеобразная жизнь (мягко говоря), куда не пойдет человек, у которого есть задатки для IT. А если вдруг пошел, то 10 лет в этой профессии наложат очень серьезный отпечаток на личность.
Поэтому я автору просто не верю. Не бывает такого, это похоже на какую-то статью-провокацию.
Недостатки Javascript. Позволяет, нет, скорее провоцирует, писать нечитаемый код. На Javascript можно писать читаемый код. Но с большой вероятностью будет написан нечитаемый, потому что в первом случае надо прилагать значительные усилия, а во втором — нет.
В языке отсутствует стандартная библиотека. Отсюда эти кошмарные
npm, сотни зависимостей даже для "Hello world", тысячи и десятки тысяч для любого нетривиального. Все это обновляется по нескольку раз в день. С изменениями в API. С конфликтами версий. С необходимостью регулярно вникать что там поломалось и почему.Недавно я с обеда пришел и за время проведенное на обеде (1 час), какая-то зависимость сменила две версии. Я не шучу… Надо было сделать скриншот.
На мой взгляд, это кошмар.
Но вообще эту тему можно долго продолжать. Просто и так уже на несколько минусов наговорил и использовал единственную возможность что-то сказать за день.
По сути статьи мне сказать нечего… Мне кажется, каждый инструмент имеет область применения. Сложно придумать правила на все случаи жизни. Копья по поводу исключений ломаются десятилетиями...
Конкретно по поводу вашего кода могу сказать, что читается очень тяжело. Эти громоздкие строки логирования и названия переменных… Я считаю, что писать тип переменной в ее названии (
list_,str_) — антипаттерн. Названия становятся громоздкими и менее читаемыми. А от отсутствия проверки типов это все равно не спасет.И еще, вместо
logger.errorлучше использоватьlogger.exception— он сразу напечатает исключение и traceback.