×Закрыть

Пособие для будущего Java разработчика. Новые горизонты

«Правда в том, что существует лишь одна Сила. Она выше таких мелких понятий, как хорошо и плохо, чёрное и белое, добро и зло». — Дарт Сидиус

Вы знаете, чтобы стать полноценным разработчиком, мало знать просто один язык программирования и пару двухэтажных SQL-запросов. В мире full stack developer — это машина, которая понимает все процессы от а до я, человек с сильными фундаментальными знаниями.

Как умиляет этот вечный холивар Java vs C#: «Вы украли у нас это! — А вы — это!..». «PHP — отстой, JavaScript развивается, да всё самое крутое пишут на С++...» Пожалуйста, просто перестаньте сотрясать воздух своим невежеством и упрямством.

Зарубите себе на носу, что для инженера высочайшего класса язык программирования — это всего лишь один из множеств инструментов, каждый из которых в чем-то лучше, в чем-то хуже. Зачем подымать тяжеловесный Java для обычного чатика, который можно за два дня написать на NodeJS? Зачем плодить громадный maven DAO модуль c Spring JPA, если хватит двух-трех SQL-запросов c использованием чистого JDBC? К примеру, Parser Combinators в Scala станет для вас находкой, после которой вы будете стараться использовать ее везде, где только можно. Нет идеального языка, идеальной технологии, из-за которой вы с пеной у рта должны доказывать, что именно вы лучше, чем остальные. Расширяйте свой кругозор настолько, насколько можете.

Прежде чем пройтись по языкам, давайте окунемся в фундаментальные знания. Без них — как без рук. Вопрос не в том, можете ли вы оставаться Java-разработчиком без знаний криптографии, работы тех или иных сетей и алгоритмов. Вопрос в другом: насколько быстро вы упретесь в свой карьерный потолок?

Эта статья косвенно уже не конкретно для junior/middle Java разработчика, а для тех, кто хочет шагнуть дальше, по ту сторону Силы :). Поехали?

Computer Science

Intro

Наверное, «Код. Тайный язык информатики» считается самой первой тропинкой, от которой вьется путь в мир Computer Science:

Чарльз Петцольд окунет вас в историю создания телеграфа, объяснит, что такое биты и байты и какова роль царицы Информатики во всем этом. Очень увлекательная книга.

После книги можно смело отправляться на курсы «Introduction to Computer Science».

Первый — это курс от Udacity — «Intro to Computer Science. Build a Search Engine & A Social Network»:

Хороший вводный курс, заодно познакомитесь немного с Python.

Как вариант, можно выделить еще Coursera — «Computer Science 101 by Stanford».

Оба курса вы можете пройти в любое время. Есть, кстати, что то похожее от Edx платмормы Harward и от МIT.

Algorithms

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

Да-да, самым популярным курсом на Coursera считается «Алгоритмы» от Седжвика и Уэйна, которые проходят каждый год:

Вам невероятно повезло, потому что обе части стартуют уже вот-вот скоро: первая с 4 сентября по 23 октября, и вторая с 30 октября по 18 декабря.

Из книг можно выделить того же Седжвика «Алгоритмы на Java»:

Седжвик уже в своих курсах отсылает к этой книге как к ресурсу с более глубоким подходом, но, в принципе, большая часть покрыта программой Coursera.

Вторая по популярности книга в этом направлении — это Лафоре «Структуры данных и алгоритмы»:

Как видите, в обоих книгах для джавистов шикарный бонус: все примеры книг написаны на Java.

Тем, кто видит себя в будущем в Google, Amazon и т.д., следует обратить внимание на данные англоязычные книги.

Thomas Cormen. Introduction to Algorithms, 3rd Edition:

Steven Skienna. The Algorithm Design:

Конечно, не достаточно тупо прочитать это — относитесь серьезно к задачам в учебниках, а также обратите внимание на такие ресурсы, как TopCoder и CodeForces. Это замечательные площадки, чтобы попрактиковаться на реальных задачках.

Advanced

После алгоритмов можно углубиться в изучение операционных систем. Как-то сам Google рекомендовал этот курс: UC Berkeley Computer Science 162. К сожалению, это только лекции на youtube, но даже так — уже хорошо.

