Java у Clovertech:що потрібно знати щоб опанувати професію, та як зростають наші колеги

#development #java #programming

Говорячи про початок професійної кар’єри Java-програміста, найчастіше все представляється у похмурому світлі. Початківцям може здатися, що пробитися на ринок неймовірно складно. Каменем спотикання для них є те, що у всіх вакансіях потрібен практичний досвід.

Іноді здається, що роботодавці очікують, що навіть молодші Java-розробники матимуть щонайменше кілька років досвіду роботи, не кажучи вже про вимогу надприродних теоретичних знань, що проскакують у вакансіях час від часу. Якщо працювати поодинці над проектами, будь то власні

pet-проекти або фріланс, з якихось причин не виходить, можна спробувати інший варіант – розробка у складі команди розробників приблизно одного рівня. 

Спільна робота і вирішення проблем не тільки допомагають швидше вчитися і прогресувати, але й вирішують проблему мотивації, яка гостро стоїть перед багатьма програмістами-початківцями, особливо при роботі вдома. Саме такий формат практикують у нас у Clovertech.

У Clovertech дуже цінують кожного спеціаліста, і ми вважаємо, що зараз, крім фахівців senior рівня, необхідно приділити час та ресурси на “вирощування та навчання” майбутніх професіоналів.

«Вимоги щодо досвіду роботи мене дуже лякали, та так, що я не змогла розпочати пошуки роботи одразу після закінчення навчання. Але сумніви та страх – це абсолютно нормальна реакція. У цій справі (можна замінити при пошуку першої роботи) головне не зневірятися і бути наполегливим. На 100 надісланих резюме вам прийде 20 відповідей із пропозицією пройти співбесіду, і одна з них точно закінчиться оффером».

 Oksana Solomka, Junior java developer

У рамках нашої внутрішньої програми у  2021 році ми проводили Java Hiring Days у напрямку Junior Java Developers з працевлаштуванням та додатковим навчанням фахівців.

Ми залучали не тільки junior фахівців з мінімальним досвідом, але брали і trainee людей,  які тільки закінчили навчання з Java, мали хороші оцінки та результати після закінчення курсу, з наступним менторством і навчанням та можливістю практики у компанії.

У цій статті хочемо поділитися основними порадами для початківців Junior Java Developers – з чим спочатку можуть зіштовхуватися хлопці при пошуку роботи, які знання хард і софт скилів бажано мати і розвивати.

Ресурси, навчання та практика

Java – універсальна об’єктно-орієнтована мова програмування, яка використовується як у маленьких сервісах, так і у великих корпоративних системах. Вибираючи Java, вибираєш стабільність, і стаєш на шлях вивчення основ розробки ПЗ.

Мову необхідно знати досконально. Це фундамент, на якому будується будь-який проект. Без цих знань складно створити гнучку, масштабовану та безпечну систему, що працює стабільно та ефективно.

Де їх можна взяти?

У величезному морі інформації, фреймворках, базах даних, алгоритмах та тестуванні – немає і не може бути чіткої структури навчання, що ідеально підходить кожному. Один спеціаліст закінчив хороші курси з алгоритмів, пам’ятає основи синтаксису, але бази даних засвоїв погано, а про тестування практично нічого не знає.

Інший прийшов у розробку з тестування, знає синтаксис мови, але для видалення хвоста масиву приводить його до аркуша, не товаришує з Git, а з базами працював зовсім з іншого боку.

За фактом маємо двох розробників-початківців з непоганою базовою підготовкою для старту і абсолютно різними планами навчання.

Одним із визначальних факторів при освоєнні будь-якої навички є час, витрачений на його процес навчання. Якщо такі фахівці візьмуть за основу загальну програму навчання, то кожен збільшить згадані витрати часу в кілька разів, заплативши за закріплення вже вивченого матеріалу не завжди виправдану ціну.

“Під час освоєння нової мови важливо комбінувати теорію з практикою. Бажано паралельно писати свій pet-project для закріплення отриманих знань.”

Maryna Franchuk, Junior java developer  

Мета новачка — швидше потрапити у професійне середовище та розпочати розробку практичних рішень.

Перший 1.5 місяці джуніор фахівці у Clovertech входять у курс справи та працюють чітко під керівництвом старшого спеціаліста. Також у цей період окрім робочого процесу хлопці проходять додаткове щоденне навчання від нашого Lead Java Developer.

