Что я узнал за ~20 лет работы программистом:
ТЕОРИЯ:
- Конкретные знания, полученные в школе и ВУЗе быстро забываются. Надо забрать с собой технику обучения как такового, логическое мышление, умение систематизировать свои собственные знания.
- Необходимо строить связанную непротиворечивую систему знаний у себя в голове, к которой будут прирастать новые знания. Останавливаться в развитии нельзя, иначе придётся идти работать в банк :)
- Важно пользоваться логическим аппаратом не только в своей узкой области - этим страдают очень многие специалисты, но от этого они становятся всё более и более "пробирочными". Таким очень тяжело менять область деятельности на что-то смежное, новое и высокооплачиваемое.
- Фундаментальную теорию преподают тогда, когда она наименее полезна, а ценность её околонулевая.
- Хорошее соотношение теории и практики это 1 к 2. Не стоит насильно впихивать в себя теорию - без практики она к вам не прилипнет.
- На начальных этапах практика в разы важнее любой теории, однако становясь всё более и более опытным - всё более и более кусаешь локти, что не досидел тогда на лекциях по статистике, теории вероятности, даже функциональному анализу.
- Быть узким специалистом хуже, чем шарить в нескольких смежных областях.
- Успех командной работы в коммуникации. 80% споров не фундаментальны и вообще возникают по причине неспособности выработать общий язык (Ubiquitous Language - DDD) и передавать своё видение в его рамках.
- Лучшие художники воруют: решение задачи или проблемы проще найти и адаптировать, чем написать с нуля.
- Беритесь за новые языки и фреймворки. Есть переносимый и не переносимый опыт. Не переносимый опыт довольно бесполезен для развития. Переносимый опыт вырабатывается только в выявлении одних и тех же подходов, реализованных по-разному в разных языках или фреймворках. Вы начинаете знать не инструмент, а программирование как таковое. Пример: filter, map, reduce - универсальные примитивы для работы с коллекциями, в той или иной форме встречаются везде.
- Элегантность и дизайн языка важнее его реализации или быстродействия. Быстродействие подтянут, реализацию - перепишут, уродливость устранить невозможно. (Дада, я сейчас про Ruby vs Python).
- Лучший опыт и знания извлекаются из рефакторинга собственных (и чужих) решений. Напишите сначала работающее говно, а потом сделайте его более красивым и эффективным. Повторяйте пока не надоест или усилия очередной такой итерации не будут стоить никакого результата.
- Ни один двадцатилетний айтишник не сможет системно превзойти сорокалетнего. Возможно в какой-то одной узкой области, которой он увлечён.
- Термин айтишник - это как термин врач: у нас очень много специальностей и специализаций. Айтишники из разных областей подчас плохо понимают друг друга или не понимают совсем.
ПРАКТИЧЕСКАЯ ПОЛЬЗУХА
- Стоит научиться слепой печати на клавиатуре как можно раньше - клавиатура вечна.
- Всеми правдами и неправдами надо владеть английским языком на приемлемом уровне.
- Изучайте инструменты, которые облегчат вам жизнь и ускорят рутину: тайловые оконные менеджеры, модовые (mode) текстовые редакторы, консольные утилиты *nix систем - это база.
- Git, способы организации веток, semantic versioning ПО и подход шеринга изменений через merge реквесты обязателен к изучению до того, как вы начнёте работать в команде, пусть даже из двух человек.
- Гошечка, на данный момент, пожалуй лучший язык программирования, чтобы начать. Обезьяна с ампутированной половиной мозга уверенно становится джуном за пару месяцев. Если прийти с другого языка - освоение азов занимает неделю или две. Golang - прост и бездушен до омерзения, поэтому это один из лучших языков для командной разработки. С одного взгляда на Merge Request становится понятно, говно тебе принесли или нет.
- Надо уметь задавать вопросы: людям, гуглу, нейросети
- Формулируйте вопросы (да и вообще ведите общение) так, чтобы сразу обеспечить собеседника полнотой вводных данных и внести однозначность в ваши слова
- Вас будут окружать дебилы, вы будете стараться их избегать.
- Процессы не будут работать, вам придётся выстраивать личные связи с другими недебилами - они делают так же и записывают ваше имя в собственный блокнотик с недебилами.
- Нет ничего страшнее чем "сумеречный гений" в команде: код должен быть чуть выше чем посредственным для той или иной команды, иначе всё пойдет прахом от басфактора. "Творцы нам тут нахуй не нужны. Криэйтером, Вава, криэйтером..."
- Внимательно читайте сообщения об ошибках
- Пишите комментарии в коде там, где написанное не самоочевидно даже для самого себя из будущего - поверьте, вы не раз и не два будете проклинать себя из прошлого за отсутствие комментариев там, где они необходимы.
- Пишите внятные commit messages
- Старайтесь писать грамотно