Для чего нужен и что делает Javascript. Примеры.

Если вы еще не знакомы с понятием Javascript, то об этом я писал тут.

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

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

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

Самое главное в том, что все эти операции можно производить на веб-страницах, в окне браузера. Причем, javascript может работать и без подключения к сети Интернет.

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

Все мои уроки по Javascript здесь.

1) Математические операции

На веб-страницах очень часто возникает необходимость произвести те или иные вычисления.

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

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

Вот здесь есть пример такого калькулятора:

http://www.javascriptkit.com/script/cut18.shtml

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

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

2) Обработка и валидация данных в HTML-формах

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

Делает это Javascript без перезагрузки страницы и даже без подключения к Интернет.

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

3) Взаимодействия с пользователем и события

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

Выпадающее меню на сайте при наведении курсора мыши.

При клике на кнопку скрыть или показать какой-то элемент на странице.

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

Затемнение заднего фона и эффекты плавного появления элемента реализуются на Javascript.

И.т.д.

4) Взаимодействовать с HTML-элементами на странице и управлять их содержимым и стилями.

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

Делается это все программно.

Еще можно добавлять какие-нибудь HTML-теги или атрибуты к ним, также при наступлении определенного события.

5) Добавление анимации и различных графических эффектов на веб-страницы.

Падающие и двигающиеся объекты. Например, снег на сайт.

Плавное появление и скрытие объектов

Таймер обратного отсчета

И др. эффекты реализуются на Javascript

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

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

Все мои уроки по Javascript здесь.

9 прекрасных проектов, которые можно создать на ванильном JavaScript

Хочешь проверить свои знания по фронтенду?

Подпишись на наш канал с тестами по HTML/CSS/JS в Telegram!

Решать задачи

×

Перевод статьи «9 Awesome Projects You Can Build With Vanilla JavaScript».

Так выглядит стручок ванили.

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

В мире фронтенда существует множество фреймворков, например, React, Angular, Vue — и это лишь небольшая толика. Каждый из них прекрасен, без них фронтенд-разработка не достигла бы современных высот. Но все эти фреймворки, несмотря на существующие между ними различия, имеют и нечто общее: все они основаны на JavaScript. Да, старый добрый JS!

Не сомнений, что сегодня в web правит JavaScript. И каждый фронтенд-разработчик, не важно, опытный он или только начинающий свою карьеру, обязательно должен знать основы JavaScript, HTML и CSS.

Фреймворки приходят и уходят, а JavaScript остается!

Поэтому я решил составить небольшой список из девяти прекрасных проектов, которыми вы можете заняться, чтобы освежить свои навыки, узнать что-нибудь новое о JS и сохранить релевантный уровень знаний в 2020 году и дальше. Все эти проекты можно создать на чистом JavaScript (плюс HTML и CSS в разных пропорциях). Вы можете добавить их в свое портфолио, показывать рекрутерам или потенциальным работодателям, а также забросить в свой аккаунт на GitHub в качестве «справочников» для будущих работ.

Сразу проясню: цель этих проектов не в том, чтобы обучить вас всем премудростям JavaScript. Для этого есть специальные прекрасные курсы, раскрывающие все темы от А до Я. Здесь речь идет о создании каких-то вещей. О том, чтобы приложить руки к чему-то практическому. О выработке мышечной памяти.

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

Если вы прям сейчас хотите попробовать свои силы в JavaScript, попробуйте пройти тест в 20 вопросов по результатам которого вы сможете понять, стоит ли вам изучать этот язык самому или же пойти на курсы по программированию. Вопросы довольно сложные для новичка. Но проходной балл доступный.
ПРОЙТИ ТЕСТ

1. Приложение для медитации

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

В прилагаемом туториале используется ванильный JavaScript, как раз то, что нам нужно. Кроме того, вы научитесь манипуляциям со звуком и видео при помощи JS.

Голос инструктора четкий, а инструкции просты для понимания.

2. Виртуальная клавиатура

Это проект по созданию виртуальной клавиатуры с нуля. Используются ванильный JS, HTML и CSS. Приложение предназначено в т.ч. для использования в браузере; оно должно быть отзывчивым и пригодным для управления касаниями.

Мне нравится оригинальность этого проекта. Раньше мне не доводилось создавать виртуальную клавиатуру, так что создание ее лишь на JavaScript, HTML и CSS было для меня отличным опытом.

Что касается видео, то голос инструктора четкий, да и объясняет он довольно хорошо.

3. Корзина покупок eCommerce

Здесь мы создаем корзину покупок, которая может использоваться в онлайн-магазинах и на сайтах электронной коммерции. В работе применяются все те же ванильный JS, HTML и CSS. Для хранения информации о продуктах инструктор использует Contentful — headless CMS. Научиться работать с headless CMS вообще и с Contentful в частности не является основной целью проекта, но это хороший сервис, так что вы не пожалеете, увидев его в действии.

Запись туториала очень длинная. С одной стороны, это впечатляет, но с другой — довольно утомительно. Голос инструктора четкий и понятный. Иногда немного сложно уследить за мыслью, но это можно объяснить сложностью проекта.

4. Приложение для прогноза погоды

При создании этого приложения, помимо обычного набора технологий, используется Dark Sky API — для сбора информации о погоде. Так что это отличная возможность научиться взаимодействовать с APIs.

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

5. Issue-трекер

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

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

6. PIN Pad

Это проект по созданию клавиатуры для ввода PIN-кода в браузере (с функционалом проверки PIN-кода на корректность). В этом туториале инструктор применят исключительно ванильный JS, HTML и CSS.

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

7. Целевая веб-страница (лендинг)

Брэд покажет вам, как создать интерактивный лендинг, показывающий время и имя пользователя. Для хранения имени приложение использует локальное хранилище.

Брэд известен качеством своих туториалов. Именно этот — довольно короткий, и я бы сказал, что он простоват. Но зато в нем используются исключительно JavaScript, HTML и CSS.

8. Игра «Камень, ножницы, бумага»

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

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

9. Игра «крестики-нолики»

Это проект по созданию игры в крестики-нолики. Задача интересная, но вместе с тем и сложная, потому что здесь используются основы ИИ и алгоритмы. Но помимо этого все создается на старых добрых JS, HTML и CSS.

Проект имеет хороший размер и понятную структуру. Работать над ним интересно. Голос инструктора четкий, за мыслью уследить легко. Объяснения очень хорошие, так что с созданием игры все должны справиться.


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

10 вещей, которые вы можете создать с помощью JavaScript

Согласно ежегодным опросам разработчиков Stack Overflow, JavaScript — самый популярный язык программирования. Он удерживал это место довольно долго, впервые заняв первое место в 2014 году.

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

Закон Этвуда гласит: «Любое приложение, которое можно написать на JavaScript, в конечном итоге будет написано на JavaScript». Конечно, Джефф Этвуд пошутил над JavaScript, но это оказалось скорее правдой, чем нет.

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

1. Веб-сайты:

Итак, вы можете записать это как «довольно очевидное». Когда Брендан Эйх разработал Javascript еще в 1995 году, целью было добавить интерактивность и поведение к статическим сайтам. Почти 30 лет спустя мы все еще используем его для этого. Любой удаленно современный веб-сайт сегодня на каком-то уровне использует JavaScript.

2. Веб-приложения:  

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

3. Серверные приложения:

С ростом NodeJS за последнее десятилетие JavaScript переместился из браузера на сервер. С тех пор такие крупные компании, как LinkedIn, Uber и Walmart, приняли Node в качестве ключевой части своей серверной инфраструктуры.

4. Веб-серверы:

Поскольку мы затронули тему серверных приложений, вы видели приложение Node Hello World? Он демонстрирует, как построить веб-сервер примерно в 10 строках кода. Конечно, вы можете создавать гораздо более надежные серверы, используя NodeJS или стандартную среду серверных приложений ExpressJS. Многие из ранее упомянутых приложений, использующих Node, используют стек MEAN (Mongo, Express, Angular, Node), ключевым компонентом которого является Express.

5. Игры:

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

6. Презентации:

PowerPoint и Keynote — не самые популярные приложения, особенно среди разработчиков. Вероятно, это причина библиотеки RevealJS, которая позволяет легко создавать презентации в виде веб-сайтов с использованием HTML, CSS и JavaScript. Даже люди, не знакомые с веб-разработкой, могут по-прежнему использовать RevealJS для презентаций, просто не подозревая об этом — slides.com использует RevealJS для создания набора слайдов в Интернете.

7. Art:

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

8. Головоломки по программированию:

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

9. Мобильные приложения:

Менее чем за десятилетие с 2016 по 2022 год число пользователей смартфонов выросло более чем на два миллиарда. Сегодня 6,6 миллиарда пользователей смартфонов полагаются на мобильные приложения во всем, от банковских операций до отслеживания тренировок. Однако для разработчиков есть загвоздка: мобильные приложения для Android и Apple совершенно разные. Вот где на помощь приходит JavaScript, в частности React Native. Этот инструмент на основе JS позволяет разработчикам создавать кроссплатформенные мобильные приложения вместо того, чтобы писать два совершенно отдельных приложения. На самом деле, вы, вероятно, узнаете некоторые приложения, которые его используют, такие как Discord, Microsoft Outlook, Facebook и Instagram.

10. Летающие роботы:

Правильно — летающие роботы! Несколько имеющихся в продаже квадрокоптеров поставляются с простой ОС, позволяющей установить NodeJS. Это означает, что вы можете запрограммировать дрон с помощью JavaScript.

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

Все, что можно написать на JavaScript, в конечном итоге будет написано на JavaScript

Расскажите нам немного о себе

 Меня зовут Джон М. Райт, и я работаю профессиональным разработчиком программного обеспечения около 18 лет. В настоящее время я работаю в Stack Overflow и чуть больше года выступаю на технических конференциях и в группах пользователей в средней части США.

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

Уже более десяти лет я живу в западном пригороде Чикаго, штат Иллинойс, где мне нравится проводить время с женой и сыном-подростком. До этого я вырос в Кастровилле, штат Техас, маленьком городке посреди кукурузных полей и животноводческих ферм к западу от Сан-Антонио, штат Техас, затем еще десять лет жил в Остине, штат Техас, прежде чем переехать на север, чтобы спастись от техасской жары.

Как вы начали заниматься программированием?

Когда я был маленьким, мои родители купили Tandy 1000. Это было в те времена, когда вы запускали MS-DOS на одном 5,25-дюймовом дисководе, а свою программу — на другом 5,25-дюймовом. Он поставлялся с процессором 8088, который работал на частоте около 5 МГц. Я возился с ПК, читая исходный код пакетных файлов и программ QBasic. Моя мама любит рассказывать историю о том, как я нашел ошибку в одном из командных файлов, используемых в игре King’s Quest II и позвонил в службу поддержки Sierra Online, чтобы сообщить им не только об ошибке, но и о том, как ее исправить. Это было в конце 1980-х, то есть мне тогда было около 10 или 11 лет. Видимо, они были так впечатлены, что прислали мне бесплатную копию другой игры.

В старших классах я собирал компьютеры из деталей (этому научил меня мой отец) и знал, что хочу зарабатывать на жизнь компьютерами. В 1997 году я потратил немного денег на стипендию, чтобы собрать компьютер, который я возьму с собой в колледж, но у меня не было достаточно денег, чтобы купить жесткий диск, поэтому я «одолжил» у своего отца 100-мегабайтный жесткий диск, на котором было 20 % поврежденных секторов. это. Достаточно было загрузить Windows 95 и компилятор Borland C++, который я купил в университетском книжном магазине, и зацепился за него на всю жизнь.

Во время получения степени в области компьютерных наук я работал в университетском вычислительном центре, где помогал обслуживать кластеры мэйнфреймов DEC VAX, которые управляли университетом, и наблюдал, как штатные сотрудники паникуют из-за надвигающегося конца света Y2K. Один из моих коллег помог мне устроиться на работу в стартап в Остине, штат Техас, где я писал программы для Linux, в основном на C, а также немного Perl, Bash, PHP и TCL, пока я получал степень. Примерно в то же время Microsoft выпустила .NET, и я начал знакомиться с ней на стороне. Идея не управлять собственной памятью и использовать WYSIWYG-редакторы пользовательского интерфейса была захватывающей, и несколько лет спустя я перешел на полный рабочий день в экосистему .NET.

И теперь, после того, как я все это записал, я вспомнил, как далеко продвинулась наша индустрия всего за последние 30 лет. У меня есть еще 20 или около того лет до выхода на пенсию — я могу только представить, как это будет выглядеть к тому времени!

Какие приложения вы разрабатываете?

Команда, в которой я работаю в Stack Overflow, в основном занимается системами бэк-офиса и административной поддержки. Это означает много кода, связанного с выставлением счетов/выставлением счетов, отчетами и системной интеграцией.

Пара примеров систем, поддерживаемых моей командой:

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

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

Какие языки вы используете сегодня и почему?

Я провожу большую часть своего времени в стеке Microsoft, поэтому C# — это язык, на написание которого я потратил больше всего времени, с большим количеством общего веб-материала (HTML, JavaScript, CSS и т. д.). Я люблю говорить, что я неохотный разработчик JavaScript — я не особенно люблю этот язык, но закон Этвуда («любое приложение, которое можно написать на JavaScript, в конечном итоге будет написано на JavaScript») означает, что я не могу не написать какое-нибудь приложение. И, к большому огорчению нашего администратора баз данных, я также пишу немного сомнительный SQL. Итак, C#, HTML, JS и SQL — думаю, это делает меня общеизвестным разработчиком с полным стеком.

Я также люблю время от времени экспериментировать с другими языками. У меня есть несколько хобби-проектов IoT, где я напишу что-нибудь на Python или C для работы на микроконтроллере RaspberryPi или Arduino (мне нравятся устройства Particle Photon). Я баловался R и даже иногда Java или PHP. Я начал свою карьеру с написания C, и я ожидаю, что к тому времени, когда я выйду на пенсию, я буду сосредоточен на каком-то языке, который даже не находится на моем радаре в эти дни, поэтому знание того, что там есть, позволит мне работать достаточно долго, чтобы чувствовать себя комфортно. уходить в отставку.

Какая ваша самая большая страсть в последнее время связана с программированием?

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

Но больше всего мне нравится заниматься созданием программного обеспечения, которое делает жизнь людей проще и приносит больше удовольствия. Это может означать сокращение объема усилий, необходимых нашему отделу продаж для проверки и представления комиссионных выплат в бухгалтерию. Или за счет уменьшения разочарования команды по работе с дебиторской задолженностью, когда они отправляют счета или принимают платежи по кредитным картам. И, конечно же, быть частью сети Stack Overflow и Stack Exchange, помогая людям находить ответы на свои вопросы и развивать свои увлечения во всем: от программирования до кулинарии, от фотографии до авиации. Услышать от пользователя или заинтересованного лица, что то, что я написал, сделало их день проще или приятнее, является одним из самых полезных аспектов моей работы.

Что еще отстойно и чего не должно быть в программировании?

Я удивляюсь, когда слышу о разработчиках, которые не используют системы контроля версий и непрерывной интеграции. Такие инструменты, как Git и Jenkins, доступны бесплатно, а GitHub и TeamCity (которые я предпочитаю) стоят относительно недорого, поэтому на самом деле нет причин обходиться без них. Преимущества частых контрольных точек в цикле разработки, даже для команды из одного человека, а также возможность легкого резервного копирования и обмена ими с другими стоят почти несуществующих денежных и временных затрат на настройку и обслуживание этих системы. И все же, согласно опросу разработчиков Stack Overflow 2018 года, 19% профессиональных разработчиков программного обеспечения не используют современную систему контроля версий!

Какими наиболее важными навыками могут обладать разработчики?

Одна из ловушек, в которую попадают мы, профессиональные разработчики, заключается в том, что мы забываем, что в мире существует огромное количество разработчиков, которые не являются профессиональными разработчиками. То есть они пишут код в качестве хобби или в помощь своей работе, но это не является основной целью их повседневной работы. Навыки, наиболее важные для человека, которому платят за написание кода, во многих случаях отличаются от навыков, наиболее важных для того, кто пишет код, например, для автоматизации утомительной задачи или выполнения сложных математических вычислений в рамках исследовательского исследования. Основываясь на данных, которые мы видим на stackoverflow.com, мы оцениваем, что из 50 миллионов ежемесячных посетителей Stack Overflow только 21 миллион являются профессиональными разработчиками или студентами университетского уровня.

Имея это в виду, я бы сказал, что самым важным навыком, которым могут обладать разработчики, является написание кода, который легко понимают их коллеги. Для профессионального разработчика это другие разработчики в вашей команде или в вашей компании/клиенте. Но для многих людей эта группа сверстников может не обладать достаточными знаниями в области программирования. Им может потребоваться проверить правильность работы вашей программы или изменить ее для новых сценариев, поэтому не менее важно написание кода, следующего принципам SOLID. Разбиение логики на небольшие, легко понятные и хорошо названные методы, наличие классов с отдельными обязанностями и слабая связанность… все это делает код более легким для сопровождения и понимания. Конечно, это также упрощает программное тестирование и проверку, что, я уверен, оценят клиенты Typemock.

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

Как вы узнали о Typemock и какова была ваша первая реакция?

Я занимаюсь модульным тестированием в той или иной форме уже более десяти лет и большую часть этого времени использую mock-фреймворки. Но по большей части я был ограничен различными фреймворками без лицензионных отчислений, которые в основном работают через модель наследования для .NET. Пару лет назад я решил начать активно выступать на технических конференциях и в группах пользователей, и я подготовил доклад о фиктивных фреймворках, который я назвал «Издевательство над .NET без ущерба для его чувств», в котором рассказывается как о том, как использовать фиктивные фреймворки, так и о том, как они работают за кулисами. Я большой поклонник 9-й книги Роя Ошерова.0073 Искусство модульного тестирования и знал, что существует целая группа фиктивных фреймворков, не ограниченных правилами наследования. Я решил узнать о них больше, причем Typemock Isolator был вторым в этом списке после Microsoft Fakes (к которым у меня был доступ через мою лицензию MSDN). Сначала поиграв с MSFT Fakes, я был в восторге от возможностей этого класса фреймворка, но мне действительно не понравился синтаксис и читабельность Fakes. Когда я попробовал Typemock, это было как глоток свежего воздуха. Синтаксис был намного проще для понимания и гораздо более интуитивно понятен в использовании.

У вас есть советы для читателей, которые только начинают работать с Typemock?

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

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

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

Еще один совет, который я хотел бы дать, заключается в том, что вам не нужно 100% тестовое покрытие. На самом деле, я бы сказал, что у вас не должно быть со 100% покрытием. Опять же, тесты — это инструмент снижения рисков. Мы пишем много кода, который настолько прост или шаблонен, что риск его взлома очень и очень низок. А если точнее, то риск того, что он сломается и его никто не поймает , очень низок. Конечно, это также зависит от того, каким будет результат, если ошибка сбежит. Если наихудший результат для фрагмента кода заключается в том, что элемент пользовательского интерфейса находится немного не на своем месте, это может не стоить затрат на обслуживание, связанных со 100 модульными тестами для этого кода. Но если вы пишете код для кардиостимулятора, и в худшем случае чье-то сердце может остановиться и человек умрет, тогда 100 модульных тестов может оказаться недостаточно!

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

Как убедить своего руководителя писать больше модульных тестов или практиковать TDD?

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

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

Другими словами:

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

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

Какие из ваших обязательных инструментов или библиотек вы используете в своей повседневной работе?

Ну, есть очевидные вещи, такие как качественный редактор кода (для меня: Visual Studio или Visual Studio Code), какой-то статический анализатор (ReSharper, CodeRush, SonarQube и т. д.) и надежная среда сборки и тестирования.

Для меня есть еще один инструмент, который я считаю ключевым: простая в использовании утилита для захвата экрана/видео. Когда дело доходит до обмена идеями или объяснения того, как что-то работает/не работает, картинка стоит тысячи слов. Поэтому наличие утилиты для захвата экрана, с помощью которой вы можете быстро захватывать и комментировать части экрана, имеет большое значение. Лично я использую SnagIt от TechSmith, хотя есть много бесплатных вариантов.

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

Когда я работал в центре Чикаго, я совершал 5-10-минутную прогулку вокруг квартала летом или по коридорам зимой. Но теперь, когда я работаю полный рабочий день из дома, я иногда выхожу на прогулку, или стираю белье, или убираюсь в офисе — какая-то бессмысленная задача, где я могу немного отвлечься и просто отойти от экрана. Если я обнаруживаю, что мысленно зациклен на чем-то, от чего не могу избавиться, я обычно захожу в Твиттер на несколько минут и, возможно, читаю один или два поста в блоге, чтобы заставить свой разум думать о чем-то другом.

Какова ваша история ужасов/войны из окопов кодировщика?

Одной из услуг, которую предоставил мой первый работодатель, был общедоступный Wi-Fi в крупной кофейной компании, которую можно увидеть практически на каждой улице в США.

В то время за Wi-Fi в кофейне приходилось платить, но у нас была функция, позволявшая приобрести 12-часовой Wi-Fi в одном магазине, а затем пройти через квартал в другой магазин и продолжить пользоваться купленным сеансом.

Была ошибка, из-за которой некоторые люди не могли продолжить сеанс, когда они переезжали в другое место, и мне было поручено исправить эту ошибку. Я нашел проблему в нашей логике управления доступом и исправил ее, протестировал, запустил в производство и похвалил себя за хорошо выполненную работу. Три дня спустя мы обнаруживаем, что большие группы людей теперь получают бесплатный Wi-Fi во всех местах. Оказалось, что когда я исправил ошибку, она открыла путь к другой, более крупной и неприятной ошибке в другой части системы. Когда я проводил тестирование, я остановился перед другой ошибкой, поэтому не заметил ее. В итоге компании пришлось заплатить пятизначный штраф, чтобы покрыть упущенную выгоду за эти три дня, и я извлек пару ценных уроков:0003

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

Какой лучший совет вы когда-либо получали или какой совет вы дали бы себе в молодости?

В начале своей карьеры я взял на себя все больше руководящих обязанностей, и один из моих первых менеджеров, доктор Джим Килер, дал мне несколько советов, которыми я до сих пор пользуюсь почти 20 лет спустя. У меня есть склонность к перфекционизму, и я хочу убедиться, что все, что находится в зоне моей ответственности, идет хорошо. Но бывают случаи, когда все идет не так гладко, и хаос может казаться нормой. В то время мне приходилось работать по ночам и по выходным, чтобы не уронить все мячи, которыми я жонглировал, но это меня утомляло. Джим сказал мне, что время от времени пускать вещи на самотек – это нормально. Иногда вам нужно позволить вещам явно рухнуть, чтобы нужные люди узнали, что они сломаны, и только тогда вы получите помощь, необходимую для облегчения вашей ноши. Мысль о том, чтобы позволить чему-то, находящемуся под моей ответственностью, потерпеть неудачу, пугает, но если это то, что нужно заинтересованным сторонам, чтобы знать, что что-то сломано, то это может быть правильным поступком. Конечно, вы должны сделать все возможное, чтобы не довести дело до такой точки, но жизнь случается, и особенно в быстрорастущих компаниях может происходить так много всего, что «маленькие проблемы» не решаются до тех пор, пока они не станут «большими». проблемы». Так что позвольте им потерпеть неудачу (безопасным способом), чтобы они могли привлечь внимание, которого они заслуживают.

Какими интересными ссылками о себе вы можете поделиться?

Я слишком много бываю в Твиттере, так что вы можете найти меня там как @Wright2Tweet. Мой веб-сайт, включая мой блог, находится по адресу https://wrightfully.com. Между ними вы можете узнать, что я делаю, о чем думаю, куда еду или просто разглагольствую. Если вы хотите еще больше, на первой странице моего веб-сайта есть ссылки на другие мои дома в сети.

Какой вопрос мы должны были задать, но не задали, и каков был бы ответ?

Что вас заинтересовало в выступлениях на технических конференциях и в группах пользователей?

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