Livecoding… Это действо напоминает один из самых жестких видов экзаменов. Из тех, где нужно сходу решить задачу у доски. Да еще и перед незнакомой аудиторией. Или как выступление на сцене с импровизацией. Становится страшно от одной мысли об этом!.. Впрочем, есть люди, которые ловят от этого кайф. Ну а тех, кто не ловят, можно просто научить держать удар. Как и все в этом мире, навык прохождения Livecoding’ов развивается посредством упорных тренировок. Кратко подытожим и немного расширим то, что говорил в видеолекции Андрей Латышев.

Алгоритм прохождения Livecoding’а

Livecoding может быть удаленным (нужно расшарить свой экран) или очным.

Итак, ситуация: вам дают условие задачи, включают компьютер, становятся за спиной (или подключаются к вашему экрану) и смотрят, как вы дрожащими пальцами начинаете набирать код… Постойте, не спешите его набирать, а поначалу..

1. Остановитесь и осознайте условие

Сначала просто вдумайтесь в условие задачи и попробуйте понять, чего в принципе от вас хотят. Обязательно задайте уточняющие вопросы, чтобы точно выяснить, правильно ли вы его поняли.

2. Подумайте, какое решение будет оптимальным?

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

3. Начинайте программировать!

Когда пишете код, старайтесь, чтобы он соответствовал принципам SOLID\KISS\DRY. Обязательно объясняйте каждую строчку кода по причине, упомянутой выше. Кстати, иногда вам могут и подсказать, обычно — с помощью наводящих вопросов.

Статья для повторения о лучших практиках Java-программирования: Краткий справочник по лучшим практикам в Java

4. Создайте Unit-тест для проверки решения.

Это гораздо солиднее, чем использовать System.out.println(). Впрочем, вы уже в курсе.

О чем нельзя забывать во время Livecoding’а

  • Говорите вслух! Озвучивайте свои мысли, сам процесс мышления.
  • Если вы не можете придумать классу или переменным адекватные имена и сильно затупили на этом этапе, лучше скажите об этом.
  • Но все-таки старайтесь писать код в соответствии с промышленными стандартами, а не ученическими. Вот статья-напоминание.

    И более официальный оракловский документ

  • Всегда думайте о пограничных случаях, проверках, производительности.
  • <Не проверяйте свой код с помощью работающего приложения. По возможности используйте модульные тесты. /li>

Примеры задач на Livecoding’е

На самом деле их может быть очень много. Тем не менее, по приведенным ниже примерам можно понять общее направление. Обычно это учебные задачи, с которыми вы неоднократно сталкивались во время учебы.

  1. Простые задачи.

    Такие задачи часто просят написать в док-файле, а то и вовсе на листе бумаги.

    Примеры:

    
    Обернуть массив (ввод: [1,4,3,9,0], на выходе: [0,9,3,4,1])
    
    Вычислить факториал (итеративно \ рекурсивно)
    
    Проверить возможность составления второго слова из букв первого
    ввод: слово1 = «abc» слово2 = «acb»
    вывод: правда
    ввод: слово1 = «abc» слово2 = «искусство»
    вывод: ложь
    				

  2. Задачи на онлайн-платформе вроде Codility. Например, задачи на алгоритмы или Streams API
  3. Сложные задачи во время вашего присутствия в офисе. Пожалуй, самый стрессовый вариант. Тут может быть что угодно.

Статьи, где можно встретить интересные задачи для собеседований:

Советы

  • Подготовьте Gradle- или Maven-проект заранее.
  • Пользуйтесь горячими клавишами IntelliJ IDEA.
  • Подумайте, как вы будете тестировать код, если вам нужны случайные значения.
  • Подумайте о случае, когда вам нужно сделать запрос к стороннему сервису, а этот сервис недоступен.
  • Подумайте о случаях, когда у вас есть список определений «команд».

    Например, у вас есть команда «добавить» — увеличить значение, «минус» — уменьшить, «очистить» — сбросить. Как вы будете выполнять их все в коде, и ваш код должен быть расширяемым.

Платформы для подготовки к Livecoding’у

  1. Codility
  2. Leetcode. Study plans
  3. Codeforces
  4. Eolymp

План подготовки

Чтобы привыкнуть и не бояться Livecoding’а, нужно создавать мини-стрессовую ситуацию во время подготовки к такому типу собеседований.

  1. Решайте одну задачу раз в пару дней.
  2. Проговаривайте ход мыслей во время решения задачи вслух.
  3. Одну из десяти решенных задач решайте со включенной видеокамерой и проговаривайте решение. Затем посмотрите на ошибки.
  4. Всегда делайте дорешивание задачи.