Как наиболее правильно подойти к обучению программированию с нуля?
Некоторое время назад решил радикально сменить свою профессиональную сферу - научиться программировать. Целевая область на данный момент - веб. Окей, сказано - сделано, почитал какие языки бывают, выбрал для изучения Python. Скачал книгу М. Лутца, начал читать-изучать. Хорошо, с синтаксисом вроде проблем нет, но понимаю, что помимо знания ЯП, нужны некоторые более фундаментальные знания, надо копнуть глубже. Хорошо, погуглил, решил в качестве такого фундамента почитать SICP. Читаю - опять понимаю, что чего-то у меня в голове не хватает. Решил параллельно учить математику. Сейчас скачал книгу Р. Хаггарти по дискретной математике. Собственно план такой: сначала параллельно освоить базу по "computer science" и математике, потом уже приступить к изучению собственно программирования. Вопросы:
1) База по CS: SICP я так понял хорошая книга, что еще посоветуете фундаментального для изучения, в каком порядке?
2) Математика: дискретка я так понял строго обязательна, какие еще разделы необходимы и полезны (матан, линал, диффуры, тервер и т.д.)? С чего лучше всего начать?
3) Одобрите/осудите мой выбор книг. Что еще необходимо изучить чтобы в конечном итоге стать высококлассным специалистом? В каком порядке все это добро изучать? Ну и вообще, буду благодарен за любые советы :)
Английский язык немного знаю, но бегло читать техническую литературу не осилю, так что просьба советовать издания только на русском языке.
Немного о себе: закончил экономфак (математика всякая-разная была, но все уже давно забыто), получать второе высшее считаю нецелесообразным (слишком много времени уйдет на "лишние" предметы вроде философии), работаю (не в IT), так что свободное время сильно ограничено.
Если ваша цель сменить работу и ресурсы ограничены, то может быть имеет смысл сосредоточится на более простых путях?
Питон отличный язык для обучения, но найти работу джуниором без боевого опыта на нем будет сложновато. Можно поискать веб-студии, которые разрабатывают на Питоне и предлагающие стажировку у них - это очень хороший путь.
А так для старта я бы посоветовал смотреть в сторону фронт-энда. Учить HTML, CSS и JS для начала потом можно уже выбрать серверный язык. Можно постепенно углубляться во фреймворки, автоматизацию фронт-энда, адаптивность и пр.
Работу найти намного проще. Обучение более наглядное и быстрое.
Материалов на русском просто завались.
Это все подходит, если цель именно сменить род профессиональной деятельности как можно быстрее. В любом случае придется заниматься учебой регулярно (как мне кажется не менее получаса-часа в день), но отдача от фронт-энда быстрее.
Армянское Радио: Теория множеств может быть на нужном уровне понята и без матана. Защита сайта к криптографии не имеет в общем случае вообще никакого отношения: SQLi и RSA - непересекающиеся области. Более того, можно прекрасно понимать матан, лежащий в основе RC4/любого другого алгоритма и использовать его неправильно ;-) Матан нужен для глубокого анализа (и это для избранных), грамотное применение крипты возможно и без матана.
Армянское Радио: Тут важно знать что нельзя добыть энтропию "из воздуха": mt_rand()->SHA512 в итоге даст не 2^512 вариантов перебора, а только 2^32. Детали алгоритмов и особенности их использования, а не математика. Возможно, "Практическая криптография" Шнайера будет полезнее и проще.
vilgeforce: в данный момент я рассматриваю веб-программирование как целевую область, но так как я пока во всём этом слабо разбираюсь, целевая область может поменяться :) Понятно, что разделов математики столько, что за всю жизнь не выучишь. Поэтому несколько переформулирую и дополню свой вопрос:
1) Какие разделы математики 100% необходимы для ПОЛНОГО понимания того, что написано в фундаментальных книгах по CS?
2) Какие собственно фундаментальные книги прочитать-изучить в качестве базы, перед изучением ЯП?
3) Какие разделы математики будут полезны в любой сфере программирования?
Bacrr: Точно необходима булева алгебра: if (a == b && b!=c) и так далее. Хотя бы на уровне таблиц истинности И ИЛИ НЕ XOR. Полезно будет понимание модульной арифметики: почему 255 + 1 = 0, а в другом случае все же 256. За CS вообще не скажу, ибо не понимаю в ней ;-)
Думаю что стоит посмотреть книгу автора Кнут, и посмотреть серверный яп РНР. Позже на питон перейти или руби, если будет на то необходимость. А вообще программирования надо изучать с изучения яп ассемблер и с/с++.
Мне помогла эта книге в освоении навыков составления алгоритмов. Основываясь на том, что составление алгоритмов есть один из наиболее важных навыков в работе программиста я советую книгу Д.Кнут Искусство программирования.
Главное чтобы ты прочитал все томы и реализовал хотя бы десятую часть. сделал бы это у тебя времени не было бегать из темы в тему и гадить в них! Бросай свое глупое дело и пойди почитай Д. Кнут Искусство программирования.
FanatPHP: Главное что бы ты был осмысленный во всех ньюансах и возможностях вопроса и не бежал гадить на правильный, но тебе не ведомый ответ! Иди учи мат. чать.
Уймись уже, обиженный. Я понимаю, что пацаны в подъезде считают тебя хакиром и это тебе льстит. Но объективная оценка твоих знаний тоже бывает полезна. Умный учтет свою ошибку и поблагодарит за науку. А дурак так и будет сопли размазывать и лелеять свою обидку.
советую взять таки этого же Лутца и паралельно пройти курс на Treehouse, а потом на CheckiO, причем если на Чекио начнете, то на Трихаусе будет халявка бонусом.
Сам учился так же нифига не на околоITшной спец. Книги не читал никогда специализированные - только общетеоретические (DDD, Design Patterns etc.). Языки (PHP, Phyton) изучал по мере выполнения задач.
Проблема в изучении сразу большого числа литературы в том, что в голове образуется каша, и как ее применять на практике, далеко не всегда ясно. Так что, имхо, на книги можно смело забить и начать смотреть различные good practice и готовые проекты по различным фреймворкам/CMS, попутно стягивая их себе и пробуя "тыкаться". Так получите гораздо быстрее практические навыки. Потом можно "сухую теорию" по разработке смотреть.
Конечно, базовую теорию по языку тоже надо почитать, но на это потребуется вряд ли больше одного-двух вечеров.
Но все это при условии того, что в общем и целом понимание того, что такое программирование, присутствует. Если нет, то Turbo Pascal в помощь для изучения общих принципов алгоритмистики.
Помимо всего вышесказанного, советую иногда слушать подкасты на IT тему. Например Разбор полетов, SDCast и другие. У Якова Файна (програмист из Америки) обязательно послушайте 76 выпуск, как раз по данному вопросу.
Подкасты и мотивируют, и помогают влиться в мир другой профессии.
а мне всего 21 и я сижу парюсь, не поздновато ли мне поступать в универ it технологий (после школы не стал поступать из-за кое-каких обстоятельств).. уже год работаю it специалистом в одной компании, пришел туда как стажер, два месяца обучался, раньше работал где придется.... Автор спасибо за статью, поднял мне дух))