Це дійсно необхідний навик програмування без документації API? [зачинено]


22

Я ледве сьогодні склав іспит з програмування Java. Мені довелося відповісти на деякі загальні запитання щодо нитки, які я добре робив, і написати трохи потокову програму, яка була гіршою. Мені довелося підключити ноутбук до екрана проектора і написати програму відразу. Моєю першою спробою було використання анонімних класів, але я забув точний синтаксис. Можливо, через якесь хвилювання, а може тому, що останні два тижні я кодував переважно php. Потім я запитав, чи дозволяється використовувати документацію API. Відповідь була "НІ". Тому я вирішив піти іншим шляхом і я реалізував Runnable. Програма робила те, що просили наприкінці. Звичайно, екзаменатори помітили мій перший збій, і це сильно позначилося на моїй оцінці. Мене вразило, що використовувати документацію API не дозволяється.

Отже, моє питання: чи дійсно важливо вміти бездоганно кодувати без документації API? Чи варто розвивати цю навичку? Це дійсно важливо в реальному світі та в робочому середовищі? Під час курсів програмування я зосередився на моделях навчання, розвитку навичок писати гарні дизайнерські програми, навичках користування API та швидкому пошуку необхідної інформації. Я не намагався навчитися програмувати без документації API. Це обов'язково під час співбесіди (кодування без документації API)?


2
Я думаю, він запитує про документацію , зокрема посилання на API.

3
@bancer - Ви не можете використовувати рідні класи Java, не має сенсу. Здається, ви не були готові до іспиту.
Рамхаунд

27
У реальному світі ви завжди матимете доступ до документації. У мене жахлива пам’ять і намагаюся зосередитись на загальній логіці моєї заявки і уникати наповнення розумом безглуздим запам'ятовуванням речей, на які можна легко роздивитись. На жаль, академічний світ (і світ сертифікатів) дещо інший, і часто акцент робиться на безглуздому запам'ятовуванні. Моє бакалаврське навчання було здебільшого з математики та фізики, але я пам’ятаю, що потрібно було запам’ятати багато формул тощо. Яка трата часу.
Antonio2011a

11
@ Antonio2011a - Знання API мови, якою ви користуєтесь, НЕ "безглузде запам'ятовування". Чим краще ви знаєте API, тим краще ви зможете програмувати, оскільки ви виберете відповідні класи та методи для свого рішення. Ви не можете їх вибрати, якщо ви не знаєте, що вони існують. Звичайно, ніхто не знає всього Java API; він занадто великий. Але завжди добре знати стільки, скільки вмієш керувати.
Давуд каже, що повернемо Моніку

9
@DavidWallace Можливо, я не зрозумів. Звичайно, я не кажу, що вам не потрібно бути знайомим з API !! Тільки, що вам не потрібно запам’ятовувати точні назви класів, методів, порядку параметрів та інших подібних деталей, що нумують розум! Все, що вам потрібно знати, це те, що воно існує і наскільки воно корисне, тоді ви можете шукати деталі під час кодування. Як я вже говорив, перш ніж моя пам’ять жахлива, і, чесно кажучи, я міг би користуватися класом годину тому, і якби ти дав мені чистий аркуш паперу, я б не зміг згадати точні деталі.
Antonio2011a

Відповіді:


39

У реальному житті ™ я би оцінив цю майстерність як "приємну мати", але зовсім не потрібну. Однак в університеті все інше.

Можливість кодування без документації може бути використана як опосередкована ознака ознайомлення учня з предметом. У певному сенсі, бачачи, що ви кодуєте щось, не торкаючись документації, говорить професору, що ви раніше вправлялися за допомогою API - виконуючи домашні завдання та інші завдання, а може, навіть програмуючи для розваги самостійно. Розумна людина, яка має коротке розуміння відповідного API, повинна вмітисамостійно з'ясувати майже будь-який Java API, переглянувши документацію. Це не випадково: від програмістів часто очікується вчитися на роботі, а документація API для популярних систем програмування, включаючи Java, побудована так, щоб допомогти програмістам швидко навчатися. Документація часто надає короткі, самостійні приклади, ілюструючи концепцію стисло та стисло.

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

