Я наконец-то учусь программировать — и я начинал не с курса программирования

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

Открывать VS Code казалось пугающим и, более того, бессмысленным. Конечно, я мог бы заставить компьютер напечатать «Привет, мир», скопировав что-то, что я увидел на Reddit, но какой в ​​этом смысл, если я не имею ни малейшего понятия, почему это работает и как это произошло? Программирование — такая чуждая тема для такого нетехнаря, как я, и погружаться в него, ничего не зная о том, как оно или компьютеры работают, было просто безумием.

Итак, после некоторого общего хандры и прокрастинации, я решил подойти к делу с другой стороны.

Веселый способ – лучший способ

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

На мой взгляд, интересный способ — всегда лучший. Человек, которому удается изучить что-то новое, никогда не является тем, кто «учится правильно», а просто человеком, который продолжает идти вперед. Даже если вы упустите что-то важное на ранних этапах, продолжая идти вперед, вы достигнете момента, когда вам нужно будет восполнить этот пробел для прогресса. Итак, вы заполните его и двинетесь дальше — и, в конце концов, как и когда даже не будет иметь значения.

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

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

К счастью, есть один предмет, который находится в моей зоне комфорта и который можно применить практически к любой теме: история. Мне это нравилось в школе, я изучал это в университете, и мне нравятся хорошие книги по истории или исторические драмы. Есть также несколько довольно известных фигур, связанных с историей компьютеров, о которых я уже знал, — такие имена, как Чарльз Бэббидж, Ада Лавлейс , Джордж Буль и Алан Тьюринг. Итак, я решил отложить книгу кодов и погрузиться в мир информатики, прочитав о ее истоках.

Универсальный компьютер: путь от Лейбница к Тьюрингу

Обложка книги Универсальный компьютер.
Мартин Дэвис

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

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

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

Математика и естественные науки создают компьютеры — в этом нет никаких сомнений. Но программирование — это другое. Когда вы пишете программы или разрабатываете программное обеспечение, математика — это скорее выбор, чем необходимость.

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

Например, любая книга по программированию или курс информатики, вероятно, начнутся с объяснения того, что такое двоичный код — маленькие 1 и 0 из «Матрицы». Вы узнаете, что это такое, почему они существуют и для чего мы их используем, а затем положите все эти знания в коробку и закроете крышку. Потому что, когда вы начнете вводить код, вы не будете думать о двоичном коде. Вы не печатаете его, не выполняете двоичных вычислений и на самом деле думаете только байтами (группами из 8 двоичных цифр), а не битами (одна двоичная цифра).

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

Если хотите, вы можете заглянуть внутрь коробки и посмотреть, что происходит, но это не обязательно. Вы просто «вызываете» функцию, когда хотите ее использовать. Допустим, вы хотите узнать, сколько символов содержится в текстовой строке — компьютеру требуется гораздо больше усилий, чтобы это определить, по сравнению с человеком, который просто смотрит и считает «1, 2, 3». Но вам не нужно обо всем этом думать — просто вызовите функцию strlen() (длина строки), и она сделает подсчет за вас. Во всяком случае, именно так эта функция называется в C. В Python это len() , а в Java — length() . Другой язык, другие слова.

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

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

Так или иначе, я прочитал эту книгу об истории компьютеров . Я узнал все об этих математиках и о том, чего они достигли – конечно, ничего не понимая в реальной математике – и мне это очень понравилось.

Код: скрытый язык компьютерного оборудования и программного обеспечения

На обложке книги код скрытого языка.
Чарльз Петцольд

Затем мне нужно было немного больше заняться бизнесом, а это означало прочитать книгу о том, как работают компьютеры. Как я уже говорил, поначалу эта книга показалась мне немного пугающей. Он большой и подробный — и я не собираюсь притворяться, что понял каждое прочитанное слово. Но мы ничего не добьемся, если позволим «хорошему» быть врагом «совершенного». Понять 80% книги намного лучше, чем понять 0%, потому что вы решили ее не читать.

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

Оно даже не начинается с компьютеров — первые главы охватывают довольно случайные темы, такие как азбука Морзе и шрифт Брайля. Или, по крайней мере, какое-то время они кажутся случайными, пока вы не углубитесь глубже и не поймете, что мистер Автор украдкой вскармливал вас концепциями, которые вам понадобятся позже в книге.

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

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

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

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