Ген программизма
Все без исключения мужики, которые умеют водить машину, убеждены до глубины души — гены, отвечающие за пол и цвет волос, непосредственным образом связаны со способностью адекватно вести себя на дороге. Говоря проще, блондинки просто физиологически не способны научиться нормально водить (хотя к некоторым немкам это, видимо, не относится). Не могу ничего определенного сказать по этому поводу, поскольку мастерство единственной знакомой блондинки-водителя еще не успел оценить. Зато с удивлением недавно понял, что природная склонность совершенно необходима для занятия программированием!
Не стоит сразу меня обвинять в мракобесии и развешивать ярлыки. Как ни удивительно, проблема склонности к программированию существует, и люди даже пишут по этому поводу серьезные статьи. В статье заявляется с известной долей недоумения, что, оказывается, существует способ сказать до начала обучения, сумеет ли человек осилить программирование или лучше сразу на рудники. Нехило так, а? Приходит студент поступать на программерскую кафедру, а его просят ответить на три простых вопроса, после чего (голосом магистра Йоды): «Тебя обучать не будем мы! Силы в тебе увидеть не можем!..»
Я бы, наверное, принял все это за шутку, если бы сам не столкнулся с живым подтверждением. Однажды я попробовал в порядке развлечения научить азам программирования двух людей. Один из них не смог понять, как работает присваивание значений переменным. То есть, натурально, пришлось минут 20 объяснять, что означает запись a = 1. Другой человек воспринял концепцию присваивания легко и непринужденно, хотя никогда до этого не программировал, да и желания такого не имел. Каково же было мое удивление, когда я наткнулся на пост Джеффа Этвуда, откуда и узнал про существование исследования в этой области. И вопрос на понимание присваивания у них первый в списке!
В общем, как ни крути, существует разница между людьми. Одни могут в уме строить и выполнять модели дискретных структур, а другие — не могут. Одни люди потенциально могут стать программистами, а другие — нет. Конечно, есть масса людей, зарабатывающих деньги программированием, но неспособные понять рекурсию, косвенную адресацию или функциональную парадигму. Но это другое — такие люди не строят ментальные модели программ, они просто действуют по аналогии или используют упрощенные способы формализации (строительство SQL-запросов мышкой в Access), и хакеров из них не получится ни при каком раскладе.
Ну и самое главное — список понятий, которые настоящий программист должен понимать. Причем не умом, а подсознанием, интуитивно — словами ведь всякий может рассказать, что такое рекурсия, если ему достаточно долго это повторять. Итак, необходимо понимать:
- присваивание;
- последовательное выполнение;
- циклы;
- рекурсию;
- косвенную адресацию (указатели);
- мультипрограммирование (многопоточность);
- «чувство правильной вещи».
Я несколько расширил список, приведенный в вышеупомянутом исследовании, добавив косвенность и «чувство правильной вещи«. Под последним подразумевается нечто вроде программистского здравого смысла, способность выбрать из нескольких способов реализации одного и того же самый «правильный» и «красивый» вариант. Причем не формулируя критерии, по которым сделан выбор.
Попробуйте испытать своих некомпьютерных знакомых и убедитесь, что ген программизма таки существует. Ну а не убедитесь — бросайте в меня камень, чего уж там.


Можно назвать это геном. Однако, он есть у всех, у любого человека, но в разных степенях развития. То есть, теоретически, любой может «развиться» до необходимого уровня, на котором у него уже начнётся интуитивное понимание
Но это теоретически. На деле — лень этому активно препятствует. И плюс что-то вроде «у, это всё так заумно, мне никогда не понять». Ну и да, влияют умственные способности, типа IQ и всё такое
Конечно, тем, у кого ген ярко выражен, значительно проще
> понимать, причем не умом, а подсознанием, интуитивно
Вот это хорошо сказано. Не один раз уже было такое чувство, что я пишу не по «учебнику», не «как надо», а как я вижу и как мне кажется будет правильнее. Хорошее чувство
Нда, парадокс. Человек без врожденных способностей к программированию может и смог бы их развить, но не станет, потому что заумно и скучно.
> Один из них не смог понять, как работает присваивание значений переменным. … Другой человек воспринял концепцию присваивания легко и непринужденно.
Первый имеет склонность к функциональному программированию, второй — к императивному, ты просто не смог этого разглядеть.
Действительно, если сказать, что а=20 — это не присваивание, а определение, то это будет понятно любому, кто имел дело со школьной математикой.
Конечно, у любого математически подкованного человека есть «склонность» к функциональным языкам. Но на мой неискушенный взгляд, к функциональному программированию обычно приходят через императивное. Все равно ведь с помощью ФЯ полностью не абстрагируешься от того, что происходит под капотом, а там — то же самое присваивание, циклы и т.д.
я ваще самый умный я сам переменная прямой последовательности функцыональнорепродуктивного значения! я чуть мозг не сломал от ваших трэблов.