Спільно доповнюють знання та проходять практику.

Через 1,5-3 місяці девелопер-початківець вже може виконувати завдання самостійно. Також ми плануємо в компанії в найближчому майбутньому автоматизувати процеси та налаштувати відео матеріали та навчання для нових та молодих спеціалістів у даному напрямку на нашому внутрішньому порталі.

РЕКОМЕНДУЕМІ РЕСУРСИ ДЛЯ ВИВЧЕННЯ JAVA


ООП

  • 1.Поліморфізм
  • 2.Принципи ООП


“Не варто лякатися такого обсягу коду. Як тільки ви почнете вивчати ООП в контексті Java, ці конструкції стануть для вас інтуїтивно зрозумілими; ну а для початківців спочатку досить просто розуміння того, що конструкція System.out.println(“Hello World!”); виводить у консоль заповітний “Hello World!”.

Mykyta Maliarchuk, Junior java developer  

ОСНОВИ JAVA

  • 1.Java (JDK, JVM, JRE, Компілятор)
  • 2.Типи даних
  • 3.Примітиви
  • 4.Приведення типів
  • 5.Логічні / Математичні операції
  • 6.Посилальні типи
  • 7.Масиви
  • 8.Робота з рядками
  • 9.Умовні оператори
  • 10.Цикли
  • 11.Класи, Об’єкти, Інтерфейси
  • 12.Винятки
  • 13.Колекції
  • 14.Що нового в Java 8?
  • 15.Ввід вивід
  • 16.Багатопоточність
  • 17.Робота з Базою, JDBC
  • 18.Servlet API

JAVA ФРЕЙМВОРКИ, БІБЛІОТЕКИ ТА ІНСТРУМЕНТИ
1.Maven
2.Git
3.Spring
» Web
» Data
» Security
» Boot
4.Hibernate
5.Apache Commons
6.Apache Tomcat

БАЗИ ДАНИХ

1.MySQL
2.MongoDB
3.H2

КЛІЄНТСЬКЕ ОКРУЖЕННЯ
1.HTML
2.CSS
-Cascading Style Sheets, level 1
-Cascading Style Sheets Level 2 Revision 1
-CSS Snapshot 2018
3.JavaScript
-Современный учебник JavaScript
-The Progressive JavaScript Framework
-jQuery 

Книжки

Чудовий засіб, звідки можна отримати корисну інформацію. З книгою потрібно ретельно працювати, практично експериментуючи, долаючи всі складнощі та осмислюючи кожен крок.

Можна виділити ці основні:

  • 1.Дж. Гленн Брукшир, Денніс Брілов – Комп’ютерні науки. Базовий курс, 13-те видання
  • 2.Кей Хорстманн – Java. Бібліотека фахівця. 1. Основи. Розділ 1-3
  • 3.Боб Мартін – Чистий код: створення, аналіз та рефакторинг
  • 4.Joshua Bloch – Effective Java. 3rd Edition

Основні питання на співбесіді

Основні теми, які піднімаються у нас на співбесіди

  • 1.Основи мови та технологій.
  • 2.Робота з базою даних, JDBC.
  • 3.Hibernate.
  • 4.Spring.
  • 5.Алгоритми
  • 6.Логування, тестування.
  • 7.Паттерни проектування.
  • 8.Системи контролю версії.
  • 9.Складання проекту.
  • 10.Методології розробки, веб-технології, інструменти профілювання та ін.


“Не намагайся вчитися на складних прикладах та туторіалах. Нічим хорошим, це не закінчиться, крім як ви вирішите, що програмування це не ваше, і ви сдадитесь на півдорозі. Найкраще писати дуже прості програми, але на 100% розуміти, як вони працюють.

Oksana Solomka, Junior java developer

Основи мови та технологій

Trainee, Junior java

Питання мінімально упорядковані:

  • 1.Принципи ООП: абстракція, інкапсуляція, наслідування, поліморфізм;
  • 2.Принципи SOLID, вміти розповісти на прикладах Java;
  • 3.Парадигми програмування (імперативне, декларативне та його основні підтипи);
  • 4.Інтерфейси, класи, об’єкти, знати різницю та особливості застосування;
  • 5.Методи класу Object, розуміють обов’язки кожного методу та чому він був винесений до верхівки об’єктної ієрархії;
  • 6.Типи даних, вміти орієнтуватися і використовувати (приклади питань: “Навіщо потрібні класи-обгортки для примітивів? Розкажіть про приведення (casting) примітивних типів. А про приведення об’єктів?”);
  • 7.Типи класів (абстрактні, зовнішні, внутрішні, вкладені тощо), модифікатори доступу;
  • 8.Колекції, їх ієрархія, особливості та відмінності однієї від іншої (LinkedList від ArrayList, HashMap від TreeMap), що під капотом ArrayList, HashSet, на
    oснові чого вони працюють і як влаштовані;
  • 9.Винятки, їх ієрархія та основи обробки (навіщо, як і де);
  • 10.Стек, купа, як із ними організована робота у Java (загальні принципи);
  • 11.Багатопотоковість: поняття процесу та потоку, варіанти створення потоку, методи синхронізації та службові слова в Java (називати тільки ті, про які можете розповісти), як ви розумієте потокобезпеку, deadlock, volatile, атоміки, thread, runnable та callable;
  • 12.Стрими, лямбди, функціональні інтерфейси без серйозного поглиблення.

Вивчення кожної теми включає розуміння того, як все це влаштовано в Java.

Наприклад, якщо згадується спадкування, потрібно знати і перевизначення/перевантаження методів, і різницю статичних/нестатичних методів чи змінних, і те, як написати потрібну ієрархію класів для елементарних завдань. Якщо написали і немає розуміння, наскільки це все погано, то звертаємося до комьюніті.

Junior java

Перелічені питання можуть бути задані з конкретними прикладами практичної площини.

Теми:

  • 1.Oсобливості роботи купи та стеку: внутрішній пристрій, швидкість доступу, використання пам’яті, збирач сміття поверхнево;

  • 2.Hестандартне використання колекцій та особливості роботи з ними: обробка NULL-значень у HashMap, TreeMap; видалення діапазону з TreeMap; чому рядок є гарним вибором для ключа в HashMap. Дженерики та робота з ними: якщо метод приймає List, що туди можна передати; як у рантаймі дженерики виглядають; чи можуть бути конструктори в абстрактних класах; якщо клас не можна ініціалізувати, то навіщо вони;

  • 3.Успадкування «IS-A» та асоціація (включає композицію «HAS-A» та агрегацію «USES-A or IMPLEMENTED-IN-TERMS-OF») у контексті Java;

  • 4.Інтерфейси-маркери з прикладами: серіалізація, клонування, серіалізація, що конфігурується (інтерфейс Externalizable);

  • 5.Більш детально за типами даних: нотації основних методів (у класах-обгортках, хеш-код, equals, що повертають, чому, як перевизначати), boxing-unboxing, ініціалізація змінних локальних та класу, пул рядків (що таке, де зберігається). Знати бітові операції AND, OR, XOR; byte b = 127, b++, який результат і чому (по кроках); int p1, long p2, у чому різниця між операціями p1 = p1 + p2 та p1 += p2;

  • 6.Більш детальні питання щодо стримувань: навести приклад обробки з практики, швидкість роботи стримувань, які два типи операцій є, що за чим іде в операціях у стримі;

  • 7.Багатопоточність детальніше: наведіть приклад дідлока (дивне питання, але задають), як створити потокобезпечний клас, для чого потрібен CompletableFuture, що таке пул потоків;

  • 8.Детальніше за винятками: якщо воно випало спочатку у try, потім у catch, що буде; можна try без catch, але з finally, куди піде виняток; а якщо return буде і в catch, і finally, як обробиться;

  • 9.Рефлексія поверхнево, що повертає getClass і навіщо він потрібний;

  • 10.Класлоадери та їх ієрархія. Ситуація: getClass у двох класів повертає одне значення, під час каста одного до іншого відбувається помилка. Чому? (Класи завантажені різними класами лоадерами).

“Не бійся відмов на співбесідах, я завалив близько 8 співбесід, перш ніж знайти роботу. Після кожної проваленої співбесіди, я ставав тільки впевненішим, виписуючи на папері  усі питання, на яких я завалився.”

