т. (383) 381-86-26

Блог о создании вебсайтов

 

Научитесь программировать за десять лет

 

Автор: Питер Норвиг, перевод Константина Птицина. Оригинал тут: http://norvig.com/21-days.html

Почему все так спешат?

Зайдите в любой книжный магазин и вы увидите, что вам предложат изучить язык Java за семь дней с помощью книги Teach Yourself Java in 7 Days, а также обнаружите другие бесчисленные варианты учебных пособий, предлагающих изучить Visual Basic, Windows, Интернет и многое другое через несколько дней или часов. Я провел следующий расширенный поиск на узле Amazon.com:

     pubdate: after 1992 and title: days and
      (title: learn or title: teach yourself)

и получил 248 результатов. Первые 78 указывали на компьютерные книги, а под номером 79 стояла книга Learn Bengali in 30 days (Изучите бенгальский язык за 30 дней). Я заменил слово “days” (дни) словом “hours” и получил такие же удивительные результаты: запрос возвратил еще 253 книги, среди которых первые 77 были компьютерными книгами, а за ними под номером 78 следовала книга Teach Yourself Grammar and Style in 24 Hours (Овладейте грамматикой и стилем за 24 часа). Из общего количества в 200 книг, в наибольшей степени соответствующих запросу, 96% были компьютерными книгами. На основании этих фактов можно сделать одно из двух заключений: либо читатели очень спешат узнать что-либо о компьютерах, либо изучение компьютерной тематики в чем-то невероятно проще по сравнению с любыми другими занятиями. В продаже не нашлось ни одной книги, которая позволяла бы за несколько дней постичь музыку Бетховена, изучить квантовую физику и даже научиться ухаживать за собаками.

Попытаемся проанализировать, что могло бы означать такое название, как Learn Pascal in Three Days (Изучите язык Pascal за три дня):

Learn: В течение трех дней вы не найдете времени для написания хотя бы нескольких значимых программ и не сможете извлечь опыт из своих успехов и неудач в работе с ними. У вас не хватит времени, чтобы поработать вместе с опытным программистом и понять, сумеете ли вы когда-либо почувствовать себя комфортно в среде этого языка программирования. Короче говоря, трех дней не будет достаточно для того, чтобы действительно чему-либо научиться. Таким образом, авторы подобных книг могут пообещать вам достичь только поверхностного знакомства, а не глубокого понимания. Но, как сказал английский поэт Александр Поп, недостаточно полное обучение несет в себе большую опасность.

Pascal: За три дня вы сможете изучить синтаксис языка Pascal (если вы уже знакомы с подобным языком), но не сможете в достаточной степени научиться тому, как использовать этот синтаксис. Короче говоря, программист Basic может научиться писать программы в стиле синтаксиса Pascal с использованием Basic, но не сможет понять, в чем фактически состоят преимущества (и недостатки) языка Pascal. Но неужели это столь важно? Алан Перлис однажды заметил: “Язык, освоение которого не позволяет найти новые подходы к программированию, не заслуживает изучения”. Ознакомление лишь с начальными сведениями о языке Pascal (или, что более вероятно, о языке Visual Basic или JavaScript) может быть оправдано только в том случае, если это необходимо, чтобы воспользоваться существующим инструментальным средством для выполнения конкретного задания. Но в таком случае речь идет не об обучении программированию, а о том, как приобрести навыки выполнения конкретного задания. in Three Days: К сожалению, как показывает следующий раздел, этого недостаточно.

Научитесь программировать за десять лет

Исследователи (Хейес, Блум) показали, что для приобретения экспертных знаний в любой широкой области человеческой деятельности, включая шахматную игру, сочинение музыки, рисование, игру на фортепьяно, плавание, теннис, а также проведение исследований по нейропсихологии и топологии, требуется приблизительно десять лет. Причем создается впечатление, что в действительности этот срок невозможно сократить: даже Моцарту, который проявил выдающиеся музыкальные способности в возрасте 4 года, потребовалось еще 13 лет для того, чтобы он начал сочинять музыку мирового класса. Рассмотрим другой музыкальный жанр; неосведомленные люди считают, что Битлз совсем внезапно появились на музыкальной арене, выпустив ряд хитов, занявших первые места, и появившись в шоу Эда Сэлливена в 1964 году. Но они играли в маленьких клубах Ливерпуля и Гамбурга с 1957 года, и смогли издать диск Sgt. Peppers, который стал их первым важным успехом, лишь в 1967 году, а до этого просто пользовались определенной популярностью. Сэмюэль Джонсон считает, что фактически требуется больше десяти лет: “Превосходства в любой области можно достичь только упорным трудом в течение всей жизни; его нельзя купить по меньшей цене”. И даже Чосер жаловался: “Жизнь так коротка, что не хватает времени на овладение мастерством”.

Поэтому я предлагаю следующий рецепт достижения успеха в программировании:

Если учесть все сказанное, возникают сомнения в том, насколько далеко можно продвинуться, получая только книжные знания. Ожидая рождения своего первого ребенка, я прочитал все книги Для чайников, которые только мог достать, и все равно чувствовал себя неискушенным новичком. Как вы думаете, я стал перечитывать эти книги через 30 месяцев, когда пришло время родиться моему второму ребенку? Конечно, нет. Вместо этого я рассчитывал на свой личный опыт, который оказался гораздо более полезным и надежным, чем тысячи страниц, написанных экспертами.

Фред Брукс в своем эссе No Silver Bullets изложил план поиска превосходных проектировщиков программ, состоящий из трех частей:

Эти рекомендации основаны на том, что некоторые люди уже имеют качества, необходимые для того, чтобы стать великолепным проектировщиком; нам остается только содействовать их развитию. Алан Перлис выразил эту мысль более кратко: “Каждого можно научить ваять, а Микеланджело достаточно было только объяснить, как не надо ваять. Точно так же обстоят дела с выдающимися программистами”.

Если вы со мной не согласны, не отказывайтесь от своего решения купить книгу по языку Java; по-видимому, она не станет для вас бесполезной. Но вы не почувствуете, что ваша жизнь изменилась коренным образом, и не станете действительно многоопытным программистом после того, как пройдут 24 часа, несколько дней или даже месяцев.

Ответы

Выполнение одной команды

1 нс = (1/1 000 000 000) с

Выборка слова из кэш-памяти L1

2 нс

Выборка слова из оперативной памяти

10 нс

Выборка слова без позиционирования головок диска

200 нс

Выборка слова после позиционирования головок диска (после поиска)

8 000 000 нс = 8 мс

Приложение. Выбор языка

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

В соответствии с этими критериями, я бы порекомендовал в качестве первого изучаемого языка программирования выбрать Python или Scheme. Но все зависит от конкретных обстоятельств, и можно найти много других подходящих вариантов. Молодые люди, возраст которых измеряется одной цифрой, могут предпочесть Alice или Squeak (эти языки часто привлекают и людей постарше). Важнее всего выбрать что-то одно и приступить к работе.

Подпишитесь на рассылку, будет интересно!