Загальні методи програмування для прискорення часу кодування


20

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

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


26
Я б здогадався, що методи, які ви використовуєте в змаганні з кодування, можуть не мати нічого спільного з методами, якими ви користуєтесь у реальній роботі.
Дуг Т.

1
Я не просив техніку на справжній роботі, я просив методи в конкурсі кодування.
Мартані

1
@DougT. Я погоджуюсь, що прийоми для змагань з кодування - це не тема, але я також думаю, що ви могли б розширитись, щоб поговорити про продуктивність у робочому середовищі та як найкраще скоротити час, витрачений на код мавпи
Джеймс

1
Чому ви не повинні використовувати мессети, щоб узагальнити динамічні масиви?
Джеймс

3
Не використовуйте c ++. Використовуйте мову вищого рівня, яку можете.
Кевін

Відповіді:


52

Спосіб швидкого створення робочого коду - це ... гальмувати. Робіть дуже маленькі кроки. Переконайтеся, що ви знаєте, для чого кожен крок. Переконайтеся, що після кожного кроку ваш код збирається та запускається.

Найкраще використовувати тестові розробки. Напишіть невдалий тест. Напишіть достатньо коду, щоб пройти тестовий пропуск. Refactor, щоб зробити код чистим, переконайтесь, що він все-таки проходить усі тести. Повторіть.

Якщо цього не зробити, то дуже просто написати велику купу коду, яка не працює. Тоді вам знадобиться дуже багато часу, щоб зрозуміти, чому це не працює.


21
Ти серйозно? TDD для конкурсу програмування?
Кодизм

1
@Codism: питання було розширено, щоб включити методи, застосовні до звичайної розробки програмного забезпечення.
Діма

2
TDD безумовно допомагає покращити мій код, але він ніколи не допомагав мені швидше писати код. Інтерактивне середовище програмування (наприклад, консоль Groovy, Lisp REPL тощо) була найбільшою економією часу в моєму досвіді.
erturne

3
-1 для TDD. Це має сенс, якщо проект довгостроковий, а не короткий хакатон.
TheLQ

1
@TheLQ Тільки тому, що ви віддаєте перевагу витратити весь час на відладчик, не означає, що TDD - це погана пропозиція.
byxor

29

Інтенсивно переглядайте стандартні бібліотеки, особливо алгоритми STL. Це дозволить заощадити багато рядків коду та багато часу. Ключ до виграшних конкурсів програмування полягає в програмуванні на максимально високому рівні. У C ++, без зовнішніх бібліотек, це означає, що виклики STL замість циклів.


+1 - Я повністю з цим згоден. Знання, як швидко написати код у STL, є величезним у таких видах змагань.
Джордан Пармер

23

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

  • Як говорили інші, ознайомтеся з мовою , у C ++, особливо STL, вона має як загальні функції, які ви хочете використовувати (binary_search, min, max), так і надійні структури даних, щоб заощадити ваш час (стек, щоб уникнути прямої рекурсії , черга для BFS, навіть Prior_queue для Dijkstra, якщо вам це подобається).

  • Визначте категорію проблеми, якщо це математичне, динамічне програмування, теорія графів тощо. Запитайте себе: наскільки ви знайомі з таким типом проблеми? Виконуючи це, ви повинні приймати рішення щодо порядку, за яким ви їх вирішите , і це буде рука об руку з наступним пунктом ...

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

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

  • Мати задоволення .


6
+1 для повного розуміння проблеми перед тим, як набрати. В іншому випадку ви витрачаєте час команди (змагання ACM - це 3 особи, один комп’ютер)
Codism

Гарна відповідь. :)
Джаред Фарріш

13

Що ж, мені здається, ви знаєте лише C, а не C ++. На ці питання легко відповідає хтось із базовими знаннями мови.

Прикладом може бути використання макросу, щоб отримати мінімум два входи

Просто використовувати функцію? std::minвже існує.

або використання мемсетів для ініціалізації масивів

std::array<T, N> вже ініціалізує його вміст.

які методи кодування існують для використання на реальній роботі?

Перший крок - це знати мову, якою ви користуєтесь.


Я намагаюся ознайомитись з мовою, якою я користуюся, тому я задав це питання! Дякуємо за інформацію про це .
marktani

7
Ой. Я, мабуть, зрозумів ваше запитання тоді. Я б рекомендував книгу . Ми люб’язно представляємо лише книги, які варто прочитати, а не ті, які навчають С сміття.
DeadMG

10

