среда, 1 августа 2012 г.

module: java-core-intro

    На данной странице собрана вводная информация курса Java Core.


Административная информация

ОБЩЕНИЕ / ПЕРСОНАЛИИ    

    1. Вас добавят в "публичную" skype-группу со всеми слушателями курсов. Ее цель - распространение административной информации, литературы и ответы на вопросы интересующие всех.
    2. В "публичной" skype-группе я и другие представители компании могут ПИСАТЬ В ВЕРХНЕМ РЕГИСТРЕ, остальным не рекомендуется. Это делается для быстрого поиска сообщений администраторов. В "публичной" skype-группе не рекомендуется "флеймить".
    3. Вас добавят в "теневую" skype-группу со всеми слушателями курсов. Ее цель - личное общения слушателей (обсуждение лабораторных, найденных ссылок, обсуждение мнений, ...).
    4. Технические вопросы, интересующий Вас лично (каков размер ссылки в стеке, что значит NaN, что происходит при переполнении стека, ...) - задавайте по skype мне лично. Не "засоряйте" "публичную" skype-группу сообщениями.
    5. Если в ходе обсуждения в "теневой" skype-группе обнаружился вопрос или неоднозначность интересующая многих - задавайте в "публичной" skype-группе.
    6. IvanGolovach - это мой личный skype name. Отвечаю на технические вопросы.
    7. KharkovITCourses - это skype name Администратора курсов. Отвечает за оплату курсов, переносы/отмены лекций. В данный момент Администратор - Маргарита. Но это может измениться: может быть другой человек или группа людей.
    8. KharkovITCourses.Client - это skype name Куратора курсов. Отвечает за трудоустройство, съемку и выкладку лекций на видео, работу с тестами. В данный момент Куратор - Анна. Но это может измениться: может быть другой человек или группа людей.
    9. Телефон Администратора - 063-048-7663 (Маргарита). Рекомендуется звонить в рабочее время (Пн-Сб 10.00-19.00).
    10. Телефон Куратора - ??? (Анна). Рекомендуется звонить в рабочее время (Пн-Сб 10.00-19.00).
    11. e-mail Администратора - KharkovITCourses@gmail.com (Маргарита).
    12. e-mail Куратора - KharkovITCourses.Client@gmail.com (Анна).
    13. Проверяющий лабораторные - ???



ИСТОЧНИКА ИНФОРМАЦИИ ДЛЯ ОБУЧЕНИЯ
    Основные источники информации - это
    1. Посещение лекций и/или просмотр их в записи на нашем канале.
    2. Выполнение лабораторных.
    3. Прохождение тестов.
    4. Чтение литературы. Основная литература должна быть выдана в электронном виде.
    5. Общение с другими слушателями. 
    6. Общение по skype с техническими специалистами курсов (контакты можно увидеть выше).


СТРУКТУРА КУРСА
    1. Курс состоит из 24 лекций.
    2. Лекции курса разбиты на 6 модулей (Процедурная Java, Исключения, Java I/O, Многопоточность, Collection API, Object-Oriented Programming).
    3. Каждый модуль имеет сокращенное название (proc, exceptions, thread, collections, oop).
    4. У каждой темы внутри модуля есть свое название (темы не всегда однозначно ассоциированы с лекциями). В данный момент названия тем "нестабильно". Может оказаться, что 3 темы были рассказаны за 4 лекции или 10 тем за 4 лекции (зависит от объема материала по теме).


ЛЕКЦИИ "В РЕАЛЕ" И В ЗАПИСИ    
    1. Обучение состоит в присутствии на 24 лекциях по адресу г.Харьков, пер. Театральный 11/13, аудитория 301 (третий этаж) (ссылка, ссылка, ссылка). 
    2. Для удаленных слушателей - в просмотре лекций на нашем видео-канале. В данный момент мы стараемся обеспечить выкладку видео с задержкой не более 24 часов с момента съемки. Обратите внимание! В данный момент каждая лекция (2-3 часа) разбивается на несколько частей (3-4) по 20-45 минут. При просмотре по ссылке http://www.youtube.com/user/KharkovITCourses/videos?view=1&flow=grid Вы видите "куски собранными в лекции", но при просмотре по более простой ссылке http://www.youtube.com/user/KharkovITCourses/ Вы видите лекцию "разобранную на куски". Ссылка "с собранными лекциями" получена при нажатии на канале на пункт меню playlist.
    3. Обратите внимание! В данный момент на канале публикуется не только Ваше видео, но и видео параллельных групп (другие группы Java Core и Enterprise Java Junior Developer). Мы стараемся разработать схему наименования лекций для простоты "отсева" ваших лекций. Может быть полезным поиск лекций со страницы сайта "Весь курс компактно".
    4. Ожидается, что Вам не нужен ноутбук для работы на лекции. На занятии важно понять основные принципы и задавать интересующие Вас вопросы. Детали Вы сможете проверить при просмотре видео-записи. Тем не менее в офисе есть Wi-Fi. Login/passwor Вы сможете узнать в офисе.



