Программы с помощью которых пользователь решает свои задачи по обработке

Содержание

Эта статья представляет собой вводный материал по машинному обучению (Machine Learning). Вы узнаете про основные задачи, виды и функции обучения на моделях, ознакомитесь с некоторыми алгоритмами (algorithms) и особенностями моделирования (modelling). Статья сможет дать ответы и на многие другие вопросы.

Сегодня ML (Machine Learning) решает множество задач, упрощая многим жизнь. Достаточно заложить в ПК алгоритм (algorithm) нахождения решений, чтобы получить возможность комплексно использовать статистические данные и выводить различные закономерности, делать прогнозы.

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

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

08. Диспетчер рисунков Microsoft Office. Бесплатный инструмент обработки картинок. Решает 80% задач.

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

Сегодня ML распознаёт и рисунки, и лица, и пейзажи, и числа, и буквы, и предметы. Та же функция машинного обучения по проверке грамматики есть почти в каждом текстовом редакторе. И учитывает эта функция как орфографию, так и другие моменты, включая лексические сочетания, жаргонизмы и прочие тонкости «великого и могучего». Есть и программы, которые сами генерируют новостные тексты — даже участие человека не требуется (копирайтеры, задумайтесь!)

Задачи машинного обучения

Решаемые задачи можно классифицировать на несколько категорий:

1) регрессия – речь идёт о прогнозе на основании выборки объектов с разными признаками;

2) классификация – тут мы получаем конкретный ответ на основании набора признаков («да» либо «нет»);

3) кластеризация – под этим термином понимается распределение данных на некоторые группы (пример — уровень платёжеспособности клиента);

4) уменьшение размерности – большое количество признаков сводится к меньшему, чтобы было удобнее в последующем их визуализировать;

5) выявление аномалий – аномалии отделяются от обычных (стандартных) случаев. Аномалия может совпадать с задачей классификации, но лишь на первоначальный взгляд. Реальный пример — мошенничество с банковскими картами.

Виды машинного обучения

Большинство методов машинного обучения относят к обучению с учителем (supervised learning) и без учителя (unsupervised learning). «Учитель» здесь – это не конкретный человек, а сам факт вмешательства в процесс обработки данных. Чем различаются эти методы? Тем, что в первом случае у нас существует ряд гипотез, и их нужно либо опровергнуть, либо подтвердить.

Как БЫСТРО изучить АЛГОРИТМЫ и научиться решать задачи? Книги, сайты, инструменты

С учителем

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

Или надо узнать, есть или нет рак у пациента, имея в наличии его медицинские показатели. Или понять, входящее эл. письмо — это спам или нет. Всё это задачи на классификацию.

Без учителя

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

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

Популярные алгоритмы моделей машинного обучения

1. Дерево принятия решений

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

Говоря про построение бизнес-процессов, древо формируется из минимально возможного количества вопросов с однозначным ответом (либо «да», либо «нет»). Дав ответы, мы придём к верному выбору. Проблема структурируется и систематизируется, итоговое решение принимается на основании логических выводов.

2. Наивная байесовская классификация

Algorithms этого типа относят к семейству простых вероятностных классификаторов, которые основаны на теореме Байеса. Функции рассматривается как независимые (это и называют строгим либо наивным предположением).

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

3. Метод наименьших квадратов

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

4. Логистическая регрессия

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

Логистическая регрессия — мощный статистический метод предсказания событий. Он востребован: • для кредитного скоринга; • для замеров успешности РК; • когда нужно построение прогноза прибыли с конкретного товара; • оценки вероятности землетрясения и т. п.

5. Метод опорных векторов (SVM)

Это даже не алгоритм, а набор алгоритмов, позволяющих решать задачи классификации и регрессионного анализа. Мы исходим, что объект находится в N-мерном пространстве и относится к одному из 2-х классов. На основании этого метод SVM выполняет построение гиперплоскости с размерностью (N – 1), чтобы объекты попали в одну из 2-х групп.

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

6. Метод ансамблей

Построен на базе алгоритмов Machine Learning, генерирующих множество классификаторов. Поначалу этот метод был лишь частным случаем байесовского усреднения. Потом он усложнился дополнительными алгоритмами: • boosting (бустинг) – обеспечивается преобразование слабых моделей в сильные путём формирования ансамбля классификаторов; • bagging (бэггинг) – для сбора усложнённых классификаторов и обучения базовых; • алгоритм для корректирования ошибок выходного кодирования.

Читайте также:
Программе восстановления системы не удалось

Вообще метод ансамблей является более мощным инструментом, если сравнивать с отдельными моделями прогнозирования.