Mykyta Maliarchuk,Junior java developer

Работа з БД, JDBC

У нас у компанії градація питань для початкових рівнів практично відсутня.

У молодшого джуна можуть запитати, чи працював він з нереляційними базами, і поставити кілька попутних питань, а людину з невеликим досвідом навіть не прогнати джоїнами. Тому зупинимося на тому, що основи реляційних БД потрібні всім, а розуміння нереляційних особливостей буде хорошим плюсом. Про JDBC практично завжди запитають, оскільки тема є основною.

“Крім синтаксису важливо знати основи роботи JVM, JDK, JRE, без цього вам буде складно з подальшим розумінням того, як саме влаштована Java.”

Maryna Franchuk, Junior java developer  


У чому ж запорука успіху?



У розумінні того, навіщо і для чого вам це потрібне. Програміст – свого роду чарівник, який може виконати будь-які бажання і примхи, використовуючи при цьому лише один засіб – мову програмування.

Поставивши перед собою мету, стати java девелопером, варто присвячувати навчанню максимум свого часу. Ставте перед собою маленькі  цілі та поступово виконуйте їх.

Дивіться відео уроки, читайте про тенденції розвитку цієї мови у світі – все це допоможе за короткий термін освоїти професію. Також варто відвідувати різноманітні конференції та семінари для Java Developers. І звісно ж практикуйтеся. Практика – це основа основ, зокрема і щодо мови програмування java. Щоденна практика дозволить швидше навчитися писати код без помилок.

 

Java at Clovertech: What is necessary to master the profession and how our colleagues grow in Java

When it comes to starting a professional career as a Java developer, things often look bleak. It might seem incredibly difficult to break into the labor market for beginners. The stumbling block for them is that all jobs require hands-on experience. The fact that all jobs require hands-on experience becomes a sticking point.

Sometimes it seems like employers expect even junior Java developers to have at least a few years of working experience, not to mention the excellent theoretical knowledge that slips into vacancies from time to time.

If for some reason you can’t work alone on projects, whether these are your own pet projects or just freelancing, you can try another option – being a developer as part of a development team of about the same level. Collaboration and problem solving not only help to learn and progress faster, but also solve the problem of motivation that is acute for many novice programmers, especially when working from home.
This is the format we practice at Clovertech.

At Clovertech, every specialist is highly valued, and we believe that now, in addition to senior-level specialists, it is necessary to devote time and resources to “cultivating and training” future professionals.

“The work experience requirements scared me so much that I couldn’t start looking for a job right after I finished studying. However, having doubts and being afraid is a completely normal reaction. Looking for a very first job, one shouldn’t despair but be persistent. After you send a hundred resumes, you receive twenty responses offering you an interview, and one of them will definitely end with a job offer”.

 Oksana Solomka, Junior Java Developer

As a part of our internal 2021 program, we held Java Hiring Days aimed to employ and further train Junior Java Developers. We involved not just Junior specialists who had experience already, but also Trainee guys who had just completed their Java studies, and had good grades and results when completing a course, with further mentoring and training and the opportunity to practice in the company.

In this article, we want to share the main tips for Junior Java Developers who are just at the start of their professional path: what guys may encounter at first when looking for a job, what knowledge of hard and soft skills are desirable to have and develop.

Resources, studying, and practicing

Java is a universal object-oriented programming language that is used in both small services and large enterprise systems. By choosing Java, one chooses stability and starts the path of learning the software development basics.

It is necessary to know the language thoroughly. It is the very basis upon which any project is built. It is difficult to create a flexible, scalable, and secure system that works stably and efficiently having no such acknowledgment.

Where can one gain knowledge?

In the vast sea of ​​information, frameworks, databases, algorithms, and testing, there is not and nor can be a clear learning structure that perfectly fits everyone. One completes good courses on algorithms, and remembers the basics of syntax; however, one knows databases poorly and knows practically nothing about testing. Another one came to development from testing, knows the syntax of the language, but removing the tail of the array leads it to a sheet, doesn’t get along with Git, and worked with databases in a completely different way.

In fact, we have two novice developers with good basic training to start and completely different training plans.
One of the determining factors in mastering any skill is the time spent on its learning process. If such specialists take the general training program as a basis, then each will increase the mentioned time costs by a certain number of times, paying a not always justified price for consolidating the already studied material.

“When learning a new programming language, it is important to both study the theory and practice. It is advisable to write your own pet project to consolidate the obtained knowledge.”

Maryna Franchuk, Junior Java Developer

The goal of a beginner is to quickly get into a professional environment and start developing practical solutions.
For the first 1.5 months, Junior specialists at Clovertech get to know the projects and are guided by Senior specialists. Also during this period, in addition to the workflow, the guys undergo additional daily training from our Lead Java Developer.
Together they supplement knowledge and practice. After 1.5-3 months, a novice developer can already perform tasks on his own.

We also plan to automate processes in the company in the near future and set up video materials and training for new and young specialists in this area on our internal portal.

OOP

  • 1.Polymorphism
    2.OOP Principles

    “Don’t be frightened by this much code. Once you start learning OOP in the context of Java, those constructs will become intuitive to you. Well, for those who are just beginning, it’s quite enough to simply understand that System.out.println(“Hello World!”); construct prints the coveted “Hello World!” to the console.”

    Mykyta Maliarchuk, Junior Java Developer

 

Java basics

1.Java (JDK, JVM, JRE, Compiler)
2.Data types
3.Primitives
4.Casting
5.Logical/Math operators
6.Reference types
7. Arrays
8.Working with strings
9.Conditional statements
10.Cycles
11.Classes, Objects, Interfaces
12.Exceptions
13.Collections
14.What’s new in Java 8?
16.Input Output
16. Multithreading
17.Working with base, JDBC
18.Servlet API

Java frameworks, libraries, and tools

  • 1.Maven
    2.Git
    3.Spring (Web, Data, Security, Boot)
    4.Hibernate
    5.Apache Commons
    6.Apache Tomcat

Databases

1.MySQL
2.MongoDB
3.H2

Client environment

1.HTML
2.CSS
-Cascading Style Sheets, level 1
-Cascading Style Sheets Level 2 Revision 1
-CSS Snapshot 2018
3.JavaScript
-Modern JavaScript book
-The Progressive JavaScript Framework
-jQuery

Books

Books are a wonderful source of information.A book requires careful work, nearly experimenting, overcoming all difficulties, and comprehending each step.

The following books can be highlighted as the main ones:

    • 1.Computer Science: An Overview (What’s New in Computer Science) by Glenn Brookshear and Dennis Brylow
      2.Core Java Volume I–Fundamentals by Cay Horstmann (Chapters I-III)
      3.Clean Code: A Handbook of Agile Software Craftsmanship 1st Edition by Robert C. Martin
      4.Effective Java. 3rd Edition by Joshua Bloch

    • The main questions asked at the interviews

    • The main topics that are raised in our interviews

      • 1.Fundamentals of the language and technologies
        2.Working with databases, JDBC
        3.Hibernate
        4.Spring
        5.Algorithms.
        6.Logging, testing
        7.Design patterns
        8.Version control systems
        9.Project build
        10.Development methodologies, web technologies, profiling tools, etc.

      • “You shouldn’t try studying by complicated examples and tutorials. They won’t teach you anything useful, but will definitely make you feel that programming isn’t your cup of tea and give up the halfway through. It’s better to write simple programs understanding how they work for 100%”.

        Oksana Solomka, Junior Java Developer

 

Fundamentals of the language and technologies

Trainee, Junior Java Developer

The questions are minimally streamlined:

1.OOP principles: abstraction, encapsulation, inheritance, polymorphism;
2.SOLID principles, being able to tell by giving examples from Java;
3.Programming paradigms (imperative, declarative, and their main subtypes);
4.Interfaces, classes, and objects, knowing their differences and using features;
5.Methods of the Object class, understanding the responsibilities of each method and why it was moved to the top of the object hierarchy;
6.Data types, being able to navigate and use (examples of questions: “Why are wrapper classes required for primitives? Tell us about casting primitive types. What about casting objects?”);
7.Class types (abstract, external, internal, nested, etc.), access modifiers;
8.Collections, their hierarchy, features, and differences from one to another (LinkedList from ArrayList, HashMap from TreeMap), what is inside of ArrayList, HashSet, on the basis of what they work and how they are arranged;
9.Exceptions, their hierarchy, and the basis of processing (for what, how, and where);
10.Stack, heap, and how Java works with them (general principles);
11.Multithreading: the concepts of process and thread, thread creation options, synchronization methods, and function words in Java (name only the ones that you can talk about), what is thread safety, deadlock, volatile, atomic, thread, runnable and callable;
12.Streams, lambdas, functional interfaces (no serious in-depth knowledge).

