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

Научиться кодировать может быть очень сложно, особенно если вы из тех, кто находится на пути к тому, чтобы стать программистом-самоучкой. Позвольте мне привести вам пример. «Джейк — молодой энтузиаст, который хочет сделать карьеру программиста. Однажды он просыпается, открывает свой ноутбук и делает несколько случайных запросов в Google — как продолжить карьеру программиста, как научиться программировать от основ до продвинутых и т. д.». Вы можете себе представить, какие разные мысли возникают у людей по поводу этих вопросов. Если вы на месте Джейка, который хочет продолжить карьеру программиста, сядьте поудобнее и выпейте кофе, позвольте мне провести вас через это путешествие.

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

Домены программирования

  1. Веб-программирование. Веб-программирование — это применение навыков программирования для разработки, масштабирования и обслуживания веб-приложений. Языки, обычно используемые в этой области, включают HTML, CSS, PHP, Ruby, JavaScript, Python, Java, Golang. Я предпочитаю HTML, CSS, JavaScript и Golang.
  2. Мобильное программирование (Android, ios). Мобильное программирование — это разработка нативных (мобильных) приложений, которые работают на операционных системах мобильных телефонов, таких как Android и ios. Примеры языков программирования, используемых в этой области, включают Java, Swift, Kotlin, Flutter, JavaScript (React Native). Я предпочитаю Swift, Kotlin и Flutter.
  3. Системное программирование (операционные системы, драйверы устройств) — системное программирование — это разработка операционных систем и драйверов устройств, которые могут эффективно взаимодействовать с оборудованием. В этой области обычно используются низкоуровневые языки программирования. Примеры: C, C++, Rust, Fortran, Cobol. Я предпочитаю Rust и C++.
  4. Искусственный интеллект (ИИ). Искусственный интеллект — это моделирование процессов человеческого интеллекта машинами, особенно компьютерными системами. Подмножествами ИИ являются машинное обучение, экспертные системы, обработка естественного языка, распознавание речи, компьютерное зрение. Языки, широко используемые в этой области, включают Python, R, C, C++, Java. Я предпочитаю Python и C++.
  5. Облачные вычисления. Облачные вычисления – это предоставление вычислительных услуг по требованию от приложений до хранилища и вычислительной мощности, как правило, через Интернет и с оплатой по факту использования. Dropbox, Google, Microsoft, Amazon и многие другие компании предлагают услуги облачных вычислений. Python, Java, JavaScript, Ruby, Golang, C++ — вот некоторые из языков программирования, используемых облачными инженерами.

Что дальше?

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

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

Что вы должны и не должны делать в процессе обучения

  1. Убедитесь, что вы решили изучать язык программирования в интересующей вас области с большим сообществом, чтобы вы могли задать любой вопрос, если у вас возникнут трудности, ошибки и ошибки в коде во время обучения.
  2. Изучите основы любого языка программирования, который вы решите изучать.
  3. Не приступайте к изучению библиотеки или фреймворка языка программирования, если вы еще не прошли начальный уровень и не создавали личные проекты на этом языке.
  4. Учитесь, создавая проекты. Один из лучших способов учиться — это применять свои новые знания и навыки в создании вещей.
  5. Изучите основные структуры данных и алгоритмические навыки. (Массивы, связный список, хеш-карта, деревья, графы, алгоритмы поиска, алгоритмы сортировки, алгоритмы графов). Скорее всего, вы примените эти навыки при решении технических задач в программировании.
  6. Учитесь, читая код других хороших программистов. На GitHub много проектов с открытым исходным кодом, написанных хорошими программистами.
  7. Изучите систему контроля версий — Git

Последнее примечание

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

Желаю вам всего наилучшего в вашей карьере, чтобы стать великим инженером-программистом!

Ресурсы

Инжиниринг с уцавом

Книги — Чистый код, Собеседование по кодированию, Создание микросервисов, Алгоритмы Grokking