Зацікавтесь програмуванням, а займіться тим, що це весело. Переконайтесь, що це буде достатньо весело, щоб ви були готові вкластися в свої десять років / 10000 годин.
Програма . Найкращий вид навчання - це навчання ділом. Якщо говорити технічно, "максимальний рівень продуктивності для окремих людей в даному домені не досягається автоматично як функція розширеного досвіду, але рівень продуктивності може бути підвищений навіть досвідченими людьми в результаті цілеспрямованих зусиль для вдосконалення . " (стор. 366) та "для найефективнішого навчання потрібне чітко визначене завдання з відповідним рівнем складності для конкретного індивіда, інформативний зворотній зв'язок та можливості для повторення та виправлення помилок". (стор. 20-21) Книга Пізнання на практиці: розум, математика та культура в повсякденному житті є цікавим посиланням на цю точку зору.
Поговоріть з іншими програмістами; читати інші програми . Це важливіше, ніж будь-яка книга або навчальний курс.
Якщо хочете, покладіть на чотири роки в коледж (або більше в аспірантуру). Це дасть вам доступ до деяких робочих місць, які потребують повноважень, і дасть вам глибше розуміння галузі, але якщо ви не любите школу, ви можете (з деякою відданістю) отримати подібний досвід самостійно або на роботі . У будь-якому випадку, навчання лише книгам буде недостатньо. «Освіта з інформатики не може нікого зробити більш досвідченим програмістом, ніж вивчення кистей та пігменту може зробити когось художника-майстра», - каже Ерік Реймонд, автор «Словника нового хакера». Один з найкращих програмістів, який я коли-небудь наймав, мав лише ступінь середньої школи; він створив багато чудового програмного забезпечення, має власну групу новин та зробив достатньо варіантів акцій, щоб придбати власний нічний клуб.
Робота над проектами з іншими програмістами . Будь найкращим програмістом у деяких проектах; бути найгіршим для деяких інших. Коли ти найкращий, ти можеш перевірити свої здібності до керівництва проектом та надихнути інших своїм баченням. Коли ти найгірший, ти дізнаєшся, що роблять майстри, і ти дізнаєшся, що вони не люблять робити (адже вони змушують тебе це робити за них).
Робота над проектами за іншими програмістами . Зрозумійте програму, написану кимось іншим. Подивіться, що потрібно зрозуміти та виправити, коли оригінальних програмістів немає поруч. Подумайте, як створити ваші програми, щоб полегшити тим, хто буде підтримувати їх після вас.
Вивчіть принаймні півдесятка мов програмування. Включіть одну мову, яка підтримує абстракції класів (наприклад, Java або C ++), та, яка підтримує функціональну абстракцію (наприклад, Lisp або ML), та, яка підтримує синтаксичну абстракцію (наприклад, Lisp), та, яка підтримує декларативні специфікації (наприклад, шаблони Prolog або C ++), одну яка підтримує супроводи (наприклад, Icon чи Scheme) та підтримує паралелізм (наприклад, Sisal).
Пам'ятайте, що в "інформатиці" є "комп'ютер". Знайте, скільки часу займає ваш комп'ютер, щоб виконати інструкцію, отримати слово з пам'яті (з пропуском кешу і без нього), прочитати послідовні слова з диска та шукати нове місце на диску. (Відповіді тут.)
Долучайтесь до зусиль із стандартизації мови. Це може бути комітет ANSI C ++, або він може вирішити, чи буде ваш локальний стиль кодування мати 2 або 4 рівні відступу простору. Так чи інакше, ви дізнаєтесь про те, що люблять інші люди в мові, наскільки глибоко вони так почуваються і, можливо, навіть трохи про те, чому вони так почуваються.
Майте хороший сенс якомога швидше відмовитися від стандартизації мови.