Java: краткое руководство для начинающих. Пишем простое приложение без опыта программирования
Java – один из самых востребованных языков программирования в мире и один из двух официальных языков программирования, используемых в разработке Android (другой – Kotlin). Разработчики, знакомые с Java, весьма востребованы и способны создавать широкий спектр различных приложений, игр и инструментов. С помощью этой краткой статьи по Java для начинающих вы сможете сделать свои первые шаги к тому, чтобы стать одним из таких разработчиков. Мы рассмотрим все, что вам нужно знать, чтобы начать работу, и поможем вам создать свое первое простое приложение.
Что такое Java?
Java-это объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems в 1990-х годах (позже купленной Oracle).
Понятие «объектно-ориентированный» относится к способу написания структурного кода Java, а именно: разделение кода на так называемые «классы», которые запускаются вместе, чтобы обеспечить согласованное порождение объектов. Мы обсудим это позже, но достаточно сказать, что это приводит к универсальному и организованному коду, который легко редактировать и перепрофилировать.
Java находится под влиянием C и C++, поэтому она имеет много общего с этими языками (и C#). Одним из больших преимуществ Java является то, что он «платформенно-независимый». Это означает, что код, который вы пишете на одной платформе, можно легко запустить на другой. Это называется принципом «пишем один раз, запускаем где угодно» (хотя на практике это не всегда так просто, как кажется).
Чтобы запустить и использовать Java, вам нужно три вещи:
- JDK – Java Development Kit
- JRE – Java Runtime Environment
- JVM – Java Virtual Machine
Виртуальная машина Java (JVM) гарантирует, что у ваших приложений Java есть доступ к минимальным ресурсам, необходимым для их запуска. Именно благодаря JVM программы Java так легко запускаются на разных платформах.
Среда исполнения Java (JRE) предоставляет собой «контейнер» для всех этих элементов и кода для запуска приложения. JDK – это «компилятор», который интерпретирует сам код и выполняет его. В JDK также есть инструменты разработчика, необходимые для написания кода Java (как и следует из названия).
Хорошая новость заключается в том, что разработчикам нужно только позаботиться о загрузке JDK, поскольку он поставляется вместе с двумя другими компонентами.
Как начать писать на Java
Если вы планируете разрабатывать приложения на Java на своем настольном компьютере, то вам нужно будет загрузить и установить JDK.

Вы можете получить последнюю версию JDK непосредственно с сайта Oracle. Как только вы установите его, ваш компьютер будет иметь возможность понимать и запускать код на Java. Тем не менее, вам все равно понадобится некоторое вспомогательное ПО, чтобы было действительно удобно писать код. Это так называемая «интегрированная среда разработки» или IDE: интерфейс, используемый разработчиками для ввода текста кода и вызова JDK.
При разработке для Android вы будете использовать IDE Android Studio. Она не только послужит интерфейсом для кода на Java (или Kotlin), но и станет мостом для доступа к специфичным для Android вызовам из SDK.
Для целей нашего краткого руководства по Java может быть и проще написать свой код непосредственно в приложении-компиляторе Java. Они могут быть скачаны для Android и iOS, можно даже найти веб-приложения, которые работают в вашем браузере. Эти инструменты предоставляют все необходимое в одном месте и позволяют сразу начать тестирование кода. Например, compilejava.net.
Насколько легко научиться программированию на Java?
Если вы новичок в разработке на Java, то ваши опасения вполне понятны. Так насколько же легко изучить Java?
Этот вопрос имеет несколько субъективную природу, но лично я бы отнес Java к языкам, не самым простым для изучения. Хотя он проще, чем C++, и часто описывается как более удобный для пользователя, но он, безусловно, не столь прост, как такие его конкуренты, как Python или BASIC, которые больше подходят для изучения начинающим программистам.
C# также немного проще по сравнению с Java, хотя они очень похожи.
Конечно, задавшись конкретной целью – стать разработчиком приложений для Android, – проще всего сразу начать с языка, который уже поддерживается этой платформой.
У языка Java есть свои особенности, но его, безусловно, можно изучить, и как только вы его освоите, вам откроется множество возможностей. А поскольку Java имеет много общего с C и C#, вы сможете перейти на эти языки без особых усилий.
Каков синтаксис Java?
Прежде чем мы погрузимся в самую суть этого руководства по Java для начинающих, стоит уделить некоторое время изучению синтаксиса Java.
Синтаксис Java относится к способу написания конкретных алгоритмов. Java очень принципиален в этом вопросе, и, если вы не пишете код определенным образом, то ваша программа не будет работать!
На самом деле я написал целую статью о синтаксисе Java для разработки Android, кратко перечислю особенности синтаксиса:
- Большинство строк должно заканчиваться точкой с запятой «;».
- Исключение составляет строка, открывающая новый блок кода. Она должна начинаться открытой фигурной скобкой « <». В качестве альтернативы эту открытую скобку можно поместить на новую строку под оператором. Блоки кода – это фрагменты кода, которые выполняют определенные, отдельные задачи.
- Код внутри блока кода должен иметь отступ, чтобы отделить его от остальных.
- Открытые блоки кода должны быть закрыты закрывающей фигурной скобкой «>».
- Комментарии – это строки, которым предшествуют символы «//».
Если вы нажимаете кнопку «запустить» или «скомпилировать» и получаете ошибку, то есть большая вероятность, что вы где-то пропустили точку с запятой!
Вы никогда не перестанете делать это, и это никогда не перестанет вас раздражать. Расслабьтесь!
С этими знаниями мы сможем глубже погрузиться в руководство по Java!
Основы Java: ваша первая программа
Зайдите на compilejava.net, и вас встретит редактор с кучей готовых примеров.
(Если же вы предпочитаете использовать другую IDE или стороннее приложение, это тоже прекрасно! Скорее всего, ваш новый проект будет состоять из аналогичного кода).
Удалите все, кроме следующего:
Это то, что мы, программисты, мы называем «шаблоном» (этот код скопирован из учебника Java от Фила Данфи). Шаблонный код – так можно назвать любой код, который встречается внутри практически любой программы.
Первая строка здесь определяет «класс», который по сути является модулем кода. Затем нам нужен метод внутри этого класса, который представляет собой небольшой блок кода, выполняющий задачу. В каждой программе Java должен быть метод main, так как он сообщает Java, где начинается программа.
Об остальном поговорим чуть ниже, не беспокойтесь. Все, что нам нужно знать для этого урока Java прямо сейчас, – это то, что код, который мы действительно хотим запустить, должен быть помещен в фигурные скобки под словом «main».
Поместите сюда следующий оператор:
Этот оператор напишет слова: «Hello world!» на вашем экране. Нажмите «Compile & Execute» и вы увидите его в действии.
Поздравляю! Вы только что написали свое первое Java-приложение!
Переменные в Java
Теперь пришло время рассказать о некоторых более важных вещах, лежащих в основе Java. Мало что может быть более фундаментальным в программировании, чем обучение использованию переменных!
Переменная по сути является «контейнером» для некоторых данных. Это означает, что вы выберете слово, которое будет представлять какое-то значение. Нам также необходимо определить переменные, основанные на типе данных, на которые они будут ссылаться.
Вот три основных типа переменных, которые мы собираемся ввести в этом руководстве по Java:
- Целые числа (integers) – как целые числа.
- Плавающие точки (floats) – или «переменные с плавающей точкой». Они содержат все числа, в том числе те, которые представляют десятичные дроби. «Плавающая точка» относится к десятичному разряду.
- Строки (strings)– строки содержат буквенно-цифровые символы и символы. Обычно строка используется для хранения чьего-то имени или, возможно, предложения.
Как только мы определяем переменную, мы можем вставить ее в наш код, чтобы изменить выходные данные. Например:
В этом примере кода мы определили строковую переменную с именем name . Мы сделали это, используя тип данных String , за которым следует имя нашей переменной, а затем данные. Когда вы помещаете что-то в двойные кавычки, то Java интерпретирует это дословно как строку.
Теперь мы печатаем на экране, как и раньше, но на этот раз заменяем «Hello world!» на «Hello + имя». Этот код показывает строку «Hello», за которой следует любое значение, содержащееся в следующей строковой переменной!
Самое замечательное в использовании переменных заключается в том, что они позволяют нам манипулировать данными, чтобы наш код мог вести себя динамически. Изменяя значение name , вы можете изменить поведение программы, не изменяя никакого фактического кода!
Условные операторы в Java
Еще одна из самых важных основ Java – это работа с условными операторами.
Условные операторы используют блоки кода, которые выполняются только при определенных условиях. Например, мы можем захотеть предоставить специальные пользовательские права основному пользователю нашего приложения.
Посмотрите на следующий код:
Запустите этот код, и вы увидите, что специальные разрешения предоставлены. Но, если вы измените значение name на что-то другое, то код не будет работать.
В этом коде используется оператор if . Он проверяет, является ли утверждение, содержащееся в скобках, истинным. Если это так, то будет запущен следующий блок кода. Не забудьте сделать отступ в коде, а затем закрыть блок в конце! Если оператор в скобках имеет значение false, то код просто пропустит этот раздел и продолжит работу с закрытых скобок.
Обратите внимание, что при наложении условия на данные мы используем два знака «=». Вы же используете только один, когда присваиваете какие-то данные переменным.
Методы на Java
Еще одна простая концепция, которую мы можем ввести в этом руководстве Java – это использование методов. Это даст вам немного больше понимания того, как структурирован Java-код и что с ним можно сделать.
Все, что мы собираемся сделать, – это взять часть кода, который мы уже написали, а затем поместить его в другой метод вне метода main :
Мы создали новый метод в строке, которая начинается со static void . Это означает, что метод определяет функцию, а не свойство объекта, и что он не возвращает никаких данных.
Но все, что мы вставляем в следующий блок кода, теперь будет выполняться каждый раз, когда мы «вызываем» метод, записывая его имя в нашем коде: grantPermission() . Затем программа выполнит этот блок кода и вернется к точке, из которой она вышла.
Если бы мы написали вызов grantPermission() несколько раз, то сообщение «Special user priveleges granted» также отобразилось бы несколько раз. Именно это делает методы такими фундаментальными основами Java: они позволяют выполнять повторяющиеся задачи, не записывая код снова и снова.
Передача аргументов в Java
Но самое замечательное в методах то, что они могут принимать переменные и манипулировать ими. Мы сделаем это, передав переменные в наши методы как «строки». Вот для чего и нужны скобки, следующие за названием метода.
В следующем примере я создал метод, который получает строковую переменную, названную nameCheck . Затем я могу обратиться к nameCheck из этого блока кода, и ее значение будет равно тому, что я поместил в фигурные скобки, когда вызвал метод.
Для этого руководства по Java я передал значение name методу и поместил туда оператор if . Таким образом, мы можем проверять несколько имен подряд, не набирая один и тот же код снова и снова.
Надеюсь, это даст вам представление о том, насколько мощными могут быть методы!
В завершение
Надеюсь, теперь у вас есть хорошее представление о том, как изучать Java. Вы даже можете сами написать какой-нибудь простой код: используя переменные и условные операторы, вы действительно можете заставить Java делать некоторые интересные вещи уже сейчас.
Следующий этап состоит в понимании объектно-ориентированного программирования и классов. Это понимание есть то, что действительно дает Java и подобным языкам их силу, но поначалу может быть немного сложным для осмысления.
Как научиться программировать на Java и с чего начать
![]()
Определите свои профессиональные цели и выберите язык. Это самый главный совет для новичков, желающих присоединиться к сообществу программистов. Но как же это сделать, если вы не понимаете, какой язык лучше подойдет для ваших целей?
Разве не было бы проще, если бы среди языков разработки существовал какой-то один «лидер на рынке»? Тогда бы новички не терялись в догадках, а смело приступали бы к изучению данного языка, будучи уверенными в своей востребованности. Конечно же, это — нечто из разряда фантастики. Языки являются «средствами» для решения разного рода задач. И все же, среди них есть один, тот самый — идеальный выбор. Называется он Java.
Java — это хорошо структурированный, объектно-ориентированный язык, который достаточно прост для начинающих. Вы можете изучить язык довольно быстро, ведь в нем есть множество процессов, выполняющихся автоматически. Вам не нужно слишком сильно погружаться в то, как же все устроено. Java — это кроссплатформенный язык. С ним программист может создавать приложения, которые легко развертываются на любом устройстве. Java — это явный фаворит Интернета Вещей и идеальный выбор для создания корпоративных приложений.
Для новичков есть и другой важный плюс — Java имеет крупнейшее мировое сообщество и первоклассную документацию. Если вы столкнулись с какой-то проблемой, то, скорее всего, сможете быстро найти для нее готовое решение. Еще несколько плюсов: обширные коллекции и фреймворки, которые подходят для решения практически всех задач Junior-разработчика.
И, наконец, Java — это язык с достойным прошлым и многообещающим будущим. Две последние версии, дополненные новым функционалом, были выпущены с промежутком в полгода. Такая периодичность позволяет Java оставаться на передовой ИТ-индустрии.
Когда мы говорим о языке программирования с низкой кривой обучения, нельзя не упомянуть о «подводных камнях». Сколько времени потребуется на обучение? Какие источники заслуживают доверия? Каких ошибок нужно избегать? Давайте разберемся со всем этим на личном опыте.
Избегайте стандартных проблем
Итак, вы — новичок в программировании. Поздравляем: вам доступен опыт других программистов, который позволит избежать стандартных ошибок при самообучении. Вот самые частые проколы:
Изучение языка без конкретной цели
Чтобы понять масштаб и уровень знаний в языке, ответьте на один простой вопрос: зачем вам нужно программирование?
Если вы серьезно нацелены на разработку программ и видите себя в роли Java-разработчика, то тратьте на обучение не менее 4–5 часов в день. Если же вы хотите просто расширить свои знания, то выбирайте более «расслабленный» темп. В любом случае, постарайтесь не растягивать процесс обучения во времени, потому как технологии не стоят на месте. Пока вы изучаете конкретные фреймворки или средства разработки, они могут устареть.
Чтение «всего полезного», что попадается на глаза, — это не самая верная стратегия обучения. Нет ничего страшного в корректировках общего плана. Однако если будете сильно отходить от графика обучения, то неизбежно столкнетесь с демотивацией.
Изучать все и сразу
Это следующая ошибка, которая ведет к «бесконечному» обучению. Не пытайтесь впихнуть в план обучения слишком много технологий и инструментов — это первый шаг к выгоранию. Человеку требуется определенное время на усвоение информации и изучение того, как все работает на практике.
Перебор теории и отсутствие практики
Программирование — это определенный навык, который вырабатывается только на практике. Конечно же, вам нужен большой багаж теоретических знаний. Но просмотр лекций и прослушивания курсов не сделает из вас программиста. Подумайте об этом. Нельзя научиться плавать, пока не попробуешь. Вам нужны теоретические разъяснения. Но, прежде всего, вам необходимо выполнять какие-либо действия.
Только при достаточном объеме практики вы научитесь решать повседневные проблемы программистов. Например, вы выработаете привычку регулярно проверять свой код и не откладывать проблемы на потом. Будете начинать с простейших решений. Постепенно дойдете до более навороченных и сложных. И, что самое главное, — привыкните программировать каждый день.
Изолированное изучение кода
Новички часто теряются в догадках, стоит ли вступать в онлайн-сообщества разработчиков или посещать профильные мероприятия. Запомните одно: никто не желает вам зла. Сообщество программистов всегда готово помочь. Ведь так и появляются те самые источники открытых данных. Все программисты когда-либо работали в команде, и каждый из них в свое время с чего-то начинал.
Посмотрите, сколько форумов и интернет-ресурсов посвящено программированию. Разработчики с радостью делятся накопленными знаниями и всегда открыты для сотрудничества. Здесь вы сможете начать свое обучение, получить подсказки от опытных коллег, а затем найти свой первый проект по разработке.
Свято верить, что однажды разберетесь во всех аспектах программирования
Если кто-то сможет создать чудо-таблетку, в мгновение ока превращающую вас в гуру программирования на любом языке, то этот человек станет самым богатым в мире (прости, Джеф Безос). Но до тех пор, при твердом желании стать программистом, никакой конечной точки в обучении быть не сможет. Даже когда вы начнете работать по специальности, не прекращайте учиться. В мире разработки все очень быстро меняется.
С другой стороны, если вы все еще учитесь разработке, то постарайтесь принять некоторые факты как данность. Не погружайтесь с головой в каждую тему, поскольку на деле она может оказаться слишком сложной.
Создайте идеальную программу обучения
Куда проще достичь желаемого, если разбить процесс на этапы. Узнав о распространенных ошибках, вы научитесь их избегать. Вот пять шагов для изучения Java.
1. Поставьте цель и выберите язык
На Java можно написать все, что угодно. Вы можете создавать серверные или корпоративные приложения, а также проводить модульное тестирование. Но, конечно же, знание одного языка не сделает из вас профессионала. Постарайтесь продумать конкретные области применения.
Сейчас в моде создание облачных приложений (здесь вам потребуется изучить основы облачных вычислений и профильные инструменты разработки), работа с Интернетом вещей, анализ big data, разработка игр и т.д.
2. Создайте план обучения
Готовы ли вы сделать Java-разработку своей профессией? Если да, то выделяйте на ежедневное обучение минимум 2–3 (в рабочие дни) — 5 часов (в выходные). Таким образом, где-то за 3–6 месяцев вы дорастете до уровня Junior-разработчика.
Процесс обучения лучше разбить на несколько этапов:
- установка JDK (Java Development Kit) с сайта Oracle и среды выполнения Java (IntelliJ IDEA, Eclipse или NetBeans);
- изучение синтаксиса Java;
- изучение Java Core;
- изучение Java Collections;
- изучение популярных библиотек и фреймворков;
- изучение часто используемых API (например, сервлетов, JSP, JDBC, JUnit);
- освоение Git и т.д.
Старайтесь придерживаться этого плана и находите «золотую середину» между теорией и практикой. Программирование — это навык, требующий ежедневной тренировки. Если вы закончили изучение определенной темы, то выполните несколько задач по разработке (от 3 до 10, в зависимости от сложности).
Изучения Java можно проводить по хорошо известному принципу Парето (правило «80/20»). 20 — это теория, а 80 — практические задания. Это не преувеличение. Для того, чтобы научиться программировать и развить нужные навыки, нужно в 4 раза больше реальной практики, чем чтения учебников. К сожалению, если сразу не написать код, то уже завтра вы забудете о том, чему успели научиться. К счастью, есть полезные ресурсы, которые помогут вам с программой обучения.
3. Выберите правильные инструменты и присоединитесь к сообществу разработчиков
Давайте будем честны: идеального курса по Java еще не придумали. В каком-то курсе вы получите глубокие теоретические знания, а где-то больше времени уделите практике. Подберите несколько платформ для обучения, общения и практики. Выберите онлайн-курс, в котором бы сочеталось понятное объяснение теории и реальные примеры кода.
Присоединитесь к профильным сообществам — так вы сможете задавать вопросы о Java-разработке, обмениваться знаниями и общаться с единомышленниками.
Пользуйтесь несколькими обучающими ресурсами
Вам потребуется множество инструментов для достижения цели. Вот полезные подборки для успешного обучения.
1. Только практика: CodeAcademy
Это, пожалуй, одна из самых известных онлайн-платформ для изучения разных языков программирования. И, конечно же, тут есть специальный раздел для изучающих Java. Здесь вы с самого первого урока начнете писать код. Если задание покажется слишком сложным (а для новичков — это совершенно нормально), то можете воспользоваться полезными подсказками. Логика обучения проста: читаете задание, пишите код, запускаете его, смотрите результат, переходите к следующему уроку. Задания постепенно усложняются до тех пор, пока вы не научитесь писать код с чистого листа. Есть очень полезный раздел FAQ и возможность обсуждения задания с другими учениками.
Данный курс может стать отличным подспорьем при изучении Java. Как уже было сказано выше, для успешного освоения Java нужно писать много кода.
2. Играйте и программируйте с нуля: CodeGym.cc
Существуют онлайн-курсы по Java с необычной особенностью — игрофикацией. Сейчас многие платформы стали внедрять обучение в формате игры. Так вы получаете должную мотивацию, наглядно отслеживаете успехи и легче достигаете нужной цели.
В CodeGym вы начинаете с нулевого уровня. Процесс обучения проходит в футуристической вселенной с космическими путешествиями, роботами и прочими классными штуками. Ваша цель — пройти 4 обучающих квеста и «прокачать» своего персонажа (робота). Каждый квест состоит из 10 уровней. В каждом уровне по 10–12 уроков, которые вам объясняют члены экипажа космического корабля. Урок сводится к минимуму теории и набору заданий с мгновенной проверкой, а также подсказками по улучшению кода. Вы сразу начинаете писать код и решаете простейшие задачи до тех пор, пока не будете готовы к более сложным и масштабным проектам по разработке.
Здесь вы можете не «застревать» на какой-то теме, а переходить к изучению следующей и возвращаться к проблемной задаче позже. В курсе имеется невероятное количество задач — более 1200. Это количество равнозначно примерно 300–500 часам написания кода.
3. Конкурсы по программированию: Codewars
Есть еще одна онлайн-платформа с акцентом на практику. Хотя, конечно, она больше подходит для тех, у кого за плечами есть опыт в разработке. Codewars позволяет отточить свои навыки в каком-то языке программирования с помощью обучающих задач (ката).
Вы можете писать свой код в браузере и пошагово проверять его в тестовых сценариях. Также можете сравнивать свой код с чужим, расширять базу знаний и обсуждать лучшие варианты. Каждое задание представляет собой конкурс с другими программистами, и ему присваивается свой рейтинг. Как только вы научитесь решать не самые простые задачи, то сможете отточить свои навыки и поучаствовать в более сложных конкурсах. Основное отличие данной платформы — здесь вы можете учиться и практиковаться в группе.
4. Слушайте лекции профессионалов: EdX
EdX — это образовательная платформа, созданная Гарвардским университетом и MIT. В ней представлено множество предметов, в том числе, программирование на Java и смежные области. EdX содержит массу утвержденных вводных курсов и сертифицированных программ, проводимых университетами.
Хотите быть в курсе последних новостей, обзоров и обновлений в Java-мире? И это правильно. Java постоянно развивается, обновляется и добавляет новые возможности. Не забывайте каждый день читать полезные статьи по Java.
Помните совет о том, чтобы вступить в профильные сообщества для более эффективного обучения? Можете задавать свои вопросы в разделе Java на Stack Overflow или Coderanch. Кроме того, есть как минимум три крупных сообщества на Reddit (learnprogramming, java и learnjava), где вы познакомитесь с полезными подсказками по изучению как всего программирования, так и отдельно взятого языка. Если нужна более конкретная информация (например, как улучшить код в каких-то заданиях), то почитайте специальный раздел помощи на CodeGym –другие студенты и «наставники по разработке» подскажут вам решение любой задачи. И, наконец, есть еще крупное Java-сообщество на Oracle. Оно рассчитано на новичков и продвинутых разработчиков.
Быть разработчиком — это постоянно совершенствоваться и получать новые знания. Если вы изначально разовьете навык самообразования, то гарантированно добьетесь успехов. Итак, вы готовы начать?
Как правильно изучать Java

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

Определитесь с конечной целью изучения Java
Для начала вам необходимо определиться со своими целями и выбрать тот язык программирования, что вам максимально подходит. Это является самой важной рекомендацией для тех людей, кто ранее не программировал, но имеет желание присоединиться к IT-сообществу.
Как понять, подходит ли вам Java
Было бы намного легче, имей мы среди языков программирования явного лидера рынка, что способен по функционалу и своим возможностям заменить все остальные языки на рынке, тогда бы и вопроса первого языка программирования не стояло бы вовсе. Но в нынешних реалиях этого не происходит.
Если время позволяет, советую понять конечные задачи, решать которые вы хотите посредством программирования, далее разобраться какие именно языки программирования могут эти задачи выполнять, составить список из таких языков и уделить по одной неделе на изучение каждого языка. За месяц вы сможете сложить хоть и крайне отдаленное, но частичное понимание того, как вам дается тот или иной язык, вследствие чего всё вышеперечисленное может помочь вам с решением какому языку программирования вы хотите отдать предпочтение.
Вы должны понимать, что языки программирования являются в первую очередь «инструментами» для решение поставленных задач. Одним из языков, что способен на решение большого количества разного плана задач, является Java.

Java — это крайне структурированный, объективно-ориентированный язык. Также Java является мультиплатформенным языком. Написав приложение на Java, вы запустите его на любом устройстве. Также Java и его сводный брат язык программирования Kotlin являются отличными инструментами для создания мобильных приложений.

Основные ошибки новичков в Java, которые вам необходимо избежать
1. Попытка изучить всё и сразу. Ни в коем случае не пытайтесь хвататься за всё и сразу. Вы выгорите. Человеку всегда нужно время на то, чтобы информация усвоилась в голове, поэтому идеальным будет составить себе план-изучения, идя последовательно по которому вы будете ориентироваться в том, что вы прошли и что вам предстоит пройти. Последовательность будет давать вам то чувство стабильности, что необходимо новичку.
2.Обучение без конкретики и поставки конечной цели. Чтобы ваше обучение шло успешно, вы должны ответить — зачем вам это надо? Если ваши намерения серьезные и вы готовы к тому, что в течении года вы будете уделять по 3-4 часа самостоятельному изучению языка, то обучение не будет для вас в тягость. Если же целей конкретных у вас нет — еще раз задайте себе вопрос, надо ли вам это всё.
3.Изучать Java закрывшись от сообщества Jav’истов. У нас у всех был и есть синдром самозванца. Это не моё, надо мною будут смеяться и я неспособен и тому подобное. Из за этого начинающие программисты постигают всё в одиночку, столкнувшись с чередой трудностей при изучении и при неимении возможности задать вопрос более опытным коллегам по цеху, выгорают и бросают дело. Вы должны понимать, что программисты привыкли работать в команде и все были такими же новичками, как и вы. Не стесняйтесь и задавайте вопросы на тематических форумах, чатах. Главное перед этим не один десяток раз попробуйте сами решить свою проблему. Только после этого уже обращайтесь. Команда — командой, но самостоятельность никто не отменял.

Пример учебного плана по изучению Java
— Установка JDK (Java Development Kit) с веб-сайта Oracle и Установка среды выполнения Java (IntelliJ IDEA, Eclipse или NetBeans);
— Изучение синтаксиса Java;
— Изучение Java Core;
— Изучение коллекций Java;
— Изучение популярных библиотек и фреймворков;
— Изучение часто используемых API (например, сервлетов, JSP, JDBC, JUnit);
Вашей задачей является сохранение баланса между практикой и теорией. Запомните, программирование — это в первую очередь навык, который требует своего применения каждый день.

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

Подводя итог — определитесь с тем , для чего вам Java и Учите английский язык
Как итог к данной статье хочу также дать универсальный совет для тех, кто видит себя в будущем программистом. Учите английский язык. Громадные объемы рабочей документации на английском, описания новых технологий языка также на английском. Тонны информации на английском. Поэтому, не забывайте про англ.яз. и уделяйте ему время, независимо от того, какой язык программирования вы выбрали.
Успехов вам в самообразовании, коллеги!
Если вас интересует IT его перспективы в РФ ,
публикую также свои статьи и интервью на канале t.me/it_begin
Подписывайтесь, если будет интересно 😉
«Советы универсальны и их концепция подойдёт к любому языку программирования.» — в принципе на этом можно и закончить чтение )))
На iOS жаву завезли? Можно на Swift положить болт и кросплатформу на жаве написать?

