Программирование — это настоящее путешествие, и путешествие, которое определенно не для слабонервных. Требуется много усилий, чтобы овладеть языком программирования, и еще больше усилий, чтобы выполнять реальные задачи с использованием этого языка. У каждого программиста есть свой первый в жизни язык программирования, который мне нравится называть «Родным языком» программиста (в моем случае — программирование на C), который они тренируют целыми днями, просто для выполнения задач, которые на первый взгляд кажутся минимальными. Эти дни превращаются в недели, недели в месяцы, месяцы в годы и так далее…

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

Выбор правильного языка программирования

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

У каждого языка программирования есть свои основные области применения. Если вы заинтересованы в том, чтобы специализироваться в таких областях, как наука о данных или машинное обучение, где преобладает Python, вам следует изучить Python. Если вы разрабатываете веб-приложения, вы, скорее всего, изучите JavaScript. Если вы разрабатываете чувствительные ко времени приложения, сборка может быть правильным выбором для вас. Определите область, в которой вы хотите специализироваться, а затем продвигайтесь в этой области. Не делайте ошибку, пытаясь специализироваться во всем.

Понимание теории программирования

Изучая компьютерную инженерию в университете, видеть, как мои сверстники борются за свои курсы, было довольно обычным зрелищем. В конце концов, это сложная специальность, в которой нужно много пота, чтобы преуспеть. Хотя нередко я видел, как мои сверстники с трудом справляются с очень простыми задачами, даже с такими вещами, как объявление переменных. Будучи доброжелательным и мудрым «мессией вычислительной техники» (как некоторые называют меня), я обычно помогал им с их курсами.

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

Я понял, что это непонимание значительно повредило их прогрессу, и в то время я сказал большинству из них вернуться к практике программирования I и II (совет, который никто не принял). Сегодня я рад, что был одним из 5 человек, которые действительно уделяли внимание теоретическим лекциям.

Понимание структур данных и алгоритмов (важность математики и логики)

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

Написание повторно используемого кода

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

Объяснение кода другим (визуализация кода)

Когда я проходил курс «Сетевая безопасность» в университете, мне поручили реализовать алгоритм шифрования AES. Профессор курса раз в две недели заставлял нас представлять наши задания в лабораторных часах. Когда подошла моя очередь представить мое «почти законченное» и довольно неотшлифованное задание, я изо всех сил пытался объяснить, как я преобразовывал строки и столбцы друг в друга (оба при извлечении из блока сохранялись в одномерном массиве одинаковой длины, следовательно, нет). преобразование произошло), профессор усомнился в том, что я не сжульничал, и спросил меня: «Вы действительно сами написали этот код?». Оглядываясь назад на задание, я вижу, что мог бы написать гораздо более чистый и простой код. Но в то время, как сказал мой профессор, мой код содержал «слишком много ненужных функций» и был намного сложнее, чем нужно.

Люди не могут читать ваши мысли, и у большинства из них будет совершенно иной образ мышления, чем у вас. Устное общение заведет вас только до определенного момента, и вам потребуются визуальные (диаграммы) или письменные (псевдокод) подсказки, чтобы объяснить логику вашего кода людям, будь то ваш профессор, работодатель, коллега и т. д.

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