Вход/Регистрация
Кодеры за работой. Размышления о ремесле программиста
вернуться

Сейбел Питер

Шрифт:

Это как закон Меткалфа: полезность сети пропорциональна квадрату численности пользователей этой сети. То же и с языками: люди пользовались каким-то языком, и вдруг появляются Eclipse, FindBugs, Guice. Даже если Java не идеальный язык для вас, пользуясь им, вы имеете такие вот попутные выгоды. Можно создать собственное сообщество по численному программированию на Java, по какому угодно виду программирования.

Сейбел: Программирование приносит вам такое же удовольствие, как в школьные годы?

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

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

Сейбел: А случалось так, что по мене накопления опыта вы понимали: просто заставить программу работать недостаточно, есть и другие соображения? Вас это не обескураживало?

Блох: Конечно, такое бывает. И с книгами то же самое - трудно сесть за них. Мне вообще трудно начать работать, я стараюсь от этого уклониться. Начать - самое сложное, будь то программа, книга или что-то еще. Правда, иногда я себя подбадриваю: “Ну давай, Джош, ты занимаешься этим тридцать лет и не хуже других знаешь, как это делается. Так что вперед”. И еще я напоминаю себе, что в прошлый раз, когда я садился за это, все получилось - значит, должно получиться и теперь.

Сейбел: Итак, имея за плечами некоторый опыт, порой бывает сложнее взяться за работу. Скажите, а есть ли что-нибудь вне программирования, какой-то жизненный опыт, который помог улучшить ваши программистские навыки?

Блох: Конечно. Думаю, здесь помогает все, что делаешь, если делать это хорошо. Идеи приходят откуда угодно. Вот пример: в диссертации я делал анализ одной распределенной структуры данных - реплицируемой разреженной памяти. Основную идею я взял из курса химии, который прослушал. То было уравнение между состоянием равновесия и скоростью реакции: если в системе имеется динамическое равновесие, то можно составить уравнение вида “Элементы приходят в определенное состояние с такой же скоростью, с какой выходят из него”. Я вывел сразу три уравнения для трех переменных, решил их и получил результаты, которые в точности отражали наблюдаемое поведение той довольно сложной распределенной структуры данных. Идея взята из химии и применена в компьютерной науке.

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

Сейбел: Знакомы ли вам выдающиеся программисты, которые не очень любят математику или плохо ее знают? Нужны ли сейчас программисту математический анализ, дискретная математика и тому подобное? Или все зависит от склада ума, которым можно обладать даже без соответствующего образования?

Блох: Полагаю, так думают те, кто этого всего не изучал. Но знание математики, само собой, помогает в работе. Я работал с парнем по имени Майк Макклоски. Он мыслил математически, не зная теорию чисел. Он переписывал Biglnteger. Раньше она была надстройкой над Си-библиотекой, но Майк переписал ее на Java так, что потери в скорости не было. Недавно он завершил свою работу, в процессе освоив теорию чисел. Без математического склада ума он этого не сделал бы, но выучи он эту теорию до того, ему не пришлось бы осваивать ее в ходе работы.

Сейбел: Но он решал сугубо математическую задачу.

Блох: Да, пожалуй, не слишком удачный пример. Но даже при решении задач, прямо не имеющих отношения к математике, математическое мышление все равно нужно программисту. Например, доказательство по индукции так тесно связано с рекурсивным программированием, что одно без другого не понять. Вы можете не знать такие термины, как “база индукции” и “индукционный переход”, но должны понимать их суть для написания хороших рекурсивных программ. Так что даже если задача программиста не связана с математикой, без знания математических понятий ему придется туго.

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

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

  • Читать дальше
  • 1
  • ...
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: