Содержание

Как стать Java разработчиком за 1,5 года / Habr

Меня зовут Сергей, мне 40 лет и сейчас я работаю Java разработчиком в немецкой компании. Мы занимаемся разработкой программного обеспечения для пивоварен оценки финансовых и кредитных рисков. Это моя первая работа в качестве разработчика. До этого я работал в сфере IT-поддержки и системной интеграции. Первого февраля 2019 г. закончился мой шестимесячный испытательный срок, и у меня на руках бессрочный контракт. Я хочу поделиться своим опытом, как можно самостоятельно выучить Java так, чтобы получить работу.

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

Моя первая статья: «IT-эмиграция с семьей. И особенности поиска работы в маленьком городе Германии, когда ты уже там»

Моя вторая статья: «Получить работу в Германии станет проще».


Disclaimer

Скажу сразу, что всякие варианты «выучи яву за 10 дней» (21 день, 30 дней и т.д.) – это утопия. Нет никакой красной таблетки, чтобы быстро попасть в матрицу. Но за год-два параллельно с основным местом работы – вполне реально.


Что у меня было в активе, прежде чем я начал изучать Java

Сначала я хотел назвать статью «Как стать Java разработчиком за 1,5 года с нуля», но передумал. Я ведь пришел в программирование не из совершенно другой области, а из IT. Но работал я не в разработке, а в поддержке. Вероятно, дальнобойщику будет не так просто повторить мои шаги, чтобы стать программистом. Хотя, если у моей жены получится в свои 34 переквалифицироваться из чистого гуманитария в разработчика (или тестера), то напишу еще одну статью.

Стоит сказать о том, что я уже умел, когда решил стать разработчиком.
В университете в течение 2-х семестров мы изучали программирование на Си и С++. Ничего особенного или каких-то глубоких знаний. Сдали – забыли. Далее, будучи студентом, я писал какие-то простенькие программы на Delphi для себя. И всё. Это было более 20 лет назад.

Дальше моя карьера выглядела так:


  1. Системный администратор
  2. Системный инженер
  3. Зам. руководителя отдела
  4. Руководитель
  5. Инженер тех. поддержки

Непосредственно программированием я вообще не занимался.



Онлайн-курсы.

Я начал со следующих специализаций на coursera.org:


Java Programming and Software Engineering Fundamentals – 4 месяца

Я прошел следующие онлайн-курсы:


После этой специализации я уже более-менее разбирался в языке, но писать самому программы было еще нереально. Последний capstone-проект я не сделал. Мне было сложно. И у меня, честно говоря, пропал энтузиазм. Я сделал перерыв.


Object Oriented Java Programming: Data Structures and Beyond– 5 месяцев

Через месяц я решил всё-таки вернуться к занятиям снова. Я пошел на специализацию из пяти курсов:


Последний capstone-проект я также не осилил. Но предпоследний курс в списке «Mastering the Software Engineering Interview» помог мне неплохо подготовиться к последующим собеседованиям. А еще я смог написать свой первый простенький парсер простого сайта на чистом HTML. Уже было неплохо, но не впечатляло.


How to Code – 3 месяца

Следующим шагом были эти два странных курса на edx.org:


Я написал «странных», потому что там вообще речь не идет о Java. Авторы курса используют специальный язык программирования Beginning Student Language (BSL). Я где-то прочитал, что они мега-полезные. Наверное, эти два курса помогли мне лучше понять некоторые приемы написания программ и стали хорошим подспорьем для написания Unit-тестов в реальной работе. Но, если быть честным, их можно пропустить.


Data Structures and Algorithms – 2 месяца

Потом я снова вернулся на coursera.org и начал новую специализацию, сотоящую из следующих четырёх курсов:


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


Топтание на месте

В тот момент я понял, что топчусь на месте. Прохождение новых курсов не давало такого ощутимого количества новых знаний, как это давали первые. Т.е. знания вроде прибавляются, но это никак не приближает меня к получению работы. Я не понимал, как с такими знаниями можно вообще найти на работу. Я всё также не мог написать ничего, что было бы сложнее парсера. Ну как так-то?!?!? Я даже пытался написать свой сервис парсинга сайтов с блэк-джеком и путанами, но уже после недели разработки мой проект превратился в кашу из классов. И я уже сам не мог разобраться в том, что я там понаписал. Кроме того, мне всё ещё были непонятны некоторые аспекты функционирования языка. И это после того, как я уже потратил примерно год на все этих курсы!!! Двенадцать онлайн-курсов и целый год времени, Карл, вы только вдумайтесь в это. На самом деле, это был провал. Я был уверен, что за год я смогу стать разработчиком благодаря этим курсам. Я заблуждался. Мне нужен был план Б.


Альтернатива

Я стал искать курсы, которые бы помогли мне получить какие-то практические навыки, востребованные в реальной работе. Но ничего толкового не было, либо стоило приличных денег. Те же курсы от отуса стоят 50000 за шесть месяцев и отзывы на них противоречивые. Я не был готов к таким расходам. Я был готов впахивать самостоятельно и искал, как это можно сделать бесплатно или совсем недорого. В итоге все онлайн-курсы, которые мне попадались, делились на две категории:


  • Первая рассчитана на новичков или людей с нулевой подготовкой. С их помощью ты достигаешь уровня «три с минусом». Это я! Это про меня!
  • Вторая для «хорошистов» с опытом работы, которые хотят стать «отличниками». Вроде таких: «Как писать микросервисы на Java для высоконагруженных проектов с использованием WildFly Swarm». Что это вообще такое???

А между ними зияющая пустота. Ну где я и где все эти микросервисы??? Получалось, что для «троечников» вообще ничего нет. Или есть, но за хорошие деньги. И как стать «хорошистом» бесплатно, без регистрации и СМС, вообще непонятно.


Сертификация Oracle

Тогда я решил стать сертифицированным разработчиком на Java. Потому как фраза «Я профессиональный программист на Java» звучит очень круто и должна сразить будущего работодателя наповал!!! Во всяком случае, тогда я так наивно думал.


OCA: Oracle Certified Associate Java SE 8 Programmer – 2 месяца

Для этого я купил книгу:


На освоение этой книги у меня ушло примерно 2 месяца. Она реально открыла мне глаза на многие аспекты и заставила понять, как работает язык в деталях. Это было хорошее продвижение вперед. Но не в поиске работы, а в понимании языка Java. На экзамен я шел с уверенностью, что сдам его хорошо, и я его сдал. Я набрал 84% при необходимых 65%. Я был безмерно горд собой.

Стоимость экзамена $245. В России он стоит немного дешевле.


Оцените стоимость официального тренинга от Oracle для подготовки к этому экзамену


OCP: Oracle Certified Professional Java SE 8 Programmer – 4 месяца

