Иногда трудно поверить, что мы смогли создать код без помощи Stack Overflow и других форумов поддержки программирования. Меня беспокоит то, что я называю «кодом Франкенштейна», когда проекты собираются вместе по частям из комментариев и форумов Stack Overflow, в результате чего получается кодовая база в стиле монстра Франкенштейна. Мой подход к кодированию обычно заключался в том, чтобы попытаться найти решение проблем самостоятельно. Я говорю «в целом», потому что всем нам время от времени нужна помощь, и нет ничего постыдного в том, чтобы просить о ней.

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

Об удовольствии от решения головоломок мне напомнил недавний выпуск Microsoft исходного кода MS-DOS на GitHub. Мне до сих пор нравится писать код на ассемблере x86 (возможно, самое странное использование слова наслаждаться, которое вы когда-либо видели !), поэтому я сел с чашкой чая (и, конечно же, с печеньем) и стал изучать различные модули MS-DOS 2.0, в частности FAT.ASM.

FAT.ASM содержит код для работы с таблицами размещения файлов (сокращенно FAT). Таблицы размещения файлов - это то, как DOS отслеживает, где файлы находятся на диске. Для избыточности на каждом диске было по две копии FAT, и они были разных видов. Мой первый компьютер использовал FAT12. Вы по-прежнему будете встречать FAT в его 32-битном воплощении на USB-накопителях и некоторых жестких дисках.

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

Я отформатировал 5,25-дюймовую дискету и открыл FAT в редакторе секторов диска. Когда я узнал, как выглядит пустая таблица, я начал добавлять файлы, чтобы посмотреть, как она изменится - сначала файл, который занимал один кластер, а затем более крупные. Я испортил много (!) Гибких дисков и записал все в блокнот (рисунок прилагается - простите за то, что я писал, это было 31 год назад!). Большая часть того, что я разработал, было правильным, но мне потребовалось немного больше времени - и намного больше проб и ошибок - чтобы понять, почему DOS использует три байта для хранения двух записей и как обрабатываются плохие сектора.

Информация, которую я почерпнул из всего этого, была бесценной и интересной. Это помогло мне, когда мне пришлось вручную восстанавливать таблицы размещения файлов на поврежденном жестком диске для клиента, который был более чем немного обеспокоен! Он был бухгалтером «Очень известной группы», и на жестком диске были все их учетные записи - резервной копии не было! Используя то, что я узнал, я также написал несколько небольших подпрограмм на ассемблере для проверки и восстановления FAT. Просматривая недавно выпущенный модуль FAT.ASM, было приятно увидеть, что некоторые из моих подпрограмм для обработки FAT были похожи.

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

Итак, мораль истории и совет, который я всегда даю своим ученикам: может быть интересно узнать что-то самостоятельно. Потратьте немного времени, взломайте какой-нибудь код, и кто знает, куда вас могут привести эти знания?