Зачем решать задачи для программистов?

Мне очень нравится сайт codewars.com. На нём представлены задачи для программистов самой разной сложности. Большое количество языков и возможность посмотреть чужие варианты решения для меня — очень крутые возможности сайта. В этой заметке, я объясню, почему каждый программист должен решать хотя бы одну задачу в день.

Задачи будут держать ваш мозг в тонусе

Большинство задач — не такие, какие приходится решать на работе в офисе. Часто они требует каких-то общих знаний, алгоритмов, не привязанных к предметной области, поэтому решать их может любой программист, независимо от того, делает он сайты или пишет код для железа. Они требуют некоторой креативности и неплохо будят ум, поэтому я часто делаю одну задачу утром, помогает проснуться лучше, чем кофе!

Вы будете лучше знать язык

Многие задачи заставили меня читать документацию, потому что оказалось, что с ходу я не могу вспомнить многие названия функций/методов. Например, в начале попалась задача для JavaScript — написать функцию, которая переводит число из десятичной системы счисления, в двоичную. Я стал вспоминать школьные уроки информатики, как мы записывали руками в тетрадку единички и нолики и написал такой алгоритм. Когда я отправил решение и стал смотреть чужие — я ахнул! Оказалось, что самое простое решение просто использует второй параметр функции parseInt(string, radix). Я вообще не знал, что у этой функции есть второй параметр. Более того, если его не использовать, могут быть проблемы с тем, как будет интерпретироваться строчка.

Другой пример любопытного кода на Javascript. Простая задача по написанию функции, которая считает объём конуса. Результат нужно было округлить вниз. Я вполне разумно использовал Math.floor(num), но, как оказалось, округлить можно и другим способом — использовав два раза битовую операцию NOT, которая в языке совершается через двойную тильду ~~. При этом, согласно некоторым бенчмаркам, такая операция совершается быстрее, чем вызов Math.floor():

В качестве третьего примера приведу задачу, где нужно было создать код, который позволял был делать что-то вроде:

Понятно, что решением такой задачи является каррирование, но как его реализовать с нуля в JavaScript? Ответа я не знал, зато в гугле нашёл отличную статью на эту тему — https://medium.com/@kevincennis/currying-in-javascript-c66080543528#.o5a0hf9z0

Вы будете внимательнее читать условия задачи

В таких задачах часто используется много воды, и чтобы понять, что же конкретно нужно сделать, надо внимательно прочитать задание несколько раз. Вот текст задачи:

Ask a small girl — «How old are you?». She always says strange things… Lets help her! For correct answer program should return int from 0 to 9 😉 Assume test input string always valid and may look like «1 year old» or «5 years old», etc.. The first char is number only =)

Моё решение брало первый символ строчки, преобразовывало его в целое и возвращало. А самый топовый вариант решения выглядит вот так:

И это годится именно по текущим условиям задачи.

Это интересно, полезно для кругозора и для будущего

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

Многие компании, считают, что потенциальных работников следует проверять такого рода задачами и практика их решения поможет вам уверенней их решать. Можно по разному относиться к применению таких вещей в реальном мире, но факт в том, что это важно для многих работодателей.

Наконец, это действительно интересно, очень приятно, когда твоё решение наконец-то проходит все проверки и вы можете сказать, что да, я решил эту задачу!


Also published on Medium.

Зачем решать задачи для программистов?: 1 комментарий

Добавить комментарий