Проект The Fuck
Было очень любопытно, что же скрывается под таким неговорящим названием. Причём явно что-то популярное и полезное, потому что 77.7k звёзд на гитхабе. Оказалось, что это утилита для исправления опечаток или неполностью набранных команд.
Показываю сразу на примерах. Допустим, вы устанавливаете софт через пакетный менеджер и забыли написать sudo:
E: Could not open lock file /var/lib/dpkg/lock —
open (13: Permission denied)
Вы расстраиваетесь и материтесь, потому что нервы у айтишников никудышные. Сидячая работа, стрессы, кофе и т.д. Пишите в консоль с досады:
TheFuck понимает ошибку и предлагает выполнить команду с учётом исправления.
# sudo apt-get install mc
TheFuck распознаёт популярные ошибки, опечатки, не только в командах, но и в их ключах, параметрах. Например:
fatal: The current branch master has no upstream branch.
# git push —set-upstream origin master
То есть запустили гит пуш, забыли обязательные параметры, fuck добавил дефолтные параметры для этой команды.
Ещё больше примеров можно в репе посмотреть. Все исправления описаны правилами, которые лежат в соответствующей директории. Правила написаны на python, можете изменить готовые или написать свои. Например, есть правило для chmod. Если в консоли запускается скрипт через ./ и в выводе появляется сообщение permission denied, что типично, если у файла нет прав на исполнение, fuck исправляет это, добавяля права через chmod +x.
Больше всего правил написано для git. Судя по всему этот инструмент писался для разработчиков и немного девопсов, поэтому так много звёзд на гитхаб.
Если будете пробовать в Debian, утилита живёт в стандартных репах:
# apt install thefuck
Автор пакет заботливо отключил все правила для sudo. На всякий случай. По умолчанию бинарники ставятся в $HOME/.local/bin, поэтому надо добавить этот путь в PATH:
Обход любых блокировок
0.Предыстория
30 мая многие провайдеры в тестовом режиме заблокировали OpenVPN подключения. Уже на следующий день, 31 мая, всё вернулось в норму. Казалось бы ничего такого, и я соглашусь с тем, что данное событие не означает то, что завтра забанят все VPN протоколы, это новость скорее говорит о том, что провайдеры в любой момент могут их заблокировать. Если есть возможность опознать OpenVPN подключение и заблокировать его, то тот же самый Wireguard детектируется с ещё большей лёгкостью. Мне данный вариант не нравится, ждать пока бахнет желания тоже нет, поэтому дальше я расскажу об одном из лучших вариантов для обхода блокировок, который не детектируется даже китайским файрволлом(на текущий момент).
Речь пойдёт об установке и настройке XTLS-Reality в связке с XTLS-Vision, если эти слова вам ничего не говорят, то ничего страшного.
Год назад я уже писал пост Как развернуть свой VPN сервер там я расписал как установить WireGuard VPN сервер. В принципе, на данный момент он не потерял свою актуальность и если вам хочется чего то попроще, то это всё ещё отличный выбор. В таком случае лучше всего выполнить пункты 1-3 из этой статьи и пункт 3 из прошлой.
1.Покупка VPS
Для начала нам понадобится VPS(Виртуальный Приватный Сервер). Здесь я покажу покупку на VPS от RackNerd. Да, это тот же самый VPS, что и в предыдущей статье. За полтора года использования не было ни одной проблемы с данным VPS, у него всё также очень маленькая цена, поэтому я продолжу пользоваться им. Другие дешёвые VPS можно найти здесь
Все предложения имеют скорость в 1 Гигабит/c
План с 1ТБ трафика в месяц обойдется в $10.28 в год
План с 3ТБ трафика в месяц обойдётся в $16.88 в год
План с 7ТБ трафика в месяц обойдётся в $28.55 в год
Переходим по нужной вам ссылке.
Выбираем операционную систему Ubuntu 20.04 и нужное вам расположение сервера.