Я с энтузиазмом принялся за вторую книгу тех же авторов:


На освоение второй книги я потратил уже 4 месяца. И это оказалось реально сложно. Два раза я делал перерывы по одной неделе, потому как понять лямбда выражения или многопоточность мне было действительно непросто. Также меня убивало обилие классов для ввода и вывода. Все эти NIO и NIO2, которые так похожи и которые нужно было знать. Что там базовый класс, что производный? Это был настоящий кошмар. В итоге я назначил дату экзамена за месяц, потом перенес его на две недели, потом еще на две. Меня поджимали сроки, на горизонте маячило собеседование. И мне нужен был этот сертификат. Я не стал переносить экзамен в третий раз и пошел с тем, что имел. В отличие от первого экзамена, я уже не был уверен в хорошем результате. Я вообще не был уверен, что смогу его сдать. От былой гордости не осталось и следа. Объем информации для понимания и запоминания во второй книге раз в пять больше чем в первой. Но я сдал и этот экзамен. К счастью, тестовые задания в книгах оказались сложнее, чем те, которые были на экзамене. Но это был прорыв… для меня. Прорыв в плане знаний и понимания того, как работает язык и какие инструменты он предлагает.

Стоимость экзамена также $245.

Могу сказать, что эти две книги мне дали больше, чем все те онлайн курсы, что я прошел ранее. Но я не знаю, смог ли бы я вообще сдать эти экзамены, если бы не прошел предварительно курсы. С помощью этих экзаменов я перешел на уровень «три с плюсом». И это было уже что-то. Но я всё также не был способен самостоятельно реализовать какой-нибудь интересный проект. WTF????

Я понял, что я достиг максимума от того, что я мог получить сам, и изучать язык дальше было бессмысленно. Более того, я понимал, что мои знания, которые я с таким трудом получил, без практики очень быстро улетучиваются. Тянуть было нельзя, и я занялся подготовкой к собеседованию и приобретением навыков, которые могут потребоваться при устройстве на работу.


Что нужно, чтобы получить работу?

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


Подготовка к интервью – 1 месяц

Я купил следующую книгу:


Настоятельно ее рекомендую. Она поможет подготовиться к техническоой части собеседования. На неё я потратил примерно месяц. Многие задания были непонятны, поэтому я нашел еще один экземпляр на русском, и когда мне было совсем непонятно, я смотрел в него.


Дополнительные навыки

К этому моменту я уже активно мониторил рынок вакансий в своём городе и выбрал компанию, в которой хотел бы работать. У них была вакансия Java Developer. В вакансии в числе желаемых навыков стояли знания Oracle SQL, GWT, Eclipse, SVN, Maven, Jenkins. Мне не нужны были глубокие знания всех этих технологий, мне нужно было простое понимание, что это такое и как оно работает. Чтобы на собеседовании можно было сказать, мол да, я знаком, но не глубоко.


Oracle SQL – 1 неделя

SQL я уже неплохо знал, так как по долгу службы приходилось делать много произвольных отчетов для руководства. Но это был T-SQL от Microsoft, а тут требовался SQL от Oracle. Пришлось купить книжку, чтобы вспомнить основные моменты и понять разницу.


Эту книжку я пробежал быстренько за неделю. И понял, что я на 70% готов сдать еще один экзамен. Но мне было уже не до этого.


SVN – 1 неделя

SVN распределённая система управления версиями. GIT или SVN используется в большинстве компаний, которые занимаются разработкой ПО. Курсов по SVN я не нашел, поэтому решил взять короткий курс по GIT: «Version Control with Git», чтобы быть в курсе темы. Я даже подумал, что если спросят про SVN, то скажу, что имел дело с GIT. А потом на месте сориентируюсь. Если вдруг будет что-то непонятно, то всегда можно будет сказать, что в GIT это немного по-другому. И это, кстати, сработало.


GWT – 3 дня

Следующая технология из списка – GWT. Потратив несколько дней на поиски информации, я понял, что с этим Фреймворком от Google мне просто не разобраться. Если упрощенно, то можно писать сложные сайты на Java, а этот Фреймворк преобразовывает твой код в HTML + JavaScript и отображает в браузере без всяких надстроек и дополнений. Слишком всё круто. GWT я решил пропустить.


Eclipse – 3 дня

Eclipse — среда разработки, основной инструмент разработчика, с которым я имею дело каждый день. Каких-то специальных курсов я не брал. Посмотрел несколько видео на youtube, понял основные приемы. Попробовал всё сам руками.


Maven, Jenkins – 15 минут.

На эти две вещи времени просто не осталось. Собеседование было уже утром, поэтому я просто прочитал 2 статьи в википедии и лёг спать.



Время

Мной было потрачено примерно 18 месяцев, 2 недели, 6 дней и 15 минут на получение знаний и навыков, необходимых для получения места разработчика. Этим я занимался по вечерам, тратя 1-3 часа в будние дни. И около 5-6 часов на выходных.


Деньги

Я готов был тратить свое время и не готов был тратить деньги. Но потратить их всё же пришлось.

Курсы:


  • Все онлайн курсы я прошел бесплатно Бесплатно. Как это сделать на coursera.org я писал тут.

Книги:


Экзамены:


Дополнительные расходы:


  • Проезд в другой город на экзамены, т.к. в моем нет сертификационных центров – 120€.

Итого: 702€

Совсем бесплатно, к сожалению, не получилось. Книги покупал на английском, т.к. экзамен тоже на английском.


Результат

Этих знаний хватило, чтобы пройти собеседование и подписать контракт в достаточной крутой немецкой компании. Я бы даже сказал, что их хватило с запасом.

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

За эти 6 месяцев работы в качестве разработчика я закрыл более 200 заявок на разработку, доработку и исправление ошибок в коде совершенно разных подсистем и модулей. И ни от одной заявки я не отказался «потому что я не смог». Да, мне приходилось и сейчас приходится разбираться в новых вещах, искать информацию, вникать в детали. Что-то я делаю медленно, но мне это интересно и процесс идёт. А ещё за это хорошо платят!!!

Но не надо думать, что я очень умный. Я самый простой парень, который просто решил изменить свою жизнь к лучшему. Я такой же, как и ты. А если смог я, то сможешь, и ты!


На самом деле, чтобы стать разработчиком, у меня ушло не 1,5 года, а два. Но это по моей собственной глупости (читайте об этом в моем телеграм-канале). Непосредственно на яву я потратил 1,5 года. Но необязательно повторять мои ошибки. Думаю, что можно достичь того же результата за более короткий срок. Выкидываем всё лишнее и получаем примерно такой путь:


Часть первая – 5 месяцев

Берем следующие курсы специализации Object Oriented Java Programming: Data Structures and Beyond на курсере:


Параллельно читаем книжку:


По результатам сдаем экзамен.



