Три повседневных навыка в работе программиста

 Публичный пост

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

В связи с этим хочу попросить сообщество [программистов] написать примерно 3 навыка (можно меньше), которые вам нужны практически каждый день (ну или чаще других). Навыки должны быть конкретными, такими, которым можно целенаправленно научиться самостоятельно (скажем, если вы останетесь одни, у вас будет компьютер, интернет и подходящая книжка). Не обязательно они являются сутью вашей работы: например, вы можете работать над автономными роботами, но навык, который вы указываете - умение писать юнит-тесты на Python. Как правило это те действия, которые вы делаете часто и "из головы", хотя я не хочу ставить такое условие - вполне обычно, если вы иногда смотрите в документацию

Пример подходящего навыка - применение awk в bash скриптах для вытаскивания ошибок из логов.

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

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

Снова зачем - чтобы дать начинающим и не только разработчикам информацию о том, чему уделить внимание.

На примере меня (программист инфраструктуры СУБД), 3 навыка:

  • умение писать с ходу jsonpath выражения (чтобы выстаскивать поля из K8S объектов)

  • умение писать умеренно сложные SQL запросы из головы (статистика работы сервисов лежит в СУБД, иногда приходится использовать window functions, и CTE чтобы, скажем, сегментировать время ответа сервиса и скоррелировать дату с каким-то еще событием)

  • умение писать unit и regression тесты на Gо.

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

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

Ваш ход :-)

Связанные посты
56 комментариев 👇
🕵️ Юзер скрыл свои комментарии от публичного просмотра...
  • Умение пользоваться vim'ом. Если надо подправить конфиг или чуть изменить скрипт на удаленной машине, то vim — это единственный редактор, который по умолчанию там есть. Даже если пишешь код в супер крутой IDE, даже если фанат emacs'a (каковым я и был до определенного момента), навык работы с vim экономит кучу времени.

  • Понимание, как работает Git внутри. Чтобы git merge, reset, rebase, etc не вводили в ступор и не порождали снежный ком косяков. Рекомендую книгу Version Control with Git. У нее еще летучая мышь на обложке.

  • Пункт применим не ко всем, но тем не менее: умение захватывать и анализировать сетевой траффик в Wireshark или подобном инструменте. Отлично дополняет development mode браузера и помогает находить тонкие низкоуровневые баги.

  Развернуть 1 комментарий

@ktrushin, вот это в точку! К vim я бы ещё добавил tmux и в целом «уверенность» при работе в терминале. А вместо wireshark я бы упомянул tcpdump — опять же из-за консольности и, как следствие, универсальности

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...
Egor Suvorov Программист/преподаватель C++ 1 июля 2021

Три про отладку:

  • Чётко формулировать "ожидаемый" и "реальный" результат от неработающего кода.
  • Минимизировать код с проблемой до MCVE при помощи двоичного поиска по коду: закомментировали половину/убрали внешнюю зависимость/захардкодили данные, проверили, воспроизводится ли проблема.
  • В уме: интерпретировать/компилировать сниппеты на 5-15 строк и запускать их на небольших данных. Полезно, когда происходит какая-то чушь, а минимизировать больше некуда. Тогда уже надо либо опечатки/баги искать глазами, либо репортить баг в компиляторе/своём понимании языка программирования.
  Развернуть 1 комментарий

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

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...

@yeputons,

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

это хорошее описание юнит-теста :-)

  Развернуть 1 комментарий

@yeputons, двоичный поиск по коду - просто в голос от названия метода.)

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...
  1. Навык не сдаваться после N-ого по счету фейла. Каждый раз находить путь, который ещё не проверен, и после этого найти силы его проверить. Этот навык принесёт вам славу. Но единственный способ его получить, который я знаю - это фейлить.
  2. Найти что-то в повседневной работе, самую мелочь, какой-то аспект, который приносит удовольствие. Сильно связан с предыдущим пунктом, потому что ничто не мотивирует лучше, чем успех, а неудача демотивирует сильнее всего. "Ну и что, что я положил базу на проде, зато я сделал это неизвестным ранее способом!"
  3. Постоянно изменять своё рабочее окружение. Новый язык, фреймворк, тулза, оптимизированная сборка, да хотя бы новый алиас в консоли - делайте что-то новое постоянно. Иначе пиздец, стремительный и неотвратимый.
  Развернуть 1 комментарий

— гуглить
— использовать дебаггер (а не console.log / echo / print)
— потратить 2-3 минуты на решение вопроса самостоятельно, а уже потом спрашивать у кого-то «постарше»

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...
Nikolai Lopin Фронтендмейстер 2 июля 2021

