fbpx

Каталог статей

Каталог статей для размещения статей информационного характера

Как выучить

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

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

Зайдите в любой книжный магазин, и вы увидите, как за 24 часа можно обучить Java наряду с бесконечными вариантами, предлагающими обучить C, SQL, Ruby, алгоритмам и так далее за несколько дней или часов. Расширенный поиск Amazon по [title: научите, себя, за, часы, с: 2000 года, нашел 512 таких книг. Из первой десятки девять – книги по программированию (еще одна – по бухгалтерскому учету). Аналогичные результаты получаются, если заменить “научи себя” на “научись” или “часы” на “дни”.

Вывод таков: либо люди очень спешат научиться программированию, либо программирование каким-то сказочным образом легче изучить, чем все остальное. Феллейзен и др. кивают на эту тенденцию в своей книге “Как разрабатывать программы”, когда говорят: “Плохое программирование – это просто. Идиоты могут научиться ему за 21 день, даже если они тупицы”. Комикс Abtruse Goose также имеет свое мнение.

    Teach Yourself: За 24 часа вы не успеете написать несколько значимых программ и извлечь уроки из своих успехов и неудач в работе с ними. У вас не будет времени поработать с опытным программистом и понять, каково это – жить в среде C++. Короче говоря, у вас не будет времени, чтобы многому научиться. Поэтому в книге может идти речь только о поверхностном знакомстве, а не о глубоком понимании. Как сказал Александр Поуп, немного знаний – опасная вещь.

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

Исследователи (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) доказали, что для развития опыта в любой из множества областей, включая игру в шахматы, сочинение музыки, управление телеграфом, живопись, игру на фортепиано, плавание, теннис, исследования в области нейропсихологии и топологии, требуется около десяти лет. Ключевым моментом является обдуманная практика: не просто делать это снова и снова, а поставить перед собой задачу, которая находится чуть выше ваших текущих возможностей, попробовать ее выполнить, проанализировать свою работу во время и после ее выполнения и исправить все ошибки. Затем повторите. И повторяйте снова. Похоже, что не существует реальных коротких путей: даже Моцарту, который стал музыкальным вундеркиндом в 4 года, понадобилось еще 13 лет, прежде чем он начал создавать музыку мирового класса. В другом жанре, “Битлз”, казалось, ворвались на сцену с чередой хитов №1 и появлением на шоу Эда Салливана в 1964 году. Но они играли в небольших клубах Ливерпуля и Гамбурга с 1957 года, и хотя они рано завоевали массовую популярность, их первый большой успех у критиков, Sgt. Peppers, был выпущен в 1967 году.

Малкольм Гладуэлл популяризировал эту идею, хотя он концентрируется на 10 000 часов, а не на 10 годах. У Анри Картье-Брессона (1908-2004) была другая метрика: “Ваши первые 10 000 фотографий – ваши худшие фотографии”. (Он не предполагал, что с цифровыми камерами некоторые люди могут достичь этой отметки за неделю). Настоящий опыт может занять всю жизнь: Сэмюэль Джонсон (1709-1784) сказал: “Превосходство в любом деле может быть достигнуто только трудом всей жизни; его нельзя купить за меньшую цену”. А Чосер (1340-1400) жаловался, что “жизнь так коротка, ремесло так долго тянется”. Гиппократ (ок. 400 г. до н.э.) известен отрывком “ars longa, vita brevis”, который является частью более длинной цитаты “Ars longa, vita brevis, occasio praeceps, experimentum periculosum, iudicium difficile”, что на английском языке переводится как “Жизнь коротка, [ремесло] длинно, возможность мимолетна, эксперимент коварен, суд труден”. Конечно, ни одно число не может быть окончательным ответом: не представляется разумным предполагать, что все навыки (например, программирование, игра в шахматы, шашки и музыку) могут потребовать одинакового количества времени для овладения, равно как и то, что всем людям потребуется одинаковое количество времени. Как сказал профессор К. Андерс Эрикссон: “В большинстве областей поразительно, сколько времени требуется даже самым талантливым людям, чтобы достичь высочайшего уровня производительности. Число 10 000 часов просто дает вам представление о том, что речь идет о годах работы по 10-20 часов в неделю, которые, как утверждают некоторые люди, наиболее талантливым людям все еще необходимы, чтобы достичь наивысшего уровня”.

Итак, вы хотите стать программистом

    Заинтересуйтесь программированием и займитесь им, потому что это весело. Убедитесь, что это и дальше будет достаточно весело, чтобы вы были готовы потратить на это десять лет/10 000 часов.

    Систематически выявляйте лучших дизайнеров как можно раньше.

Это предполагает, что некоторые люди уже обладают качествами, необходимыми для того, чтобы стать великим дизайнером; задача состоит в том, чтобы правильно их подтолкнуть. Алан Перлис выразился более кратко: “Каждого можно научить лепить: Микеланджело пришлось бы учить, как этого не делать”. Так и с великими программистами”. Перлис говорит, что великие обладают каким-то внутренним качеством, которое превосходит их обучение. Но откуда берется это качество? Является ли оно врожденным? Или они развивают его благодаря усердию? Как сказал Огюст Гюсто (вымышленный шеф-повар в фильме “Рататуй”), “готовить может каждый, но только бесстрашные могут стать великими”. Я думаю об этом скорее как о готовности посвятить большую часть своей жизни обдуманной практике. Но, возможно, бесстрашие – это способ обобщить это. Или, как говорит критик Гюсто, Антон Эго: “Не каждый может стать великим художником, но великий художник может прийти откуда угодно”.

Так что идите и купите эту книгу по Java/Ruby/Javascript/PHP; возможно, вы извлечете из нее какую-то пользу. Но за 24 часа или 21 день вы не измените ни свою жизнь, ни свою реальную общую компетенцию программиста. Как насчет того, чтобы упорно работать над постоянным совершенствованием в течение 24 месяцев?

Используйте своих друзей . Когда меня спрашивают: “Какую операционную систему мне использовать, Windows, Unix или Mac?”, я обычно отвечаю: “Используйте то, что используют ваши друзья”. Преимущество, которое вы получите, учась у своих друзей, компенсирует любые внутренние различия между ОС или между языками программирования. Также подумайте о своих будущих друзьях: о сообществе программистов, частью которого вы станете, если продолжите обучение. Есть ли у выбранного вами языка большое растущее сообщество или маленькое умирающее? Есть ли книги, веб-сайты и онлайн-форумы, где можно получить ответы? Нравятся ли вам люди на этих форумах?

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

Играйте. Как бы вы предпочли учиться играть на пианино: в обычном, интерактивном режиме, когда вы слышите каждую ноту, как только нажимаете на клавишу, или в “пакетном” режиме, когда вы слышите ноты только после того, как закончите всю песню? Очевидно, что интерактивный режим облегчает обучение игре на фортепиано, а также программированию. Выбирайте язык с интерактивным режимом и используйте его.

Приложение: Книги и другие ресурсы

Несколько человек спрашивали, по каким книгам и веб-страницам им следует учиться. Я повторяю, что “одного изучения книг будет недостаточно”, но я могу порекомендовать следующее:

Scheme: Structure and Interpretation of Computer Programs (Abelson & Sussman) – это, вероятно, лучшее введение в информатику, и оно действительно учит программированию как способу понимания информатики. Вы можете посмотреть онлайн видеозаписи лекций по этой книге, а также полный текст онлайн. Книга сложная и отсеет некоторых людей, которые, возможно, могли бы добиться успеха с другим подходом.

Scheme: How to Design Programs (Felleisen et al. ) – одна из лучших книг о том, как на самом деле разрабатывать программы элегантным и функциональным способом.

  • Python: Python Programming: An Intro to CS (Zelle) – хорошее введение в использование Python.
  • Python: На сайте Python.org можно найти несколько онлайн-учебников.
  • Oz: Concepts, Techniques, and Models of Computer Programming (Van Roy & Haridi) рассматривается некоторыми как современный преемник Abelson & Sussman. Это экскурс в большие идеи программирования, охватывающий более широкий спектр, чем Abelson & Sussman, но при этом, возможно, более легкий для чтения и следования. В ней используется язык Oz, который не очень широко известен, но служит основой для изучения других языков.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *