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

Навчіться програмувати за десять років Пітер Норвіг (автор книги « Штучний інтелект: сучасний підхід » AIMA, 2-е видання) Стаття обговорюється в блозі Віктора Штонда: Чому все так поспішають?

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

і отримав 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 році, а до цього просто користувалися певною популярністю. Семюель Джонсон вважає, що фактично потрібно більше десяти років: “Переваги в будь-якій області можна досягти тільки наполегливою працею протягом усього життя; його не можна купити за меншою ціною “. І навіть Чосер скаржився: “Життя таке коротке, що не вистачає часу на оволодіння майстерністю”.

Тому я пропоную наступний рецепт досягнення успіху у програмуванні:

    зацікавиться програмуванням і займайтеся ним заради розваги. Намагайтеся зробити ці заняття досить привабливими для того, щоб не хотілося їх кидати протягом десяти років. Спілкуйтеся з іншими програмістами; читайте програми, написані іншими. Це набагато важливіше в порівнянні з будь книгою або курсом навчання. Програма. Кращий вид навчання – це навчання на власному досвіді. Більш формально ця думка виражена так, що “максимальний рівень продуктивності праці певною області не досягається автоматично як результат набуття досвіду, але навіть дуже досвідчені фахівці можуть підвищити продуктивність своєї праці в результаті свідомого прагнення до вдосконалення” (с. 366) і “дійсно ефективне навчання неможливе без постановки цілком певних завдань з відповідним рівнем складності конкретним особам, інформативною зворотного зв’язку і можливості повторення та виправлення помилок “(с. 20-21). Книга Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life є цікавим довідником по цій темі. Якщо у вас є таке бажання, присвятіть чотири роки навчання в коледжі (або ще більше – в магістратурі). Завдяки цьому ви отримаєте доступ до деяких посадам, для заняття яких вимагається документ про освіту, а також зможете придбати більш глибокі знання в обраній спеціальності, але якщо вам не подобається сидіти на лекціях, то зможете (пройшовши посвяту) придбати аналогічний досвід безпосередньо на робочому місці. У будь-якому випадку одних книжкових знань не буде достатньо. Як сказав Ерік Реймонд, автор книги The New Hacker’s Dictionary . “Ніхто не зможе стати видатним програмістом, вивчаючи комп’ютерні науки, або видатним художником, вивчаючи пензлі і фарби”. Один з кращих програмістів, які коли-небудь у мене працювали, мав лише середню освіту; він створив великий обсяг чудового програмного забезпечення . веде власну групу новин . а завдяки отриманим їм опціонах на акції, безсумнівно, став набагато багатше в порівнянні з тим, чого мені коли-небудь вдасться досягти. Працюйте над проектами з іншими програмістами. Будьте кращим програмістом в деяких проектах; будьте найгіршим у деяких інших. Будучи кращим, ви зможете перевірити свої здібності вести проект і вселяти іншим свої погляди. Будучи гіршим, ви зможете вчитися у майстрів і зумієте зрозуміти, що їм самим не подобається робити (бо вони будуть змушувати вас робити це за них). Працюйте над проектами після інших програмістів. Намагайтеся розібратися в програмах, написаних кимось іншим. Дізнайтеся на власному досвіді, що потрібно, щоб зрозуміти і виправити чужу програму без допомоги автора. Подумайте про те, як спроектувати власні програми, щоб полегшити роботу для тих, хто буде супроводжувати їх без вашої участі. Вивчіть принаймні півдюжини мов програмування. Включіть в це число з однієї мови з тих, які підтримують абстракцію класів (Java або C + +), функціональну абстракцію (Lisp або ML), синтаксичну абстракцію (Lisp), декларативні специфікації (Prolog або шаблони C + +), співпрограми (Icon або Scheme) і паралелізм (Sisal). Не забувайте, що термін “комп’ютерні науки” містить слово “комп’ютер”. Дізнайтеся, скільки часу потрібно вашому комп’ютеру для виконання команди, вибірки слова з пам’яті (з попаданням і без попадання в кеш), читання послідовних блоків з диска і перекладу головок на нову ділянку диска. ( Відповіді наведені тут. ) Візьміть участь у роботі по стандартизації мови. Це може бути комітет з розробки стандарту ANSI C + + або проведене у вашій компанії нараду з вибору стилю відступу на 2 або 4 пробілу. У будь-якому випадку діяльність у цій галузі дозволить вам дізнатися, чи подобається іншим ту чи іншу мову, наскільки явно виражені їхні уподобання, і навіть, можливо, трохи про те, чим зумовлені їх переваги. Але покличте на допомогу свій здоровий глузд, щоб правильно вибрати час розставання з цією роботою по стандартизації.

Якщо врахувати все сказане, виникають сумніви в тому, наскільки далеко можна просунутися, отримуючи тільки книжкові знання. Чекаючи народження своєї першої дитини, я прочитав всі книги Д ля чайників . які тільки міг дістати, і все одно відчував себе недосвідченим новачком. Як ви думаєте, я став перечитувати ці книги через 30 місяців, коли прийшов час народитися моєму другу дитині? Звичайно, ні. Замість цього я розраховував на свій особистий досвід, який виявився набагато більш корисним і надійним, ніж тисячі сторінок, написаних експертами.

Фред Бру кс в св ОЕМ есе No Silver Bullets виклав план пошуку чудових проектувальників програм, що складається з трьох частин:

Систематично проводите пошук видатних проектувальників, намагаючись виявити їх якомога раніше. Призначте наставника, відповідального за підготовку перспективного співробітника, і ретельно контролюйте весь хід підготовки. Надайте зростаючим проектувальникам можливість взаємодіяти і стимулювати один одного.

Ці рекомендації засновані на тому, що деякі люди вже мають якості, необхідні для того, щоб стати чудовим проектувальником; нам залишається тільки сприятиме їх розвитку. Алан Перліс висловив цю думку більш коротко: “Кожного можна навчити ліпити, а Мікеланджело достатньо було тільки пояснити, як не треба ліпити. Точно так само йдуть справи з видатними програмістами “.

Якщо ви зі мною не згодні, не відмовляйтеся від свого рішення купити книгу з мови Java; мабуть, вона не стане для вас марною. Але ви не відчуєте, що ваше життя змінилася докорінно, і не станете дійсно великодосвідченим програмістом після того, як пройдуть 24 години, кілька днів або навіть місяців.

Література

Bloom, Benjamin (ed.) Developing Talent in Young People . Ballantine, 1985.

Brooks, Fred, No Silver Bullets . IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

Hayes, John R. Complete Problem Solver Lawrence Erlbaum, 1989.

_0.32MB/0.01142 sec