Крім мови, знайте свої інструменти, особливо ваш редактор. Я кодую понад 15 років професійно, і я бачив, що в іншому випадку великі програмісти сповільнюються, тому що єдині команди редактора, які вони використовують, - це клавіші курсору та crtl-x / c / v ..

Чи підтримує ваш редактор одну клавішу для видалення рядка? Повторно відступити рядок? Переміщення між функціями / методами? блокувати вибір / вставити? закладки? Рухатися словом? Чи може редактор автоматично генерувати класи / методи / функції? Чи підтримують шаблони, які ви можете створити достроково? Швидкий рефакторинг? Запис макросів?

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


1
амінь Я просто працюю з новим хлопцем, який дуже швидко ... і використовує vim. Це працює для нього, оскільки він знайшов час, щоб навчитися ним користуватися.
gbjbaanb

Також ... якщо ваш редактор не підтримує майже будь-яку функцію, перелічену тут, знайдіть кращого редактора.
Абхі Беккерт

інтерв'ю в документах Google ... найгірший досвід з цієї причини.
UmNyobe

6

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

Напишіть лише потрібний на даний момент код. Тобто, не починайте писати код з менталітетом на кшталт: " Мені потрібні ці функції пізніше, щоб я міг просто так само написати свої прототипи, поки я на цьому ". Все змінюється, змінюються плани. Ви отримаєте код, який може бути навіть не корисним. Це марна трата часу.

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



4

Відповідей уже було багато, я все ж хотів би додати свою думку.

Щоб пришвидшити кодування, станьте машиністкою настільки швидко, що під час введення тексту ви зможете сконцентруватися як на логіці, так і на коді. Існує багато програмного забезпечення для навчання вводу тексту (наприклад, майстер друку, швидке введення тексту, наприклад, KTouch, gTypist), використовуйте їх

Я бачив багатьох досвідчених програмістів, які досі друкують двома пальцями. Це призводить до неприємного коду без документації та дійсно криптованого коду з макросами та скороченими іменами типів.


Обрушився вказівним пальцем :)
mlvljr

Чудова відповідь. Додам, що люди, які дивляться на клавіатуру замість екрана, часто набирають сміття ще до того, як усвідомлюють це, і повинні відхилитись. Або вони наберуть неправильне вікно. І прикро, що вони не усвідомлюють, наскільки це їх сповільнює.
Дейв Маркл

2

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

Ключовим фактором для прискорення роботи в цілому є, отже, робота над покращенням вашої роботи для останніх 20% зусиль. Це, як правило, етапи налагодження та робота, щоб зв'язати все разом і зробити його корисним.

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

Люди поговорять про конкретні методології, такі як TDD або BDD. Вони чудові, але якщо ви цього не робите зараз, у вас знадобиться трохи часу, щоб підлаштуватися, тому вони, мабуть, не те, з чого ви хочете починати з конкурсу програмування. Але зупиняючи планувати те, що ви робите, перш ніж зануритися і зробити це, ви отримаєте нагороди незалежно від того. І вони все-таки є першими кроками до TDD і BDD. Саме тут ви хочете почати.


-2

Якщо це фактичний конкурс програмування, не використовуйте C ++. Використовуйте швидку, інтерактивну мову сценаріїв RAD. Це те, що VB6 абсолютно домінує на рівні. Ідіть заздалегідь озброєними бібліотеками, які ви попередньо записали. Розбиття рядків, обертання масиву, пошук, сортування, рудементарна графіка, управління консоллю.

Якщо це для роботи, зробіть точно навпаки. Дізнайтеся, що там, використовуйте тверду мову (на C ++ це чудово), коментуйте все тощо. Два типи навколишнього середовища не могли бути далі один від одного.


3
Я не був одним з низовидів, але я припускаю, що вони, мабуть, вам так, бо питання стосувалося швидшого програмування на C ++ .
Гордон Густафсон

9
VB6? Серйозно? Ви з минулого?
Конаміман

2
@Konamiman: так, так. Я не міг сказати, чи мав він на увазі "я готуюсь до C ++ до конкурсу програмування" чи "готуюсь до конкурсу програмування C ++". Ну добре, фішки лежать там, де вони можуть. Тим не менш, нічого не перемагає дуже швидке середовище RAD для змагань з програмування, де буквально кожна секунда враховується.
Брайан Ботчер

Я відредагував питання для уточнення.
Мартані

На RAD: Delphi 6 стане найкращою ставкою тоді, можливо.
mlvljr
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.