Как стать автором
Обновить

Комментарии 52

НЛО прилетело и опубликовало эту надпись здесь

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


Но поднимать вопросы производительности — это вполне правильно. За это спасибо!

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

Знаете, что самое смешное? Те люди, благодаря исследованиям которых сделали вывод о существовании 10x программистов, писали, что 10х получается не из-за программиста, а из-за инструментов, языка и команды. Такие дела.

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

как скрипт ускорит написание нового кода в современной IDE мне не очень понятно

За последние два года у меня не было ни одного раза, что бы повторились, или были хоть как-то похожи задачи на работе. Вы уверены, что это не у Вас должность — шлёпать КРУДы, автоматизировать тесты, или верстать фронтент?

Абсолютно уверен.


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


Пример 1

Партнёр предоставляет данные в файле, который можно воспринимать как fixed width, то есть


значение 1  ,значение 2    ,значение 3    ,значение 4
значение 5  ,значение 6    ,значение 7    ,значение 8

(К сожалению, парсить этот файл как CSV нельзя, потому что значения могут сожержать кавычки и запятые.)


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


print value1
print ","
print value2
print ","
print value3
print ","
print value4

в результате чего получается файл


значение 1  ,значение 2    ,значение 3    ,значение 4
значение 5  ,значение 6    ,,значение 8
значение 11 ,значение 12   ,значение 13   ,значение 14

То есть это не CSV, но и не fixed-width! Но данные-то на месте, и файл должен загрузиться. Соответственно, открываю написанную мною библиотеку и дописываю обработчик такой ситуации (а заодно, раз уж открыл, и десятка аналогичных).


Пример 2

Файл — обычный CSV с заголовками, то есть


ЗАГОЛОВОК 1 ,ЗАГОЛОВОК 2   ,ЗАГОЛОВОК 3   ,ЗАГОЛОВОК 4
значение 1  ,значение 2    ,значение 3    ,значение 4
значение 5  ,значение 6    ,значение 7    ,значение 8

НО! В один прекраcсный день тот, кто готовил этот файл, похоже, немного недоперепил, и мы получаем


значение 1  ,значение 2    ,значение 3    ,значение 4
ЗАГОЛОВОК 1 ,ЗАГОЛОВОК 2   ,ЗАГОЛОВОК 3   ,ЗАГОЛОВОК 4
значение 5  ,значение 6    ,значение 7    ,значение 8

Причём данные все корректные, но с форматом опять пришёл полярный лис!


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

Почему вы не валидируете данные на этапе ввода/импорта?
НЛО прилетело и опубликовало эту надпись здесь

Интеграции — зачастую не самая скиловая команда на проекте. Толковым ребятам быстро надоедает по недописанным спекам мапить поля в парсере. Вы скорее 10х json/csv parser

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

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

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

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

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


Ну бред ведь. В чём профит подобного обмена в 21-м веке?

Откуда Вы знаете, какие слова я сказал в первый день на работе? :) Но — см. предыдущий абзац: ответ партнёров один — "не нравится — не скачивайте, никто не заставлет".

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

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


Кстати, несколько замечаний по теме.


  1. Сразу предупреждаю: компания из США. Так что не нервничайте, что некоторые вещи кажутся неправдоподобными: Россия пропустила некоторые вехи развития технологий, которых Америка хлебнула по полной (см. например "проблема 2000" — большинство российских программистов думает, что это про писюки, но нет, нет, в первую очередь — это про мейнфреймы, хоть и имевшие относительно много памяти, но и оперирующие многими сотнями тысяч записей, так что в этом контексте экономия двух байт на запись для 1980-х была далеко не копеечной..).
  2. Судя по некоторым неочевидным особенностям некоторых файлов, получаемых нами от некоторых партнёров (первый признак — fixed-width файл, второй — представление десятичных чиcел, для понимающих людей — PIC 9(8)V99.), они генерятся при помощи ПО, написанного на COBOL. Мне кажется, можно больше ничего не говорить — этим всё сказано...
не так я представлял себе 10х инженера…

Послушайте, Вы вообще тред-то читали? Вопросы ко мне были —


как скрипт ускорит написание нового кода

и


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

Я привёл конкретный пример, где "скрипт (библиотека) ускоряет написание нового кода", в котором "задачи повторяются в среднем раз в неделю". И эта библиотека позволяет мне приводить регулярно ломаемую партнёрами систему обратно в работоспособное состояние за весьма небольшое время. Я где-то хоть раз написал, что это — ВСЁ, что я делал/делаю?

Ваш пример — это шикарная и поучительная история, большое спасибо за неё!


