Автор статьи — Joe Armstrong, разработчик Erlang
Я, как программист-старожил, люблю иногда вспоминать свою молодость …
Когда, в далеком 1967, я только начинал учиться программировать, я выбирал между языками Fortran и Algol. Про Algol ходило множество слухов, но практически никакой полезной информации нельзя было найти, так что я начал с Fortran.
На написание одной программы в среднем уходило 3 недели:
неделя 1 — написание программы на бумаге и отправка в компьютерный центр, где мне делали перфокарты;
неделя 2 — проверка перфокарт, и загрузка их в компьютер;
неделя 3 — получение и анализ результатов.
Когда компилятор доходил до первой синтаксической ошибки в программе, — он останавливался, и это отбрасывало меня обратно в самое начало, к первой неделе. Для исправления 10 ошибок в программе могло потребоваться 30 недель!
Хотя в некотором роде это было даже хорошо — это учило думать до написания программы и не делать ошибок.
В 1970 я учился в университете. Я мог самостоятельно печатать перфокарты, и время, необходимое на этот этап, с недели сократилось до 4 часов. Я по прежнему писал на Fortran'е.
В 1974 у меня появился доступ к компьютеру Honywell DDP516 — с огромной памятью в 32 Кб. Наконец-то компилятор Fortran компилировал программу из 100 строчек меньше чем за неделю!
И в этом же году я начал работать в CERN и использовать суперкомпьютер CRAY1, который компилировал 100 тысяч строк кода на Fortran в 1 пикосекунду (хаха, на самом деле он был в миллион раз медленнее моего сегодняшнего мобильника)!
И я по-прежнему писал на Fortran'е.
Вскоре я смог поиграться с DEC10 — теперь я уже мог писать код на Fortran'е, Basic'е и Assembler'е, и он был многозадачным! Если бы я жил в США, я бы стал Биллом Гейцем, но я обитал в Эдинбурге.
В 1976 я получил работу на NORD10 на Fortran'е и Assembler'е, и этот компьютер был по-настоящему быстрый, справлялся с программами за секунды!
В 1980 я все еще программировал на FORTRAN (забыл название машины). Все файлы лежали в одной папке, не было полноэкранного редактора, не было системы контроля версий. Я написал около 150 тысяч строк кода на Fortran'е для всего этого!
1985 год — я присоединился к Ericsson с потрясающим VAX11/750. Наконец-то я смог полноценно изучать новые языки. Прощай Fortran!
Я изучил (в разной степени) Lisp, Prolog, awk, bash, smalltalk, TCL, и стал профи в Prolog (аррррр — прелесть моя)
Я игрался с практически всеми языками, которые мне только попадались (ML, forth, ...)
1986 — начало периода Erlang (я не мог изучать Erlang, так как он тогда не существовал, так что можно сказать, что я создал его) — это был отпрыск от Prolog+Smalltalk.
Потом я изучил (хреновенько) C. Mike Williams (со-разработчик Erlang) сказал, что C — дерьмо и выглядит как мой Fortran. Его фраза отправила мой C в мусорную корзину…
Когда начал набирать популярность C++, я попытался прочитать про него книгу… До сих пор осталась вмятина на стене за пианино, куда я ее швырнул в порыве гнева! Ведь я считал, что усовершенствование C должно сделать вещи проще, а все оказалось еще более запутанным!
Время шло.
Я попробовал Java, впечатлен не был, хотя конечно это и получше чем C++, но насколько же он многословен! Пальцы немеют, когда на Fortran'е пишешь сотни строчек кода для реализации простейших вещей — тоже самое и на Java. Я также в последствии программировал на Python (норм), Ruby (норм), Lua (получше), Javascript (моя любовь :-). Изучение этих языков действительно отняло у меня много времени. У меня 15-летний опыт Fortran — достаточный, чтобы стать профи в нем, 10 лет Prolog, 20 лет Erlang, и тд.
Много времени ушло на усвоение новых идей. Свежие идеи в программировании приходят очень редко. Примерно раз в 20 лет у кого-нибудь возникает реально хорошая, свежая идея. Программирование сейчас не далеко ушло по сравнению с уровнем 20-летней давности — по сути, как был бардак в коде, так и остался.
IDE's и системы контроля версий сделали наш мир только хуже. У вас есть все старые версии бардака и сам бардак, и IDE подразумевает, что вы даже не можете увидеть этот бардак. Все же лучшая IDE в мире — это ваш
Итак, что же делать со своим образованием? Постараюсь предположить, с чего вы могли бы начать.
Вы можете выбирать из более чем 20-ти языков (все из них хороши для той или иной задачи). То, что заняло у меня 40 лет изучения, вы можете попытаться изучить за 2-3 года, в этом нет ничего невозможного.
Какие же языки должен изучать новичок, что должно преподаваться в школах?
Несмотря на огромное разнообразие языков на любой вкус, остановиться на чем-то одном — нелегкая задача. Старики говорят: «выбирайте язык в соответствии с проблемой, которую необходимо решить». Легко так сказать, когда вы знаете 20 (а то и больше) языков (с разной степенью профессионализма), — но если в важем багаже только Java и C — такой совет не сильно вам поможет! Особенно весело, когда решение задачи на CLP-языке занимает всего несколько строк, а на том-же C — тысячи!
Итак, вот мои рекомендации к изучению:
- C
- Prolog
- Erlang (ням-ням :)
- Smalltalk
- Javascript
- Haskell/ML/OCaml
- LISP/Scheme/Clojure
Пару лет должно быть достаточно (НА ОДИН ЯЗЫК). Я не имею в виду «быстрый старт», или что-то вроде. Если вы хотите быстро-кодить — немедленно бегите в магазин за книгой «PHP для чайников» и проведите следующие 20 лет, гугля вопросы вроде «как посчитать длину строки».
Мы еще крайне слабы во взаимодействии разных программ и модулей, написанных на разных языках. По прежнему лучший способ взаимодействия заключается в использовании юниксовских find… | grep | uniq | sort | …
Фундаментальная причина этого в том, что должен существовать некий промежуточный язык взаимодействия различных компонент с четко прописанными протоколами.
Взаимодействие за счет передачи сообщений — один из путей, основа объектно-ориентированного программирования, но это реализовано плохо в большинстве языков. Если бы все приложения в мире общались по сокетам и лисповским S-выражениям и имели бы стандартные описания протоколов обмена, — тогда мы бы могли намного эффективнее повторно использовать код.
Сегодня концентрация языков и различных методов огромна, но то, как объединять эти методы воедино — реализовано крайне плохо. Изучайте протоколы, а не языки.
И изучайте АЛГОРИТМЫ.
Ваше здоровье!
P.S. Годы в статье приблизительные
Автор статьи: Joe Armstrong; Оригинальная статья на английском; Автор перевода: metadiel
Друзья, призываю всех, кто неравнодушен к IT тематике и стартапам и знает английский, присоединиться к переводу интересных англоязычных статей! На выходе: прокачка английского, расширение горизонтов и респект со стороны тех, кто не может позволить себе читать их в оригинале. Пишите в личку!
Автор: tomshinsky