По криптографии можно послушать курс от Stanford — «Cryptography»:


Практически то же самое есть и у Udacity:


Самым популярным курсом по компиляторам уже долгое время является Стэнфордский курс на Coursera:


А из книг самая авторитетная работа в этой области принадлежит Alfred Aho «Compilers. Principles, Techniques & Tools».

По TCP/IP самой рекомендуемой книгой является трехтомник от Kevin Fall «TCP/IP Illustrated». Вот, к примеру, первый том:

Такие темы, как фундаментальные знания по компьютерным сетям, архитектуре компьютера, распределенным системам и т.д. очень хорошо раскрыты в легендарных трудах классиков в этой области. Поэтому не проходите мимо серии книг «Классика Computer Science»:

Билл Гейтс: «Если вы считаете себя действительно хорошим программистом, прочитайте „Искусство программирования“. Если вы сможете прочесть весь этот труд, то вам определённо следует отправить мне резюме».

Конечно, есть еще Дональд Кнут, но почему-то я не нашел ни одного нашего человека, который бы отправил резюме Билу Гейтсу :). Скорее всего, участь Кнута лежит в плоскости справочника. После алгоритма Евклида идет такая математика, которую нужно вспоминать/учить отдельно. Но это, как говорится, только мое сугубо личное мнение.

Также можно обратить внимание на интересные лекции от Yandex в рамках Школы анализа данных и на Computer Science в рамках образовательного проекта «Лекториум».

Languages

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

Scala

Конечно, самым популярным языком после Java для джавистов является Scala. Вкусная, модная, совершенно нечитабельная, но безумно интересная!

Перед «Programming In Scala» я бы лучше попрактиковался на Хорстманне. «Scala для нетерпеливых»:

Установите Scala, запускайте REPL — и вперед, пример за примером вместе с Хорстманом.

После можно окунуться в официальный труд от самого Мартина Одерски — «Programming In Scala» (когда уже выйдет 3-е издание?):

Можно еще обратить внимание на «Manning: Scala in Depth»:

Из онлайн-курсов есть Odersky на Coursera: «Принципы функционального программирования в Scala».

У Ивана Головача есть классный курс по Scala для джавистов на Udemy. Не поскупитесь и обязательно купите его: более 170 видеоуроков, да еще и на русском языке.

C/C++

По С есть замечательная книга от Brian Kernigan «The C Programming Language»:

По С++ для старта можно обратить внимание на «Программирование. Принципы и практика использования С++» от создателя языка Бьярне Страуструп:

C#/.NET

Исходя ответов моих знакомых эти две книги являются одними из самых значимых.

«Pro C# and .NET 4.5 Framework» by Andrew Troelsen:

«CLR via C#» by Jeffrey Richter:

Python

Здесь бесспорно, Марк Лутц «Изучаем Python» является одной из самых-самых:

На Codecademy есть хороший курс по Python.

Javascript

По поводу JavaScript подборка оказалась очень похожа с подборкой DOU, так что я нарочно упускаю этот момент. Также обратите внимание на классные интерактивные курсы от codeschool.com.

В принципе, каждый из языков можно подтянуть на таких ресурсах, как Project Euler, где вы можете использовать прелести языка на конкретных задачах.

Заключение

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

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

Спасибо за внимание.


Предыдущие части цикла:
— Пособие для будущего Java разработчика. Основы Java;
— Пособие для будущего Java разработчика. Элегантный код;
— Пособие для будущего Java разработчика. Enterprise — часть 1;
— Пособие для будущего Java разработчика. Enterprise — часть 2;
— Пособие для будущего Java разработчика. Enterprise — часть 3.


Следующие части цикла:
— Пособие для будущего Java разработчика. Собеседование и карьера.

LinkedIn

21 комментарий

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Отличный цикл статей. Прочитав 2 статьи Станислава, в Evernote создал блокнот под названием «Самое главное!» сейчас там только ссылка на статьи ). Зацепило.