А до того, что не все поняли её scope, так это жизнь. Ещё древние римляне писали: sapienti sat. Не стоит переживать по этому поводу

Не стоит переживать по этому поводу

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

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

За ответ спасибо, чем Вы занимаетесь я примерно понял.

Что интересно — мы в банке занимаемся примерно тем же — получаем данные из десятка разных систем, каждая из которых ломается на свой, особый, лад, пережевываем их и отдаём в каком-то виде дальше. При этом, как я и писал, постоянно ломается что-то новое, за всё мое время работы поломки ни разу не повторились. Исправляем, работаем дальше. Есть коллега, сертифицированный разработчик БД, умудряется на PL/SQL работать за троих джавистов, например, недавно сделала возможным загрузку очень многих миллионов строк данных, путём исправления очень и очень многих косяков в этих самых данных. При этом — решая инциденты и переругиваясь с командами, которые эти самые данные испоганили. Как ни странно, даже она не мнит себя 10х инженером. Это просто работа, которую от нас ожидают, вот и всё.
даже она не мнит себя 10х инженером.

Не нашла способа использовать свою редкость как (конкурентное) преимущество?


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

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


  1. Использование шаблонов для более быстрого создания типовых файлов. Использование сниппетов для быстрого создания типовых конструкций внутри них (for и иже с ними).
  2. Более быстрое и надёжное редактирование текста с использованием макросов vim. Vim-режим есть во многих современных IDE
  3. Если надо внести очень похожие правки в очень большом количестве файлов (типа замены по регулярке), то бывает гораздо быстрее и эффективнее провернуть их вне IDE, используя sed или условный codemod.

Список не исчерпывающий, можно дополнять. Я уж не говорю о том, что для многих "экосистем" (C/C++, Python, JS, ...) подход с автоматизацией типовых задач именно через скрипты является абсолютно естественным, и IDE в принципе не может их все заменить. Максимум, чем она может помочь, — так это обернуть скрипт в свою же запускалку, чтобы облегчить жизнь мышевозникам (вот радость то: не надо открывать консоль, чтобы напечатать make something, а можно выбрать сохранённую конфигурацию запуска в выпадашке и нажать зелёный треугольничек!).

Описали качества хорошего инженера. К ним можно стремиться. Но 10x и 1x это про производительность, контекст и наблюдателя.

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

Для меня разница между 10x и 1x — умение быстро переключаться между контекстами и проектами.

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

Мое представление (по крайней мере к этому наблюдается тренд):
10x — agile инженер
1x — waterfall инженер

Хорошее наблюдение. А теперь попробуйте мысленно поместить "agile" инженера в "waterfall" окружение. Сможет ли он по-прежнему выдерживать 10x перформанс по сравнению с коллегами?

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

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

Это довольно распространенная стратегия в корпоративном сегменте и медиа и в друших сферах
Хорошее наблюдение. А теперь попробуйте мысленно поместить «agile» инженера в «waterfall» окружение. Сможет ли он по-прежнему выдерживать 10x перформанс по сравнению с коллегами?
Хорошее наблюдение. А теперь поместите гепарда в океан. Сможет ли он там по-прежнему разгоняться до 110 км/ч?

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


Чуть более релевантный пример. Пару лет назад я читал интервью легендарного Кента Бека (к сожалению, не сохранил ссылку, а найти повторно пока что не смог). Он рассказывал, что после его перехода на работу в Facebook (в начале 10-х, что ли) на очередном performance review оказалось, что он "является" одним из самых отстойных программистов в своём направлении. Кент Бек, отец agile!


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


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

НЛО прилетело и опубликовало эту надпись здесь
Ну, добавьте мыслно спереди «Априори», а сзади ", пока они не докажут обратное", так лучше станет?
он ведь
Не удивляется, когда кто-то чего-то не знает.
НЛО прилетело и опубликовало эту надпись здесь
1х инженеры ставят плюсики если им понравился пост
о не котиках
звучит как ответственный тактичный но не очень опытный программист сотрудник.
Предоставляет коллегам конструктивные, полезные и тактичные код-ревью и отзывы, помогая им расти лично и профессионально.
и при этом:
Пишет код, который «задыхается», с багами

Мне кажется тут не совсем верный перевод, должно быть что-то вроде
«Пишет код, в котором (о, ужас!) есть баги»

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь

Смешались в кучу кони, люди (с)


Сначала навели на идею описать обычного инженера, а потом описали многое что присуще и первым, и вторым, как OR, так и XOR.