Нажимаем Continue и потом Checkout.
Вводим ваши или не ваши данные. Аккаунт будет зарегистрирован на указанный email.

Выбираем удобный способ оплаты и оплачиваем.
После оплаты на указный при регистрации email придёт письмо с данными для подключения к серверы и входа в панель управления(может потребоваться для сброса сервера и мониторинга трафика)
2.Подключение к VPS
Скачиваем и устанавливаем Bitvise SSH (убедитесь, что при установке стоит галочка Install WinFsp)
Вводите в поле Host IP адрес сервера из письма.
В поле Port вводим SSH Port из письма.
В поле Username вводим Username из письма.
Initial method выбираем password.
Ставим галочку Store encrypted password in profile.
В поле password вводим Root Password из письма.

Далее нажимаем Save profile as и сохраняем профиль на будущее.
Для подключения к серверу нажимаем Log in.
Cлева появятся кнопки New Terminal Console(открывает терминал) и New SFTP Window(открывает файловый менеджер).
Для того чтобы скопировать текст в терминале просто выделите его.
Для вставки нажмите ПКМ(правую кнопку мыши).
3.Базовая настройка сервера
Вводим в терминал:
Это обновит пакеты приложений.
Сменим порт SSH
22 порт для SSH очень не надежен, так как его постоянно мониторят боты. Сменим его.
Вводим в терминал:
Управление стрелочками. Удаляем # перед Port и вместо 22 вводим любой от 1024 до 65535.

Нажимаем Ctrl+X потом Y и Enter.
Перезапускаем ssh командой:
Закрываем консоль. Нажимаем Log out. Меняем порт на новый и нажимаем Save Profile.
Нажимаем Log in и открываем терминал.
Настроим Firewall
Введите в терминал эти команды:
apt install ufw -y
ufw default deny incoming
ufw default allow outgoing
ufw allow 443
ufw allow Ваш_новый_SSH_порт
ufw enable
Этим мы закрыли все порты кроме 443(понадобится дальше) и порта SSH.
Если вы устанавливаете что-то другое, то вместо вместо 443 используйте нужный вам порт.
Включим BBR
echo «net.core.default_qdisc=fq» >> /etc/sysctl.conf
echo «net.ipv4.tcp_congestion_control=bbr» >> /etc/sysctl.conf
sysctl -p
В теории это увеличить скорость соединения.
На этом базовая настройка закончена.
4.Установка и настройка XRay
Вводим в терминал эти команды:
Посмотрите номер последней версии, на текущий момент это 1.8.1 Если вышла более новая, то замените версию в команде ниже.
Изначально ссылка была https://raw.githubusercontent.com/XTLS/Xray-install/046d9aa2. , но Пикабу её сокращает, поэтому сократил ссылку
Вводим в терминал:
Мы получили публичный и приватный ключи. Сохраните их куда-нибудь, они понадобятся позднее.
Вводим в терминал:
Мы получили UUID, для каждого пользователя нужно сделать свой UUID. Сохраните их куда-нибудь, они понадобятся позднее.
Вводим в терминал:
Мы получили ShortId сохраните его, он также понадобится в дальнейшем
Нажмите на New SFTP Window в BitviseSSH. Слева файлы на вашем ПК. Справа файлы на сервере.

Открываем файл config.txt и вставляем туда то, что написано ниже.
В поле id введите ваш UUID. Для каждого пользователя нужно прописывать это:
Разделяются они запятой. После последнего пользователя запятой быть не должно Примеры:
В privateKey вводим ваш приватный ключ. В Shorts Ids ваш ShortId.
Сохраните файл(Ctrl+S) Закройте файл и SFTP окно.
В терминал вводим:
Статус должен быть быть active (running)

Если у вас ошибки, то перепроверьте ещё раз конфиг.

5.Подключение
Есть много разных клиентов, но мы будем использовать Nekoray.
Скачиваем последнюю версию. (3.6 на текущий момент)
Разархивируем и открываем necoray.exe
При запуске выбираем sign-box.
Дальше нажимаем Server -> New Profile
Type выбираем VLESS.
Вводим всё в соответствии со скрином ниже.

ПКМ(правой кнопкой мыши) по созданному профилю и нажимаем Start

Потом ПКМ -> Current Select -> URL Test
В Test Result должно быть сколько-то ms. Если у вас Unavailable, то перепроверяйте введенные вами данные.

Нажимаем VPN mode, чтобы трафик пошёл через наш прокси
ГОТОВО! ВЫ МОЛОДЕЦ!
Повторяем действие для Windows.
ПКМ->Share->QR Code and Link
Открываем его, справа сверху нажимаем на плюсик, выбираем отсканировать QR и сканируем QR с ПК.
Кнопка по центру включает прокси
Используйте ShadowRocket или FoXray Настройка должна быть аналогичной.
Это коробочка всё ещё лежит не открытой


Простыми словами о фреймворках
Всем привет, работаю java разработчиком последние 9 лет, хотел бы пояснить на максимально простом примере зачем нужны фреймворки и в чем их отличие от библиотек.
И те и другие созданы для исключения дублирования часто используемой функциональности: не нужно повторно писать и тестировать код, разработчики знакомы с распространенными решениями, что облегчает вход в проект.
Библиотеки имеют определенный интерфейс, который позволяет вызывать их код из вашего проекта. За интерфейс и его реализацию отвечают авторы библиотеки. Фреймворки же напротив, являются точкой входа и вызывают код вашего проекта. А это значит что теперь уже вы должны реализовать определенный интерфейс, который предлагает автор фреймворка. Это похоже на подключение плагинов в других программах.
Часть кода переезжает в настройки или в иной форме становится декларативной. Приведу пример конфигурации одного из самых популярных java фреймворков Spring. Проект будет загружать из БД список пользователей и отдавать их «как есть» через REST апи:
application.yml — конфигурируем порт для апи и настройку подключения к бд:
server.port: 8080
spring.datasource.url: jdbc:postgresql://localhost:5432/mydb
В формате фреймворка объявляем репозиторий — компонент для получения записей о пользователях из таблицы БД:
interface UserRepository extends CrudRepository<User, Long> <>
В формате фреймворка объявляем эндпоинт — точку для подключения других сервисов к REST апи нашего проекта:
Теперь другие сервисы могут через апи нашего сервиса получить список пользователей из БД:
С минимальными настройками можно подключить и другие необходимые компоненты — для работы с разными БД, очередями, логгированием, можно настроить транзакции, ретраи, авторизацию и всё остальное.
Если вы только начинаете карьеру в it, есть смысл попробовать воспроизвести пару примеров из интернета по вашему фреймворку, а также пройтись по теоретическим вопросам (вроде «жизненный цикл спринг бинов»), но было бы разумней потратить время на общие алгоритмические и технические темы. Всем удачи!

«А если изменить скорость открывания, то можно сделать самолетный движок»


