Возможно, кто-то воспримет эту статью как очередное нытье о том, «как плохо жить».
Но я все равно напишу это в надежде, что это побудит кого-то совершенствоваться.
И вдруг нынешний выпуск нашей разумной (хочется верить) цивилизации станет чуть более стабильным.
Причиной моего недовольства стал очередной неудачный опыт работы с фрилансером, называющим себя «мобильным разработчиком».
Мужчине дали задание, он его даже выполнил — приложение кое-как работало, хотя некоторые баги с удалением объектов наводили на грустные мысли о некорректной работе с индексами списков.
И это плохая примета.
Если человек не умеет работать с удалением из списков, то это, скорее всего, только начало проблем, а дальше следует ожидать худшего.
Так в принципе всё и произошло.
Когда техническое задание было почти готово, полностью оплачено и исходный код передан, я понял, что просто зря потратил деньги.
Напомню, что Android-приложения пишутся на Java — объектно-ориентированном (с некоторыми оговорками) языке.
Или даже некоторые объектно-функциональные (тоже с оговорками) языки программирования, такие как Kotlin и Scala. Наш герой, называвший себя «андроид-разработчиком», не освоил даже процедурное программирование (своего рода «бронзовый век» программирования) и остался где-то на структурном уровне («каменный век»).
Своим каменным топором на палке с единственной функцией «копипаста» он собрал все мое будущее приложение.
О, этот человек — гений копипаста.
Например, каждый раз, когда ему нужно было взять объект по id из списка, он писал цикл.
И когда он наткнулся на список списков, он написал вложенный цикл.
Поэтому мое новое приложение на 80% состояло из «лесенок» петель разной степени вложенности… Все эти циклы были до боли похожи друг на друга, но «разработчик» никогда не думал о создании приватного метода, например, getObjectById. Надо ли говорить, что методы вставки и обновления, каждый длиной в 200 строк, были на 90 процентов одинаковыми? Я начал рефакторить этот «чемодан без ручки» (неудобно носить, жалко выбрасывать — деньги потрачены).
IDEA честно выделила мне дублирующиеся части и предложила включить их в функции.
Просто нажав F2 (перейти к следующему предупреждению), Alt-Enter (показать параметры действия) и Enter (выбрать первый вариант по умолчанию).
Мне удалось сократить исходный код в 1,5 раза.
Остается загадкой, что помешало сделать это самому разработчику.
Не знаете, что у IDEA есть предупреждения? Потом я занялся рефакторингом классов, которые тоже тупо копировались, без малейшей попытки создать суперклассы с общим функционалом.
Пришлось серьёзно поработать над инкапсуляцией и побочными эффектами — статические публичные свойства классов успешно заменили отсутствие глобальных переменных в Java. Например, идентификатор редактируемого объекта был просто глобальной переменной основного действия.
В целом исходный код был раздут как минимум в три-четыре раза.
Напомню вам основную аксиому программирования:
Чем меньше кода, тем меньше глюков.Единственное, что не содержит ошибок, — это несуществующий код. Отсутствующий код (при сохранении функциональности) — это предел, к которому мы должны стремиться.
Неудивительно, что из этой аксиомы следует утверждение «больше кода — больше глюков».
Избыточный код — основная проблема копипаста — он примерно квадратично увеличивает количество ошибок в коде.
Для борьбы с этим явлением на заре императивного программирования были изобретены процедуры.
Но наш программист не искал легких путей.
В любом случае, хватит ныть.
Речь идет не о нем, а о методике преподавания программирования в вузах, когда свежеиспеченного первокурсника тут же заставляют браться за какой-нибудь C++ (скажем прямо, не лучший язык для новичков), чтобы выучить ООП или зубрить алгоритмы сортировки с «ох- большой-от»-эн-логарифм-эн.
» И хорошо, если бы перед этим хотя бы разъяснили «черепаховую графику».
На самом деле люди не знают самых азов программирования.
Но давайте поговорим о чесноке! Ты сейчас сидишь такой умный и думаешь: «Ну это же детский сад! Я бы никогда этого не сделал».
Допустим, все так, и вы не будете писать такой тупой копипаст кода.
Но в какой степени вы усвоили (и применили) другие, более сложные концепции и парадигмы? Ведь любой современный язык является мультипарадигмальным.
И все эти парадигмы необходимо применять одновременно: при создании методов объекта, разделяя семантически полный или повторяющийся код на процедуры, возвращая замыкание как результат обобщенной функции, не забывая об инкапсуляции при введении в проект нового утилитарного модуля, помня о решаемый аспект и т. д. Ниже в статье опрос — проверьте себя, знаете ли вы все вышеперечисленное.
Не существует какой-либо конкретной технологии или библиотеки, есть только общие парадигмы.
Я убеждён, что любой, кто называет себя программистом, просто обязан знать и применять все перечисленные подходы на любом языке программирования (от CSS до Erlang, от прости господи 1С до Rust).
Итак, что вы знаете (можете в 2-3 предложениях объяснить суть, плюсы и минусы и привести примеры того, как вы этим пользовались в последнее время)? Если для вас есть что-то новое или вы не уверены, что сможете это правильно объяснить, советую на досуге погуглить и немного повысить свой уровень с «разработчика» (в плохом смысле этого слова) до настоящего.
ламповый «программатор».
P.S.: список парадигм не претендует на полноту.
Предлагайте свои дополнения в комментариях.
В опросе могут участвовать только зарегистрированные пользователи.
Войти , Пожалуйста.
Какую из этих парадигм вы используете? 50% Императивное программирование 93 43,01% Декларативное программирование 80 19,35% Логическое программирование 36 40,86% Структурное программирование 76 59,68% Процедурное программирование 111 45,7% Модульное программирование 85 89,25% Объектно-ориентированное программирование 166 25,81% Общее программирование 48 60,22% Функциональное программирование 112 6,13% Аспект -ориентированное программирование 30 Проголосовали 186 пользователей.
109 пользователей воздержались.
Теги: #жизнь-это боль #парадигмы программирования #помни всё #Образовательный процесс в ИТ
-
Варианты Обучения Vsphere
19 Oct, 24 -
Переоценка
19 Oct, 24 -
Как Изменить Мир Вместе
19 Oct, 24 -
Еще Тортик, Часть 3.0.0
19 Oct, 24 -
Интересное Поведение Сортировки В .Net
19 Oct, 24 -
Уникальный Массив Информации!!!
19 Oct, 24