думаю завдання не прочитати всі книжки а зрозуміти їх, в багатьох авторів частково дублюється матеріал, тому потрібно читати в першу чергу розділи які потрібні для вирішення ваших проблем, читати код, а як код незрозумілий то читати весь розділ. Щоб навчитись програмувати потрібно писати свій код, потім дивитись як пишуть інші, а потім повертатись і оптимізувати свій код. Важливо одночасно практикуватися і шукати теорію для вирішення проблем. Поки читав було багато незрозумілого, тепер на javarush розв’язую багато дрібних задач і на практиці приходить розуміння що як і для чого.
Це тільки моя думка, але був час коли писав на Delphi7 то саме так вивчав, поступово для вирішення проблем потрібна була то робота з реєстром то експорт в офісний пакет то ще щось... Не думаю що багато людей знають всі методи всіх бібліотек на Java, але чим більше знаєш тим легше знайти оптимальне рішення.
P.S. дякую за матеріали для вивчення, сподіваюсь, це допоможе мені стати юніором.

А где же учебник английского языка?

Почему алгоритмы рассматриваются как «дальше мидла»? Это ж все вузовская программа. Если все уже забылось, перед алгоритмами рекомендую обновить знания по математике. Также стоит учесть, что в англоязычных материалах терминология будет отличаться. На курсере/удасити есть варианты.
Зачем перечислены другие языки, кроме разве что Scala — непонятно. На качество кода стоило бы обратить внимание, коммерческую разработку.

Начала читать *Код*. Хочу сказать — затянуло ещё с предисловия. Думаю будет полезно, ибо в структуре работы компьютера вообще не разбираюсь.

Хороша подборка, только надо переименовать на «Пособие для будущего безработного», причем с большой долей вероятности, очень богатого — так как если все читать и воплощать в жизнь — времени на работу не останется )))

Цікаво , що ви не додали курс з алгоритмів від prometheus, він звичайно не такий обширний, як запропоновані, але пояснюється добре і буде точно корисним. Також гарним доповненням буде курс від MIT «Math for Computer Science»

А ви повністю пройшли 2 частини по вивченню алгоритмів на прометеусі?

Поки тільки одна частина доступна і коли я шукав курс по алгоритмам, prometheus ще не було)

я намагалася його пройти, але далі 1-го тижня не зайшла. а на питання там вже майже ніколи не відповідають, бо хто хотів — закінчив і забив. як у вас вийшло?

Круто! В заключении статьи надо было написать: «А когда закончите с этими книгами, я порекомендую вам отличное похоронное бюро, так как вам уже явно будет за 80» © не я ))

А вообще — спасибо!

Наконец-то я в Вашей антологии Сэджвика увидел.

Сподіваюся це не остання стаття автора! :)

А из книг самая авторитетная работа в этой области принадлежит Alfred Aho «Compilers. Principles, Techniques & Tools»
Сразу видно что вы ее не читали.

:) Я даже больше скажу — я и половину из этих материалов не читал. Я опрашивал многих людей, чтобы спросить какие книги/ресурсы являются самыми самыми.

Ну а для таких комментаторов, как вы, есть специальный раздел «Заключение» в котором я прошу указать более значимые работы в той или иной области.

А те кто советуют — тоже не читали)
Вот туториал для тех кто реально хочет компилятор разаботать — compilers.iecc.com/crenshaw
На примерах турбо паскаля дя которого легко написать компилятор ( потому что однопроходной )

//Кстати, это мой 1000й коммент на доу.

Я опрашивал многих людей, чтобы спросить какие книги/ресурсы являются самыми самыми.
Есть простой хак:
Спросить не только что читать, а и «почему», __что именно__ тот или иной ресурс дает.
Книга дракона — довольно хороший теоретический материал, но он дает принципы и имеет мало общего с практикой.
Ну а для таких комментаторов, как вы, есть специальный раздел
Печальная правда, никто не читает статьи полностью, особенно если там есть ссылки и картинки :(

этош если всё читать жизни не хватит ) а программировать когда?
Р. Лафоре ооч. хорошо продуманная книга, всем рекомендую в качестве учебника, главное задачи делайте, это её самая главная положительная особенность. ещё бы таком же стиле кто-то написал бы про Boost & Qt )

Отличная подборка! И еще более отличная мысль о важности фундаментальных знаний для инженера, а не ограниченности на одном языке \ фреймворке.

Спасибо за цикл ваших статей!

Немного моего «фе»: книжки по алгоритамам нужно было в первую статью положить.

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

Подписаться на комментарии