# Первое занятие ## [Демо разрабатываемого приложения](http://javaops-demo.ru/basejava/resume?theme=light) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) [Видеообзор курса Basejava](https://www.youtube.com/watch?v=0ydTRfKS9yY) ### Подготовка рабочего окружения - Установите последнюю версию [JDK](https://www.oracle.com/java/technologies/downloads/) - Установите систему управления версиями [Git](http://git-scm.com/downloads) - Создайте аккаунт на [GitHub](https://github.com/) - Установите [боковую панель](https://topjava.ru/blog/vvedeniye-v-git-github-ustanovka-i-nastroyka#8) для удобной навигации по файлам на GitHub - Установите [IntelliJ IDEA Community](https://www.jetbrains.com/idea/download/) (Ultimate-версия понадобится позже, при работе с базой данных и web) - Установите плагин для [Checkstyle](https://topjava.ru/blog/nastroyka-checkstyle-v-intellij-idea) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 1. [Разработка ПО](https://drive.google.com/file/d/0B_4NpoQW1xfpVjZUTEpvVUN1TTA/view?usp=sharing&resourcekey=0-hnn1HIBU3WIuDMVuQAxA8w) - [Мифический человеко-месяц](https://habr.com/ru/companies/raiffeisenbank/articles/533216/) - [Подборка книг для руководителей в сфере IT](https://habr.com/ru/companies/skyeng/articles/465215/) - [Размеры проектов в количестве строк кода](https://www.freecodecamp.org/news/the-biggest-codebases-in-history-a128bb3eea73) - [Соглашения по оформлению кода](https://topjava.ru/blog/google-java-style-guide) - Методологии разработки ПО: [Agile, Scrum](https://youtu.be/cDvZaXzQezs), [Kanban](https://youtu.be/1_Zti9v5ugA) - [Методологии разработки и их влияние на качество](https://youtu.be/y4B2Hv3HgpE) - [Ещё раз про семь основных методологий разработки](https://habr.com/ru/companies/edison/articles/269789/) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 2. [Обзор инструментов и технологий](https://drive.google.com/file/d/0B_4NpoQW1xfpTXJYU2xZbjN2d2M/view?usp=sharing&resourcekey=0-Uw_lRGW12YNjwY7phXzVdg) - [Java в 2025 году](https://habr.com/ru/companies/spring_aio/articles/933180/) - [State of Developer Ecosystem Report 2025](https://devecosystem-2025.jetbrains.com/ru) - [Java Trends Report 2025](https://www.infoq.com/articles/java-trends-report-2025/) - [The 2025 Developer Survey](https://survey.stackoverflow.co/2025) - Рейтинги языков программирования: [TIOBE](https://www.tiobe.com/tiobe-index/), [PYPL](https://pypl.github.io/PYPL.html), [IEEE](https://spectrum.ieee.org/tag/top-programming-languages) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 3. [Обзор языка Java](https://drive.google.com/file/d/0B_4NpoQW1xfpTU5SSElhUjlGNnc/view?usp=sharing&resourcekey=0-DOyRoGhREx2kvKwAKTOlYg) ![jvm](https://cloud.githubusercontent.com/assets/18701152/15219296/e6c67e86-186b-11e6-986f-651a87deec6c.png) - [Java](http://ru.wikipedia.org/wiki/Java), [JIT-компиляция](http://ru.wikipedia.org/wiki/JIT) - Java [ME](http://ru.wikipedia.org/wiki/Java_Platform,_Micro_Edition), [SE](https://ru.wikipedia.org/wiki/Java_Platform,_Standard_Edition), [EE](http://ru.wikipedia.org/wiki/Java_Platform,_Enterprise_Edition) - [Что такое JDK? Введение в средства разработки Java](https://topjava.ru/blog/what-is-the-jdk) - [Что такое JVM? Знакомство с виртуальной машиной Java](https://topjava.ru/blog/what-is-the-jvm) - [Что такое JRE? Введение в среду выполнения Java](https://topjava.ru/blog/what-is-the-jre) - [Что такое Java? История создания](http://www.intuit.ru/studies/courses/16/16/lecture/27105) - [Руководство по массивам в Java](https://topjava.ru/blog/rukovodstvo-po-massivam-v-java-ch1) ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 4. [Системы управления версиями. Git](https://drive.google.com/file/d/0B9Ye2auQ_NsFSUNrdVc0bDZuX2s/edit?resourcekey=0-6scb0PBj2A3Oqf6rsU2egQ) - [Введение в Git: установка и настройка](https://topjava.ru/blog/vvedeniye-v-git-github-ustanovka-i-nastroyka) - [Введение в Git: базовые команды](https://topjava.ru/blog/vvedeniye-v-git-github-bazovyye-komandy) - [Введение в Git: ошибки использования](https://topjava.ru/blog/vvedeniye-v-git-oshibki-ispolzovaniya-ch-9) - [Git: от установки до основных команд](https://tproger.ru/translations/beginner-git-cheatsheet/) - [Сравнение разных VCS](https://dzen.ru/a/Z0Z0Ry7VD0gfPV5X) - [Видео-уроки по Git](https://www.youtube.com/playlist?list=PLDyvV36pndZHkDRik6kKF6gSb0N0W995h) - Интерактивные Git-обучалки: [1](https://githowto.com/ru), [2](http://learngitbranching.js.org) - [Официальная книга по Git](https://git-scm.com/book/ru/v2) - [GitHub for beginners](https://github.blog/tag/github-for-beginners/) ### Настройка проекта - Создайте на GitHub репозиторий с названием `basejava` - Откройте консоль у себя на компьютере (в папке, где планируете разместить проект) и выполните следующее: - **Скачайте копию проекта с заранее заданными классами: `git clone https://github.com/JavaOps/basejava.git`. Реализацию дз выполняйте в рамках данной копии** - Перейдите в каталог проекта: `cd basejava` - Настройте git у себя на компьютере на свой репозиторий в GitHub: - `git remote set-url origin url_на_ваш_basejava-репозиторий.git` — настройка pull - `git remote set-url --push origin url_на_ваш_basejava-репозиторий.git` — настройка push - `git remote -v` — удостоверьтесь, что команда выводит ссылки на ваш удаленный репозиторий - `git push -u origin master` — [устанавливаем связь](https://qna.habr.com/q/118865) между локальной и удаленной веткой master ## Домашнее задание HW1 - Откройте в IntelliJ IDEA ваш проект, выбрав каталог `basejava`, который вы скачали ранее к себе на компьютер: ![Screenshot_5](https://github.com/user-attachments/assets/554c3119-85cc-41be-9ef0-087f360577f4) - Реализуйте методы `save, get, delete, clear, getAll, size` в классе `ArrayStorage`, организовав хранение резюме в массиве - Храните все резюме в начале `storage` (без пустот в виде null), чтобы не перебирать каждый раз 10_000 элементов - При реализации метода `delete` учитывайте: - после удаления резюме между оставшимися резюме не должно быть пустых (null) ячеек - резюме должны размещаться в ячейках под индексами `< size`. В противном случае обнуляйте их ``` Схема хранения резюме в массиве storage (в элементах от 0 до size - 1 отсутствуют null): r1, r2, r3,..., rn, null, null,..., null <----- size -----> <------- storage.length (10_000) ------> ``` - Проверьте вашу реализацию с помощью классов `MainArray.main()` и `MainTestArrayStorage.main()` - Изучите дополнительные материалы по IntelliJ IDEA: - [Idea Wiki](https://github.com/JavaOPs/topjava/wiki/IDEA) - Отладка Java кода в IDEA: [1](https://youtu.be/Z1BQsf0A4xY?si=E8RtUNE1Pm3xP_w9), [2](https://youtu.be/V5iQ1FyRtBo), [3](https://blog.jetbrains.com/idea/2025/04/debugging-java-code-in-intellij-idea/) - [Эффективная работа с кодом в IntelliJ IDEA](https://www.youtube.com/watch?v=tpv5n2jWHlw) - [Эффективная работа в IDEA](https://www.youtube.com/watch?v=_rj7dx6c5R8) ### Вопросы по HW1 > Не могу запустить программу, да и иконки рядом с классами изменились ![badsrc](https://github.com/user-attachments/assets/00db6e0a-59df-46d4-9ddd-abba0e52a7c9) - Проблема в том, что IDEA неправильно "воспринимает" папку `src`. Для ее решения необходимо нажать `ПКМ на папке src -> выбрать Mark Directory as -> Sources Root` ### Замечания по выполнению HW1 1. Все резюме в хранилище имеют уникальный `uuid`, что исключает повторы. Сортировка по `uuid` не требуется 1. Давайте осмысленные комментарии коммитам 1. Перед каждым коммитом не забывайте пользоваться сочетанием клавиш `Ctrl + Alt + L` (автоматическое форматирование кода) 1. Удаляйте в классах неиспользуемые импорты (`Ctrl + Alt + O`) 1. Не игнорируй подсказки IDEA (подсвечивает) 1. В методе `clear()` обнуление массива предполагает обнуление (null) ячеек, где хранятся Resume, а не создание нового или присваивание ему null 1. При реализации методов не используйте коллекции 1. Не меняйте сигнатуры методов в `ArrayStorage` 1. Не добавляйте в `Resume` новые поля 1. `Resume r` — давайте переменным осмысленные имена, например resume. r допустимо в коротких циклах и лямбда-выражениях ## ![video](https://cloud.githubusercontent.com/assets/13649199/13672715/06dbc6ce-e6e7-11e5-81a9-04fbddb9e488.png) 5. [Вебинар "Быть программистом: от детства к зрелости"](https://www.youtube.com/watch?v=D5Hej0TyLaU) - [Слайды вебинара](https://docs.google.com/presentation/d/1YwtCCZsaGMdl-V15kTDHiJxiS52IAl-qqheNPpiNr54/) ### Советы по обучению - Учитесь грамотно формулировать проблему: "у меня не работает" может иметь тысячи причин. В процессе формулирования часто приходит ее решение - Учитесь исследовать проблему. Внимательное чтение логов и умение дебажить — основные навыки разработчика. В логах необходимо читать верхнюю часть самого нижнего иксепшена. Именно там находится причина возникшей ошибки - Грамотно распределяйте время для каждой проблемы. Не впадайте в крайности: сразу бросаться за помощью или биться над ней часами. Подходите к ее решению разумно - Получайте в процессе решения обратную связь, что бы убедиться в правильности выбранного направления - [Советы новичкам](https://blog.csssr.com/ru/article/how-to-be-a-beginner-developer/)