Не вижу ничего ни плохого ни грустного в том, чтобы держать описание стандартной библиотеки всё время открытым. Если пишешь на нескольких языках регулярно (или не очень), невозможно просто всё это запомнить да и смысла нет.
Поддерживаю, если пишешь на 5+ языках, знать досканально стандартную библиотеку даже одного языка просто нереально. Главное — понимать абстракции и структуру библиотеки, знать стандартный способ решения задач в языке. Ну и сделать редактор/среду разработки своим помощником :)
Полностью согласен и думаю, что скорее необходимо знать, что может библиотека в принципе. А уж всякие там конкретные сигнатуры, что они принимают — это дело техники. К слову замечу, что некоторые люди на собеседованиях (не хочу сказать, что эти собеседования бестолковые, но с ними явно что-то не так) проверяют не знание принципов, а чуть ли не порядок аргументов в методах.
А еще лучше все помнить и уметь быстро вспоминать, тогда ваша ценность как специалиста резко пойдет вверх.
К сожалению, судя по статистике, мы далеко не все так можем.
Это скорее относится к категории зазубривания. Такие знания легко теряются если не подкреплены практикой и хорошим пониманием.
Для меня важны три вещи, чтобы помнить долго или «вечно»:
1. Получить информацию.
2. Понять ее не просто на уровне базового понимания и высоких абстракий, а на «аппаратном» уровне.
3. Опробовать на практике.
Персональная база знаний FTW. С годами груз изученных технологий накапливается, ассортимент одновременно используемого становится все шире, и держать в голове даже тривиальные C++/stl/python/django/twisted/html/css/javascript/jquery одновременно и в достаточном объеме уже не получается :(.
Случай из жизни, рассказывал отец товарища, работавший одно время на Байконуре.
Старший специалист спрашивает младшего про микрик (микровыключатель с несколькими выводами, где в одном состоянии замкнута одна пара выводов, а в другом другая): — Помнишь, когда какие контакты замкнуты?
— (подумав) Нет, не помню.
— Правильно, нельзя помнить! Только сверяться с документацией.
В космосе, конечно, требуется надежность более высокого уровня, чем в обычном ПО, но все равно не понимаю грустный смайлик в третьем варианте.
Забавный случай из своей практики: я довольно неплохо помнил стандартный API модуля QtGui, и большинство функций писал на автомате, не заглядывая в доки. И написал как-то диалог подтверждения об удалении с маской QMessageBox::NoButton | QMessageBox::Yes, доверяя автокомплиту и отрывочной памяти. все верно — почти, только QMessageBox::NoButton — это отсутствие кнопки, соответственно диалог подтверждения выглядел как «Удалить сверхважное? Да!»
Меня вот бесит, что у fputs, fread и fwrite файл в конце пишется, а у fprintf и fscanf — в начале. Да, у fprintf и fscanf varargs, но можно было остальные функции подогнать под них. Вообще, ставить файл в начало логичнее: сначала выбираем, какой файл, а потом указываем, что с ним делаем (я говорю про код, а не про направление аргументов у cdecl). Более объектно-ориентированно.
Редко ищу в документации (основной язык PHP) «вроде была функция которая это делает», но часто (обычно средствами IDE) ищу точное название, порядок аргументов и т. п. Но открыв однажды документацию редко закрываю её до очередного ребута.
Кажется, что знаешь все основные моменты, пока не возникает необходимость набрать код в простом текстовом редакторе. Без автокомплита, без сниппетов и подсказок. Тогда можно затупить над банальными вещами, которые впрочем легко гулятся.
Я ваще так же без понятия API ява питон и скрипт, поэтому когда таки приходится писать на этом изврате, то не использую никаких либ а все велосипеды пишу вручную. Ибо лень читать доки по эти говноязыкам.
хех а новые API порой упрощают жизнь местами =) хотя конечно и «по старинке» тоже можно успешно прожить… но всё-таки чейнджлоги новых API читать необходимо для большей продуктивности =) ИМХО
В 98% случаев знаю нужное свойство, атрибут, правило, метод. Это, как мне думается, из-за развитой фотографической памяти.
2% — те случаи когда доходит до редко используемого, например, CSS правила white-space, значений для которого, на данный момент, я могу вспомнить только два — inherit и nowrap.
Не то чтобы не получается запомнить, как-то не думаю об этом, но иногда ловлю себя на мысли, что забыл совсем простую вещь.
Пытался конспектировать важные и частоиспользуемые вещи в Zim, но не прижилось.
А чем пользуетесь вы?
Лучший способ развить память — решать всякие задачки на знание спецификации.
Для Java на эту тему есть Java Puzzlers, например.
А также примеры сертификационных экзаменов.
Я пишу на питоне, у меня постоянно в одной консоли открыт ipython. Право, быстрее переключиться в другую консоль, нежели сидеть и читать доки в браузере.
Результаты опроса отразят не реальное знание разработчика, а его мнение об этом знании.
Например, человек может считать, что хорошо помнит стандартную библиотеку и не заглядывать даже в документацию. А на самом деле, он может не догадываться о существовании многих полезных модулей и ими не пользоваться.
Другой же, может изучить практически всё и часто прибегать к документации, вспомнив, что под его текущую задачу где-то что-то в библиотеке было.
Нет смысла засорять оперативную память мозга информацией, которая требуется редко и, при необходимости, может быть легко добыта из внешних источников. Если же информация применяется в работе часто, она сама перемещается в оперативную память с целью оптимизации, т.е. сокращения времени доступа.
Особенно раздражают вопросы по на собеседовании типа «какие методы есть у класса Object». Это что, знание наизусть апи как-то характеризует меня как качественного программиста?
Может это вопрос на сообразительность? Можно ведь что-то в ответ предположить.
Хотя, зачем я себя обманываю, многие и правда такое спрашивают, всерьез считая это мерилом компетентности.
Если говорить о среде .NET, то большинство методов класса Object регулярно используется на практике. Если человек не знает этих методов, можно сделать вывод о низкой сложности и малом разнообразии задач, которые решал этот человек. На мой взгляд, это не может быть плюсом.
помниться фраза «Математик не обязан помнить все константы» (но должен уметь их вычислить).
Программист не тот, кто помнит всё наизусть, а тот кто знает что и как можно сделать, а мелочи типо параметров функций всегда можно найти в гугле.
Ха! стандартная библиотека… Тут приходится гуглить, порой, как в каком языке строчку к строчке прилепить… то "+", то "||", то ".", то вообще ".concat()" или «CONCATENATE». Бесит!)
Пишу на java и javascript, редко на python. В основном подсказками IDE пользуюсь, причем производительность возрасла, когда на столе появилась бумажка с хоткеями этой самой IDE :)
Мне кажется, важно знать основные концепции и подходы (как уже писали выше) и обязательно изучить инструменты разработки под свой язык. Хотя, с другой стороны, есть люди, которые комфортно пишут в простейшем текстовом редакторе и не чувствуют дискомфорта. Тут уж каждому свое.
Мой папа будучи рабом физико-химических наук с 35-летним стажем, без понтов и степеней, не помнил почти ни одной формулы, кроме очень простых конечно. Зато имел магическую способность вывести, любую формулу на клочке бумаги за 20-30 секунд, потом задумывался и говорил что-то типа: «Так, тут еще коэффициент какой-то должен быть, наверное постоянна Больцмана». Мне первый раз это снесло голову, когда я эту формулу учил-учил и выучить не мог, а он настолько свободно понимает устройство мира в общем и конкретного процесса в частности, что создать формулу просто из воздуха, для него было нормальной рутиной.
Бессмысленно учить язык, но нужно чувствовать то, как он работает.
Аналогия не совсем точная. «Вывести» сигнатуру конкретного метода или его название, если не помнишь, нельзя. Вопрос главным образом в продуктивности. Я считаю, что неплохо знаю свои рабочие языки, но пишу код медленно, потому что постоянно отвлекаюсь на документацию.
Плюс точное понимание, из чего и в каком порядке выводятся остальные формулы.
Но лучше, конечно, когда и первые формулы являются следствием понимания «устройства мира» — тогда вообще ничего не нужно помнить :)
Десяток лет сижу на перле, и в среднем раз в несколько дней заглядываю в доку по поводу какой-нибудь банальной substr :) Неожиданностью для себя самого стало то, что со временем подобные функции из ходовых ушли куда-то на задний план и стали использоваться редко. И вроде бы я даже помню порядок ее аргументов, но проверить через доку и не ждать сюрпризов от отладки — имхо совсем не стыдно и в случае фейла выйдет гораздо дешевле, чем найти то же самое глазками.
Когда кодишь постоянно, то помнишь большую часть стандартной библиотеки. По крайней мере ту часть которую хоть раз использовал в коде… Сейчас пописываю время от времени, приходится чаще заглядывать… Забывается…
Обычно смотришь список аргументов и порядок. Иногда проще забить, как помнишь. Если не прав, то либо компилятор/интерпретатор поправит, либо тесты… Тесты это наше всё…
Как хорошо вы знаете стандартную библиотеку?