7. Алгоритмы кластеризации

Множество объектов распределяется по категориям-кластерам, в каждом кластере должны оказаться самые похожие элементы. Для кластеризации используют разные алгоритмы (вероятностные, плотности, сокращения размерности и т. д.).

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

8. PCA — метод главных компонент

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

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

9. Сингулярное разложение

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

Можно вспомнить, что первые технологии компьютерного зрения создавались на основании SVD и PCA. Да, современные алгоритмы SVD намного сложнее, но суть особо не поменялась.

10. ICA — анализ независимых компонент

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

Примеры машинного обучения в контексте решения реальных проблем

Пример 1. Диагностируем заболевания

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

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

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

Пример 2. Ищем полезные ископаемые

Признаки — данные геологоразведки. Для обучающей выборки берут два типа прецедентов: места, где 100 % есть месторождения, и места со схожими параметрами. Да, у месторождений тоже есть свои «синдромы».

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

Пример 3. Оцениваем надёжность и платёжеспособность кредитополучателей

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

В этом примере машинного обучения кандидаты на получение кредита — это объекты, а признаки формируются из анкеты клиента (признаки будут другими, если в банк обращается юрицо).

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

Среди усложнённых алгоритмов машинного обучения — тот же кредитный скоринг (каждый клиент получает баллы за некоторые признаки). Есть и алгоритм и на основе прецедентов.

ML-направление, machines и нейронные сети сегодня очень популярны, и эта популярность растёт, поэтому освоить это направление — значит гарантировать свою востребованность на рынке трудоустройства. Но дать актуальные знания по ML способны только эксперты. Если интересуют действительно профессиональные курсы, не тратьте времени на поиск, обращайтесь в OTUS!

Источник: otus.ru

ОСНОВНЫЕ ЭТАПЫ РЕШЕНИЯ ЗАДАЧ С ПОМОЩЬЮ АВТОМАТИЗИРОВАННЫХ ИНФОРМАЦИОННЫХ СИСТЕМ ОБРАБОТКИ ИНФОРМАЦИИ

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

  • 1. Постановка задачи:
  • • формулировка условия задачи;
  • • сбор информации о задаче;
  • • определение конечных целей решения задачи;
  • • описание данных (структуры, их типов, диапазона и т.п.);
  • • определение формы выдачи результатов.
  • • анализ существующих аналогов;
  • • анализ технических и программных средств;
  • • разработка информационной модели (математической, логической и т.д.);
  • • выбор и обоснование технических средств обработки информации;
  • • разработка структур данных.
  • • выбор метода проектирования алгоритма;
  • • выбор способа описания алгоритма (словесно-формульное описание, графическое и др.);
  • • выбор тестов и метода тестирования;
  • • проектирование алгоритма.
  • • выбор языка программирования;
  • • уточнение способов организации данных;
  • • запись алгоритма на выбранном языке программирования.
  • • синтаксическая отладка;
  • • отладка семантики и логической структуры;
  • • тестовые расчеты и анализ результатов тестирования;
  • • модернизация программы.
  • • доработка программы для решения конкретных задач;
  • • составление документации к решенной задаче, к математической

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

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

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

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

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

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

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

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

Если исполнителем алгоритма будет пользователь (человек), который затем произведет его запись на выбранном языке программирования, то в качестве способов описания лучше всего подходят словесно-формульный или графический методы, обеспечивающие большую простоту и наглядность. Когда в качестве исполнителя используются автоматические средства обработки информации, применяются различные способы описания алгоритмов, основанные на строгой формализации и позволяющие рассматривать алгоритмы как математические объекты, т.е. способы, основанные на специальных искусственных алгоритмических языках (algorithmic language).

Читайте также:
Файл образа программы имеет верный формат но предназначен для другого типа

К разработанному алгоритму предъявляются определенные требования: дискретность, определенность, результативность, массовость, компактность и эффективность. Рассмотрим более подробно каждое требование.

  • 1. Дискретность алгоритма — процесс решения задачи, определяемый алгоритмом, он разделяется на решение самостоятельных элементарных задач и, соответственно, представляется в виде конечной последовательности шагов, определяющих порядок решения этих задач.
  • 2. Определенность алгоритма — каждая команда алгоритма должна быть понятна исполнителю, не оставляя места для ее неоднозначного толкования и неопределенного исполнения.
  • 3. Результативность алгоритма — свойство алгоритма всегда приводить к нужному результату через конечное число шагов.
  • 4. Массовость алгоритма — каждый алгоритм, разработанный для решения некоторой задачи, может применяться для решения задач этого типа при всех допустимых значениях исходных данных.
  • 5. Компактность алгоритма — лаконичность изложения алгоритма.
  • 6. Эффективность алгоритма — выполняется с минимальными затратами машинного времени и аппаратных средств, а также за разумное конечное время.

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

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

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

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

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