Часть вторая – 2 месяца

Берем следующие курсы специализации Data Structures and Algorithms:


Параллельно читаем книгу:



Часть третья – 4 месяца

Читаем книжку:


По результатам сдаем экзамен.



Часть четвертая – 1 месяц

Смотрим, что конкретно хочет работодатель от соискателей, и тратим по одной неделе на каждую из 4-х самых нужных технологий, программ или Фреймворков (Git, Eclipse, Maven, Spring и т.д.). Плюс изучаем предметную область, в которой работает работодатель, его продукты, если есть и т.д.

Итого год. За год – вполне реально.


О том, как я изменил свою жизнь в 40 лет и переехал с женой и тремя детьми в Германию я пишу в своем телеграм-канале @LiveAndWorkInGermany. Пишу о том, как это было, что хорошо и что плохо в Германии, о планах на будущее. Коротко и по делу. Присоединяйтесь – будет интересно.

habr.com

8 крутых Youtube-каналов, которые помогут изучить Java

Чтобы изучить Java, в первую очередь рекомендуют книги, курсы и вебинары. Но мало кто предоставляет полезные Youtube-каналы, которые облегчают изучение. Что ж, вот они!

Думаю, каждый хоть раз натыкался на уроки от этого автора. Может показаться, что он объясняет слишком медленно, но на деле именно такой темп позволяет хорошо усвоить и закрепить полученную информацию. Работает с Eclipse, что подойдет тем, кто не знаком с шорткатами, библиотеками и другими плюсами данной IDE (тем более, знание Eclipse требуется повсеместно). Плейлисты разделены на введение, Java для профессионалов, алгоритмы сортировок, JSP, Swing, паттерны и многое другое.

Тоже популярный канал, который ориентирован на изучение основ. Кроме самого программирования, здесь также представлена схематическая визуализация процесса, вплоть до разбора основ ООП. Здесь и обзор main-класса, и вывод в консоль, и циклы. В общем, все необходимое, чтобы изучить Java с нуля. Видео небольшие, до 20 минут каждое. Объяснения хоть и лаконичные, но емкие, так что после просмотра не остается лишних вопросов. Плейлисты включают в себя материалы «для чайников», Java Production и методологию. Если готовитесь к собеседованию – это то, что нужно.

Сборная солянка. Нет, правда: на этом канале собрано много всего. Можно найти уроки по основам программирования, HTML, CSS, JavaScript, Python, Git. Даже монтаж видео в Adobe Premiere. То есть опыт у ребят колоссальный. Но мы поговорим о Java. Здесь нам демонстрируют работу со всеми (ну точно многими) любимой IntelliJ IDEA. Показывают даже установку IDE, что полезно, если вы новичок или просто никогда не работали с IntelliJ. При этом уроки разные по продолжительности, которая зависит от сложности темы. Подача материала легкая, но основательная.

Очень хорошо, что здесь уроки разделены на уровни: есть обучение Java для начинающих, средний уровень, JavaFX и «Пишем программы на Java». Но нет, писать программы придется не только там: объяснения с визуализированным кодингом есть везде. Просто последний раздел более подробный, рассчитанный на подготовку программы с нуля. Незаменимый канал-помощник для начинающих джавистов, в плейлисты которого хочется подглядывать, даже если уже есть некоторый опыт.

https://www.youtube.com/watch?v=rrsdVOAL254&list=PLxbCrqzAmccufGafo-VlAwpJ4uU4zmtyG

Автор не ограничивается лишь Джавой, хотя изучить Java с этим каналом не составит труда. Здесь собрано множество вспомогательных материалов. Например, если после Java захочется «перетечь» в Android – не вопрос, ведь на канале есть соответствующие видеоуроки. Представлены как алгоритмы, так и Java-туториалы. Видео снабжены презентациями, которые лаконично и максимально доступно объясняют схему работы как самого языка, так и программы на нем. Автор также использует Eclipse.

И вот только теперь мы вышли на канал с лекциями. Да, иногда нужен именно лекционный материал – с доской, маркером, чтобы все черным по белому. У многих действительно так лучше усваивается информация. Лектор разбирается в теме, и это видно по его уверенным объяснениям. Очень хорошая подача материала и действительно много лекций, просмотрев которые можно не просто изучить Java, но и основательно подготовиться к дальнейшему трудоустройству. Каждый урок займет в районе часа вашего времени.

Преподаватель Java Brains является отличным учителем и техническим экспертом в том, чему он учит. Он уже давно работает разработчиком программного обеспечения, поэтому вы точно знаете, что гарантированно получите во всех смыслах правильный контент. Порой автор показывает один из способов, а затем объясняет, как можно изменить код, чтобы сделать то же самое, но лучше, чище. Плейлистов много, включая Java Enterprise Edition, а также разбор таких популярных фреймворков, как Spring и Hibernate.

На этом канале вам расскажут, что такое Docker, как создать репозиторий на Github, продемонстрируют микросервисы, туториалы, etc. В общем-то, ничего сверхнового, но этот канал станет отличным дополнением к предыдущим, так как моментами затрагиваются действительно интересные темы, которые не везде освещаются. Например  Java EE-сервер приложений Wildfly. Хорошая палочка-выручалочка, как для начинающих джавистов, так и для более опытных разработчиков.

Возьмите нашу подборку на карандаш. Она обязательно пригодиться новичкам, стремящимся изучить Java, и программистам с опытом, которые хотят вспомнить «матчасть». Удачи в открытии новых горизонтов!

proglib.io

Почему никогда не поздно начать изучение Java (или других ЯП) / Habr

Привет, Хабр! Представляю вашему вниманию перевод статьи «Why you are never too old to learn Java (or any programming language)» автора John Selawsky.
Любви все возрасты покорны.
Несмотря на то, что очень многие солидарны с этой фразой, я постоянно наблюдаю за тем, как люди загоняют себя в мнимые рамки и убеждают в том, что уже слишком поздно учиться чему-то новому или менять профессию. Почему бы нам не использовать этот подход ко всему, что мы бы хотели достичь, особенно когда дело доходит до изучения что-то нового, например, языка программирования?

Я являюсь преподавателем курса Java и у меня есть примеры множества людей, которые начали изучение Java в возрасте 30 лет или даже старше. На самом деле, старея, люди становятся более опытными и мудрыми, они видят вещи по-другому, они «как рыба в воде» в любых новых начинаниях. Кроме того, в IT меньше эйджизма (от перевод. - Эйджизм - дискриминация человека на основании его возраста) чем в других отраслях. Данная отрасль, ценит навыки, а не возраст программиста.

Здесь вы найдете 5 веских аргументов, почему вам не стоит пренебрегать своими желаниями и вы должны начать изучать Java. Данные причины, применимы и к другим языкам программирования.

