Найбільш занижений інструмент програмування [закрито]


35

У нас є багато чудових інструментів, які дуже допомагають при програмуванні, такі як хороші редактори тексту програмістів, IDE, налагоджувачі, системи контролю версій і т.д. .

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

Який інструмент програмування ви вважаєте найбільш недооціненим один? Мотивуйте свою відповідь.


3
Наші мізки? - -
Труфа

Гаразд, хто хоче додати запис Lisp? * усмішка *
Марк C

Відповіді:


70

Гумова качка. Так звичайно.

http://en.wikipedia.org/wiki/Rubber_duck_debugging

Налагодження гумових качок , гумове утилізація та тест гумових качок - це неофіційні терміни, які використовуються в інженерній програмі для позначення методу налагодження коду. Назва - це посилання на ймовірну апокрифну історію, в якій неназваний експерт-програміст весь час тримав гумову качку за своїм столом, і налагоджував свій код, змушуючи його пояснювати його, рядок за рядком, до качки.

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


6
Я роблю це постійно з чоловіком. Як хлопець із технічної підтримки, який просто відчуває здатність програмування, він розуміє приблизно 60% того, що я говорю, але змушує мене пояснити 40%, які я також не розумію. Кількість випадків, коли це працює, насправді вражає.
Етел Еванс

1
Ти смієшся. У мене колега насправді мав гумову качку на своєму столі.
Берін Лорич

57
Я спробував це, але моя гумова качка, здається, не могла зосередити увагу на проблемі. Де я можу знайти належно кваліфіковану гумову качку, яка справді зацікавлена ​​в програмуванні?
Стів314

3
Я використовую для цього свій журнал. Я інколи веду досить тривалі дискусії із собою. Я б хотів, щоб я міг змусити себе розуміти, що я маю на увазі. Записати це в журнал іноді допомагає набагато пізніше, коли мені цікаво, що думав ідіот, який написав код, над яким я працюю.
Ларс Вірзеній

1
@Steve: Японські дослідники працюють над цим, але я не думаю, що вони десь близькі: youtube.com/watch?v=3g-yrjh58ms
Rei Miyasaka

42

Перо та зошит.

  1. Працює без електрики.
  2. Портативний.
  3. Вмикайте / вмикайте, коли нудьгує на зустрічах
  4. Зберігайте корисну інформацію.
  5. Якщо це записано, люди надають цьому більшого значення.
  6. Інші можуть його читати і вчитися.

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

3
Росіяни використовували олівець.
Робота

@Job Hah, я все ще використовую пляшку чорнила! (... Ну, тільки для каліграфії, але все-таки. :))
Матін Ульхак

А як щодо планшетних ПК?
Mateen Ulhaq

1
@Job:… і горілка!
Spoike

38

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

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

Гарні інструменти XML є життєво важливими - якщо ви працюєте з XML-файлами більше десятка рядків або декількох схем. Іноді потрібно більше, ніж просто основний синтаксис, який виділяють інші редактори. Також при роботі з XML вивчення XSL може бути дуже корисним. Багато разів я бачу, що можна зробити в простому перетворенні XSL, виконаному в багатьох рядках у коді програми. Хоча для уточнення: я не припускаю, що сам XML є "заниженим інструментом програмування"; Я припускаю, що цінність хороших редакторів XML недооцінена, із того, що я бачив.


1
++ Абсолютно diffнедооцінено. Що стосується профілювання, ви не самотні, думаючи, що вони повинні бути корисними, але ви самі не знаєте, як. Перевір це.
Майк Данлаве

Так, я думав над тим, як насправді вивчити інструмент для профілювання, але так і не потрапив до цього
Анто,

23
+1 для профілювання, +1 для різних інструментів, -1 для інструментів XML. Деякі люди, відчуваючи проблему, думають: "Я знаю, я буду використовувати XML". <Problem:Worsening> <Problem:TimeDescription>Now</Problem:TimeDescription> <Problem:Posessive>they have</Problem:Posessive> <Problem:Quantity>many, many</Problem:Quantity> <Problem:WorseningDescription>more problems</Problem:WorseningDescription></ProblemWorsening>
Мейсон Уілер

