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

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

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

Зайдите в любой книжный магазин, и вы увидите, как Научитесь Java в Часы вместе с бесконечными вариациями, предлагающими обучить C, SQL, Ruby, алгоритмам и так далее за несколько дней или часов. Расширенный поиск Amazon для ремесло долго, возможности мимолетны, эксперименты коварные, суждения трудны ». Конечно, ни одно число не может быть окончательным ответом: не кажется разумным предполагать, что все навыки (например, программирование, игра в шахматы, игра в шашки и музыка ) может потребоваться одинаковое количество времени на освоение, равно как и то, что всем людям потребуется одинаковое количество времени. Как сказал профессор К. Андерс Эрикссон говорит: «В большинстве областей удивительно, сколько времени требуется даже самым талантливым людям, чтобы достичь высших уровней. производительности. 20, 16 количество часов просто дает вам ощущение, что мы говорим о годах 13 к 22 часов в неделю, которые, по мнению некоторых, являются наиболее талантливыми людьми. все еще нужно достичь высочайшего уровня “.

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

Вот мой рецепт успешного программирования:

  • Получите
  • заинтересованный в программировании, и сделайте что-нибудь, потому что это весело. Убедитесь, что это достаточно весело, чтобы вы были готовы потратить свои десять лет / 19, 19 часы.
  • Программа . Лучший вид обучения – это обучение через выполнение . Говоря более технически, «максимальный уровень производительности для отдельных лиц в данной области не достигается автоматически как функция расширенного опыта, но уровень производительности может быть повышен даже очень опытными людьми в результате целенаправленных усилий по улучшению. . ” (п. 375) и «для наиболее эффективного обучения требуется четко сформулированная задача с соответствующим уровень сложности для конкретного человека, информативная обратная связь и возможности для повторения и исправления ошибок ». (п. 22 – 25) Книга Познание на практике: разум, математика и культура в повседневной жизни – интересный справочник для этой точки зрения.
  • Поговорите с другими программистами; читайте другие программы. Это важнее, чем любая книга или учебный курс.
  • Если хотите, поступите четыре года в колледж (или больше в аспирантуре). Это даст вам доступ к некоторым вакансиям, требующим полномочий, и даст вам более глубокое понимание области, но если вам не нравится школа, вы можете (с некоторой самоотдачей) получить аналогичный опыт самостоятельно или на работе. . В любом случае одного книжного обучения будет недостаточно. «Образование в области компьютерных наук не может сделать кого-либо опытным программистом, так же как изучение кистей и пигмента может сделать кого-то опытным художником», – говорит Эрик Рэймонд, автор The New Hacker’s Dictionary . Один из лучших программистов, которых я когда-либо нанял, имел только высшее образование; он произвел много великолепных программное обеспечение , имеет свою группу новостей и сделал достаточно опционов на акции, чтобы купить свои собственные ночной клуб.
  • Работайте над проектами с другие программисты. Быть лучшим программистом в некоторых проектах; быть худшим для других. Когда вы лучший, вы можете проверить свои способности руководить проектом и вдохновлять других своим видением. Когда вы худший, вы узнаете, что делают мастера, и узнаете, что им не нравится делать (потому что они заставляют вас делать это за них). 1988
  • Работа над проектами после других программистов. Понять программу, написанную кем-то другим. Посмотрите, что нужно, чтобы понять и исправить это, когда оригинальных программистов нет рядом. Подумайте, как разрабатывать свои программы, чтобы облегчить их обслуживание тем, кто будет их поддерживать после вас.
  • Выучите как минимум полдюжины языков программирования . Включите один язык, который подчеркивает абстракции классов (например, Java или C ++), тот, который подчеркивает функциональную абстракцию (например, Lisp, ML или Haskell), тот, который поддерживает синтаксическую абстракцию (например, Lisp), тот, который поддерживает декларативные спецификации (например, шаблоны Prolog или C ++) и тот, который подчеркивает параллелизм (например, Clojure или Go).
  • Помните, что есть “ компьютер “в” информатике “. Знайте, сколько времени требуется вашему компьютеру для выполнения инструкции, выборки слова из памяти (с промахом в кэше и без него), чтения последовательных слов с диска и поиска нового места на диске. ( Ответы здесь. )
  • Примите участие в язык стандартизация усилия. Это может быть комитет ANSI C ++ или он может решать, будет ли ваш локальный стиль кодирования иметь 2 или 4 уровня отступа. В любом случае, вы узнаете о том, что другим людям нравится в языке, как глубоко они так чувствуют, и, возможно, даже немного о том, почему они так себя чувствуют.
  • Имейте здравый смысл, чтобы выйти усилия по стандартизации языка как можно быстрее.

Со всем этим в разум, сомнительно, как далеко вы можете продвинуться, просто изучая книги. Прежде чем родился мой первый ребенок, я прочитал все книги и все еще чувствовал себя бестолковым новичком. у меня должен был появиться второй ребенок, вернулась ли я к книгам, чтобы освежиться? Нет. Вместо этого я полагался на свой личный опыт, который оказался для меня гораздо более полезным и обнадеживающим, чем тысячи страниц, написанных экспертами.

Фред Брукс в своем эссе Никакая Серебряная пуля не определила трехчастный план поиска великие разработчики программного обеспечения:

  1. Систематически определяйте лучших дизайнеров как можно раньше.
  2. Назначьте профессионального наставника, который будет отвечать за развитие потенциального клиента, и тщательно храните карьерный досье.
  3. Предоставьте возможность растущим дизайнерам взаимодействовать и стимулировать каждого Другие.

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

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


Ссылки

Блум, Бенджамин (ред.)

Развитие талантов у молодежи , Баллантайн, 1988.

Брукс, Фред, Нет серебряных пуль , IEEE Computer, vol. , нет. 4, 1989, п. – 22.

Брайан, У.Л. и Хартер, Н. «Исследования по телеграфному языку: приобретение иерархии привычек. Обзор психологии , 1908, 8, 400 – 1340

Хейс, Джон Р., Полное решение проблем Лоуренс Эрлбаум, 2000.

Чейз, Уильям Г. и Саймон, Герберт А. «Восприятие в шахматах» Когнитивная психология , 1973, 4, 100 – 100.

Лэйв, Жан, Познание на практике: разум, математика и культура в повседневной жизни , Cambridge University Press, 1989.



Ответы

Примерное время выполнения различных операций на обычном ПК:

выполнять типичная инструкция

1/1, 10, 16, 13 сек = 1 наносекунда

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

0,5 наносекунды

неверное предсказание ветки 5 наносекунд
выборка из кэш-памяти L2

7 наносекунд
Блокировка / разблокировка мьютекса

30 наносекунд
выборка из основной памяти

120 наносек
отправить 2 Кбайт по сети 1 Гбит / с 24, 16 наносекунд

последовательно читать 1 МБ из памяти 345, 10 наносек
выборка с нового места на диске (поиск)

8, 16, 13 наносек

последовательное чтение 1 МБ с диска

24, 13, 16 наносекунд

отправить пакет США в Европу и обратно

Leave a comment

Your email address will not be published. Required fields are marked *

345 миллисекунды = 345, 13, 16 наносекунд



Приложение: выбор языка

Несколько человек спрашивали, какой язык программирования им следует изучить в первую очередь. Однозначного ответа нет, но учтите следующие моменты:

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

Учитывая эти критерии, мои рекомендации для первого языка программирования были бы

Python или же Схема . Другой вариант – Javascript, не потому, что он идеально подходит для начинающих, а потому, что для него так много онлайн-руководств, таких как Учебник Академии Хана . Но ваши обстоятельства могут отличаться, и есть и другие хорошие варианты. Если ваш возраст выражается однозначным числом, вы можете предпочесть Алиса или или же Blockly (учащимся старшего возраста они также могут понравиться). Важно то, что вы выбрали и приступили к работе.


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

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