Первоклассный программист
Как стать крутым программистом? И в чем особенности данной профессии?
Прочитав эту статью вы не станете сразу крутым программистом, но мы покажем вам путь. Идя по нему вы сможете прокачивать себя и свои знания до очень крутого уровня.
В первую очередь, чтобы работать программистом вы должны детально понимать, что происходит внутри системы, когда вы пишите программный код. Что и как конкретно будет выполняться, какие "колеса" у каких дисков закрутятся или куда пойдет электрический сигнал для того, чтобы вы получили ответ. Если вы не знаете всей этой "внутренней кухни" и будете думать, что нажал на кнопку и получил результат, это финиш.ТО Вы не сможете прописать код хорошо, быстро и эффективно.
Итак, а что же нужно знать?
  • основные алгоритмы и теорию: сортировки, требования ACID, CAP-теорему, MCVV-механизм, понятия shared nothing и многое другое. Вряд ли вы, конечно, будете писать сортировку самостоятельно, но знать как она работает и чем отличаются разные виды сортировки друг от друга нужно.

  • паттерны программирования и программные примитивы: слои абстракции, объектно-ориентированное программирование, разбиение на программные модули, функциональное программирование. Это убережет вас от попыток сделать те вещи, которые гарантированно сделать нельзя.

  • архитектурные примитивы: паттерны и откуда они возникли. Даже если мы говорим о таком простом паттерне, как кэширование. Нужно понимать как и зачем использовать этот паттерн.

  • средства профилирования: dtrace, NewRelic

  • внутреннее устройство СУБД: что означают различные буферы, как база данных выполняет ваш запрос, достаточны ли буферы сортировки, основные паттерны баз данных, нормализация/денормализация

  • логика работы фронтенда, включая протоколы работы с фронтендом

  • понимание работы операционной системы: какие буферы, кэши и очереди, где они работают, на каких стадиях и как их настроить

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

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

Как этому научиться?

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

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