Путь джедая. Программист — начало

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

Условные обозначения:

  • ЯП — языки программирования
  • СД — Структура данных
  • СКВ — системы контроля версий
  • СУБД- система управления базами данных

Итак, ты хочешь стать программистом, а не просто кодером или индусом)) Что нужно сделать, выучить, с чем надо хотя бы познакомиться:

  1. Выбрать область и согласно ей выбрать один или несколько ЯП:
  2. Изучить патерны проектирования
  3. Алгоритмы и СД:
  4. СКВ — знать хотя бы одну и уметь пользоваться, например Git:
  5. Регулярные выражения, они же regexp:
  6. Компилятор, интерператор, отладчик, системы сборки (ant, maven, gradle и прочие) — знать что это, знать какие есть, в общих чертах представлять как это работает. Что это не просто «магия», а коробочка которая вот так и так делает то и то:
  7. Дополнительные навыки, которые будут очень полезны, хотя вроде и не очевидны:
    • SQL и 1-2 СУБД в основе — архитектором баз данных становиться не надо конечно, но понимать, что плохо спроектированная база или написанный запрос существенно будут тормозить работу надо. Равно как и знать, каким образом этого избежать. Кстати, не плохо бы знать, что еще есть и NoSQL БД, например MongoDB, Cassandra.
    • JS
    • HTML
    • Linux в базе + база по скриптам (тот же bash) — не надо быть гуру, но поднять и администрировать веб сервер, а в идеале всю связку LAMP Вы должны уметь (опять же пример для веб-разработки. Если Вы не связаны с ней — нечто подобное, что составляет основу в Вашей сфере). Хорошим подспорьем тут будут курсы от Технострим Мейл.ру, либо книжки от компании O’railly.
    • Понимание работы компьютера в базе. Так сказать основы компьютерной грамотности- железо, софт, ос. Гуру быть не надо, но чуть больше чем просто уверенный пользователь. Желательно на голову-две.
    • Основы компьютерных сетей — ну тут вообще никак иначе. Сейчас трудно найти софт, который не использует сеть. И понимание того, как это все устроено, хотя бы примерно — очень важно. Полистайте книжки Олиферов или Таненбаума. Хорошим вариантом является курс CCNA — хотя бы по верхам пройдитесь.
    • Основы Информационной безопасности — права доступа, алгоритмы щифрования, хеши, как работает ssh, tls и подобные им протоколы. Что такое ключи и сертификаты. Уязвимости, эксплоиты и тп. В современном мире нельзя быть разработчиком который в этом ноль без палочки.
  8. Идеологические и философские моменты:
    • Уметь разбираться в чужом коде и примерах, а не копипастить его бездумно.
    • Стремиться к красивым и простым решениям.
    • Стремиться решить задачу оптимальным способом или оптимизировать чужое решение.

Если у кого-то есть, что добавить по этой статье- пишите мне или в комментарии, с  радостью дополню!