Занимайтесь программированием и занимайтесь чем-нибудь, потому что это весело. Удостоверьтесь, что это будет достаточно забавно, так что вы будете готовы потратить свои десять лет / 10000 часов.
Программа . Лучший вид обучения - это обучение на практике. Говоря более технически, «максимальный уровень производительности для людей в данном домене не достигается автоматически в зависимости от расширенного опыта, но уровень производительности может быть повышен даже опытными людьми в результате преднамеренных усилий по улучшению «. (стр. 366) и «для наиболее эффективного обучения требуется четко определенная задача с соответствующим уровнем сложности для конкретного человека, информативная обратная связь и возможности для повторения и исправления ошибок». (стр. 20-21) Книга «Познание на практике: разум, математика и культура в повседневной жизни» является интересным справочным материалом для этой точки зрения.
Общайтесь с другими программистами; читать другие программы . Это важнее, чем любая книга или учебный курс.
Если хотите, отведите четыре года в колледж (или больше в аспирантуру). Это даст вам доступ к некоторым работам, требующим полномочий, и даст вам более глубокое понимание области, но если вы не ходите в школу, вы можете (с некоторой преданностью) получить аналогичный опыт самостоятельно или на работе , В любом случае, учебы в одиночку недостаточно. «Образование в области компьютерных наук не может сделать кого-либо опытным программистом, так же как изучение кистей и пигмента не может сделать кого-то искусным художником», - говорит Эрик Рэймонд, автор «Нового словаря хакеров». Один из лучших программистов, которых я когда-либо нанимал, имел только высшее образование; он создал много отличного программного обеспечения, имеет свою собственную группу новостей и сделал достаточно акций, чтобы купить собственный ночной клуб.
Работайте над проектами с другими программистами . Быть лучшим программистом в некоторых проектах; быть худшим на некоторых других. Когда вы лучший, вы можете проверить свои способности руководить проектом и вдохновить других своим видением. Когда вы худший, вы узнаете, что делают мастера, и вы узнаете, что им не нравится делать (потому что они заставляют вас делать это за них).
Работа над проектами после других программистов . Понять программу, написанную кем-то другим. Посмотрите, что нужно, чтобы понять и исправить это, когда нет оригинальных программистов. Подумайте о том, как разработать свои программы, чтобы облегчить их тем, кто будет поддерживать их после вас.
Выучите как минимум полдюжины языков программирования. Включите один язык, который поддерживает абстракции классов (например, Java или C ++), один, который поддерживает функциональную абстракцию (например, Lisp или ML), один, который поддерживает синтаксическую абстракцию (например, Lisp), один, который поддерживает декларативные спецификации (например, шаблоны Prolog или C ++), один который поддерживает сопрограммы (например, Icon или Scheme), и тот, который поддерживает параллелизм (например, Sisal).
Помните, что в «информатике» есть «компьютер». Узнайте, сколько времени требуется компьютеру для выполнения инструкции, получения слова из памяти (с отсутствием кэша и без него), чтения последовательных слов с диска и поиска нового места на диске. (Ответы здесь.)
Примите участие в работе по стандартизации языка. Это может быть комитет ANSI C ++, или он может решить, будет ли ваш локальный стиль кодирования иметь 2 или 4 уровня отступа. В любом случае, вы узнаете о том, что нравится другим людям на языке, как глубоко они это чувствуют, и, возможно, даже немного о том, почему они так чувствуют.
Имейте здравый смысл как можно быстрее завершить работу по стандартизации языка.