Если бы я обучал Java Core

-------------------------
Актуальная информация о курсах на сегодня (май 2013).
-------------------------

Если бы я обучал Java Core я бы объяснил:

1. Принципы ООП: полиморфизм, инкапсуляция, наследование, абстракция.

2. Классы: класс, абстрактный класс, интерфейс, наследование, перегрузка, переопределение, области видимости, inner-классы, nested-классы.

3. Методы: рекурсия, передача по ссылке/по значению, vararg, статические методы.

4. Память: стек, куча, PemGen, «уборка мусора», локальные переменные, «глобальные переменные» (статические поля), Object.finalize(), Object.clone().

5. Типы: примитивы, классы-обертки, autoboxing.

6. Collection API: архитектура пакета коллекций (Collection, List, Set, Map, SortedSet, SortedMap, Iterable, Iterator, Comparable, Comparator), основные реализации и их внутреннее устройство (ArrayList, LinkedList, HashMap, TreeMap, HashSet, TreeSet), «устаревшие коллекции» (Vector, Stack, Hashtable, Enumeration).

7. Java I/O: byte-ориентированные (InputStream/OutputStream), char-ориентированные (Reader/Writer), java type-ориентированные (DataInput/DataOutput), классы-адаптеры, классы-декораторы, работа с файлами.

8. Exceptions: базовая иерархия (Throwable, Error, Exception, RuntimeException), cheched/unchecked exceptions, stack trace, обработка исключений, методы работы с исключениями в коммерческих проектах.

9. Threads: классы JDK — Thread, Runnable, Thread.State, ключевые слова — synchronized, volatile, методы общие для всех объектов (Object.wait(), Object.notify(), Object.notifyAll()), методы класса Thread (start, run, interrupt, join, getState), создание/прерывание/уничтожение потоков, работа с потоками, передача данных между потоками, потокозащищенные классы, взаимное исключение, условное ожидание.

10. Java Type System: OO, annotations, generics, AOP, lambda-формализм(Java 8).
------------------------------------
------------------------------------
Тема немного устарела, так как я ОБУЧАЮ Java Core.

Всем спасибо за информативные комментарии, план пересмотренного курса состоит из 8 «модулей»:

1. «Процедурная» Java: циклы, локальные переменные, вызовы методов, рекурсия, ссылки. Все то, что позволяет непосредственно делать полезную работу, вычисления.
2. Память в Java: где хранятся локальные переменные, что такое стек вызова, где хранятся объекты, созданные при помощи new, что такое «уборка мусора», где хранятся тела методов и классы.
3. Объектно-ориентированная Java: классы, интерфейсы, наследование, полиморфизм, инкапсуляция, области видимости, перекрытие, переопределение. Все то, что делает Java объектно-ориентированным языком и позволяет строить гибкие повторно используемые программы.
4. Исключения в Java: базовая иерархия (Throwable, Error, Exception, RuntimeException) cheched/unchecked исключения, stack trace, обработка исключений (try, catch, finally, throw, throws), методы работы с исключениями в коммерческих проектах).
5. Java I/O: механизмы Java ориентированные на работу с потоками ввода/вывода (InputStream/OutputStream, Reader/Writer, DataInput/DataOutput, ...), классы-адаптеры (InputStreamReader, ...), классы-декораторы (BufferedWriter, ...), работа с файлами, сериализация.
6. Коллекции в Java: архитектура пакета коллекций (Collection, List, Set, Map, SortedSet, SortedMap, Iterable, Iterator, Comparable, Comparator), основные реализации и их внутреннее устройство (ArrayList, LinkedList, HashMap, TreeMap, HashSet, TreeSet), «устаревшие коллекции» (Vector, Stack, Hashtable, Enumeration).
7. Java generics: сильный и выразительный механизм для работы с типами.
8. Потоки в Java: Thread, Runnable, synchronized, volatile, wait()/notify()/notifyAll(). Все те механизмы, которые позволяют создавать многопоточные программы, использующие процессор «на все 100».
------------------------------------
------------------------------------
Приношу свои извинения за «сырой» сайт. Я его дописываю каждый день, сейчас на нем около 30 страниц, а должно быть 300.
Набор идет в 2 группы:
— Java Core — занятия Пн(19.00-21.00)+Чт(19.00-21.00)
— Junior Java Developer — занятия Вт(19.00-21.00)+Пт(19.00-21.00)
Java Core стартует 11го сентября.
Junior Java Developer стартует 14го сентября.
.
UPD #1: KharkovITCourses: мы начали выдавать дипломы — больше можно почитать тут.

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Коментар порушує правила спільноти і видалений модераторами.

Для тех, кто здесь уже в комментариях сомневался в знаниях в прикладной математики автора — polytechnic.kpi.kharkov.ua/...icle.asp?id=190

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

UPD #1: KharkovITCourses: мы начали выдавать дипломы — больше можно почитать тут.

Думаю, что новичкам нужно показывать тренды и учить как учиться.
Сейчас важно держать на радаре
vert-x.github.io The next generation polyglot asynchronous application platform!
jdk8.java.net JDK 8 & lambda openjdk.java.net/projects/jdk8
Что ещё?

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

А что в этом вертексе крутого и с каких пор он стал трендом?

asynchronous is what is trending

Это трендинг у хипстеров, которых к серьезным проектам к счастью не подпускают

Могу ошибаться, но в моем представлении асинхронность сродни динамической типизации — хороши на небольших проекта, прототипах, где главное быстро выкатывать функционал. После объема проекта 3-6 человек-месяцев начинается резкая структурная деградация проекта.
Например, что вызывает сложности лично у меня — сложность или почти невозможность использовать исключения в качестве сигналов о невозможности выполнить функцию. Так запрос-ответ более не распространяются в рамках одного стека вызовов, фактически получается переход к error code модели.

For me asynchronous is multi-threading or event loop

Да, видимо пора определять «степени асинхронности»:)
Меня от поддержки проекта на callback-ах, которые регистрирует callback-и, которые ... в дрожь бросает.

Future monad — делает именно это в линейно выглядящем коде

JDK 8
После выхода еще не скоро будет в Украине использоваться в продакшене

Конечно, как и во всём мире.
Но учить надо. Если студентам дают то, что через год не очень актуально — это плохие курсы

Я бы не советовался устраиваться на работу там, где

JDK 5 актуально

Может я не прав, но что такого добавили в язык/JDK в период с Java 5 до Java 7, что делает Java 5 — не актуальным (не думаю, что все используют Fork/Join или try-with-resources такая радикально новая конструкция)?

Хотя бы тем, что в JDK 6 улучшили перфоменс

А что этого программисту? Язык — практически тот же, JDK — та же (добавили несколько пакетов). Ну пусть числодробилки медленнее на 10% и gc чуть слабее, это вполне компенсируется большим RAM и CPU cores.
Вот если проект на EJB 2, то тут понятно, почему не стоит идти. EJB 2 и EJB 3.1 — это, фактически, различные framework-и.

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

Также поскольку JDK 6 уже лет 5-6 (точно не помню), те огранизации, которые не перешли на 6 (или 7, как рекомендует Оракл), очень вероятно давно не следят за новостями.

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

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

Это слова очень плохого программиста и работника.
Почему? Вы ходит ходите по рынку, выбираете пути своей дальнейшей карьеры, в случае нового проекта, вы будете в момент принятия ключевых архитектурных решений, выбора стека технологий.
Почему уехать в другую страну (Штаты, Германия, Англия, Канада) в другую компанию, другие проекты — это нормально, а выбирать проект получше на рынке Украины — это признак плохого программиста?

В принципе достаточно тяжело даже найти что-то такое для курсов начинающих по программированию, что устареет через 1-2 года.
Можно, конечно, учить турбо-паскаль, но устарел уже как 15 лет.

Конечно, азы и базисы будут теже.
Я лично думаю, что обучение наивысшего качества сделает тебя программистом лучше чем остальные. Для этого нужно давать не только старое всем известное.
В идеале (в большим вузах) идёт не только обучение новому но и создание нового.

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

