Научитесь программированию за десять лет — КиберПедия 

История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...

Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...

Научитесь программированию за десять лет

2021-01-29 68
Научитесь программированию за десять лет 0.00 из 5.00 0 оценок
Заказать работу

 

Ученые (Hayes, Bloom) показали, что развитие высокой квалификации в любой из широкого разнообразия областей, включая шахматы, сочинение музыки, рисование, игра на фортепьяно, плавание, теннис, исследования в нейропсихологии и топологии, занимают около десяти лет. По‑видимому, в действительности не может быть сокращения: даже Моцарту, который был музыкально одаренным уже в 4 года, потребовалось еще 13 лет, прежде чем он начал создавать мировую классическую музыку. В другом жанре Битлз, казалось, вырвались на сцену, появившись в шоу Эда Салливана в 1964 г. Но они играли с 1957 года, и хотя они рано завоевали широкую популярность, их первый переломный успех, Сержант Пепперс, был выпущен в 1967 г. Сэмюэл Джонсон (Samuel Johnson) считал, что требуется более десяти лет: «Мастерство в любой отрасли достигается лишь работой в течение жизни; его нельзя купить по меньшей цене». А Чосер (Chaucer) жаловался: «Жизнь так коротка, а ремеслу так долго учиться».

Вот мой рецепт для успеха в программировании:

• Заинтересуйтесь программированием и сделайте что‑нибудь, потому что это забавно. Убедитесь, что оно продолжает оставаться достаточно интересным, чтобы вы хотели прилагать усилия в течение десяти лет.

• Говорите с другими программистами; читайте другие программы. Это важнее, чем любая книга или учебный курс.

• Программируйте. Лучшей разновидностью обучения является обучение деланием. Говоря более технически, «максимальный уровень производительности индивидуума в данной области не достигается автоматически как функция расширения опыта, но его могут повысить даже очень опытные индивидуумы в результате обдуманных усилий по совершенствованию» и «наиболее эффективное обучение требует хорошо определенной задачи с соответствующим уровнем трудности для данного конкретного индивидуума, информационной обратной связи и возможностей повторения и исправления ошибок». Книга Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life (Практическое познание мышление, математика и совершенствование способностей в повседневной жизни) является интересным справочным пособием для этой точки зрения.

• Если хотите, проведите четыре года в колледже (или еще больше в аспирантуре). Это даст вам доступ к некоторым видам работ, требующим диплома, и это даст более глубокое понимание области, но если вам не нравится школа, вы можете (с некоторым упорством) получить аналогичный опыт на работе В любом случае, одного лишь изучения книг недостаточно. «Образование в компьютерных науках может сделать кого‑нибудь искусным программистом не в большей степени, чем изучение кистей и красок может сделать кого‑то искусным художником», – говорит Эрик Реймонд (Eric Raymond), автор The New Hacker's Dictionary (Словаря новых хакеров). Один из лучших программистов, которых я когда‑либо принимал на работу, имел лишь среднее образование, он создал массу превосходных программ, у него есть своя группа новостей и через фондовые опционы, без сомнения, намного богаче, чем буду я когда‑либо.

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

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

• Изучите по крайней мере полдюжины языков программирования. Включите один язык, поддерживающий абстракции классов (подобно Java или С++), один, поддерживающий функциональные абстракции (подобно Lisp или ML), один, поддерживающий синтаксические абстракции (подобно Lisp), один, поддерживающий декларативные спецификации (подобно Prolog или шаблонам C++), один, поддерживающий сопрограммы (подобно Icon или Scheme), и одни, поддерживающий параллелизм (подобно Sisal).

• Помните, что в «компьютерных науках» есть «компьютер». Знайте, сколько времени ваш компьютер тратит на исполнение инструкции, получение слова из памяти (с попаданием в кэш и без попадания), чтение последовательных слов с диска и поиск нового положения на диске (Ответы ниже.)

• Погрузитесь в работу по стандартизации языка. Это может быть комитет ANSI С++, или это может быть принятием решения, должен ли ваш местный стиль программирования использовать 2 или 4 пробела в отступах. В любом случае, вы узнаете, что любят в языке другие люди, насколько глубоко они это чувствуют и, возможно, даже немного о том, почему они это чувствуют.

• Имейте здравый смысл, чтобы отделаться от работы по стандартизации языка как можно скорее.

Держа все это в уме, сомнительно, насколько далеко вы сможете уйти, обучаясь лишь по книгам. До рождения моего первого ребенка я прочел все книги How To (Как…), и до сих пор чувствую себя необразованным новичком. 30 месяцев спустя, когда ожидался мой второй ребенок, вернулся ли я к книгам, чтобы освежить их в памяти? Нет. Вместо этого я полагался на свой собственный опыт, который оказался для меня намного более полезным и обнадеживающим, чем тысячи страниц, написанных экспертами.

Фред Брукс (Fred Brooks) в своем эссе Никаких серебряных пуль (No Silver Bullets) определил план из трех частей для обнаружения великих проектировщиков программного обеспечения:

1. Систематически как можно раньше распознавать ведущих проектировщиков.

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

3. Предоставлять растущим проектировщикам возможности для взаимодействия и стимулирования ими друг друга.

Это предполагает, что у некоторых людей уже есть качества, необходимые, чтобы стать великими проектировщиками; задача заключается в том, чтобы соответствующим образом их выманить. Алан Перлис (Alan Perlis) выразился более лаконично‑ «Каждого можно научить ваять: Микеланджело пришлось бы учить, как не делать это. Так же и с великими программистами».

Поэтому вперед, купите эту книгу по Java; возможно, вы получите от нее какую‑ нибудь пользу. Но вы не измените свою жизнь или свою действительную общую квалификацию как программиста за 24 часа, дня или даже месяцев.

 

Ссылки

 

Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.

Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no 4, 1987, p. 10‑19.

Hayes, John R., Complete Problem Solver, Lawrence Erlbaum, 1989.

Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life, Cambridge University Press, 1988.

 

Ответы

 

Время выполнения различных операций на типичном ПК 1 ГГц летом 2001 г.:

исполнение одной инструкции 1 нс = (1/1000 000 000) сек

выборка слова из кэша L1 2 нс

выборка слова из основной памяти 10 нс

выборка смежного слова с диска 200 нс

выборка слова из нового места на диске (поиск) 8 000 000 нс = 8 мс

 

Сноски

 

Эта страница[191] доступна также в переводе на японский язык[192] благодаря Yasushi Murakawa и в переводе на испанский язык[193] благодаря Carlos Rueda.

T. Capey указывает, что страница Complete Problem Solver на Amazon теперь содержит книги Teach Yourself Bengali in 21 days и Teach Yourself Grammar and Style под рубрикой «Клиенты, которые купили эту книгу, купили также и эти книги». Я догадываюсь, что большая часть людей, посмотревших на ту книгу, пришли с этой страницы.

 

 

Приложение В

Лицензия Caldera для старой Unix [194]

 

CALDERA

240 West Center Street

Orem, Utah 84057

801‑765‑4999 Fax 801‑765‑4481

23 января 2002 г.

Дорогие энтузиасты UNIX®,

Caldera International, Inc. настоящим предоставляет безвозмездную лицензию, которая включает права на использование, модификацию и распространение этого названного исходного кода, включая создание производных двоичных изделий из исходного кода. Исходный код, для которого Caldera International, Inc. передает права, ограничены следующими операционными системами UNIX, которые работают на 16‑разрядном процессоре PDP‑11 и ранних версиях 32‑разрядной операционной системы UNIX, со специальным исключением UNIX System III и UNIX System V и операционных систем‑наследников:

32‑разрядной 32V UNIX,

16‑разрядной UNIX версий 1, 2, 3, 4, 5, 6, 7.

Caldera International, Inc. не дает никаких гарантий или поручительств, что какой‑нибудь исходный код доступен от Caldera International, Inc.

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

Copyright © Caldera International Inc. 2001–2002. Все права сохранены. Разрешается распространение и использование в исходной и двоичной форме, с модификациями или без них, при соблюдении следующих условий:

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

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

Этот продукт включает программное обеспечение, разработанное или принадлежащее Caldera International, Inc.

Ни название Caldera International, Inc., ни названия других внесших вклад участников не могут использоваться для поддержки или продвижения продуктов, производных отданного программного обеспечения, без особого предварительного письменного разрешения.

ИСПОЛЬЗОВАНИЕ ЭТОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ПРЕДУСМОТРЕНО ПО ЛИЦЕНЗИИ CALDERA INTERNATIONAL, INC. И ДРУГИХ ВНЕСШИХ ВКЛАД УЧАСТНИКОВ «КАК ЕСТЬ» И БЕЗ ВСЯКИХ ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ НЕЯВНЫМИ ГАРАНТИЯМИ ПРИГОДНОСТИ ДЛЯ ПРОДАЖИ ИЛИ ПРИМЕНИМОСТИ ДЛЯ ОПРЕДЕЛЕННЫХ ЦЕЛЕЙ. НИ В КОЕМ СЛУЧАЕ CALDERA INTERNATIONAL, INC. НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБОЙ ПРЯМОЙ, КОСВЕННЫЙ, СЛУЧАЙНЫЙ, СПЕЦИАЛЬНЫЙ, ШТРАФНОЙ ИЛИ ЯВЛЯЮЩИЙСЯ СЛЕДСТВИЕМ УЩЕРБ (ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ПРИОБРЕТЕНИЕМ ИЛИ ЗАМЕНОЙ ТОВАРОВ; ПОТЕРЮ ЦЕННОСТИ, ДАННЫХ, УПУЩЕННУЮ ВЫГОДУ ИЛИ ПРИОСТАНОВКУ БИЗНЕСА), КАК БЫ ОН НИ БЫЛ ВЫЗВАН И В СООТВЕТСТВИИ С КАКИМИ БЫ ТО НИ БЫЛО ПРЕДПОЛОЖЕНИЯМИ, БУДЬ ТО В КОНТРАКТЕ, НЕПОСРЕДСТВЕННОЙ ОТВЕТСТВЕННОСТИ ИЛИ ГРАЖДАНСКОМ ПРАВОНАРУШЕНИИ (ВКЛЮЧАЯ НЕБРЕЖНОСТЬ ИЛИ ДРУГОЕ), ВОЗНИКШИЕ ЛЮБЫМ СПОСОБОМ ВСЛЕДСТВИЕ ИСПОЛЬЗОВАНИЯ ДАННОГО ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ В СЛУЧАЕ ПРЕДУПРЕЖДЕНИЯ О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА.

 

Искренне ваш,

(подпись) Bill Broderick

Bill Broderick

Директор, Служба лицензирования

UNIX является зарегистрированной торговой маркой Open Group в США и других странах.

 

 

Приложение С

Общедоступная лицензия GNU [195]

 

Версия 2, июнь 1991 г.

Copyright © 1989, 1991 Free Software Foundation, Inc.

59 Temple Place, Suite 330, Boston, MA 02111, USA

Разрешается копировать и распространять дословные копии данного лицензионного документа, но не разрешается его изменять.

 

Преамбула

 

Лицензии большинства программных продуктов составлены так, чтобы отобрать у вас право совместно использовать и изменять продукт. По контрасту, Общедоступная лицензия GNU (GNU General Public License), напротив, подразумевает вашу свободу в совместном использовании и изменении свободного программного обеспечения – чтобы гарантировать, что программное обеспечение является свободным для всех своих пользователей. Данная Общедоступная лицензия применяется к большей части программного обеспечения Фонда независимых программ (Free Software Foundation) и к любой другой программе, авторы которой передают ее на использование с данной лицензией. (Некоторое другое программное обеспечение Фонду независимых программ защищается вместо этого Общедоступной библиотечной лицензией GNU (GNU Library General Public License).) Вы также можете использовать ее для своих программ.

Когда мы говорим о независимом программном обеспечении, мы имеем в виду свободу, а не цену. Наши Общедоступные лицензии разработаны так, чтобы гарантировать вам свободу распространять копии независимого программного обеспечения (и назначать за это цену, если хотите), получать исходный код, если хотите, изменять программное обеспечение или его части в новых независимых программах; а также гарантировать, что вы будете знать обо всех этих вещах.

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

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

Мы защищаем ваши права а два этапа: (1) обеспечивая авторское право на программное обеспечение и (2) предоставляя вам эту лицензию, которая дает вам законное разрешение копировать, распространять и/или модифицировать программное обеспечение.

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

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

Далее следуют точные праве и обязанности при копировании, распространении и модификации.

 


Поделиться с друзьями:

История развития пистолетов-пулеметов: Предпосылкой для возникновения пистолетов-пулеметов послужила давняя тенденция тяготения винтовок...

Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...

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

Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.052 с.