Studying each of the topics includes an understanding of how Java works in general.
For example, if the inheritance is mentioned, then it is required to know both the overriding/overloading of methods, the difference between static/non-static methods or variables, and how to write the necessary class hierarchy for elementary tasks. If you code and have no idea whether it is bad, try asking the community.

Junior Java Developer

The listed questions can be asked with concrete examples from practical use.

Topics:

  • 1.Specifics of the heap and stack: internal structure, access speed, memory usage, superficial garbage collector;

  • 2.Non-standard use of collections and features of working with them: handling NULL values ​​in HashMap, TreeMap; removing a range from a TreeMap; why a string is a good choice for a key in a HashMap; generics and working with them: if the method accepts a List, what can be passed there; how generics look in runtime; whether there can be constructors in abstract classes; if the class cannot be initialized, then what are they for;

  • 3.”IS-A” inheritance and association (includes “HAS-A” composition and “USES-A or IMPLEMENTED-IN-TERMS-OF” aggregation) in the context of Java;

  • 4.Marker interfaces with examples: serialization, cloning, configurable serialization (Externalizable interface);
  • 5.Details on data types: notations of main methods (in wrapper classes, hash code, equals, what they return, why, how to override), boxing-unboxing, initialization of local and class variables, string pool (what is it, where is it stored). Bit operations knowledge: AND, OR, XOR; byte b = 127, b++, what result and why (step by step); int p1, long p2, what is the difference between operations p1 = p1 + p2 and p1 += p2;

  • 6.More detailed questions on streams: give an example of processing from practice, the speed of streams, what are the two types of operations, what goes after what in operations in the stream;

    7.Multithreading in more detail: give an example of a deadlock (a strange question, but they ask), how to make a thread-safe class, what CompletableFuture is for, what is a thread pool;

  • 8.More detailed on exceptions: what happens if it fell out first in try, then in catch; is it possible to use try without catch, but with finally, and where the exception goes; and if return is in both catch and finally, how will it be processed;

  • 9.Reflection superficially, what getClass returns and why it is required;

  • 10.Classloaders and their hierarchy. Situation: getClass for two classes returns the same value, while casting one to the other, an error occurs. Why? (Classes are loaded by different class loaders).

  • “Don’t be afraid to get rejected at interviews. It took me 8 failed interviews to finally find a job. After each of those interviews, I was only growing confident, writing down all the questions I couldn’t answer.”

    Mykyta Maliarchuk, Junior Java Developer

 

Working with databases, JDBC

We barely have a gradation of questions for entry-levels at our company. A junior specialist might be asked if they worked with non-relational databases and a few related questions, while a person with little experience cannot even be asked about joins.

Therefore, we focus on the fact that the basics of relational databases are crucial for everyone, and understanding the features of non-relational databases is a good advantage. Questions on JDBC are asked almost always since the topic is fundamental.

“In addition to the syntax, it is important to know the basics of the JVM, JDK, and JRE. It is difficult to understand precisely how Java works without that knowledge.”

Maryna Franchuk, Junior Java Developer

What’s the key to success?

The key to success is to understand why and what you need it for. A programmer is a kind of magician who is able to fulfill any desires and whims using just one tool – a programming language.
Having set a goal to become a Java Developer, it is worth devoting the maximum time possible to learning. Set yourself mini goals and gradually achieve them.
Watch video lessons, and read about the trends in the development of this language in the world – all of this will help you master the profession in a short time. It is also worth attending various conferences and seminars for Java Developers. And of course, practice. Practicing is the foundation of the basics, including when learning the java programming language. Daily practice will help you learn to write error-free code quickly.

Previous Topic
День захисту дітей: як батьки Clovertechs адаптуються до воєнних реалій
Next Topic
Українська вишиванка, та як підтримують патріотичний дух у Clovertech
We Love to Hear From You
For any support, sales, careers, or security inquiry please contact us!

    * - marked fields are required.