Общие методы программирования для ускорения времени кодирования

20

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

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

marktani
источник
26
Я предполагаю, что методы, которые вы используете в конкурсе по программированию, могут не иметь ничего общего с методами, которые вы бы использовали на реальной работе.
Дуг Т.
1
Я не спрашивал технику на реальной работе, я спрашивал технику на конкурсе по программированию.
Марктани
1
@DougT. Я согласен, уловки для конкурса по программированию не на тему, но я также думаю, что вы могли бы расширить, чтобы поговорить о производительности в рабочей среде, и как вам лучше всего сократить время, затрачиваемое на код обезьяны
Джеймс
1
Почему бы вам не использовать memsets для инициализации динамических массивов?
Джеймс
3
Не используйте с ++. Используйте язык самого высокого уровня, который вы можете.
Кевин

Ответы:

52

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

Лучше всего использовать Test-Driven Development. Напишите провальный тест. Напишите достаточно кода, чтобы пройти тест. Рефакторинг, чтобы сделать код чистым, убедившись, что он все еще проходит все тесты. Повторение.

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

Дима
источник
21
Ты серьезно? TDD для соревнования по программированию?
Кодизм
1
@Codism: вопросы были расширены, чтобы включить методы, применимые к нормальной разработке программного обеспечения.
Дима
2
TDD определенно помогает улучшить мой код, но он никогда не помогал мне писать код быстрее. Интерактивная среда программирования (например, консоль Groovy, Lisp REPL и т. Д.) Позволила мне сэкономить много времени.
Эртурн
3
-1 для TDD. Это имеет смысл, если проект долгосрочный, а не короткий хакатон.
TheLQ
1
@TheLQ То, что вы предпочитаете тратить все свое время на использование отладчика, не означает, что TDD - плохое предложение.
byxor
29

Внимательно рассмотрите стандартные библиотеки, особенно алгоритмы STL. Это сэкономит вам много строк кода и много времени. Ключ к победе в соревнованиях по программированию - это программирование на как можно более высоком уровне. В C ++ без внешних библиотек это означает вызовы STL вместо циклов for.

Кевин Клайн
источник
+1 - я полностью согласен с этим. Знание того, как быстро написать код на STL, огромно в подобных соревнованиях.
Джордан Пармер
23

Я регулярно участвую в соревнованиях ACM, надеюсь, некоторые из этих советов помогут вам:

  • Как уже говорили другие, ознакомьтесь с языком , в C ++, особенно в STL, он имеет как общие функции, которые вы хотели бы использовать (binary_search, min, max), так и надежные структуры данных, чтобы сэкономить ваше время (стек, чтобы избежать прямой рекурсии) , очередь для BFS, даже priority_queue для Dijkstra, если вам так нравится).

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

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

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

  • Иметь удовольствие .

lccarrasco
источник
6
+1 для понимания проблемы полностью, прежде чем печатать. В противном случае вы теряете время команды (соревнование ACM - 3 человека на один компьютер)
Codism
Хороший ответ. :)
Джаред Фарриш
13

Ну, для меня это звучит так, будто вы знаете только C, а не C ++ вообще. На эти вопросы легко ответить кто-то с базовыми рабочими знаниями языка.

Примером может быть использование макроса для получения минимум двух целых

Просто использовать функцию? std::minуже существует.

или используя memsets для инициализации массивов

std::array<T, N> уже инициализирует его содержимое.

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

Первый шаг - знать язык, который вы используете.

DeadMG
источник
Я пытаюсь узнать язык, который я использую, поэтому я и задал этот вопрос! Спасибо за вклад по этому поводу .
Марктани
7
Ой. Должно быть, я неправильно понял ваш вопрос. Я бы порекомендовал книгу . Мы любезно представляем только те книги, которые стоит прочитать, а не те, которые учат Си мусору.
DeadMG
10

В дополнение к знанию языка, знайте свои инструменты, особенно ваш редактор. Я профессионально занимаюсь программированием более 15 лет, и в других случаях великие программисты замедлялись, потому что единственные команды редактора, которые они используют, это клавиши курсора и crtl-x / c / v.

Поддерживает ли ваш редактор нажатие одной клавиши для удаления строки? Чтобы сделать отступ строки? Перемещаться между функциями / методами? блок выбора / вставки? закладки? Двигаться словом? Может ли редактор автоматически генерировать классы / методы / функции? Поддерживает ли шаблоны, которые вы можете создать заранее? Быстрый рефакторинг? Запись макроса?

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

Garion911
источник
1
аминь. Я просто работаю с новым парнем, который очень быстр ... и использует vim. Это работает для него, потому что он нашел время, чтобы научиться им пользоваться.
gbjbaanb
Также ... если ваш редактор не поддерживает почти все функции, перечисленные здесь - найдите лучший редактор.
Абхи Бекерт,
интервью в Google Docs ... худший опыт по этой причине.
UmNyobe
6

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

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

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

zxcdw
источник
+1 за ЯГНИ .
Брендан Лонг
4

Было уже много ответов, но я хотел бы добавить свое мнение.

Чтобы ускорить кодирование, станьте машинисткой с такой скоростью, чтобы при наборе текста вы могли сосредоточиться как на логике, так и на коде. Существует много программ для обучения печатанию (например, Mastering, Rapid Typing, KTouch, gTypist), используйте их

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

Sarvex
источник
Проголосовал указательным пальцем :)
mlvljr
Отличный ответ. Я добавлю, что люди, которые смотрят на клавиатуру, а не на экран, часто вводят мусор, прежде чем они это осознают и вынуждены отказаться. Или они введут не в том окне. И печально то, что они не понимают, насколько это замедляет их.
Дэйв Маркл
2

Разработка программного обеспечения является одним из тех классических 80-20 видов деятельности, то есть когда первые 80% работы занимают 20% времени, а последние 20% работы занимают 80% времени.

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

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

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

SDC
источник
-2

Если это для реального соревнования по программированию, не используйте C ++. Используйте быстрый, интерактивный язык сценариев RAD. Это то, что VB6 абсолютно доминирует в. Иди предварительно вооружившись библиотеками, которые ты предварительно написал. Разделение строк, обращение к массиву, поиск, сортировка, элементарная графика, консольное управление.

Если это для работы, делайте с точностью до наоборот. Узнайте, что там, используйте твердый язык (C ++ - это хорошо), комментируйте все и так далее. Два типа среды не могут быть дальше друг от друга.

Брайан Бетчер
источник
3
Я не был одним из downvoters, но я предполагаю, что они, вероятно, -1'd вас, потому что вопрос был о программировании быстрее на C ++ .
Гордон Густафсон
9
VB6? Шутки в сторону? Вы из прошлого?
Konamiman
2
@Konamiman: хе, да, я. Я не мог сказать, имел ли он в виду «я готовлюсь в C ++ к конкурсу программирования» или «я готовлюсь к конкурсу программирования C ++». Ну что ж, чипсы лежат там, где они могут. Тем не менее, ничто не сравнится с очень быстрой RAD-средой для соревнований по программированию, где буквально каждая секунда имеет значение.
Брайан Бетчер
Я отредактировал вопрос для уточнения.
Марктани
На RAD: Delphi 6 будет лучшей ставкой тогда, возможно.
mlvljr