Привет всем. Учитывая то, что я хочу помогать новичкам, но новичков много и каждый раз, с каждым новым новичком приходиться писать один и тот же текст, который описывает по сути все одно и тоже, то пора вынести его в один блог-пост.

И так, на что же обращать внимание?

Я учусь в университете, но знаний мне не дают. Знания устарели, а я хочу программировать

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

Но алгоритмы и математика не нужны же!

Ну, возможно. Смотря для чего. Делать сайты по двести долларов за штуку - может быть. Вполне может быть, что у тебя автомойка и тебе все это айти - дополнительный доход в виде парочки заказов. Да и в целом, ты кодишь на пхп, и тебя все устраивает в этой жизни. С таким подходом - да, все правильно делаешь. Но со временем тебя IT изрыгнет. К примеру есть shopify для интернет магазинов. Вордпресс предлагает хостинг блогов, не считая чисто блоггерских платформ, типа tumblr. Потребность в базисе, таком как математика и алгоритмы появляется тогда, когда ты пилишь что-то серьезнее обычных сайтиков и проектов, максимум на месяц. Когда, к примеру, тебе нужно данные проанализировать. Когда нужно запилить метод, на котором будет высокая нагрузка. Да и вообще много где.

Ок, а где почитать про алгоритмы?

Читать - одно. Главное - применять их. Можно прочитать всего Кнута и Кормена, и не уметь написать обычную, банальную сортировку. Главное - понимание, где и как применить. Плюс практика. Прочитал про алгоритм -> закодил -> понял, где можно применить -> отложил в памяти.

А что еще изучать стоит?

Изучать стоит ТОЛЬКО базис. Компьютерные сети, Операционные системы, устойство компьютера, алгоритмы. Список литературы к изучению

  1. Таненбаум - Компьютерные сети. Эта книга даст понимание об устройстве компьютерных сетей, а если еще понимать, что происходит в tcpdump или в дампе вайршарка - отлично.
  2. Donald Knuth - The art of computer programming. Тяжелая книга, но читать ее стоит. Вообще каждый должен ее не осилить.
  3. Thomas H. Cormen - Introduction to Algorithms. Книга по алгоритмам, наверное лучшее, что есть после Кнута.
  4. Таненбаум - Архитектура Компьютера даст понимание разницы между десктопом и сервером. А также о всех уровнях, которые могут встретится тебе в изучении.
  5. Jon Bentley - Programming Pearls. Еще одна хорошая книга по алгоритмам.
  6. ICND первый и второй том. Хорошая литература для подготовки к сертификации CCNA в году так 2010м. Как сейчас готовиться - не знаю. Да и CCNA я никогда не сдавал.

Но я же хочу программировать на %LANGUAGE_NAME%, зачем мне все это?

А затем, чтобы ты не был хипстером, а был со временем бородатым дядей, который знает, почему и как его код работает. Или не работает. Чтобы ты смог продиагностировать, где у тебя проблема. В коде или в настройках какого-то сервиса на сервере под определенной ОС.

Понял, но как мне начать?

Начать - легко. Главное - делать это постоянно. Вообще тут есть три варианта:

  1. Херачишь фриланс, не развиваешь свой мозг, учишь фреймворки и лечишь симптомы. При этом, занимайся еще не технической деятельностью. Устройся продажником куда-нибудь. Или ПМом. Или маркетологом. Открой свой бизнес… И тогда тебе конец через 1-4 года.
  2. Уделяй в универе время математике и алгоритмам. Контрибуть в опенсорц. После выпуска пытайся трудоустроится. Занимайся построением фундамента: ОС, алгоритмы, БД, кеширование, масштабирование, сети. Стараешься тусить и общаться с людьми, которые умнее тебя. Тогда в развитии ты будешь постоянно на волне.
  3. Забиваешь на все, идешь стажером к хорошему лиду. Продаешь себя к нему в рабство на полгода-год и еще 2-3 года работаешь с ним. Получишь реальные текущие навыки и знания.

Во втором и третьем пункте без стажировки может и не обойтись

Ок, но я хочу учиться и быть стажером.

Хорошо. Допустим ты нашел хорошего тимлида, который готов взять тебя стажером. Но что ты можешь предложить ему, учитывая, что ты сейчас еще личинка личинки программиста? Сейчас ты не клевый и ты ничего не умеешь и обучение тебя - это трата времени и мозговых ресурсов тимлида. Это инвестиции. А любые инвестиции должны окупаться. Поэтому нет смысла в летних стажировках, стажировках на полшишечки и прочих не фултаймовых вещах. По опыту скажу, что из человека с улицы, слабого джуниора можно вырастить где-то за полгода. По достижению уровня джуна, ты сможешь рассчитывать на 200-400 зеленых за свои потуги.

Ух, много текста. А можно как-нибудь в кратце?

Да.

  1. Пиши код
  2. Спи достаточно
  3. Понимай базу
  4. Повторяй

По поводу литературы выше. Ее полезно читать на всех уровнях.

  1. Читаешь, когда ты джун
  2. Читаешь, когда ты миддл
  3. Читаешь, когда ты сеньер

Если делать так, то с каждым прочтением, ты будешь все больше получать понимание материала и структурировать его.

На этом все. Если есть вопросы - велкам в комментарии.

Удачи тебе, падаван, в твоих начинаниях!