ПРИМІТКА. Цю відповідь я відредагував у відповідь на редагування питання.


2
З мого читання екзаменатори розглядали його здатність запам'ятовувати документацію API. Він знав, що робити, просто не пам’ятав синтаксис.
Пол

@Paul Я прочитав правки та змінив свою відповідь. Я думав, що ОП просить щось зовсім інше. Спасибі!
dasblinkenlight

2
+1 для виявлення реальної проблеми тут. Якби це співбесіда на роботі, інтерв'юера було б більше цікаво, як ви вирішите проблему, і вам, мабуть, буде дозволено просто написати найкраще наближення синтаксису на дошці. Коли ви витратили останні три місяці на вивчення конкретного матеріалу, і ви проходите тестування на цьому конкретному матеріалі, розумно не мати політики "відкритого Інтернету".
Стриптинг-воїн

@Paul: ти маєш рацію
bancer

21

Колись був хлопець, який трохи помилився у своєму коді, тому він відніс його до StackOverflow і попросив допомоги. StackOverflow: Java (генерація чисел без повторів) . Я переглянув його код і зазначив йому, що його HashSet постійно наповнюється значеннями, але він ніколи не очищався. Отже, він запитав мене: "як ти це очистиш?" Мушу визнати, що я не особливо пишаюся відповіді, яку я дав.

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

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

Попросити програмістів знати напам'ять API схоже на прохання юристів знати напам'ять юридичний кодекс і всі прецеденти. Це безглуздо. Вправа в марності.


+1: Неймовірно складно вивчити весь API великої бібліотеки, наприклад, Java, просто через її розмір. Знати, які загальні можливості надаються пакетами, простіше, хоча (наприклад, javax.imageio забезпечує розширену обробку зображень, не те, що я коли-небудь використовував), і деякі основні засоби слід вивчити. Зокрема, java.lang та java.util будуть використовуватися практично у будь-якій програмі Java.
стипендіати доналу

9

Це дійсно необхідний навик програмування без документації API?

Я б не сказав, що це потрібно, але це так

дуже бажана майстерність

imNSho.

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


Тут я говорю про вільне володіння. Про те, щоб бути не просто здатним на щось, а й вільно.

Чи знаєте ви, що це вільно говорити? Це коли для когось, хто дивиться на вас, здається, що ви кодуєте під час введення ...

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

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

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


Я не думаю, що його питання полягає в тому, чи варто вам врешті-решт знати документацію, а чи слід запам’ятовувати її чи ні, немовби для іспитів.
Рей Міясака

@ReiMiyasaka добре, якщо ви пропускаєте багатослівний іспит-нюх, ви можете помітити це: "Отже, моє запитання: чи дійсно важливо вміти бездоганно кодувати без документації API? Чи варто розвивати цю навичку? Це дійсно важливо в реальному світі і в робочому середовищі? " . Я зосередився на цій частині запитання, тому що, бачите, мій недавній досвід змусив мене почувати себе незручно з приводу того, що вона може просто пролетіти елементарною відповіддю, це не потрібно . Досить справедливо?
гнат

2
+1 для покриття витрат на перехід контексту на довідкові документи. Необхідність дивитись на кожен крок сповільнює справи до повзання.
Wyatt Barnett

8

Ні. Я був би мертвий без можливості шукати документацію API. Єдиний раз у мене цього немає, коли я намагаюся налагодити щось, де не можу отримати доступ до документації. Тоді я "реверсую" інженер "api" і вирізаю шматочки, як потрібно.

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


3

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

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

У SFU Computing Science закриті іспити складають від 70% до 100% наших оцінок. Теорія полягає в тому, що іспити перевіряють ваше розуміння навчального матеріалу та вашу пристосованість. Насправді все це насправді тестує - це нерви, якість / тривалість сну, дотепність та прийоми запам'ятовування, які не потрібні ні академічно, ні для типової роботи в галузі програмного забезпечення.


2

До всього, крім останнього вашого запитання: Енциклопедичні знання будь-якої документації API не важливі. Ви, очевидно, програмуєте швидше, якщо знаєте кожну деталь кожного методу кожного класу, але це не розумні сподівання.

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


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


2

Документи API! = Синтаксис мови.

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

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

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


2
Не думаю, що синтаксис запам'ятовувати також не варто. Особливості та шаблони та ґетчі, так, але синтаксис, ні. Я працюю з занадто великою кількістю мов, щоб це було значимим, і я думаю, що це стає правдою і для більшості розробників.
Рей Міясака

@ReiMiyasaka: Я не думаю, що ви повинні запам'ятовувати цілі мовні характеристики, але ви повинні знати базовий синтаксис в будь-який момент. Чи шукаєте ви в документах, як написати цикл будь-якою з мов? Або ви просто це кодуєте?
Горан Йович

По правді кажучи, я працюю з достатньою кількістю мов, і часто забуваю точний синтаксис навіть для основних речей !! Тому я завжди потребую посилань на документи.
Antonio2011a

@ Antonio2011a: Я визнаю, що роблю це сам, особливо коли я використовую менш поширені мови. Але для багатьох студентів мова, яку вивчають, є першою мовою програмування. Якщо студент навіть не вивчив синтаксис, він не говорить нічого хорошого про те, як він / вона підготувався до іспиту.
Горан Йович

@Goran Насправді я не обов'язково з двох причин: 1. компіляція фону повідомляє мені, коли я неправильно сприймаю синтаксис, і 2. петлі є вторинними (майже відсутні) в таких мовах, як Haskell та ML. Мови різноманітніші, ніж можна подумати. Незважаючи на те, що я проводжу більшу частину свого часу на кодуванні у F # і лише невиразно пам’ятаю Haskell, я все ще можу зрозуміти код Haskell просто чудово, пам’ятаючи взяти до уваги смислові відмінності. З іншого боку, я погоджуюся, що вивчення першої мови зсередини є надзвичайно важливим і занадто часто нехтувати.
Рей Міясака

2

У Eclipse ви можете написати obj.та натиснути ctrl + пробіл, і він спробує автоматично завершити, надавши всі параметри методу для даного об’єкта. Якщо це мені не вдається, ява- небудь відповіді на API Java . Мені буде важко думати про день, коли я не знав Google, як щось робити.

Школа - це зовсім інша історія.


2

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

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

А навчання API напам'ять смердить. Є автозаповнення / google / msdn / javadocs, щоб шукати всі куточки, чому б хто-небудь хотів тримати все це в своєму мозку? Найбільш поширені функції, які ви дізнаєтесь через кілька тижнів / місяців, все інше можна знайти за лічені секунди, якщо ви знаєте синтаксис, структуру та загальні ідеї.

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

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

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


1

якщо ви почнете працювати над яким-небудь проектом протягом деякого недовгого часу, використовуючи api, рано чи пізно ви дізнаєтесь, що це api дуже добре. Я вважаю, що це абсолютно непотрібний навик, оскільки я не знаю нікого, хто ніколи не заглядає в будь-яку документацію (msdn, man man сторінки тощо).

однак університети - це зовсім інший всесвіт, тому не дивуйтесь, якщо ви не зможете, бо ви не знаєте, наприклад, назви typedef 10. параметра параметра CreateWindowEx.


Не відповідає моєму досвіду університетів. Якщо що-небудь, вони намагалися бути одержимими теорією і бракувало уваги до деталей. Або рівень знизився до рівня професійно-технічних навчальних закладів?
AProgrammer

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

2
Університети завжди мали певну міру запам'ятовування та відриву. Я б прийшов до обчислення, якби у мене була доступна книга CRC замість запам'ятовування цілісних таблиць.
Blrfl

1

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

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

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

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