2
@Mason: Симпатичний XML.
Майк Данлаве

10
@Mason Wheeler: Я не запропонував XML як інструмент для вирішення проблем, я запропонував Хороші інструменти XML - коли вам доведеться працювати з XML, переконайтеся, що у вас є редактор / інструмент, який дуже добре в ньому працює. Щось, що може виконувати запити Xpath, перевірку схеми, перетворення, порівняння значення та структури (я думаю, особливий інструмент різного інструменту) тощо ... Прості редактори з підсвічуванням просто не можуть вирізати, коли все стає безладним - вони часто роблять речі гірше (btw мені подобається ваш XML-код;)).
FrustratedWithFormsDesigner

37

Регулярні вирази

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

Мені здається дивним, скільки людей, яких я знаю, ніколи не використовують їх, оскільки з ними пов'язана трохи крива навчання. Дуже багато разів я бачу, як люди роблять справи важким способом (зауважте: перед тим, як регулярно викладати я робив речі важким способом), коли простий регулярний вираз міг швидко його знищити.


8
Пам'ятайте, що регулярні вирази - це не нож швейцарської армії, навіть якщо вони правильно застосовуються при правильному застосуванні.
Анто

10
Надзвичайно корисний - але часто зловживаний, що призводить до загадковим нездійсненним кодом. Старе "тепер у вас є дві проблеми", кажучи, має певну основу в реальності.
Steve314

4
RegExes - це швейцарський армійський ніж: адекватний інструмент для безлічі швидких робіт, хоча, мабуть, не правильний інструмент для побудови всього будинку.
JasonTrue

4
Гм, чомусь мені завжди здавалося, що регулярне враження було далеко не заниженим. Занадто часто я бачу людей, які прагнуть до регулярного вираження, де достатньо простого розділення / для циклу, або коли регулярні виразки просто не є відповіддю (наприклад, аналіз xml / html).
МАК

Я бачив обидва явища: Реджекс? Цей матеріал є нечитабельним / повільним / вставити пейоративні сюди та "Який найкращий спосіб проаналізувати (вставити абсолютно нерегулярну граматику) одним регексом?"
JasonTrue

24

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

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


Хороших товаришів по команді ніколи не можна надмірно цінувати. Більшість програмного та апаратного забезпечення можуть.
Анонімний тип

19

Google. Є дуже мало проблем, які ще не вирішені та задокументовані. Добре налаштований запит Google може заощадити всім багато часу.


13
Хороший інструмент, але я не впевнений, що вважаю це заниженим, принаймні, більше не (можливо, я б погодився 9 чи 10 років тому).
FrustratedWithFormsDesigner

12
Вибачте, але Google недооцінив? Принаймні Google завищений :)
eestein

2
Я знаю, я знаю! Але моє обґрунтування твердження, що це недооцінене - це те, з чим я підозрюю, що ти погодишся з цим: принаймні 75% питань, які задають у StackOverflow, легко відповідають на Google, так? Зрозуміло, що це певною мірою недооцінене, якщо багато людей цим не користуються. Якщо моє обґрунтування буде помилковим, я видалю свою відповідь.
Адам Кросленд

3
@Adam Crossland: 75% доброзичливі. Я думаю, що це вище за це.
S.Lott

1
@adam @ s.lott, тому я гадаю, що Google не використовується належним чином. З цим я згоден. На стільки питань можна було б відповісти (не потрібно було їх задавати), якби люди вміли правильно користуватися Google. З повагою
eestein

16

Далеко і далеко самим заниженим інструментом пошуку «вузьких місць» є Ctrl+ Cабо кнопка «Призупинити» у відладці.

Для початку ознайомтеся з останнім абзацом цієї публікації , і з цим повідомленням , і з цим повідомленням .

Так багато разів я бачу / чую, як люди говорять: "Програма занадто повільна! Що я можу з цим зробити? Я спробував профайлера (якщо вони це зробили), але я не розумію, що це говорить. Хтось здогадався? Допоможіть! " Ну, здогадки - це саме так. Те, що я завжди робив, і у інших теж є, це перейти, перервати його та вивчити стек викликів. Якщо проблема справді погана, бінго , це прямо перед вами. Якщо проблема лише легка, ви робите це кілька разів. Все, що з’являється на більш ніж одному зразку, чого ви можете уникнути, - це вузьке місце, яке ви можете виправити.

Так, це прищепка, але це працює.


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

@ Kristof: Думати про це спокусливо, і є проблеми, з якими він не може впоратися, і бувають випадки, коли зразки дістати непросто, але і профілі не можуть впоратися з цими справами, за винятком певного виду, наприклад Zoom і навіть тоді вони насправді не є кращими в сенсі привести вас до проблеми.
Майк Данлаве

@ Kristof: Ось проблема проблеми з випадковою паузою не дуже гарна - де, якщо вчасно зробити знімок і вивчити його, ви не можете сказати причину того, що він робить. Приклад: обробка повідомленнями, де ви не можете вказати, звідки повідомлення було надіслано, або чому або як часто. Ще один приклад: асинхронні протоколи, де обмінюються повідомленнями, і, схоже, ми завжди чекаємо іншого хлопця. Для синхронної обробки профілі можуть вимірювати краще, але випадкові паузи краще знайти .
Майк Данлаве

14

Який тип програмного засобу, на вашу думку, є найбільш заниженим? Мотивуйте свою відповідь.

Укладач.

Більшість людей не потребує часу, щоб зрозуміти, що робить їх компілятор на вибір. Вони просто відчувають, що це перетворює код у програму, яку можна виконати, і це так далеко, наскільки вони йдуть. У більшості сучасних існує декілька конфігурацій, в які ви можете вводити її, щоб змусити її робити те, що вам потрібно. Ось приклад, я думаю, що половина розробників у вашому офісі не мають уявлення, як встановити попередження як рівень помилок (якщо припустити, що воно насправді є). Які варіанти у вас є для виведення символів налагодження? Які оптимізації (або який рівень) ви бажаєте зробити. Список продовжується.


3
@Kevin: і я додав би способи написання коду, щоб дійсно змусити компілятор здійснити перевірку для вас (для статично набраних мов). Більшість розробників використовують типи полиць (наприклад, рядок), щоб представляти будь-яку інформацію, де вони могли б визначити прості, але несумісні типи для непов'язаних даних ... і мати компілятор, якого вони не зіпсували при передачі аргументів.
Матьє М.

@Matthieu M Це теж хороший момент. Багато людей забувають про прості способи допомогти вам.
kemiller2002

3
Кожне попередження компілятора - дорогоцінний подарунок. Не ігноруйте їх! Попросіть більше! -Werror повинен бути обов'язковим.
Крістоф Простой

@Kristof: -pedantic -Wall -Wextra -Werror... хоча тоді може скласти що-небудь побудувати: p
Матьє М. М.

Можливо, це тільки я, але якщо "половина чортів" не знає, що про символи налагодження "не є перебільшенням, це досить непросто.
kizzx2

10

Ваш мозок. Інші інструменти не мали б великого значення без цього.


4
Я зробив шахту здебільшого невикористаною.
Девід Торнлі

3
"більш-менш забуте": -S

5
Я б сказав, що це недооцінено. Занадто багато людей завжди шукають ярлики, щоб їм не потрібно думати. Для здорового глузду та логіки немає заміни, а інструменти просто не можуть замінити це.
jnevelson

2
Я погоджуюся з Джонатаном, мозок часто недооцінюється. Насправді занадто багато програмістів покладаються на кілька відомих їм хитрощів, замість того, щоб виходити за межі коробки і час від часу писати замовний (дешевий і брудний, викинутий клас) тестовий кейс та інструмент для тестування, щоб дослідити проблему. Я неодноразово давав розробникам засоби вийти за межі свого стану мислення та вирішити свої проблеми не набагато більше ніж декількома питаннями.
asoundmove

1
Деякі коментарі змусили мене змінити свою думку, +1 :)
Анто,

10

Добрий старий:

print

Іноді корисний налагоджувач або профілер або схема потоку UML. А іноді вони змушують вас з розуму. Мені завжди здається, що я використовую оператори друку (або сліди, або NSLog, або те, що у вас є) лише для того, щоб переконатися, що мій код робить те, що я думаю, що робить, коли я думаю, що це робить.


Я думаю, це залежить від мови та налагоджувача. Види налагоджувачів, які пропонують більшість пристойних IDE на сьогодні для популярних мов, дозволяють вам робити справи набагато простіше, ніж друкувати заяви.
Біллі ONeal

8

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


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

1
Правда, великі сценарії дуже жахливо дивитись, і можна використовувати perl або python для цього. Хоча вони все ще чудові у виконанні невеликих робочих місць.
Gaurav Sehgal

@Billy Використовуйте python. Проблема зі спагетті вирішена :)
Еван Плейс

7

Перо та дошка.

Ви не можете перемогти низькі технології, намагаючись щось пояснити.



Це може бути повторюваною відповіддю, але це заробляє моє окреме голосування за дошку.
Карсон Майєрс

Хм, майже впевнений, що це не дублікат, коли я його створив, дуже дивно. Я поміняю його на Pen and Whiteboard.
Енді Лоурі


5

Perl та інші мови сценаріїв. Відмінно підходить для завдань, які є занадто складними для таких інструментів GUI, як агент Ransack.


1
Я не впевнений, що вони недооцінені ...
Анто

3
Однозначно занижена ... особливо Perl. Це язик. Дуже добре розроблений з простим девізом: речі такі безцінні для швидких завдань, які просто потрібно виконати.
Грак

@Rook: Я не впевнений, як мову з більш ніж 100 операторами можна вважати "простою". Корисно, можливо. Але не "просто".
Біллі ONeal

@Billy - просто не виключає потужних. Я вважаю калькулятори простими. Я не знаю, що робить половина з 300 функцій на шахті, але це не зменшує її простоту.
Грак

4

Комбінації клавіш на клавіатурі, що дозволяють швидко, часто та безпечно рефакторифікувати. Навчання вилучення (або вбудовування тощо) змінних, методів, констант або класів при натисканні деяких клавіш кардинально змінило спосіб кодування. Ви будете рефакторировать лише часто (тобто достатньо), коли вартість мінімальна, тому зробити ці ярлики другою природою важливо для написання та підтримання хорошого коду, наскільки я переживаю.

Тож загалом використовуйте хороші інструменти (IDE / редактор) та навчіться отримувати максимум можливостей, які вони надають.

Наступне тестування приладів та TDD, щоб тримати код перевіряючим і запобігати страху перед рефакторингом.

Використовуйте ці, і ви легко перейдете до написання правильного коду, який відповідає ремонту, який відповідає принципу DRY та є самодокументальним.


4

Блок тестування пропонує наступні переваги:

  • Розробники стають першими клієнтами коду. Чим швидше буде виявлена ​​помилка, тим дешевше її виправити. Помилки можуть бути схоплені перед збіркою, встановленням або розгортанням .
  • Тестування змінює ваше уявлення про код. Чи чітка конструкція? Чи обробляє кутові корпуси?
  • Ефект Хоторна покращить якість, просто оголосивши, що команда публікує показники якості / тестування.
  • Навіть якщо тести не перевіряються на контроль джерел, вони можуть стати прекрасним способом вивчення та вивчення нового рельєфу.
  • Висока ймовірність меншої кількості помилок!

4

Генератори коду

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

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


Мені подобається писати генератори коду, не найпростіша річ, як правильно, але так корисно.
Захарій К

3

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


3

Формальні методи.

http://www.amazon.com/Discipline-Programming-Edsger-W-Dijkstra/dp/013215871X

http://www.amazon.com/Science-Programming-Monographs-Computer/dp/0387964800/ref=pd_sim_b_1