Первый опыт работы в 16 лет в IT
Я хотел изначально написать этот пост на хабре, но это скорее просто личное желание поделиться опытом, радостью и слить накопленное, чем информативная статья с моими анализами и выводами.
Я занимаюсь программированием с детства, а веб разработкой всего пару лет, но тем не менее собрал достаточно знаний, чтобы попробовать найти работку в IT. Оно знаете, было как-то лень и интересно одновременно, я люблю приключения и к тому же я собирался работать удалённо. Мой системник уже проситься на тот свет, иногда просто может не включиться, помогает передёрнуть ОЗУ и почистить от пыли и он снова работает (Кому интересно, p7p55le + i5 750, 8 gb DDR3 и две Radeon HD 5830). Апгрейдить там бессмысленно, нужно с нуля собирать. Не то что бы меня это сильно мотивировало, ну останусь без пк, жизнь же продолжается; но он не ломается к удивлению, заставляя меня угрожать кулаком в монитор и по клавиатуре, когда курсор останавливается, а IDE (От реактивных мозгов) вылетает.
Путь до оффера
Приблизительно начало февраля 2022. Тихонько себе листал вакансии на hh и habr карьере, откликался, получал отказы, решал тестовые (увы, тестовой зарплаты не было), но я остановлюсь на собесах. Хотя и там особо всё просто, коммерческого опыта нет, ты маленький, и вообще что ты тут забыл. Потому я продолжал откликаться уже по приколу, на middle даже, ну прокатит и круто.
Ивент от яндекса.
Осень 2022. Яндекс приглашает поучаствовать в соревновании YaCup 2022. До денежного приза вряд ли дойду, а вот пройти отбор на стажировку по упрощённой схеме, если попал в топ 50 уже не так уж и не возможно. Рвя жопу и нервы, я занял 36 место (в направлении фронтенд) и через неделю меня пригласили пройти удалённо отбор. Подробно не буду. Прошёл первый этап, на том конце были весёлые ребята и прикольные задачи (относительно простые, по этому не нервничал). На втором этапе меня встретил мужик который вероятно давно не ухаживал за своей растительностью на лице. За ним была доска, где я должен был бы решать задачи, но у меня была фора, однако я всё равно завалил. В яндекс я не попал (
Удача?
Февраль 2023. Вечерочком сижу и листаю вакансии на хабре и откликаюсь на «Typescript Lead». Странное название, просто Typescript и просто Lead. В описании написано «в поисках джуна», ну а кто я, чтобы не тригернуться на слово «джун». Через часок, уже полностью сонный, смотрю пишет мужик с этой вакансии, мол, вообще смотришь куда откликаешься. Я подумал, ну бывает, хотя это не hh и на кассира случайно тут не откликнешься. Проверяю отклики и всё ок. Он зовёт поболтать.
Первый разговор был без вебки, так что я не знал кто там. По голосу лет на 20. Попросил выполнить тестовое к завтрашнему дню и втирал какую-то дичь про тёплую атмосферу в команде и что-то ещё, я не помню, хотел спать. Тестовое было простенькое, но я всё равно потратил на него пол дня.
На «собесе» меня встретил бородатый мужик далеко не 20ти лет, а как оказалось почти сорока. Вебку тоже пришлось включить, переборов себя. Это был просто разговор по интересам, был только один тех. вопрос (что такое DI?) на который я нашёл много что ответить (мог бы больше, но моя речь не поспевает за моими мыслями, я вообще довольно не общительный). Потом я ничего не помню, помню только конец. Через полтора часа разговора с меня уже стекли литры пота, пытаюсь сдерживать судороги в ногах и шею, которая тоже вот-вот пойдёт в разнос. Меня он оценил в 50к рублей и объявил испытательный срок — 3 месяца с 75% ставкой. Завершил разговор, требуя готовиться к первому рабочему дню. От меня он потребовал мой плейлист spotify, любимые фильмы, книги и moodboard, дабы «знать мой психотип», чтобы это не значило.
Надо сказать я устраивался на Frontend, он меня направил на FullStack и спойлер работал как Backend.
Первый рабочий день
Было так круто, что я аж в 6 утра подскочил. Меня добавили в телеграм группу по разработке. И к обеду мне прилетела задача (issue) в гитхаб. Единственное, что мне сказал руководитель — «Иди раскуривай».
Кстати про команду: руководитель(он же тот самый мужик), дизайнер(парень где-то лет 20ти) и два фронта, с которыми особо не контактировал.
Так вот возвращаясь к задаче. Я нихера не понял. Задача была наполнена непонятными мне терминами. Я подумал это нормально, капец какого опыта я наберусь (спойлер, это правда).
Чтож. Делать нечего, я пишу, что-то вроде «памагите, я ничего не понимаю». Меня направили почитать про [куча терминов]. «Раскуриванием» задачи я занимался следующую неделю.
Из будущего: задача была в том, чтобы доить базы сети аптек по всей России, готовить данные и кормить ими с ложечки аналитические сервисы. Ведь просто, правда? Как будто я с базами данных не работал или бэкэндом. Но вот данных там на сотни гигабайт и это вполне тянет на биг дату. Обрабатывать их нужно грамотно, чтобы не было утечки памяти. А как это делать, я не знал.
Медленно, но уверенно
Я погружался в новые технологии, местный стек и так любимое в этом месте DDD. И вот первый потребитель данных доволен. Всё работает как надо, спустя сотни исправлений. И прошло уже чуть больше двух недель. Всё время я работал над проектом один, и настраивал его с полного нуля.
А вот и первая ЗП за 2 недели. Что кстати удивило, с самого начало думал, что кинут.
Отношение начинает меняться
На одном из one-to-one
— Ну как там?
— Первый потребитель готов, ещё два осталось
— Замечательно. За этот день добьёш?
— Нууу. Эээ.. Тут я думаю где-то к концу следующей недели доделаю.
— Б*ть, какой следующей недели. У нас уже сроки на этой недели заканчиваются. Чё там делать, то. Ты должен был по моим предположениям ещё на прошлой неделе всё сдать и перейти к следующему проекту.
Дальше на меня льётся куча критики и мата, а с моими то социальными навыками, я просто сижу как камень, слушаю, говорю «ага» и со всем соглашаюсь.
Что-то похожее происходило каждую неделю. «Ну чё за день осилишь», «Так, тогда через час идём в прод, да?», а там работы на неделю.
Затем мне пришло сообщение, что мой испытательный срок нужно продлить на ещё один месяц. Я поинтересовался, как это повлияет на ЗП. Оказалось всё нормально, на ЗП это продление не влияет. Держите это в голове, пригодится.
С проекта на проект
Сроки просрались, меня ведут на другой проект, а там прод лежит, и вообще что-то там наворотили и не работает, иду на следующий, через дня 2 всем говорят бросать этот проект и идти на другой.
Чтож на этот раз это бот для подготовки формы(pdf файла) для миграции в США. Он уже был готов, но там нужно было что-то «поправить». Пока я это правил, появились подробности, что оказывается там вообще сценарий вопросов не правильный. Ну ладно, сел переписывать. Ну и как обычно, я должен был сделать это вчера, а почему-то потратил на это три недели. Ну работает и ладно.
Вообще я много когда узнавал новые подробности в не подходящее время.
Последняя капля
Напоминаю, что частенько меня кроют в чате и one-to-one. Так, что мотивации и настроения, что-то делать у меня нет. Каждый день жду увольнения.
У меня есть такая особенность, что я копирую манеру общения собеседника. Так что отвечать добром на такие сообщения я не мог, а в one-to-one просто говорю «ага» и стараюсь как можно быстрее уйти, потому что такой разговор мне не приятен. Чтобы вы не думали, что я так всегда общаюсь, с дизайнером общаться вообще по кайфу, нет желания уйти, хотя и поддержать разговор также не получается.
На проекте с ботом у меня возникла проблема, с тем, что бот падает при создании pdf, но ошибки нет, точнее она пустая. Я обращаюсь к руководителю (больше не к кому)
— У меня не собирается pdf, падаёт ошибка в виде пустого объекта
. не помню точно, но разговор зашёл к тому, что зачем мне linux, если я им не умею пользоваться, и вообще — купи мак. Вот у тебя docker стартует из под рута, потому и не работает
— Слушай. Ну вот! Да! У меня всё собирается. Это у тебя Docker из под рута стартует.
— Ладно, буду разбираться.
Посидев, я понял в чём ошибка. И тут до меня доходит. Как он мог сгенерировать pdf, если ошибка совсем в другом. Я начал кое что подозревать, что уже давно подметил.
Часто на мои глупые вопросы, я получаю слишком умные(тупые) ответы, по сути это просто каша из умных терминов. Вместо того чтобы переспросить, уточнить, руководитель мне либо посылают такой ответ, либо наезжает.
Ответ на один из моих глупых вопросов
Эти вещи нужно оборачивать в модельные сущности и эксплуатировать в рамках стекового инструментария, приватизация тут ничего не решает
Поняли? Контекст тут не важен, чтобы понять, что это отборный бред. Такие ответы я получал почти всегда.
Так, вот я решил проверить мою теорию(обращаясь к руководителю)
— А можно pdf который вчера удалось сгенерировать?
— [скидывает пустой pdf (бланк для заполнения)]
— Не, это бланк, мне нужно заполненный со вчера.
— Ты сказал не собирается, ну я и собрал. Генерация это уже другая задача.
И да. Я подтвердил свою теорию. Он придрался к термину. Я сказал «собрать», вместо «сгенерировать». Я окончательно сгорел, и назвал его душнилой, а потом не сдержался и ещё жёстче его покрыл. На что он ответил что-то вроде: что ты себе позволяешь, вы(команда), должны целовать мне ноги, я вам тут плачу, я собрал команду, я, я, я.
К этому времени в команде остался только я, приходили иногда новички (с не плохим таким опытом уже), но уходили через день, два. Мне кажеться они сразу понимали, что тут что-то не так.
Саботаж
С этого момента, почти каждый день продолжалась эскалация конфликта. Я больше не задавал вопросов по задаче (поскольку от этого я только теряю время на бессмысленный токсичный разговор), и шёл на one-to-one только со словом «ага» и каменным лицом.
Одним утром, без настроения пытаясь разобрать очередную задачу, уже по другому проекту, я вылетаю из группы в телеграме. Я сначала не понял, что произошло, потом зашёл на github и увидел, что больше не состою в их организации. И я понял — я уволен. Однако в течении дня мне ничего не написали. Так, что это сделал я.
— Это типо увольнение? Тогда уж можно пожалуйста официальную причину и ЗП за 12 дней?
— Официальная причина — некомпетентность, саботаж
— Официально — ты у меня не работал, по документам, благо, не успел тебе контракт оформить. Я рекомендую тебе походить к врачу и начать общаться с людьми, у тебя большие проблемы, которые тебе предстоит решить.
— А зп за 12 дней? Если я получаю 50тр в месяц, то за 12 дней это должно быть 20тр
— Ты не получаешь 50к в месяц, я продлил твой испытательный, ты согласился
Поняли, да? Я там даже и не работал. И что ещё за «саботаж».
Где же обещанное обучение к которому вы так ответственно относитесь, ламповая атмосфера и уважение к неопытным сотрудникам, о чём мне заливали в самом начале?
Вот такие мои весёлые приключения в мире трудоустройства в IT, так ещё и в 16 лет.
P.S. Ах, да. Мне хватило ровно на новый ПК. Так, что я не сильно расстроился.

Опять все забыли про мидлов


Что не так с Шедеврумом и моя попытка это исправить
Недавно прокатилась волна о том, как Шедеврум от Яндекса замечательно рисует флаги США по запросу «наша родина», и меня, как специалиста, это сильно кольнуло. Настолько, что я решил что-то с этим сделать.
Вот пример такого художества, взял у Tagash, потому что уже закрыли костылем конкретно этот запрос, но основной проблемы это не решает:

Почему вообще складывается такая картина: алгоритмы может быть и отечественные, но результат, что-то, говорит об обратном.
Такие системы создаются на основе огромного количества данных — баз на сотни терабайт, состоящих из различных изображений и маркировок к ним, которые их описывают. Почти все существующие системы тренировались именно на таких открытых, огромных каталогах, которых довольно немного, а все они, как вы могли догадаться, сделаны на английском.
Данных с маркировкой на русском просто нет, либо их ничтожно мало, поскольку никому это просто не было нужно. А теперь, несмотря на наличие одареннейших специалистов у нас (к счастью, еще далеко не все разбежались), которые работают над отечественными решениями, без нужной информации им будет крайне тяжело продвигаться и приходится подпирать решения костылями, но это все равно не будет наш продукт до конца.
Так вот, есть предложение помочь им. Если создать такую базу или каталог изображений с описаниями на русском, то вся система заговорит совсем по другому. В качестве первой инициативы, я накидал сайт, где можно добавить маркировку изображениям на русском и загрузить свои картинки для последующей маркировки:

(для названия решил скаламбурить: взял «AI» (Искусственный интеллект на английском), поменял буквы местами и получился ослик Иа. Не кидайте тапками за лого, это лучший осел, которого я осилил нарисовать, да и то через Dall-E 2).
Хочу сказать, что коллективно мы можем подготовить фундамент на котором у нас появится реальный шедеврум, который будет думать на русском!
Плюс в том, что мы уже понимаем, что от этого нужно и можем создать базу данных, которая будет более разнообразной и яркой, чем англоязычные аналоги. Звучит странно, но здесь у нас есть фора, потому что мы точно знаем каким должен быть сервис и можем именно под него собрать и составить информацию.
Итак, как все это работает:
Нажимаем «Предложить ассоциацию». Система даст картинку для описания, которую кто-то ранее загрузил. Опишите одним словом, потом чуть подробнее и какие эмоции вызывает. Нажали на кнопку, описание улетело, получили следующую картинку и плюс в карму.
Там же можно загрузить свою картинку, но она сначала пройдет модерацию, чтобы всякой жути не заливали.

Неплохим примером описания было бы:
— Одним словом: лисы
— Подробнее: мама лиса с двумя лисятками, которые держатся за ее хвост на фоне травы
— Эмоции: милота, любопытсво (можно любой формат эмоций, прямо так как хочется сказать)
Кстати, если у вас есть желание помочь, то мне нужна юридическая помощь, а также с модерацией, разработкой, наполнением, да и вообще предложения приветствуются. Есть пара вопросов о том, как не угодить в «места не столь отдаленные» за инициативность)
Пока все это хранится на Amazon, но как только будут решены юридические вопросы, буду переносить всё на отечественный хостинг. Цель — создать собственную базу, чтобы можно было гордиться отечественным продуктом.
А для братьев технарей — весь код лежит в открытом виде, все как положено.