Богдан, вот мне всегда, когда я встречаю такую позицию, интересно — вы осознаете, что это называется лицемерие и ханжество?
Вы — взрослый человек, пишете на java (как я понимаю), получаете 24.000 — 40.000 гривен в месяц. Вы живете в городе миллионнике, ездите на такси (или владеете иномаркой), отдыхаете на курортах за границей. Объясните, вам не стыдно просто рубить бабло? Почему вы — программист, а не космонавт, исследователь Арктики или (приведите любую другую «героическую» и малооплачиваемую профессию). Почему вы пишете какую-нибудь ерунду (банковский софт для буржуев, например) — а не спасаете детей от лейкемии?

Вы — взрослый человек, пишете на java (как я понимаю), получаете 24.000 — 40.000 гривен в месяц. Вы живете в городе миллионнике, ездите на такси (или владеете иномаркой), отдыхаете на курортах за границей. Объясните, вам не стыдно просто рубить бабло?
А вы — фантазер, при том посредственный, ибо не очень то и угадали.
Почему вы — программист, а не космонавт, исследователь Арктики
Потому что мне интересно программирование, а летать в космос, или в Арктику мне не интересно.
вы осознаете, что это называется лицемерие и ханжество?
Что именно? Где тут лицемери и ханжество? Или вы решили что я вас осуждаю, за то что вы ведете курсы? Так вот за это не осуждаю.
А вот гуано-маркетинговые темки — это другое дело. Кстати, как там дела с «книгой», и вы так и не сказали как это у вас 15% == 100%, при количестве более 0.

1. Вы — программист на рынке, удовлетворяете спрос, зарабатываете деньги.
Так вот — я занимаюсь тем же. Есть множество людей, которые хотя заниматься чем-то современным, из доступного в Украине — IT. Я предлагаю за рыночную цену быстро изучить Java Core. Между прочим, я проверяю !!!70!!! лабораторных за 3 месяца ,предоставляю тестовую систему с примерами !!!800!!! программ. С какой такой стати, я плохой, а какой-нибудь КПИ, который тратя 5 лет и выпуская 5.000 человек в год дает реальную профессию только 10-20%?
2. Также интересно, почему вы считаете людей, готовых инвестировать в свое образование «недоэкономистами»? Вот если вы будете заниматься спортом — можно вас назвать «недоспортсменом»? Если пойдете в ресторан — «недогурманом»?

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

тебя выпилить давно пора.

публичный сайт это звучит!

Но на второй день после выхода во всех джуниорских вакансиях будет требование — минимум 5 лет опыта работы с JDK 8.

vert-x.github.io The next generation polyglot asynchronous application platform!
Сталкивался с VertX месяц назад.
Мое мнение — поделка на коленке одного энтузиаста.
После того как выяснил, что из коробки не поддерживается UDP (а нам надо было) и есть всего пара недоделок JDBC-connection pool, бросил смотреть.
Netty — это вещь, взял в руку — тяжелая, удобная, стреляет хорошо, обкатана в production.
jdk8.java.net JDK 8 & lambda openjdk.java.net/projects/jdk8
Что ещё?
Я рассказываю в каждом курсе в разделе OOP — inner/static-nested classes как следующий шаг после анонимных классов. Так что тут наше мнение сходится. Но опять же для чего лямбды нужны? Что бы Runnable делать, Comparable, Comparator и прочее. Без понимания куда лямбду вставлять толку немного.

Я говорил

держать на радаре

vert-x стал проектом Eclipse Foundation
www.infoq.com/...-future-Eclipse

Не знал, спасибо!

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

Курсы получились слабыми, стоит улучшить.
Почему: ориентированы на телепатов. Требуют от слушателя УЖЕ знать тему, фактически автор как бы сдаёт экзамен преподу, а не объясняет новичку.

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

Рекомендую ознакомиться с НЛП. Только не с попсовыми тренингами, а с реальными работами учёных или практиков. Фактически это знания как язык используется для программирования людей. Без знаний НЛП — преподаватель таковым не является и отстал от жизни лет на 70.

Всё там нормально. Кому нужно — поймут. Кому нет — начинают некропостить во все темы форума за последние 3 года.

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

IMHO, не более чем. Просто знаю, что качество можно повысить. Всё относительно. Я даже не исключаю, что все 200 человек считают это самым лучшим достижением. На сам ведь так не считаешь, надеюсь, и будешь стремиться делать лучше :)

// Обучал, и делать это умею. Образовательные технологии отслеживаю последние лет 20, мне эта тема интересна, даже если я не учитель. Я хочу, чтобы эта работа получила свою оценку рынком [в деньгах], тогда буду вовлекаться. На сегодня проблема именно в рынке, который не умеет достойно оценивать. Только проблема или возможность?
// Количество не значит качество. Более высокое качество даст следующую волну роста.

Ладно, давай о хорошем. Почему я считаю, что система может собраться:
1) Серьёзный подход к сборке курса. Мелочи не упускаются, внимание к деталям. Особенно при подготовке материалов.
2) Имеется опыт «ведения» аудитории. То есть конструктивно система устойчива, и попытка её расшатать плохими учениками приведёт только к улучшению качества, и не повлечёт деградации.
3) Имеется опыт вовлечения компаний в процесс подготовки, притом изнутри. Хотя это и наложило свой отпечаток формализма, при должном подходе позволит сделать «перекрёстное опыление», вовлекая сотрудников компаний в образовательный процесс. Особенно поможет вовлечение HR.
4) Последовательный подход. Сначала проработка одной темы, с планированием следующей. Выгода — существенно сокращает количество «отстающих», помогает закладывать более фундаментальные знания.

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

На сегодня проблема именно в рынке, который не умеет достойно оценивать.
У ШАГа 14.000 студентов, полагаю их рынок оценивает:)

И вообще темпы роста IT-образования в Украине в 2012-2014, полагаю, порядка 300%-500% в год. Так что грех жаловаться.

С точки зрения бизнеса — качество не важно. В смысле, если темпы роста рынка солнечной энергетики 50% в год, то для инвестирования в рынок и оплаты специалистов по солнечной энергетике не важно нужны ли человечеству вообще солнечные батареи.
Я имел в виду, что странно считать, что на таком сверхдинамичном рынке недооценены ключевые специалисты.

Я старше, опыта больше, и образование другое. Убеждать не стану — не имею финансового интереса. Это лишь моё мнение. И время покажет, насколько опасно строить что-либо без прочного фундамента.

Или это сбой у ДОУ, или Вы ответили на свой же комментарий. Я не пойму к какому посту этот комментарий.

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

Рынок — великолепно, а вот минобразования — плохо.
Работать на государство — вообще почти всегда плохо.

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

Я говорю, что государство плохо оплачивает труд преподавателя, а ты, что высшее образование — это хорошо.
Вообще не вижу противоречия.
Я отвечал на фразу

Я о том, что рынок пока слабо оценивает труд преподавателей.
Это не правда, рынок — очень хорошо оплачивает. Просто большинство преподавателей не выходят на рынок образования. EPAM, скажем, очень хорошо платит преподавателям.
Это не правда, рынок — очень хорошо оплачивает. Просто большинство преподавателей не выходят на рынок образования. EPAM, скажем, очень хорошо платит преподавателям.
Они не выходят потому что там места не хватает. Любая училка истории или биологии согласилась бы на штуцер зарплаты в частной школе.

Я имел в виду преподавателей в IT.

Этого рынка пока даже не построено. Сравни с доходами бизныс-трэнингов (торгашей воздухом), которые косят капусту на отсутствии рынка образования.

Этого рынка пока даже не построено.
Не знаю откуда информация, в Харькове есть десятки мест для преподавателей программирования (Java, C#, QA automation) в крупных IT-компаниях, там фактически не могут закрыть вакансии, так как нет желающих.
Без обид, но я обучил 200 человек за последние полтора года, а Вы, как понимаю — никого.
И сколько из них куда то устроились и их не выгнали за первые пол года? Есть ли отзывы благодарных тимлидов?

Порядка 30 человек: EPAM, GlobalLogic, DataArt, GridDynamics, Insoft, ...
Никого не выгнали. Я вообще редко слышу, что бы кого-то с первой работы выгоняли. Если уж работодатель джуна берет — то на вырост.

Без обид, но я обучил 200 человек
Порядка 30 человек:
А кто тут говорил про гарантию трудоустройства? Или 15% == 100%?
Никого не выгнали. Я вообще редко слышу, что бы кого-то с первой работы выгоняли. Если уж работодатель джуна берет — то на вырост.
Ну тада:
Есть ли отзывы благодарных тимлидов?

1. А титмлиды вообще бывают когда-нибудь благодарны за юниоров?:)
2. Мои клиенты, вообще-то, слушатели. Задача максимально их пристроить. Мнение тимлидов важно, но они не платят мне деньги.