По опыту, простые правила чтобы отличить хорошего инженера от хренового:


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


  2. Хреновый инженер просто работает без переживания за проект (кобыла не моя), сидит на окладе, и/или пишет некачественные решения – где можно дать слабину (решения, диалоги, тестирование, что-угодно где можно обойтись простым некачественным решением), это может произойти.



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


Высказывание выше довольно резкое, но интересно мнение других.
Давайте жить дружно © и писать конструктивно.)

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

Проблема в том, что оценочные шкалы "хороший vs хреновый инженер" и "10x vs 1x performer" друг другу перпендикулярны. Представим, что у нас в команде работают два абстрактных инженера. Один "болеет душой" за продукт: анализирует (а порой и оспаривает, дабы улучшить) требования, пишет тесты, проводит рефакторинг и т.п. Второй по-быстрому говнякает ровно то, что описано в задании, не утруждая себя глубокими проверками. Кто из них "хороший", кто "хреновый"? А кто из них "лучший перформер" с точки зрения внешнего наблюдателя, который смотрит лишь на время закрытия фичевых тасков?

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

Заходим в репозиторий статьи и первое что видим в README.md это картинка с количеством звезд на Github… Как будто бы метрики в правом верхнем углу не достаточно.

А ниже прямым текстом написано для тех кто хочет похвастаться своим 1x статусом:
Want to show off your 1x Engineer status on your own projects/webpages?


Немного противоречиво…

Будучи относительно эффективным software engineer (так получается, что я и мои команды часто выдают больше результата при меньшей численности), начал эскпериментировать с экстраполяцией инженерных навыков в других областях: social engineering, team engineering, self engineering и т.п. Чтобы повлекло наличие многочисленных симптомов из числа описанных. Правильно ли я понимаю, что начинаю деградировать?

НЛО прилетело и опубликовало эту надпись здесь

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


Вторая — вольно интерпретированные вами social/team/self-engineering. Это то, во что мы и без того вовлечены (если только вы не бездетный, холостой затворник работающий в одиночестве, для такого может отношения с детьми и находятся в категории "bullshit"). Просто инженерные навыки позволяют существенно повысить качество. Вы будете удивлены, но ИТ — это про умение эффективно работать с любой информацией, наша деятельность очень похожа на вычислительные процессы, а принципы вроде SRP/KISS/DRY и т.п. с удовольствием прогуляются с нами и в других сферах. Я ни разу не заметил корреляции что больше времени уделённого семье, друзьям, спорту, экстремальному спорту существенно снижает мою продуктивность. Да, я стал производить меньше LoC в день, но теперь мне надо реже переписывать свой код и в итоге производительность стала намного выше.


Я бы посоветовал вам избегать штамп "нельзя объять необъятное", навязанный неудачниками. Первая причина — он легко бьётся тезисом "успешные люди успешны во всём" и примеров проникновения инженеров в другие области — легион, я уверен вы и сами с ними сталкивались. Вторая — тогда вообще нельзя идти в инженеры, тем более софтверные. Мы постоянно осваиваем новые для себя области. Сегодня это может быть электронная коммерция, завтра рекрутинг, послезавтра мы вдруг окунёмся в био-инжиниринг, крипто-валюты, AR/VR, CV. Хотя, может я просто сторонник холизма и эффективный инженер долбит одну задачу десятилетиями.

НЛО прилетело и опубликовало эту надпись здесь

Спасибо за комплименты. Намного приятней быть аутистом, чем ординаром. Но мне кажется, эта похвала не заслужена. Ведь engineering — это не "суффикс", а глагол. Я просто соединил существительное с глаголом, что делают… практически все, с первого класса и это уменьшает ценность порождаемого мной "bullshit".


Честно скажу, я даже был не в курсе, чтобы подобные примитивные языковые конструкции "плодят сущности". Я всегда думал, что civil engineering, software development, time management, market research — это применение вполне определённых методов к тем или иным областям. Не намного сложнее в своей конструкции чем "пупок почесать" или "баг починить".


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


Я верю, что данные из самых разных областей можно импортировать в реляционную БД и анализировать используя методы математической статистики и не надо реализовать специализированное хранилище для гидропоники на органических транзисторах. Но… наверняка нет ничего общего между паттернами publish-subscribe в message queues и Почтой России, композицией в приложении, фотографии и музыке. Моя ошибка считать что архитектоника в драматургии пересекается с архитектурой приложений и зданий, мы ведь не воровали "паттерны проектирования" в книге архитектора Кристофера Александра. Такое понятие как dependency применимо исключительно к NPM и никак к рецепту блюда. Много ошибок, но шизоиду вроде меня это простительно.


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

НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации