Это действительно необходимый навык для программирования без документации API? [закрыто]

22

Сегодня я едва сдал экзамен по программированию на Java. Мне пришлось ответить на некоторые общие вопросы о потоке, которые я хорошо выполнил, и написать небольшую многопоточную программу, которая была хуже. Мне пришлось подключить свой ноутбук к экрану проектора и сразу написать программу. Моей первой попыткой было использование анонимных классов, но я забыл точный синтаксис. Может быть, из-за какого-то волнения или, может быть, из-за того, что последние две недели я программировал в основном на php. Затем я спросил, разрешено ли использовать документацию API. Ответ был «НЕТ». Поэтому я решил пойти другим путем и внедрил Runnable. Программа делала то, что было запрошено в конце. Конечно, экзаменаторы заметили мой первый провал, и это сильно повлияло на мой результат. Я был поражен, что ему не разрешили использовать документацию API.

Итак, мой вопрос: действительно ли важно иметь возможность безупречно кодировать без документации API? Должен ли я развивать этот навык? Это действительно важно в реальном мире и в рабочей среде? На курсах по программированию я сосредоточился на шаблонах обучения, развитии навыков написания хороших дизайнерских приложений, навыков использования API и быстрого поиска необходимой информации. Я не пытался научиться программировать без документации API. Обязательно ли это во время собеседования (кодирование без документации API)?

bancer
источник
2
Я думаю, что он спрашивает о документации , особенно об API-ссылках.
3
@bancer - Вы не можете использовать нативные классы Java, не имеет смысла. Похоже, вы не были готовы к экзамену.
Ramhound
27
В реальном мире у вас всегда будет доступ к документации. У меня ужасная память, и я стараюсь сосредоточиться на общей логике своего приложения и избегать бессмысленного запоминания вещей, которые легко найти. К сожалению, академический мир (и мир сертификатов) несколько отличается, и часто делается упор на бессмысленное запоминание. Я учился на бакалавриате в основном по математике и физике, но я помню, что мне приходилось запоминать много формул и т. Д. Какая трата времени.
Antonio2011a
11
@ Antonio2011a - Знание API используемого вами языка НЕ ​​является «бессмысленным запоминанием». Чем лучше вы знаете API, тем лучше вы сможете программировать, потому что вы будете выбирать подходящие классы и методы для своего решения. Вы не можете выбрать их, если не знаете, что они существуют. Конечно, никто не знает весь Java API; Это слишком большое. Но всегда хорошо знать как можно больше об этом.
Дауд говорит восстановить Монику
9
@DavidWallace Возможно я не был ясен. Конечно, я не говорю, что вам не нужно знать API! Только то, что вам не нужно запоминать точные имена классов, методов, порядок параметров и другие подобные подробности! Все, что вам действительно нужно знать, это то, что он существует и насколько он полезен, тогда вы можете искать детали во время кодирования. Как я уже говорил раньше, моя память ужасна, и, честно говоря, я мог бы использовать класс час назад, и если бы вы дали мне чистый лист бумаги, я бы не смог вспомнить точные детали.
Antonio2011a

Ответы:

39

В Real Life ™ я бы оценил этот навык как «приятно иметь», но совсем не обязательный. Однако в университетах все по-другому.

Возможность кодирования без документации может использоваться как косвенное указание на знание студентом предмета. В некотором смысле, увидев, что вы что-то кодируете, не прикасаясь к документации, преподаватель говорит, что вы уже практиковались в использовании API - выполняя домашние задания и другие задания, или, возможно, даже программируя для собственного удовольствия. Умный человек с беглым пониманием рассматриваемого API должен уметьвыяснить практически любой Java API самостоятельно, взглянув на документацию. Это не случайно: программисты часто учатся на работе, а документация по API для популярных систем программирования, включая Java, структурирована, чтобы помочь программистам быстро учиться. Документация часто содержит короткие, автономные примеры, иллюстрирующие концепцию в краткой и краткой форме.

Это работает прямо против цели профессора измерить ваше знание предмета (а не измерить, насколько вы умны). Следовательно, это не является необоснованным, чтобы спросить ваш код, не глядя на документацию.

ПРИМЕЧАНИЕ. Я отредактировал этот ответ в ответ на изменение вопроса.

dasblinkenlight
источник
2
Из моего чтения экзаменаторы смотрели на его способность запоминать документацию API. Он знал, что делать, просто не помнил синтаксис.
Пол
@ Пол Я прочитал правки и изменил свой ответ. Я думал, что ОП спрашивает что-то совершенно другое. Благодарность!
dasblinkenlight
2
+1 за выявление реальной проблемы здесь. Если бы это было собеседование, интервьюер был бы более заинтересован в том, как вы решаете проблему, и вам, вероятно, было бы позволено просто написать наилучшее приближение синтаксиса на доске. Когда вы провели последние три месяца, изучая конкретный материал, и проходили тестирование на этом конкретном материале, разумно не применять политику «открытого Интернета».
StriplingWarrior
@Paul: вы правы
bancer
21

Был один человек, у которого была небольшая ошибка в его коде, поэтому он отнес его в StackOverflow и попросил помощи. StackOverflow: Java (генерирование чисел без повторов) . Я посмотрел на его код и указал ему, что его HashSet постоянно заполняется значениями, но он никогда не очищается. Итак, он спросил меня: "как вы это очистите?" Я должен признать, что я не особенно горжусь ответом, который я дал.

Вам абсолютно необходимо знать основные вещи, которые вы используете каждый день. Вы должны знать их всех, и вы должны знать их хорошо. Но только основные вещи.

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

Просить программистов знать наизусть API-интерфейсы - все равно что просить юристов наизусть знать юридический кодекс и все прецеденты. Это бессмысленно. Упражнение в бесполезности.

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

Это действительно необходимый навык для программирования без документации API?

Я бы не сказал, что это необходимо, но это

очень желательный навык

imNSho.

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


Здесь я говорю о беглости. О том, чтобы быть не просто способным на что-то, но и свободно.

Вы знаете, что значит быть беглым? Это когда кто-то смотрит на тебя, как будто ты кодируешь, когда ты печатаешь ...

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

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

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

комар
источник
Я не думаю, что его вопрос заключается в том, должны ли вы в конечном итоге знать документацию, но должны ли вы запоминать документацию, как будто для экзаменов.
Рей Миясака
@ReiMiyasaka хорошо, если вы пропустите подробный экзамен, вы можете заметить следующее: «Итак, мой вопрос: действительно ли важно иметь возможность безупречно кодировать без документации API? Должен ли я развить этот навык? Это действительно важно в реальном мире? а в рабочей обстановке? , Я сосредоточился на этой части вопроса, потому что, видите ли, мой недавний опыт заставил меня чувствовать себя довольно неловко из-за идеи, что это может просто пролететь с элементарным ответом, который не требуется . Справедливо?
комнат
2
+1 за покрытие стоимости переключения контекста на справочные документы. Необходимость искать каждый шаг замедляет ход событий.
Уайетт Барнетт
8

Нет, я был бы мертв, если бы не смог найти документацию по API. Единственный раз, когда у меня его нет, это когда я пытаюсь отладить что-то, где я не могу получить доступ к документации. Затем я "реинжиниринг" API и вырезать части по мере необходимости.

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

Павел
источник
3

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

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

В SFU Computing Science экзамены с закрытыми книгами составляют от 70% до 100% наших оценок. Теория состоит в том, что экзамены проверяют ваше понимание материала курса и вашу адаптивность. На самом деле все, что он действительно проверяет, - это ваши нервы, качество / продолжительность сна, ваше остроумие и техники быстрого запоминания - ни один из них не нужен ни академически, ни для обычной работы в индустрии программного обеспечения.

Рей Миясака
источник
2

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

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


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

Matt
источник
2

API документы! = Синтаксис языка.

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

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

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

Горан Йович
источник
2
Я не думаю, что стоит также запоминать синтаксис. Особенности и шаблоны и ошибки, да, но синтаксис, нет. Я работаю со слишком многими языками, чтобы это имело смысл, и я думаю, что это становится верным и для большинства разработчиков.
Рей Миясака
@ReiMiyasaka: Я не думаю, что вы должны запомнить целые языковые спецификации, но вы должны знать основной синтаксис в любой момент. Вы смотрите в документах, как написать цикл на любом из ваших языков? Или ты просто кодируешь это?
Горан Йович
По правде говоря, я работаю с множеством языков и часто забываю точный синтаксис даже для простых вещей! Поэтому мне всегда нужно обращаться к документам.
Antonio2011a
@ Antonio2011a: Я признаю, что я делаю это сам, особенно когда я использую менее распространенные языки. Но для многих студентов изучаемый язык является первым в мире языком программирования. Если учащийся даже не выучил синтаксис, он ничего не говорит о том, как он / она готовился к экзамену.
Горан Йович
@Goran На самом деле я не обязательно, по двум причинам: 1. фоновая компиляция говорит мне, когда я неправильно понимаю синтаксис, и 2. циклы вторичны (почти не существуют) в таких языках, как Haskell и ML. Языки более разнообразны, чем вы думаете. Несмотря на то, что я трачу большую часть своего времени на программирование на F # и лишь смутно помню Haskell, я все еще могу прекрасно понимать код на Haskell, не забывая принимать во внимание семантические различия. С другой стороны, я согласен с тем, что изучение первого языка наизнанку чрезвычайно важно и слишком часто игнорируется.
Рей Миясака
2

В Eclipse вы можете написать obj.и нажать ctrl + пробел, и он попытается выполнить автозаполнение, предоставив вам все параметры метода для данного объекта. Если по какой-то причине это не сработает, у Java API есть остальные ответы. Мне было бы трудно думать о дне, когда я не Google, как сделать что-то.

Школа это совсем другая история.

Стефания
источник
2

ИМХО, академия обычно воняет на создание хороших разработчиков программного обеспечения. Только люди, которые пишут для развлечения после уроков, имеют шанс достичь чего-то в реальных проектах.

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

И изучение API наизусть воняет. Существует автозаполнение / google / msdn / javadocs для поиска всех закоулков, зачем кому-то все время хотеть держать это в голове? Наиболее распространенные функции, которые вы освоите за несколько недель / месяцев, все остальное можно найти за считанные секунды, если вы знаете синтаксис, структуру и общие идеи.

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

Более того, даже если вы знаете имена и параметры функций наизусть, все же рекомендуется проверить их в последнем документе API. В однопотоковом сценарии у strtok все было хорошо 10 лет назад, сейчас это не очень хорошо. Если вы просто узнаете имена и параметры, вы никогда не узнаете, что функциональность может быть устаревшей или придуманы лучшие альтернативы.

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

кодировщик
источник
1

если вы рано или поздно начнете работать над каким-то проектом, используя API рано или поздно, вы очень хорошо изучите этот API. я считаю, что это совершенно ненужный навык, так как я не знаю никого, кто никогда не заглядывал в какую-либо документацию (msdn, man-страницы и т.д. ...)

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

Хайри Угур Колтук
источник
Не соответствует моему опыту университетов. Во всяком случае, они были склонны быть одержимыми теорией и испытывали недостаток внимания к деталям. Или уровень упал до уровня профессиональных школ?
AProgrammer
я не говорю об одном университете, и это всего лишь пример того, что вы можете увидеть где-то в мире в каком-то университете. как вы знаете, они не все одинаковы
Хайри Угур Колтук
2
Университеты всегда имели некоторую степень запоминания и регургитации. Если бы у меня была книга CRC вместо запоминания целых таблиц, у меня было бы правильное исчисление.
Blrfl
1

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

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

РЕДАКТИРОВАТЬ: Очевидно, то, что учитель просит вас, зависит от него, некоторые учителя ценят теорию больше, а другие ценят практику и не заботятся, если вы не понимаете все.

Coyote21
источник