1. А титмлиды вообще бывают когда-нибудь благодарны за юниоров?:)
Последний мн известный случай был 1,5 года назад. Что делать с бухлом не знаю.
2. Мои клиенты, вообще-то, слушатели. Задача максимально их пристроить
И 15% — это по вашему успех? Ах да я ведь не веду курсы, поэтому я не могу иметь мнение по поводу ваших :)

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

Ты смотришь с позиции Stanford vs Golovach, а я с позиции Головач против Академии ШАГ:)
По твоему критерию — я бесконечно проигрываю, а по моему, я веду успешную борьбу с крупным противником, отвоевывая шаг за шагом территорию.

Вопрос, люди которые идут к тебе и несут свои скопленные месяцами кровные осознают что курсы повышают их шансы на успех всего на 5%?

Скорее на 15%.
Обычно приходят те, кого не берут в конторы, не зовут на собеседования. Т.е. после 3-5 провалов понимают, что надо идти учиться.

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

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

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

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

Спасибо за отличные курсы. Да, я знал основы java (то, что вы «пропускаете»), поэтому сильных проблем не было. Возможно, Вам стоит просто давать ссылочку на тот же JavaRush как для «трамплина» по изучению самых основ.

Что касается «программирования людей» — люди слишком разные и как правило, к ним нужен разный подход. Для меня «входит» Ваш, а кому-то какой-то еще.

В общем, не ведитесь на хейтеров, у Вас все здорово!

Вам стоит просто давать ссылочку на тот же JavaRush
Я сам не смотрел, но разве JavaRush уже покрыли значительную часть Java Core? Мне казалось, там готово 3 урока из 80.
// Сам не смотрел, нет времени, студенты говорили.

Открыл и посмотрел. Они выложены.

Ну вам не понравились, а 900 подписчикам — понравились.
Так что пока статистика на моей стороне:)
Бог всегда на стороне больших батальонов.

Добавь стриптиз, лайков будут миллионы. Речь о достижении конкретных целей, а не «понравились».
ВУЗы рассуждают так же: студенты есть, тысячи их. Зачем меняться?

Добавь стриптиз
1. Для полноценно развлекательного источника с блэкджеком и шлюхами нужна целая редакция (если предлагается сделать аналог fishki.net).
2. Соберется аудитория смотреть на титьки и гугл будет приводить любителей титек. А мне нужны те, кто хочет больше узнать про яву.
Память человека — ассоциативна. Ты не можешь закачать в неё массив, такая структура не поддерживается. Нужно стоить дерево. Притом желательно от нескольких ассоциаций. Которые обучаемый точно знает.
Ничем не подтверждаемая теория.
Вспомните, как преподают матан во ВТУЗе. Люди делятся на тех, кто будет знать матан и тех кто не будет. Тем кто будет — можно спокойно рассказать про признак Даламбера сходимости рядов, кто не будет — никакая аналогия не поможет.

Можно плясать от двух совершенно разных целевых функций:
1. «Сделать приятно» обучаемому: все разжевать, сделать анимацию, картинки.
2. Вырастить программиста.
...
Для второй цели необходимо втиснуть в голову в кратчайшие кучу материала. Если он не втискивается, то значит не быть человеку программистом. Мы же обучаем не компьютерной грамотности (вот мышка, вот броузер, вот сайт, ...), а Специальности.

А если ты превысил норму втискивания на 2%, в результате завалил 100% — как об этом знаешь?
А если внутри материала попалась невтискиваемая конструкция — как увидишь?
А если преподаватель попросту неправильно выразил мысль, а ты не даёшь место возражению, чем разрушаешь уверенность учеников в полученных знаниях?

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

Качество — это не «разжевать», как раз здесь проблема. Нужен цикл качества. Сделал — контролируй, анализируй, вноси изменения. Упустил любой этап — качества нет, а есть затраты. В текущих курсах чрезмерные затраты времени, именно на попытки «разжевать». Для компенсации увеличивается скорость в критических местах, где нужно было остановиться, подумать.

Если ошибочно всего 1 человека убедил, что не быть ему программистом — в деньгах это сколько? А если вырастил несколько недо-программистов? А если гoвнокодеров (не программистов)? А что с теми, кто не закончил — анализировал, почему?

// Если я не прав — докажи. Только не мне, себе. И не количеством, не авторитетом, а логикой. А если где-то прав, не признавай, просто используй.

не буду коментировать весь пост, только последнее предложение, пока человек не признается сам себе, что есть проблема он будет уверен что пролемы нету, в даном случае Ваша критика разумна, и я хочу поддержать Вас в этом начинании :)

А если ты превысил норму втискивания на 2%, в результате завалил 100% — как об этом знаешь?
Пример в студию. Мех-маты всех стран перегружают — и все ок. Ну кроме повышенного количества математиков-шизофреников:)
Отличники знают, что голова — она резиновая, а троечники считают что нет, деревянная.

Но не по скорости! И потом, ты готов сделать отсев троечников на вступлении? Сомневаюсь. 98% отсеять — шутка ли.

Но тогда готов ли к снижению планки итога? Когда 98% твоих студентов не смогут воспользоваться знаниями. И вынуждены будут учить заново. Спрошу в лоб — сколько процентов мех-мата работает по специальности? Вот! А спрос есть.

По-моему, Вы «разжевываете» материал достаточно хорошо.

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

Лучше 10 минут объяснять 8 строк кода чтобы ученик понял. Вместо того чтобы 45 минут просто вычитывать материал. Вникуда.

Вместо того чтобы 45 минут просто вычитывать материал. Вникуда.
Я вычитываю в камеру. В течении суток весь материал лекции появляется на ютубе. Любой может пересмотреть лекцию.
...
Тут просто есть два подхода:
1. Ориентироваться на середнячков.
2. Ориентироваться на лучших.
Первый подход выглядит более правильным (больший охват, более гуманно), однако в долговременной перспективе происходит демотивация лучших и деградация группы. Получается сельская школа, где не загружают отличников.

А вариантов нет. Только первый.
Лучшие кто — кто УЖЕ что-то знает по теме! И неважно, троечники или отличники. Просто одни знают, другие нет.

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

Для новичка, неуспевшего запомнить, да ещё и проскочившего ключевой смысл в секундной фразе

Все равно без начальной подготовки идти на курсы бесполезно. Нужно знать смысл всех слов, который будет произноситься. А это проще выучить с пособием для чайников, чем с преподавателем. И наоборот, пособие не всегда хорошо разъясняет многие моменты того же ООП.
Чтобы научиться читать код с нулевого уровня, понадобится около 3 месяцев привыкания к терминам и их запоминанию. Стоит ли платить за такие элементарные знания или лучше купить книжку за 200 грн? Я думаю, лучше секономить на таком примитивном уровне.
А вот уже для понимание дженериков и т.п. быстрей будет с преподавателем.

А это нужно делать одновременно. В идеале — если сам преподаватель написал книжку, и по ней читает. Лекция сократится вполовину! А качество вырастет на ровном месте.

Терминов не так много на самом деле. 1 лекции более чем. В чём преподаватель полезнее — так это в расставлении акцентов. Вот эти 20 байт базовые, их надо вызубрить. А вот эти 200 мегабайт — практика, нужно привыкнуть к методологии, и ничего не зубрить.

Сделайте один показательный урок для ютюба и сравним :)

В идеале — если сам преподаватель написал книжку,
А это зачем? В смысле книга — это в определенной мере показатель качества преподавателя, тут да. Но есть ли смысл писать, издавать, распространять книгу только что бы преподавать? У Ахметова — нет книги, у Путина — нет, у Обамы — нет. И тем не менее у них все ок:)
А вот у Маккиавели есть, но он никем так и не порулил.
В идеале — если сам преподаватель написал книжку, и по ней читает.
Вот выходит у нас Java 8 с лямдами, так что, выходит, что бы преподавать необходимо срочно прикрывать курсы, за полгода готовить новое издание и переиздавать?

Я позиционирую курсы как Самые Интенсивные Курсы по Java Core в Харькове. Кто хочет узнать чуть-чуть и за два года — в академию ШАГ.
Кто хочет, может задавать вопросы прямо профессиональному программисту. Если вопросов нет, или они элементарные — стоит идти к конкурентам.

Ааа, так понятно. Было полезно пообщаться. Успехов в выбранной конкурентной нише. Уверен, скоро выйдешь за пределы java core и покроешь основной спектр требуемых фреймворков.

В аудитории примерно процентов 30-50 людей на пределе воспринимают информацию. 5-10 бездельничают — слишком просто, 50 — не понимают.
Если 30-50 процентов слушателей интенсивно думают 70 часов в течении 3 месяцев, то я считаю это — успех. Ну для меня это предел.

5-10 бездельничают — слишком просто, 50 — не понимают.

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

1. У меня первые две лекции полностью бесплатные. Человек приходит, смотрит, если решил платить — то это его выбор. Может он решил научиться яве не за 3 месяца, а за ближайший год, так что же его — выгонять?
2. Я даю в электронном виде всю классическую литературу: Блох «Эффективное программирование», Арнольд/Гослинг «Язык программирования Java», Эккель «Философия Java», Хорстман — 2 тома, Шилд «Java. Полное руководство», ...
И неистово рекомендую читать-читать-читать. На лекциях объясняю самые сложные моменты. Тяжело, да и бессмысленно пересказывать 2 тома Хорстманна.

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

Меня так учили в спецшколе и в университете и я так учу.
Все говорят про какой-то игровой процесс, и т.д, я не пойму о чем они:)

Я не являюсь авторитетом, если действительно интересно — копни психологию памяти.

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

А через год воспроизвести эту таблицу — слабо? А через три? Эти знания обречены на забывание, так зачем их давать?

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

Спрошу в лоб — лекцию по памяти читаешь, или по тексту? А попробуй по памяти. Без материалов. Свою же лекцию. А новичкам ты именно это предлагаешь! 2 недели — и знаний как ни бывало.

Эээ ...
Вообще-то я читаю по памяти. Весь курс.

Мда, редкость. Стоило спросить об этом сразу. Другое доминирующее полушарие, и другие шаблоны обучения. Щас, кстати, и проверю :)

// ...как я мог об этом забыть. Спасибо что напомнил.

А новичкам ты именно это предлагаешь!
В смысле? Я что им предлагаю лекцию подготовить? Я предлагаю разобраться в ряде сложных примеров, тех примеров, которые им встретятся на собеседовании.

Выложил видео первых лекций (Итерация + Рекурсия) — www.youtube.com/...harkovITCourses.

Зацікавили дані курси, виникло декілька запитань, як і просив ТС — написав їх йому на пошту. Першу відповідь отримав через 2 дня. Через 10 хв. після отримання відповіді — відправив лист ще з деякими організаційними запитаннями. Очікував відповіді 6 днів. Написав ще раз, бо можливо мій лист загубився в масі інших листів, по різному буває... Пройшло 4 дні, відповіді
немає.

Не знаю, чому не отримав відповіді, надіюсь результатом таких подій не буде поява на ДОУ маса нових тем, схожих на: «Миша Собин — верни бабло» :)

Приношу свои извинения, видел ваше письмо и не ответил. Это моя ошибка.
Ситуация следующая, в реале набрано две сентябрьских группы Core и Junior, прочитал четверть курса. Сейчас идет набор на октябрь (с 10го октября — Ср 19.00 + Сб 19.00) в Core. С Junior в реале пока неопределенность (будет октябрь или уже ноябрь) — недостаточно заявок.
С вэбинарами первоначальная задумка транслировать напрямую лекции групп в реале признана не очень удачной. Тяжело фокусироваться сразу на двух аудиториях, скажем, группе онлайн тяжело воспринимать доску, сложности со звуком.
Я принял решение продолжать набирать и обучать в реале, а вэбинары записывать отдельно и предоставлять доступ к видеозаписям. В связи с этим, доступ к вэбинаам будет чуть позже.

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

Если кто-то заинтересован в обучении в реале в Харькове Java Core — состыкуйтесь со мной в скайпе: ivangolovach и договоримся прийти посмотреть на реальные лекции сентябрьской группы (заканчиваем исключения, начинаем объектно-ориентированную часть). Занятия в Центре, недалеко от метро Госпром.

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

з.з.ы. могу коуча пропиарить если кому интересно

представляю, что у вас творилось на пятый, шестой день...

в инкоме за три дня как раз 90% перечисленного дали. ...

3 дня?

Лектор хоть водичкой горло успевал промочить? или оно у него луженое, или он не один был, и они как эстафету проводили?

Опыт выступлений Фиделя Кастро и Уго Чавеса показывает, что и один такое может провести:)

Не знаю как это происходило у Вас, но, в принципе, это возможно. Если слушатели имеют пару лет опыта в Delphi/C#/PHP, то им можно сверх-интенсивно объяснить особенности Java.
Т.е. если слушатели уже понимают как работать с исключениями, что такое хэш-таблица, работали с файлами, то за 10-15 часов вполне возможно объяснить особенности Java и снабдить отсылкой к материалам.
Я сам подумывал такое сделать, но не совсем понятна аудитория. Скажем 2 дня (Сб, Вс) по 5 часов за 100$ — интенсивная подготовка по Java. Непонятно, кто эти 5-8 человек, пришедшие на семинары? Они уже Middle Developer но прослушивают курс Java Core.

В общем ,если бы группа была, то я бы вполне мог такое сделать.

Если у человека 2 года опыта

Delphi/C#/PHP,
и ему вдруг зачем-то реально понадобится Java (не из любопытства) — он сам с ней и разберется. Собрать группу подобных людей, которым нужно что-то одинаковое, да еще и в темпе тренера малореально, а запросы у них высокие.
Платный коуч в этой ситуации может быть востребован, чтобы БЫСТРО ОТВЕЧАТЬ на какие-то конкретные вопросы, инициатива которых идет от обучаемого. Но тогда он должен действительно быть гуру, вникать в вопрос, даже если сходу не знает ответа, то есть работать как консультант (по-часово, по высокому рейту).
Меня вот всегда интересовал такой вопрос : читать экеля, хорсмана, шилтд и другие на русском где норм материал объясняют или надавать предпочтение JAVA спецификации на анг. с возможностью изучить много анг. слов (заметил реально помогает (не лезу в разные переводчики, а просто плагин стоит в браузере наводишь мишку на слово и там 3-6 обозначений в разных часах времени (кароче как словарь анг.))) и это все

практиковаться на разных ИТ форумах в разделах задачи для новичка.

Как по мне с чем я сталкивался очень часто это были проблемы типа :
1) очень много материала не знал за что хвататься, чтоб зря время не тратить
2) найти лучший ресурс или книгу где можно почитать

3) постоянное чувство, что прочитал но еще надо, так как в 1-й статье или книге все не раскрыто

Еще что бы такого написать интересного, что бы проверить полученые знания на практике.

1) возьмите хорошую статью — попробуйте реализовать их идеи в коде. Пример: вот по class loading, попробуйте написать что-нибудь (class Test{void main() {...}}) эксплуатирующее эти идеи, попробуйте «прорвать песочницу java»
2) возьмите хороший системный фреймворк, попробуйте понять идеи, попробуйте повторить. Пример: Mockito (docs.mockito.googlecode.com/...o/Mockito.html, как делается эта магия (это называется internal DSL)?
LinkedList mockedList = mock(LinkedList.class);
when(mockedList.get(1)).thenThrow(new RuntimeException());
verify(mockedList).get(0);
3) общайтесь с профессионалами — ничто не может заменить потока знаний от специалиста, любящего свое дело. Да, из-за этого иногда приходится жертвовать деньгами.

В целом, для получения глубоких знаний, свой самостоятельный проект не годится. Это мое мнение. Маленький проект («судоку», «крестики-нолики», «тетрис», ...):
1) просто не требует специальных знаний/технологий
2) вы не сможете сами себе хорошо поставить задачу
3) а кто проверит решение?

Пример: придумайте хорошую задачу на generics.

Т.е. всегда эффективнее, что бы кто-то, отлично знающий предмет:
1) поставил вам !специально подобранную! задачу
2) дал !высококачественный материал! для чтения

