Pull to refresh

Comments 82

Потихотьку собираю что типа шпаргалки по часто используемым API и сниппетам кода.
Потом распечатаю большой плакат и повешу перед собой на стену.
UFO just landed and posted this here
Не вижу ничего ни плохого ни грустного в том, чтобы держать описание стандартной библиотеки всё время открытым. Если пишешь на нескольких языках регулярно (или не очень), невозможно просто всё это запомнить да и смысла нет.
Поддерживаю, если пишешь на 5+ языках, знать досканально стандартную библиотеку даже одного языка просто нереально. Главное — понимать абстракции и структуру библиотеки, знать стандартный способ решения задач в языке. Ну и сделать редактор/среду разработки своим помощником :)
Полностью согласен и думаю, что скорее необходимо знать, что может библиотека в принципе. А уж всякие там конкретные сигнатуры, что они принимают — это дело техники. К слову замечу, что некоторые люди на собеседованиях (не хочу сказать, что эти собеседования бестолковые, но с ними явно что-то не так) проверяют не знание принципов, а чуть ли не порядок аргументов в методах.
Знать всё досконально не обязательно. Главное — понимать все принципы и уметь быстро искать информацию.
Ваши слова, да всем кадровикам бы в уши!
А еще лучше все помнить и уметь быстро вспоминать, тогда ваша ценность как специалиста резко пойдет вверх.
К сожалению, судя по статистике, мы далеко не все так можем.
Если сдавать сертификационные экзамены, то память быстро улучшается :-)
Это скорее относится к категории зазубривания. Такие знания легко теряются если не подкреплены практикой и хорошим пониманием.

Для меня важны три вещи, чтобы помнить долго или «вечно»:
1. Получить информацию.
2. Понять ее не просто на уровне базового понимания и высоких абстракий, а на «аппаратном» уровне.
3. Опробовать на практике.

Что собственно ведет к коментарию iLLuzor.
Персональная база знаний FTW. С годами груз изученных технологий накапливается, ассортимент одновременно используемого становится все шире, и держать в голове даже тривиальные C++/stl/python/django/twisted/html/css/javascript/jquery одновременно и в достаточном объеме уже не получается :(.
Вы не один такой. 2 варианта:- либо стареем, либо прогрессируем (… и пользуемся большим кол-вом технологий, чем можем досконально изучить).
Случай из жизни, рассказывал отец товарища, работавший одно время на Байконуре.
Старший специалист спрашивает младшего про микрик (микровыключатель с несколькими выводами, где в одном состоянии замкнута одна пара выводов, а в другом другая):
— Помнишь, когда какие контакты замкнуты?
— (подумав) Нет, не помню.
— Правильно, нельзя помнить! Только сверяться с документацией.

В космосе, конечно, требуется надежность более высокого уровня, чем в обычном ПО, но все равно не понимаю грустный смайлик в третьем варианте.
В программировании чаще полезно помнить, потому что компилятор или интерпретатор случаи перестановки аргументов, допустим, быстро выявит.
Не факт. Даже если это язык с сильной типизацией — параметры могут быть одного типа.
Забавный случай из своей практики: я довольно неплохо помнил стандартный API модуля QtGui, и большинство функций писал на автомате, не заглядывая в доки. И написал как-то диалог подтверждения об удалении с маской QMessageBox::NoButton | QMessageBox::Yes, доверяя автокомплиту и отрывочной памяти. все верно — почти, только QMessageBox::NoButton — это отсутствие кнопки, соответственно диалог подтверждения выглядел как «Удалить сверхважное? Да!»
В истории порадовало еще то, что наконец-то «API» (интерфейс) мужского рода, а не среднего :)
Междумордие — оно
Меня вот бесит, что у fputs, fread и fwrite файл в конце пишется, а у fprintf и fscanf — в начале. Да, у fprintf и fscanf varargs, но можно было остальные функции подогнать под них. Вообще, ставить файл в начало логичнее: сначала выбираем, какой файл, а потом указываем, что с ним делаем (я говорю про код, а не про направление аргументов у cdecl). Более объектно-ориентированно.
Это тяжёлое наследие Unix.
Редко ищу в документации (основной язык PHP) «вроде была функция которая это делает», но часто (обычно средствами IDE) ищу точное название, порядок аргументов и т. п. Но открыв однажды документацию редко закрываю её до очередного ребута.
Во-во! Логика именования и порядок аргументов в функциях PHP настолько суровые, что приходится постоянно уточнять.
Кажется, что знаешь все основные моменты, пока не возникает необходимость набрать код в простом текстовом редакторе. Без автокомплита, без сниппетов и подсказок. Тогда можно затупить над банальными вещами, которые впрочем легко гулятся.
Я ваще так же без понятия API ява питон и скрипт, поэтому когда таки приходится писать на этом изврате, то не использую никаких либ а все велосипеды пишу вручную. Ибо лень читать доки по эти говноязыкам.
UFO just landed and posted this here
что же тогда не изврат по-вашему?

И кстати, стандарты явы много куда перенесены из-за их удобства, так что вы явно ошибаетесь.
Там есть inline assembly для системных вызовов?
Пишите в машинных кодах по памяти, да? :-)
У меня все IDE помнит, ориентируюсь по подсказкам, автокомплиту. В официальные доки по API не помню когда последний раз глядел.
хех а новые API порой упрощают жизнь местами =) хотя конечно и «по старинке» тоже можно успешно прожить… но всё-таки чейнджлоги новых API читать необходимо для большей продуктивности =) ИМХО
В Java 7 try-with-resources мно-ого кода экономит. :-) И прозрачность повышает.
Так что все-таки новые фичи имеет смысл знать.
msdn всегда открыт на втором мониторе…
as3/flex: Лезу в документацию очень редко, когда нужно сделать какую-нибудь крайне нестандартную вещь.
web&c#/wpsdk: твердо знаю только основы.
В 98% случаев знаю нужное свойство, атрибут, правило, метод. Это, как мне думается, из-за развитой фотографической памяти.

2% — те случаи когда доходит до редко используемого, например, CSS правила white-space, значений для которого, на данный момент, я могу вспомнить только два — inherit и nowrap.
У меня память больше позиционная, но результат примерно такой же. :-)
Только в Java.
Не то чтобы не получается запомнить, как-то не думаю об этом, но иногда ловлю себя на мысли, что забыл совсем простую вещь.
Пытался конспектировать важные и частоиспользуемые вещи в Zim, но не прижилось.
А чем пользуетесь вы?
Официальной документацией :) Смысл конспектировать, есои гуглится быстрее чем конспекты ищутся :)
Да кто ж его знает, может есть какой крутой инструмент для добавления сниппетов/заметок.
Лучший способ развить память — решать всякие задачки на знание спецификации.
Для Java на эту тему есть Java Puzzlers, например.
А также примеры сертификационных экзаменов.
Я пишу на питоне, у меня постоянно в одной консоли открыт ipython. Право, быстрее переключиться в другую консоль, нежели сидеть и читать доки в браузере.
К сожалению, некоторые модули задокументированы непонятно или неполно.
Ну под рукой же интерпретатор и сам скриптовый язык. Можно попробовать всегда выполнить что-то. А если совсем все плохо — залезть в исходники.
Вам верстальщики могут весь опрос исказить. Это все же не тоже самое что программирование, даже просто по объему и взаимозаменяемости.
Результаты опроса отразят не реальное знание разработчика, а его мнение об этом знании.
Например, человек может считать, что хорошо помнит стандартную библиотеку и не заглядывать даже в документацию. А на самом деле, он может не догадываться о существовании многих полезных модулей и ими не пользоваться.
Другой же, может изучить практически всё и часто прибегать к документации, вспомнив, что под его текущую задачу где-то что-то в библиотеке было.
Нет смысла засорять оперативную память мозга информацией, которая требуется редко и, при необходимости, может быть легко добыта из внешних источников. Если же информация применяется в работе часто, она сама перемещается в оперативную память с целью оптимизации, т.е. сокращения времени доступа.
Особенно раздражают вопросы по на собеседовании типа «какие методы есть у класса Object». Это что, знание наизусть апи как-то характеризует меня как качественного программиста?
Это уже не знание фреймворка, а знание основ среды.
Может это вопрос на сообразительность? Можно ведь что-то в ответ предположить.
Хотя, зачем я себя обманываю, многие и правда такое спрашивают, всерьез считая это мерилом компетентности.
Если говорить о среде .NET, то большинство методов класса Object регулярно используется на практике. Если человек не знает этих методов, можно сделать вывод о низкой сложности и малом разнообразии задач, которые решал этот человек. На мой взгляд, это не может быть плюсом.
Понятно, что ценность этих конкретных знаний зависит от платформы. Думаю, Vitamon имел в виду вопросы на зубрёжку.
Не поверишь — недавно задал себе этот вопрос, и в ответе совершенно забыл про finalize() (Java) :-)
Долго смеялся.
Пишу на AS3, в документацию заглядываю в среднем раз в неделю
В стандартной библиотеке основного рабочего языка (D) есть мой код :)
D это замечательно.
А какого рода программы вы пишете, если не секрет?
точно знаю что есть, не помню точно названия методов, порядок параметров…
Нет пункта «не использую стандартную библиотеку» :)
Другое может значит что угодно, например «я домохозяйка».
Если не знаешь — прочти документацию, если думаешь что знаешь — прочти два раза.
А если знаешь — проверь на частные случаи :-)
Не нашел своего варианта: «Отлично знаю, но постоянно держу открытой документацию, чтобы не напрягать мозг когда это не нужно»
помниться фраза «Математик не обязан помнить все константы» (но должен уметь их вычислить).
Программист не тот, кто помнит всё наизусть, а тот кто знает что и как можно сделать, а мелочи типо параметров функций всегда можно найти в гугле.
Ха! стандартная библиотека… Тут приходится гуглить, порой, как в каком языке строчку к строчке прилепить… то "+", то "||", то ".", то вообще ".concat()" или «CONCATENATE». Бесит!)
NSString *helloWorld = [@"Hello" stringByAppendingString:@" world!"];
По памяти знаю только те вещи, который очень часто использую в коде, остальное либо гуглю, либо автокомплит в IDE помогает.
Пишу на java и javascript, редко на python. В основном подсказками IDE пользуюсь, причем производительность возрасла, когда на столе появилась бумажка с хоткеями этой самой IDE :)

Мне кажется, важно знать основные концепции и подходы (как уже писали выше) и обязательно изучить инструменты разработки под свой язык. Хотя, с другой стороны, есть люди, которые комфортно пишут в простейшем текстовом редакторе и не чувствуют дискомфорта. Тут уж каждому свое.
Мой папа будучи рабом физико-химических наук с 35-летним стажем, без понтов и степеней, не помнил почти ни одной формулы, кроме очень простых конечно. Зато имел магическую способность вывести, любую формулу на клочке бумаги за 20-30 секунд, потом задумывался и говорил что-то типа: «Так, тут еще коэффициент какой-то должен быть, наверное постоянна Больцмана». Мне первый раз это снесло голову, когда я эту формулу учил-учил и выучить не мог, а он настолько свободно понимает устройство мира в общем и конкретного процесса в частности, что создать формулу просто из воздуха, для него было нормальной рутиной.
Бессмысленно учить язык, но нужно чувствовать то, как он работает.
Аналогия не совсем точная. «Вывести» сигнатуру конкретного метода или его название, если не помнишь, нельзя. Вопрос главным образом в продуктивности. Я считаю, что неплохо знаю свои рабочие языки, но пишу код медленно, потому что постоянно отвлекаюсь на документацию.
В наше время важнее быстро читать и находить ошибки при чтении, а также выстраивать в голове картину неизвестного доселе мира.
Я также в школе развлекался на тему «сколько нужно знать формул, чтобы остальные быстро вывести».
Оказалось, 4 штуки. :-)
Плюс точное понимание, из чего и в каком порядке выводятся остальные формулы.
Но лучше, конечно, когда и первые формулы являются следствием понимания «устройства мира» — тогда вообще ничего не нужно помнить :)
Десяток лет сижу на перле, и в среднем раз в несколько дней заглядываю в доку по поводу какой-нибудь банальной substr :) Неожиданностью для себя самого стало то, что со временем подобные функции из ходовых ушли куда-то на задний план и стали использоваться редко. И вроде бы я даже помню порядок ее аргументов, но проверить через доку и не ждать сюрпризов от отладки — имхо совсем не стыдно и в случае фейла выйдет гораздо дешевле, чем найти то же самое глазками.
Когда кодишь постоянно, то помнишь большую часть стандартной библиотеки. По крайней мере ту часть которую хоть раз использовал в коде… Сейчас пописываю время от времени, приходится чаще заглядывать… Забывается…

Обычно смотришь список аргументов и порядок. Иногда проще забить, как помнишь. Если не прав, то либо компилятор/интерпретатор поправит, либо тесты… Тесты это наше всё…
Sign up to leave a comment.

Articles