Важко переоцінити їх значення. Кожен цикл і кожне, якщо твердження починається як ідея, яка вимагає певного «доказування». Більшість програмістів роблять це доведення більшість часу в голові. Ви запитуєте, що робить оператор if, і чи можуть вони чітко і чітко сформулювати - що таке вибір і чому вибір є повним, послідовним та виключним.

Але деякі, здається, здогадуються випадковим чином. Їм потрібна більша допомога, і формальні методи можуть бути видом допомоги, яка їм потрібна.

Це просто алгебра (і числення) для коду. Нічого занадто складного чи витонченого.


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

3

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


3

Ну це Half Life 2 (вставте сюди свою улюблену гру). Якщо у мене з’явилася проблема, яку я не можу вирішити, я просто кину і почав грати у свою улюблену гру і раптом рішення з’являється в моїй свідомості. Тож якщо чесно, це не гра чи щось подібне, а щось інше . Я часто бачу людей, які годинами сидять над проблемою, не вирішуючи її, і все, що вони повинні зробити, - це розмістити їх мозок в режимі офлайн на короткий період.


3

Переповнення стека - швидка допомога фахівців, коли ви застрягли

питання та відповіді для професійних та ентузіастів-програмістів. Він побудований та керований вами як частина мережі Stack Exchange сайтів Q&A. З вашою допомогою ми працюємо разом, щоб створити бібліотеку детальних відповідей на кожне питання щодо програмування ...


+1, але насправді вже не занижено
MAK

4
можливо, навіть завищено, або принаймні перебільшено
Анто,

3

Я думаю, що це Notepad / TextPad / прості програми для редагування тексту. У кожного є час, коли їм потрібно швидко виправити, що не потребує відкриття IDE та потребує лише швидкого редагування. І на всіх комп’ютерах є якась проста програма редагування тексту.


2

Твердження і добро alwaysAssert() функція. ІМХО це важливіше, ніж одиничні тести, оскільки одиничні тести можуть виявляти помилки лише у конкретних випадках, які ви думали перевірити. Якщо той же програміст пише код і тести, він / вона, ймовірно, пропустить однакові крайові випадки в обох. Крім того, іноді тестування одиниць недоцільно, оскільки середовище, в якому функціонує компонент та / або дані, над якими він працює, є надто складним, щоб придумати надуманий тест.

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

Один із загальних зусиль щодо тверджень - це те, що їх можна вимкнути. IMHO у кожній мові або стандартній бібліотеці має бути alwaysAssert()функція або грубо еквівалент, що робить те саме, що, assertале не може бути вимкнено. Це може бути використано для перевірки припущень у критичних областях коду, які не мають ефективності, де переваги відключення відхилень незначні.


Домовились. Але, на жаль, прості, але ефективні, такі інструменти часто недооцінені.
Пітер Мортенсен

2

Клавіша F1. - Корисно для програм, яких ви не знаєте, і для програм, над якими ви працюєте. (Припустимо, що це велика програма.)

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


2
Як недооцінене, так і недооцінене.
Анонімний тип

Дуже занижена розробниками програми, яку ви зараз використовуєте; як така допомога містить мало корисної інформації.
ткнути

2

Різні утиліти UNIX, але в першу чергу findі зрідка grepабо ed. Можливість знаходити речі у глибоких гніздах файлів неоціненна, особливо коли ви раптом успадковуєте кодову базу і вам доведеться її виправити. Навіть якщо згаданий код добре задокументований, вам, ймовірно, доведеться полювати, і сильне розуміння його findвбиває.


2

Цікавість

Назвіть це "Загадка програмування". Що таке інструмент порівняно з людиною, яка ним володіє? Бажання знати, як і чому щось працює чи не працює, розширює свої знання більше, ніж будь-який конкретний інструмент, і це дійсно поза програмою.


2
Ctrl + C    
Ctrl + V

Збережено незліченну кількість годин у всьому світі!


1

Хвіст

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

Прикладами програм є;


Mac OS X - це система UNIX. Не потрібно це окремо згадувати.
праворуч

0

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

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