P.S. Свой проект хорош для старта. Маловероятно, что вы сами за месяц сможете что-то такое написать на JSF, что бы потом пройти собеседование и получить прибавку за JSF! Это крайне важный момент — можете ли вы доказать собеседующему, что вы что-то усвоили. И получить свои +200$-400$. Тут я хочу акцентировать внимание: каждая технология в вашем резюме только тогда чего-то стоит, когда она дает вам заметную прибавку.

Servlet + JDBC + jQuery + JSF + Spring + Hibernate + SQL в резюме должны давать 2000$ зп. Т.е. каждая технология дает вам 300$.

Пример: придумайте хорошую задачу на generics.

Я бы рассмотрел:
1. Сигнатуру метода java.util.Collections#min(Collection{? extends T} coll, Comparator{? super T} comp)
2. Реализацию генерифицированного паттерна Visitor из книги Java Generics and Collections.
3. Сумашедший пример Self-bounding generics от Брюса Экеля.

4. Статью «Generics in the Java Programming Language» от Gilab Bracha.

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

Servlet + JDBC + jQuery + JSF + Spring + Hibernate + SQL в резюме должны давать 2000$ зп. Т.е. каждая технология дает вам 300$.

Скорее, правило работает с конца: незнание чего-то конкретного вычитает какую-то сумму, а иногда и все 2000 :) Ну или список неудачный.

1) читайте те источники, которые быстрее дают знания (если на русском проще — то на русском)

2) английский все равно придется учить: computer science преимущественно на англ. Учить, читая книги по специальности — идеально

английский все равно придется учить: computer science преимущественно на англ. Учить, читая книги по специальности — идеально
не читайте доку на русском, даже если английского не понимаете.

Спорный вопрос. Для джависта, все же, первичны знания по java, английский — на втором месте. На первых порах, конечно. Большинство программистов не находятся на прямой связи с заказчиком.

не будет смысла :) Убеждался не раз, слабый английский приводит к потере понимания нюансов.
Более правильный, ИМХО метод — прочел на русском, найди и перечитай такое же на английском. Уже просто потому что на русском частенько материал подается более упрощенно. Но даже когда в английском слаб, при перечитывании англ доки на ту же тему, ты увидишь что упоминаются что-то, чего не было в русском варианте.

Даже на уровне форумов, обычно на Stack Overflow ответы более толковы и полны, чем на русском Java Talks. Поэтому — нашел ответ на Java Talks — сверь с Stack Overflow.

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

Поговаривают, что вы очень глубоко знаете все эти вещи и вообще хороший теоретик, а это из опыта следует или вы просто спецификации внимательно читаете?

Ну ... если совсем уж глубоко копать, то я склонен к систематизации и упорядочению знаний. Что помогает:
1) детальное чтение спецификации/интернета с выяснением причин принятых решений. Практиковать последующую медитацию:) Пример:
— классы допускают рекурсивное определение
class Node {public Node next;}
— генерики допускают рекурсивное определение
class C< X extends Callable < Y > >, Y extends Callable < X > > {}
или даже так
class SelBounded < T extends SelBounded < T > > {}
— аннотации допускают такое
@I @interface I{}
допускают такое
@interface A {B value();}
@interface B {}
@A(@B) class XXX {}
но не допускают такое
@interface A {A value();}
и такого
@interface A {B value();}
@interface B {A value();}
в итоге, я могу сделать так
@interface A {String t() default «„; B next();}
@interface B {String t() default “»; C next();}

@interface C {String t() default «"; }

@A(t = «A», next = @B(t="B«, next = @C))

class XXX {}

но не вот так (динамическая структура данных — связный список на аннотациях)
@A(t = «A», next = @A(t="B", next = @A()))
class XXX {}

и почему у аннотаций нет наследования?

2) выяснение границ возможностей вашего инструмента.
Пример: есть ли в java хвостовая рекурсия? Если нет, то почему? А можно самому реализовать?

Пример: есть ли в java корутины? Если нет, то почему? А можно самому реализовать?

3) в целом есть куча отличных книжек и статей как по java так и в целом по computer science, но их никто не читает:(

Чертов DOU!!! Не форматируй мои генерики!!! :)

в целом есть куча отличных книжек и статей как по java так и в целом по computer science, но их никто не читает:(
А можно парочку названий? Что вы считаете must read для advanced/expert уровня по java, что по CS?
Надо уяснить, что эксперт — это уровень знаний, а senior, teamlead, PM — это роль на проекте (я беру реалии Украины):
1) Не рассчитывайте на то, что существует волшебный учебник/книга, где все собрано.
2) Уясните, что вам придется прочитать более 10.000 страниц и уйдет на это более 3-х лет.
3) Примите как данность, что вы занимаетесь научной деятельностью и подбор источников — часть этой деятельности. Анализ материалов, анализ истории проблемы, анализ конкурирующий решений, анализ, анализ, анализ ...

4) Старайтесь фиксировать любое знание в виде примеров кода, ищите код, старайтесь сами написать код, проверяйте гипотезы в виде запуска кода.

Я быстро начал делать сайт, вот выложил первую порцию материала по Java/JVM — kharkovitcourses.blogspot.com/...-materials.html (страница сырая — будет переделываться).

Найти бы такое по C# .net :)

А почему не Java? Языки оба современные и весьма похожи. Почему именно C#?

Потому что мне не интересна кроссплатформенность, мне нравится продукция майкрософта, полюбилась вижуал студия, никсовые системы не возбуждают и я предпочел бы по возможности с ними не работать :) А так же много доступной информации по языку, тот же мсдн очень крут. Ну и там по мелочи, синтаксического сахара больше.
Это чисто субъективно. Выбор стоял между джава и шарпом. Выбрал то, что по вкусу. Тем более что перспективы, количество вакансий и зарплаты примерно одинаковые.

Ну ... Вы подумайте. За кроссплатформенность Вы особенно ничем не платите, никсовые системы — большую часть времени Вы проводите внутри JVM и отличий Win/Linux не должны замечать. Сахар — это да, тут Oracle только в Java 8 собирается делать то, что C# уже давно имеет. Для сахара у нас есть Scala:) и ее возможность по интеграции с Java в рамках JVM.

Я лично выбрал Java за огромное количество высококлассных фреймворков с открытым исходным кодом. Лучшее средство изучения языка/экосистемы — это смотреть исходники фреймворков.

Подтверждаю похвальные отзывы, присоединяюсь: спасибо тебе и ЕПАМу :)
Немного пропиарю Ваню от себя, но искренне: Ваня молодец, читает хорошо, глубоко, отвечает на вопросы не поверхностно, а полученные знания нужны в работе и весьма хорошо продаются на собеседованиях :)

Про java core все правильно написано, это нужно и это спрашивают.

Что меня еще спрашивали на собеседованиях:
1) Servlet API — тут самый лучший источник знаний — спека и практическая проверка изложенного в спеке. На это можно потратить время, окупится. Отдельное спасибо за LocaleFilter :)
2) почти все компании спросили про MVC и фронт-контроллер: зачем и как примерно устроен (этого с тобой не охватили, но отличный источник тут — Spring Reference. Читать после полного прочтения Servlet API)
3) Все компании спросили по IoC, цепляя при этом как базовые понятия и принципы, так и реализацию. Твоя самописная реализация Dependency Injection, в принципе, нужна, но лучше пусть ее напишут сами студенты. Источник — Spring reference про Spring Core.
4) SQL. На препродакшне не было, но я считаю, что маст-хев. Учить можно самостоятельно по любому источнику.
5) Javascript базовый, DOM, AJAX обязательно, понимание, как пользоваться jQuery.

6) ... ну и английский — спросили и спрашивают везде. Чаще всего просят перейти на англ.яз. в описании проектов или же автобиографии.

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

1) Servlet API — тут самый лучший источник знаний — спека и практическая проверка изложенного в спеке. На это можно потратить время, окупится. Отдельное спасибо за LocaleFilter :)

LocaleFilter — это да, удалось хорошо продумать пример задачи, но то количество времени, которое мы на него потратили — это что-то:)

Половину этого времени мы потратили на написание 12,000 тестов (спасибо, что параметризованных :) и багофикс. Тем более, в процессе его написания изучали и сервлеты как таковые, и особенности URL-меппинга (о которых не сказано в спецификации:) ), и коллекции, и паттерны, и рефакторинг в полный рост. Правда, в финальной работе я его существенно упростил :)

2) почти все компании спросили про MVC и фронт-контроллер: зачем и как примерно устроен (этого с тобой не охватили, но отличный источник тут — Spring Reference. Читать после полного прочтения Servlet API)

В том то и дело, что Front Controller + MVC не входят в Servlet API, а для их понимания это самое Servlet API желательно знать на отлично. Теперь я в курс Junior Java Developer добавил и Front Controller и MVC.

3) Все компании спросили по IoC, цепляя при этом как базовые понятия и принципы, так и реализацию. Твоя самописная реализация Dependency Injection, в принципе, нужна, но лучше пусть ее напишут сами студенты. Источник — Spring reference про Spring Core.

Уффф ... с понятием о IoC уже сложности, а рассматривать различные реализации — это уже слишком:). Мою самописную IoC уже не все восприняли, возможно даже не поняли какую проблему мы решали. Сами будут 3-4 недели писать. Как LocaleFilter:)
Если бы я делал курс Middle Java Developer, то да, ключевые frameworks были бы:
— JSF
— Spring
— Hibernate

И тогда вполне можно было бы Spring посвятить целый месяц.

Мне понятие IoC дошло за пол часа до собеседования :)

Сильно же тебя перепугало собеседование:)

Мне за 3 месяца так не удалось тебя напугать:)

я просто хорошо это скрывала :)

а ты будешь курсы для мидлов проводить?

Если бы группу 6-8 человек набрал, то возможно. Пожалуй немного другой формат — скажем по субботам, по 4 часа. Много материала на дом. Люди должны сами писать проект, задачки только подкидывать.

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

4) SQL. На препродакшне не было, но я считаю, что маст-хев. Учить можно самостоятельно по любому источнику

.
Да, это однозначно мое упущение — было необходимо сформировать как список тем, так и источники. Хотелось прочитать микро-курс на недельку, но не успел тогда хороших задачек придумать.

Обучение становится тем более качественным, чем больше раз читаешь один курс (нарабатывается материал).

5) Javascript базовый, DOM, AJAX обязательно, понимание, как пользоваться jQuery.

Тут было сознательное отбрасывание всего клиентского. Если бы курс длился 6 месяцев (в Минском EPAM так и есть, 6 месяцев, но половина рабочего дня) — можно прочитать.

6) ... ну и английский — спросили и спрашивают везде. Чаще всего просят перейти на англ.яз. в описании проектов или же автобиографии.

Тут не поспоришь. Думаю, что вполне реально создать 3х месячные интенсивные курсы разговорного английского, которые заметно поднимут результат собеседований. Лучше, конечно, спросить преподавателей английского. Может это будет «индийский английский»:)

lambda-формализм(Java 8)

А как же рассказать про pure/unpure и про морфизмы?

Согласен, тут — перегиб.
Просто я все готовлюсь как-нибудь прочитать эпическое «пятилекцие»:
«Java Type System»:
— OOP
— annotations
— generics
— AOP
— lambda (Java 8)
материал уже есть, да все не соберусь.

Идея в том, что система типов в Java весьма интересна и сложна. Особенность в том, что переплетаются 5 независимых механизмов.

P.S. Вся прелесть в том, что система типов должна относиться к Java Core, но «користам» ее не читают, так как слишком сложно, а Junior/Middle/Senior не читают — не знаю почему, считается, видимо, что generics — это что-то очевидное. Хотя есть целые книги: «Java Generics and Collections» + «Angelika Langer: Java Generics FAQ».

Коментар порушує правила спільноти і видалений модераторами.

От себя могу сказать — сама училась у Вани в епаме. Объем материала и доступность изложения на высоком уровне! Молодец, желаю удачи в начинаниях!

Спасибо за ссылку, фактически я сам делал как автор — выпускал «штучный продукт», помогал друзьям, пока в не стал «начальником конвеера» в Харьковском EPAM:)

Не плохо. Только, имхо

Object.finalize()

и

Vector, Stack, Hashtable, Enumeration

лишние.
Еще не хватает сериализации и hashcode, equals. Или выделить их отдельно в контексте

Java I/O

и

Collection API

соответственно.

Object.finalize() - я бы рассказал хотя бы поверхностно. Типичный вопрос на собеседовании — какие методы класса Object? Для серьезного курса рассказал бы про ошибки при планировании Object.finalize() и про замену его ReferenceQueue+PhantomReference.

Про устаревшие коллекции — ответил ниже, основная причина — могут встретится на собеседовании.

Сериализация, по моему опыту, не нужна избыточна по двум причинам:
1) для уяснения как она работает необходимо не менее 1го часа (иначе слушатель вообще уплывает на вопросах про резолвы циклических ссылок или как вообще можно java объект превратить во множество байт)

2) в реальных проектах она не используется: Hessian, JBoss, Oracle Coherence, JAXB — используют свои алгоритмы сериализации.

в реальных проектах она не используется
Я бы сказал, что они используется во всех проектах, помимо простейших. И в отличие от того же finalize, гораздо важнее.
По моему опыту,
1) сохранение объекта в виде бинарного представления на основе Serialization API — не очень хорошая идея. Возникает проблема согласования версий — в случае рефакторинга кода. Очень напоминает проблемы OODB. По-моему опыту, чаще раскладывают в XML посредством JAXB.

2) Serialization format — родной формат для RPC посредством RMI, но оно крайне редко использовалось на моем пути. Вызовы Hessian, JBoss Remoting, JAX-RS — более популярные способы RPC в корпоративном мире. А там свои форматы сериализации.

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

JBoss remoting использует Java serialization

Не соглашусь с вами:

— JBoss Remoting 3 использует (www.jboss.org/...remoting-3.html) JBoss Marshaling (www.jboss.org/...bossmarshalling ) - “... JBoss Marshalling is an alternative serialization API that fixes many of the problems found in the JDK serialization API ...”. Т.е. это формат/алгоритм сходный, но не идентичный. Они там решили ряд проблем Java Serialization.

А JBoss remoting 2 использует.
Все _они_ улучшают и устраняеют проблемы... и добавляют новые.

А вообще, я только против вашей оценки стандартной сериализации в джаве.

В целом, тяжело выпускать «универсального программиста», конечно, проще под конкретного заказчика. Я не пытался преуменьшать значение Serialization API, зачастую тяжело решить, ЧТО ИМЕННО пропустить в курсе.

На счет finalize — согласен, используется крайне редко, но любят задавать на собеседованиях под соусом
— либо, какие методы Object Вы знаете

— либо, «работа с памятью» — GC, System.gc(), finalize()

hashCode+equals — однозначно, да. В рамках Collection API — объяснить принципы и работы HashMap/HashSet иначе невозможно.

Иван, у меня подружка обучалась у вас на курсах в ЕПАМе и я был не просто удивлён, а шокирован какой огромный уровень знаний она получила. Отличная работа!
Мне вот интересно какой нибудь план обучения по которому вы обучаете людей, если такой вообще возможен.
Потому что как я понял одной из главных проблем ВУЗов является выработаной программы обучения.

Есть ли у вас информация по программам обучения?

Да, спасибо за комплимент.
План — только в голове. Вот попробую его обрисовать в данном топике.
В принципе, я преподаю в одной web-академии (вэбинары и лекции в реале в Харькове).
Дорого, но эффективно. Интенсивно готовлю Java Junior Developer.

Если кто-либо из знакомых заинтересован — пишите на почту [email protected].

