Стремление к новым знаниям — замечательное чувство, и если вы задумываетесь о том, чтобы освоить программирование, можно сказать, что это отличная идея. Однако начать изучение бывает очень трудно, и я это неплохо знаю. Некоторые люди просто берут и начинают писать код, пока что-то не заработает, но я не из их числа.
Запуск VS Code казался мне пугающим и, что еще хуже, бессмысленным. Конечно, я мог бы заставить компьютер вывести "Привет, мир", просто скопировав что-то с Reddit. Но какой в этом смысл, если я не понимаю, почему это работает и как это случилось? Программирование было для меня совершенно чуждой темой, и углубляться в неё, не понимая основ, казалось безумием.
После определенного времени раздумий и прокрастинации я решил подойти к делу с другой стороны.
Самый приятный способ — лучший способ
Мне нравится учиться, и так как обучение похоже на хобби, естественно, выбирать то, что доставляет наибольшее удовольствие. Тем не менее, многие люди идут по противоположному пути и предпочитают сосредоточиться исключительно на самых эффективных методах. В каждом учебном сообществе, которое я посещаю, я постоянно вижу начальные вопросы о том, "как лучше учиться".
На мой взгляд, самый приятный способ всегда оказывается самым эффективным. Тот, кто успешно осваивает что-то новое, — это не обязательно тот, кто "учится правильно", а скорее тот, кто не останавливается. Даже если в начале вы пропустите что-то важное, продолжая учиться, вы в конечном итоге сможете восполнить эти пробелы для достижения успеха. Так и получится, и это позволит вам двигаться дальше — в итоге, как и когда, уже не будет иметь значения.
Когда я впервые задумался об изучении программирования, я яснее знал, как не хочу это делать, чем как хочу. Я понимал, что не хочу писать программы, не понимая, как они работают. Эта неопределенность будет меня беспокоить и отвлекать, и я верил, что знание основ компьютеров поможет мне лучше осознать программирование в будущем.
Так я нашел книгу под названием "Код: скрытый язык компьютерного железа и ПО" Чарльза Пецолда. В ней были отличные отзывы как от новичков, так и от опытных программистов, и, казалось, книга начиналась с самых азов, что меня очень порадовало. Однако, заглянув в оглавление и увидев такие темы, как двоичный код, логика переключателей, байты и шестнадцатеричная система, работа с логическими схемами, регистры и шины, сигналы управления ЦП и так далее, я всё же почувствовал легкое замешательство. Я хотел это прочитать, но мне нужно было начать с чего-то более привычного для меня.
К счастью, есть одна тема, которая находилась в моей зоне комфорта и может быть применена практически к любому занятию: история. Я любил её в школе, изучал в университете и обожаю хорошие исторические книги или драмы. Также есть известные личности, связанные с историей компьютерных технологий, о которых я уже знал — такие как Чарльз Бэббидж, Ада Лавлейс, Джордж Буль и Алан Тьюринг. Поэтому я решил отложить книгу "Код" и погрузиться в историю компьютерных наук, начиная с её истоков.
Универсальный компьютер: путь от Лейбница до Тьюринга
Эта книга написана Мартином Дэвисом и доступна в электронном виде на Amazon. Если вам интересна история, я настоятельно рекомендую её почитать, но даже если вы не большой поклонник истории, в ней всё равно есть своя ценность. Если вы не можете сразу начать с программирования, чтение книги на эту тему — отличный способ косвенно начать обучение, не чувствуя, что учитесь.
В некоторых местах книга становится довольно математической, так как в ней уделяется много внимания математикам, чья работа сыграла ключевую роль в изобретении компьютеров. Я не особенно люблю математику и не силен с числами, но осознание того, насколько мало я понимаю, тоже полезно.
Давайте сделаем небольшое отступление. Я думаю, математика представляет собой значительный барьер для многих, когда они задумываются о компьютерах и программировании. Может показаться, что это та область, в которую не стоит углубляться, если ты не силен в математике — и, возможно, когда-то это было правдой (хотя довольно давно). Но сейчас это совсем не так.
Математика и наука формируют основу для компьютеров — тут даже не может быть сомнений. Но программирование — это уже совсем другое. Когда вы пишете программы или разрабатываете программное обеспечение, математика становится скорее опциональной, чем обязательной.
Причина этого сводится к одному слову, которое вы, скорее всего, будете слышать много, если начнете учиться: абстракция. Понимание компьютеров заключается в работе с различными уровнями абстракции, что по сути означает группировку вещей в контейнеры и забывание о них. Это может показаться шуткой, но это действительно так.
Например, любая книга по программированию или курс компьютерных наук, вероятно, начнут с объяснения, что такое двоичный код — те самые единицы и нули из "Матрицы". Вы научитесь, что они значат, почему они существуют и для чего мы их используем — а затем все эти знания помещаются в контейнер и закрываются. Потому что, когда вы начинаете вводить код, вы не думаете о двоичном коде. Вы не пишете его, не проводите двоичных вычислений, и на самом деле думаете о байтах (группах из 8 двоичных цифр), а не о битах (одной двоичной цифре).
Работа с двоичным кодом — это очень специализированная задача, которой большинство программистов никогда не займется, поэтому они закрывают крышку контейнера с двоичным кодом и фокусируются на других вещах. Использование математики в программировании похоже на это: если кто-то хорошо разбирается в этом, он позаботится о вычислениях за вас и положит результат в контейнер, который мы называем "функцией".
Вы можете заглянуть внутрь контейнера и узнать, что происходит, если хотите, но вам это не обязательно. Просто "вызовите" функцию, когда хотите её использовать. Например, если вам нужно узнать, сколько символов в строке текста — это требует гораздо больше усилий, чтобы компьютер сам это вычислил, по сравнению с тем, что человек просто смотрит и считает "1, 2, 3". Но вам не нужно об этом думать — просто вызовите strlen() (длина строки), и она посчитает за вас. Это так называется в C, в Python это len(), а в Java — length(). Разные языки, разные слова.
Суть в том, что математика решается по мере необходимости. Она скрыта в функциях и библиотеках, и если вы не уверены, понадобится ли вам что-то математическое для решения задачи, обычно практикуется поиск информации в интернете.
Если вы действительно, сильно не любите числа, вы можете сосредоточиться на высокоуровневом программировании. Чем выше уровень, тем дальше вы от единиц и нулей и тем меньше вам придется думать о математике. Всё это говорит о том, что не позволяйте математике отпугнуть вас от программирования. Вы можете избежать её в кодировании так же, как и в жизни!
В любом случае, я прочитал эту книгу о истории компьютеров. Я узнал многое о математиках и их достижениях — без понимания фактической математики, разумеется — и мне это очень понравилось.
Код: скрытый язык компьютерного оборудования и программного обеспечения
Затем мне нужно было перейти к более серьезным вещам — а именно прочитать книгу о том, как работают компьютеры. Как я уже говорил, эта книга в начале показалась мне немного пугающей. Она большая и детализированная — и я не собираюсь притворяться, что прочитал каждое слово правильно. Но мы не можем позволять "хорошему" быть врагом "отличного". Понять 80% книги гораздо лучше, чем 0%, просто потому, что вы решили её не читать.
Однако, в конце концов, ничего страшного не произошло. Книга написана в дружелюбном, разговорном и юмористическом стиле, что помогает легче воспринимать сложные моменты. Также есть сайт с интерактивными схемами и рабочими версиями "мини-компьютеров", описанных в книге. И, что самое главное, она не начинается с трудных тем.
Она даже не начинается с компьютеров — первые главы охватывают довольно экзотические темы, такие как азбука Морзе и шрифт Брайля. По крайней мере, они кажутся случайными в начале, пока вы не углубляетесь и не понимаете, что автор осторожно подготавливает вас к тем концепциям, которые понадобятся позже в книге.
Это определенно один из тех опытов "доверяйте процессу" — и я могу вас заверить, что это хорошо написанная, хорошо структурированная книга. Независимо от того, насколько сложными вам могут представить трудные моменты, в конце вы уйдете, зная о компьютерах больше, чем когда-либо думали.
Когда вы закончите, вы можете взять другую коробку и сложить туда всю информацию — потому что в программировании нам не нужно беспокоиться о том, "как работает компьютер". Тем не менее, теперь, когда это знание сложено где-то в вашей голове, оно может пригодиться. Определенные концепции программирования станут для вас более прозрачными, и когда знания будут актуальны для вашего занятия, они легко всплывут, чтобы их использовать.
И самое приятное? Когда вы начнёте курс по программированию и там заговорят о двоичной системе, вы уже будете знать, что это такое. Курс даст вам много новой информации, но уже имея эту базу, вам будет проще воспринимать новый материал и сосредоточиться на самом программировании, а не отвлекаться на каждую новую концепцию и задаваться вопросом, стоит ли тратить время на её понимание.
Так это ощущалось для меня, и скажу честно, я не был идеальным кандидатом для программирования. У меня были трудности с математикой в школе, я изучал историю и английскую литературу в университете, пишу на жизнь, изучаю японский как хобби, и до недавнего времени у меня даже не было настольного компьютера — но, тем не менее, мне как-то удается. Если мне это удалось, уж точно получится и у вас.
Если вам понравилась эта статья, подпишитесь, чтобы не пропустить еще много полезных статей!
Вы также можете читать наши материалы в:
- Telegram: https://t.me/gergenshin
- Яндекс Дзен: https://dzen.ru/gergen
- Официальный сайт: https://www-genshin.ru