Источник: studref.com

10 шагов по решению задач в программировании

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

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

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

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

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

Допустим, мы создаём простую функцию selectEvenNumbers , которая берёт массив чисел и возвращает массив evenNumbers с одними лишь чётными числами. Если чётных чисел в исходном массиве нет, то массив evenNumbers возвращается пустым.

function selectEvenNumbers() < // здесь ваш код >

Какие вопросы можно себе задать:

  • Как компьютер может сказать, что число является чётным? Разделить на 2 и проверить, чтобы результат получился целым.
  • Что я передаю этой функции? Массив.
  • Что содержит этот массив? Одно или несколько чисел.
  • Какие типы данных у элементов массива? Числа.
  • Какова цель этой функции? Что я возвращаю в конце её выполнения? Цель — получить все чётные числа и вернуть их в массиве. Если нет чётных чисел, то массив возвращается пустым.

2. Пройдите по задаче вручную как минимум с тремя наборами данных

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

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

Крайние случаи: проблемы или ситуации, возникающие только при экстремальных (минимальных или максимальных) значениях параметров функционирования.

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

[1]
[1, 2]
[1, 2, 3, 4, 5, 6]
[-200.25]
[-800.1, 2000, 3.1, -1000.25, 42, 600]

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

Давайте пройдём по массиву [1]

  1. Смотрим на единственный элемент массива [1] .
  2. Определяем, является ли он чётным. Не является.
  3. Замечаем, что других элементов в массиве нет.
  4. Определяем, что здесь нет чётных чисел.
  5. Возвращаем пустой массив.
  1. Смотрим на первый элемент массива [1, 2]
  2. Это 1 .
  3. Определяем, является ли он чётным. Не является.
  4. Смотрим на следующий элемент.
  5. Это 2 .
  6. Определяем, является ли он чётным. Является.
  7. Создаём массив evenNumbers и добавляем в него 2 .
  8. Замечаем, что других элементов в массиве нет.
  9. Возвращаем массив evenNumbers — [2] .

3. Упрощайте и оптимизируйте свой алгоритм

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

  1. Создадим функцию selectEvenNumbers .
  2. Создадим новый пустой массив evenNumbers для хранения чётных чисел.
  3. Проходим по каждому элементу массива [1, 2] .
  4. Находим первый элемент.
  5. Делим его на 2 и определяем, чётный ли он. Если да, то прибавляем к evenNumbers .
  6. Находим следующий элемент.
  7. Повторяем шаг №4.
  8. Повторяем шаги №5 и №4, пока не кончатся элементы в массиве.
  9. Возвращаем массив evenNumbers вне зависимости от того, есть ли в нём что-то.

  1. Доказываем истинность для n = 1 , n = 2 , .
  2. Предполагаем, что будет истинно для n = k .
  3. Доказываем истинность для n = k + 1 .

4. Пишите псевдокод

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

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

Читайте также:
Как правильно настроить 86 счет в программе 1с для нко

Применительно к нашему случаю есть много разных вариантов. Например, можно использовать filter , но ради простоты примера воспользуемся простым циклом for (однако при последующем рефакторинге мы ещё столкнёмся с filter ).

Вот пример псевдокода, в основном состоящего из слов:

function selectEvenNumbers создаём массив evenNumbers и делаем его эквивалентным пустому массиву для каждого элемента в этом массиве смотрим, является ли элемент чётным если чётный (при делении на 2 результат получается нецелым) добавляем его к массиву evenNumbers return evenNumbers

А вот псевдокод, в котором слов гораздо меньше:

function selectEvenNumbers evenNumbers = [] for i = 0 to i = length of evenNumbers if (element % 2 === 0) добавляем его к массиву evenNumbers return evenNumbers

Главное, писать код построчно и понимать логику каждой строки.

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

5. Преобразуйте псевдокод в нормальный код и отладьте его

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

Если вы писали на бумаге, то перенесите всё в редактор в виде комментариев, а затем замените каждую строку.

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

selectEvenNumbers([1]) selectEvenNumbers([1, 2]) selectEvenNumbers([1, 2, 3, 4, 5, 6]) selectEvenNumbers([-200.25]) selectEvenNumbers([-800.1, 2000, 3.1, -1000.25, 42, 600])

После каждой переменной или строки можно использовать console.log() . Это поможет проверить, ведут ли себя значения и код так, как ожидается, прежде чем двигаться дальше. Таким образом вы выловите любые проблемы, не зайдя слишком далеко. Вот пример того, какие значения можно проверить при начале работы.

function selectEvenNumbers(arrayofNumbers) < let evenNumbers = [] console.log(evenNumbers) // Удаляем после проверки выходных данных console.log(arrayofNumbers) // Удаляем после проверки выходных данных >

Ниже приведён код, полученный после обработки каждой строки псевдокода. Символы // обозначают строки из псевдокода. Жирным выделен реальный код на JavaScript.

// function selectEvenNumbers function selectEvenNumbers(arrayofNumbers) // evenNumbers = [] let evenNumbers = [] // for i = 0 to i = length of evenNumbers for (var i = 0; i < arrayofNumbers.length; i++) // if (element % 2 === 0) if (arrayofNumbers[i] % 2 === 0) // добавляем его к массиву evenNumbers evenNumbers.push(arrayofNumbers[i]) > > // return evenNumbers return evenNumbers >

Уберём псевдокод, чтобы не путаться.

function selectEvenNumbers(arrayofNumbers) < let evenNumbers = [] for (var i = 0; i < arrayofNumbers.length; i++) < if (arrayofNumbers[i] % 2 === 0) < evenNumbers.push(arrayofNumbers[i]) >> return evenNumbers >

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

6. Упрощайте и оптимизируйте код

Возможно, вы заметили, что упрощение и оптимизация — это повторяющиеся темы.

«Простота — предпосылка надёжности».

Эдсгер Дейкстра, нидерландский учёный и один из первопроходцев в ряде областей информатики

В нашем примере одним из путей оптимизации будет фильтрация элементов в массиве посредством возвращения нового массива с помощью filter . В этом случае нам не нужно определять переменную evenNumbers , потому что filter вернёт новый массив с копиями элементов, которые соответствуют фильтру. При этом исходный массив не изменится. Также нам не нужно использовать цикл for . filter пройдёт по каждому элементу, и если вернёт true, то элемент попадёт в массив, а если false , то будет пропущен.

function selectEvenNumbers(arrayofNumbers) < let evenNumbers = arrayofNumbers.filter(n =>n % 2 === 0) return evenNumbers >

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

Задавайте себе такие вопросы:

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

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

Джеральд Сассман и Гарольд Абельсон, авторы “Structure and Interpretation of Computer Programs”

7. Отлаживайте

Этот шаг необходимо выполнять в ходе всего процесса. Сквозная отладка поможет раньше выловить любые ошибки синтаксиса или недостатки логики. Воспользуйтесь преимуществами своего IDE (Integrated Development Environment) и отладчика. При обнаружении бага рекомендуется просматривать код построчно, стараясь найти неожиданные вещи. Несколько советов:

  • Читайте, что пишется в сообщения об ошибках в консоли. Иногда в них указываются номера строк для проверки. Это даст вам исходную точку для поисков, хотя иногда проблемы могут скрываться в других строках.
  • Комментируйте блоки кода или строки, а также выходные данные, чтобы быстро подмечать поведение кода. При необходимости код можно всегда раскомментировать.
  • Используйте другие образцы данных, если возникают непредусмотренные сценарии.
  • Сохраняйте разные версии файла, если применяете другие подходы. Не стоит терять наработанное, если захочется откатиться к прежнему решению!

«Самый эффективный инструмент отладки — тщательное продумывание в сочетании с разумно размещёнными командами вывода на экран».

Брайан Керниган, профессор информатики в Принстонском университете

8. Пишите полезные комментарии

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

Избегайте таких комментариев:

// Это массив. Итерируем его.
// Это переменная.

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

  • Для чего этот код?
  • Что он делает?

9. Получайте отзывы посредством ревизии кода

Получайте отзывы от коллег, руководителей и других разработчиков. Читайте Stack Overflow. Смотрите, как другие решали аналогичные задачи и учитесь у них. Нередко бывает несколько способов решения задачи. Узнайте, что они собой представляют, и вам будет быстрее и проще приходить к ним самостоятельно.

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

Дядя Боб Мартин, программный инженер и соавтор манифеста Agile

10. Практикуйтесь, практикуйтесь, практикуйтесь

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

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

«Гордитесь тем, сколько вы прошли. Верьте в то, что пройдёте ещё больше. Но не забывайте наслаждаться путешествием».

Майкл Джозефсон, основатель Института этики Джозефа и Эдны Джозефсон

Источник: habr.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru