• Что изучать, на что тратить свободное время, чтобы в будущем стать востребованным программистом с нормальным заработком?

    Подкину литературы, ссылок, дабы была подмога в выборе области.
    А то, в каком порядке изучать - так образование трудно облачить в алгоритм. Необходимо знать немного о всем и все о немногом. Главное чтобы пёрло и была поддержка в лице единомышленников.

    Из того, на что обязательно нужно взглянуть.

    Математика (база, во всех ее проявлениях):
    Кнут Искусство программирования
    Вирт Алгоритмы + структуры данных = программы
    Ахо,Лам,Сети,Ульман - Компиляторы. Принципы, технологии, инструменты.
    Кормен. Алгоритмы. Построение и анализ.
    Скиенна. Алгоритмы. Руководство по разработке.
    Таненбаум. Распределенные системы.
    Таненбаум. Современные операционные системы

    Сети:
    Олифер. Компьютерные сети. Принципы и технологии.
    Davies J. - Understanding IPv6

    Программирование паяльником:
    Титце, Шенк. Искусство сехмотехники
    Блог easyelectronics

    Hardware:
    David A. Patterson, John L. Hennessy - Computer Organization and Design
    David A. Patterson, John L. Hennessy - Computer architecture

    ИИ:
    Норвиг. Искусственный интеллект.

    Информационная безопасность:
    Шнайер. Прикладная криптография.
    Головоломки для хакеров (забавная книга, автора не помню к сожалению, натуральная практика по программированию)
    The Giant Black Book of Computer Viruses
    Михайлов Д. М., Жуков И. Ю. - Защита мобильных телефонов от атак - 2011
    Абашев - Ассемблер в задачах защиты информации
    Nmap Network Discovery
    Russel, Mullen, Long. Stealing the Network

    Masterminds.of.Programming.Conversations.with.the.Creators.of.Major.Programming.Languages
    Брукс - Мифический человеко-месяц
    Как выучить язык программирования за 10 лет

    Для фантазии:
    Нейман - Теория самовоспроизводящихся автоматов
    Kurzweil - Singularity is near

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

    И да - поставьте Linux.
    Ответ написан
    2 комментария
  • Что изучать, на что тратить свободное время, чтобы в будущем стать востребованным программистом с нормальным заработком?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Ответ на вопрос будет сильно зависеть от того, в каком направлении вы думаете развиваться.
    Будет ли это сетевое программирование? Тогда это си, в основном.
    Может быть, веб-программирование? Тогда тут могут быть php, javascript, python, ruby.
    Захотите разрабатывать программы на десктоп? Вам нужны c# или java.
    На мобильные платформы? тогда java и objective c (плюс swift).
    Или податься в разработку игр? Тогда либо c++, либо с# (для Юнити - наверное, самой популярной платформе).
    Хотите экзотики? Приглядитесь к функциональным языкам - Erlang и Haskell.
    Разработка железа и драйверов для железа? тогда си (без плюсов) и ассемблер.
    Определитесь, что вы хотите, потому что всё объять не получится. Выберите один (или два) направления и добейтесь хорошего уровня в нём. А потом вам будет уже легче двигаться дальше.

    Мой совет - попробуйте изучать C# или Java (они во многом похожи) для софта, или Javascript и php/python для веб-приложений и сайтов.

    Добавлю, что очень правильный совет дал @tsarevfs - помимо языка программирования, хороший программист должен знать несколько инструментов - и в первую очередь, это система контроля версий, например, git. Плюс юнит-тестирование (хотя это можно начать изучать позже, через годик-два). Плюс - нужно хорошо знать свою IDE, в которой работаете; не вздумайте работать в блокнотиках!

    Ещё помимо практики нужно знать теорию - читайте Макконнелла, Фаулера, Мартина, Бека.
    Подпишитесь на хабре на пару десятков хабов и регулярно читайте всё подряд. Через годик ваш уровень понимания статей сильно вырастет.

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

    UPD. Важное дополнение из обсуждения в комментариях (спасибо @Argentum88 @Deerenaros )
    Чтобы стать профессионалом и "востребованным программистом с нормальным заработком", нужно очень хорошо понимать внутреннее устройство тех систем (платформ, фреймворков), на которых идёт работа.
    Для этого нужно заглядывать вглубь. Изучив различные мейнстрим-инструменты, посмотреть на аналогичные менее популярные системы. Изучать исходный код используемых open-source библиотек. Написать свою подобную систему. Для web - написать свою CMS (хотя бы базовую). Для десктоп-программ - попробовать программировать без навороченных библиотек, которые делают рутинную работу за программиста. Для разработчика игр - сделать простую игру на базовом инструментарии платформы, где всё придётся делать своими руками.
    Всё это даст возможность проникнуться, почему всё делается именно так, даст понимание взаимосвязей разных частей программы.
    А потом, осознав это, выбрать один из уже готовых инструментов, и продолжать писать на нём, уже обладая более глубоким его пониманием.
    Ответ написан
    21 комментарий