Причина 1. Познание нового, помогает вашему «процессору» не выйти из строя


Хотите верьте, хотите нет, но недавние медицинские исследования Сезара Килилана (Cesar Quililan ) доказали как, мозговая деятельность, влияет на процессы старение и здоровье мозга. Выяснилось, что чем больше вы тренируете свой мозг, тем в лучшем состоянии он находится.

Они показали, как люди в возрасте от 60 до 90 лет, улучшили свое здоровье и состояние мозга, всего лишь занимаясь рукоделием (от перевод. - например вязание, способствует развитию координации мозга, улучшает моторные навыки и т.д.) несколько часов в день. А теперь, представьте, на что способен мозг 30 летнего человека.

Изучение языка программирования, равнозначно тренировке ваших мыслительных процессов - умственной тренировки, благодаря чему ваше внимание и концентрация станут намного лучше.
Пример истории успеха 32 летнего человека. Он ничего не знал о программировании или каких - либо технических вещах, сейчас он изучает программирование в университете, и говорит, что, когда он начал - это было довольно сложно, но теперь его мозг «острый как, бритва». Помимо этого, никому нет дела, до его возраста.

Причина 2. Существует куча онлайн курсов и материала – никто не увидит ваш возраст


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

  • CodeGym (он же JavaRush) — это онлайн-курс обучения программированию на Java,
    который на 80% состоит из практики;
  • Code Academy — эта программа поможет вам в приобретении технических навыков, которые будут очень полезны в вашей будущей работе;
  • Кроме того, существуют онлайн — видео курсы на Coursera или
    Udemy — платформах, которые включают в себя курсы от онлайн-университетов со всего мира, по различным предметам.

Как только вы начнете учиться или работать программистом, наверняка, многим понадобится наставническая поддержка от тех, кто уже является спецом ЯП Java. Кроме того, сообщество Java разработчиков очень сильно развито, вот некоторые платформы, которые помогут вам найти необходимую информацию или попросить дельного совета:
  • Java Forum  —  это классический форум, который включает в себя множество тем и подразделов для быстрого поиска;
  • Java wold  -  это платформа, где новости, блоги, специалисты и много вещей, связанных с Java базируются в одном месте;
  • CodeGym Help (он же JavaRush) - это сообщество для новичков, где они могут найти быструю и надлежащую поддержку.

Места, где можно задать любой вопрос и найти одно или несколько решений от пользователей:

  • Java subreddit: обмен решениями и опытом по вопросам и темам, связанным с Java;
  • Programming subreddit: запрос и поиск решений любой проблемы, связанной с программированием.

Блоги также важны - они следят за обновлениями, новыми функциями и, как правило, тем, что недавно было добавлено или создано для более удобного написания программ на Java:

  • Java Geek: является источником, где можно найти четкое объяснение того или иного случая или вопроса, к тому же он разделен на категории — взаимодействие с различными технологиями;
  • Bench Resources: другой источник, где описаны проблемы и случаи, связанные с Java. Его структура так же поделена на разделы для быстрого поиска.

И конечно, никогда не забывайте о другом важном источнике знаний - книгах. Кроме того, как только вы станете программистом, после долгого рабочего дня за компьютером вам захочется поменять экран компьютера на что-то другое:
  • Изучаем Java. Кэти Сьерра и Берт Бейтс.Авторы пытаются донести свои знания с помощью простого языка и визуального контента, не останавливаясь на том, насколько сложно изучать язык ООП.
  • Java. Руководство для начинающих. Герберт Шилдт.Описывает основы Java постепенно, что позволяет читателю понять и погрузиться в Java с самого начала.

Как вы успели заметить, существует множество онлайн-ресурсов, и это далеко не все. Так что же вас останавливает, чтобы прямо сейчас не начать изучать Java, имея такую огромную поддержку за спиной? Кстати, их не волнует ваш возраст, только ваши знания.

Причина 3. Возраст не имеет значения


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

Другая мотивация - думать о себе и никогда не сравнивать себя с кем-то еще, поскольку у людей разный опыт и разный уровень знаний. Отправной точкой должно быть то, что вы знали, прежде чем начали обучение. Вы будете удивлены, сравнивая свой прогресс с предыдущим этапом. Есть замечательный пример программиста с моего курса, у которого никогда не было работы, связанной с техническими навыками. Но он решил, шаг за шагом, пройти курсы на CodeGym (JavaRush) и знаете, что? Он преуспел и получил работу, которую хотел. И никогда не бойтесь «плохого кода» или отсутствия опыта, так как в любом возрасте мы все делаем ошибки в начале, и постепенно они исчезают, по мере того, как вы оттачиваете свои навыки. Знаете ли вы, что студенты младших курсов волнуются так же, как и старших курсов? Найду ли я работу без опыта работы? Правда в том, что некоторые компании ищут людей с минимальным опытом, чтобы вырастить из них специалистов для своих проектов. Кроме того, технологии развиваются каждый день, и они требуют много кода, и тех, кто может его создать. Нельзя выучить все 🙂

Причина 4. Изучать Java подобно изучению любых других скиллов


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

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

Причина 5. Сейчас самое подходящее время


Никогда не откладывайте то, что вы планируете, начните учиться как можно скорее, так как нужное время может никогда не прийти. Если вы ждете, значит, вы упускаете свое драгоценное время. Кроме того, позже в жизни у вас будет еще больше сомнений, чем сейчас, и начать уже будет сложнее.

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

В завершение


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

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

Следовательно, изучая Java, дома или онлайн, это лишь еще одна прекрасная возможность показать всем, что вы можете делать что-то еще. Примите это, как получение очередного жизненно важного навыка. Кроме того, никого не будет волновать, сколько вам лет, поскольку IT-индустрия - это знания.

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

Никогда не поздно начать изучать Java или что угодно, так как чем раньше вы начнете учиться, тем больше привилегий от жизни вы получите - просто начните! (Just do it)

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

Так что, если вы думаете, что вы слишком стары для этого…
— это не так.

habr.com

Хотите быстро выучить Java? Сожгите все книги

Пытаетесь выучить Java? Ускорьте процесс! Сравниваем правильный и ошибочный подходы. Подборка лучших ресурсов для овладения этим языком.

Каждый день мир программирования Java наполняют новички, которые стремятся освоить этот язык. Неудивительно, что вы тоже.

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

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

И это проблема…

К сожалению, бо́льшую часть времени начинающие разочаровываются в себе. Хотя, возможно, на всеобъемлющую фрустрацию влияют также другие факторы. Но основная причина – в избрании ошибочного подхода к освоению.

Неправильный подход к изучению Java

Вероятно, когда вы впервые ввели в Google «как выучить Java», вверху появился результат «полное руководство по Java». Затем щёлкнули и немедленно удивились порции теоретической околёсицы или громоздкой книге, которая вернула в старшую школу. Вы предпринимали попытки прочитать это, и ещё не домучили первую часть, а растерялись сильнее, чем когда начинали.

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

И обучение практическим навыкам в теории не срабатывает.

Почему?

Во-первых, истощает энтузиазм и мотивацию. Как сказал известный учёный: «пособие никогда не научит». Теория не стимулирует страсть заниматься. На самом деле, чтение теоретических книг по Java только изолирует от постижения. Хотя это и даст шанс накопить некоторые знания, но совсем не сделает вас толковым программистом на Java.

Во-вторых, теория замедляет изучение. За то время, что потратили на чтение громоздких пособий, вы добились бы больших успехов с освоением через практику. Избегайте ужасных ошибок, которые делают студенты. Я сталкиваюсь с этим всё время. На неделе с таким вопросом обратились учащиеся. И доверились мне как эксперту и наставнику по Java: раскрыли разочарования, с которыми столкнулись при овладении Java. Они покаялись, что изучали Java год, но так и не понимают, как работает код. Серьёзно?

Да, это смешно. Но, эй, многих студентов постигает та же участь. И причина проста: они выбрали неправильную дорогу – только теорию!

Итак, какой подход работает лучше всего при изучении Java?

Практика в корне меняет дело. Преимущества стремятся к бесконечности:

  • Практика ведёт к профессионализму. Я стал опытным преподавателем Java из-за постоянной, повторяющейся практики. Безусловно, это главный фактор успеха профессиональных разработчиков. Вам нужно запрограммировать всё!
  • Помогает учиться. Применение знаний на случаях настоящей жизни повышает мастерство.
  • Чем чаще практикуетесь, тем больше постигаете, включая вещи, о которых даже не подозревали.
  • Помогает писать код вручную. Это гораздо сильнее развивает навыки, чем модные инструменты и фреймворки. Вы глубже поймёте логику программирования.
  • Помогает решить практические проблемы. С практикой сможете лучше оценить сложности, понять их динамику и предложить соответствующие решения.

Действительно, практика в овладении языком программирования Java незаменима. На самом деле, изучение начинается и заканчивается практикой, главным образом, когда человек занимается самостоятельно.

Какие интернет-источники использовать, чтобы выучить Java?

Как обозначили выше, ваш успех в изучении зависит от нескольких обстоятельств. Хотя постоянство в практике – главный фактор, натаскиваться на правильной платформе одинаково важно. Интернет переполнили источники с заявлениями о доскональном знании Java и обещаниями обучить так же. Будьте осторожны при выборе.

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

CodeGym

CodeGym.cc интегрируется с IntelliJ IDEA с помощью плагина

CodeGym назвали подходящим образом. Это место, где вы отшлифуете навыки разработки на Java. Учебный процесс на платформе практический на 80%. Это позволит заниматься порядком быстрее обычного. Вы будете программировать, программировать, а затем программировать ещё капельку! И это предоставляет платформа.

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

Java Revisited

Эта платформа предлагает слегка другой подход к освоению Java. Вы получаете доступ к тоннам практических учебных пособий и садитесь за код. Они натаскивают программировать на Java и направляют. Так что это скорее смесь теории и практики. Вы читаете теорию, а затем применяете её.

Тест: насколько хорошо вы знаете Java

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

Полезные советы при изучении Java

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

  • Не бойтесь спрашивать людей. Проясним положение: вы вряд ли добьётесь успеха, обучаясь в изоляции. Это ужасный подход. Важно уделять чрезвычайное внимание изучению, но также убедитесь, что вы обращаетесь к остальным при необходимости. Кое-какие проблемы, с которыми столкнётесь, решаются при обсуждении с другим человеком. Почём знать, он встречал и разбирал аналогичную проблему.
  • Применяйте опыт наставников. В блоге часто задают вопрос, что делает моих учеников такими преуспевающими. Я улыбаюсь и говорю: «Ну, я заставляю повторять мой собственный опыт». У великого наставника богатейший опыт, потому используйте его, чтобы накопить личные знания. Учитесь на этом.
  • Присоединяйтесь к форумам и сообществам для программирования. Разработчики найдут массу подходящего. Вступайте в оживлённые, потому что так освоите кучу вещей. Вы будете учиться на опыте других, задавать вопросы, а также обсуждать и искать решения возникающих проблем. Некоторые из них включают в себя Java Forum, Java World, CodeGym Help и подфорумы программирования на Reddit (например, learnjava и learnprogramming).

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

Как построить результативный план для самообучения

Освоение Java требует планирования и дисциплины в соблюдении расписания. Это секрет процветающих профессиональных программистов. Как вы такого добьётесь?

  • Составьте график образования и найдите способы минимизировать отвлекающие факторы. Дисциплинируйте себя: чётко следуйте расписанию.
  • Задавайте правильные вопросы. Не каждый вопрос необходим и требует ответа. Только относящиеся к делу приводят к отысканию полезных решений.
  • Начните с основ. Если вы новичок, сперва осваивайте основы Java. Не прыгайте на другой уровень, каким бы лёгким он ни казался.
  • Пишите код каждый день. Практика ведёт к совершенствованию. Нужно постоянно упражняться. Сделайте программирование ежедневной привычкой. Например:
  • Создавайте мини-приложения.
  • Не уклоняйтесь от написания более продвинутых программ с использованием Java API, когда закончите с основами.
  • Попробуйте создать хотя бы одно веб-приложение и одно настольное.
  • Используйте большинство блогов и форумов, посвящённых Java и языкам программирования. Это поможет совершенствоваться.
  • Применяйте принцип 80% практики и 20% теории.
  • Продолжайте учиться каждый день, даже после достижения успеха.

Подведение итогов

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

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

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

С какой книги начнёте сожжение? 🙂

proglib.io

Опасности обучения на Java / Habr

«Вы счастливчики. Мы по три месяца жили в мешках из дерюги в грязных сараях. Мы вставали в шесть утра, стирали мешки, съедали по корке чёрствого хлеба и шли работать на мельницу, по 14 часов в день, с понедельника и до воскресенья, и когда мы возвращались домой, наш папа порол нас своим ремнем»
— Летающий цирк Монти Пайтона, Четыре йоркширца

Ленивая молодёжь.

Что может быть хорошего в тяжёлой работе?

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

Когда я был молод, я учился программировать на перфокартах. Если вы случайно делали ошибку, у вас не было такой «современной возможности», как нажать клавишу backspace и ввести заново то, что нужно. Вам приходилось выкидывать карту и начинать ввод заново.

Когда я начинал проводить интервью с программистами в 1991 г., я обычно позволял им использовать любой язык программирования для решения моей задачи на кодирование. В 99% случаев они выбирали C.

В наши дни они обычно выбирают Java.