Добрый день.
Поскольку несколько человек заинтересовалось — отвечаю.
Я подготовил за последний год около 40-ка человек на Java Junior Developer (30 устроились в ту компанию, куда проходили первое же собеседование, остальные во вторую-третью, работают все), прособеседовал около 120 кандидатов на Trainee/Junior. Сам год вел Java Trainee в харьковском EPAM.
На этом основании буду читать курсы по подготовке к Java Trainee.
Это будут курсы в реале для Харьковчан или вэбинары для слушателей из других городов. Занятия 2 раза в неделю по 2 часа с домашней работой. 3 месяца по 200$ за месяц. Это будут непосредственно «натаскивание» на собеседования, т.е. будут даваться именно те знания, которые необходимы для получения работы в украинских IT-компаниях. Оплата вначале каждого месяца. Первая лекция бесплатно. Я создаю skype-группу, в которой отвечаю на любые вопросы в течении всей недели. Занятия проходят в виде разбора характерных примеров кода (как здесь — http://dou.ua/forums/topic/6072/) и только потом теория. Одно занятие — это около 5-10 таких примеров кода. После этого даю на дом прочитать около 10-30 страниц объяснения материала до следующего занятия. Фактически работаю с каждым индивидуально.
Если вас соберется группа — возможны скидки.
Ближайшая группа стартует 11 сентября.

Читаться будет Java Core (расширенный вариант объявленного в этом топике) — этого достаточно, что бы получить позицию Java Trainee в Харькове (около 150$-300$ в EPAM, GlobalLogic, DataArt).

Так же параллельно будет читаться курс Java Junior Developer:
1) Design Patterns (на примерах из JDK)
2) Servlet API 3.0 + JSP + Tomcat
3) SQL + JDBC 4.0 + MySQL
4) Test Driven Development (JUnit, Mockito)
5) Log4j, SVN, Maven
Итогом курса является дипломный проект — небольшой интернет-магазин. Он пишется все время обучения и может быть показан вами на собеседовании как пример Вашего реального кода.
Ожидается, что его слушатели уже усвоили Java Core. Цены и длительность та же. Зарплата в Харькове после этого курса — 500$-800$. В Киеве выше — 600$-1000$.

Цены те же что и у ШАГа и Квантора, но эффективность значительно выше.

P.S. Ну скажем мы проходим те примеры, которые задают на собеседованиях в харьковские EPAM, GlobalLogic, DataArt, Mirantis, GridDynamics :)

P.P.S. Если Вас заинтересовали курсы — пишите [email protected].

3 месяца по 200$ за месяц.

Ну вот так бы и сразу :)

Так же параллельно будет читаться курс Java Junior Developer:
1) Design Patterns (на примерах из JDK)
2) Servlet API 3.0 + JSP + Tomcat
3) SQL + JDBC 4.0 + MySQL
4) Test Driven Development (JUnit, Mockito)

5) Log4j, SVN, Maven

Проект общий или индивидуальный?

Когда стартует первая, вторая, третья группа (даты)?

А как прошли ваши курсы в ЕПАМЕ ? Что вы там делали, то есть какие задания, что было на финал ? Чего научили ?

Финал ещё впереди... все остальное конфиденциально. :)

Я преподавал в харьковском EPAM в 2011 году. Сделал два выпуска, почти всех взяли на Java Junior Developer. Небольшой процент не прошел финальный отбор. Но они нашли работу в других компаниях за 2-4 недели. Нескольких по окончании переманили другие компании.
Научил:
1) Servlet API
2) JDBC
3) SVN, Maven, Log4j
4) TDD: JUnit, Mockito

пробовал основы Spring и Hibernate, но без твердого Servlet/JDBC это все же не то.

Проект — индивидуальный. Каждый пишет свой. У меня развернут SVN, все слушатели коммитят туда свои работы, я просматриваю и даю рекомендации (code review). Кто хочет — делает свой проект открытым на чтение другим слушателям. Практика показала, что все открывают. В принципе, так происходит очень интенсивный обмен знаниями внутри группы.

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

Интересует следующий набор, в декабре? И есть какой-то тестовый ролик, чтобы послушать, посмотреть?

Радуют отзывы Сергея Пономарёва.

p.s. В принципе, 200 USD за 16 часов в месяц небольшая сумма (12,5 USD per hour). Я так понимаю, что в эту цену заложено отдельное время для code review?

JavaSE меня не интересует

— я говорил про Java Core. Без него тяжело объяснять более сложные вещи, но возможно. Примеры:
1) слушатель не понимает генериков и не понимает что значит данная сигнатура
int binarySearch(List> list, T key)
2) слушатель валится на вопросе — чем отличается абстрактный класс от интерфейса
3) слушатель валится на вопросе — чем отличается ArrayList от LinkedList
4) слушатель валится на вопросе — что будет если в SortedSet добавить собственный
class Person {
private int age;
public void setAge(int age) {this.age = age;}
public int getAge() {return this.age;}
}
как же он будет «сортироваться»? По какому признаку? По age?

5) слушатель валится на вопросе — почему полиморфизм и наследование — это два разных принципа?

Я так понимаю, что в эту цену заложено отдельное время для code review?

Да, входит в эту сумму.

Проекты — индивидуальные, но по желанию слушатели могут писать общий.
Следующая группа на Java Core — 11 сентября. Потом с шагом 4 недели (9 октября, 6 ноября ...).
Следующая группа на Java Junior — 14 сентября. Потом с шагом 4 недели (12 октября, 9 ноября ...).

Но на октябрь почти все занято. Сентябрь свободен.

небольшой интернет-магазин

Джава и небольшой интернет-магазин как-то слабо ассоциируются

Было необходимо выбрать некоторое эталонное вэб-приложение (которое все представляют как должно работать и выглядеть).
1) 10-20 jsp страниц (login, logout, добавить товар, просмотр товаров, просмотр и редактирование отдельного товара, поиск по товарам, поставщики, адреса, категории товаров и прочее) которые предоставляют доступ (JDBC+SQL+MySQL) к реляционной базе как на чтение (SELECT — просмотр товаров, поставщиков, ...), так и на запись (редактирование, удаление, добавление). B cjgencnde. И сопутствующие проблемы — переключение языков (l10n/i18n), хранение состояния сеанса как на клиенте (cookies), так и на сервере (Session).
2) можно покрыть весь код юнит-тестами (JUnit + Mockito) (по желанию TestNG)
3) собирать проект Maven-ом, хранить в SVN

4) логирование при помощи Log4j (по желанию java.util.logging, Slf4j, Apacke Logging)

Только в Харькове или онлайн возможен?

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

Не смог декодировать:)

Спасибо, не пробовал.

Опыт есть? Годное решение?

с микого — нет, но join.me бесплатный — проверен. есть некоторые ограничения, но стол расшарить можно

Коментар порушує правила спільноти і видалений модераторами.

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

Ммм ... главная проблема ВУЗов в том, что люди, получающие за Java 400$ в месяц, должны научить других как получать 4000$.
Вторая проблема в том, что система высшего образования в нашей стране находится в немного странном состоянии... как и все остальное.
Система ВУЗов — это бесплатный канал вертикальной социальной мобильности. На него выделяют деньги. Но на сам канал — никто не налагает функцию качества. Я был как-то на заседании с ректором и зав-кафами Харьковского Политеха (80 кафедр) — там проректор отчитывал зав-кафа(или декана) за НИЗКУЮ СРЕДНЮЮ ОЦЕНКУ!
Т.е. система полностью отвязана от рыночной реальности. Все тянется оптимистами-преподавателями.
В Китае, например, есть две ветки власти — партия и губернаторы. Партия — выше, но губернаторы провинций делают конкретное дело. Так вот партия снимает губернатора, ЕСЛИ РОСТ ВВП провинции ниже определенного уровня. Представьте себе, что там говорит губернатор — ректору, а ректор — декану:)

«Какое к чертовой матери Delphi — Java давай, J2EE 6!».

Всё верно, только в дополнение как я понял проблема образование не только в Украине, а по всему миру. Вот есть отличный интересный ролик об этом www.youtube.com/...h?v=zDZFcDGpL4U

Хорошо бы было если бы продолжили пополнять тему такую ... Куда на ИТ форум не зайдешь везде спрашивают что учить, где взять, с чего начать ... а вот что бы увидеть топик где пишут сразу что изучать, за что браться, куда смотреть — наверно 1 к 1000 .

Добрый день.
Тут сложно. Мой метод обучения:
1. Даю разобрать характерные примеры.
2. Объясняю, что произошло и в каких терминах это описывается (double dispatching, double checked locking, lazy loading, memory leak, ...).
3. Даю ссылки на источники, где об этом можно прочитать.
Источники привожу по каждой теме, так как единого учебника/книги мной не обнаружено.
Для проверки усвоенного даю повторно в виде тестов модифицированные примеры.

P.S. Примеры я начал выбрасывать в топик — dou.ua/...ums/topic/6072. Попробуйте разобраться.

Примеры видел. В простых книгах например на рус. языку подобных задач мало да и не интересные вопше без подковырок, да и задач что бы самому чет написать практически нету. Постоянно надо обращаться к анг. книгам, там больше интересного чем в рус. книгах. А вопше видел очень много таких заданий в книгах по подготовке с сертификации 5 и 6. К 7 вер. книг не нашел вопше в инете, хотя хочется подучить и сдать экз. на сертификат, на стену можно повесить, дешевле чем Пикассо или Дали =).

ага. за примеры спасибо. полезно )

В принципе, я на kharkovitcourses.blogspot.com начал собирать примеры задачек.

А в чем философская суть топика?

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

обмен опытом
В топике оглавление любой книги по джаве? Нахнадо?

А в чем философская суть топика?

В том что не каждый топик должен иметь философскую суть.

Чуть-чуть бы посократил:

4. Память: стек, куча, PemGen, «уборка мусора», локальные переменные, «глобальные переменные» (статические поля), Object.finalize(), Object.clone().

Новичку не нужно. Потом разберется по ходу.

6. Collection API: архитектура пакета коллекций (Collection, List, Set, Map, SortedSet, SortedMap, Iterable, Iterator, Comparable, Comparator), основные реализации и их внутреннее устройство (ArrayList, LinkedList, HashMap, TreeMap, HashSet, TreeSet), «устаревшие коллекции» (Vector, Stack, Hashtable, Enumeration).

Устаревшие коллекции нужны только в Java ME.

7. Java I/O: byte-ориентированные (InputStream/OutputStream), char-ориентированные (Reader/Writer), java type-ориентированные (DataInput/DataOutput), классы-адаптеры, классы-декораторы, работа с файлами.

Тоже выкинуть — по ходу разберется человек. Если работать с EE, то львиная доля IO будет идти через базу, логгер или http.

8. Exceptions: базовая иерархия (Throwable, Error, Exception, RuntimeException), cheched/unchecked exceptions, stack trace, обработка исключений, методы работы с исключениями в коммерческих проектах.

+ когда какие использовать.

9. Threads: классы JDK — Thread, Runnable, Thread.State, ключевые слова — synchronized, volatile, методы общие для всех объектов (Object.wait(), Object.notify(), Object.notifyAll()), методы класса Thread (start, run, interrupt, join, getState), создание/прерывание/уничтожение потоков, работа с потоками, передача данных между потоками, потокозащищенные классы, взаимное исключение, условное ожидание.

Тоже не нужно. Если понадобится, то учить Fork/Join, Concurrent Collections, Atomic*, Futures, на уровень synchronized не опускаться вообще — со времен Java 5 оно не нужно.

10. Java Type System: OO, annotations, generics, AOP, lambda-формализм(Java 8).

Дженерики должны быть в первом пункте рядом с интерфейсами и полиморфизмом.

«устаревшие коллекции» (Vector, Stack, Hashtable, Enumeration).

Устаревшие коллекции нужны только в Java ME.

Не большой спец по МЕ. Зачем они там?

Зачем они там?

Там других нет о_О!

Полностью согласен и ещё дополню какие вещи ещё я объясняю по Collection API:

  • Ввожу понятие Θ-нотации
  • Объясную механизмы поиска: перебором и двоичным делением, и их Θ-нотации
  • Ввожу понятие equals и hashCode
  • TreeMap и TreeSet я не рассказываю потому что они путают новичков, хотя, как назло, всегда о них спрашивают на собеседованиях.
  • Объясняю что на самом деле эти структуры можно эфективно сочетать и привожу пример LinkedHashMap а также что могут быть различные вариации и рассказываю про DoubleLinkedList, Stack, Queue, Dequeue
  • устаревшие коллекции рассказываю вскольз зато делаю упор на их заменители — декораторы из Collections которые их заменют: unmodifiableList(), synchronizedCollection()
  • Рассказываю про преобразования между Array и Collection
TreeMap и TreeSet я не рассказываю потому что они путают новичков, хотя, как назло, всегда о них спрашивают на собеседованиях.
достаточно рассказать только TreeMap, и а потом одним предложением «выродить» его до TreeSet.

Обычно говорю, что это сбалансированное бинарное дерево (и магические слова — красно-черное дерево). Рисую пирамиду. Это позволяет легко запомнить, что среднее/наихудшее время поиска/вставки/удаления — логарифм от количества элементов.

Ну да, именно из-за типичных вопросов на собеседовании:
— ArrayList VS LinkedList
— HashMap VS TreeMap
— HashSet VS TreeSet

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

Устаревшие коллекции нужны только в Java ME.

... и встречаются в крупных enterprise-проектах, которым не 1 год, а также в эталонных реализациях, например, Servlet API.

Встречаются, но выпиливаются элементарно простым рефакторингом.

Так надо ли им обучать?

1) Устаревшие классы любят спрашивать на собеседованиях: сравнить Vector и ArrayList, сравнить StringBuffer и StringBuilder. Подводят к тому, что бы поговорить о реализации потокозащищенности через синхронизацию всех методов. От куда, скажем, следует — а как реализован ConcurrentHashMap и в чем его преимущество и недостатки перед Collections.synchronizedMap(new HashMap()).

2) Они присутствуют в старом Java API (Servlet API = docs.oracle.com/...etHeaderNames(, JDBC = docs.oracle.com/...ml#getDrivers( ) и их от туда рефакторингом не выпилишь.

В целом согласен, это знание не самое важное для жизни, но важно для собеседования. Есть еще пара «странных» вопросов такого рода:
— String.intern()
— Integer.valueOf(127) == Integer.valueOf(127), но Integer.valueOf(128) != Integer.valueOf(128)

не нужных в жизни, но популярных на собеседованиях.

Мне вот интересно, изучая книгу или просто перечитывая такие понятие как Applet и Swіng пропускать ? Просто я заметил, а точнее нигде не видел где сейчас используют Applet-ы и Swing для граф. интерфейса и еще какие то другие темы. Конечно читать все подряд хорошо, но время жалко ...

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

Так даже если времени совсем нет, просто хелоу ворд стоит попробовать.

Я бы не рекомендовал тратить время на Swing/Applet. Большинство проектов на Java — это web server side. В этом смысле в качестве front end стандартом является ServletAPI/JSP/HTML. Потом JSF/GWT.

Просто посмотрите требования в вакансиях на любом сайте работы.

раз уж упомянули HTML, то и Javascript надо, без AJAX уже никак.

AJAX — это все таки особенности дизайна интерфейса (смена контента без перезагрузки страницы, «подтягивание» информации в ответ на действия пользователя). В в минимальный набор бы его не добавлял.

JSP — только для legacy systems.
JSF — таки да. Но по-любому придётся ещё какую-то надстройку учить. IceFaces, MyFaces, PrimeFaces, например (даже не знаю, что именно посоветовать).
GWT — ересь.

Согласен, RichFaces — это наше все:). И на хлеб с маслом и на Турцию:)

Но не в 3х месячном курсе по Java Core:)

jsf — лайно, richfaces лайно з вершками

читати тут ihatejsf.com

Ну, в банковском ПО Swing встречается.

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

Полностью согласен. Есть ряд типов библиотек с которыми желательно поработать для обучения архитектуре, искусству проектирования, дизайну. Хорошая графическая библиотека — один из типов.
Да только прагматический подход требует давать наиболее часто встречающийся материал за минимум времени. Я исходил из того, что мы «натаскиваем» слушателя за 2-3 месяца. Конечно, при 2-3 х семестровом университетском курсе возможно стоит дать графические библиотеки.
Graphics g = ...
g.setColor(Color.RED);
g.drawLine(...);

В этом что-то есть:)

Да только прагматический подход требует давать наиболее часто встречающийся материал за минимум времени.

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

Graphics g = ...

Один раз только пользовался. И то. содрал код из интернета.

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

Ну и проблемы многопоточности как-то сразу становятся видны, когда приложение со Swing многопоточное. Очень быстро получаешь по рукам, и начинаешь глубже думать :)

Да и не только паттерны ООП оживают. Наследование, и то становится родным и близким, когда тебя библиотека вынуждает постоянно нечто от AbctractTableModel делать :) И становится понятно, почему полны форумы постами от начинающих — «а как мне в JTable отобразить ...». Наследование пока для них — неживое. Они ждут, ищут законченного, готового, а мышления — немножко вот тут расширь класс и будет тебе счастье — еще нет.

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