Как войти в Java в 2021 году

Советы преподавателя, как войти в Java в 2021 году

Этот пост для тебя, если на следующие вопросы ты отвечаешь “Да”, или “Ну да!”:

  • Ты студент.
  • Основная специальность в вузе = ИТ, “программная инженерия”, “компьютерная инженерия” или подобное.
  • Вообще нравится программирование.
  • Раздумываешь, а может войти-в-айти?.
  • Что-то слышал о программировании от знакомого/соседа/сотрудника, не против ознакомиться.
  • Уже ознакомился, но хочешь более плотно.

“Иногда утомляет, как в наше время люди ведут себя. Иные рассказывают, что можно “писать код, не зная языки программирования”, ну или почти не зная, в конструкторе. Мы, преподававшие языки программирования 5-6-7 лет, смотрим известно как на людей, приходящих к нам на лекции и спрашивающих “А что мне учить?”, а ведь таких много.

Им я обычно отвечаю, “Начните с какого-то языка программирования, и выучите его до состояния ХОРОШО”.

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

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

  • Какой язык программирования лучше всех?
  • Слышал, что язык Х лучше, чем язык Y, а вот почему?
  • С чего начать?
  • Что нужно, чтобы приняли на первую работу?
  • Посмотрел на Ютубе ролики вот этого Java-инфлюэнсера, достаточно?
  • Видел хороший платный курс Java, подаваться?

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

По моему опыту, если надо учить Java в 2021 году, то этот процесс – от “начинающего” до “ого, я опытный разработчик” будет состоять из 4 этапов “постижения Java”.

Перед тем как описать их, хочу отметить, что найдутся люди, которые придут в коменты и начнут писать, “Ой, зачем усложняешь дорогой, делай то, делай это, посмотри этот ютуб, запишись вот на тот курс”, но не обращайте внимания. Освоение языка программирования – больше всего похоже на изучение человеческого языка. Твой мозг должен забыть часть прошлого опыта (или по крайней мере временно игнорировать), чтобы избавиться от “когнитивных помех”. Надо научиться мыслить в понятиях “чужого языка”. Для этого тебе понадобятся систематические усилия: твое оружие – усидчивость и трудолюбие. Если бы все было так просто, как некоторые говорят, то все люди вокруг давно бы стали программистами в Google, и весь мир превратился бы в некую Утопию Программистов, свободную от проблем, багов и прочего плохого.

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

Для начала, советую штудировать вот эту книгу:
Java: A Beginner’s Guide by Herbert Schildt. Это как бы база.

Синтаксис и семантика Java

  • Типы данных (8 примитивных типов Java)
  • Переменные (ключевое слово var)
  • Преобразование и приведение типов в Java
  • Автоматическое распространение типа (Automatic Type Promotion)
  • Массивы
  • Операторы: арифметические, побитовые, реляционные (условные), булевы, оператор присвоения, оператор ?, таблица приоритета операторов
  • Управляющие конструкции, управление ходом исполнения (операторы If, If-Else, If-Else-if, For-Each, Switch; в том числе в новых версиях Java)
  • Итерация, операторы итерации (While, Do-While, For, For-Each, вложенные циклы), операторы continue/break, метки (этикетки, закладки в коде, labels)
  • Аргументы командной строки в Java-программе
  • Класс String
  • Vararg (аргументы неизвестной длины и неизвестного количества)
  • Классы Scanner и BufferedReader

Объектно-ориентированное программирование

  • Программные “элементы” Java, их пять типов: Класс, Абстрактный Класс, Интерфейс, Перечисление (Enum), и начиная с прошлого года – Запись(Record)
  • Объявление объектов в методах и работа с ними
  • Ссылочные типы (референсные, reference) и их значения
  • Методы (сигнатура метода, типы методов)
  • Конструкторы
  • Ключевое слово this
  • Перегрузка методов
  • Перегрузка конструкторов
  • Объекты (ссылочных типов) как параметры методов и аргументов
  • Объекты (ссылочных типов), возвращаемые из метода
  • Рекурсия; стек вызовов (Call Stack), рекурсия головы и хвоста (Tail-Recursion, Head-Recursion)
  • Ключевое слово static (создание static-членов класса)
  • Ключевое слово final (применительно к классу, к методу, к члену класса)
  • Вложенные классы и внутренние классы
  • Наследование (Super и подклассы), Иерархия в Java
  • Ключевое слово super (вызов членов Super-класса из подкласса)
  • Типы Иерархий в Java (Простая, Многоуровневая, Множественная, Гибридная)
  • Переопределение методов
  • Абстрактные классы и методы
  • Интерфейсы; создание интерфейса, его имплементация, вложенные интерфейсы, члены интерфейса, методы: private/static/default
  • Пакеты Java (переменная CLASSPATH, импорт пакетов)
  • Обработка исключений (типы исключений, перехваченные и пропущенные исключения, блоки try-catch, try-finally, try-catch-finally, multiple catch, вложенные try, ключевые слова throw и throws, пользовательские исключения)
  • Многопоточность (Java Thread Model, главный поток, создание потока, класс Thread, интерфейс Runnable, параллельное выполнение, метод sleep(), приоритеты потоков, лямбда для создания потока, как анонимный класс создает поток)
  • Классы-перечисления Java
  • Wrappers-классы, обертки/оболочки в Java
  • Упаковка и распаковка (boxing/unboxing)
  • Аннотации в Java
  • Дженерики в Java (или иначе – обобщения, generics, универсальные): ограниченные типы (Bounded Type), маски (метасимволы, Wildcard-типы), ограниченные маски (Bounded Wildcards), универсальные методы (generic methods) и конструкторы, дженерики со статическими методами, обобщенные классы (generic classes) и интерфейсы, перегрузка и переопределение таких универсальных методов, стирание типов (Type Erasure), универсальные массивы
  • Лямбда-выражения (функциональные интерфейсы, лямбда как аргумент, ссылки на методы)
  • Stream API (типы методов, часто используемые методы в этом API)
  • Работа со строками (конструкторы класса String, длина строки, операции со строками, извлечение символов из строки, сравнение строк, поиск символов, модификация строки, StringBuilder, StringBuffer)
  • Классы в пакете java.lang

Структуры данных и алгоритмы:

  • Java Collection Framework в Java; интерфейсы и реализация; List, Set, Deque, классы ArrayList, LinkedList, HashSet, TreeSet, PriorityQueue, ArrayDeque, итераторы в коллекциях, класс Iterator, цикл for-each, потоки (stream), Custom Collections Classes, карты (Maps) – интерфейсы и классы, Vector, Stack, Dictionary, Hashtable, Properties
  • Остальное по желанию, но желательно знать такие классы: StringTokenizer, BitSet, Optional, LocalDate, LocalTime, LocalDateTime, GregorianCalendar, TimeZone, Locale, Random, Timer, Currency, NumberFormat, StringFormat.

Если возникают проблемы

Когда получите достаточный уровень в том, что перечислено выше, можете углубиться в язык, практикуя свои навыки на сайтах, приведенных далее. Это сайты для так называемого “Competetive Programming” – решая задачи и проблемы, постигаете Java-дзен.

В принципе, будет полезно “зависать” на любом из них, они более-менее сравнимы по уровню.

Также можем посоветовать пару толковых книжек, конкретно по “соревновательному программированию”:

Необязательно точно соблюдать порядок пунктов (от азов к высотам), и если достигнут хотя бы минимальный уровень, уже можно пробовать заниматься на указанных “олимпиадных” сайтах, типа CodeWars.”

dbc2201

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Scroll to Top