Топ-25 бесплатных курсов обучения Python 2023 года
Подготовили для вас статью с бесплатными курсами по Python. В некоторых курсах есть тренажеры: можно проходить теории и там же практиковаться.
Покликайте на курсы, выбирайте. Важно, чтобы вам был удобен курс, понятен язык изложения, и ваш уровень знаний подходил для конкретного курса.
Python — это один из наиболее популярных языков программирования в мире, широко применяемый как в создании программного обеспечении, так и в Data Science B Machine Learning.
Тренажеры
Тип: тренажер состоит из блоков теории, после которых сразу идет практика с задачами внутри тренажера. Бесплатный сертификат о прохождении выдается после окончания курса.
Тип: обучающий тренажер.
Тип: обучающий тренажер.
Бесплатные курсы от школ
Курс на платформе Stepik от онлайн-школы BEEGEEK для начинающих и учащихся образовательных учреждений. Программа предлагает изучить основы владения Python, а по окончании участников ждет электронный сертификат.
Бесплатный курс от Мичиганского университета на платформе Coursera предлагает участником набор онлайн-лекций по базовым навыкам владения языком Python. Каждый поток длится 7 недель, в рамках которых профессор Чарльз Северанс преподносит знания из своей книги «Python for Everybody».
Бесплатный курс по Python от Хекслет для начинающих программистов. Материалы, среди которых — 7 уроков в формате текста или видео и тесты, раскрывают основы написания кодов на языке, а также описывают ключевые аспекты работы в его экосистеме.
В рамках этих курсов по Python от Skillbox автор Артем Манченков расскажет обо всем, что пригодится начинающему программисту, используя реальные примеры. Вместе участники пройдут путь от написания интерфейса мессенджера до создания голосового помощника — и все это в формате видео.
Как заявляет автор курса, его программа рассчитана для программистов Python с любым уровнем знаний. По мере прохождения участников ждут 90 видеоуроков и практических заданий. По окончании курса платформа Stepik выдает электронный сертификат.
Бесплатный курс от Академии IT с рейтингом 4,75. Обучение состоит из прохождения 42 уроков, во время которых автор Михаил Тарасов расскажет все об основах программирования на Python, а также поделится ценной информацией о будущей карьере программиста.

Курсы с Youtube
Курс YouTube-лекций по программированию на Python. Вся программа состоит из 123 видео длительность от 5 до 12 минут. При желании можно найти те же видео на языке оригинала.

Что можно писать на Python
Практически как Java, Python находит применение во многих областях программирования. Так, например, язык применяют в:
Создании систем автоматизации;
Математических расчетах и других продуктах.
Сколько приносит знание Python в 2023 году?
Средняя заработная плата Python-программистов, согласно данным портала ГородРабот.ру, составляет 131 478 рублей — лучший показатель на рынке труда. А вот новички, основываясь на информации HH.ru , могут получать оплату от 70 000 рублей.
Ключевой недостаток владения Python — это необходимость конкурировать с другими кандидатами за место в штате. По подсчетам того же ГородРабот.ру, количество вакансий на позицию Python-разработчика достигает до 203 мест ежемесячно, однако и предложение труда уверенно растет: так, команда Skillbox посчитала, что на одно место программиста Python в 2023 году приходятся сразу 20 кандидатов.
Почему Python?
Python — идеальное решение для каждого и предлагает:
Доступность — из-за простого синтаксиса язык понятен даже новичкам;
Кроссплатформенность — интерпретаторы Python поддерживаются большинством операционных систем;
Разнообразие применения — язык нужен везде: от веб-разработки до геймдева;
Интегративность — Python можно применять в сочетании с другими системами и встраивать его коды как компоненты.
Парсим яндекс диск при помощи Python
В данный момент я работаю контент-менеджером в «крупном» интернет — магазине. В моём случае, это больше 100 000 позиций.
Иногда приходится сталкиваться с такой проблемой: поставщик присылает фотографии со ссылками на яндекс диск. Это крайне неудобно, потому что приходится ходить по каждой ссылке и скачивать изображение к себе, а затем уже загружать на сервер и т.д.
Готового решения я не нашел и решил написать свою реализацию работы с яндекс диском. Хорошо, что я знаю python.
У меня было 2 версии программы:
когда по ссылке находится папка с картинками, python скачивает эту папку как зип файл, затем распаковывает. Все манипуляции записываются в csv файл, путь до файла с картинками
когда по ссылке идёт только одна картинка, в данном случаи все немного проще, не нужны лишние действия с распаковкой картинок
p.s. ещё были 2 побочные небольшие программки: 1-я для уменьшения размера картинки, 2-я для переименования картинок (менялся пробел на дефис)
Приступим к реализации
скачать и установить python c официального сайта https://www.python.org/downloads
открыть любимый редактор кода (я использую vscode) https://code.visualstudio.com
подключить следующие стандартные библиотеки: urllib.parse, csv, os, zipfile. Установить библиотеку requests https://pypi.org/project/requests/ (для отправки запроса на сервер)
для полного фен-шуя можно использовать виртуальное окружение, дабы не засорять систему ненужными пакетами. Подробнее о virtualenv можно ознакомится по ссылке https://docs.python.org/3/tutorial/venv.html или же использовать poetry.
Ссылки на яндекс диск имеют вид: https://disk.yandex.ru/d/xNBn7lE1_Y5knQ . Чтобы их можно было скачать, они должны быть публичными.
Обратимся к API яндекс. После ключа public_key=»вставляем_ссылку_на_файл»
В ответе мы получаем json, из которого нам нужно получить значение по ключу href. Полученное значение и будет нашей прямой ссылкой к файлу.

Пожалуй, на этом хватит теории, теперь, постараюсь внятно объяснить, как всё это можно применить в контексте python.
# создаем новый файл и подключаем нужные нам библиотеки
import requests
from urllib.parse import urlencode
import csv
import os
import zipfile
Для начало создадим функцию, которая будет возвращать нам ссылку для скачивания:
final_url = base_url + urlencode(dict(public_key=public_link))
response = requests.get(final_url)
parse_href = response.json()[‘href’]
return parse_href
Файлы могут быть в разных форматах: ссылки могут быть на одну или несколько картинок. В первом случае можно напрямую скачивать картинку по ссылке. Во втором, если по ссылке несколько картинок, то при скачивании мы получаем архив, который требует дополнительных действий (распаковку).
Далее, мы скачиваем файлы и в зависимости от его типа выполняем действия: просто записываем в результирующий файл или же переходим к его распаковке с последующей записью.
В итоге, мы получаем файл result_data.csv со ссылками на фотографии на нашем жестком диске:

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

А я всего лишь пишу калькулятор на Python

MajorDom v1.0 — От голосового помощника к умному дому
В 2019 году я впервые узнал про возможность распознавания и синтеза речи на языке python. Гугл ассистент, сири, кортана и другие ассистенты тогда были еще более ограниченными и беспомощными, чем сейчас. О добавлении своих команд речи не шло от слова совсем. Тогда я и загорелся идеей создать своего голосового помощника, который не будет уступать даже Джарвису Тони Старка.
В процессе работы над ядром, начал задумываться, где этого ассистента хостить. Держать ноут постоянно включенным не вариант, а других компьютеров у меня не было. На помощь пришли одноплатные компьютеры raspberry pi. Я хотел, чтобы мой голосовой ассистент мог включать и выключать свет, управлять светодиодной лентой и шторами. С такими задачами отлично справляется ардуино. Оставалось только найти способ передавать команды с распбери. Использовать wifi и bluetooth не хотел с самого начала. Нашел в интернете информацию про модули nrf24l01, попробовал, понравилось.
Такая система работала довольно неплохо. Но было два ключевых недостатка:
Радиус действия ограничивался чувствительностью микрофона. С хорошим микрофоном все работало идеально в пределах комнаты, но не дальше.
Для каждого параметра каждого устройства надо было добавлять одинаковые голосовые команды, в которых отличались только адрес и сообщение. Неудобно, но пока терпимо.
Для решения первой задачи, в голосового ассистента я добавил http интерфейс на джанго, который мог принимать аудиофайл или строку. В комбинации с мобильным приложением на котлине, я получил беспроводной микрофон, таким образов расширив зону работы до радиуса действия роутера, то есть с комнаты до всей квартиры и даже чуть больше. Носить телефон по дому не всегда было удобно, так что через пару дней появилось приложение и на часах на wear os, что оказалось невероятно удобным решением.
Но я захотел большего: иметь доступ к своему помощнику всегда, а не только дома. Самым простым вариантом оказалось использование телеграм-бота как интерфейс ввода-вывода. Но меня не покидало ощущение, что бот — это что-то не то. Я решил оставить его только как временное решение, пока занят разработкой чего-то лучше.
Я хотел получить возможность использовать свое мобильное приложение для доступа к ассистенту на расстоянии. Надо было всего лишь придумать способ отправить запрос на локальный джанго сервер, не находясь при этом в локальной сети. Я был готов открывать и пробрасывать порты на роутере, но провайдер не дал мне белый ip. Тогда я попробовал ngrok. В первое время работало хорошо, но в бесплатной версии сервер периодически падал и менял адрес. Вариант с впн-туннелем я отбросил почти сразу. Стоимость vps была равна стоимости подписки на ngrok, но реализация была в разы сложнее.
Тогда я вспомнил, что у меня есть бесплатный хостинг для php сайтов на beget и переизобрел Long Polling и очереди. Реализация была максимально простой: приложение отправляло запрос на хостинг. Там php код добавлял тело (json) запроса в конец массива и записывал в локальный файл. Малина дома каждую секунду отправляла запрос на чтение этого файла, после чтения массив чистился. Таким образом мне удалось отправлять команды домой из любой точки планеты страны! Аналогичным образом я сделал получение ответа от ассистента: продублировал реализацию и поменял роли. Два файла и четыре эндпоинта на бесплатном хостинге на пыхе дали мне стабильную двустороннюю связь с моим домашним помощником. Чуть позже научил ассистента самостоятельно отправлять мне сообщения, например, с номером аудитории следующей пары в начале каждой перемены. Не успел всем похвастаться в колледже, как кто-то стал спамить мне домой. Пришлось добавить авторизацию: логин и пароль задавались хардкодом в приложении, а на сервере была проверка в стиле.
if ($login == ‘markparker’ && $password == ‘MyVeryStrongP@ssw0rd!’) <>;
Репозитории приложения были приватные, а сервер был вообще без репы (зачем репа на один файл до 100 строк?), так что такого уровня безопасности мне более чем хватало.
Чуть позже в системе появился первый автоматический триггер команды. Через небольшой костыль в моем приложении я смог ловить событие, когда на телефоне срабатывает будильник. Этот триггер запускал первый полноценный сценарий: одновременно открывались шторы, ассистент озвучивал время, погоду и расписание пар в колледже. Если в комнате все еще было темно, плавно включалась лампа. В этот момент я чувствовал себя настоящим Тони Старком.
Тогда я захотел добавить больше автоматических сценариев, используя датчики движения, присутствия, освещенности и так далее. В этот момент стал сильнее ощущаться второй недостаток, о котором я писал ранее. Появилось много дублирования кода, работать с которым становилось уже не так удобно. В проекте была только сущность команды, не было понятия устройств и триггеров. И тогда до меня дошло, как сильно вырос мой голосовой ассистент: я уже делал полноценный умный дом, а не вопросно-ответного помощника.
Это осознание привело меня к решению отделить голосового ассистента и сделать умный дом самостоятельным проектом, ориентируясь уже на управление устройствами, а не на голосовые команды. И я решил делать это сразу по-взрослому, с полноценным сервером, базами данных, авторизацией и мобильным приложением. Чуть позже преподаватель в колледже подсказал, что вместо моего костыля с записью массива в файл на php, можно использовать вебсокеты. Именно так я и реализую позже управление устройствами через интернет. Спасибо, Александр Анатолиевич!
В остальном общая концепция не изменилась: хаб в виде одноплатного компьютера управляет ардуинами через радиомодуль nrf24l01. Подробнее про архитектуру я расскажу в следующей статье.
«Росатом» представил самый большой в России принтер для 3D-печати
👏Важный шаг в укреплении технологического суверенитета и развитии промышленности нашей страны! «Росатом» представил выставке «Металлообработка 2023» в Москве уникальную установку – самый большой в России 3D-принтер для металла, который создает изделия из порошка с помощью лазера.

Раздается головоломка Капитал Шоу на Ич.ио для тех, кто хочет поностальгировать по передачам 90-х- 00-х



Почувствуйте себя участником популярной телевизионной викторины Капитал Шоу отгадывая слова по теме загаданной ведущим и выигрывайте различные призы. После того как вы победите в трех основных турах основной игры, у вас будет возможность сыграть в Супер Игру и выиграть супер призы, такие как Автомобиль, Мотоцикл и даже Танк или Подводную Лодку! В игре присутствует юмор и оригинальные шутки от ведущего.
Зарабатывайте виртуальную игровую валюту и за нее разблокируйте новые локации. За победу на каждой локации получайте ачивки.
Игра порадует вас красочной рисованной графикой в стиле пиксель-арта, а в качестве музыкального сопровождения вы услышите как легкие мотивы летнего джаза от известного голливудского композитора Кевина Маклеода, так и электронную музыку и даже экзотические африканские ритмы на локации Африка.
Играйте на любой из тринадцати уникальных локаций:
Остров Сокровищ — это новая и очень необычная локация. Вы будете играть на побережье красивого пиратского острова в Карибском Море, на котором пираты припрятали свои сокровища, а в море мимо вас будут проплывать парусные корабли.
Дикий Запад — Действие происходит в пустынной местности среди кактусов на юго-западе Америки конца 19-го века . Вдали виднеется железная дорога с проезжающими мимо поездами. Для этой локации был создан специальный стилизованный саундтрек, а ведущие одеты в костюмы соответствующие месту и времени.
Армагеддон — Развалины некогда процветающего города находятся в огне, а с неба падают огненные астероиды, и все это под соответствующее музыкальное сопровождение.
Домик в Деревне — вернитесь в лето, в деревню с огородом и подсолнухами и вдохните чистый воздух свободы.
Африка — новая живописная локация в африканской саванне, посвященная выпуску телепередачи начала 2000-х снятому в Африке. Для этой локации был создан специальный саундтрек.
Солнечный Сочи — насладитесь солнцем, морем и пальмами на локации вдохновленной игрой Leisure Suit Larry 7.
Волшебный Лес — живописная и очень красочная локация в сказочном стиле.
Лунная База — занимательная фантастическая локация с множеством анимированных элементов.
Хэллоуин Пати — живописная локация на кладбище с привидениями.
Киберпанк 2083 — Локация из будущего вдохновленная научно-фантастическими фильмами и играми.
Автосвалка — необычное и очень живописное место с альтернативным ведущим, крутым байкером Валерой, который словно прибыл к нам из вселенной Full Throttle.
Новогодний Огонёк — праздничная зимняя локация cо снегом, новогодней ёлочкой и Дедушкой Морозом.
Подземелья Кремля — ремейк классической студии из DOS игры.
Выбирайте себе оппонентов по вкусу:
Лесная Братва
Все соперники различаются по уровню IQ и ведут себя как настоящие живые игроки.
В игре есть три словаря:
Классический — образца 1994 года идентичный словарю DOS игры, который был намеренно добавлен в игру без изменений и с сохранением всех орфографических ошибок присутствующих в оригинальной игре «ПЧ» Вадима Башурова 1994 года.
Современный — основан на Классическом словаре, из которого были удалены все потерявшие актуальность темы и слова, и добавлены как абсолютно новые темы (Транспорт, Интернет, Компьютеры, Стройка и Ремонт, Бухгалтерия, Космос и др.), так и новые слова в уже существующие темы.
Детский — адаптирован для наиболее юных игроков.
Для каждого словаря в игре ведется отдельная статистика рекордов.
Кроме того у вас будет возможность выбрать из нескольких вариантов ведущего игры, валюту и саундтрек для каждой локации.
Игра активно разрабатывается и периодически обновляется. С каждым обновлением добавляются новые возможности, дополнительный контент и делаются исправления. В планах на будущее добавить еще больше новых классных фишек!
Статус В разработке
Платформы : Windows, Android
Дата выхода :11 октября 2021 г.
Рейтинг 5.0 из 5 звезд
Сделано с помощью: GameMaker: Studio
Средняя сессия : Несколько минут
Ввод: Клавиатура, Мышь
Субтитры для специальных возможностей

Сам себе игровая консоль: превращаем планшет с нерабочим тачскрином в игровой девайс из 8 кнопок и микроконтроллера

К сожалению, в наше время многие старые, но весьма неплохие по характеристикам гаджеты отправляются напрямую в помойку, и их владельцы не подозревают, что им можно найти применение. Сервер, мультимедийная-станция, да даже просто как TV-приставка — люди в упор не замечают сфер, где старенький планшет мог бы быть полезен. Но как быть, если посвящаешь жизнь портативным гаджетам, кодингу и копанию в железе? Правильно: сделать довольно мощную игровую консоль из старого планшета самому! Сегодня вам расскажу, как я сделал свою портативную приставку из планшета с нерабочим тачскрином, Raspberry Pi Pico и 8 кнопок! За рабочим результатом прячется несколько дней работы: поиск UART на плате, разработка контроллера геймпада на базе RPi Pico, написание приложения-сервиса, которое слушает события и отправляет их в подсистему ввода Linux в обход Android. Интересно? Тогда жду вас под катом!
❯ Мотивация
Прошло уже практически 10 лет с того момента, как у меня появилась моя первая портативная консоль. Несмотря на то, что я был заядлым ПК-игроком, я уже успел посмотреть на PS3 и PSP, но денег на их покупку у меня особо не было, да и к тому времени уже был в наличии Android-планшет. Но к моему 13-летию в 2014 году, когда я ходил и выбирал себе будущий девайс на день рождения, отец и мама решили подарить мне мою первую портативную консоль. Изначально, я уговаривал её купить мне целых два девайса, но бюджет был ограничен 4.000 рублей, а я хотел взять смартфон Fly IQ239 и консоль JXD S601 одновременно:

Однако, увидев здоровую 7-дюймовую консоль в магазине TREC (думаю, жители южной части РФ помнят такой), мама уговорила меня взять именно её, мотивируя это «ну и чего ты будешь тыкаться в этот мелкий экран? Возьми большую». После покупки гаджета, я был доволен: играл какие-то игрушки с ретро-платформ, устанавливал игры на Android, сидел в ВК через Kate Mobile. Что еще нужно было школяру? Однако, планшет прожил у меня недолго: с очередного лага я психанул и ударил по нему кулачком, унеся на тот свет и дисплей и тачскрин. Так консолька и пролежала в подвале около 8 лет. Впрочем, мне продолжали импонировать подобные устройства и в прошлом году я купил и написал про несколько подобных девайсов.

Несколько месяцев назад, мой читатель Кирилл Севостьянов с Хабра прислал мне HTC HD2 в качестве донора и планшет Prestigio PMP7170B3G, который был рабочим, но… у него отказал тачскрин. Я всё думал, чего бы с ним сделать и решил реализовать игровую консольку своими руками из подручных средств. Идея крутилась в голове довольно давно, но реализовал я её только сейчас.
❯ Что нам нужно сделать?
Итак, что должно быть у портативной консоли? Чипсет, дисплей, звук, ОС — это всё нам уже предоставляет планшет. Нам остаётся лишь сделать свой геймпад. Давайте подумаем, что нам будет нужно для того, чтобы его сделать и передавать от него события на планшет:
Контроллер для геймпада: тут нам подойдет практически любой микроконтроллер, который работает от 3.3в. Выбор большой: Arduino Pro Mini 3.3v, ESP32, RPi Pico. Я остановился на последнем: недавно я взял себе две штучки «пощупать» их — и они мне очень понравились!
Физический интерфейс: с планшетом нужно как-то общаться. У нас есть три варианта: USB (не факт, что поддержка преобразователей включена в ядре), UART и SPI/I2C на пятачках тачскрина (потребуют написания драйвера т. к. в android-устройствах нет прямого доступа к SPI/I2C из userland’а). Я остановился на UART: его легко найти на большинстве китайских планшетов, а если не получилось — то на помощь может прийти схема платы.
Программная реализация: как это будет работать? Я решил реализовать геймпад в виде сервиса на Android, который слушает состояния кнопок с UART и «инжектит» события напрямую в драйвер ввода. Таким образом, поддержка нашего геймпада появляется даже в самой системе — можно управлять менюшкой или приложениями как с клавиатуры!
С планом определились, пора начать с программной части: сначала нам обязательно понадобится ROOT-доступ. Его получение на разных девайсах отличается — на prestigio уже был порт CWM и я просто поставил SuperSU. Без ROOT доступа мы не сможем использовать UART!

Теперь нам нужно найти пятачки UART на плате. Разведен он не везде, но в случае устройств на MediaTek — почти всегда, ещё и пятачки подписаны. На моём планшете он нашёлся сразу: был между двух металлических экранов и соответствовал 4-ому каналу UART. Получить к нему доступ можно в /dev/ttyMT3. Я использую ESP32 в качестве UART преобразователя: подпаиваемся к RX/TX, запускаем putty и заходим в adb shell. Определяем бодрейт (скорость) нашего UART порта — на MediaTek он обычно равен 921600, на других чипсетах — 115200. Пытаемся что-то вывести и хоба — мы уже можем «поболтать» с планшетом!

❯ Приложение-сервис
Итак, у нас уже есть доступ к UART и мы можем общаться с планшетом из внешнего мира. Но получить события с кнопок пол дела, нужно их ещё и послать в систему. Для этого есть целых три способа:
InputManager.injectInputEvent — именно этим методом пользуется команда input, которую вы можете использовать через adb. Но увы, он работает только при наличие разрешения INJECT_EVENTS, который доступен только системным приложениям — находятся они в /system/app и подписаны тем же сертификатом, что и остальная прошивка.
Модуль uinput дает возможность создать виртуальное устройство ввода и посылать события из userland’а — т. е. из прикладного приложения. У моего планшета было устройство /dev/uinput, но lsmod показывал, что сам модуль не загружен. Так что отметаем — он есть не везде.
Прямой инжект событий в character устройство — весьма грязный хак, который позволяет инжектить события, не притворяясь системным приложением, но имеет некоторые ограничения. Именно его я и выбрал и о ограничениях ниже.
Сначала нам нужно узнать, какие кнопки поддерживают загруженные устройства ввода в системе. Для этого используем команду getevent -li. Там есть разные устройства ввода, в том числе и тачскрин (если вам нужно симулировать нажатия на экран), мне же подошёл драйвер физических кнопок mtk-kpd. Он занимается обработкой кнопок громкости, включения и т. п. Тут важно обратить внимание на то, что если попытаться послать кнопку, которое устройство не реализует (например пробел), то ничего не произойдет:

Инжект событий я писал на C, т. к. это требовало прямой записи input_event, а в Java прокинул его через Jni. Концепция простая: открываем устройство /dev/input/event2 и посылаем в него события ввода и синхронизации (это обязательно!), которые затем Android читает и обрабатывает:
#include <linux/uinput.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <android/log.h>
#include <jni.h>
int uinput;
extern «C» JNIEXPORT void JNICALL Java_com_monobogdan_inputservicebridge_InputNative_init(JNIEnv *env, jclass clazz) <
uinput = open(«/dev/input/event2», O_WRONLY);
__android_log_print(ANDROID_LOG_DEBUG , «Test», uinput >= 0 ? «Open event OK» : «Failed to open event»); >
void emit(int fd, int type, int code, int val) <
struct input_event ie; ie.type = type;
ie.code = code; ie.value = val;
ie.time.tv _sec = 0;
ie.time.tv _usec = 0;
write(fd, &ie, sizeof(ie)); >
extern «C» JNIEXPORT void JNICALL Java_com_monobogdan_inputservicebridge_InputNative_sendKeyEvent(JNIEnv *env, jclass clazz, jint key_code, jboolean pressed) <
__android_log_print(ANDROID_LOG_DEBUG , «Test», «Send»);
emit(uinput, EV_KEY, key_code, (bool)pressed ? 1 : 0);
emit(uinput, EV_SYN, SYN_REPORT, 0);
>
Основной обработкой занимается сервис, который я реализовал в отдельном потоке: он слушает события с UART и посылает соответствующие изменения состояния через sendKeyEvent. На вход приходят простые сообщения вида:
U L где U/D — нажато, не нажато, а L — однобайтовый идентификатор кнопки. В случае L — это влево, R — вправо и т. п. Вся доступная раскладка хранится в словаре. Причём само чтение из UART реализовано костылем с чтением «чужого» stdout, т. к. android-приложения не умеют сами по себе работать с root правами. В теории, это могло дать неприятный оверхед, но на практике никакого серьезного инпут лага это не создает. Не забываем сделать устройство event записываемым — ставим ему права 777:
package com.monobogdan.inputservicebridge;
public class InputListener extends Service <
private static final int tty = 3;
private InputManager iManager;
private Map<Character, Integer> keyMap;
private Method injectMethod;
private Process runAsRoot(String cmd)
<
try <
return Runtime.getRuntime().exec(new String[] < "su", "-c", cmd >);
>
catch (IOException e)
<
e.printStackTrace();
return null;
>
>
@override
public void onCreate() <
super.onCreate();
// According to linux key map (input-event-codes.h)
keyMap = new HashMap<>();
keyMap.put(‘U’, 103);
keyMap.put(‘D’, 108);
keyMap.put(‘L’, 105);
keyMap.put(‘R’, 106);
keyMap.put(‘E’, 115);
keyMap.put(‘B’, 158);
keyMap.put(‘A’, 232);
keyMap.put(‘C’, 212);
InputNative.init();
try <
runAsRoot(«chmod 777 /dev/input/event2»).waitFor();
> catch (InterruptedException e) <
throw new RuntimeException(e);
>
Executors.newSingleThreadExecutor().execute(new Runnable() <
@override
public void run() <
Process proc = runAsRoot(«cat /dev/ttyMT» + tty);
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
while(true)
<
try <
String line = reader.readLine();
if(line != null && line.length() > 0) <
Log.i(«Hi», «run: » + line);
boolean pressing = line.charAt(0) == ‘D’;
int keyCode = keyMap.get(line.charAt(2));
Log.i(«TAG», «run: » + keyCode);
InputNative.sendKeyEvent(keyCode, pressing);
>
>
catch(IOException e)
<
e.printStackTrace();
>
/*try <
Thread.sleep(1000 / 30);
> catch (InterruptedException e) <
e.printStackTrace();
>*/
>
>
>);
>
@override
public IBinder onBind(Intent intent) <
return null;
>
>
Таким образом, если мы отправляем с ПК «D L» — система считает, что мы зажали стрелку влево, а U L — считает что мы отпустили. Но если mtk-kpd поддерживает стрелки и еще некоторые действия без каких либо проблем, то enter в список обрабатываемых кнопок не входит: придется мудрить! И тут нам приходит на помощь механизм трансляции кодов кнопок в действия: они хранятся в специальных файлах .kl в /system/usr/keylayout/. Я назначил DPAD_CENTER на… кнопку регулировки громкости звука! Ну, а почему бы и нет. 🙂 Таким образом можно переназначить уже имеющиеся кнопки громкости на, например, start/select.

❯ Геймпад
После того, как сервис был готов и отлажен, нужно было реализовать хардварную часть проекта — сам геймпад. В качестве контроллера я, как уже говорил, выбрал Raspberry Pi Pico на базе МК RP2040 — бодреньком контроллере с двумя ARM Cortex-M0 ядрами. Стоит копейки, а в отличии от ESP’шек, его SDK не такое перегруженное и выглядит более приближенным к bare-metal.

На данный момент, я решил развести все кнопки на бредборде — макетной плате без пайки, т. к. макеток для пайки у меня под рукой не было. Сделал примитивный геймпад:

Развел на соответствующие GPIO:

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

А почему бы не попробовать поиграть в какую-нибудь игру? Ну мы же консоль вроде делаем: берём эмулятор NES, биндим кнопки в настройках и наслаждаемся игрой в Марио!
❯ Заключение
Реализация этого проекта заняла у меня не так уж и много времени: всего около 3-х дней работы по вечерам. Вероятно кто-то спросит: «а чего ты просто Bluetooth геймпад не купил?». Так это не прикольно ведь. Гораздо приятнее играть в девайс, к которому ты приложил руку сам. Более того, не у всех старых планшетов есть BT. Обошёлся на данной стадии проект недорого: планшет мне подарили бесплатно (точно также у вас дома может лежать подобный), RPi Pico — 350 рублей, кнопки по 10 рублей/штучка.
В целом, я сам по себе обожаю копаться в различных железках и их софтварной части (вспомнить хотя-бы статью про перекомпиляциюu-boot из вендорских исходников для нонейм консоли), а созидать что-то свое вообще вызывает какие-то нереальные всплески эндорфина — оно и понятно! 🙂
Однако несмотря на то, что мы уже имеем рабочий «прототип», проект далёк от завершения: я намерен довести его до конца и окончательно перевоплотить старый планшет в автономную игровую консоль (и рассказать об этом во второй части статьи). Для этого мне понадобится распечатать корпус и кнопки на 3D-принтере. К сожалению, у меня в городе ни у кого особо нет 3D-принтеров, поэтому начну копить на Ender 3, а от вас, читателей, с удовольствием почитаю мнение в комментариях и советы касательно выбора принтера!
Статья подготовлена при поддержке TimeWeb Cloud. Подписывайтесь на меня и @Timeweb.Cloud, чтобы не пропускать еженедельные статьи про моддинг различных гаджетов!

Отчёт и благодарность Силе Пикабу
Здравствуйте, нежноуважаемые пикабушники!
Мне очень неловко. Я исчезла, хотя обещала появиться в январе, и, могло показаться, что, получив оперативную и душевную помощь от вас, я слилась в небытие.
Был цейтнот, школьная нагрузка была очень серьёзной. В настоящее время стало полегче. К тому же именно сейчас по проекту есть очень хорошие результаты, и я могу ими поделиться с вами.
С этим проектом наша команда участвовала в двух конкурсах и одной научно-практической конференции:
1. Проект стал победителем в заключительном этапе » Городского конкурса проектов «Юные техники и изобретатели – 2023»;
2. Занял призовое место с Дипломом 3 степени на конкурсе «Новые вершины Поиск НИТ»;
3. Занял призовое место в заключительном этапе городской открытой научно-практической конференции «Инженеры будущего».

Для первого опыта, считаю, что это замечательный результат.
Очень хочу вас всех поблагодарить потому, что именно ваше доброе участие так сильно меня вдохновило и придало уверенности!
Ведь слова поддержки очень важны, а вы предлагали поддержку не только на словах! Я всегда знала, что если в работе случится тупик, если мне не хватит знаний и накатит отчаяние, то я смогу обратиться к пикабушникам @gurux13, @girogor333, @havaec. Я по-настоящему чувствовала, что за моей спиной сила Пикабу! Спасибо вам!
Работа над проектом продолжается и сейчас, т.к. есть некоторые ответственные перспективы на будущее.
Если вам интересно, то можете посмотреть сайт проекта, там, кроме полезной информации, будет немного пруфов наших достижений и наши счастливые лица)
А вот и сам герой, благодаря которому я познакомилась с благородством и силой Пикабу. Встречайте: Тренажёр решения задач по теме графики функций!
Скачать exe-файл (для системы Windows 7/10/11) можно по ссылке https://disk.yandex.ru/d/phzR8yJKwJn9OQ .
Тренажёр был написан на Python, поэтому поиграть в графики функций получится только на компе или ноутбуке.
Ответ Goodwin85 в «Почему бедные остаются бедными?»
Моя история такая-же, только везения там было побольше:
В 8ом классе записался на кружок программирования (просто было интересно что за фигня такая). В итоге дурацкая манера преподавания оттолкнула меня и я решил что подобной скукотой заниматься точно не буду.
В 10ом классе хотел пойти на кружок 3D моделирования. Оказалось это кружок программирования. Решил, что раз пришел, то надо немного походить. В итоге препод оказался просто огонь и я остался. Просиживал там сутками и даже на каникулах.
По выпуску из школы к меня был больгой багаж проектов и знакомств с выпускниками этого кружка. Это позволило устроиться на первую работу где часть из них уже находились. Собеседование заняло около полугода (пришлось выучить весь том Кормана с теоремами и доказательствами). Однако на работе была дикая скука и очень монотонные задачи. В итоге уволился через год и 10 месяцеви решил что программирование не мое.
Занялся преподаванием кружка робототехники в той же школе и параллельно с пацанами мутили стартап по коптерам (тогда это была хайповая тема, как сейчас нейросети). Так и перебивался: на пожрать и раз в месяц сходить в бар с друзьями хватало.
Однако все перевернулось с появлением женщины. Желание жрать побольше подтолкнуло найти работу в той сфере, в которой я что-то умел: программировании. Получилось так, что в курилке школы встретил давнего знакомого, который рассказал что у ни в компании закупают GPU для вычислений. Пацан был сисадмином и деталей использования не знал. А я как раз по приколу прошел курс по GPGPU. На след день я уже пришел в офис компании ни с кем не договариваясь. Поднялся на этаж, спросил у какого-то сотрудника где отдел кадров. В отделе кадров меня спросили записывался я или нет. Я ответил что нет. Но они, немного прифигев, отвели меня к главному по разработке (вроде тогда он еще не был CTO).
Главный по разработке спросил, тоже немного прифигев, в итоге пригласил меня на неделе зайти на собес. Собесили меня по двум направлениям: C++ и Java. Оба этих собеса я провалил, но, видимо, моя настойчивость их убедила и меня отдали по остаточному принципу отдел компьютерного зрения. Потом я уже понял, что директор считал, что туда можно засадить побольше студентов и они уже что-то сделают.
В отделе я проработал почти два года. За это время успело произойти несколько событий:
1. Начался бум нейронных сетей. Тогда, как и в любой начинаюшейся сфере, можно было почти ничего не делать и поднять неплохие деньги. Чем и занялся мой начальник. На мощностях компании он начал участвовать в конкурсах по машинному обучению на kaggle
2. Начальник показал мне примеры работы нейронной сети и меня очень заинтересовала ее ультимативная (уже по тем временам) точность, по сравнению с классическими алгоритмами. Я начал изучать тему с его помощью
3. Начальник увалился и в место него назначили меня (в 24 года и вообще не понимаюшего принципов управления)
По итогу в этой компании на должности начальника отдела я сгорел за 6 месяцев и уволился.
Далее все развивалось стремительно. на тот момент никто не умел собеседовать Data Scientist-ов, коим я и был. При этом платили дофига, даже если ты почти ничего не умеешь. Я щелкал собеседования как орешки и проходил в любую интересующую меня компанию. Мой карьерный рост был стремителен. Полагаю что запись в трудовой о начальнике отдела добавляла немного мотивации принять меня на должность повыше.
Сейчас я Архитектор с приличной зп.
Когда мне кто-то говорит, что люди, которые хорошо зараатывают, добились этого исключительно своим упорством и трудом (зачастую в таких высказываниях еще проскакивают нотки намеков на исключительность таких людей) — я смеюсь им в лицо. На каждом моем шаге в карьере не присутствовало никакого хитрого плана. Это было чистейшее везение, что я выбрал именно этот путь. Несомненно, мне пришлось приложить немало усилий, но я знаю достаточно людей которые трудятся и трудились больше меня.
В этом и кроется самая большая несправедливость — есть люди (например программисты) за тот же самый труд (а временами и меньший) получают сильно больше. Просто потому что в их сфере деятельности еcть деньги. К примеру мой отец — пожарный. Всю жизнь спасал людей и несколько раз чуть не погиб, без преувеличения. Его зарплата, когда он еще работал, была в несколько раз меньше моей, при этом ни одно из сделаных мной на тот момент решений особой пользы обществу не принесло.
Как с этим бороться? Читать правильные книжки, развиваться самому и развивать классовое сознание насколко позволяют силы. Стремиться к стандартам Европпы означает получить те же яйца, только в профиль.

Продолжение поста «Сделай свой мотоцикл умным за 150$»

Привет, я NoAdO. В прошлый раз мы договорились, что я вернусь, когда мне будет что добавить про этот Андроид Авто девайс. Если не застали начало, сходите туда, там интересно. Это не очередной китайский навигатор, это иначе устроено. А мы тут продолжаем разговор про Андроид Авто.
Начнём! Если описать очень коротко: много мелких шероховатостей, жить можно, менять не особо хочется. А если подробно, то я не буду тратить ваше время на связывание набора отдельных фактов в красивый текст. Это скорее сортированные заметки. Пикабу не даёт возможности редактировать пост сильно позже, а я не вижу смысла на каждый чих писать по посту, так что если вы читаете это через несколько месяцев, эта же статья вся целиком есть у меня на сайте, возможно там актуальней.
• Разряд батареи есть, но основной потребитель – карты. то есть связь с АА вносит небольшой вклад, а вот навигация в целом батарейку-то поджирает. Катнуть по городу часика 3 можно, на весь день уже придётся думать питание для телефона. Кажется что девайс не имеет смысла, но телефон что лежит на зарядке в кофре это не то же что жёстко закрепленный на руле. Разряд на моём устройстве порядка 8% в час.
• Экран ГУ АА спокойно реагирует на чистую и новую перчатку! У меня ни один телефон так не делал. Даже WP серия Alpinestars толстые и неуклюжие могут протыкнуть в экран. В паре с крупными кнопками им вполне реально управлять, сидя за рулём. С поправкой на то, что вы при этом на дорогу не смотрите, конечно. За это прям жирный плюс, раньше я так не мог.
• крепление на мотоцикл “к стеклу” удобное с точки зрения положения экрана, но неудобное в плане прикручивания винтика. Подлезать туда рукой не очень удобно. Но это в моём случае, не вижу смысла больше выдвигать его вперед.
• Видимость экрана – отличная, покатался в солнечную погоду, ни разу не испытал проблем с видимостью, хотя и целенаправленно не пытался “засветить” себе солнцем. Буду продолжать наблюдение.
• Самая высокая температура при которой пока ездил это +26 по пробкам. Оплавления контактов, отключения от перегрева или чего-то такого – нет.
• Самый долгий дождь что он пережил — 4 часа непрерывной работы под дождём, у меня даже старый дождевику промок а этот работает себе и работает. Влагозащиту считаю проверенной.
• Я отстёгиваю ГУ АА когда куда-то ухожу, но один раз забыл на рабочий день, никто не украл. Возможно путают с планшетной приборкой.
• Логотип загрузки можно поменять. На свежих прошивках пару нужно класть на microSD карту, не на USB флешку. Я сделал папочку с логотипами и прошивкой, можно пользоваться. Пример:

Как в лучших домах Парижа жидких гусях, хехе. И да, в низком положении стекла получается низковато, но крепёж печатный, я его немного переделаю и всё.
• Момент по SRL-Mesh (кстати есть пост про эту встройку) и аналогичным “умным” гарнитурам, которые управляются через приложение. Если вы подключите к гарнитуре и телефон и ГУ АА, может быть баг при звонке как у меня был. Звонок сбрасывался, а если я звонил то тишина. Решилось так: ГУ АА подключил как первый телефон, а мобилку как “выборочное подключение”, что бы это ни было. Вроде работает, буду тестить дальше. Если управление через приложение не нужно то отключайте телефон от гарнитуры нафиг, звук в любом случае идёт через АА.
• Bluetooth пары не сбрасываются даже при сбросе на заводские настройки. Надо идти в Настройки – Bluetooth и там удалять. При этом спаривание телефона делается там же или со стороны телефона, а вот спаривание гарнитуры надо делать не там а через кнопку Bluetooth Headset – неочевидно.
• не сразу удалось разобраться с уведомлениями Стрелки. Был звук о пришедшем уведомлении и короткий текст, как в статье. А я привык слушать “пи-пи камера блаблабла”. Нужно было переключить канал в телефоне и надавать Стрелке максимум разрешений чтобы она стартовала. Привет Xiaomi. Но если вы привыкли кататься и реагировать только на “пипипи” а тип камеры на экране смотреть то да, будет хуже.
• PowerAMP на моём телефоне вызывает отвалы АА с маленькой надписью на чёрном фоне которую я на ходу не успеваю прочитать. Поменял музыкальное приложение – проблема ушла.
• Далеко не все приложения будут работать в режиме АА. Может оказаться что именно ваше приложение (например AlpineQuest) не работает в АА и не планируется. Или работает (GuruMaps), но не с АА а только с Carplay. Смотрите поддержку заранее, если это приложение нечем заменить
• Я.Карты в режиме навигатора работоспособны, но вот тыкнуть в произвольное место чтобы туда поехать – нельзя. Не ясно почему так. Зато можно построить маршрут в телефоне а продолжить – в ГУ АА. И не особо удобно в целом работать с картой – “щипка” нет, перемещение карты подлагивает хоть и не критично. В повседневной навигации не мешает, но вот быстро глянуть участок дороги впереди не выйдет. И да, Яндекс только по подписке Плюс. Что карты, что навигатор. Подписка-то есть пока, но жирнючий дислайк Яндексу. Даже не за то что оно по подписке, а за то, что нельзя выбрать например АА+музыка — надо платить за всё включая ненужное.
• Я.Карты первое время у меня вообще молчали. Чтобы было только то что нужно, надо включить “подсказки на маршруте” в ГУ АА, а в приложении на телефоне – выключить ненужную хрень типа камер переходов и т.п.
• С гугл.картами проблем нет, кроме того, что они выглядят непривычно и иногда не до конца в курсе развязок. Например показывают, что поворот с 2 полос, хотя на деле с одной. Из Суздаля пытались провести через демонтированный мост. Больше не пользовался ими.
• 2GIS как навигационный сервис в целом норм. Знает места, не требует подписки и даже входа в аккаунт, навигационный интерфейс похож на Яндекс и выглядит привычно. Однако если ГУ АА перезагрузился, возврат на маршрут у меня может быть долгим или не произойти вовсе, в этом случае приходится “тыкать” через историю запросов. Ужасно раздражает. Но возможно дело опять в разрешениях/экономии батареи.
• Если АА будет перезагружен, то он восстанавливает и подключение и маршрут – удобно (у Яндекса и Гугла всегда, у 2гис иногда нет).
• Если запитать ГУ АА от USB розетки то при работе стартера устройство перезагрузится. Если от родного БП – то нет. Видимо в БП конденсатор.
• Есть момент с умными гарнитурами, описан в Bluetooth. Возможно только у меня, по крайней мере больше отзывов я не видел.
• PowerAMP вызывает отвалы, 2GIS иногда не возвращается до конца. Врядли дело в ГУ АА, больше похоже на баги приложений или проблемы с разрешениями или то что у меня АА на телефоне кастомно прошит. Опять же — другие люди о таком не делились со мной.
• Пока остаётся постоянный баг: “lost Wi-Fi connection”, встречается чаще в городе чем за городом, не зависит от скорости но возможно зависит от места. Встретился пока только у меня. Недавно в Москве усилили меры радиоэлектронного подавления и у меня дважды были отвалы на эстакаде у Сити, один раз на эстакаде Звенигородки, один раз на въезде в Лефортовский тоннель… кажется, есть некая закономерность но пока до конца не могу сказать. Решается как обычно, ребутом. Благо он быстрый, секунд за 20. Продавец посоветовал сбросить настройки сети у телефона и гарнитуры и привязать их снова. Проблема не ушла полностью но сильно уменьшилась. Высказывалось предположение что глюк при появлении сети возникает. Важно: у меня Xiaomi 12S Ultra, Android Auto там вообще быть не должно, он туда впилен в кастомной прошивке так что это тоже может быть причиной.
• Уровни громкости… странные. Кажется что до 25 идёт уменьшение приглушения, а выше уже дисторшн, усиление с искажениями.
• Почему-то при старте громкость ниже, даже иногда не хватает громкости гарнитуры. Но стоит зайти в настройки — звук — уровни и громкость возвращается даже при том что сами уровни я не трогал. Переписываюсь с продавцом но что-то не уверен что он меня понимает.
• И ещё один баг с которым я пока недоразобрался – Google ассистент иногда не говорит. То есть анимация есть, голоса нет. Либо он вещает в динамик (на ходу не слышно), либо в никуда. Не очень понятно на чьей стороне баг, но если вы не намерены читать и отвечать на переписку в Телеге… оно вам и не надо. Если намерены — ребут.
Ресурсы для самостоятельного изучения Java
Не так давно мы рассказывали о буме вакансий на IT-рынке. Особенно выгодные позиции занимает категория Java. Сейчас можно найти курсы, которые помогутизучить основы программирования в считанные месяцы. Есть крутой вариант освоения IT-профессий с помощью трудоустройства – Mate academy. Школа точно даст глубокие и качественные знания, научит кодить, подготовит к встрече с потенциальными работодателями и карьерно поддержит. Однако для поступления на такие курсы и лучшего усвоения материала со старта, стоит узнать некоторые азы и заранее подготовиться. Мы собрали рейтинг лучших ресурсов для самостоятельного изучения Java как на базовом, так и на профессиональном уровне.
Java Basics на платформе Mate academy
Java Basics курс от Mate academy – бесплатная возможность познакомиться с языком программирования Java с нуля. Для этого надо лишь зарегистрироваться на платформе. Здесь с первой темы можно узнать о типах данных и операциях над ними.

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

Уже после прослушивания первых лекций можно написать свою первую программу. Затем пройти тестовое задание, и в случае успешного выполнения – попасть на интервью, чтобы поступить в академию на бесплатный четырехмесячный интенсив с помощью трудоустройства. Оплата потом – процент от зарплаты в ІТ.
Javarush
Javarush – это интерактивный сайт для изучения Java программирования с нуля. Ресурс рассчитан как для новичков, так и профессионалов.

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

Есть минус – после нескольких уроков сайт требует оформить платную подписку, однако она не такая уж и дорогая. Большинство лекций являются бесплатными. Большинство лекций являются бесплатными.
Курс Java на Stepik
Stepik.org образовательная платформа и конструктор бесплатных открытых онлайн-курсов и уроков. Позволяет любому зарегистрированному пользователю изучать интерактивные уроки, используя видео, тексты и различные задачи с автоматической проверкой и мгновенной обратной связью. В процессе обучения можно вести обсуждение и задавать вопросы преподавателям. На этом ресурсе есть немало бесплатных курсов по Java. Например, “Легкий старт в Java. Вводный курс для чайников”, содержащий 26 уроков, 46 тестов и более сотни интерактивных задач.

Codecademy: курс Java
Codecademy – это интерактивная онлайн-платформа по обучению семи языкам программирования, в частности Java. Для начинающих здесь есть 25-часовой курс из 16 уроков. Все пользователи имеют собственный профиль. Для мотивации есть система поощрительных бейджей за выполнение упражнений.

Java на Codewars
Codewars – образовательное сообщество для программистов. а платформе разработчики программного обеспечения проходят челленджи, известные как ката. Эти дискретные упражнения вырабатывают ряд навыков в различных языках программирования и выполняются в интегрированной онлайн-среде разработки. На Codewars сообщество и прогрессия вызовов является геймифицированой, пользователи зарабатывают звания и честь за выполнение кат, вклад в каты и качественные решения. Стоит отметить, что учить теорию на платформе не удастся, а вот набить руку на практике, решая разнообразные задачи – именно то, что нужно. Хорошая платформа для Java-разработчиков, чтобы тренировать свои скиллы.

Уроки Java на YouTube-каналах
1) Derek Banas – опытный блоггер-разработчик, который утверждает, что готов научить вас основам Java всего за 30 минут. В плейлистах ты найдешь Java Video Tutorial, Java Algorithms и множество видео о других языках и технологиях.

2) Java Brains – блог, на котором полмиллиона подписчиков учат Java. Курсы рассчитаны в основном на программистов среднего и продвинутого уровней. Выбери плейлист и вперед!

3) FreeCodeCamp.org – проект, в котором опытные разработчики делятся опытом в своих же курсах. Начинающим рекомендуем выбрать девятичасовой Learn Java 8 — Full Tutorial for Beginners и четырехчасовой курс Intro to Java Programming — Course for Absolute Beginners.

4) Віртуальна академія – ютуб-блог на украинском языке, где учат не только Java основам. Для новичков здесь есть 85 видео пошаговых инструкций познания языка Java.

Книги по Java
- Учебное пособие “Thinking in Java” поможет освоить базовые принципы языка программирования.
- Герберт Шилдт “Java. Пособие для начинающих”.
- Файн Яков “Программирование на Java для детей, родителей, дедушек и бабушек”.
Вышеупомянутый Javarush составил список рекомендованных книг по Java.
JazzTeam.org собрали немало ресурсов для изучения Java. Рекомендуем также ознакомиться здесь.
Ресурсов для изучения, как видим, немало. Поэтому предлагаем не затягивать и уже начинать обучение.
Рекомендуем воспользоваться первую позицию в нашем рейтинге и освоить Java Basics на интерактивной платформе Mate academy.