idealpc

идеальный ПК для кодера

крис касперски ака мыщъх, no-email

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

Какая из конфигураций наиболее оптимальна для кодера? Можно, конечно, не заморачиваться с этими вопросами, а просто купить самый крутой и самый навороченный ПК, переплатив несколько тысяч долларов за возможности, большая часть из которых никогда не будет востребована. К тому же «дорого» вовсе не синоним слова «хорошо», а «круто» вовсе не обозначает «то, что вам нужно». Потребности кодеров имеют свою специфику, о которой мы и собираемся рассказать.

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

Компиляция – весьма ресурсоемкий процесс. Даже на самых «крутых» процессорах полная пересборка типичного программистского проекта растягивается на несколько часов, поэтому, экономить на процессоре, право же, не стоит. Желательно, чтобы у процессора была не только впечатляющая тактовая частота, но и достаточно вместительный кэш первого и второго уровней. Усеченные версии «топовых» процессоров, ориентированные на массовый рынок, (типа CELERON'ов) кодеру приобретать право же не стоит. Ведь время – деньги. Каждая секунда, проведенная в томительном ожидании под сенью компьютера, – прямой убыток от упущенной выгоды. Системные программисты (и разработчики драйверов в том числе) зачастую получают до 200$ за час своей работы, окупая процессор буквально за один день!

Разгонять процессор (как и все остальные компоненты ПК) категорически не рекомендуется! Кодер как никто другой должен быть уверен в надежности аппаратного обеспечения, чтобы уверенно отличать свои программистские ошибки от сбоев машины (вполне типичный случай: накануне сдачи судьбоносного проекта уже отлаженная программа внезапно начинает сбоить, причем воспроизвести последовательность действий, приводящую к ошибке несмотря на все усилия так и не удается – плавающий глюк, что может быть хуже! Программист не спит ночами, много курит, нервничает, ругается матом, внося в исходный код большое количество исправлений, доламывающих программу окончательно. Между тем, источник ошибок сидит вовсе не в ней, а в разогнанном процессоре!). Нормальные кодеры не разгоняют процессоры – они их тормозят!

Какой процессор выбрать – Intel или AMD? Для конечного потребителя это вопрос вкуса, но кодер не может полагаться на свой собственный вкус. Он – слуга потребителя. В идеале следует иметь несколько компьютеров с различными конфигурациями, но на практике это не всегда достижимо (особенно в отношении начинающих), поэтому приходится выбирать что-то одно. Аргументы в пользу Intel: он законодатель мод, захвативший львиную долю рынка и не собирающий ее никому отдавать. Вопреки распространенному мнению, процессоры Intel и AMD не полностью совместимы друг с другом (в частности, они по разному обрабатывают флаги, помеченные в документации как «неопределенные»). Поэтому, программа, закладывающая на некоторые не вполне «легальные» особенности поведения процессора (не зависимо от того, осведомлен кодер об их «недокументированном» статусе или нет), на другом процессоре может просто не пойти!

Еще более строгие условия налагает оптимизация. Стратегия построения оптимального кода определяется внутренней архитектурой процессора, а она у Intel и AMD очень неодинакова. Оптимизация под AMD с экономической точки зрения совершенно бессмысленна – количество поклонников этого процессора относительно невелико, причем большая часть из них приходится на довольно воинствующих субъектов, предпочитающих программы не покупать, а… «национализировать» или попросту говоря пиздить. Опять-таки, качество документации от AMD все еще оставляет желать лучшего, а Intel предлагает не только великолепное (и к тому же бесплатно рассылаемое в печатном виде) руководство по оптимизации, но и высокопроизводительные библиотеки оптимизированные на все случае жизни. Поклонникам AMD (прежде чем размазывать мой анус здоровенными валунами): поймите меня правильно. Я не качу бочку ни на AMD, ни на ее процессоры (а AMD делает хорошие процессоры!). Если вы разрабатываете операционную систему массового назначения (например, Linux), то при миллионных объемах продаж поддержка «редкоземельных» процессоров становится вполне оправданной. Однако, для «мелкокалиберных» программных пакетов, это не так. Оптимизация под несколько процессорных архитектур существенно увеличивает время разработки программы, но практически никак не сказывается на объемах продаж. Так что делайте выводы!

Аргументы в пользу AMD: если эта фирма разорится (или просто свернет линейку x86 процессоров), голубой гигант Intel'а превратиться в мрачного монополиста, не заботящегося ни о новых разработках, ни о своих потребителях. Не забывайте, что Intel (как впрочем и AMD) это не благотворительная организация, а коммерческая бизнес-машина, целью которой является нажива. Новые исследования и разработки ведутся только для того, чтобы удержать лидирующее позиции и не дать конкурентам вырваться вперед. Если бы не было конкурентов, не было бы и инвестиций в исследовательскую деятельность.

Сильной стороной AMD является поддержка двух наборов мультимедийных инструкций – Intel и AMD (хотя поддержка Intel-инструкцийвыходит с опозданием). Intel же, напротив, демонстрирует красивую мину при плохой игре, делая вид, что никакого AMD вообще не существует. Поэтому, если вы не собираетесь заниматься низкоуровневой оптимизаций на уровне планирования потока машинных команд, но хотите использовать мультимедийные команды – AMD, вероятно, будет наилучшим выбором.

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

Чем больше памяти – тем лучше (кашу маслом не испортишь, а уж памятью – тем более). Необходимый комфортный минимум составляет 128 – 256 Мбайт. Дальнейшее наращивание объема памяти само по себе не обеспечивает прироста быстродействия, однако, позволяет работать с несколькими приложениями одновременно («работать с приложениями одновременно» это совсем не тоже самое, что «время от времени переключаться между туевой хучей приложений», последнее к объему памяти некритично).

Наиболее остро в оперативной памяти нуждаются эмуляторы виртуальных машин – непременный атрибут всякого кодера. Чтобы быть уверенным, что ваша программа работает под всей линейкой операционных систем типа Windows или, упаси боже UNIX, она должна быть тщательно протестирована под ними! Раньше для этого приходилось дробить диск на разделы, устанавливая на каждый из них свою операционную систему, сейчас же это достигается при помощи эмуляторов (например, Microsoft Virtual PC). Особенно они полезны при разработке драйверов и прочих низкоуровневых штучек, вызывающих перезагрузки и зависания системы. Естественно, перезагрузки эмулятора воспринимаются менее болезненно. Для комфортной работы с эмулятором желательно иметь от 512 – 1024 Мбайт оперативной памяти, в противном случае все будет очень сильно тормозить.

Стандартном де-факто в настоящее время является DDR400, устанавливаемая парами (для двухканальных контроллеров). Менее производительная память не сможет в полной мере использовать все преимущества широких и быстродействующих процессорных шин (FSB – Front Side Bus). Более дорогая DDR533 не имеет никаких преимуществ по сравнению с DDR400 (не считая того, что она лучше разгоняется, но как уже говорилось выше, кодерам лучше ничего не разгонять). Судите сами. Системная шина процессора Pentium-4 имеет частоту 200 MHz и передает четыре порции данных за такт. DDR400 работает на частоте 100 MHz и тоже передает четыре таких порции за такт. Два DDR400 модуля обеспечивают 100% загрузку процессорной шины (во всяком случае теоретически) и полностью синхронизованы с ней (200 делится на 100 без остатка). DDR533,работающая на частоте 133 MHz и передающая все те же четыре порции за такт, уже не обеспечивает 100% загрузки процессорной шины, поскольку работают в асинхронном режиме (200 не делится на 133 без остатки) и шинный контроллер вынужден простаивать некоторое время в ожидании прихода фронта/спада тактового импульса или… переключить DDR533 на частоту 400 MHz, при которой она будет работать абсолютно с той же скоростью, что и DDR400. Так зачем же платить больше, ничего не приобретая взамен?

При выборе компьютера на чипсет обращают внимание в последнюю очередь. А зря! Не все чипсеты одинаковы! При профилировке программы (профилировкой называется измерение скорости отдельных участков кода для выявления горячих точек – съедающих максимум производительности) очень важна воспроизводимость результата, т. е. чтобы время двух прогонов одного и того же участка программы отличалось как можно меньше. Различные побочные факторы, неизбежно вносимые чипсетом, произвольным образом изменяют время каждого из прогонов, делая результат профилировки в той или иной степени недостоверным. Небольшими отклонениями (в пределах нескольких процентах) можно и пренебречь, но когда время соседних прогонов отличается вдвое и даже втрое, ни профилировка, ни следовательно оптимизация программы становится невозможной. Чипсеты от Intel и AMD достаточно надежны и обеспечивают хорошую степень постоянства и воспроизводимости результатов. SiS и VIA в этом плане выглядят намного хуже и от их использования лучше всего воздержаться.

Большинство современных чипсетов (начиная, с Intel 845) содержат специальный высокоточный таймер (High Precision Event Timers или сокращенно HPET), тактируемый частой от 10 MHz и обеспечивающий точность замеров в пределах 0,1 мс (для сравнения точность ACPI таймера, присутствующего на большинстве материнских плат и часто называемого PM-таймером – Power Management Timer – редко превышает 1 мс). Чем короче «тик» таймера, тем выше «разрешающая способность» профилировщика. Естественно, для работы с HPET-таймером профилировщик должен «знать» о нем и потому старые профилировщики не дают никаких преимуществ.

Религиозные войны ЖК против ЭЛТ то затихают, то, собравшись с силой, вспыхивают вновь. Каждая сторона приводит свои аргументы, а между тем производство ЭЛТ мониторов среднего класса переживает не лучшие времена, дыша на ладан. Если так пойдет и дальше, вопрос выбора перестанет стоять.

Лично мне работать с ЭЛТ намного приятнее. Он естественно отображает цвета, адекватно реагирует на смену разрешения (ЖК в этом случае вынужден либо уменьшать картинку, либо заниматься интерполяцией, качество которой так себе). Что же касается текстового режима (а нормальные кодеры работают преимущественно в нем одном), здесь ЭЛТ был и остается вне конкуренции.

Считается, что на ЖК меньше устают глаза. В действительности же, все зависит от конкретного монитора и индивидуальных особенностей восприятия конкретного глаза (даже двух!). Я знаю людей, которые даже с хорошим ЖК могут работать не больше пары часов, а на ЭЛТ – все дни напролет. Так же справедливо и обратное утверждение.

В общем, выбор монитора – дело ответственное и универсальных рецептов здесь нет. Единственное неоспоримое достоинство ЖК – предельно низкое энергопотребление (при работе от UPS или аккумуляторов это актуально). Ну еще габариты. ЖК можно запросто поставить на полку, окружив себя мониторами со всех сторон (а кодерам, как уже говорилось, зачастую приходится работать на нескольких компьютерах одновременно).

Что же касается размаха диагонали, то она опять-таки зависит от личных предпочтений и специфики работы. Программисты, призирающие мышь и преимущественно обитающие в текстовых редакторах консольного режима, обычно выбирают 15« мониторы, поскольку уже на 17» у них начинают «разбегаться глаза». Визуальные среды разработки, перегруженные графическими «финтивлюшками», требуют не менее 17«, а лучше даже 21», однако, в этом случае монитор следует подальше отодвинуть от глаз, иначе Рабочий Стол не уместится в поле зрения, а постоянное «вождение глазами» не только утомительно, но еще и не безопасно, поскольку вызывает различные трудноизлечимые заболевания.

Видео карта с мощным графическим ускорителем реально нужна только тем кодерам, которые разрабатывают игры или другие 3D-приложения. Главное, чтобы она обеспечивала превосходную четкость тонких линий, актуальную при работе с мелким шрифтом и чтении документации в pdf-формате. Обычно этим славятся карты, ориентированные на верстку и прочие печатные процессы. Лично я использую Matrix Millennium G450, ныне давно снятую с выпуска (но можно найти и другие, аналогичные ей карты).

В любом случае, если изображение слегка дрожит, кажется размытым или подернутым туманным оттенком, попробуйте заменить карту и/или монитор, иначе необратимо испорите глаза – второй по важности инструмент кодера после головы. Замечательно, если карта и монитор поддерживают цифровой интерфейс, одним махом отсекающий львиную долю источников помех и кривизну ЦАП/АЦАП'ов, однако, его наличие не является обязательным. Цифровой интерфейс не превратит дешевую 20-долларовую карту в «принцессу», а в дорогих картах аналоговый интерфейс по качеству практически не отстает от цифрового.

Главное свойство жесткого диска – это надежность. Затем идет быстродействие и объем. Собственно, объем всех современных жестких дисков таков, что заполнить их ценными данными просто нереально (фильмы, музыку и порнографию в расчет не берем).

Для достижения наивысшего быстродействия к компьютеру можно подключить два жестких диска, повесив каждый из них на «свой» канал IDE-контроллера, и создать чередующийся (stripped) динамический диск (Windows 2000 и XP это позволяют) или прикупить RAID контроллер уровня 0 для всех остальных операционных систем. Параллельная запись/чтение практически удваивает производительность дисковой подсистемы, значительно увеличивая быстродействие всего компьютера в целом. (Внимание: не надо вешать несколько дисков на один IDE-канал – в смысле на один провод – это только снизит их быстродействие).

Считается, что жесткие диски с интерфейсом SCSI более производительны, чем IDE. При обработке большого количества перекрывающихся запросов, характерных для серверных программ, это действительно так. Но на домашнем компьютере (даже если это компьютер кодера) SCSI не обеспечивает никаких преимуществ. Возможно, вам скажут, что SCSI-устройства намного удобнее программировать, чем IDE. Совершенно верно, но! хитрая бестия Windows автоматически транслирует SCSI-запросы в IDE, поэтому с прикладного уровня между SCSI и IDE-дисками нет никаких различий! К тому же, те SCSI-контроллеры, что интегрированы в материнскую плату, не выдерживают никакой критики (хотя бы уже потому, что контроллеры различных материнских плат плохо совместимы друг с другом и при смене материнской платы или отказе контроллера содержимое дисков становится недоступно вплоть до приобретения точно такого же контроллера). Нормальный же SCSI контроллер стоит не дешевле пары сотен баксов и для домашнего компьютера это довольно расточительное решение.

Для увеличения надежности хранения данных, несколько дисков могу быть подключены параллельно. Такой том называется зеркальным (mirror) и соответствует RAID массиву уровня 1. Windows 2000/XP поддерживает зеркальные динамические диски, не требуя приобретения дополнительного оборудования, кроме собственно самих жестких дисков. Зеркальные тома защищают от отказов самих накопителей (и образования плохих секторов на них), но не в состоянии предотвратить остальные типы разрушений данных (поломка блока питания, пожар, отказ контроллера, сбой драйвера файловой системы, нашествие вирусов и т. д.), поэтому ценные данные обязательно должны резервироваться на внешние накопители информации!

Высокая надежность современных жестких дисков создает обманчивую иллюзию идиллии безопасности и большинство «нормальных» людей либо вообще не задумываются о резервировании, либо используют для этой цели CD-R/RW диски. Когда же данные все-таки теряются, они начинают рвать на себе волосы в разных местах и отрывать яйца всем подряд (начиная с вирусописателей и заканчивая Биллом Гейтсом).

Кодер должен резервировать все публичные версии своих продуктов, поскольку ошибка может обнаружиться в любой из них. Представьте, звонит вам Вася Пупик и сообщает, что версия X.Y.Z при такой-то последовательности действий выбрасывает сообщение о критической ошибке по указанному адресу. Естественно, во всех остальных версиях по данному адресу находиться совершенно посторонний код и анализировать его бессмысленно…

Чтобы там ни говорили рекламные лозунги и слоганы, CD-R/RW диски были и все еще остаются достаточно капризными и ненадежными носителями данных, зачастую разрушающимися без всяких видимых причин в самый неподходящий момент. Я уже молчу о том, что их очень легко поцарапать или по рассеянности выложить под яркий, губительный для них ультрафиолет (например, оставить на солнце).

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

Достойной альтернативой ZIP'у выглядит стример – самый надежный накопитель данных, который только можно встретить в продаже. Однако, скорость архивирования оставляет желать лучше и потому в практическом применении он не вполне удобен.

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

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

Затем идут листинги программы и дампы отладчика. И вот тут есть одна сложность. Зачастую печать идет не через драйвер принтера, а напрямую и если принтер не поддерживает кириллической кодировки в соответствующей кодовой странице (Windows, MS-DOS или KOI‑8), то это ласты. Поэтому, при выборе принтера обязательно обращайте внимание на его «русифицируемость». Лазерные принтеры наиболее предпочтительны. Они не слишком дороги и обеспечивают превосходную скорость печати при смехотворной удельной стоимости расходных материалов (а при больших объемах печати это актуально).

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

Мышь. Независимо от того оптическая она или нет, это большое зло. Привыкайте работать с горячими клавишами и макросами (благо даже визуальные среды разработки это позволяют). Поверьте, это значительно ускоряет процесс программирования и к тому же предотвращает ряд профессиональных заболеваний. Ведь мыши, даже ручные, рано или поздно «кусаются» и последствия такого укуса как правило фатальны. Боль в запястьях и прочие неприятности. Скажите честно – вам это надо?

Если наше видение идеального ПК сильно отличается от вашего, не спешите кидаться камнями. Ведь бешенная популярность ПК как раз и объясняется тем, что вместо фиксированного набора конфигураций, потребителю предлагается конструктор из которого можно собрать все, что угодно.

Герой фильма «Fight Club» как-то сказал по этому поводу: «I'd flip through catalogs and wonder: what kind of dining set defines me as a person?» («Я шарился по каталогам, ломая голову над вопросом: какая конфигурация столового сервиза определяет психотип моего внутреннего Я»). Компьютер для кодера – это не просто инструмент. Это его средство взаимодействия с реальностью. Это частичка его самого. Говорят: каков хозяин, таков и пес. Так почему компьютеры в этом плане должны вести себя иначе?