Pull to refresh

Comments 402

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

ИМХО, это полная хрень, а не обзор. Давайте честно признаемся. Рецепты не меняются:

1) Берем тему с кликбейтным заголовком

2) Выпячиваем и преувеличиваем все спорные моменты

3) Профит + завернули трафик на youtube канал

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

Я разве назвал это "плохим обзором"? Вроде бы я высказал своё мнение в других словах. Ну и вы серьезно? пытаетесь сделать меня субъектом в дискуссии, где задача предмета спровоцировать людей? Всё понятно, люди писали, старались, потратили время. Это конечно они молодцы, но их цели я не разделяю.

>Я разве назвал это "плохим обзором"?

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

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

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

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

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

>Всё понятно, люди писали, старались, потратили время. Это конечно они молодцы, но их цели я не разделяю.

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

Бинго.
В одном своем коротком хабракомментарии вы собрали 3 из 9 самых распространенных демагогических приёмов: https://ru.wikipedia.org/wiki/Демагогия#
Дальнейшая дискуссия, видимо, смысла не имеет?

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

  • Мнение, что статья хрень, цель - запустить баттхерт у читателей и продать youtube канал

  • А как надо было написать, чтобы была не хрень и продать youtube канал? Критикуешь - предлагай

  • Высказывание мнения не обязывает к обратной связи. Ну и Вы серьезно хотите бесплатных советов для улучшения фастфудной статьи?

  • Вы демагог

  • WTF???

я бы формализовал вот так:
- кг/ам
- а как автору надо было раскрыть тему?
- чо ты привязался, мне не понравилось, и всё.
- ясно-понятно.

Вопрос не был провокационным. Он задан с использованием самых нейтральных формулировок.

Алексей не задавал его с позиции "Критикуешь - предлагай". Он лишь поинтересовался развитием вашего же мнения, которое вы высказали.

К обратной связи вас также никто не обязывал.

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

Человек задаёт вопрос, а вы пишете, что это его мнение. Вопрос это мнение?

Последний пункт вообще смешно (Только не надо писать, что смешно это субъективное эмоционально наполненное выражение и что то, что я сейчас написал в скобках, это тоже некая психологическая манипуляция). Человек написал короткое субъективное мнение не для объективного его доказательства, а вы никакой аргументации не проводили.

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

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

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

ИМХО, это полная хрень, а не обзор. Давайте честно признаемся.

И следом

Я разве назвал это "плохим обзором"?

Не совру, если скажу "да"

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

Да, вы назвали это плохим обзором. Ваши слова: "имхо, это полная хрень, а не обзор".

Зря вы так. Правило#1: "Никогда не давать заднюю преждевременно". И себя дураком выставили, и перед собеседником в колени сразу кланятся.

это полная хрень, а не обзор

Я разве назвал это "плохим обзором"? 

Бро))) Ну так нельзя...

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

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

Хайпанули тут Вы, мне кажется, а не автор.

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

"Давайте честно признаемся " - давайте честно признаемся, что вот эти три слова манипулируют читателем, подразумевая, что автор нечестен. Опять-таки без доказательтсв. Для двача сойдет, ага.

" Берем тему с кликбейтным заголовком " - месье когда-либо писал блоги или статьи? Ну или хотя бы читал какие-то работы про качественную журналистику? Да блин, любой хороший заголовок - кликбейтный. Извините что автор не использовал что-нить вроде заголовка газ. Правда брежневских времен.

"Выпячиваем и преувеличиваем все спорные моменты" - ой ли? А почему ж тогда книжка "97 Things Every Software Architect Should Know: Collective Wisdom from the Experts" содержит примерно те же fallacies? Там, в частности, пишут, что мол, граждане, не ставьте свое резюме вперед задач клиента и не развлекайтесь с новыми штуками тогда, когда они понадобились вам для резюме, но нахрен не сдались работодателю.

"Профит + завернули трафик на youtube канал" - какой ужас, наверное все остальные компании, ведущие тут блоги, никогда так не делали. Вот незадача.

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

Ого, "сперва добейся" подвезли, неплохо неплохо

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

Да вы просто не открывайте комментарии))

Стало быть, если программист не является хорошим спикером, то он обречён?

То он найдет работу в другой компании. Может даже так для всех будет лучше.

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

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

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

У меня есть знакомый с синдромом Аспергера. Работает программером-фрилансером, судя по оплате далеко не идиот, письменная речь грамотна, но собеседование он не проходит, и не просто не проходит а вообще с личным общением у него катастрофа. Мне кажется все эти корреляции способности кодить и софтскиллов типа говорить, выглядеть, одеваться и улыбаться - максимум для нейронормальных людей с абсолютно стандартной типовой психикой, да и то не факт. Шаг влево, шаг вправо - и все эти првила превращаются в тыкву. Сугубо моё ИМХО

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

Может, вместо того, чтобы нанимать на HR девочек после школы, нанять человека, который способен чиатть код?
Чтобы не придумывать "100 способов узнать о навыках программиста не открывая его код"

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

А кто больше получает, девочка HR после школы или джун ?

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

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

А разве задача ХР не просто договориться о собеседовании и прояснить административные вопросы?

С каких пор ХР определяют квалификацию программистов?

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

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

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

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

Как эйчар может это сделать, если у эйчара нет ни малейшего представления ни о проекте, ни о команде? Даже in-house.

если у эйчара нет ни малейшего представления ни о проекте, ни о команде?

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

софтскиллов типа говорить, выглядеть, одеваться и улыбаться

Мне всегда казалось, что софтскиллы это про:

  • не переходить на личности в код-ревью

  • адекватно реагировать на конструктивную критику

  • внятно и вежливо выразить свою точку зрения

  • заранее оповещать начальство о смещении сроков

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

  • правильно расставлять приоритеты в задачах

  • не греть рыбные котлеты в микроволновке

А как вам "софтскилл" писать гадости, но добавлять "))))" в конце, чтобы выйти сухим из воды? Хуже всего, что это работает.

наверное так и есть)) во втором пункте у вас правда есть термины "адекватно" и "конструктивную". Как показывает жизнь, они чрезвычайно субъективны и их диапазон не у всех людей совпадает.

"не греть рыбные котлеты в микроволновке" - один раз согрешил)) и жалел об этом ещё очень долго!

А я просто проветрил кухню и отмыл микроволновку пока никто не заметил и не учуял.

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

Ха. Я однажды, когда хотел чего-то пожевать, обнаружил в холодильнике только хлеб, явно не первой свежести, и поставил его в микроволновку вместе с кулечком... Классная дымовуха получилась!

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

Согласен, странный алгоритм по отбору кадров. Смотрю на своих коллег не сказал бы, что у них хорошая речь. Вспоминаю свои прошлые работы аналогично.
Не понятно откуда такая корреляция(надеюсь автора не смутит данный термин.) взята?
Или HR опять путают свои фантазии с реальностью?.

Я бы сказал несколько по другому

Если человек не является хорошим спикером, то он обречён.

Умение волочить языком это фактически самое полезное в жизни людей, к сожалению.

Умение казаться, а не быть, вот что позволит вам быть на волне успеха.

Ну да, ценой небытия.

Сильный афоризм.

Переформулируем:

Умение казаться, а не быть -
Вот, что позволит вам
Поймать волну успеха.
Ценой небытия.

UFO just landed and posted this here

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

Умеешь коль не быть, а лишь казаться,
Желаешь коль не жизни, а эрзаца —
Успешен будешь, как Эдита Пьеха.
Небытие — цена того успеха.

Пахнуло хорошим переводчиком Хайяма… :)

Умение казаться, а не быть —
Вот что позволит вам на всё забить,
Поймать волну ценой небытия
И деньги получать за нихуя.

Вы приняты. Но "ну да" стоит отрефакторить

Умение формулировать свои мысли - это не умение казаться

Я бы еще разделил устную речь и письменную.

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

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

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

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

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

UFO just landed and posted this here

Умение волочить языком это фактически самое полезное в жизни людей, к сожалению.

Учитывая, что именно язык сделал человека человеком (а не дубина), сожаление непонятно.

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

Сам же зашел в статью, только чтобы увидеть

компании ... предлагают порешать задачки

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

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

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

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

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

UFO just landed and posted this here

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

... А может и не оказаться

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

Часто встречал такую категорию людей как "академики". На словах они Лев Толстой, а на деле **й простой!

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

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

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

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

А трудности перевода исходного кода в машинный меня мало волнуют - для этих целей умные люди придумали крутые инструменты.

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

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

Те кто складно в realtime говорят - это наверное те Чак Норрисы, которые могут задачки типа medium и hard закодить на бумажке с 1й попытки)

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

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

Даже в писательском ремесле и около ориентироваться на устную речь порочно и невыразимо глупо. А в IT это и вовсе странно.

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

Автору поста нужны спикеры или хорошие разработчики?

Автору поста нужны спикеры или хорошие разработчики?

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

Фемминитив "авторша" вы употребили с целью перейти на личность или подчеркнуть принадлежность автора-женщины к "угетаемому классу"?
И второй вопрос: почему выбрано именно словл "авторша", а не "авторка"?

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

И я тут подумал, нужно про почерк добавить. Ну а что? Плохой почерк - плохой программист.

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

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

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

В статье не говорится про "говорить, как в кино". И более того: в статье явно указано, что это не 100% метрика и далеко не единственная. Скорее,- штрих к портрету... А вообще, да, умение говорить кратко, емко и по делу - благо, как для самого программиста, так и для его окружения. ;-)

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

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

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

Как начинает и как заканчивает фразы — не понятно, что автор статьи имел в виду. Возможно, автору следует научиться поправлять себя. Здесь я могу нафантазировать десяток разных вариантов, поэтому воздержусь от комментария. Автору статьи не хватает целостности высказываемых мыслей.

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

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

