Как написать меньше кода [закрыто]


12

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

У меня вопрос: если это что-то, что приходит с опытом, или это то, что вы можете явно сделать для развития этого качества?


6
Постройте тенденцию и посмотрите, когда вы пересечете ось х ...

1
Обязательный указатель на макросы, макросы, макросы: paulgraham.com/avg.html
vemv

Вы можете создавать очень краткий, читабельный код, применяя бессмысленный стиль программирования. Бессмысленное программирование - это программирование только путем применения функций. Вы можете распознать его по широкому использованию функций высшего порядка, таких как карта, фильтр, конкат, сложение / уменьшение / вставка / [вставка других имен для катаморфизма списка] и т. Д.
dan_waterworth

2
-1: Это похоже на замаскированное самовосхваление.
Джим Г.

Я еще не видел читаемый код без точек. не в какой-либо значимой библиотеке.
Саймон Бергот

Ответы:


12

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

Конечно, через год или два, работая с Ruby, я обнаружил, что мой C # сильно закалился. Я думаю, что если бы я лучше понимал функциональное программирование (постоянные амбиции), я бы, вероятно, взял больше от этого.

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

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

Может быть разница между написанием меньшего количества кода и меньшим количеством кода в вашем приложении - иногда вы можете использовать генерацию кода, чтобы избежать необходимости повторяться, поэтому вы пишете только несколько строк кода, но затем они генерируют для вас много другого кода - это может дать вам много рычагов. Посмотрите, что делает инструмент, подобный Rails или Entity Framework, чтобы понять, насколько он может быть полезен. Будьте уверены в необходимости этого и подумайте дважды, трижды, а затем четыре раза о том, как развернуть собственную генерацию кода, что может привести вас в ад YAGNI.

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

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


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

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

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

Есть ли у вас какие-либо из этих руководящих принципов, которым можно следовать? Похоже, они могут быть полезны для молодого разработчика, такого как я.
stuartmclark

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

16

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

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

Но наш лучше

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

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

  • Требуется дополнительная работа для сборки компонента
  • Дополнительная работа для новичков, чтобы узнать это
  • Огромная дополнительная работа, чтобы поддержать это

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

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


1
Я тоже в этом виноват, несколько лет назад я написал свой собственный класс filepath, который мог конвертировать filepath между форматами Win, Unix и Apples. Мы использовали только окна. Может быть, это тоже правило, никогда не делайте вещи перспективными

Иногда это происходит из-за того, что вы недостаточно осведомлены о данной системе. Я тоже написал свой собственный класс path, когда начал работать с .NET, а затем обнаружил класс System.IO.Path через несколько дней :-)

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

Моя мама делает спагетти намного лучше твоей.

1
+ интернет для "избегать повторного изобретения колеса". Один из самых важных навыков, которые я развил, - это способность выявлять проблемы, которые, возможно, кто-то уже решил. Мало того, что это почти всегда дает мне лучшее решение, чем я сам мог бы решить, обрабатывая кучу незначительных случаев, которые я, вероятно, упустил бы из виду, это освобождает меня от работы над проблемами, которые мне фактически платят за решение. ,
BlairHippo

5

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

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

  • Не повторяй себя . Я считаю, что использование CMS, фреймворка или сторонней библиотеки является одним из способов применения принципа DRY.

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


3

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

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


Сколько времени вы тратите на подготовку решения по сравнению с программированием решения?

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

1

Можно сказать, что все искусство программирования сводится к этому.

Вы можете изучать языки с традиционным акцентом на ясность и краткость (например, Haskell, Scheme, Python) или даже более краткие парадигмы, такие как Factor и другие конкатенационные языки, но, в конечном счете, все, что вы можете выбрать для изучения, должно в конечном итоге помочь вам писать короче менее избыточный код.


1

Как и все другие проблемы, если вы не признаете наличие проблемы, вы не будете искать решение. Опыт начинает играть роль, когда вы узнали, как выглядит меньше кода. Когда вы повторно просматриваете свой код, самое время определить, можете ли вы повторно использовать код или реорганизовать код с меньшим количеством кода. Microsoft удалось повысить скорость печати с помощью Windows 2000, НЕ спулингируя ее дважды (цитата из сотрудника Microsoft на одном из их бесплатных демонстраций).


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

2
@Gorgen - вы могли бы, если бы у вас было время, или просто посмотреть код, который вы написали час назад. Иногда обнаружение примера на SO может побудить вас вернуться и внести некоторые изменения в ваш собственный код.
JeffO

0
  1. Вернись к своему старому длинному крученому коду,
  2. поставить его под контроль версий,
  3. написать несколько тестов, чтобы иметь разумную надежду на то, что не будут появляться новые ошибки,
  4. переписать.

Повторите ad libitum. И добро пожаловать в ад.


-2

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


В этом контексте минимум подразумевается с точки зрения характеристик, а не длины.
vemv
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.