ЛАБОРАТОРНЫЕ
    1. Список всех лабораторных, разбитых по модулям, можно посмотреть на сайте.
    2. Цель лабораторных - приобретение навыков программирования и закрепление материала лекции.
    3. Лабораторные делятся на обязательные и необязательные. Обязательные лабораторные - это те лабораторные, выполнение которых дает минимальный уровень навыков по данной теме. 
    4. Задание к каждой лабораторной кратко написано на сайте.
    5. Задание к обязательным лабораторным детально объясняется на лекции. Задание к необязательным лабораторным по возможности объясняется на лекции. 
    6. Лабораторные могут быть сданы в любом порядке. 
    7. Ваши лабораторные перестают проверять спустя 4 недели после окончания курсов.
    8. Все лабораторные проверяются профессиональными программистами. Обращается внимание как на корректность программы так и на стиль кодирования.
    9. В данный момент время между отсылкой лабораторной проверяющему и возвратом вам не должно превышать 7 дней. Если это нарушено, просим сообщить администраторам.
    10. В данный момент проверка лабораторных происходит следующим образом: вы отсылаете текст лабораторной в письме (не прикрепляйте файл - копируйте текст класса-ответа прямо в письмо), темой письма должно быть название лабораторной. В течении не более чем 7 дней вам придет проверенная лабораторная. В случае если вам рекомендовали исправление - вы можете повторно выслать лабораторную (и так несколько раз). Каждая лабораторная должна идти отдельным письмом. E-mail, на который надо отсылать письма с лабораторными, Вам сообщат.
    11. Название лабораторной образуется как имя_модуля.имя_темы.имя_лабораторной. Пример: proc.loop.array_merger_fixed.
    12. Вам будут выданы "проверяющие классы" для лабораторных работ. Это классы с методом main(...), при запуске которого можно проверить корректна ли ваша лабораторная реализована. В данный момент проверочные классы существуют не для всех лабораторных и расположены в свободном доступе на сайте.


ТЕСТЫ
    1. Для закрепления формальных знаний и подготовки к собеседованию нами разработаны тесты по всему материалу лекций. В данный момент количество вопросов порядка 600-800. 
    2. В данный момент тесты расположены на платформе http://quizstar.4teachers.org.
    3. Куратор курсов выдаст Вам login/password к тестам и детально объяснит как их проходить.




ЛИТЕРАТУРА
    1. Вам будет предоставлен доступ к системе хранения документов (docs.google.com/dropbox/...) с электронной литературой по курсу.
    2. Необходимо понимать, что крайне желательно прочитать максимальное количество материала. Ожидается, что за время обучения (3 месяца), слушатель самостоятельно прочитает около 1000 страниц.
    3. Мы не указываем ЧТО и ОТКУДА читать. Вам выдаются наиболее признанные учебники по Java Core. Суммарный объем выданного материала превышает 5.000 страниц. Ваша задача выбрать авторов, стиль которых наиболее Вам подходит или темы, которые наиболее интересны или непонятны и читать. Как можно больше.
    4. На лекции мы рассказываем все, что необходимо для прохождения лабораторных и тестов, но на собеседовании и при работе в компании вам может потребоваться больше.



ДОПОЛНИТЕЛЬНЫЕ ИНСТРУМЕНТЫ
    1. Вам потребуется установить JDK. Рекомендуется Sun/Oracle JDK. Все примеры проверены на Sun/Oracle JDK 7u15.
    2. Вам потребуется установить IDE. Наиболее популярны на сегодня JetBrains IDEA, Eclipse, NetBeans. Я работаю на IDEA.


ТРУДОУСТРОЙСТВО
    1. В конце обучения мы приглашаем к нам в офис компании (в данный момент 3-4), которые проводят тестирование всех слушателей. Тесты представляют собой 6-12 вопросов на бумаге. Тесты составлены компаниями. По результатам тестирования компании приглашают на собеседование. По результатам собеседования - приглашают на работу.
    2. Также в конце обучения мы сами проводим тестирование на 50 вопросах отобранных из нашей тестовой системы (600-800 вопросов). Те, кто ответил на 47 и более вопросов из 50 будут персонально направляться на собеседования в компании с нашими рекомендациями.



ДОПОЛНИТЕЛЬНЫЕ ИСТОЧНИКИ ИНФОРМАЦИИ ДЛЯ ОБУЧЕНИЯ

    1. Видео-лекции других авторов:
    - Юрий Ткач, "Java для тестировщиков" (#1, #2, #3, #4, ...)
    - Георгий Корнеев, "Основы Java"
    - Алексей Владыкин, Java
    - ???

    2. Тесты других авторов:
    - quizful.net
    - ???

    3. Углубленная литература:
    - ???

    4. Наши дополнительные лекции. Иногда мы проводим лекции вводного уровня по дополнительным темам, которые не входят в Java Core. На сегодня есть следующие лекции:
    - Реляционная алгебра
    - стандарты кодирования и форматирования программ
    - основы JDBC
    - Java Generics 
    - XML, SAX, DOM, StAX, XML Schema, XPath, XQuery, XSLT

    5. Дополнительные темы для изучения:
    - SQL
    - сети и протоколы (TCP, UDP, HTTP)
    - HTML, CSS, JavaScript
    - XML






----------------------------------
----------------------------------
----------------------------------

    Можно сказать, что классы делятся на несколько групп по "тесноте интеграции" в Java и JDK:
    -?: Object, Class, ClassLoader, String, Thread
    -?: InterruptedException
    -?: Throwable, Exception, Error, RuntimeException
    - Java: String literals, foreach, vararg

    Необходимо понимать несколько моментов:
    - деление "экосистемы Java" на язык Java, стандартную библиотеку времени исполнения Java (JDK), JRE, инструменты (javac, ?) и виртуальную машину Java (JVM).
    - язык имеет версии в длину (1.5, 1.6, ...) и в ширину (j2me, j2se, j2ee)
    - JDK имеет версии в длину (1.5, 1.6, ...) и в ширину (j2me, j2se, j2ee)
    - ??? охарактеризуй Андроид
    - с точки зрения JVM: деление на требования спецификации (jvmspec) и особенности конкретной реализации (HotSpot, ? HotSpot TLAB, G1, CMS, ...)
    - с точки зрения JVM: деление на формулировки спецификации (jvmspec) и особенности конкретного поведения в конкретной реализации (object allocation in stack, lock coarcesing, ...)

    Важнейшие сервисы JVM:
    - Storage Management: new, gc
    - Security, sandbox, verification: new, gc
    - Class loading
    - threading: create thread, communication, sinchronize, every object has monitor


Мои принципы
1. Знание нескольких принципов избавляет от запоминания множества фактов. Клод Гельвеций.
2. Внутреннее совершенство и внешнее оправдание. Энштейн.
3. Повышение уровня абстракции и переход к новым категориям мышления.
4. Создание целостной картины мира.
5. Практика - лучший критерий истинности, МФТИ-стиль образования.    

Как мы обучаемся

Базовые вопросы
    - чем виртуальная машина (VM) отличается от библиотеки времени выполнения (runtime library)?
    - что значит "write once run anywhere"?
    - что такое идентификатор?  Ш68
    - что такое тип данных?  Ш71
    ? каждая переменная обладает типом  Ш71
    ? каждое выражение имеет тип  Ш71
? неявное преобразование типов
элементарные.примитивные типы данных Ш71
область видимости Ш
    - что такое комментарий?  Ш68
    - что такое разделитель?  Ш68
    - что такое ключевое слово?  Ш69
    - что такое литерал? Какие в Java есть типы литералов?
    - что такое лексема? Какие в Java есть типы лексем?
    - что такое выражение (expression)
    - что такое оператор? Что такое приоритет и ассоциативность операторов? Что такое унарный оператор? Бинарный? Тернарный?
    - что такое операнд оператора
    - что такое оператор-инструкция (statement)
    - операторы-выражения
    - составные операторы (compound statement)
    - пустой оператор (empty statement)
    - локальная переменная (local variable)
    - объекты-литералы. Ф85: "a" + int.class/Point.class/byte[].class
    - многомерные-массивы Ф90-91
- примитивные типы
- ссылочные типы Ф91-94
- сравнение ссылочных типов Ф94-95
- передача по значению Ф95

Плакаты
1) хорошо документированный класс: javadoc(с тэгами) + каммент//
2) пример кода с обозначениями типов лексем: литерал, ключ слово, имя класса, ...
3) таблица ключевых слов (50 + 2 + true/false/null) Ш69

Базовые знания
История, развитие, особенности Java, JVM, Java как платформа
    [Флэнаган. Справочник] - стр 23-28
    [Шилдт. Руководство] - Глава 1. стр 35-50


верификация файлов классов
"песочница" Java - Ф глава 5 "Безопасность Java"

Соглашения по программированию (code convention) - ?Ф Глава 7 + codeconv.pdf


Строки, символы - Ф.

Примитивные типы

Массивы

Литература
    [Флэнаган. Справочник] "Java. Справочник" 4-е изд. Дэвид Флэнаган. 2004. 
    [Шилдт. Руководство] "Java. Полное руководство" 8-е изд. Герберт Шилдт. 2012. 
    [Java Puzzlers] "Java Puzzlers Traps, Pitfalls, and Corner Cases". Bloch, Gafter. 2005
    [Effective Java] "Java. Эффективное программирование". Джошуа Блох, Gafter.