redis: (stupid)
[personal profile] redis



О языках и программировании.

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



Это выполняется обычно двумя переводчиками. Один переводит с человеческого на понятный компьютеру, второй – с понятного компьютеру на родной для него машинный код. Первого переводчика называют “программистом”, второй перевод осуществляет сам компьютер. В древние времена программистам приходилось писать сразу на языке компьютера. Сейчас, однако, мало кто это помнит, да и мало кому это надо. Сейчас пишут на “языках программирования”. Это как раз и есть тот самый промежуточный язык, понятный и программисту и компьютеру. Написанный на языке программирования текст обычно называют “исходным кодом” или “исходниками” (англ. “source code” или “sources”). Языков программирования много и знать их все невозможно. Наиболее часто встречаются C, C++, Java, VisualBasic, в Интернете – PHP, Perl.

Исходники надо превратить в машинный код. Это делается или непосредственно программистом, или уже на месте, при выполнении. В первом случае программа работает быстрее, так как компьютер не тратит время на перевод. Процесс предварительного перевода называют “компиляцией”, а программу-переводчик - “компилятором”. Если же программа переводится “на лету”, по ходу выполнения, то такой процесс называют “трансляцией”, а саму программу иногда называют “скрипт”. В обоих случаях есть и плюсы, и минусы. Трансляция, например, намного медленнее, чем исполнение готового машинного кода. В некоторых современных языках для ускорения трансляции и усложнения жизни программиста программа переводится три раза – сначала с человеческого на компьютерный (программистом), потом с компьютерного на еще более удобный компьютеру, но еще не машинный код (компилятором), а потом удобный для трансляции – на машинный код (транслятором). Обычно программы на языках C, C++, Delphi компилируются, а программы на PHP и Perl – транслируются. VisualBasic иногда транслируется, а иногда – компилируется, а Java - тот самый странный язык, который переводится три раза. Или даже четыре.

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


О промышленном программировании.

Промышленное программирование, или программирование крупных проектов подразумевает участие большого числа околокомпьютерного люда с разным образованием и опытом работы. Если представить себе, что один большой текст (“Графа Монте-Кристо”) переводят кусками (“модулями”) разные переводчики, можно понять, что такое промышленное программирование. И даже понять, почему программы так часто “глючат” (делают не то, что от них требуется) и “виснут” (не делают вообще ничего). В случае перевода книги это означало бы, что в первой главе героя зовут “Эдмон Дантес”, во второй просто “Моня”, а ближе к концу первого тома он вдруг становится графом Монте-Кристо.

Если над проектом работают много людей, то работа над проектом делится между ними по следующему принципу:
-- “Системный аналитик” узнает, что же собственно надо написать и определяет, из каких модулей и функций будет состоять проект.
-- “Девелоперы” разделяют между собой модули, пишут каждый свой модуль и компилируют полученный результат в готовую программу. Кстати, как перевести это слово?
-- “Тестеры” тестируют программу, находят ошибки и возвращают проект к девелоперам. И так до тех пор, пока количество ошибок не станет допустимым (а вовсе не нулевым!).
-- “Поддержка” или “суппорт” (англ. “support”) объясняет покупателю оставшиеся ошибки как заранее задуманные возможности программы (“фичи”, англ. “features”). Когда число таких заранее задуманных возможностей надоедает и пользователям, и суппорту, девелоперы пишут исправление ошибок и выпускают обновление программы (“патч” или “сервис-пак”, англ. “patch”, “service pack”).
-- Остальные участники проекта (дизайнеры, художники, менеджеры, “документаторы”, системные администраторы) занимаются тем, что мешают работать девелоперам.

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

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

Гораздо хуже ошибки логические, или “баги” (англ. “bug”). Они частично вылавливаются в процессе тестирования, но в массе своей достаются покупателю продукта. Например, если при сравнении своей зарплаты с максимальной написать знак “больше” вместо “меньше”, компилятор без проблем переведет программу на машинный код, но как будет работать программа – непонятно. Но интересно. Но непонятно. “Баги” ищут с помощью специальной программы - “дебаггерa”.

Есть еще мини-промышленное программирование, когда программист-индивидуал объединяет в себе все роли – и аналитика, и девелопера, и тестера, и суппорта. К сожалению, не объединяя при этом зарплаты. Это или индивидуал, пишущий под заказ, или собственный программист в маленькой фирме, или прикрепленный к отделу крупной фирмы программист.


Пример проекта.

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

Системный аналитик определяет, что программа состоит из трех модулей – первый модуль показывает окошечко, в котором можно настроить параметры поиска, второй соединяется с сервером форума и ищет слова, третий показывает пользователю результат. Три девелопера пишут три модуля и объединяют их в программу. Тестеры обнаруживают, что наиболее часто употребляются слова “и”, “но” и знак “точка”, что вовсе не является результатом, который нужен разведке. Девелоперы пишут словарь слов, которые не надо считать и указывают, что не надо считать знаки. Программа обнаруживает самое популярное слово и продается разведке.

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


О рабочем и свободном времени.

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

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

Есть у программиста и большое свободное время. Это время есть у аналитика, когда идея проекта отдана девелоперам или тестируется, это время есть у девелопера, пока проект находится у аналитика или тестера, это время есть у тестера, пока эти головы там наверху пишут ему проблемы. В некоторых фирмах большое свободное время можно вполне официально тратить на личные нужды – вплоть до игры в DOOM, не говоря уже о чтении anekdot.ru. Работа менеджера состоит в том, чтобы ни у кого не было большого свободного времени, но способных менеджеров, к счастью, очень мало.

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

Программист-индивидуал обычно является хорошим программистом и у него зачастую много свободного времени. Особенно если у него нет менеджера.

Кроме того, работа программиста в известной степени творческая. Вряд ли кому-то придет в голову требовать от художника, чтобы он рисовал “Джоконду” ежедневно с 9:00 до 18:00 с перерывом на обед. А если и будут требовать - выйдет “девушка с веслом”.


О том, зачем это написано.

Да задолбали уже обсуждать, откуда у меня столько времени на лазанье по Интернету в рабочее время!

If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

redis: (Default)
redis

July 2025

S M T W T F S
  12345
67 89101112
13141516171819
20212223242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 19th, 2025 09:29 pm
Powered by Dreamwidth Studios