Блог → Снова о профанации программирования: развиваем тему

Вчера опубликовал заметку о профанации труда программиста, но сейчас сел и понял, что она получилась какой-то незавершённой чтоли. Более или менее сформулирована проблема, но не описано ни одного шага для выхода из этого порочного круга. Так что, извольте, вот ещё несколько мыслей, которые пришли мне в голову. Если вы не поняли, о какой заметке идёт речь, то вот она, очень рекомендую ознакомиться, если уж вы решили читать продолжение.

Нельзя требовать высокой программистской квалификации от мальчишки, который в 8-м классе пытается создать игровую программу. Бухгалтер, использующий Excel для выполнения рутинных расчетов, - вряд ли ему необходимо понимать механизм работы Windows. Но программист, который пытается создать программу, которой будут пользоваться несколько человек, должен обладать знаниями, несколько более глубокими, чем пользователь, согласны? К примеру, чего я должен ждать от автора дизассемблера, если он не знает даже, откуда необходимо начинать дизассемблирование РЕ-файла?



И ещё: известнейший многотомник Дональда Кнута называется "Искусство программирования". Вдумайтесь - искусство! Но, скорее всего, мне тут же будет задан встречный вопрос - что, и работу компилятора, при помощи которого создаются исполняемые файлы, нужно представлять до тонкостей? Понимать все, что происходит внутри компилятора? Знать где, какой флажок при каких условиях он устанавливает или сбрасывает? А ведь кроме компилятора в арсенале программиста имеется немало инструментария...

Что на это можно ответить? Если бы мы жили в идеальном мире и у нас был бы избыток времени, то, наверное, знать, как работает любая программа, было бы весьма неплохо. Но, к сожалению, наш мир не идеален а задания, которые ставятся перед программистом, часто напоминают следующее: "напиши то, не знаю что, но чтобы можно было делать вот это, вот то и даже вот это, причем, все должно работать к завтрашнему утру". Знакомая ситуация? Выход, я думаю, из нее один - должен существовать какой-то минимум, который должен знать любой программист. Что-то вроде кандидатского минимума. В состав этого минимума, должны, наверное, входить базовые знания программирования (функции, подпрограммы, переходы, циклы, работа с памятью, работа с файлами и т.д.), основные структуры данных (массивы, векторы, списки, хэш-таблицы и их вариации), основы операционных систем, основы web, и т.д и т.п.

Освоив этот минимум, программист в большинстве случаев будет знать, с чего начать решение поставленной перед ним задачи. Вот в этот момент и можно начинать пользоваться всевозможными визардами. То есть, путь программиста должен начинаться с изучения. В какой-то момент спутником программиста может и, наверное, должен стать визард. Но никоим образом программист не должен начинать нелегкое дело обучения с визарда! Это, мне кажется, является одним из лучших способов заставить перестать работать тот агрегат, который находится у нас в голове и называется мозгом. Кстати, возвращаясь к визарду MFC - после того, как программист начнет понимать, каким образом работает MFC, визард становится для него весьма и весьма полезным инструментом, сокращающим время разработки на несколько часов. Понимая тот код, который генерируется визардом, программист может оценить степень его надежности, а не полагаться только на заверения разработчиков MFC о том, что, мол, лучше и надежнее средства нет. Разве не так? То же самое, наверное, можно сказать и о других средствах разработки - для того, чтобы их правильно использовать и быть в них уверенным, нужно понимать, каким образом они работают.

Есть еще один нюанс, о котором нельзя не сказать. У некоторых, в основном, очень молодых (речь о возрасте) представителей нашей профессии весьма и весьма велика тяга ко всевозможным "взломам", "снятиям защит" и так далее. Я допускаю это как разновидность интеллектуального развлечения, так сказать, гимнастики для ума. Но! Большинство руководств по такого рода деятельности написаны примерно так - ставь бряк на такую-то функцию и жди, когда "всплывет" отладчик. В данном случае, как говорит один мой знакомый, работа по интеллектуальному наполнению занимает второе место после перетягивания каната.

Можно ли говорить о том, что "специалист", начитавшийся подобных руководств, снимет защиту действительно грамотно? Я думаю, каждому известны случаи зависания программ, запущенных с CD, которые продаются чуть ли не на каждом углу... Нет, и здесь не обойтись без хотя бы базовых знаний! Кстати, именно базовые знания зачастую позволяют решить проблему "малой кровью", а не ломать программу "через колено", используя отладчик и заменяя в программе несколько байтов. К сожалению, в большинстве школ и ВУЗ'ов использованию вычислительной техники учат достаточно своеобразно. Я понимаю, что сейчас вычислительная техника и программные средства развиваются такими темпами, что уследить за ними практически невозможно. Однако это не оправдывает отставания школьных учителей и появления недоучек в компьютерной области после ВУЗ'ов. Как выйти из этого положения? Я не знаю. Наверное, универсального рецепта нет и быть не может. Однако что-то делать все же нужно!