Самое сложное в освоении для меня:

  • Придумывать, как разбивать задачи на маленькие PR, чтобы их быстро смотрели
  • Умение работать с фича флагами, чтобы выкатывать неготовые фичи в прод. Не всегда очевидно, куда их поставить. Плохой навык оборачивается ветками с «новой версией», которые требуют много координации и работы
  • Умение писать тесты, которые имеют смысл и мокать зависимости (каждый раз страдаю с этим в Jest)
  Развернуть 1 комментарий
  1. Концентрация внимания (ядрёный и редкий навык)
  2. Абстрактное мышление
  3. Скоропечать
  Развернуть 1 комментарий

@yaroslav_miroshnikov, а третий пункт-то зачем? Часто упоминается как мастхев, но собсна в 2021 везде есть автокомплит и интеллисенс, из-за чего никто уже не пишет полотна кода как на печатной машинке. Уже хоткеи и то сильно больше нужны

  Развернуть 1 комментарий

@kadron141, 1) Предпочитаю даже первыйе пару символов не набирать однопальцевым методом.
2) Комментарии к коду и документацию делать как будешь? Автокомплит тут не поможет.
3) Коммуникация в чатах занимает время, тоже одним пальцем без проблем будешь печатать?
4) А в гугл запросы вбивать?

  Развернуть 1 комментарий

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

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

  Развернуть 1 комментарий

@kadron141, В целом согласен, но, всё-равно считаю, что скоропечать — важный навык для каждого, особенно для кодера.

  Развернуть 1 комментарий

@yaroslav_miroshnikov, ну вот я не умею, например) Когда проходил различные тесты на скорость печати, то моим методом, который тупо выработался за годы сидения за компом, выбивал наравне с десятипальцевым (по нижней границе). Я печатаю вслепую 5-6 пальцами но ходят они нифига не оптимально, просто очень быстро. И я вот хоть убей не пойму нафига мне мучать себя чтобы печатать ещё быстрее, вроде как в марафонах на переписывание "войны и мира" я не участвую :D

  Развернуть 1 комментарий

@kadron141, Я понял. У нас разная дефиниця скоропечати.

Я НЕ имел ввиду «правильный метод, с приучением правильной постановки пальцев на клавиатуре, и попеременным нажатием на пробел большими пальцами левой\правой руки»

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

  Развернуть 1 комментарий

@yaroslav_miroshnikov, а, понял, ну тут согласен, без этого тяжко жить) Просто в среде программистов обычно люди уже быстро пишут, поэтому когда кто-то набрасывает на эту тему, то речь идёт о десятипальцевом методе и как он крут, но никто не может объяснить, почему)

  Развернуть 1 комментарий

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

  Развернуть 1 комментарий

@yaroslav_miroshnikov, ух бля, мне до сих пор от него рассылка умудряется проходить фильтры иногда))

  Развернуть 1 комментарий

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

  Развернуть 1 комментарий
Петушков Александр Самодур и сквернослов 2 июля 2021
  1. map
  2. filter
  3. reduce

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

  Развернуть 1 комментарий
  1. Регулярки!!! И парсинг, и сложные эндпоинты, и sed, и валидаторы, даже поиск файлов/текста в IDE.

  2. Умение пользоваться cat/grep/find/awk/sed/xargs и т.д., писать на баше. Очень полезно для работы с большим количеством файлов, при работе с процессами/контейнерами на компе, при анализе логов и т.п. Можно скриптовать рутинные операции (например, git-хуки)

  3. Работа с ssh, sshfs, scp, а также с ключами, настройкой хостов и ключей в ssh-конфигах, и работа с ssh-агентом. Умение с ними работать помогает настроить любое рабочее окружение под любой сетап. Особенно, когда у вас несколько гит-серверов, есть удаленная и локальная машины и т.п.

Всё это пригождалось всегда, независимо от стека

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...
Dmitry Moskalchuk Senior Software Developer 2 июля 2021

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

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

......
File "/usr/lib/python3.8/http/client.py", line 1293, in _send_request
    self.putheader(hdr, value)
File "/usr/lib/python3.8/http/client.py", line 1225, in putheader
    values[i] = one_value.encode('latin-1')
UnicodeEncodeError: 'latin-1' codec can't encode character '\u2018' in position 0: ordinal not in range(256)

Выясняю. Оказывается, дело в том, что кастомер так засетапил нужную environment variable:

export VAR=‘123’

Лёгким движением руки на глазах у кастомера ввожу в терминал:

export VAR='123'

И всё работает! Кастомер рвёт на себе волосья и вопрошает: «Что это было?»

  Развернуть 1 комментарий

@crystax, классека. Ненавижу мак за это.

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

  Развернуть 1 комментарий

