Как решать задачи по программированию 7 класс

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

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

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

Решение проблем с кодированием—это не только часть процесса собеседования с разработчиком, это то. Что разработчик делает весь день. В конце концов, написание кода-это решение проблем.

Метод решения задач

Этот метод взят из книги Джорджа Поля Первоначально она вышла в 1945 году и разошлась тиражом более миллиона экземпляров.

Его метод решения проблем использовался и преподавался многими программистами, от профессоров компьютерных наук (см. Введение Udacity в курс CS, преподаваемый профессором Дэвидом Эвансом) до современных преподавателей веб-разработки. Таких как Колт Стил.

Давайте рассмотрим решение простой задачи кодирования с помощью четырехэтапного метода решения задач. Это позволяет нам видеть метод в действии по мере того. Как мы его изучаем. Мы будем использовать JavaScript в качестве языка выбора. Вот в чем проблема:

Создайте функцию, которая складывает два числа и возвращает это значение.

Метод решения проблем состоит из четырех этапов:

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

Давайте начнем с первого шага.

Шаг 1: Понять проблему.

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

Однако постарайтесь сопротивляться этому порыву. Убедитесь, что вы действительно понимаете проблему, прежде чем приступать к ее решению.

Прочтите проблему. Если вы находитесь на собеседовании, вы можете прочитать проблему вслух, если это поможет вам замедлиться.

По мере прочтения проблемы проясняйте любую ее часть. Которую вы не понимаете. Если вы находитесь на собеседовании, вы можете сделать это, задавая интервьюеру вопросы об описании проблемы. Если вы сами по себе, подумайте и/или Погуглите те части вопроса, которые вы, возможно, не поймете.

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

Чтобы лучше понять проблему, спросите себя:

Каковы входные данные?

Какие виды входных данных будут входить в эту проблему? В этом примере входными данными являются аргументы, которые будет принимать наша функция.

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

Всегда ли входы будут просто двумя числами? Что произойдет, если наша функция получит в качестве входных данных три числа?

Здесь мы могли бы обратиться к интервьюеру за разъяснениями или более подробно рассмотреть описание проблемы.

Проблема кодирования может иметь примечание, гласящее: “Вы всегда должны ожидать только два входа в функцию.” Если да. То вы знаете. Как действовать дальше. Вы можете быть более конкретны, так как, скорее всего, поймете, что вам нужно задавать больше вопросов о том. Какие входные данные вы можете получить.

Всегда ли входными данными будут числа? Что должна делать наша функция, если мы получим входы “а” и “в”? Уточните, всегда ли наша функция будет принимать числа.

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

//inputs: 2, 4

Затем спросите:

Каковы результаты?

Что будет возвращать эта функция? В этом случае на выходе будет одно число, которое является результатом двух числовых входов. Убедитесь, что вы понимаете, каковы будут ваши результаты.

Приведите несколько примеров.

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

Примеры также могут быть использованы в качестве проверки здравомыслия, чтобы проверить вашу возможную проблему. Большинство редакторов code challenge, в которых вы будете работать (будь то интервью или просто использование сайта. Такого как Codewars или HackerRank). Уже написали для вас примеры или тестовые примеры. Тем не менее, написание собственных примеров может помочь вам укрепить ваше понимание проблемы.

Начните с простого примера или двух возможных входов и выходов. Вернемся к нашей функции сложения.

Давайте назовем нашу функцию “add.”

Что такое пример ввода? Пример ввода может быть:

// add(2, 3)

Каков же выход из этого? Чтобы записать пример вывода, мы можем написать:

// add(2, 3) ---> 5

Это означает, что наша функция будет принимать на вход 2 и 3 и возвращать 5 в качестве своего выхода.

Создавайте сложные примеры.

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

Например, что мы должны делать, если наши входные данные являются строками, а не числами? Что делать, если у нас есть в качестве входных данных две строки, например, add(‘a’, ‘b’)?

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

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

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

Например, некоторые проблемы скажут: “Если есть нулевые входные данные. Верните undefined.” Для таких случаев вы можете дополнительно написать комментарий.

// check if there are no inputs.

// If no inputs, return undefined.

Для наших целей мы будем считать, что наши входные данные всегда будут числами. Но в целом хорошо думать о крайних случаях.

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

Прежде чем перейти к шагу 2, давайте подведем итог шагу 1, разберемся в проблеме:

-Read through the problem.

-What are the inputs?

-What are the outputs?

Create simple examples, then create more complex ones.

2. Разработайте план решения проблемы.

Затем разработайте план того. Как вы решите проблему. Разрабатывая план, запишите его в псевдокод.

Псевдокод-это простое языковое описание шагов в алгоритме. Другими словами, ваш псевдокод-это ваш пошаговый план решения проблемы.

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

// Create a sum variable.

Add the first input to the second input using the addition operator.

// Store value of both inputs into sum variable.

// Return as output the sum variable.

Теперь у вас есть пошаговый план

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

3. Выполнить план (решить проблему!)

Рука, Рубик, Кубик, Головоломка, Игра, Кубик Рубика

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

Профессор Эванс предлагает сосредоточиться на простом механическом решении. Чем проще и проще ваше решение, тем больше вероятность, что вы сможете правильно его запрограммировать.

Взяв наш псевдокод, мы могли бы теперь написать это:

function add(a, b) { const sum = a + b; return sum; }

Профессор Эванс добавляет: не забывайте преждевременно оптимизировать. То есть у вас может возникнуть искушение начать говорить: “Подождите, я делаю это, и это будет неэффективный код!”

Во-первых, просто найдите свое простое механическое решение.

Что делать, если вы не можете решить всю проблему? Что, если есть часть этого, которую вы все еще не знаете. Как решить?

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

Временно игнорируйте ту трудную часть проблемы, которую вы не совсем понимаете, и выпишите другие части. Как только это будет сделано, вернитесь к более трудной части.

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

Шаг 4: Оглянитесь назад на то, что вы сделали.

Как только ваше решение заработает, найдите время. Чтобы обдумать его и выяснить. Как сделать улучшения. Это может быть время, когда вы рефакторируете свое решение в более эффективное.

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

  • Можете ли вы получить результат по-другому? Какие еще существуют жизнеспособные подходы?
  • Можете ли вы понять это с первого взгляда? Есть ли в этом смысл?
  • Можете ли вы использовать результат или метод для какой-то другой задачи?
  • Можете ли вы улучшить производительность вашего решения?
  • Можете ли вы придумать другие способы рефакторинга?
  • Как другие люди решили эту проблему?

Один из способов, которым мы могли бы рефакторировать нашу проблему. Чтобы сделать наш код более кратким: удаление нашей переменной и использование неявного возврата:

function add(a, b) { return a + b; }

С шагом 4 ваша проблема может никогда не закончиться. Даже великие разработчики по-прежнему пишут код, который они позже просматривают и хотят изменить. Это руководящие вопросы, которые могут вам помочь.

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

Когда я практикую кодирование самостоятельно, я почти всегда смотрю на решения. Которые являются более элегантными или эффективными, чем то. Что я придумал.

Сворачивание

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

Давайте рассмотрим их здесь:

  • Шаг 1: понять проблему.
  • Шаг 2: создайте пошаговый план того. Как вы его решите.
  • Шаг 3: выполните план и напишите фактический код.
  • Шаг 4: оглянитесь назад и, возможно. Рефакторингуйте свое решение. Если оно может быть лучше.

Практика этого метода решения проблем очень помогла мне в моих технических интервью и в моей работе в качестве разработчика.

Если вы не чувствуете себя уверенно, когда дело доходит до решения проблем кодирования, просто помните. Что решение проблем-это навык. Который каждый может получить лучше со временем и практикой.

Удачи!

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

Если у вас есть отзывы или вопросы по этому посту, не стесняйтесь писать мне в твиттере @madisonkanna.

Если вы читаете это далеко. Напишите автору. Чтобы показать ему. Что вы заботитесь о нем. Чирикни спасибо