На написание это статьи меня подвигли сразу три вопроса, недавно заданные в форумах, которые я читаю. Скажу честно, эти вопросы поразили меня, причём поразили вовсе не тем, что их задавали не очень сведущие люди.
В конечном счёте, это не порок, ведь как известно, знания - дело наживное. Поразило меня другое.
Думаю, что чуть позже и вы, уважаемый читатель, поймёте, о чем я говорю.
Итак, первый вопрос звучал примерно так - каким образом можно в недрах исполняемого файла отыскать секцию экспорта. Второй вопрос был проще. Задающий хотел узнать размер заголовка PE-файла. А вот третий вопрос был интереснее.
Вкратце его смысл состоит в следующем.
Вопрошающий заявляет, что пишет дизассемблер, который будет намного "круче" IDA, поэтому просит немного помочь ему и сообщить, с какого места необходимо начинать дизассемблировать РЕ-файл.
А теперь я расскажу, на какие именно размышления меня навели эти вопросы. Во-первых, программирование перестало быть уделом лишь профессиональных программистов.
Следствием этого стало то, что зачастую любой, умеющий написать разве что "Hello, world!", с гордостью называет себя программистом.
Следовательно, средний уровень квалификации программистов (за счет тех "программистов" о которых сказано выше) понижается.
Программы может писать каждый, посидевший несколько дней за компьютером и освоивший несколько операторов какого-нибудь языка программирования.
Определенный вред развитию программирования как профессии нанесло бурное развитие средств автоматизированного создания программ. Это привело к тому, что во многих случаях написание программ не требует глубоких знаний.
Ярчайшим примером является Designer СУБД Clarion, продукт сам по себе великолепный. Описав в ней данные (поле такое-то, такого-то типа - столько-то байтов) и "нарисовав" на экране меню и пару форм, можно было за полчаса получить работающее приложение.
Естественно, создание таких программ стало доступно и ребенку. Но ведь Designer - инструмент для создания модели приложения, а не средство программирования!
Вторым примером может служить известная библиотека MFC. Я думаю, что "wizard", входящий в его состав, принес намного больше вреда, чем пользы.
Как правильно было замечено на форуме, возьми визард, ответь на пару вопросов - и всё, программа работает! А уж как и почему она работает, об этом и задумываться не стоит.
Естественно, какие могут быть претензии к качеству сгенерированных автоматически программ? Кстати, почти во всех руководствах по MFC начинающим рекомендуется использовать визард! Тем самым начинающий намертво привязывается к визарду и не стремится понять основы устройства MFC!
Во-вторых, идет размывание границ между различными категориями компьютерщиков. Я думаю, многие из принадлежащих к "цеху" программистов разделяют всех "компьютерщиков" на пользователей и программистов. Мол, программист - это круто, а пользователь...
Однако задумайтесь, не происходит ли плавный переход программистов в категорию пользователей? Какая в сущности, разница, чем именно пользоваться? Word'ом для набора текста, банковской программой (кстати, зачастую отнюдь не простой) или средством автоматизированного создания программ? Фактически, во многих случаях можно сказать, что автор программы является пользователем определенной системы создания программ, не так ли?
В-третьих, в настоящее время ни один из авторов программ не может на все 100% быть уверенным в надежности своей программы.
Вспомните, сколько говорилось об известной проблеме 2000 года и об опасностях, к которым она может привести. Вспомните о том вопросе, который неоднократно задавался после столкновения двух самолетов над Германией - чьи рекомендации должен был выполнить летчик, бортовой системы или диспетчера, другими словами, компьютера или человека? А ведь эти вопросы можно прочесть несколько иначе.
Достаточно ли надежно программное обеспечение, чтобы человек мог полностью полагаться на рекомендации программы? И здесь мы вновь подошли к вопросам автоматизированного написания программ.
Может ли автор программы быть уверен в ее полной надежности, если он не представляет, какие механизмы в ней работают? Наверное, нет. Я не хотел бы быть обвиненным в ретроградстве. Я не призываю вернуться на сорок лет назад и программировать в машинных кодах. Никоим образом! Речь идет совершенно о другом - о тех минимальных требованиях, которым должен соответствовать программист.