Сегодня я едва сдал экзамен по программированию на Java. Мне пришлось ответить на некоторые общие вопросы о потоке, которые я хорошо выполнил, и написать небольшую многопоточную программу, которая была хуже. Мне пришлось подключить свой ноутбук к экрану проектора и сразу написать программу. Моей первой попыткой было использование анонимных классов, но я забыл точный синтаксис. Может быть, из-за какого-то волнения или, может быть, из-за того, что последние две недели я программировал в основном на php. Затем я спросил, разрешено ли использовать документацию API. Ответ был «НЕТ». Поэтому я решил пойти другим путем и внедрил Runnable. Программа делала то, что было запрошено в конце. Конечно, экзаменаторы заметили мой первый провал, и это сильно повлияло на мой результат. Я был поражен, что ему не разрешили использовать документацию API.
Итак, мой вопрос: действительно ли важно иметь возможность безупречно кодировать без документации API? Должен ли я развивать этот навык? Это действительно важно в реальном мире и в рабочей среде? На курсах по программированию я сосредоточился на шаблонах обучения, развитии навыков написания хороших дизайнерских приложений, навыков использования API и быстрого поиска необходимой информации. Я не пытался научиться программировать без документации API. Обязательно ли это во время собеседования (кодирование без документации API)?
источник
Ответы:
В Real Life ™ я бы оценил этот навык как «приятно иметь», но совсем не обязательный. Однако в университетах все по-другому.
Возможность кодирования без документации может использоваться как косвенное указание на знание студентом предмета. В некотором смысле, увидев, что вы что-то кодируете, не прикасаясь к документации, преподаватель говорит, что вы уже практиковались в использовании API - выполняя домашние задания и другие задания, или, возможно, даже программируя для собственного удовольствия. Умный человек с беглым пониманием рассматриваемого API должен уметьвыяснить практически любой Java API самостоятельно, взглянув на документацию. Это не случайно: программисты часто учатся на работе, а документация по API для популярных систем программирования, включая Java, структурирована, чтобы помочь программистам быстро учиться. Документация часто содержит короткие, автономные примеры, иллюстрирующие концепцию в краткой и краткой форме.
Это работает прямо против цели профессора измерить ваше знание предмета (а не измерить, насколько вы умны). Следовательно, это не является необоснованным, чтобы спросить ваш код, не глядя на документацию.
ПРИМЕЧАНИЕ. Я отредактировал этот ответ в ответ на изменение вопроса.
источник
Был один человек, у которого была небольшая ошибка в его коде, поэтому он отнес его в StackOverflow и попросил помощи. StackOverflow: Java (генерирование чисел без повторов) . Я посмотрел на его код и указал ему, что его HashSet постоянно заполняется значениями, но он никогда не очищается. Итак, он спросил меня: "как вы это очистите?" Я должен признать, что я не особенно горжусь ответом, который я дал.
Вам абсолютно необходимо знать основные вещи, которые вы используете каждый день. Вы должны знать их всех, и вы должны знать их хорошо. Но только основные вещи.
Для всего остального важно знать, что есть что-то, что делает то, что вы хотите. Какой именно класс вам нужно использовать, какой именно метод вам нужно вызвать, и какие именно параметры вам нужно передать ему, - это то, что вам не нужно, чтобы занимать драгоценные нейроны вашего мозга. Для этого и нужна документация, и именно поэтому были изобретены IDE с автозаполнением. И если толчок приходит к пушу, всегда есть StackOverflow и больший интервез.
Просить программистов знать наизусть API-интерфейсы - все равно что просить юристов наизусть знать юридический кодекс и все прецеденты. Это бессмысленно. Упражнение в бесполезности.
источник
Я бы не сказал, что это необходимо, но это
очень желательный навык
imNSho.
Последние несколько месяцев я работал в тесном сотрудничестве с парнем, который знает API заметно лучше меня. Он гораздо более продуктивен - просто потому, что может пропустить проверки API-документов, которые меня отвлекают .
Здесь я говорю о беглости. О том, чтобы быть не просто способным на что-то, но и свободно.
Вы знаете, что значит быть беглым? Это когда кто-то смотрит на тебя, как будто ты кодируешь, когда ты печатаешь ...
... Это свободное знание. Это когда вам требуется минута, чтобы сделать то, что нужно новичку в час. Это стоит усилий, правда. Пахнет победой.
Если вы овладеете беглостью в каком-либо API и правильно запомните, как вы себя чувствуете, эта память поможет вам узнать, как стать наиболее продуктивным в работе с любым другим API.
источник
Нет, я был бы мертв, если бы не смог найти документацию по API. Единственный раз, когда у меня его нет, это когда я пытаюсь отладить что-то, где я не могу получить доступ к документации. Затем я "реинжиниринг" API и вырезать части по мере необходимости.
Важно иметь четкое представление о том, что такое API и какую часть лучше всего использовать, но знать имена методов, имена переменных ... на самом деле не обязательно.
источник
В работе у меня никогда не было ситуации, когда у меня не было доступа к документации. С другой стороны, наличие понимания прочитанного и общего понимания, чтобы иметь возможность интерпретировать плохо написанную документацию, всегда полезно.
В конечном итоге вы должны узнать шаблоны и структуру ваших API, но точно знать, где все это не особенно полезно.
В SFU Computing Science экзамены с закрытыми книгами составляют от 70% до 100% наших оценок. Теория состоит в том, что экзамены проверяют ваше понимание материала курса и вашу адаптивность. На самом деле все, что он действительно проверяет, - это ваши нервы, качество / продолжительность сна, ваше остроумие и техники быстрого запоминания - ни один из них не нужен ни академически, ни для обычной работы в индустрии программного обеспечения.
источник
Для всех, кроме вашего последнего вопроса: знание энциклопедии любой документации API не имеет значения. Очевидно, что вы будете программировать быстрее, если будете знать каждую деталь каждого метода каждого класса, но это не разумное ожидание.
К вашему последнему вопросу: вы можете ожидать, что будете знать специфику некоторых классов без документации API. Если вы знаете, перед тем как идти на собеседование, что вас будут тестировать, или если работа очень сфокусирована (то есть: вы будете заниматься многопоточностью весь день), тогда вы могли бы разумно ожидать, что вам нужно будет подробно изучить соответствующие классы.
Приложение: Вы должны уточнить задолго до экзамена с вашим преподавателем / инструктором, какие именно материалы будут предоставлены и какие материалы вы можете взять с собой. Предположим, что все, с чем они явно не согласились, не допускается. У меня были курсы, где я мог принести только основы для письма, где я мог принести любые книги, которые я хотел, и где я мог принести ровно один двусторонний лист с чем угодно на нем. Экзамены обычно строятся вокруг того, какие материалы разрешены.
источник
API документы! = Синтаксис языка.
Я могу понять, когда кто-то не знает точных имен различных классов Java и их методов. Я не знаю их, и я пишу на Java каждый день. Я был бы потерян без документов или всемогущего автозаполнения IDE - особенно, когда речь заходит о стандартном API Java, который известен своей многословностью в именах переменных / классов / методов.
Однако, как вы сказали сами, в документах обычно нет ничего, что вы не могли бы вспомнить. Это синтаксис для внутренних классов - это особенность самого языка, а не то, что нужно запомнить из документов.
Как бы я ни думал, что студентам (во многих случаях) должно быть разрешено использовать документы для стандартных API, я думаю, что любой, кто хочет сдать экзамен по программированию, должен знать синтаксис языка. И я не имею в виду некоторые причудливые крайние случаи, о которых знают только языковые дизайнеры, только стандартные - как в вашем примере.
источник
В Eclipse вы можете написать
obj.
и нажать ctrl + пробел, и он попытается выполнить автозаполнение, предоставив вам все параметры метода для данного объекта. Если по какой-то причине это не сработает, у Java API есть остальные ответы. Мне было бы трудно думать о дне, когда я не Google, как сделать что-то.Школа это совсем другая история.
источник
ИМХО, академия обычно воняет на создание хороших разработчиков программного обеспечения. Только люди, которые пишут для развлечения после уроков, имеют шанс достичь чего-то в реальных проектах.
Опять же, академия - это не создание разработчиков, а весь мир - о том, как решать абстрактные проблемы и проводить исследования. Это очень далеко от практического применения в большинстве случаев. И исследователи не обязательно являются хорошими программистами.
И изучение API наизусть воняет. Существует автозаполнение / google / msdn / javadocs для поиска всех закоулков, зачем кому-то все время хотеть держать это в голове? Наиболее распространенные функции, которые вы освоите за несколько недель / месяцев, все остальное можно найти за считанные секунды, если вы знаете синтаксис, структуру и общие идеи.
С другой стороны, некоторые люди все еще кодируют текстовые редакторы и помнят названия функций наизусть, это не обязательно неправильно, но если они фанатичны в этом, вы получите своего профессора.
Более того, даже если вы знаете имена и параметры функций наизусть, все же рекомендуется проверить их в последнем документе API. В однопотоковом сценарии у strtok все было хорошо 10 лет назад, сейчас это не очень хорошо. Если вы просто узнаете имена и параметры, вы никогда не узнаете, что функциональность может быть устаревшей или придуманы лучшие альтернативы.
Языки меняются, поэтому вам нужно менять их, помня один верный путь, который не подходит для этого.
источник
если вы рано или поздно начнете работать над каким-то проектом, используя API рано или поздно, вы очень хорошо изучите этот API. я считаю, что это совершенно ненужный навык, так как я не знаю никого, кто никогда не заглядывал в какую-либо документацию (msdn, man-страницы и т.д. ...)
однако университеты - это совершенно другая вселенная, поэтому не удивляйтесь, если вы потерпите неудачу, потому что вы не знаете, например, имя определения типа 10-го параметра CreateWindowEx.
источник
Я бы сказал, нет, это не требуется, человеческому мозгу физически невозможно запомнить столько информации, но вам все равно нужно знать основы или наиболее часто используемые вещи, поскольку их не так много для запоминания. , Иначе невозможно запомнить все, что есть на Java.
Также несправедливо, чтобы учитель хотел, чтобы его ученики знали все, или использовали это, чтобы узнать, программируют ли они на каком-либо языке, кроме заданий или заданий, которые он назначает вам. Для меня это все равно, что хотеть знать, чем ты занимаешься, когда ты не в школе или не работаешь по специальности.
РЕДАКТИРОВАТЬ: Очевидно, то, что учитель просит вас, зависит от него, некоторые учителя ценят теорию больше, а другие ценят практику и не заботятся, если вы не понимаете все.
источник