Много ли он использует слов-паразитов и заполняющего паузы «мычания» — слова-паразиты и заполняющие паузы звуки играют в речи определенную роль, приносят пользу. Например, в живом диалоге важно дать понять собеседнику, что ты не закончил мысль, сейчас сформируешь и продолжишь — это те самые мычания, эканья и многочисленные слова-связки. И чем опытнее специалист, чем сложнее мысль, которую он хочет выразить, и чем больше у него одновременно задач удерживается в голове, тем больше у него потребность в паузах на подбор слов и формулировок. Если человек говорит без пауз, то это говорит лишь о том, что он в данный момент времени ни о чем особо не размышляет. Как в кино, где сценарист за персонажа уже все обдумал и теперь должен экономить экранное время.

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

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

в статье явно указано, что это не 100% метрика и далеко не единственная.
Если присмотреться к рекомендациям внимательней, то становится ясно, что это плохая метрика. Она не то что не 100%, она вообще никак не помогает разглядеть хорошего разработчика, а местами еще и работает наоборот, украшая плохого разработчика.
Скорее,- штрих к портрету
Скорее, гадание на кофейной гуще. Типирование разработчика по гладкости и темпу речи ничуть не лучше, чем типирование разработчика по выбору одеколона или цвету кожи.
Если разработчик имеет словарный запас значительно выше среднего, то это говорит лишь о том, что он посвятил много времени изучению слов, а не разработке

Либо просто читал(а) много хороших текстов. Собственно, это именно мой случай.

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

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

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

Именно так!

И это противоречит требованию " — Насколько лаконично и емко он способен донести информацию ".

Скорее, гадание на кофейной гуще.

Нет никакого гадания. Это неосновная метрика, о чем явно указанно. Так сказать, "косячок". Пока косячков один или два - ничего страшного и вообще пофиг, но когда их много - это уже косяк. Так понятнее? ;-)

Ближайшая аналогия - антиспам, скоринг. Там таких метрик сотни. Выкинуть их все, потому, что по одной единственной нельзя судить о результате? Угу, крутой подход. ;-)

Это неосновная метрика
Когда набирают неосновные метрики, тоже ориентируются на пользу. Если метрика приносит не пользу, а вред, то её не включают в список используемых. Вне зависимости от того, основная она или нет.
Что касается перечисленных в статье «метрик», то их можно свести к теме крайностей. И в таком случае они начнут работать, но при этом перестанут быть неосновными. И перестанут быть метриками, станут маркерами.
В контексте собеседований:

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

Злоупотребление жаргонизмами и buzzwords — крайности «прячет отсутствие смысла за красивыми терминами» и «не понимает распространенных специальных терминов».

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

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

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

Туннельное зрение в смысле «безусловная приверженность выбранной позиции по какому-либо вопросу» — повторение пункта «идеализм».

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

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

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

Очень много текста. Cбивчивая речь - это маркер сбивчивой мысли. Сбивчивая мысль рождает сбивчивый код. А оно вам надо?... Тут только один вопрос: переволновался человек или всегда так мыслит/говорит/кодит?

неспособность удерживать контекст и цель

Бинго! ;-)

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

Я не представляю собеседование, на котором вас поят лошадиной дозой кофе, хамят и не пускают в туалет одновременно. К чему тут это? На собесе будет одно - большое волнение. Оно заметно, человека успокаивают или метрика отбрасывается.

ps А то так любую метрику можно выкинуть изначально. Решил задачу на собесе? Да просто вчера на литкоде ее зазубрил. Есть код на гитхабе? Да просто нанял кого-то его за деньги наполнить. Нельзя так.

Еще раз: как работает тот же антиспам? Беруться сотни малозначительных (не очень) совершенно разных метрик, группируются и по совокупности их весов делается окончательный вывод. Чем меньше метрик, тем больше вес оставшихся и тем чаще письмо в папке "спам" или спам во "входящих".

Я не представляю собеседование, на котором вас поят лошадиной дозой кофе, хамят и не пускают в туалет одновременно.
Если человек пришёл на собес, это не значит что у него нет другой жизни. Нахамить ему могли в транспорте или на улице 5-10 минут назад или даже с утра, но так, что заряда настроения на весь день хватает. Мог просто не выспаться и закинуться конской дозой кофе.
А то так любую метрику можно выкинуть изначально. Решил задачу на собесе? Да просто вчера на литкоде ее зазубрил.
В учебных заведениях с известными темами и хотя бы примерными билетами можно и зазубрить. Задачки на собесах — да их бесконечное множество, некоторые я так понимаю вообще на ходу придумывают.
Есть код на гитхабе? Да просто нанял кого-то его за деньги наполнить. Нельзя так.
Если есть сомнения, можно ткнуть в рандомную репу, рандомный кусок кода и спросить, что это. Правда, в этом случае код может быть заимствованным (форк, копипаста, кто-то другой пульнул, а чел просто чекнул и принял), но об этом тоже можно рассказать.
как работает тот же антиспам? Беруться сотни малозначительных (не очень) совершенно разных метрик, группируются и по совокупности их весов делается окончательный вывод
В данном случае для антиспама предлагается метрики вроде «тема письма начинается на букву А» и «в теле письма нет имени отправителя» — какими бы мелкими они ни были, как бы ни дополнялись другими метриками, они остаются бесполезными и даже вредными, которые не следует брать, группировать и учитывать в совокупности.

они остаются бесполезными и даже вредными

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

Сбивчивый: "Лишенный последовательности, логической стройности; путаный, беспорядочный.". Малый академический словарь.

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

Да тут, походу, письмо начинается прямо с фразы "Я сын негерийского принца в изгнании". ;-)

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

гладко и красиво сформулировать

Причем тут придуманная гладкость и красота? Термин этого не предполагает. Или мы на обсуждение чего-то другого уже перепрыгнули?

Я не знаю как увязать красоту речи и код. Вы, надеюсь тоже. Давайте, все же вернемся к другой речи: сбивчивой.

сильно выходят за рамки

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

И то и другое, капец, так-то.

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

С моей точки зрения

Если допускается двоякость в прочтении термина, то надо допустить и то что (внезапно) именно вы неправильно его читаете. Логично? Допустимо? Я же никакой двоякости в термине не вижу: красиво != последовательно и структурировано. Ораторские качества, литературный слог и прочую красоту речи сюда тащить за уши ошибочно.

Ок, понятнее станет, если я на полном серьезе скажу, что по красоте речи нельзя судить о навыках программирования? Только, причем тут это утверждение? С этим никто и не пытается спорить. И ни к одному моему комментарию это не применимо. Речь о другом. Или это непонятно?

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

Да ладно вам. Зачастую, это не говорит о неструктурной мысли. Просто проиграв или зайдя в тупик с одними аргументами, достают новые. Хотя иногда попадаются, да, такие, что диву даешься: а как они работу-то работают с такой кашей в голове. ;-))

Зачастую, это не говорит о неструктурной мысли. Просто проиграв или зайдя в тупик с одними аргументами, достают новые. Хотя иногда попадаются, да, такие, что диву даешься: а как они работу-то работают с такой кашей в голове.
Рассуждения (в том числе и вслух), попытки бывают только в мозгу курильщика? Мозг здорового человека сразу выдаёт нужный путь решения? Скажите, вы про групповое обсуждение, мозговой штурм слышали когда-нибудь?

Мозг здорового человека сразу выдаёт нужный путь решения?

В идеале - да, а каким способом человек решение получил решение начальство, жестко ориентированное на результат волновать не будет. Это из личного опыта. Как в том стишке про Петра 1 и корабли.

Если допускается двоякость в прочтении термина, то надо допустить и то что (внезапно) именно вы неправильно его читаете. Логично?
Нет. Во-первых, термин «правильно» мы явно понимаем по-разному. Во-вторых, в данной постановке вопроса логика не имеет никаких зацепок для указания на одного из читающих.
Допустимо?
Допустимо также то, что мы спим в криокапсулах, будучи похищенными сборщиками урожая. Допущения, которые не несут пользы, бесполезны.
Я же никакой двоякости в термине не вижу: красиво != последовательно и структурировано.
Не равно, но красота вполне может включать в себя отсутствие сбивчивости, упорядоченность, последовательность, наличие структуры и многое другое. Красота хорошо пересекается с терминами «симпатично» и «нравится» — мне нравится то, как он говорит, что подразумевает понимание, согласие и отсутствие царапающих слух моментов.
проиграв или зайдя в тупик с одними аргументами, достают новые
Оппонент вполне может и не играть — с его точки зрения. Впечатление его проигрыша может существовать только в вашей голове. И вполне нормально перебирать аргументы, откидывая опровергнутые, находя новые. Если, конечно, они были опровергнуты не методами вроде «отмахнуться негативной оценкой» или «увод темы в сторону».
Хотя иногда попадаются, да, такие, что диву даешься: а как они работу-то работают с такой кашей в голове.
Если допускается непонимание, впечатление «каши», то надо допустить и то, что (внезапно) непонимание существует в вашей собственной голове и не связано с головой говорящего.

Какой почерк?

Ну... у меня неплохой :) Я люблю писать, особенно, когда думаю над чем-то. Перьевые ручки люблю. Фетиш, всё такое. Но это не повод это критерием делать. Выше @dolovarверно мою аналогию понял.

Сильные инженеры нередко оказываются хорошими спикерами — именно их вы чаще всего можете увидеть выступающими на тематических конференция

У вас есть статистика? Просто...сколько программистов работают над известными проектами и столько появляются на конференциях? И Естественно, мы видим чаще хороших спикеров на конферециях, ибо их и выбирают, ну это не значит что только они хорошие программисты.

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

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

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

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

Речь же не только про открытые конференции. Во многих компаниях практикуют регулярные внутренние митапы (иногда даже "добровольно-принудительные"), и корреляция между хорошим текстом/речью и скилами коллег отлично прослеживается)

только они хорошие программисты

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

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

На счёт детского сада не знаю, но какова причина использования людьми таких слов? "Эта багулина фиксится одной тулзочкой из моей репы, вот тут пропсики прокинуть и несколько рулесов в конфиг прописать"

хорошие спикеры становятся хорошими инженерами

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

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

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

Отсеять плохих легко, они пишут статьи на хабре от имени онлайн школ

Это пример для одного из пунктов статьи? Того, где "X — это плохо".

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

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

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

Первый пункт оценивает процесс написания кода или результирующий код?

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

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

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

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

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

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

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

Или не сделаете. Не вижу никаких доказательств того, что умение писать код как-то коррелирует с умением объяснять (и уж тем более понятно и лаконично).

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

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

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

При написании кода "вода" не нужна, её наоборот пытаются убрать и сделать код более лаконичным. Да и в речи - краткость - сестра таланта.

TLDR: при написании кода задействованы те же участки мозга, что и при восприятии и формировании устной речи, а участки, ответственные за логику и математические задачи, практически не меняют свою активность

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

Сильные инженеры нередко оказываются хорошими спикерами — именно их вы чаще всего можете увидеть выступающими на тематических конференциях

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

Умение говорить отражает умение формулировать мысли. Если человек этого не умеет, то он может очень долго вылизывать, но код всё равно будет плох.

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

Я бы по-другому сказал. Речь это произведение умения думать на умение говорить.

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

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

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

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

Полностью поддержу адекватного человека. У Google вообще есть HR программа по найму людей с аутическим спектром, так многие из них вообще не склонны к общению. И такие люди в приоритете. Как правило они больше делают, чем говорят.

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

У данной идеи есть некоторые разумные основания, но… Устная речь была нормальным прокси только в старое время. Потому что в старое время не было асинхронных чатов. Потому что сейчас можно буквально думать об notepad, компенсируя недостаток кратковременной памяти. Потому что сейчас можно написать тесты на код, а не пытаться удерживать все решение в голове. И т.д., и т.п. Время изменилось, прокси-оценка стала хуже работать.

Сбивчивая речь и непоследовательность в изложении мыслей

Извините за токсичность, но брехня и полная чушь!

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

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

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

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

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

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

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

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

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

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

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

“How long does it take you to prepare one of your speeches?” asked a friend of President Wilson not long ago.

“That depends on the length of the speech,” answered the President. “If it is a ten-minute speech it takes me all of two weeks to prepare it; if it is a half-hour speech it takes me a week; if I can talk as long as I want to it requires no preparation at all. I am ready now.

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

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

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

Бред! Абстрактное мышление вообще практически никак не связано с речью.

Гипотеза лингвистической относительности предполагает, что структура языка влияет на мировосприятие и воззрения его носителей, а также на их когнитивные процессы. Лингвистическая относительность широко известна как гипотеза Сепира — Уорфа. Выделяют две формулировки этой гипотезы[1]:

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

Гипотеза небесспорная, особенно в своей «строгой» версии, но чтобы вот прям бред?..

Я бы сказал не небесспорная, а как раз очень даже спорная, по которой уже 100 лет не утихают дебаты.

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

и

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

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

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

По своим наблюдениям добавлю еще один пункт с большой долей вероятности плохого программиста: человек перестал или стал меньше программировать и пошёл учить других в онлайн-школы программирования ;)

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

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

человек перестал или стал меньше программировать и пошёл учить

Вроде булева алгебра тут несложная

Это вероятно вечерние курсы для студентов 2 раза в неделю по 2 часа сказываются.

PS: Извините, но было сложно удержаться.

Пойти в менеджеры или аналитики - тоже вариант. Есть много аналитиков с хорошей вузовской подготовкой (знания, языки прог., алгоритмы, кругозор), которым практика программирования как-то "не заходит" и находят такой вариант приобщения к профессии, который так и остаётся основным.

Вспоминается цитата из Пратчетта:

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

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

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

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

Удивляет сколько лайков набрал ваш комментарий. А потом на каждом шагу говорят мол "как же плохо сейчас учат программистов". Так кому их учить, если столь популярно такое мнение, как ваше? Вот есть хороший специалист, допустим, и для дела было бы полезнее, если бы он хотя бы понемногу начал преподавать (час-два в неделю), делиться своим опытом. Преподавать-то некому, вот и идут туда зачастую проходимцы - так лучше уж будут преподавать опытные спецы, но без педагогического опыта, чем вчерашние (или сегодняшние) студенты совсем без опыта работы программистом. Ибо "профессиональный программист-педагог" - это, конечно, большая роскошь. Сходу только Тимофей Федорович Хирьянов приходит на ум.

ЗЫ. Понятно, что такой коммент в блоге онлайн школы программирования действительно выглядит иронично :) поэтому надеюсь, вы просто пошутили)

Кто умеет, тот делает; кто не умеет, тот учит.

Кто не умеет и учить - управляет.

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

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

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

Главное на этой почве не отсекать тех кто и говорить умеет - и делать дело. А то бывает.

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

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

Про Дейкстру.

Besides a mathematical inclination, an exceptionally good mastery of one's native tongue is the most vital asset of a competent programmer.

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

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

UFO just landed and posted this here

Как плохой разработчик, скажу

Если в компании не используют X, в этой компании не надо работать;

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

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

Хорошая мысль, но несколько однобокая. Фейнман понятным образом изложил КЭД, но серьезно учат её все-таки больше по непонятному изложению Фейнмана или книгам Ландау-Лифшица. Сложность многих моделей ограничена снизу и серьезно упростить ее с получением на выходе эквивалентного результата может оказаться невозможно. Некоторые мысли при изложении в несколько слов существенно теряют в глубине. Другое дело, что от по-настоящему умного человека, который не ставит первоочередной целью произвести впечатление, ты практически никогда не услышишь слов, значения которых не знаешь.

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

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

— Задачи такого рода нужно всегда решать именно так;

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

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

М-м-м, вкуснота, взаимопротиворечащие параграфы подвезли! А что, если сторонняя библиотека и правда решает эту задачу лучше? Вот только этого не удастся узнать, пока не попробуешь. Чтобы развиваться профессионально, нужно много узнать, а для этого надо постоянно интересоваться чем-то новым.

Фейман не то, чтобы "понятным образом изложил" КЭД. Это не изложение в том смысле, чтобы её можно было использовать по назначению или развивать. Это — красивая иллюстрация, чтобы домохозяйки поняли, о чём это. Конечно, так учить КЭД нельзя.

Однако, сама способность выдать такое изложение показывает нам, что Фейнман прекрасно ориентировался в теории. Именно этого эффекта ожидают и от кандидатов на собеседовании: если он может "изложить КЭД в нескольких словах", наверное, он глубоко ориентируется в теме.

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

А там ничего сверхъестественного нет. Математики много, но довольно однообразной, за пределы исчисления многих переменных и комплексного, а также диффуров и линейной алгебры очень редко выходит. Ну и комбинаторика и теория вероятностей в статфизике ещё. Это осилить — просто тупо очень много работы.

Не, вообще то я плохой программист и могу себе позволить:


– Свободные решения лучше несвободных!
– Линукс лучше Винды!
– Со временем все перепишут на ассемблере!
– Java и C# отстой!

– Свободные решения лучше несвободных!

– Линукс лучше Винды!

– Java и C# отстой!

Это еще можно понять

– Со временем все перепишут на ассемблере!

Но это слишком толсто)

Как раз это тот тезис, которого можно доказать даже формально. А верхние три – так, вкусовщина.

Докажите, я пока упорно не верю)

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

Возможности вычислительной техники ограничены законами физики.

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

Поэтому код со временем должен быть все более и более оптимизированным.

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

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

Усложнение может быть "горизонтальным" - больше функций, вместо вычислительного усложнения текущего функционала

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

Что требуется в очень ограниченном количестве случаев. Тот факт, что чуть ли не каждая первая десктопная программа нынче - это electron, говорит нам, что тезис о том, что весь софт перепишут на ассемблер - не верен.

В этом мире миллион программ, пользователи которых готовы мириться с их ограниченной производительностью, потому они навсегда останутся написанными на чем-то медленном)

Во первых, может это у вас только electron. На моем компьютере нет ни одного приложения работающее на electron. (могу научить как сделать так, чтобы у вас тоже не были, но мне кажется что вам не понравится 🤣︎).


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

UFO just landed and posted this here

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

Да не то, чтобы я не знал, как обойтись без приложений на электроне, вопрос в том - нафига? :) "Потому что"? :)

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

"...готовы вынуждены мириться с их ограниченной производительностью ..."

Да ну ладно уж. Взять тот же VSCode на электроне сделан. Прекрасное приложение, зачем оно на ассемблере? :) Мне его производительности хватает за глаза.

Мне его производительности хватает за глаза.

Пока хватает. Да и то как вы написали «за глаза», выглядит что чуть-чуть хватает.


Но ведь здесь есть только два варианта


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


– VSCode не будут развивать дальше. Но такие программы всегда прекращают использовать, какими бы они хорошими не были.

UFO just landed and posted this here
UFO just landed and posted this here

Дам только один пример:


Сейчас активно используются и прекрасно работают компьютеры сделанные в 2012-ом году. (Примерно Sandy/Ivy Bridge) Да, немножко подтормаживают, но вполне даже ничего.


Да я сам и пишу вот с компьютера на Intel N3540 — выпуск 2014-ого года.


А теперь посмотрим как было раньше – в 2002-ом году выпускался процессор Pentium III. А если кому-то пришлось в голову использовать процессор десятилетней давности, то пришлось бы ему использовать Pentium I (50MHz!) — что уже было совершенно невозможно в плане производительности.


А я вот, на Pentium III (1000..1400MHz) даже и сейчас запустил бы кое-что и работало бы более менее хорошо.


То есть, выходит, что уже 20 лет, производительность компьютеров увеличивается как О(n), ну пусть будет О(n^2), но далеко не О(2^n) как было раньше.

UFO just landed and posted this here

Такие «прорывы» в девяностых и начале нулевых случались каждые полтора года. А сейчас вы это воспринимаете как прорыв. Об этом я и говорю.

UFO just landed and posted this here

Да робяты, плевать на ноуты. Дайте мне системник который в один поток молотит в 3-5 раз быстрее топ интела. Чтобы у меня задачка вместо 40 минут буста за 10 решалась.

UFO just landed and posted this here

Только загвоздка в том, что далеко не все задачи можно распараллелить. Вот вам: Закон Амдала


Так что, удваивание процессоров не дает удвоенная производительность. Увы.

Ну и кому-то плевать на ноуты, а кому-то они вполне себе заменяют десктопы.

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

UFO just landed and posted this here
Ошибка утверждения в слове «перепишут». Подразумевается, что требования не меняются, и можно бесконечно переписывать старый код на более производительном языке.

В реальности, новые требования будут прилетать всё быстрее и быстрее. Переписывать что-то вообще не будет времени, и более правдоподобное предположение «Со временем всё будут писать с первой попытки на языке, который позволит побыстрее оформить требования в код».

Вообще-то да, конечно. В реальности именно так и получится.


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

Можно и по-другому аргументировать - оптимизирующие компиляторы, в т.ч. profile-guided компиляторы (особенно с динамической рекомпиляцией), идут в направлении оптимизации под конкретную нагрузку, а значит оптимизация руками будет всё менее и мене релевантна, т.к. сложно заранее предугадать, какая будет нагрузка (и какая там конфигурация сервера в данный момент, т.к. у каждого свои особенности). Да и сейчас, если дать написать ассемблер обычному разработчику, его код скорей всего будет менее оптимальный, чем код современного оптимизирующего компилятора.

Имхо, больше выгоды даст написание cache-friendly кода, правильный выбор алгоритмов (O(1) вместо O(n)), а это можно сделать и без ассемблера.

Конечно можно. Но все это можно сделать и на ассемблере и будет еще лучше. Кроме того, хорошие оптимизирующие компиляторы можно сделать только для языков относительно низкого уровня типа C/C++. Для современных ООП языков типа C#, Java, Python, боюсь оптимизация получается довольно посредственной.

хорошие оптимизирующие компиляторы можно сделать только для языков относительно низкого уровня типа C/C++. Для современных ООП языков типа C#, Java, Python, боюсь оптимизация получается довольно посредственной.

Собственно, вся суть С++ в том, что это С + ООП (на практике; есть, конечно, любители целиком шаблонами писать). И вот тут, как раз, рантаймы типа Java выигрывают в плане именно компиляторных оптимизаций под ООП, т.к. один из основных оверхедов это вызов виртуальных функций, и статический анализ здесь проигрывает динамическим рекомпиляциям: например, при вызове интерфейсных методов рантайм может на основе истории вызовов понять, что вот в этом конкретном месте (callsite) по факту под интерфейсом скрываются всего два конкретных класса (хотя интерфейс реализуют 9000 классов), и заменить дорогие вызовы через виртуальную таблицу (а это функция по указателю, что у многих процессоров сбивает branch prediction) на простое сравнение "если это класс А, то сделай jump сюда" (так называемый callsite cache), а может пойти дальше и полностью девиртуализировать вызов (если класс один), что сразу же позволяет активировать кучу оптимизаций типа инлайнинга. Такое ручками делать в постоянно развивающемся проекте - такое себе удовольствие. Но такие рантаймы обычно всё равно медленнее С++, просто потому, что в по дизайну в них чаще всего присутствует также сборщик мусора и отдаётся предпочтение by ref-объектам вместо value types, т.е. страдает memory locality. Не могу вспомнить, чтобы был язык с продвинутым JIT, но без GC. Было бы интересно на такой посмотреть.

А, и ещё - в языках низкого уровня типа C/C++ существует проблема алиасинга, т.е. это когда мы не можем активизировать оптимизацию при работе с указателем в полную меру, потому что статически мы не всегда можем определить, есть ли ещё кто-то, кто ссылается на этот участок памяти (возможно, с другим типом). Если мы будем считать, что у указателя только один пользователь, мы можем применить далеко идущие оптимизации, но это зачастую ломает кучу кода (когда оказывается, что пользователей много - в других потоках, через type punning, это может быть несколько указателей на пересекающиеся участки массива), в итоге часто или ставят не самый высокий уровень оптимизации, или в самом компиляторе не делают оптимизацию, т.к. 99% софта надеятся на UB (не зная об этом). Вот тут как раз у более высокоабстрактных языков с чётко определённой memory model можно больше оптимизаций выжать.

UFO just landed and posted this here
UFO just landed and posted this here

Хорошие оптимизирующие компиляторы можно сделать только для сильно типизированных языков с контролем эффектов.  

Никогда бы не подумал, что у Object Pascal может быть такой потенциал. Вы его фактически описали:

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

Справедливости ради и компиляторы для C и C++ не были этого лишены, но как показывают наблюдания всё сводится к тому, что программа больше чем на половину состоит только из инструкций mov.

Что не так уж и плохо, если посмотреть на это с истории создания процессора Cell:

Когда дойдут до предела физического, код будет не на ассемблере. Например это будет нейроморфный чип на кубитах )

– Со временем все перепишут на ассемблере!

Берите выше ниже - на VHDL.

И это тоже. И уже. Но гибкости не хватает.

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

Потому что программа на ассемблере – самая обычная программа, которая загружается в РАМ и выполняется. Потом завершается и можно загрузить другую. Чтобы так программировать хардуер, понадобится совершенно другая архитектура компьютера.

Вы не путаете ассемблер и машинный код?

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

UFO just landed and posted this here

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

Естественные и искуственные языки имеют разную грамматику и синтаксис. У искуственных языков нет переносного значения слов, двусмысленности высказываний, фразеологизмов. Отсутствует устная речь.

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

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

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

Если ответы на вопросы "вылизанные"

Я иногда слушаю аспирантов на экзаменах. Это люди ужЕ обученные и подкованные. Тянут билет и после этого отправляются часа на 2-3 куда хотят. А потом мы беседуем. Так вот, если товарищ зубрил и даёт "вылизанный" ответ (пусть формально и правильный), то это видно с первых слов и дальше достаточно пары-тройки "отклоняющихся" вопросов, чтобы и товарищу стало ясно, что не прокатит. А вот тот, кто понимает, говорит ясно и без понтов. И его так просто не собьёшь (да и цели-то такой нет). Так что, это не обратная корреляция, имхо, а вбок.

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

Могу предложить свою формулу "хорошести" программиста.

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

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

Автор же предлагает на каждую задачу изучать свой редактор vim/emacs/eclipse/, что бы быть "хорошим" и выбирать под нужную задачу - нужный, но это противоречит его же принципу, где говориться, что не надо тратить много времени на уже решенные задачи. А ити и просить совета у более опытных, которые по факту за него потратили на эту задачу свое время.... цикл замкнулся. Ты не станеш хорошим, если не попробуешь решить сам - ты будешь плохим, если будешь решать, тратя ресурсы компании на эксперементы и саморазвитие.

Сбивчивая речь и непоследовательность в изложении мыслей
Регулярно спотыкаюсь, обдумывая формулировку для наиболее ясного, но точного донесения мысли.
И с легкостью перехожу на другие мысли, поскольку обычно в голове крутится множество разных задач.
Злоупотребление жаргонизмами и buzzwords… особенно часто это встречается у людей, которые много работали в энтерпрайзах и часто общались с менеджерами
Я много работал в энтерпрайзах и часто общался с менеджерами. Рили.
Перфекционизм и идеализм… Например: Фреймворк или язык X лучше фреймворка или языка Y;
Да, я регулярно прихожу к мнению, что для задачи «альфа» лучше выбрать X, а не Y.
Переусложнение или оверинженеринг… систематическое привнесение избыточной сложности в решения как на микро-, так и на макроуровне
Наспотыкавшись о необходимость перепахать кучу разного в застарелом легаси для реализации очередной фичи и практикуя системный подход с выяснением контекста и планов, я всегда привношу избыточную сложность в решения.
Самоуверенность и «велосипедизм»
Я твердо самоуверен, что не может получиться великолепного специалиста из того, кто не писал и не пописывает велосипеды.
Туннельное зрение… привычка основана именно на предшествующем опыте и мешает разработчику получать новый, более конструктивный опыт
Я ежедневно использую привычные инструменты и подходы, и, наверняка, иногда это мешает получать новый опыт, который, весьма вероятно, мог бы оказаться конструктивным в отдаленной перспективе.

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

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

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

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

TLDR: при написании кода задействованы те же участки мозга, что и при восприятии и формировании устной речи

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

Ну и в целом, у этого вашего "исследования" все что есть в абстракте только одна строчка "Programming research has entered the Neuroage." походу сами исследователи даже письменно не могут изложить, что они там наисследовали, яб не стал на него ссылаться.

тоже хотела спросить автора, где хоть одно исследования для такого громкого заявления

если он тратит лишние часы на то, чтобы решить, какой цвет тени будет смотреться лучше — #444444 или #3e3e3e

Надо дизайнерам показать)

UFO just landed and posted this here

про речь не согласен, за неё и за написание кода отвечают разные участки мозга.

Сильные инженеры нередко оказываются хорошими спикерами

Очередное оправдание для хрюш выбирающих по софтскиллс бабников

отвергая "задротов"?

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

Согласен с каждым пунктом, сам многим из этого переболел в начале своего пути, теперь вспоминаю это с улыбкой, но когда приходится сталкиваться с новичками, которым искренне даёшь хорошие советы, с пускай уж и не большой высоты своих лет и опыта, но всё же, получив в ответ "да-да, я лучше сам разберусь" - хочется кинуть с прогиба :D Хорошо одно, с этими людьми я никак не связан по работе, они просто друзья. А вообще конечно печально осознавать то, что большинство людей не умеют учиться на чужих ошибках, а прямо стремятся потратить своё и чужое время на набивание шишек...

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

Я не минусил, но ваше не имеющее аргументов утверждение

Согласен с каждым пунктом

вызывало минус, тоже без аргументов.

Ок, вот вам аргумент из моей области, все кто не использует DOTween и Odin Inspector в Unity - зря тратят свое время, собственно я целый год уговаривал товарища на это, а он отпирался со своим - " Да я сам разберусь", догадаетесь какой итог? Он начал их использовать :)

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

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

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


обучение программированию — это не только и не столько «смотри как надо делать», это скорее объяснение того, как ты пришёл к тому, что делать надо именно так.

Это с чего вы так решили? Я не советую что либо не аргументировав свой совет, именно это я и делал, объяснял почему я к этому пришёл и почему он прийдёт к этому тоже, но в ответ получал - "Да-да, я сам разберусь", по итогу он разобрался и пришёл к этому сам, вопрос только в экономии времени.

Письменная речь на русском языке -- явно не ваша сильная сторона. Выводы сделайте сами.

> печально осознавать то, что большинство людей не умеют учиться на чужих ошибках

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

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

Прям вижу экспертное код ревью от вас с замечаниями: неправильно, лучше DOTween, так не надо. А потом на кухне с коллегами жалуетесь что джуны вас не слушают и делают не так как говорите, а с чего бы им? Вам если скажут ходить с левой ноги, ведь так лучше, а вы ходите с правой, сразу начнете просто следовать этим экспертным советам?)

Спасибо автору, текст хороший, понятный, хотя и не без технотрёпа кое-где (типа, шутка). Основное достоинство статьи в том, что я с ней согласен. Скажу больше. На мой взгляд, всё сказанное относится к любой инженерной или научной работе. Ожидаемо большое оживление вызвал первый пункт о внятности изложения проблем. Ну, не я придумал: кто ясно мыслит, тот ясно излагает. Разумеется, в любом правиле есть нюансы и исключения. У меня был коллега (увы, его нет в живых), который очень просто и понятно решил одну радиофизическую задачу. Но когда он её излагал публично - это была катастрофа. Потому что он был педант и перфекционист (пункт №3), то есть, считал, что если он упустит в докладе какую-либо деталь, пусть самую махонькую, то всё пойдет насмарку. Мухи дохли на лету. Сердце сжимала предсмертная тоска. Вопросов после доклада не задавали. Давно это было. На нашу статью в ведущем американском журнале активно ссылаются до сих пор. Бывает.

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

Пунктик о подобном складе ума напомнил эпизод у нашего-всего Антона Павловича Чехова из «Скучной истории»: ¨Петр Игнатьевич, даже когда хочет рассмешить меня, рассказывает длинно, обстоятельно, точно защищает диссертацию, с подробным перечислением литературных источников, которыми он пользовался, стараясь не ошибиться ни в числах, ни в номерах журналов, ни в именах, причем говорит не просто Пти, а непременно Жан Жак Пти.¨ Ну, а далее, через пару абзацев — всё в соответствии со сценарием, которого придерживались слушатели: ¨Веду я себя с Петром Игнатьевичем дурно, и только когда он уходит, и я вижу, как в окне за палисадником мелькает его серая шляпа, мне хочется окликнуть его и сказать: «Простите меня, голубчик!»¨

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

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

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

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

Идеальный сценарий для внешнего подрядчика с почасовой оплатой.

UFO just landed and posted this here

"как-то бестолково" - это как?

UFO just landed and posted this here

"Без души", "механистично", ну знаете там, ВАВЛЕЧЕНАСТЬ и все такое

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

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

Без ТЗ результат ХЗ.

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

Ловко придумано конечно, перекладывать ответственность на оформление репортов, но нет, это так не работает. Тостер может написать что функционал работает не в соответствии с поставленной задачей, дать шаги для воспроизведения, дать информацию по воспроизводимости и актуальности проблемы, но чего в багрепорте быть не может, так это "погаси или хотя бы не копи техдолг и потрать на пять минут больше пожалуйста, чтобы разобраться и сделать по красоте, а не городить огород не вникая в проблему", это мягко говоря непрофессионально. Или надо еще в ТЗ дописывать "делай на совесть"? Или что такого QA должен написать в репорте, чтобы исправление гарантированно не повлекло за собой гору косвенно связанных ошибок, обусловленных особенностями реализации, за которые тот же QA не в зуб ногой и принципиально знать не может?

А причем тут оформление репортов? тут манагер/аналитик ТЗписатель встретиться должны и сказать разработчику, что в приоритете.


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

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

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

Пять новых появится если он будет весь кусок "как надо" переделывать неделю, а часть регресса за костыли держалась. Причем в очень далеких местах. А если за 2 часа копипастой + трай-кетч заткнет конкретную проблему, то новых не появится. Но и поток проблем не снизится.

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

Формально таски в джире закрывает, но как-то бестолково

... но делает это без уважения

Дополню.

  • Посмотрите на пол собеседника. Если женский, то не берите, уйдёт в декрет или вообще будет фигнёй страдать.

  • Посмотрите на наличие бороды. Если её нет, нельзя брать на бэкенд.

  • Уточните знак зодиака. Овны упрямы, скорпионы злобные, берите близнецов, они работают за двоих.

И прочий бред "как принять решёние на основе нерелевантных, зато простых знаков".

Рыб надо брать, рыб — тоже работают за двоих и при этом молча! Идеальный исполнитель!

UFO just landed and posted this here

И не надо подвешивать, больно же!

Картинка-картиночка
Да, я знаю, что не за язык, давайте абстрагируемся от этого момента :)
Да, я знаю, что не за язык, давайте абстрагируемся от этого момента :)

Посмотрите на наличие бороды. Если её нет, нельзя брать на бэкенд.

Брать на работу только таких разработчиков?

Нет. Формулировка не предполагает, что при наличи бороды надо сразу брать. Она только предполагает, что без бороды не брать.

ну такие разработчики полюбому пишут бомбический код
— Ахмед, у тебя краш произошёл!
— Так по ТЗ он и должен был произойти
— Ты не понял, не объект крашнулся, а твой код!

Стадии роста программиста:

1) Хочет все написать сам

2)Ищет подходящую библиотеку

3) Ищет подходящий фреймворк

4) Ищет кому бы отдать эту фигню на аутсорс, чтобы самому заниматься более интересными делами

5) Перепробовав гору аутсорсерлв, снова хочет все писать сам

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

Разумеется я про суждение о силе программистами по его речи. Остальное в статье - капитанство.

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

TLDR: при написании кода задействованы те же участки мозга, что и при восприятии и формировании устной речи, а участки, ответственные за логику и математические задачи, практически не меняют свою активность. Это можно объяснить на достаточно бытовом уровне

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

Зона Вернике вроде как за восприятие отвечает. Зона Брока, насколько я помню, работает как моторная речевая зона, т.е. для говорения вслух, но не формирования текста, и ещё она работает иногда не только для говорения. А так, вон https://scitechdaily.com/reading-computer-code-is-not-the-same-as-reading-language-to-the-brain/ пишут, что чтение кода не задействует те же самые зоны, которые возбуждаются при восприятии речи.

А что делать (и вопрос вовсе не праздный) если по многим пунктам статьи узнал себя?(

По некоторым пунктам есть конечно проблески, но в общем...

p.s. Искал такой вопрос в коментах, не увидел

UFO just landed and posted this here
UFO just landed and posted this here

Что характерно, это никак не зависит от языка, на котором идет общение. 

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

А если нет?!

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

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

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

А у вас видимо уровень владения английским всё же выше.

Если «уровень языка не позволит» — это, скорее, «косноязычно», а не «лаконично». Уметь сказать всё чётко, понятно и правильно, но при этом просто и коротко (и никак иначе) — это какой-то странный уровень владения языком: нужно иметь обширный (близкий к носителю) словарный запас, знать идиомы, но при этом не уметь строить сложные предложения.

По мне так, идиомы в любом языке ЧАСТО только усложняют и перегружают его, это ни как не про лаконичность. Что не очень то нужно в деловом общении. Они нужны для обогащения речи. Может для политика и/или для публичных выступлений. Но точно не на обсуждение таска.

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

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

Да и вообще иногда звучит странно, как кто-то пытается выеживаться используя вместо слов, "сложно" или "не просто", слово "не трививльно". Иногда хочется спросить у такого челика, а ты походу только вчера это слово узнал и теперь хочешь показать, что ты умный?! И вообще когда кто-то перегружает речь, и вместо трёх слов начинает прогонять огромную "телегу". Как-то настороженно начинаешь к человеку относиться, ведь складывается впечатление, будто он пытался тебя обмануть, лапши на уши на вешать. Это как с договором, если ты видишь, что у кого-то договор больше чем на трёх листах, обычный договор поставки, сразу начинаешь подозревать, что в договоре тебя пытаются наебать, часто это правда. Иногда дурачки просто ГК копируют и всталяют в договор, хотя и так наши отношения им регулируются, как продавца и покупателя. Хорошо, что я в этом говне больше не работаю.(держу в курсе)

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

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

Кто ясно мыслит, тот ясно излагает. Только не языком. Язык для программиста это его программа. Поэтому надо код смотреть.

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

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

Сомневаюсь, что люди со способностями ясновидящих вообще станут работать программистами.

UFO just landed and posted this here

А что если "сопровождать ваш код будет склонный к насилию психопат, который знает, где вы живёте"

Прощу прощения за бородатую шутку

UFO just landed and posted this here

А удалось в результате переписать как хотели?

UFO just landed and posted this here
сделал всё сразу по уму, изначально потратив совсем чуть-чуть больше времени
Может, он считал, что следует принципам YAGNI и KISS? ¯\_(ツ)_/¯
UFO just landed and posted this here

Заранее вряд ли можно было всё предусмотреть. Разработчику как поставили задачу, так он и сделал. И первоначальное решение в тех условиях было вполне подходящим. Проблема возникла во время переписывания и расширения возможностей ПО. И что-то мне подсказывает, что всё упиралось в сроки, которые ну никак нельзя было выдержать.

Заранее подумать о том, что свет клином на этом модуле не сошелся, надо. Особенно когда ты не первый год в инженерии. Это вообще должно быть второй мыслью после получения задания. Делать "константами" вещи, которые с очень высокой вероятностью могут измениться - не уважать своих коллег и заказчиков. Ситуация, когда прекращают выпуск тех-же микросхем - сплошь и рядом. И далеко не всегда находится полный функциональный аналог.
Надо всегда учитывать, что жизненный цикл большинства компонентов максимум пара лет. Даже модули, выпускаемые десятилетиями промышленными гигантами, могут существенно отличаться от начального дизайна (включая характеристики и ПО).

Делать "константами" вещи, которые с очень высокой вероятностью могут измениться - не уважать своих коллег и заказчиков.

Увы, так делать это очень модный карго-культ. :(

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

UFO just landed and posted this here
Ни разу не видел чтобы люди писали «с запасом на будущее» и в итоге угадали.
Но, предположу, Вы не раз видели обратные случаи, когда писали без запаса, из-за чего впоследствие приходилось переделывать уже работающее — с перелопачиванием скопившихся данных и болями при разнесении логики. Привычка предусматривать запас появилась не на пустом месте.
Да, иногда доходят до крайностей, когда вместо скрипта на две строки создают новый проект с контейнерами и автотестами. Но наличие одной неприятной крайности не делает противоположную крайность хорошей. Любая крайность плоха, баланс нужен.

Да, крайности всегда плохо, и найти середину непросто.

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

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

UFO just landed and posted this here

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

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

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

Честное слово, не знаю откуда столько бурления.

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

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

Ну и зачем тогда был весь этот лонгрид?

О, у меня 100% попадание:

Сбивчивая речь и непоследовательность в изложении мыслей

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

Злоупотребление жаргонизмами и buzzwords

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

Перфекционизм и идеализм

Очень. Особенно что касается авто-тестов, и CI/CD

Переусложнение или оверинженеринг

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

Самоуверенность и «велосипедизм»

Когда смотрю сколько багов люди делают в своих проектах - конечно самоуверенность растет. И велосипеды делаю - как-то свой небольшой MVC-фреймворк написал. И в планах еще много велосипедов - только свободное время давай.

Туннельное зрение

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

Выводы

Не бывать мне хорошим программистом. Пойду поплачу...

UFO just landed and posted this here

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

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

UFO just landed and posted this here

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

Я про статью. Очень не похоже на Хекслет, какую-то дичь написали.

Таких статей много, за каждую переживать — нервов не хватит.
Лично меня смущает здесь только оценка сообществом. Есть что-то странное в том, что произвольный набор спорных постулатов перешагнул в оценках через полтинник (уже +60). Спорность подтверждается многочисленными комментариями, но что-то еще я явно не учитываю, что-то положительное находят люди в этой статье, и меня смущает то, что я не понимаю что именно.
UFO just landed and posted this here
+73 вчера вечером, +83 сейчас — это какие-то особо умные «боты», которые льют оценки не пачкой, а равномерно на протяжении нескольких дней. То есть вряд ли это боты, просто статья реально кому-то нравится.

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

Вопрос только в том, почему приходящие люди не видят, мягко говоря, сомнительности постулатов в тексте статьи. Я по-прежнему прихожу к выводу, что чего-то не замечаю. Может, в статье такие есть хоть что-то полезное?

Людям обычно не нравится считаться плохими. Хотя быть плохими они часто не стесняются. Вот и весь секрет.

которые изменяют их морфологию, используя уменьшительно-ласкательные формы

Ага, давайте говорить "оформил запрос на оценку качества и (или) эффективности корректировки программного решения коллегами и (или) отвественным сотрудником в системе контроля версий Github" вместо "запросил пирревьюшку на багфиксик в гитхабчике".

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

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

Знаю одного программиста, в письме в каждом слове ошибка. Но программист отличный!

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

Статья звучит как попытка снизить оплату труда за "сбичивую речь" или паузу при обдумывании "уточняющего вопроса"

Статья - из крайности в крайность.

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

А я ведь помню ещё времена, когда программисту нужно было уметь только кодить, эх

автор одноименного алгоритма обхода графа, а в наши дни это подтверждают и научные подтверждения.

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

Ой, Хекслет:)
А я только что к вам попробовалась на хедхантере. И ваш, видимо, HR Полина Кокина мне уже отказала:) Давайте обсудим? Я бы была бы рада какому-то отклику чуть подробнее, чем

"к сожалению, пока мы не можем предложить вам продолжить коммуникацию на эту позицию."

Это цитата мышкой, это ответ такой мне пришёл, да. Не можем предложить продолжить коммуникацию на позицию.

Короче, вот что там было в моём мотивационном письме:

Добрый день,

буду рада собеседованию,
поскольку вакансия довольно противоречивая (вроде бы, речь о PHP, вышла я к вам вообще по запросу про Laravel, но ничего подобного в самом тексте нету, а есть, напротив, про http & dns. Ну, я не очень-то сисадмин, так что в деталях о протоколах tcp udp и компания не расскажу - хотя понимаю в целом, как там пакеты ходят туда-сюда, реальные мои навыки заканчиваются на уровнях типа ajax, axios и компания)

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

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

Добавлю, что буду рада и ГПХ, и договору с ИП. Другое дело, что как ИП я бы не хотела заморачиваться актами и договорами сама - если ваша бухгалтерия может это вот всё оформлять, отлично. Если же нет... для меня это будет минусом, хотя и преодолимым

Мария, добрый день еще раз :)

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

Из резюме и сопроводительного письма увидела, что основной ваш опыт работы - это репетиторство по математике. Соответственно, причина отказа - нерелевантный опыт.

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

Добрый день, Полина,

вот начало моего сопроводительного письма:

"Почему я могла бы вам подойти, как мне кажется:я преподаватель с хорошим стажем (хотя в основном я преподаю математику, а не программирование),сравнительно много пишу на laravel (на чистом php бывает тоже, но... просто для тренировки, на литкоде - вот, например, задачка оттуда: https://github.com/MaryRabinovich/leetcode_numSubmatrixSumTarget ). "

Перефразирую:

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

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

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

вот, например, задачка оттуда: https://github.com/MaryRabinovich/leetcode_numSubmatrixSumTarget

Код не смотрел, но у Вас получилось решение быстрее очевидного O(N^2 * M^2) для матрицы MxN?

Угу, с одним уточнением - это не то, чтобы "у меня" получилось. Конечно, тут фишечка в алгоритме, "а воплотить на пыхе сможет каждый дурак".

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

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

У индуса для одномерного идея в следующем:

1) строим хеш-таблицу сумм подмассивов от 0 до k, k от 0 до n.

Ключами становятся эти частичные суммы, значениями - массивы соответствующих k.

Пример: исходный массив [10,1,0,2], хештаблица: 10=>[0], 11=>[1,2], 13=>[3].

Поясню пример: с суммой 10 от левого края только один подмассив, от 0-го до 0-го элемента (ну то есть он сам, нулевой элемент). С суммой 11 два подмассива: от нулевого до первого элемента, и от нулевого до второго. Остался один подмассив, от нулевого до третьего, и там сумма 13.

2) если нам надо сумму s, допустим - сумму 1 в моём примере,

а) проверяем, есть ли у нас ключ s; если да, учитываем длину массива в хештаблице на ключе s - в моём примере вообще нет ключа 1,

б) дальше перебираем ключи, проверяем для каждого ключа x есть ли у нас ключ x+s, если есть, идём внутрь соответствующих массивов и выбираем пары "k(x), k(x+s)" такие, что второе к больше (правее) первого.

В моём примере:

берём ключ 10, обнаруживаем наличие ключа 10+1=11, смотрим, сколько у нас пар "элемент массива с ключом 10, элемент массива с ключом 11, причём второй больше первого". Таких у нас две пары: (0,1) и (0,2),

берём ключ 11, видим, что ключа 11+1=12 у нас нету,

берём ключ 13, видим, что ключа 13+1=14 у нас нету.

Всё, оказалось, у нас два подмассива с нужной суммой 1.

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

Одномерный вариант дано решал со словарем (сумма => количество), он простой, линейный.

А тут действительно сводится к нему - для строк i = 1...M, j = i...M, можно поддерживать массив высот: heights[k] = sum(arr[i][k] ... arr[j][k]), а уже для этого массива height запускать одномерный варинат. Итого O(M^2 * N) по времени, O(N) вспомогательной памяти. Вроде прикольная задача.

Со словарём "сумма => количество" не получится. Надо хранить массивы правых концов, а не просто количества. Иначе вы не сможете различить итоговые подмассивы с суммой s и с суммой -s. То есть, такой вариант допустим, только если s = 0.

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

Э-э-э, а что вам мешает отличить подмассив с суммой 1 от подмассива с суммой -1?

Отвечу коротко: смотря что у вас "подмассив". Зависит от алгоритма. В изложенном выше в моём очень длинном каменте (который никто не читал, кмк) алгоритм подразумевает, что "подмассив" - это "от левого края и до чего-то". А "итоговый подмассив" - это разница между такими двумя. Что позволяет единожды вычислить (одну сумму реально, мы просто суммируем все элементы последовательно, дописывая хеш-таблицу на каждом шаге), это O(n) операций.

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

ЗЫ это вы поставили минус моему комментарию выше, да? Просто любопытно. Редкая ситуация, когда я ввязалась в длинное обсуждение по программированию, а не по жизни, и вот теперь задумалась: стоило ли вообще отвечать на комментарий "код не смотрел, но... ?"

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

Читая я ваш комментарий, читал. Так вот, при "просто суммировании всех элементов последовательно с дописыванием хеш-таблицы на каждом шаге" словаря "сумма => количество" более чем достаточно.

Приведите пример, пожалуйста. Конкретный пример с конкретным массивом, как вы его обрабатываете.

Ну вот вам одномерный случай:


static int CountOfSum(IEnumerable<int> items, int target) {
    Dictionary<int, int> sumToCount = new() { { 0, 1 } };
    int sum = 0; // накопительная сумма
    int result = 0;

    foreach (var item in items) {
        sum += item;

        int count;
        if (sumToCount.TryGetValue(sum-target, out count))
            result += count;

        sumToCount.TryGetValue(sum, out count);
        sumToCount[sum] = count+1;
    }

    return result;
}

Конкретный массив как-нибудь сами подставьте.

Конкретный массив как-нибудь сами подставьте.

Любопытно, что вы написали "подставьте", но слышится "дура, возиться ещё с тобой".

Всё таки буду вам благодарна за конкретный массив.

АПД хотя да, присмотрелась - вы тоже делаете с накопительной суммой (как и @Alexandroppolus). Естественно, TryGetValue у вас идёт внутрь текущего массива.

Скорее всего, мы решили по разному. Вот мой зачтенный вариант. Он действительно с хэштаблицей (сумма-количество).

кодъ
/**
 * @param {number[][]} matrix
 * @param {number} target
 * @return {number}
 */
var numSubmatrixSumTarget = function(matrix, target) {
    const rowLength = matrix[0].length;
    const map = new Map();
    const heights = matrix[0].slice();
    let result = 0;

    for (let i = 0; i < matrix.length; ++i) {
        for (let k = 0; k < rowLength; ++k){
            heights[k] = 0;
        }

        for (let j = i; j < matrix.length; ++j) {
            map.clear();
            let sum = 0;
            const row = matrix[j];

            for (let k = 0; k < rowLength; ++k) {
                heights[k] += row[k];
                sum += heights[k];
                const countSum = map.get(sum) || 0;
                const countSumMinusTarget = target ? map.get(sum - target) || 0 : countSum;
                map.set(sum, countSum + 1);
                result += countSumMinusTarget;
            }
            result += (map.get(target) || 0);
        }
    }
    
    return result;
};

по хорошему тут надо бы сначала выяснить, что больше - высота или ширина матрицы, и уже от этого плясать, чтобы в O(N^2 * M) было N <= M, но я забил )

Чисто навскидку, да, похоже, решения разные. Вы постепенно проходите таблицу, расширяя так скажем рабочую область, и держите переменную sum, обнуляемую на каждой итерации. Поскольку внутри этой sum всегда некая общая сумма, у вас map.get(sum - target) заведомо говорит о вариантах где-то внутри текущей рабочей области.

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

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

АПД проверила, что же там в моём коде.

Похоже, там по итогу квадратичный порядок. Она реально была офигенно быстрая - там при приёмке писали "быстрее 100% решений", и с памятью тоже супер какой-то. Сначала глазам своим не поверила. Десять раз перезапускала, или одиннадцать.

Ещё раз обдумала разницу в алгоритмах. И в оформлении. Ну то есть это реально один алгоритм, оформленный разными способами: вы делаете всё в одном файле, во вложенных циклах, и с каждой новой частичной суммой вы проверяете, есть ли комплементарная. И если она уже есть, вы добавляете число по ключу "комплементарная сумма" в общую копилку. А дальше уже добавляете ключ "текущая частичная сумма" в мапу, если его там не было, или наращиваете значение по этому ключу, если он уже был.

И тут вот засада, мне кажется.

Возьмём исходный (одномерный, да, не матрицу) массив [1024, и дальше тыща нулей]. А таргет, допустим, 1.

Как отработает алгоритм, сначала строящий мапу? Ну, он запишет единственный ключ, 1024, и дальше на нём будет висеть массив всех возможных правых краёв (от 0 и до конца). После чего алгоритм один раз вычислит 1024 - 1, увидит, что нету в мапе ключа 1023, и предъявит 0.

Как отработает алгоритм, одновременно строящий мапу и проверяющий по текущим частичным суммам, не было ли комплементарных ранее? Мапу он будет писать в виде 1024 => единственное растущее число. В этом месте, вроде бы, выигрыш по числу требуемых полей. Однако число обращений к мапе всё то же. Далее, и тут засада: разность 1024 - 1 вы вычисляете тысячу раз. Потому что на каждом шаге у вас текущая сумма 1024, а комплементарная ищется как эта разность. Я про map.get(sum - target) в вашем коде.

То есть, при выигрыше по месту в памяти в тысячу элементов вы в операциях ту же тысячу потеряете.

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

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

Придётся, конечно. Но это всё те же тысяча обращений.

Т.е., при разделении действий я тысячу раз обращаюсь к мапе, дописывая индексы. А вы тысячу раз инкрементируете количество левых подмассивов с суммой 1024. То есть, вы тысячу раз перезаписываете одну ячейку, а я дописываю всё новые тысячу ячеек.

Но у меня не будет

а) лишнего вычисления разности (тысячу раз) и

б) лишних проверок, есть ли такое в мапе (это отдельная тысяча обращений к мапе)

Естественно, можно найти примеры обратные (причём их много), где ваш алгоритм (вернее, ваше его оформление) сработает сильно быстрее и экономнее по всем фронтам.

Алгоритм-то реально один. Различия именно в оформлении.

Уточню, что число 1024 я взяла неспроста - это даже не 1024, а "максимальная степень двойки в системе". Чтобы вам вычисление 1024 - 1 обходилось максимально затратно: чтобы там все нули разрядные надо было перебивать единицами.

Уточню, что число 1024 я взяла неспроста — это даже не 1024, а "максимальная степень двойки в системе". Чтобы вам вычисление 1024 — 1 обходилось максимально затратно: чтобы там все нули разрядные надо было перебивать единицами.

Разность чисел влезающих в регистр на любом современном процессоре вычисляется за константное время.

Разность чисел влезающих в регистр на любом современном процессоре вычисляется за константное время.

:) Спасибо за уточнение. Какой полезный-то разговор оказался:)

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

Интересный получается подход. Давайте вместе разберём:

Из резюме и сопроводительного письма увидела, что основной ваш опыт работы - это репетиторство по математике. Соответственно, причина отказа - нерелевантный опыт.

Вам по русски написали, что в коммерческой разработке предпочитают фреймворк Laravel? Вам совсем ума не хватило загуглить что это такое?

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

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

И очень прошу, без таких оправданий:

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

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

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

Велосипедизм.

Ясно, понятно.

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

Особенно вспоминается недавняя статья Хекслета о неприменимости SOLID в реальных условиях потому, что лошадь_в ванной_с_огурцами.jpeg

UFO just landed and posted this here
Привычка использовать избыточные или неявные синтаксические конструкции. Например, оборачивать весь код код функции в try/catch, явным образом приводить типы в слаботипизированных языках

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

Не смог читать дальше второго пункта

Имхо, бред полный. Что только ненавыдумывают абы усложнить программистам жизнь на собеседовании. Конечно, зачем на собесе просить код писать, а давайте будем слушать как он разговаривает, ведь количество употреблений слова "апишка" и "тэзэшка" это гораздо более сильный признак того, как программист пишет код, чем, собственно, попросить его написать код на собесе или задизайнить что-нибудь.

Напоминает собесы в Амазон, где на каждом из 4-5 собесов половину времени занимает сторитэллинг

Каждый второй значит? Эти психологи не дают спокойно работать людям!

Коротко про этот текст - поверхностно, преувеличенно и иногда откровенно не правдиво.

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

Про buzzwords было особенно забавно, когда через параграф читаешь про оверинжинеринг и тд)) Ну и тут тоже ничего такого нет, ну использует человек жаргон и что? Может на прошлом месте это было нормой и человек просто привык, может такой период в жизни.

Перфекционизм вообще не как не связан с примерами! Примеры это набор стериотипов или доведенных до категоричности тезисов. Где во фразе "Фреймворк или язык X лучше фреймворка или языка Y" перфекционализм я не понимаю.

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

Статья в стиле "Гадаем на код по вторичным половым признакам"

К форме черепа не присматриваитесья? Родословной?

По моему евгеника сейчас не в моде

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

Основная мысль статьи притянуть за уши логику и поставить знаки строгого равенства (вместо возможно) там где им не место.

Как в бородатом анекдоте:

"- Гоги, у тебе аквариум есть?

- Нэт.

- Значит, ты - пид..рас!"

Хорошие критерии для поиска разработчиков, если у вас вилка х2 от рынка.

Первые два пункта - явно самые резонансные. Стоит отметить, что жонглирование терминами (технотрёп) легко проверяется техническим вопросом по теме. А просто англицизмы и жаргон - норма в данной области.

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

UFO just landed and posted this here

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

А вот сложно решаемых проблем стоит добавить:

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

  2. Человек не идет на компромиссы и упрямствует до посинения. Иногда это полезно, но намного чаще это контр-продуктивно. Обычно такого разработчика можно убедить только авторитетом. Т.е. просто приказать делать не так как он хочет. Но работать в таком режиме долго не получится.

Наиболе заметно по резюме и форматирвоанию кода

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

Есть примеры хороших специалистов, которые давали рваное резюме, написанное на скорую руку, с бардаком в форматировании кода, но на которых молится вся команда? Нет? Ну тогда притензия из разряда "вы меня не взяли потому что я черный (а не потому что образования нет)"

Ну вы и загнули. Это прямо рассовая теория какая-то. Не одобряю такого. Максимализмом страдают все в юном возрасте, и он выражается во всем и в работе тоже. С жизненным опытом это проходит. И не нужно переусложнять. А те кто делят всех на сильных и слабых страдают элитаризмом.

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

П.С.: Кстати, заметил, чем больше ненумерованых списков тексте, тем вероятнее это коммерчески направленая статья. Сразу контент-маркетингом за версту несет.

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

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

Всё гораздо проще, говоришь программисту "stackoverflow", если зрачки сузились, а писька встала, то перед вами плохой программист.

Не благодарите.

UFO just landed and posted this here

Преждевременная оптимизация говорите?

Тимлид: не надо заниматься преждевременной оптимизацией!

Тимлид: не надо переусложнять!

Он же, через полгода: все оказалось намного сложнее, нам нужны новые фичи!

Тимлид: как это? Все нужно переделывать?

Тимлид: Мы не можем себе это позволить, релиз на носу!

Хе.

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

Отсеивают разработчиков по словарному запасу, а потом начинают ныть:

  • Не можем найти разработчика

  • Че разработчики так много денег хотят

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

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

Злоупотребление терминами - это практически ничего не значит в профессиональном смысле. Да, каждый термин имеет свой русский перевод (баг, фича, инстанс, закоммитить и т.д. и т.п.), но чаще всего так быстрее донести смысл, чем вспоминать его русское значение. Попробуйте сделать это прямо сейчас!

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

Идеализм - да вообще нет такого. Ни один нормальный человек не будет добавлять в коллекцию уникальных значений новый элемент через List с проверкой, когда есть Set. Максимум, что может быть в такой ситуации - это джун, выдающий себя за миддла. Знаний - ноль, зато уверенности - хоть отбавляй. Ну это уже про самоуверенность. Велосипедизм - туда же. Просто узнайте у собеседника про его опыт. Год-два - за такой период нельзя вырасти в полноценного миддла. Спросите, читали ли Кента Бека, Роберта Мартина, Мартина Фаулера, Гради Буча... спросите про шаблоны, джун ответит только про синглтон, что по сути даже является антипаттерном.

Переусложение - это редкость. Думаю, ни один здравомыслящий человек не будет сидеть 2-3 дня и украшать свой код до неприличия, пока начальник не поинтересуется, а чего ты копаешься так долго. Есть сроки, дедлайны, спринты. Тебе отводится кусок времени на задачу, и ты её делаешь. Ты не можешь молча сидеть дальше и доделывать/переделывать. Тебе надо как минимум сказать тимлиду, что вот такая-то вещь написана слабо, или плохо интегрируется. Надо сделать рефакторинг, чтобы было удобнее или снизить риск ошибок. Согласовав, что надо сделать и сколько это примерно займет, тебе дают добро и дополнительное время. Никто не будет говорить "нет, нам надо только вот так, и никак иначе". Все понимают, что ошибки надо исключать. Несогласование мелких случаев, не требующих длительных по времени затрат, скорее придаст программисту статус большей самостоятельности. В это же время согласование с бизнесом более долгих работ закрепит за вами ярлык ответственного сотрудника, выявляющего скрытые нюансы, на которые бизнес не обратил внимания. Другое дело, если ты работаешь по старой школе, когда тебе назначают куча задач, ты выбираешь любую, делаешь сколько хочешь (или можешь), и все ждут только тебя. Разработчик - наш кормилец и царь-батюшка. Как заслужить такой авторитет - загадка!

"Туннельное зрение" - о чем это вообще? Цитата (под привычкой подразумевается идеализм): "эта привычка основана именно на предшествующем опыте и мешает разработчику получать новый, более конструктивный опыт". Чтооааа? полученный опыт мешает приобрести старый? Да, человеку свойственно сохранять удачный опыт и отбрасывать неудачный. Так он растет. Идеализировать один какой-то конкретный опыт в чем-то - никто так не делает. Выбор IDE зависит от языка. Java - IDEA, C++/C# Visual Studio, Delphi - Embarcadero RAD IDE, PHP - Eclipse, NetBeans и прочие бесплатные. И да, за софт платит компания, для физ. лица дорогое удовольствие - платить за полюбившийся софт.

Выводы: Ну надо искать другие признаки. Эти никуда не годятся. Наверное самый главный из них - мотивация. Мотивированных людей сразу видно. Если у него нет опыта, но он мотивирован, глаза горят, хватайте его и растите в своей компании. Этот человек добьется немалых успехов и принесет солидный доход. А если он проводит рабочее время в youtube, ВК, ОК, ФБ, инсте, чатится в телеграмм, а под конец рабочего дня пытается за час-два уложиться в готовое решение... Гнать в шею паршивца!

Сам я успел с разными людьми поработать, есть любитель топорного способа (например у нас в Dynamics AX есть енум NoYes = (No, Yes), который он всегда сравнивал с 0 и 1. Иногда даже просто в if-выражениях явно сравнивал булевый результат с 0 или 1. Это прям бесило!). Есть и мотивированный парень инвалид, он уходил в отпуск, чтобы из дома порефакторить код в спокойной обстановке. Помимо программирования, он ничего другого не делает. Он - гик и интроверт. Но это никак не минус. Сейчас ему примерно 45, и он - реально ходячая энциклопедия. Но вот с общением у него не все так гладко, мысли путаются (это же явный звоночек, не так ли?). Когда спрашиваешь его о чем-то конкретном, он пытается объяснить абсолютно все нюансы, хоть как-то касающиеся вопроса. Он может час тебе объяснять ответ на вопрос, на который надо было ответить либо да, либо нет. Однако он идеально и практически без ошибок работает и укладывается даже в нереальные сроки.

> Если человек многословен, то и код его будет избыточен.

10000% так

Легко понять - постоянно ноет что все плохо, кговавый режым и пора валить

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

Внимание! Здесь я буду откровенно придираться к тексту.

Кроме того, стоит отдельно исключить из этого правила случаи, когда у человека есть органические или неврологические нарушения речи, такие как заикание или афазия.

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

При разработке сервиса бронирования (ресторана, отеля, медицинских услуг) такой разработчик может потратить лишние часы или дни на особую обработку случаев, когда база данных пустая, когда объект бронирования меняет свой ID, когда два запроса от разных пользователей конкурируют за общий слот, и так далее. Важно, что это может быть неплохая идея сама по себе, но отличие в том, что «сильный» разработчик поинтересуется у менеджера или заказчика, насколько это важно делать прямо сейчас, и реальна ли вообще проблема, прежде чем ее решать. Тогда как «слабый» программист, склонный к переусложнению, потратит на это время при любом раскладе, ни с кем не посоветовавшись.

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

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

UFO just landed and posted this here

"Зачем в автомобиле ставить подушки безопасности и тратить время на их разработку. Делать удобные кресла. Зачем-то оставлять место для багажника"... Надо быстро сделать.
"Зачем тратить время на проклейку пароизоляции при строительстве каркасного дома?" Главное быстрее достроить стоит вроде дом да и ладно.
и так можно продолжать бесконечно. Не нужно ничего переусложнять. Как персонаж из известного мультфильма "и так сойдёт"...
Живём мы в эпоху такую "Эпока коекакеров". При чём когда на нашем пути приходится заказывать работу у таких людей результат никому обычно не нравится.

Потом берёшь такую поделку на скорую руку где вообще нет проверок на ошибки и думаешь... ёпрст как это должно работать на твой взгляд вообще? А не важно, проект сдан, деньги получены. Как это будет работать не проблема коекакеров.
Последний раз столкнулся с таким шедевром на портале клиники где во время записи пациента в принципе нет никаких обработок ошибок. Вплоть до того что тупа нет записи к искомому врачу. Результат - заваленный звонками каллцентр с вопросом какого х выбираю врача и при нажатии кнопки записи просто вылетает "неизвестная ошибка". Зато программист самый лучший - в принципе не обрабатывает никаких "ошибок".

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

UFO just landed and posted this here

Сбивчивая речь и непоследовательность в изложении мыслей
интересно, Илон Маск плохим был програмистом?

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

Плохого разработчика легко распознать по CV.
Пример
image

Это реальный чел к нам пришёл устраиваться…

Это не плохой разработчик, это индус канонический просто. Ну принято у них писать ВСЕ, чего касался в резюме - иначе "так ты слона не продашь".

Я про национальность не в курсе (собеседовал не я лично, а спросить не могу, так как приватная информация). Но да, они такое любят. Вали всё в кучу, авось прокатит.

Как ни странно, но такое резюме (где, как @gremstaзаметил, описано всё чего касался) больше привлечёт хрюшу, чем пара строчек того, чем действительно хорошо владеешь.

Ну блин, оно же очевидно, что чел просто нахватал buzz-words и повписывал себе в CV. По итогу его позвали на онсайт, но там он тупо пытался обмануть и заговорить собеседующих.

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

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

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

При этом сама статья написана достаточно ультимативно.

Достаточно ультимативно?

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

Автор в самом начале прямым текстом написал, что воспринимать эту информацию "ультимативно" не стоит.

Не заметил эту оговорку. Согласен.

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

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

Хороший программист пишет код. Плохой программист тоже пишет код, но плохо.

Многое конечно верно (хотя есть холиварные моменты), но чтобы на собеседовании это выяснить, нужно быть джедаем 10000 уровня!

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

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

Есть вероятность что компания уже понабирала умеющих только говорить но с нахождением решений у них плохо

хорошо разбито по пунктам и с пояснениями - то о чём любой тимлид знает но это не всегда формализованно

странно что так много хейта

Спасибо, прямо в точку о наболевшем!

Считаю, что перфектционизм свойственен большинству программистам/разработчикам, главное чтобы это не выливалось в "оверинженеринг". Если перфектционизм будет "здоровым", это даже хорошо.

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

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

Как понять что перед вами плохая статья на Хабре? Прочитав эту, поймете как)

А вообще хорошие разработчики говорят хорошо на языке кода. Вы наверно перепутали хороших разработчиков с хорошими продавцами или политиками)))

"Желание учесть абсолютно все пограничные случаи работы приложения "
Я был бы недоволен разработчиком который не продумал все edge cases и выпустил код который падает, подвержен атакам, и т.д.

"слияние веток в git всенепременно через rebase. "
Да, лучше наверно специально мержы делать чтобы это правило не нарушать, и быть хорошим разрабом, да?

Это так, два примера (из многих)

про связь речи и написания кода было интересно, надо опробовать эту теорию на практике)

"Как понять, что перед вами плохой автор статей на хабре"

"Слабый" автор склонен сыпать названиями эффектов не осознавая их неактуальность. Например, слабый автор может упоминать эффект Данинга-Крюгера в 2022 году (не в 2002). Причем может сделать это со ссылкой на вики, где есть не только определение "эффекта", но и раздел "критика", который полезно читать. Но это делают только "сильные" авторы "статей".

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

Насчет плавности речи и большого словарного запаса - это чушь. Известно, что за технические способности и за речь отвечают разные полушария мозга. Это совсем разные способности - в одном случае в гуманитарной области, в другом - в технической. И редко бывает так, что талантливый гуманитарий еще и в технических десциплинах силен. Вспомните - у вас в школе были ребята способные к математике и физике, а были способные к русскому, литре, истории и т.д. И эти группы слабо пересекались. Кадровики в IT отлично знают, что то, как говорит кандидат, совсем не важно. Лучшие программисты, с которыми я работал, были весьма костноязычны. А если у разработчика синдром Аспергера?! Среди таких весьма много крутейших спецов. Но какие из них ораторы?! Так что не насаждайте глупых стереотипов.

Ну плохим обзором это никак нельзя назвать