Привет! Сегодня я хочу поговорить о том, как узнать, что вы становитесь лучше в программировании?
Один из очевидных подходов:
- ставить цели
- периодически проверяйте, достигли ли вы этих целей
- если да, отпразднуй
Я ненавижу голы
Цели могут быть полезными, но в большинстве случаев я нахожу их стрессовыми и не очень полезными. Например, вот несколько целей, которые я записал для себя 9 лет назад:
- написать нетривиальный объем кода на C, который работает и используется реальными людьми
- внести свой вклад в проект с открытым исходным кодом на C
- выучить С++
9 лет спустя я не сделал ни одной из этих вещей. С формулировкой «цель» думать об этом как о чем-то плохом! Например, я хотел выучить C++, но не стал! Я до сих пор не могу писать на C с комфортом! о нет! Кажется, я провалился!
Я нахожу этот кадр угнетающим и бесполезным. На самом деле у меня не было реальной причины изучать C++ тогда и до сих пор. Так что логично, что я этому не научился.
Вместо целей мне нравится думать о крошечных вехах .
что такое веха?
Обычно, когда мы говорим о вехах, мы имеем в виду что-то большое, например, «я закончил университет».
Но в этом посте я хочу поговорить о вехах в смысле их этимологии — камнях , расставленных через каждую милю на шоссе, чтобы вы могли отслеживать свой прогресс на пути.
Это случается гораздо чаще — может быть, вы впервые использовали новый инструмент, или вы исправили новый тип ошибки, который вы никогда раньше не видели, или вы узнали о новой концепции!
несколько моих крошечных вех C
Вот несколько примеров крошечных вех за последние 9 лет, которые духовно связаны с моей первоначальной целью «изучить C/C++».
- написал очень простую оболочку на C
- написал крошечный модуль ядра Linux
- узнал про
strace
- узнал, как организованы двоичные файлы ELF (символы, разделы и т. д.)
- узнали, что такое символы отладки DWARF и как они работают
- нашел ошибку ядра Mac и сумел написать программу, воспроизводящую ее на C
- научился использовать
gdb
для проверки памяти программы C - реализован эксплойт переполнения буфера с использованием
gdb
иstrace
(для CTF) - написал компьютеры быстрые игры
- получил дамп ядра для сбойной программы на C++ и сумел получить из него трассировку стека
- написал точный отчет об ошибке для программы C++, в которой была утечка памяти, в результате чего сопровождающие исправили ошибку.
- узнал о шаблоне RAII (правда, на Rust, а не на C++)
- пара программировала с другом на реализацию некоторых проблем Advent of Code в сборке x86
- в общем, мне удобно писать очень простые программы на C, если они не должны делать ничего необычного, например, «управление памятью».
И были даже некоторые важные вехи, например, я написал профилировщик Ruby на Rust в 2018 году.
Когда я думаю об этом таким образом, я чувствую себя действительно хорошо о своих навыках! Я изучил множество вещей, связанных с системным программированием, просто все произошло не так, как я изначально ожидал.
менять цели не плохо
Причина, по которой я до сих пор не выучил C, не в том, что я отстой или в том, что C невозможно выучить. Просто научиться хорошо писать на C никогда не было чем-то, чем я действительно занимался.
Вместо этого я изучил Rust и Go, и strace
и gdb
, и структуры C, и символы, и стек вызовов, и кучу, и много других вещей. (Кроме того, мне понравилась эта статья. Некоторые из них были предназначены для C о том, почему C по-прежнему так важен)
И это отлично сработало! Поэтому я думаю, что гораздо полезнее быть гибким в отношении своих целей и отмечать вехи, которых вы в конечном итоге достигли, вместо того, чтобы чувствовать себя плохо из-за целей, в которых вы «потерпели неудачу».
отмечайте свои крошечные вехи
Для меня очень полезно отмечать такие крошечные вехи. Я много праздную, пишу сообщения в блоге — я составил приведенный выше список в основном, просматривая свой список старых сообщений в блоге для вещей, о которых я писал, связанных с C.
Если вы не ведете блог (это определенно не для всех!), может быть полезно вместо этого записать такие вещи в свой документ для хвастовства .
Но я действительно думаю, что важно где- то отмечать эти вехи. Это дает мне реальное ощущение, что я делаю успехи, и это помогает мне оставаться мотивированным, чтобы продолжать изучать эту вещь.