Введение

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

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

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

Теперь, когда мы отбросили все ложные обещания, давайте двигаться вперед.

Ошибки, которые совершают люди

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

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

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

Техника копирования без вставки… Решение.

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

Алгоритм копирования без вставки

1) Первый шаг начинается с вашего рабочего каталога, в настоящее время вы столкнулись с проблемой в своем проекте. Например, выполнение определенного расчета. Вы должны убедиться, что вы действительно понимаете, что вы пытаетесь сделать. Наличие четкого понимания стоящей перед вами задачи является ключом к определению вашей проблемы.

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

2) После того, как вы определите свою проблему, форму расчета, которую вы хотите, формы ввода и вывода. Теперь вы готовы искать решение на любой платформе. Вы не можете правильно найти решение, не определив свойства, которые мы должны были определить ранее.

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

3) Теперь, когда вы нашли решение очень похожей проблемы, вам нужно оценить дистанцию ​​редактирования между вашими требованиями к решению и онлайн-решениями. Проще говоря, вам нужно понимать, сколько изменений вы ДОЛЖНЫ внести в это решение, чтобы оно могло идеально вписаться в ваш проект. Эти изменения обычно связаны с различием языка/фреймворка и структурами данных ваших входных и выходных данных. Запишите все необходимые изменения.

— Но что, если я не найду нужных решений?
= Обсудим это в конце статьи.

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

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

6) Следующее, что вам нужно сделать, это решение, которое вы написали, внутри вашего проекта/системы. Различия обычно существуют в способе организации входных/выходных данных или в более мелких интегрированных алгоритмах (если вы работаете над высокоуровневым кодом). Например, вместо двух списков вы хотели бы использовать один список пар/кортежей… Или вместо вычисления расстояния Хэмминга вы хотели бы вызвать метод евклидова расстояния. Это тип изменений, которые вам может понадобиться внести, чтобы онлайн-решение соответствовало вашему варианту использования.

Еще одна вещь, на которую вам следует потратить некоторое время, — это оптимизация. Оптимизация в целом может применяться к этим трем полям; Точность, эффективность и стиль. Иногда решение, которое вы пишете, является эвристическим решением. Это означает, что он не получает точного ответа, а получает очень близкий результат за приемлемое время. Чем ближе вы подходите к идеальному ответу в подходящее время, тем лучше ваше решение.

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

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

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

Давайте сделаем это вместе

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

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

2. Ищите свою проблему и найдите решение
После серфинга в Интернете в поисках реализованного решения «Копировать» я нашел отличную реализацию на Github от пользователя @asaini, который является продуктом менеджер в Streamlit. Его код прост и интуитивно понятен. Давайте посмотрим, сможем ли мы следовать методу копирования без вставки, чтобы извлечь уроки из его работы, а также выполнять наши задачи на наших собственных условиях.

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

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

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

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

6. Оптимизация
Мой любимый шаг за милей! Здесь мы пытаемся добавить свой штрих к алгоритму. Во-первых, в нашем собственном контексте последний заданный параметр нам на самом деле не нужен, поэтому мы его удаляем. Второе, что мы собираемся сделать, это заменить второй цикл причудливым пониманием списка, преобразованным в список. Я считаю, что понимание списков легче читать, плюс их немного легче запускать на python.

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

Что вы получаете от метода копирования без вставки

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

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

3. Техника усиливает ваше аналитическое мышление, это проявляется в шагах копирования. На этих этапах мы делим код на удобоваримые части и шаг за шагом анализируем их назначение. Шаг оптимизации также требует работы по совершенствованию этого мышления; чтобы улучшить решение, вы должны правильно его критиковать.

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

Недостатки

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

Подведение итогов

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