@LionZXY, Так я и не спорю. Насмотренность, да. Много раз уже набивал шишки, сходу поэтому знаю многое. А со стороны выглядит как магия.

Но что значит «отдельно такое качать очень сложно»? Это и не надо качать, это само приходит со временем. Если, конечно, работать в трезвом уме и твёрдой памяти. VIM тот же, о котором тут уже упомянули. Спрашивают: «у меня не получается в терминале скопировать текст мышкой, если он открыт в vim-е». Отвечаю: «Сделай :set mouse-=a». Работает! Спрашивает: «Как? Я уже десять лет работаю, в том числе в vim-е, а об этом не знал». Ну, так работал, видимо, не очень приходя в сознание.

  Развернуть 1 комментарий

@crystax, лично я бы вместо этого полез в то место, где читаются эти переменные, и поставил бы там валидацию и человекочитаемые сообщения об ошибках, чтобы клиент исправил эти кавычки сам

  Развернуть 1 комментарий

@golergka, Скрипт не мой, править его не могу. Но проблемы кастомера, платящего деньги — это также и мои проблемы, увы и ах. Поэтому часто приходится копаться в говнах, даже если сам бы выкинул такую поделку к чёртовой матери.

  Развернуть 1 комментарий
Alexander Shepelin Фронтенд-разработчик 5 июля 2021

Фронтенд. Не маст-хэв, но полезные навыки:

  1. Минимальное использование curl (получить ответ с кодом и заголовками, засетить хедеры, передать жсон постом). Полезно при общении с бэкендерами ("вижу вот тут 500-ю, вот запрос").

  2. Баш-скриптинг. Тут и возможность написать длинную команду с пайпами (grep ... | sed ... - чтобы что-нибудь из логов достать, например), и какой-нибудь скриптик (запуск проекта одной командой). Всё с гуглом, нет необходимости помнить опции sed или синтаксис if-ов, чтобы уметь писать это сразу из головы, не так часто надо. Принципиально просто знание "вот так можно, ща уточню как это сделать" + https://tldr.sh/

  3. Представление о возможностях CI - что можно запускать тесты и прогонять линтер на пуллреквесты, прикрутить дополнительные штуки типа Danger JS, запускать отдельные джобы только на пуллреквесты, отдельные на мёрдж. Как сделать установку и сборку быстрее, как кэшировать зависимости, чтобы не ставить их каждый раз. Навык не ежедневный и системы везде разные, но можно потренироваться на каком-нибудь github actions, чтобы сформировать представление.

  Развернуть 1 комментарий
  • Писать несложные sql запросы: сджойнить пару таблиц, сгруппировать данные, посчитать агрегат. Часто помогало получить какую-то базовую оценку качетсва полученных данных, прикинуть то, насколько частую проблему беремся исправлять и т д
  • Пользование http и db клиентами. Очень тупо, едва ли реальный навык, но использую постоянно. Их использование позволяет быстро, наглядно и всегда воспроизводимо сделать то, что легко потеряется в консоли
  • Скриптинг на питоне. Нужен редко, но метко. Питон терпеть не могу, но со своей задачей он справляется отлично. В 20-30 строк можно порешать рутинные задачки
  Развернуть 1 комментарий
  • Git (GitFlow) - нужен не зависимо от стека, платформы. В перспективе поможет и в дебаге и в организации работы сольно/команды. И темы блокчейн/event-source/бекапов станут понятней
  • MVP (User Story) - не делать сразу на года; меньше кода, больше профита; ориентироваться на результат; 5 вопросов почему, а зачем, а может не нужно ;-)
  • блоксхемы (UML/что-то свое не важно) - видеть картину в общем; сперва понять в общем виде что нужно, что не нужно (смотри пункт выше про MVP); с чего начать, и как это вообще должно работать; Бонусом хоть какой то старт для документации

P.S. Еще бы вынес отдельно - независимость - на каком то уровне делать вещи за пределами своего стека

  Развернуть 1 комментарий
🕵️ Юзер скрыл свои комментарии от публичного просмотра...
🕵️ Юзер скрыл свои комментарии от публичного просмотра...
Дима Табакеров художник-программист 5 июля 2021
  1. Понимание, что в компьютерах нет магии, и если что-то происходит, значит на то есть причина (да, порой причина крайне неочевидна, дурацкая или даже уровня "космический луч флипнул бит" - но причина есть).
  2. ...а остальное как-то получается производным из п.1
  Развернуть 1 комментарий

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

  Развернуть 1 комментарий

@Cls, можно и указать свой стек

  Развернуть 1 комментарий

Добавил в шапку

  Развернуть 1 комментарий

😱 Комментарий удален его автором...

  Развернуть 1 комментарий

😎

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

Что вообще здесь происходит?


Войти  или  Вступить в Клуб