Не поймите меня неправильно: нет ничего неправильного в использовании Java в качестве рабочего языка.

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

Вместо этого я хочу сказать, что Java в целом недостаточно сложна, чтобы отделить отличных программистов от посредственных. Может быть, это отличный язык для работы, но сегодня речь не об этом. Я даже могу зайти так далеко, что скажу — факт того, что Java не сложен, это фича, а не баг, — но это ведёт к данной проблеме.

Это может звучать немного резковато, это просто моё скромное мнение, но есть две вещи, которым традиционно учат в университетах в курсе компьютерных наук (Computer Science, CS) и которые многие люди никогда полностью по-настоящему так и не понимают: указатели и рекурсия.

В самом начале обучения в колледже вы проходите курс структур данных, со связанными списками, хеш-таблицами и прочими мелочами, с широким использованием указателей. Такие курсы довольно часто используются как курсы для отсева: они так сложны, что все, кто не обладает мыслительными способностями, необходимыми для CS, бросают, и это очень хорошо, потому что если вы думаете, что указатели сложны, то подождите пока вам не придётся доказывать факты теории неподвижной точки.

Все те юные гении, которые в старших классах школы писали на Бейсике пинг-понг для Apple II, поступают в колледжи, выбирают CompSci 101, курс по структурам данных, и когда сталкиваются с работой с указателями, их мозги просто взрываются, и они решают перевестись на политологию, потому что теперь правовая школа кажется им лучшим выбором. Я много раз видел графики отсеивания студентов с курсов CS, и обычно процент выбывших составляет от 40% до 70%. В университетах склонны считать это разбазариванием; я думаю, что это просто необходимая естественная отбраковка людей, которые просто не смогут быть счастливы или успешны в карьере программиста.

Другим сложным для многих студентов был курс, в котором изучалось функциональное программирование, в том числе рекурсивное программирование. В Массачусетском Технологическом Институте была очень высоко поставлена планка по этим курсам, разработан обязательный курс (6.001) и учебник ( Абельсон и Сассман, Структуры и Интерпретация Компьютерных Программ (Abelson & Sussman’s Structure and Interpretation of Computer Programs)) которые используются десятками или даже сотнями лучших школ CS как стандарт де факто для курсов введения в CS.

Сложность этих курсов просто ошеломляющая. На первой лекции вы целиком изучаете Scheme, и теперь вы можете быть посвящены в работу функций, работающих с неподвижной точкой, которые используют другие функции на входе. Когда я смог побороть такой курс, CSE121 в Университете Пенсильвании, я увидел, как много, если не большинство, студентов так и не смогли это сделать. Материал был слишком сложным. Я послал по электронной почте профессору длинное письмо, полное рыданий, говорящее о том, что Это Просто Нечестно. Кто-то в университете, должно быть, услышал меня (или одного из других жалобщиков), потому что теперь на этом курсе изучают Java.

Теперь я бы предпочёл, чтобы меня не услышали.
Думаете, что вы знаете, что это такое? Проверьте Себя Здесь!

Об этом и ведутся споры. Годы скуления ленивых студентов, подобных мне, в сочетании с жалобами индустрии программного обеспечения на то, как мало американские университеты выпускают специалистов по CS, сделали своё дело, и за последнее десятилетие множество безупречных в остальном школ на 100% перешли на Java. И это приветствовалось: рекрутёрам, которые используют «grep» для оценки резюме (прим.: grep — это программа в Unix, позволяющая выбирать строки, в которых есть нужное слово), это, кажется, нравится, и, что лучше всего, в Java нет ничего достаточно сложного, чтобы реально отсеять программистов без той части мозга, которая отвечает за указатели или рекурсии, соответственно уровень отсеивания в университетах понижается, факультеты CS выпускают больше студентов, за это получают больше денег, и всем становится хорошо.

Счастливые ученики Java-школ никогда не столкнутся с ужасными segfault (прим.: Segmentation Fault — типичная ошибка при обращении по некорректному адресу) при попытках реализовать основанные на указателях хеш-таблицы. Они никогда не будут делать безумных, сумасшедших попыток упаковать что-то в биты. Они никогда не будут загружать свои головы мыслями о том, как в полностью функциональных программах значение переменной никогда не изменяется, и все-таки оно постоянно изменяется! Парадокс!

Им не нужна эта часть мозгов, чтобы получить красный диплом.

Неужели я всего лишь один из тех старомодных ворчунов, вроде Четырёх Йоркширцев, которые хвастаются тем, как тяжело было жить в суровые старые времена?

Эй, в 1900 г. латынь и греческий были обязательными предметами в колледже, не потому, что они были как-то необходимы в жизни, но потому, что их знание было одним из обязательных признаков образованного человека. В некотором смысле мои аргументы не отличаются от тех аргументов, которые приводили сторонники латыни (все четыре). «[Латынь] тренирует ваш ум. Тренирует вашу память. Распутывание предложений на латыни — это отличное упражнение для ума, настоящая интеллектуальная головоломка, и хорошее введение в логическое мышление», писал Скотт Баркер (Scott Barker). Но я не смог найти ни одного университета, который до сих пор преподаёт латынь в обязательном порядке. Неужели указатели и рекурсия — это латынь и греческий компьютерных наук?

Итак, я легко соглашусь с тем, что программирование указателями сегодня не является необходимым в 90% разработки кода, и даже представляет опасность в промышленном коде. Да. Прекрасно. И функциональное программирование не так уж часто используется на практике. Согласен.

Но это все ещё важно для некоторых из самых восхитительных программных разработок. Например, без указателей вы никогда не сможете работать над ядром Linux. Вы не сможете понять ни строки кода Linux или любой операционной системы без реального понимания указателей.

Без понимания функционального программирования вы не сможете придумать MapReduce — алгоритма, который делает Google столь хорошо масштабируемым. Термины Map и Reduce пришли из Lisp и функционального программирования. MapReduce понятен любому, кто помнит из своего курса, эквивалентного 6.001, что истинно функциональные программы не имеют побочных эффектов и поэтому легко распараллеливаемы. Очень показателен тот факт, что в Google изобрели MapReduce, а в Microsoft нет, и это говорит кое-что о том, почему Microsoft до сих пор играет в догонялки, пытаясь заставить работать основные функции поисковой машины, в то время как в Google перешли к следующей проблеме: построению Skynet величайшего в мире параллельного суперкомпьютера. Я не думаю, что Microsoft действительно понимает, насколько они отстали на этом пути.

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

Ничто в образовании, построенном полностью на Java, не отсеивает студентов из-за недостаточной гибкости их мозгов для понимания этих концепций. Как работодатель, я вижу, что 100%-Java школы начали штамповать выпускников курсов CS, некоторые из которых просто недостаточно умны для того, чтобы работать программистами с чем-то более замысловатым, чем Ещё Одно Бухгалтерское Приложение На Java, хотя они и управились со скрипом с «современной-упрощённой-для-тупиц» курсовой работой. Эти студенты никогда не справились бы с курсом 6.001 в Массачусетском Технологическом, или с CS 323 в Йеле, и, честно говоря, это и есть причина, почему, с точки зрения работодателя, диплом Массачусетского Технологического или Йеля имеет больший вес, чем диплом Дюка, который недавно стал Полностью-На-Java, или Penn University, который заменил Scheme и ML на Java, пытаясь преподавать на ней курс, который когда-то почти убил меня и моих друзей, CSE121. Дело не в том, что я не хочу нанимать умных ребят из Duke или Penn — я нанимаю их — просто мне гораздо сложнее понять, кто они. Раньше я мог сказать, что парень действительно умён, если он за несколько секунд может разобраться в рекурсивном алгоритме, или реализует функции, манипулирующие связными списками на основе указателей, с такой скоростью, с которой он может писать на листе бумаги. Но в случае выпускников школ Java я не могу сказать, имеет ли претендент проблемы с этими задачами, потому что у него просто не хватает соответствующего образования, или потому, что у него нет соответствующей части мозгов, необходимой для отличной работы в качестве программиста. Пол Грэхэм называет их Горе-Программистами.

Достаточно плохо уже то, что Школы-на-Java не отсеивают тех, кто никогда не сможет стать великими программистами, но на это школы вполне обоснованно могут сказать, что это не их проблема. Индустрия, или, по крайней мере, «рекрутёры-использующие-grep», действительно требуют, чтобы школы преподавали Java.

Но «школы-только-на-Java» также перестали тренировать мозги студентов для того, чтобы они стали знающими, проворными, и гибкими достаточно, чтобы могли хорошо проектировать программы (и я не имею в виду объектно-ориентированное «проектирование», когда вы тратите несчётное количество часов, переписывая собственный код при перестройке вашей объектной иерархии, или мучаетесь такими фальшивыми «проблемами», как выбор «содержит» или «является» (прим.: has-a vs. is-a, выбор между наследованием и композицией классов)). Необходимы тренировки, чтобы научиться думать на нескольких уровнях абстракции одновременно, что является абсолютно необходимым для проектирования отличной архитектуры программного обеспечения.

Вам может быть интересно, может ли обучение объектно-ориентированному программированию (ООП) быть хорошим заменителем указателей и рекурсии как вычищающих курсов. Короткий ответ — нет. Не обсуждая достоинства ООП, можно просто сказать, что оно недостаточно сложно для отсеивания посредственных программистов. Преподавание ООП состоит в основном в запоминании нескольких словарных терминов, таких как «инкапсуляция» и «наследование» и заучивании ответов на множество вопросов о разнице между полиморфизмом и перегрузкой операций. Не сложнее заучивания знаменательных дат и имён на уроках истории, ООП ставит неадекватно простую задачу для того, чтобы отпугнуть первокурсников. Когда у вас проблемы с ООП, ваша программа все-таки работает, она просто становится сложной для поддержки. Якобы. Но когда у вас проблемы с указателями, ваша программа выдаёт Segmentation Fault, и вы понятия не имеете, что происходит, до тех пор пока вы не остановитесь, не сделаете глубокий вдох и не попытаетесь на самом деле заставить свой ум работать на двух уровнях абстракции одновременно.

Рекрутёры-использующие-grep, кстати, высмеиваются здесь, и для этого есть веские доводы. Я никогда не был знаком с человеком, который бы понимал Scheme, Haskell и указатели С, и не мог бы освоить Java за пару дней, и после этого писать код на Java лучше, чем люди, имеющие пятилетний опыт работы с Java, но попробуйте объяснить это среднему HR-биороботу.

А что насчёт миссии CS-факультетов? Это не ПТУ! Их работа не состоит в том, чтобы подготовить людей к работе в промышленности. Это только для общинных колледжей, скажут вам, (прим.: в США двухгодичный колледж, готовящий специалистов средней квалификации для работы на территории местного сообщества) и государственных программ переобучения для уволенных рабочих. Предполагается, что они дают студентам фундаментальные инструменты для того, чтобы те жили своей жизни, а не готовят их к первым дням работы. Правильно?

Всё же. CS это доказательства (рекурсия), алгоритмы (рекурсия), языки (лямбда-исчисление), операционные системы (указатели), компиляторы (лямбда-исчисление) — и в результате получаем, что школы-на-Java, которые не учат С и не учат Scheme, в действительности не учат компьютерной науке. Насколько бесполезно в реальном мире понимание концепции каррирования (прим.: в функциональном программировании порождения из одной функции другой функции с меньшим числом аргументов; например из f(x,y) = x*y получение функции f3(x) = f(x,3) = 3*x), настолько же это необходимая предпосылка для высшего образования в области CS. Я не понимаю, почему профессора в комитетах, утверждающих программы обучения в колледжах, позволяют их программам тупеть до такой степени, что они не только не могут готовить программистов, готовых к работе, они даже не могут подготовить выпускников, которые могли бы получить степень PhD (прим.: аналог кандидата наук) и соперничать с ними за рабочие места. Хотя нет, подождите. Забудьте. Может быть я всё-таки понимаю.

Действительно, если вы вернётесь и изучите дискуссии, которые имели место в академических кругах во время Великого Перехода На Java, вы заметите, какой большой интерес вызывал вопрос, явяется ли Java достаточно простым для использования его в качестве учебного языка.

«Боже мой», — подумал я, — «они пытались отупить курс ещё сильнее!» Почему бы не кормить всех студентов с ложечки? Почему бы преподавателям самим не делать и тесты за них — тогда точно никто не будет переходить на гуманитарные специальности! Как предполагается научить кого-то чему-то, если курс обучения заботливо сконструирован так, чтобы стать ещё проще, чем он есть сейчас? Кажется, ставится задача приложить усилия (PDF) по разработке простого подмножества Java, предназначенного для изучения студентами, выпуск упрощённой документации, которая заботливо прячет весь этот EJB/J2EE-мусор от их нежных мозгов так, чтобы они не беспокоили свои крохотные головки какими-то другими классами кроме тех, которые необходимы для того, чтобы решать стандартный простейший набор заданий по курсу.

Наиболее сочувственное объяснение, почему факультеты CS с таким энтузиазмом отупляют свои курсы, это то, что у них будет значительно больше времени для обучения актуальным концепциям CS, если только они не будут вынуждены тратить две лекции на то, чтобы объяснить разницу между, скажем, int и Integer в Java. Хорошо, если дело только в этом, 6.001 будет для вас отличным ответом: учебный язык Scheme так прост, что весь язык может быть рассказан смышлёным студентам примерно за десять минут; после этого вы можете потратить остаток семестра на неподвижные точки.

Фух.

Я возвращаюсь обратно к единицам и нулям.

(У вас есть единицы? Везучий ублюдок! Всё, что было у нас — это нули.)

Конец
Переводчик: Илья Болодурин

Cтатья давнишняя, но «зацепило».

Upd
В комментариях многие просили озвучить собственное мнение, а не тупой копипаст статьи. Ответил

habr.com

ТОП-10 лучших книг по Java для программистов

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

На нашем сайте вы найдете уйму книг, в том числе лучших по вашему мнению. Здесь же собраны книги, посвященные языку программирования Java. Так чего же мы ждем? Поехали!

Ничего удивительного, что эффективная Java от Джошуа Блоха – это лучшая книга. Это определенно обязательная к прочтению книга по Java для программистов любого уровня. Вы получите массу информации по ЯП и его API, т. к. автор является создателем нескольких ключевых классов, таких как java.lang и Java Collection framework.

А вот еще немного о регулярных выражений в Java.

Еще одна вечная Java-классика. Как следует из названия, вы научитесь писать правильный код, что само по себе является трудной задачей.

Выучить Java легко, а вот написать хороший код, использующий ООП-принципы, – непросто. Именно для этого предназначена данная книга.

Роберт К. Мартин делится большим опытом разработчика ПО, обучая вас различным методам программирования и практикам, которые будут полезны в повседневной работе программиста.

Самый популярный русский двухтомник по Java. Десятое издание обновили с учетом Java 8. В первом томе труда рассматриваются основные понятия и принципы современного подхода к программированию. В данной книге очень подробно на понятных примерах рассматривается базовый синтаксис, безопасность, методики ООП и параллельного программирования, Swing и многое другое. Книга подойдет как для практикующего специалиста, так и для новичка, решившего изучить этот ЯП.

В этом выпуске Head First Design Patterns, обновленном под Java 8, представлены проверенные на практике шаблоны, используемые разработчиками для создания функционального, элегантного, многоразового и гибкого ПО. По окончании обучения вы сможете воспользоваться лучшими практиками проектирования и опытом тех, кто боролся с кодом и одержал победу. Все, что вам может понадобиться в процессе работы над проектом можно найти в этой книге.

Фреймворк Spring – это тот продукт, без которого не обойтись программисту на Java. В данной книге описана работа со Spring 3: интересные особенности выражений языка SpEL, новые функциональные решения, связанные с контейнером IoC, а также REST. Автор снабдил каждую главу интересными и понятными примерами. Издание предназначено как для начинающих специалистов, так и для более опытных программистов.

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

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

Данный мировой бестселлер отличается от других похожих книг своей уникальной подачей информации. Она излагается не в строгой, а в понятной и свободной форме с визуальным подкреплением полученной информации. Вы рассмотрите такие темы, как: основы синтаксиса, ООП, сеть, многопоточность, распределенное программирование, тестирование и многое другое.

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

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

Объектно-ориентированный анализ и дизайн научат вас анализировать, проектировать и писать серьезный ОО софт, который легко использовать, поддерживать, расширять и добавлять в него новые функции, не “ломая” существующие. Вы узнаете как:

  • использовать инкапсуляцию и делегирование, для создания гибких приложений;
  • применять повторное использование кода;
  • использовать шаблоны проектирования и UML.

В данной книге, подготовленной к работе с Java 9, вы найдете, как правильно разрабатывать, компилировать, отлаживать и выполнять код на Java. Книга также охватывает некоторые из более продвинутых функций Java, включая многопоточное программирование, универсальные шаблоны, лямбда-выражения, Swing и JavaFX. Это практическое руководство Oracle Press содержит подробную информацию о системе модулей Java SE 9 и, в качестве дополнительного бонуса, включает в себя введение в JShell.

proglib.io

Java для начинающих | Изучаем java программирование

31 марта 2015 Мария (admin)

В предыдущих уроках для вывода информации на консоль мы использовали методы print() и println(), которые выводили строки или числа без какого-либо форматирования. Элементарное форматирование мы могли реализовать при помощи добавления к строкам дополнительных пробелов или других символов.  В этом уроке мы познакомимся с методами, которые откроют нам новые возможности для форматирования строк в Java.

Краткое содержание урока:

Далее »

11 марта 2015 Мария (admin)

Строка — это упорядоченная последовательность символов. В Java строка является основным носителем текстовой информации. Для работы со строками здесь используются следующие классы: String, StringBuilder, StringBuffer.  В этом уроке речь пойдет о классе String, его на первых порах будет вполне достаточно.

В данном уроке рассматривается:

Далее »

6 сентября 2014 Мария (admin)

В уроке 8 мы затронули логические операторы, они нам были необходимы для формирования логического выражения в условиях if. Этот урок будет посвящен математике в Java, и поэтому мы рассмотрим подробнее арифметические операторы и  частично возможности класса Math.

Далее »

2 сентября 2014 unuservize

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

Далее »

26 августа 2014 unuservize

Разработка Android-приложений, как и в случае с любыми другими приложениями,
начинается с установки среды разработки.

Мы разделим этот этап на три шага:

Далее »

10 августа 2014 Мария (admin)

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

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

Далее »

6 апреля 2014 Мария (admin)

В прошлом уроке мы познакомились с одномерными массивами в Java. Одной из частых задач на работу с массивами является сортировка массива.  Сортировкой массива называется процесс упорядочивания  элементов массива по возрастанию или по убыванию. В этом уроке мы рассмотрим некоторые способы сортировки и алгоритмы.

Далее »

24 марта 2014 Мария (admin)

Массив (англ. Array) это объект, хранящий в себе фиксированное количество значений одного типа. Другими словами, массив — это нумерованный набор переменных. Переменная в массиве называется элементом массива, а ее позиция в массиве задается индексом. Например, нам нужно хранить  50 различных имен, согласитесь, неудобно для каждого имени создавать отдельную переменную, поэтому мы будем использовать массив. Нумерация элементов массива начинается с 0, а длинна массива устанавливается в момент его создания и фиксируется.

Для наглядности картинка, взятая мною с The Java Tutorial.

Для того чтобы создать массив нужно его объявить, зарезервировать для него память и инициализировать. Далее »

14 января 2014 Мария (admin)

Цикл в программировании используется для многократного повторения определенного фрагмента кода.  В Java существует 3 оператора цикла: for, while, do-while.

В этом уроке мы рассмотрим:

В конце урока предложены упражнения для закрепления материала.

Далее »

22 декабря 2013 Мария (admin)

Для того, чтобы изменить последовательность выполнения фрагментов программы, в языке Java применяются конструкции  if, if-else и switch.

В этом уроке мы рассмотрим:

В конце урока предложены упражнения для закрепления материала.

Далее »

study-java.ru