« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга



ПнВтСрЧтПтСбВс
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
    Популярное
Классы

Работа с графиками и диаграммами (TChart, Series)

Использование внутренних объектов

Пример универсального скрипта для обработки HTML-форм

Глава 23. ГЛОБАЛЬНЫЕ АСПЕКТЫ SQL

ASP.NET и Web-формы

Data

Функция WaitSoundState

Функция AccessResource

Создание DLL с Web-ресурсами




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 180
Пользователей: 0

Статьи:: Юмор :: Пола Грэхем о «причудах» программистов



отправить ссылку другу версия для печати  Обсудить на форуме

Пола Грэхем о «причудах» программистов

По просьбам трудящихся — перевод статьи Пола Грехема (Paul Graham) ‘Holding a Programm in One's Head’.

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



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

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

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

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

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

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

2. Работайте запоем. Т.к. каждый раз перед началом работы необходимо втянуться в текущую задачу, очевидным решением по минимизации ненужных затрат является долгая работа без значительных перерывов. Разумеется, бесконечно работать невозможно, и в один момент вы поймете, что окнчательно «отупели» от работы. Быстрота наступления такого состояния зависит исключительно от особенностей конкретного человека. Я слышал о людях, которые работали по 36 часов подряд, дни напролет. Мой максимум это 18 часов, но наиболее комфортно я себя чувствую при работе не более 12 часов подряд.

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

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

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

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

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

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

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

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

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

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

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

Еще более удивительным является число официальных проектов, которые каким-то образом умудряются нарушать все восемь «правил». И в самом деле, если вы взглянете на методы разработки программного обеспечения в большинстве организаций, то увидите что они как будто бы нарочно делают все неправильно. В некотором роде так и есть. Одной из отличительных черт организаций является восприятие людей как взаимозаменяемых частей общего механизма. Это работает хорошо для задач, допускающих распараллеливание задач между участниками, таких, например, как война. Во всей истории нет ни одного упоминания случая, когда хорошо организованная армия натренированных наемников уступала бы армии, состоящей из самостоятельных воинов, насколько бы доблесными они ни были. Но мыслительный процесс не очень то можно распределить между людьми. А что такое программирование, если не мыслительный процесс.

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

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

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

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

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

Автор: http://paulgraham.com/head.html

Перевод: http://tom.habrahabr.ru/




Рубрика: Юмор




Подгрузка через AJAX HTML-кода, содержащег....

AJAX

При разработке CMS S.Builder наша команда активно использовала AJAX. Теперь вот решили поделиться накопленным опытом. Начнем с этого хабратопика. Не буду здесь затрагивать различные фреймворки и библиотеки. Свой код всегда роднее. Для работы с AJAX-ом в S.Builder написана библиотека sbAJAX. Можете качать и пользоваться :). В этом файле есть функция sbEvalJS. Для тех, кто не знает, объясню. При подгрузке через AJAX и вставке на страницу HTML-кода, содержащего JavaScript, JavaScript выполняться не будет или полезут баги. Эта функция как раз решает поставленную задачу.


Подробнее... | Рубрика: AJAX | Добавлено: 19.11.2008

Обзор нового релиза самой мощной Ajax библ....

AJAX

Хотя наш обзор немного запоздал, оригинальный Dojo 1.2 вышел в релизной версии ещё 6-го октября, но сейчас мы наверстаем упущенное. И так, Dojo Toolkit — это самая мощная и гибкая ajax-библиотека из всех, что есть на рынке, она активно развивается и имеет большое комьюнити. Кстати, это самое комьюнити, совместно с компанией Sitepen, имеет ещё несколько проектов, среди которых и Cometd и некоторые другие, не менее интересные, о которых мы скоро вам расскажем. Сегодня же все внимание на флагманский продукт — Dojo 1.2.


Подробнее... | Рубрика: AJAX | Добавлено: 19.11.2008

Firebug 1.3 и 1.4 alpha — что нового и инт....

Вебмастеру

Если вы профессиональный веб-разработчик и постоянно имеете дело с разработкой и отладкой сложных AJAX приложений, то наверняка знаете и используете Firebug — плагин для браузера Firefox, предназначенный для отладки и исследования веб-приложений. Текущая его версия, 1.2х достаточно стабильная и функциональна, чтобы помочь в 99% проблем, которые могут возникнуть при разработке. Но и этот инструмент не лишён если не недостатков, то некоторых фич, которые могли бы облегчить работу. И даже идеальный инструмент можно сделать ещё более идеальным, как бы это не звучало.


Подробнее... | Рубрика: Вебмастеру | Добавлено: 19.11.2008

Остальные статьи:

Релиз Microsoft Silverlight 2.0. Что новог...
XML документация в C#
Курсоры в MySQL 5
Microsoft опубликовала подробности о сесси...
Microsoft делится подробностями о том, что...
Тестируем новый javascript от нового брауз...
MySQL Query Cache
Использование провайдеров компиляции в As...
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новы...
Поиск кода Google /* что нового? */
10 jQuery скриптов для улучшения интерфейс...
Генераторы отчетов FastReport 4 и QuickRep...
День программиста — набор стерeотипов
Индусские програмисты
Вышел Django 1.0
Портативная версия Google Chrome Portable
Исходные коды .Net Frameword 3.5 SP1 для о...
Пишем правильный online WYSIWYG-редактор


Цитата дня (все,добавить):

Портал фрилансеров

работа на дому


    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование


Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия