Что такое рефакторинг кода и зачем он нужен

Источники рефакторинга

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

Рисунок 2. Возможные источники рефакторинга, как отдельной задачи

Рефакторинг может быть востребован при реализации Фичи или быть частью крупной инициативы по рефакторингу, необходимой для каких-то архитектурных Enabler. Новые пользовательские Истории также могут потребовать некоторого рефакторинга кода. Накопленный технический долг также может подтолкнуть команду к рефакторингу определенных компонентов. Другие же задачи по рефакторингу могут быть вызваны новыми Нефункциональными Требованиями.

Не все подобные задачи исходят из пользовательских историй. Иными словами мы не всегда рефакторим только для того, чтобы это разблокировало создание фичей. Например, Test-Driven Development (TDD) подталкивает нас к непрерывному рефакторингу, как части процесса по изменению кода. То есть разработчики должны постоянно править и улучшать уже разработанный код с тем, чтобы он в лучшей степени отвечал текущим и будущим требованиям. Такая работа должна быть заложена при оценке соответствующей Истории. Однако, нужно учитывать, что отдельно сформулированные задачи на рефакторинг, могут быть частью более серьезного редизайна, который необходимо планировать и отслеживать как отдельный элемент бэклога.

Avoid Bugs with PHPDocs

So far, you’ve learned PhpStorm efficiency tips and tricks, but wait, there’s more. Efficiency is not the only area where it can help, it can also help avoid bugs, even before the first run of your program.

Out of the box, PhpStorm tells you about obvious errors.

For example, if you have forgotten a semicolon after a statement, it will mark it red, but that functionality is trivial, so I’ll not describe it.

What’s interesting is when PhpStorm tells you about much more complex bugs, when you give it the information it needs to via PHPDocs.

Ideally, PHPDoc specifications is mandatory on your team for all methods and made as rigorous as possible. Consider an example with our class again. Assume we have a function, which returns an array of objects:

By default it’s not documented, so other developers may not know the type of the returned value and may use it improperly.

For example, some other developer wants to retrieve a list of usernames. For some reason, she thinks, that the object has a getName() method. But in reality it doesn’t, so the developer makes a mistake:

PhpStorm doesn’t treat this is as a bug because it knows nothing about the $user variable. So it stays unnoticed, and we end up with a very nasty error.

The first option is to just turn on strict typing, which became possible in PHP7, but let’s assume we can’t do that for some reason. Maybe we are working with legacy code. In this case, PhpStorm will help us, if we let it.

For this to work, you’ll need to generate a PHPDoc for every function. It’s commonly considered a good habit, and it will help you to avoid bugs, get along with fellow developers, and even pass interviews in which employers examine your source code.

To generate a PHPDoc, move the cursor to the name of the function, press , pick the item “Generate PHPDoc for function” in the popup menu, and press again.

The basic PHPDoc template will appear:

You can see PhpStorm guessed that the returning value is an array, but it couldn’t guess that it’s an array of objects, so let’s explicitly stipulate this by changing ‘array’ to read ‘User[]’ instead:

Now that we’ve told PhpStorm what it needs to know about the method, let’s return to the method call:

Now that PhpStorm can parse the PHPDoc return type declaration, it can point us to the error and even hint as to what exactly is wrong. PhpStorm, in combination with PHPDocs, can make PHP a very rigorous language! An amazing outcome!

Сохранение важных частей переписки

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

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

Backed enums

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

Перечисления со скалярными эквивалентами для кейсов, называются backed enums.

Если вы объявили стандартное перечисление (unit enum) и затем решили сделать из него backed enum, то можно нажать Alt+Enter на подчеркнутых кейсах и добавить декларацию типа для всего перечисления.

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

Это все по перечислениям. Будем рады вашим идеям по возможным улучшениям!

Перечисления

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

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

PhpStorm отследит любые ошибки, связанные с использованием типов, и подсветит их в редакторе.

Новые значения в перечислениях (cases) можно создавать с помощью специального квик-фикса: переставьте указатель туда, куда хотите добавить использование нового кейса, введите его, а затем нажмите Alt+Enter и выберите Add enum case.

JetBrains

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

Что предоставляют?

ReSharper Ultimate — набор инструментов для разработки под .NET. В комплекте:

  • ReSharper, расширение VisualStudio для разработки под .NET;
  • ReSharper C++, расширение для разработки на C++;
  • dotTrace, инструмент контроля производительности;
  • dotMemory, профилировщик памяти;
  • dotCover, инструмент для запуска юнит-тестов и анализа покрытия кода;
  • dotPeek, инструмент для декомпиляции и исследования сборок.

IntelliJ IDEA — одна из самых популярных разработок компании, IDE для JVM. Community версия этой среды разработки доступна и бесплатно. В версии Ultimate компания предлагает такие дополнения:

  • интеграцию системы управления версиями Perforce;
  • поддержку JavaScript и TypeScript;
  • поддержку распространённых фреймворков и технологий, таких как Hibernate, Guice, FreeMarker, Velocity, Thymeleaf, Java EE, Spring, GWT, Vaadin, Play и других;
  • инструменты для работы с базами данных и SQL;
  • обнаружение повторяющихся участков кода.

Кроме этих двух больших продуктов, JetBrains предлагает студентам и преподавателям такие IDE:

  • AppCode под iOS/macOS;
  • PyCharm для Python и Django;
  • CLion для C/C++;
  • Rider под .NET;
  • DataGrip для баз данных и SQL;
  • RubyMine для Ruby и Rails;
  • GoLand для Go;
  • WebStorm для JavaScript;
  • PHPStorm для веб-разработки и PHP.

Как получить?

Способ 1. Студенческий/преподавательский адрес электронной почты. Помимо него потребуется сообщить статус (студент/преподаватель), имя и фамилию и страну, в которой находится учебное заведение. У студентов спросят про возраст, для оформления подписки нужно достичь 13 лет. На преподавателей это требование, видимо, не распространяется.

Способ 2. Обладатели удостоверения ISIC/ITIC могут ввести данные своей карточки — серийный номер и отображённое на карте имя. В таком случае ученический адрес личной электронной почты не требуется, подойдёт любой.

Способ 3. Можно попробовать предоставить официальный документ, подтверждающий ваш статус — например, студенческий билет. Нужно будет ввести имя и фамилию, адрес электронной почты (любой, принадлежащий вам), название учебного заведения, его официальный веб-сайт и страну размещения. Также надо подтвердить, что учебное заведение предоставляет услуги среднего или высшего образования и выдаёт дипломы государственного образца, а вы участвуете в образовательной программе длительностью от одного года. Скан или фотография документа должны быть не больше 4 мегабайт, содержать ваше имя, название образовательного учреждения, указания на срок действия документа. Надписи должны быть хорошо читаемы и доступны для перевода с помощью Google Translate. Вместо изображения документа можно предоставить ссылку на информацию.

Способ 4. Если вы оформили подписку на GitHub Student Developer Pack, можно подтвердить свой статус с помощью аккаунта GitHub. Вас автоматически переведут с сайта JetBrains на форму авторизации.

Срок подписки?

Лицензия предоставляется на один год и её можно продлевать — вам пришлют напоминание по электронной почте. Выпускники получают скидку 25% на покупку ПО, входящего в пакет. Скидка действительна в течение года после выпуска.

***

Принятие культуры рефакторинга

Рефакторинг — это обязательный навык для Agile-команд и критически важный компонент компетенции Командной и Технической Гибкости в Lean-организации. Задачи по рефакторингу должны регулярно появляться в бэклоге команды и включаться, наравне с точечным рефакторингом, в оценку пользовательских историй

Создание Community of Practice (CoP) может повысить осведомленность и внимание к методам рефакторинга среди команд. Scrum-мастера могут помочь своим командам изучить эффективные подходы к тому как описывать, оценивать и разбивать задачи по рефакторингу

Владельцы Продуктов должны соглашаться на рефакторинг, корректно расставляя приоритеты работ и помогая определять критерии приемки.

Культура автоматизации тестирования, включая TDD и Behavior-Driven Development (BDD), дает возможность собрать большой набор тестов, которые сделают рефакторинг проще и надежнее. При этом ошибки, вносимые рефакторингом, сразу же будут выявляться тестами.

SAFe and Scaled Agile Framework are registered trademarks of Scaled Agile, Inc.

Microsoft

Примечание Программа пока недоступна на территории РФ

Еще один корпоративный гигант, не слишком дружелюбный к пользователям. Готовьтесь к устаревшим данным, ссылкам, ведущим не на те страницы, или ведущим никуда. Программа поддержки учащихся анонсирована в 2008 году под названием DreamSpark, и её сайт больше не работает. Сейчас этот проект называется Microsoft Imagine (спойлер: на самом деле это название уже тоже устарело).

К сожалению, в настоящее время пакет бесплатных программ недоступен на территории РФ, однако в надежде на читателей из других стран мы всё же расскажем об условиях его предоставления. Проект предназначен для учеников средней школы старше 12 лет, студентов и преподавателей.

Что предоставляют?

Программа предлагает зарегистрированным участникам пакет ПО, который на вроде как называется Microsoft Imagine for Students. При переходе на регистрацию студенческого аккаунта оказывается, что это теперь Azure Dev Tools for Teaching. Ну, вот так. При регистрации дают 12 месяцев бесплатного доступа к базовым версиям платных программ и $200 на внутренний счёт. В пакет входит даже больше наименований, чем в предложении от GitHub, остановимся на основных. Полный список можно найти здесь.

  • Microsoft Azure — основной элемент пакета, платформа облачных сервисов Microsoft. Базовый вариант обычно предоставляется бесплатно.
  • Visual Studio Community — среда разработки с поддержкой создания приложений под Windows, iOS, Android. Интегрирована с облачными службами. Бесплатное ПО.
  • Xamarin Studio Community — инструмент для кросс-платформенной разработки мобильных приложений.
  • Microsoft Machine Learning Server — платформа для анализа данных, создания интеллектуальных приложений и получения аналитических сведений.
  • SQL Server — платформа для управления SQL базами данных.
  • Pluralsight — сборник обучающих курсов для разработчиков.

Как получить?

Есть несколько способов верификации статуса учащегося в зависимости от страны. Обычно есть 4 варианта:

  1. Карточка ISIC/ITIC.
  2. Скан или фотография документа — например, студенческого билета или удостоверения преподавателя.
  3. Адрес студенческой электронной почты.
  4. Регистрация в программе учебного заведения. Учащиеся и преподаватели в таком случае получают упрощённый доступ.

К сожалению, в России пока недоступен ни один из этих способов.

Исследование сервера

После настройки сервера развёртывания ты можешь просматривать удалённый сервер с помощью пункта главного меню
. Он откроет новое окно
инструментов в PhpStorm, в нём можно работать с удалёнными каталогами и файлами.

Внимание

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

Заметка

Ты можешь перемещаться между соответствующими локальными и удалёнными каталогами
с помощью сочетания клавиш Alt + F1.

Разрушаем мифы о PhpStorm

Илья Бирман написал:

Давайте я тоже поддержу межблоговые дискуссии и отвечу Илье. А ответить есть что.

Уже лет 5 я использую PhpStorm как один из основных инструментов. Как такое могло произойти, если среды разработки — уродские и тормознутые? Давайте разбираться.

Переход на PhpStorm

Раньше я программировал в Notepad++. Вершина его функций — поиск и замена по всем файлам в папке. Казалось, этого вполне достаточно. Мне тоже нравилась скорость работы редактора, и я тоже относился к IDE снисходительно. «Я и так знаю названия функций, нахрена мне тормознутая подсветка синтаксических ошибок в коде?»

Я не помню, что заставило меня скачать PhpStorm. Мне могли понадобиться какие-то возможности, которых не было в плагинах к Notepad++. Или я заинтересовался, что же всё-таки находят в нем люди. Помню только, что он подсвечивал желтым слишком много подозрительных мест в моем коде.

Тем не менее, PhpStorm у меня прижился. Как автор опенсорсного продукта — движка S2 — я получил бесплатную лицензию. С тех пор PhpStorm стал одним из основных моих инструментов.

Миф №1: PhpStorm тормозит

PhpStorm как IDE отличается от текстовых редакторов:

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

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

Миф №2: переименование файла занимает в PhpStorm несколько секунд с прогресс-баром

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

Поиск старого названия файла можно отключить прямо в окне переименования. Тогда файл переименовывается мгновенно.

Миф №3: PhpStorm «устанавливать и настраивать год»

Установка проходит не сложнее установки любых других программ. Первоначальной настройки PhpStorm не требует. Может открыть любую папку как проект без предварительных вопросов.

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

  • путь к git.exe для работы с гитом;
  • доступ к БД, чтобы делать запросы из среды разработки;
  • доступ на сервер по SSH/FTP для загрузки файлов проекта.

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

Миф №4: PhpStorm «выглядит как говно»

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

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

Политика лицензирования и обновлений

В ноябре 2015 года JetBrains перешла на лицензирование PhpStorm по подписке. Ежегодные подписки или ежемесячные подписки, поддерживаемые в течение 12 месяцев подряд, также получают «бессрочную резервную лицензию» к основной версии, доступной на момент покупки. PhpStorm доступен как индивидуальным разработчикам, так и компаниям и организациям. Дополнительные лицензии со скидкой и дополнительные лицензии доступны для стартапов, студентов и преподавателей, а также для некоммерческих проектов с открытым исходным кодом. Эти дополнительные лицензии требуют утверждения и не содержат положения о бессрочном отказе, т. Е. Срок их действия истекает.

Настройка сервера развёртывания

2.1. Создание сервера развёртывания

Создание сервера развёртывания может быть осуществлено через следующие пункты главного меню IDE:
или .
При нажатии на кнопку с зелёным плюсиком на панели инструментов можно добавить
новый веб-сервер.

Дай серверу имя и выбери его тип. Это может быть любой из следующих:

  • FTP — подключение к серверу развёртывания с помощью FTP.
  • SFTP — подключение к серверу развёртывания с помощью SFTP.
  • FTPS — подключение к серверу развёртывания с помощью FTPS.
  • Local or mounted folder (локальная или примонтированная папка) — корневая
    директория документов сервера развёртывания. Является доступной как локальная папка на компьютере или в виде
    подсоединённой папки на удалённом компьютере.
  • In place (на месте) — проект PhpStorm находится в корневой директории
    локального веб-сервера.

Нажми кнопку OK, чтобы добавить сервер развёртывания.

Заметка

Когда сервер развёртывания создаётся и настраивается в каком-либо проекте,
то он и детали его подключения становятся глобальными и доступными для любого проекта открытого в PhpStorm,
а параметры вкладок Mappings (отображения) и
Excluded Paths (исключаемые пути) являются настройками каждого конкретного проекта.
Таким образом, несколько проектов могут использовать один и тот же сервер развёртывания без необходимости настройки
подключения для каждого из них в отдельности.

2.2. Настройка подключения

Теперь на вкладке Connections (подключения) ты должен указать сведения о соединении.
В зависимости от типа сервера, выбранного ранее, эти параметры будут отличаться.

Но один параметр является общим для всех типов соединений — это корневой URL-адрес веб-сервера. Обычно им выступает
URL-адрес до корневого каталога документов сервера.

Далее, мой друг, рассмотрим подробно параметры каждого типа соединения.

2.2.1. FTP, FTPS, SFTP

Для FTP, FTPS и SFTP конфигурации соединений более или менее похожи. Ты должен указать имя хоста, порт,
корневой путь (путь на удалённом сервере, который будет использоваться в качестве корня) и учётные данные.

Кнопку Advanced options… (расширенные опции) можно использовать для настройки
дополнительных параметров подключения. Обычно в этом нет необходимости, но если, например, требуется пассивный
режим или ограничение на количество одновременных соединений, то эти параметры могут быть определены.

Используя кнопку Test FTP connection…, ты сможешь проверить корректность введённых
ранее параметров. Ниже представлен результат успешной проверки.

Для локальной или примонтированной папки ты должен указать путь, куда файлы проекта должны быть развёрнуты.

2.2.3. На месте (локальный веб-сервер)

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

2.3. Настройка отображений

Отображение — это отношение между папками проекта, папками на сервере для копирования файлов проекта и URL-адресами
для доступа к данным на сервере через HTTP. Эти сопоставления используются, чтобы помочь PhpStorm найти файл или
папку в нашем проекте или на удалённом сервере.

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

Local Path(локальный путь) Deployment Path(путь развёртки, например, на FTP сервере) Web Path
(URL-адрес — веб-путь)
C:\OpenServer\domains\vpawd.lc

  • application — содержит контроллеры и код приложений;
  • public — соответствует корневой директории документов сервера
    и обычно содержит JavaScript, CSS и т.д.

Такой тип приложений может быть отображён следующим образом:

Local Path(локальный путь) Deployment Path(путь развёртки, например, на FTP сервере) Web Path(URL-адрес — веб-путь)
C:\OpenServer\domains\vpawd.lc\application /application
C:\OpenServer\domains\vpawd.lc\public /public

Внимание

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

2.4. Установка сервера по умолчанию

Если ты используешь только один сервер развёртывания для многих проектов (часто так и бывает), имеет смысл
установить его в качестве сервера по умолчанию. В окне Deployment на вкладке
Mappings с использованием кнопки
Use this server as default можно установить сервер по умолчанию для проекта.

Демонстрация результатов рефакторинга

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

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

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

IDE

Действия при сохранении кода

В PhpStorm и раньше позволял настроить действия, срабатывающие при нажатии Cmd+S / Ctrl+S. В этой версии переработали все существующие функции и собрали их в одном месте.

Теперь все опции доступны в разделе Preferences / Settings | Tools | Actions on Save. Перечисленные здесь действия можно включить в перечень действий, вызываемых при нажатии на Cmd+S / Ctrl+S.

Просто установите галочку рядом с названием нужных действий. Большинство действий будет активироваться при любом сохранении, включая автосохранение. Для действий типа «File Watcher» и «Upload to default server» вы можете выбрать один из двух вариантов активации.

Изменение иконки проекта

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

Теперь стало проще установить иконки для проектов. Для этого щелкните правой кнопкой мыши на любом проекте и выберите в контекстном меню Choose project icon.

Улучшения scratch-файлов

С помощью scratch-файлов можно делать заметки и писать черновой код вне контекста проекта. Чтобы создать новый scratch-файл, нажмите Ctrl+Shift+N.

В это релизе теперь можно выделить нужный код, нажать Alt+Enter, и выбрать Create new scratch file from selection.

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

В чём опасности рефакторинга

Мы всё-таки меняем рабочий код. Тут можно не только всё упростить, но и сильно напортачить. Небрежный рефакторинг может отбросить выполнение проекта на дни и недели.

Опасно делать рефакторинг не постоянно, а от случая к случаю. Соблазн сильно улучшить код становится невыносимым. Вы всё глубже закапываетесь в программу и копаете себе яму, в которой легко увязнуть. Рефакторьте постоянно и по чуть-чуть.

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

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

Документация и сказки про самодокумендируемый код

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

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

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

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

Документирование кода дает еще один плюс – когда вы описываете назначение какого-то класса или метода, вы как бы смотрите на него со стороны и, иногда, понимаете, что нужно бы выделить какой-то метод в отдельный класс или вообще, что писать его не нужно. Попробуйте, в самом начале будет сложновато создавать вразумительные doc-блоки, но, со временем, вы и ваши коллеги получите пользу от этого дела.

Как подтвердить свой статус с помощью почты или ISIC/ITIC

Почта

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

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

Обратите внимание, это должен быть именно ваш личный адрес, а нее адрес учебного заведения. Он может выглядеть как-то так: student_name@school_name.edu

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

ISIC/ITIC

Ещё один способ подтверждения статуса — карта ISIC (International Student Identity Card), а для преподавателей ITIC (International Teacher Identity Card). Кроме студентов получить её могут учащиеся курсов длительностью не менее 9 месяцев, школьники старше 12 лет, аспиранты и учащиеся среднеспециальных учебных заведений. Стоимость оформления составляет 600 ₽. К сожалению, карта не бессрочная, она будет действовать с сентября того года, в котором была оформлена, до конца декабря следующего.

Для оформления карты нужно предоставить следующие документы:

  • студенческий/аспирантский билет, продлённый на текущий учебный год, или актуальную справку из учебной части;
  • паспорт или загранпаспорт;
  • цветное или чёрно-белое фото 3*4.

К школьникам немного другие требования:

  • паспорт, загранпаспорт или свидетельство о рождении;
  • социальная карта или актуальная справка из школы;
  • цветное или чёрно-белое фото 3*4.

***

Декомпозиция рефакторинга

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

1. По пользовательским сценариям или пользовательским историям — рефакторить инкрементально историю за историей, или сценарий за сценарием, или каким-то иным способом выделить несколько функциональных областей для их последовательного рефакторинга.
Оптимизировать запросы к БД и внедрить кеширование данных, чтобы система работала быстрее …Отрефакторить все функции управления пользователями… Далее функционал просмотра каталога… Далее функционал проверки работоспобности
2. По компонентам — сначала провести рефакторинг кода одного компонента, а потом перейти к следующему.
Поменять процесс индексирования на пакетную обработку, чтобы процесс был как минимум в 2–3 раза быстрее для средней веб-страницы …Рефакторим парсинг (компонент парсера)… Далее экстрактор сущностей (компонент-анализатор)… Далее хранение в индексе (компонент индекса)
3. По интерфейсам/реализациям — сначала создаем интерфейс и оборачиваем им старую функциональность, а потом рефакторим саму функциональность.
Извлечь все параметры синтаксического анализа в xml-файл конфигурации, чтобы процесс можно было легко настроить без изменения кода …Ставим PINGID Protocol server и тестим его с помощью провайдера идентификации mock…Читаем конфигурацию из файла в любом формате… Рефакторим функциональность конфигурирования, чтобы поддерживать в должном состоянии валидацию структуры и схемы
4. Уменьшение устаревшего кода / Разделение монолита — постепенно переносим функциональность из legacy-компонента (компонент с устаревшим кодом) в новые; как только все будет перемещено, удаляем старый код.
Заменить базу данных пользовательским поисковым индексом, чтобы производительность индексирования и поиска повысилась в 10-20 раз …Сначала переносим индексацию данных в поисковый индекс… Далее переносим словари
5. Точечный рефакторинг / Инкапсуляция результата – сначала рефакторим там, где это нужно, но потом извлекаем измененную сущность и инкапсулируем ее в компонент, класс или метод/функцию.
Заменить ad hoc синтаксический анализ на анализ на основе грамматики так, чтобы изменение правил синтаксического анализа стало простым и без необходимости кодирования …Рефакторим текущий код так, чтобы он использовал нотацию грамматик… Извлекаем эту функциональность и помещаем ее в движок грамматик

Таблица 1. Методы разбиения задач по рефакторингу

Что не понравилось

  • Высокий порог входа. Нельзя просто запустить программу и открыть в ней какой-нибудь файл. Нужно сразу разбираться, что это за «проекты» и как их заводить.
  • Неудобная точечная работа по SFTP.
    • Открыть файл на удалённом сервере можно только из загруженного в среду проекта.
    • Файл сохраняется не сразу напрямую на сервер, а куда-то локально. Загружать на сервер нужно принудительно (). Её можно использовать вместо — так файл будет сразу сохранен и локально, и на сервер.
  • Установка плагинов требует перезапуска.
  • Нельзя работать с gist.github.com («из коробки» не умеет, а плагины заброшены; подробнее см. ниже)
  • При включенной русской раскладке клавиатуры не работают некоторые горячие клавиши (например, , приходится смотреть, какой язык. Похоже, это баг, т.к. на другие горячие клавиши, составленные с участием латинских букв, это не распространяется.
  • Во встроенной консоли не действуют стандартные горячие клавиши для работы с оболочкой bash (, и др.), которые действуют в обычной , что делает работу с bash под Windows невозможной

В заключение

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

Стоит обратить внимание на содержащийся практически в каждой студенческой лицензии пункт, запрещающий использование продуктов и разработанного с их помощью ПО в коммерческих целях

Есть и ещё одна точка зрения. Человек привыкает к определённой рабочей среде — это не понаслышке известно тем, кто пытался, к примеру, перевести бухгалтерию с MS Office на OpenOffice. И компании-разработчики пытаются привязать будущих клиентов к интерфейсу своих продуктов.

Так ли это важно? Предлагаем подумать на досуге. А пока, студент, лови халяву!

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Люкс-хост
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: