Программирование

Путь программирования для тех, кто не умеет программировать

Путь от самого начала к дальнейшим практикам качественного программирования.

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

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

Лучшая история неудач

Я начал учиться программированию в 2012 году. Тогда, после проведенного мной исследования, я решил изучить программирование на C ++.

В тот момент, когда я начал изучать C ++, я столкнулся с концепциями объектно-ориентированного программирования. Как человеку, не имеющему представления об основах программирования, объектно-ориентированный образ мышления был довольно трудным для понимания.

Я пытался научиться программировать, а не пытался изучать объектно-ориентированное программирование.

После того, как я застрял в C ++, я попытался изучить Phyton. Та же история повторилась снова. Все говорили, что Phyton прост и должен стать первым языком программирования. Но когда я пытался создавать приложения на Python, от меня было так много скрыто. Из-за этих скрытых концепций было так сложно понять, как все это работает под капотом.

Для меня самым важным было не построить что-то работающее, а понять это во всех смыслах.

Вот почему я перешел на PHP, а затем на Javascript, но одно и то же происходило снова и снова.

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

Позже я перешел на программирование на Паскале в 2016 году. Это был мой пятый язык программирования. Для меня Паскаль был намного лучше, чем любой другой язык программирования, потому что он раскрывает все и не скрывает от меня лежащие в основе концепции.

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

Внезапно с переходом на программирование на C произошло кое-что интересное. Я начал понимать все, что узнал, и ничего не было так сложно понять.

В программировании на C каждая концепция изложена идеально. В результате я научился программировать, даже не задумываясь.

Именно тогда я начал учиться программировать.

Достаточно хорошо изучив программирование на C, я захотел создавать приложения для Android. По этой причине я попытался изучить программирование на Java.

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

Имея прочную основу для Java, я захотел создавать веб-приложения с помощью Golang. Изучение Голанга заняло около недели.

Изучение любого языка программирования стало таким легким после того, как я изучил программирование на C и Java.

После C и Java я без особых усилий изучил языки программирования Phyton, C ++, Shell и Assembly.

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

Обучение программированию

Как видите, я много проиграл. Чтобы достичь этого, мне потребовалось 8 лет. Но я знаю, что не нужно тратить так много времени. Вот почему я здесь, чтобы сказать вам, что есть лучший способ преодолеть препятствия, с которыми я столкнулся.

Здесь я проложил путь, используя идеи, полученные за последние 8 лет.

Мой путь программирования

Для меня обучение программированию состоит из понимания следующих понятий в их последовательности:

  1. Основные концепции программирования.
  2. Структуры данных и алгоритмы.
  3. Концепции объектно-ориентированного программирования.
  4. Расширенные концепции программирования
  5. Применение лучших практик программирования

Основные концепции программирования

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

Такие языки, как Java, Python, C ++ и почти все другие современные языки программирования, скрывают некоторые базовые концепции повышения производительности программиста.

Проблемы возникают, когда новый программист использует короткую версию программных конструкций для повышения производительности. Когда программист ставит во главу угла производительность, он не может понять проблемы, когда сталкивается со «сложными» сообщениями об ошибках.

Затем программист бродит по сети, даже не зная, в чем проблема.

Основы

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

Простота языка программирования C дает вам возможность сосредоточиться на том, что важно, когда вы новичок, и никогда не тратить время на изучение дополнительных концепций программирования, когда вы только начинаете.

По этой причине, если вы хотите стать опытным программистом на любом языке, который вам нравится, будь то Python, Java или Golang, вам обязательно нужно иметь хорошие основы программирования на C.

Что касается меня, если вы спросите, в чем разница между C и Python с точки зрения производительности программиста, я бы сказал, что вам нужно написать 100 строк в программировании на C, тогда как вы можете просто написать строку кода на Python.

Конечно, с точки зрения продуктивного программирования лучше всего написать строку кода и получить тот же эффект, что и 100 строк кода C.

Но если вы не знаете, что скрывается за строкой кода, как вы могли бы создавать очень сложные приложения?

Складывая вещи, которые вы не понимаете, как пазл?

  • Нет, не работает.

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

Если вы хотите стать серьезным программистом, вам нужно сосредоточиться на основах только тогда, когда вы только начинаете. После того, как вы изучите базовые вещи, вы, конечно, можете сократить свои 100 строк кода до строки кода Python.

Вот репрезентативный список «основных» концепций.

  • Петли
  • Поток управления
  • Переменные
  • Указатели
  • Струны
  • Побитовые операторы
  • Распределение памяти

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

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

Структуры данных и алгоритмы

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

Существует так много структур данных и алгоритмов. По этой причине вам определенно не следует пытаться выучить их все, когда вы только начинаете.

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

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

  • После того, как вы изучите минимум концепций программирования, начните изучать структуры данных и алгоритмы.

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



Это не реклама, а, скорее, лучший учитель, которого я видел, который обучает структурам данных и алгоритмам от начального до высокого уровня.

У того же инструктора есть плейлист на YouTube, но он не в порядке и некоторые видео отсутствуют.

  • Вы должны следовать по тому же пути, что и курс Удеми.

Решение проблем

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

На таких сайтах, как hackerrank и leetcode, вы найдете множество наборов задач, от простых до сложных. Шаг за шагом решайте проблемы и улучшайте себя.

На собеседовании есть часть, где они наблюдают, как вы решаете проблемы, как вы видите на хакерранке.

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

Объектно-ориентированное программирование

Объектно-ориентированное программирование - это парадигма программирования, лежащая в основе Java, Python и C ++.

Если вы хотите стать хорошим программистом, вы обязательно должны понимать, что такое объектно-ориентированные концепции.

  • Также важно владение объектно-ориентированным языком программирования.

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

  • Когда вы станете программистом, вам следует изучить, какие вещи вы хотели бы построить, и выбрать подходящий язык.
  • Если вы не представляете, что будете строить, переходите на Java, вы не пожалеете об этом.

Вам обязательно стоит осветить темы, представленные на картинке.

Расширенные концепции программирования

Вот список передовых концепций программирования. Эти концепции можно найти практически на каждом языке программирования.

  • Ввод-вывод (IO)
  • Работа с базами данных
  • Программирование сокетов
  • Сетевое программирование
  • Лямбда-выражения
  • Статико-динамические библиотеки
  • Межпроцессного взаимодействия
  • Потоки
  • Параллельное программирование
  • API

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

Лучшие практики программирования

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

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



Профессионализм

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

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

Этот процесс приводит вас к архитектурным компромиссам. Вы научитесь применять правильную архитектуру в соответствии с потребностями, а не в соответствии с популярной архитектурой.



Необязательный шаг: программирование сборки

Если вы очень хорошо научитесь применять передовой опыт, вероятно, вам не нужно делать этот шаг. Применив передовой опыт, вы не потеряетесь в отладчике.

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

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

Последние слова

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

  • Начните с основ программирования на C.
  • Затем перейдите к структурам данных и алгоритмам.
  • Если возможно, продолжайте изучение парадигмы объектно-ориентированного программирования и других парадигм.
  • Расширяйте свой набор инструментов, изучая передовые концепции программирования.

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