Все дело в концепциях

Вы хотите быть отличным разработчиком, инженером-программистом, который может писать код на нескольких языках, человеком, который знает, как использовать Rails, Django, все или большинство весенних проектов и Hibernate, вы знаете ruby, python, Scala, java, javascript и всю вселенную библиотек и фреймворков javascript, и вы называете себя инженером-программистом, но вы не можете понять историю, которую рассказывает вам ваш клиент, поэтому вы можете перевести это на программное обеспечение и смоделировать проблему, чтобы информировать и общаться с другими инженерами что делать и как решить проблему клиента. Что ж, если вы узнали себя в этом описании, вы можете иногда почувствовать пустое пространство внутри себя, подобное темному пространству страха и сожаления о том, что не изучили концепции, лежащие в основе практики. Или вы просто знаете, что вам нужно больше теоретических занятий.

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

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

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

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

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

Есть отличные коллекции книг, которые помогают в этом, некоторые из них:

GOOS - рост объектно-ориентированного программного обеспечения с тестированием, Чистый код,
Эффективная работа с устаревшим кодом,
Шаблоны проектирования - элементы программного обеспечения многократного использования,
DDD - Domain Driven Design ,
Внедрение доменно-ориентированного дизайна ,
Test Driven Development

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

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

Итак, если вы начинаете прямо сейчас или хотите начать и хотите воспользоваться моим советом, я бы сказал вам:

  1. Начните с понимания основ языка, который вы хотите выучить.
  2. Попробуйте создавать действительно простые, но полезные приложения
  3. Как только вы поймете, что понимаете основы языка, попытайтесь погрузиться в концепции. Имейте в виду, что концепции сложнее выучить, чем языки, и, возможно, вам придется читать и читать снова. Вы будете чувствовать, что никогда не сможете применить это или научиться, но вы это сделаете. В конце концов вы увидите, что мыслите иначе, чем раньше, и чем больше вы читаете, тем больше вы будете анализировать это знание.
  4. Сделайте какой-нибудь проект. Попробуйте применить в проекте язык, концепции и рамки. Нет лучшего способа сделать это.

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

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