Урок 1. Программирование. Общее представление. Команды для программирования
Команда (программирование) - это... Что такое Команда (программирование)?
В программировании, команда — это указание компьютерной программе действовать как некий интерпретатор для решения задачи. В более общем случае, команда — это указание некоему интерфейсу командной строки, такому как shell.
В частности, термин команда используется в языках императивного программирования. Эти языки так названы, потому что их операторы, как правило, пишутся наподобие глаголам в повелительном наклонении, используемому во многих естественных языках. Если посмотреть на оператор императивного языка как на предложение естественного языка, то команда, в общем, подобна глаголу.
Многие программы допускают использование специально отформатированных аргументов, известных как ключи, которые изменяют стандартное поведение команды, в то время как дополнительные аргументы описывают действия команды. Сравним с естественным языком: ключам соответствуют наречия, в то время как иным аргументам — дополнения.
Примеры
Ниже приводятся несколько команд для интерпретатора командной строки операционной системы UNIX (UNIX shell).
Команда cd изменяет расположение пользователя в дереве каталогов с текущего на каталог /home/pete. Команда echo выводит текст hello в поток стандартного вывода, который, в этом случае, напечатает этот текст на экране. Кавычки (заметьте: не такие, какие приняты в Википедии) необходимы для вывода нескольких слов, разделённых пробелами, однако всё зависит от конкретной реализации команды: возможен вывод нескольких слов даже без кавычек; возможно восприятие кавычек в качестве аргумента команды, то есть вывод текста вместе с ними. Команда ls выводит список всех файлов каталога /bin в полном виде (ключ -l), отсортированных по времени (ключ -t) в обратном порядке (ключ -r). Команда chmod используется для предоставления доступа на чтение, запись или выполнение к файлу с именем filename. В символьной записи первая цифра указывает на права пользователя, в то время как остальные две цифры используются для указания прав групп пользователей на чтение, запись или выполнение Вашего файла. 1 — доступ к Вашему файлу на выполнение, 2 — доступ к Вашему файлу на запись, 4 — доступ к Вашему файлу на чтение. 4+1=5 означает, что к Вашему файлу имеется только доступ на чтение и выполнение, 4+2+1=7 означает, что к Вашему файлу имеется доступ на чтение, на запись и на выполнение.
См. также
dic.academic.ru
Основы программирования 1 Машинный код Команды поступающие
Основы программирования 1
Машинный код Команды, поступающие в процессор по шинам, представляют собой последовательности нулей и единиц, то есть числа. Поэтому программа, с которой работает процессор, представляет собой последовательность чисел, называемую машинным кодом. Каждая модель процессора имеет свой собственный набор команд. Говорят, что процессор A совместим с процессором B, если процессор A полностью «понимает» машинный код процессора B.
Программа «Hello, world!» для процессора архитектуры x 86 выглядит следующим образом (в шестнадцатеричном представлении ): BB 11 01 B 9 0 D 00 B 4 0 E 8 A 07 43 CD 10 E 2 F 9 CD 20 48 65 6 C 6 C 6 F 2 C 20 57 6 F 72 6 C 64 21 3
Алгоритм Точно определенное описание способа решения задачи в виде конечной (по времени) последовательности действий. Для представления алгоритма в виде, понятном компьютеру, служат языки программирования. Алгоритм записывается на одном из таких языков, полученный текст программы с помощью трансляторов (спец. служебные приложения) переводится в машинный код, либо исполняется.
Язык программирования формализованный язык. Синтаксис языка программирования определяет «слова» , понятные транслятору, и правила записи команд (операторов). Синтаксис – это описание языка программирования, определяющее вид, форму и структуру конструкций языка. Пример. «Это кошка страус зеленая» . Слова и символы допустимы для русского языка, но вместе составляют недопустимую конструкцию (синтаксическая ошибка)
Постановка задачи Загружаемый модуль программы Разработка алгоритма Исходный текст программы Трансляция (лексический, семантический анализ, создание объектного кода) 7
Компиляторы и трансляторы Компилятор автоматически переводит текст программы в машинный код, который затем можно использовать отдельно от текста исходной программы. Компиляторы полностью обрабатывают весь текст программы. Они просматривают его в поисках ошибок, а затем транслируют в машинный код. При этом выполняется оптимизация. В результате законченная программа получается компактной и эффективной и может быть перенесена на другие компьютеры с процессором, поддерживающим этот код.
Интерпретатор сразу выполняет команды языка, указанные в тексте программы. Интерпретатор берет очередной оператор, анализирует его структуру и исполняет, затем происходит переход к следующему оператору и т. д. ØПрограммы с большим объемом повторяющихся вычислений могут работать медленно ØДля работы на другом компьютере требуется наличие интерпретатора 9
В реальных системах программирования используются и компиляция, и интерпретация. Отладка может выполняться в процессе интерпретации, а результирующий код не обязательно будет машинным – он может быть промежуточным машинно-независимым кодом абстрактного процессора, который в различных компьютерных архитектурах станет выполняться с помощью интерпретатора или компилироваться в соответствующий машинный код. 10
Уровни языков программирования Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкого уровня. Пример: язык ассемблера. Представляет каждую команду машинного кода не в виде чисел, а с помощью символьных условных обозначений, называемых мнемониками. Преобразование одной машинной инструкции в одну команду ассемблера называется транслитерацией.
Язык ассемблера применяется там, где требуется компактность, быстродействие и возможность прямого доступа к аппаратным ресурсам. Применяется для написания небольших системных приложений, драйверов, модулей стыковки с нестандартным оборудованием. 12
Языки программирования высокого уровня не учитывают конкретных компьютерных архитектур. Создаваемые программы легко переносятся на другие платформы, для которых создан транслятор этого языка. 13
Парадигмы языков программирования q q Императивные (процедурные) языки описывают решение задачи как последовательность процедур Функциональные языки описывают требуемый результат в виде набора вложенных друг в друга функций (Haskell) Логические языки описывают требуемый результат в виде суммы логических операций (Prolog) Объектно-ориентированные языки способны определять абстрактные типы данных и реализовывать основные парадигмы ООП: инкапсуляцию, наследование и полиморфизм (C++, Java, Object Pascal и др. )
Поколения языков программирования Первый этап – машинные коды (50 -е гг. ) Фрагмент программы в машинном коде Фрагмент программы на языке ассемблера
Второй этапа – языки высокого уровня (60 -е гг. ) Каждая команда в языке высокого уровня скрывает десятки и сотни команд на языке ассемблера. ALGOL, Fortran, APL 16
Третий этап – структурное программирование Вырабатывался наиболее общий алгоритм работы программы, а затем производилась декомпозиция этого алгоритма до уровня подпрограмм. ALGOL-68, C, Pascal 17
Четвертый этап – модульное программирование Программа делится на модули, которые при компиляции образуют отдельные объектные файлы. Объектные файлы собираются в единое целое и получается исполняемая программа. Модули можно использовать многократно как в виде исходного кода, так и скомпилированных объектных файлов. 18
Пятый этап – объектно-ориентированный подход Объекты окружающего мира находят свое абстрактное отражение в сложных типах данных, называемых классами. C++, Java, Object Pascal, языки семейства Microsoft. NET 19
Шестой этап – компонентный подход Построение программного обеспечения из независимых друг от друга «кирпичиков» , которые объединяются между собой благодаря специальным стандартизированным интерфейсам. Компоненты могут быть написаны на разных языках программирования и скомпилированы в разных средах разработки. 20
ОБЗОР ЯЗЫКОВ ПРОГРАММИРОВАНИЯ ВЫСОКОГО УРОВНЯ 21
Процедурное программирование Программа представляет собой последовательность команд, определяющих алгоритм решения задачи. Основная идея процедурного программирования - использование памяти для хранения данных. Основная команда - присвоение, с помощью которой определяется и меняется память компьютера. Программа производит преобразование содержимого памяти, изменяя его от исходного состояния к результирующему
Языки процедурного программирования Фортран создан в начале 50 -х годов для программирования научно-технических задач; Кобол – создан в конце 60 -х годов 20 -го века для решения задач обработки больших объемов данных, хранящихся на различных носителях данных; Алгол (1960 год) – это многоцелевой расширенный язык программирования. В нем впервые введены понятия «блочная структура программы» и «динамическое распределение памяти» . Не получил развития из-за отсутствия хороших компиляторов.
BASIC – язык программирования для начинающих. Характеризуется простотой освоения и наличием универсальных средств для решения научных, технических и экономических задач. Паскаль (1968 -1971 гг). В основу языка положен подход от общей задачи к частным (более простым и меньшим по объему). Си - планировался как язык для реализации операционной системы Unix вместо языка Ассемблера. Похож на Паскаль и имеет дополнительные средства для прямой работы с памятью. 24
Языки объектно-ориентированного программирования С++ (Си++) – объектно –ориентированное расширение языка Си, созданное Страуструпом в 1980 г. Java (джава, ява) – создан компанией Sun в нач. 90 -х гг. на основе С++. Призван упростить разработку приложений на основе С++ путем исключения из него всех низкоуровневых возможностей. Главная особенность – компиляция не в машинный код, а в платформенно-независимый байт-код. Этот байт -код выполняется с помощью интерпретатора – виртуальной java-машины, версии которой созданы для любой платформы.
С# (Си шарп) – создана в конце 90 -х гг. в Microsoft. В нем воплотились лучшие идеи С и С++, а также достоинства Java. 26
Языки программирования баз данных База данных – это файл (или группа файлов), представляющий собой упорядоченный набор записей, имеющих единообразную структуру и организованных по единому шаблону. Для работы с базами данных был создан структурированный язык запросов SQL (Structured Query Language). Для управления большими базами данных разработаны СУБД (системы управления базами данных). В каждой СУБД помимо поддержки языка SQL имеется также свой уникальный язык.
Языки программирования для Интернета Языки программирования для компьютерных сетей являются интерпретируемыми. Perl - язык, приспособленный для обработки произвольных текстовых файлов, извлечения из них необходимой информации и выдачи сообщений. Команды Perl могут получить данные из формы HTML или другого источника и выполнить с ними какое-нибудь действие.
PHP (1995 -1997 гг) обладает средствами доступа к БД и используется создателями динамических сайтов во всем мире VRML (1994 г) создан для организации виртуальных трехмерных интерфейсов в Интернете XML. С 1996 г идет работа над созданием универсального языка структуры документов. Может стать заменой языка HTML. 29
present5.com
CortexAddOnHost | Запускает сервис, отслеживающий используемые аудио и видео аддоны. | |
FirstBootPrompt | Language and keymap setup. | |
[ | Возвращает правда/ложь после сравнения элементов. | |
A - E | ||
addattr | Записывает атрибут файла, приводя записываемое значение к соотвествующему типу (специфичное для Haiku) | |
alert | Отображает окно с сообщением. (специфичное для Haiku) | |
arp | Манипулирует системным ARP-кешем. | |
awk | См. gawk. | |
base64 | Кодирование или декодирование Base64 в стандартный вывод. | |
basename | Убирает папку или опционально суффикс из строки /путь/до/имяфайла. | |
bash | Оболочка bash | |
bc | Арифметический язык-калькулятор. | |
beep | Воспроизводит системный сигнал. | |
bunzip2 | См. bzip2. | |
bzip2 | File compressor. | |
c++ | C -Compiler. | |
cal | Отображает календарь. | |
cat | Объединяет файлы и печатает в стандартный вывод. | |
catattr | Выводит содержимое аттрибутов файла. (специфичное для Haiku) | |
cc | Компиллятор Си | |
checkfs | Проверяет и исправляет файловую систему. (специфичное для Haiku) | |
checkitout | Получает исходные коды с URL репозитория. | |
chgrp | Изменяет группу владельцев файлов. | |
chmod | Изменяет разрешения для файлов. | |
chop | Разбивает файл на несколько файлов меньшего размера. | |
chown | Изменяет владельца файлов. | |
chroot | Выполняет команду с указанным корневым каталогом. | |
cksum | Выводит контрольную сумму CRC и количество байтов для указанных файлов. | |
clear | Очищает окно терминала. | |
clockconfig | Выводит параметры часов. | |
cmp | Производит побайтовое сравнение файлов. | |
collectcatkeys | [Осталась после перемещения locale-kit.] | |
comm | Производит построчное сравнение файлов. | |
compress | Программа сжатия данных | |
consoled | Консольный демон | |
copyattr | Копирует все или некоторый набор атрибутов из одного или нескольких файлов в другой или новый файл. (специфично для Haiku) | |
cp | Копирует файлы и каталоги. | |
csplit | Разбивает файл на части, разделенные gпо указанному шаблону. | |
ctags | Генерирует индексный файл для множества языковых объектов, найденных в файлах. | |
cut | Выводит колонку из каждой строки файла. | |
date | Выводит текущие дату и время. | |
dc | Пакет для арифметических вычислений. | |
dd | Копирует двоичные данные, производит конвертацию и ворматирование указанные в операндах. | |
desklink | Добавляет элемент в Deskbar. (специфичное для Haiku) | |
diskimage | Registers a file as disk device that can then be mounted. (Haiku specific) | |
df | Выводит объем использованного и свободного пространства подключенных томов. | |
diff | Сравнивает файлы построчно. | |
diff3 | Построчно сравнивает три файла. | |
dircolors | Настройка цветов для ls. | |
dirname | Получает имя_файла из строки /путь/до/имя_файла | |
draggers | Выводит/устанавливает состояние отображения репликантов. | |
driveinfo | Выводит информацию об аппаратных компонентах. | |
dstcheck | Выводит окно с сообщением о переходе с летнего / на летнее время. | |
du | Обощает использование дискового пространства каждым файлом, рекурсивно для каталогов. | |
dumpcatalog | [Осталось после перемещения locale-kit.] | |
echo | Выводит строку текста. | |
egrep | См. grep. | |
eject | Извлекает переносной носитель. | |
env | Выполняет программу в измененной среде. | |
error | Выводит текстовое описание для передаваемых номеров ошибок. | |
expand | Преобразует табуляцию в пробелы. | |
expr | Выводит значение выражения. | |
F - J | ||
factor | Выводит простые множители целых чисел. | |
false | Ничего не делает. Обозначает "неудачу" и возвращает значение "1". | |
fdinfo | Выводит информацию о задействованных файловых дескрипторах в системе. | |
ffm | Устанавливает следование фокуса за мышью. | |
fgrep | См. grep. | |
filepanel | Отображает панель загрузки/сохранения файла. (специфично для Haiku) | |
find | Выполняет поиск файлов в структуре каталогов. | |
finddir | Выполняет поиск специализированных каталогов, определенных на уровне системы. | |
fmt | Переформатирует каждый абзац файла. | |
fold | Разбивает строки файла на строки требуемой длины. | |
fortune | Выводит случайную, и, надеюсь, интересную пословицу. | |
frcode | Вызывается командой updatedb для сжатия списка имен файлов | |
freetype-config | Выводит информацию о параметрах компилляции и линковки FreeType. | |
fstrim | Send a TRIM command to an SSD drive. | |
ftp | FTP клиент | |
ftpd | FTP сервер | |
funzip | Распаковывает первый элемент архива в стандартный вывод. | |
fwcontrol | Программа управления FireWire | |
gawk | Язык построчного разбора и обработки по заданным шаблонам. | |
gdb | Отладчик GNU | |
getarch | Shows the environment's compiler version. | |
getlimits | Выводит платформозависимые ограничения в формате, удобном для использования в скриптинге. | |
grep | Поиск по шаблону. | |
groups | Выводит членство в группах для каждого имени пользователя. | |
gunzip | Тоже самое что и gzip. | |
gzexe | Упаковка/распаковка исполнимых файлов. | |
gzip | Упаковка/распаковка файлов. | |
hd | Дамп в шестнадцатеричных кодах | |
head | Выводит первые строки файла. | |
hey | Небольшой инструмент для скриптования GUI-приложений. | |
hostname | Выводит список сетевых имен системы. | |
id | Выводит информацию о пользователе и группе. | |
ident | Определяет ключевые слова RCS в файлах. | |
ifconfig | Настраивает сетевой интерфейс. | |
install | Копирует файлы в место назначения без нарушения работы системы. | |
install-wifi-firmwares.sh | Устанавливает прошивки для различного набора беспроводных сетевых карт. | |
installsound | Добавляет новое звуковое событие в панели настройки Звуки. | |
iroster | Перечисляет устройства ввода. | |
isvolume | Получает информацию о монтируемом томе. | |
join | Для каждой пары входных строк с одинаковыми общими полями выводит строку на стандартный вывод. | |
K - O | ||
kernel_debugger | Переход к отладчику ядра. | |
keymap | Загружает либо сохраняет раскладку клавиатуры. | |
kill | Посылает процессу сигнал выхода. | |
launch_roster | Controls the launch_daemon, e.g. stop and restart services. (Haiku specific) | |
less | Просматривает файл. | |
lessecho | Выводит свои аргументы и расширяет метасимволы, такие как * и? в именах файлов. | |
lesskey | Назначает клавишу для вызова less. | |
link | Создает ссылку на файл. | |
linkcatkeys | [Осталось после перемещения locale-kit.] | |
listarea | Выводит список областей памяти для всех работающих команд. | |
listattr | Выводит список атрибутов файла. (специфично для Haiku) | |
listdev | Выбодит список всех аппаратных устройств. | |
listimage | Выводит информацию об образах всех работающих команд. | |
listport | Перечисляет все открытые порты в системе, в порядке открывших команд. | |
listres | Перечисляет ресурсы, хранящиеся в файле. | |
listsem | Перечисляет семафоры, отведенные указанной команде. | |
listusb | Выводит список USB устройств. | |
ln | Создает ссылку на файл. | |
locale | Shows the set preferred language, its LC_CTYPE and the preferred formatting. | |
locate | Находит файл. | |
logger | Отправляет сообщение в системный лог. | |
login | Открывает сессию в системе. | |
logname | Выводит имя текущего пользователя. | |
ls | Перечисляет содержимое каталога. | |
lsindex | Отбражает индексированные атрибуты текущего тома/раздела. (специфично для Haiku) | |
mail2mbox | Преобразует файлы e-mail BeOS в формат Unix. | |
make | Утилита GNU make | |
makebootable | Делает указанный BFS раздел/устройство доступным для загрузки, записывая загрузочный код в первые два сектора. | |
mbox2mail | Преобразует файы Unix mailbox в файлы e-mail BeOS. | |
md5sum | Выводит или проверяет контрольные суммы MD5. | |
media_client | "media_client play" plays back audio files. | |
merge | Трехстороннее слияние файлов. | |
message | Выводит содержимое BMessage, записанное в файл. | |
mimeset | Устанавливает MIME-тип файла. | |
mkdepend | Makefile dependency generator. | |
mkdir | Создаёт папку. | |
mkdos | Инициализирует раздел FAT. | |
mkfifo | Создает именованный канал. | |
mkfs | Создает файловую систему. | |
mkindex | Создает новый индекс для атрибута. (специфично для Haiku) | |
mktemp | Безопасно создает временный файл или каталог. | |
modifiers | Выводит (не)нажатые в данный момент клавиши-модификаторы. | |
more | См. less. | |
mount | Подключает файловую систему. | |
mount_nfs | Подключает NFS раздел. | |
mountvolume | Подключает том по имени. | |
mv | Перемещает/переименовывает файл. | |
nano | The default text editor in the Terminal, a clone of 'Pico'. | |
netcat | Утилита TCP и UDP. | |
netstat | Выводит сетевые подключения, таблицы маршрутизации, статистику интерфейсов, маскированные соединения и участие в групповых передачах. | |
nl | Выводит файл с добавлением нумерации строк. | |
nohup | Выполняет команду с игнорированием сигналов потери связи. | |
nproc | Выводит число доступных процессоров. | |
od | Утилита для вывода дампа файла в разных форматах. | |
open | Запускает приложение/документ из командной строки. (специфичное для Haiku) | |
P - S | ||
package | Creates, inspects, or extracts a Haiku package. | |
package_repo | Creates or inspects a Haiku package repository file. | |
passwd | Изменяет пароль пользователя. | |
paste | Печатает строки, состоящие из соответствующих строк из каждого файла, разделенных знаками табуляции. | |
patch | Применяет diff файл на оригинал. | |
pathchk | Диагностирует неверные или непереносимые имена файлов. | |
pc | Калькулятор программиста | |
ping | Отправляет ICMP-эхо-запрос сетевому хосту. | |
pkg-config | Analyzes and configures a Haiku package. | |
pkgman | Manages packages and package repositories. | |
play | Воспроизводит трек с CD. | |
pr | Разбивает на страници или колонки файл для печати. | |
printenv | Выводит значение переменной среды. | |
printf | Форматирует и выводит данные. | |
prio | Изменяет приоритет процесса. | |
profile | Профилировщик потоков. | |
ps | Список запущенных процессов. | |
ptx | Выводит упорядоченный предметный указатель. | |
pwd | Выводит текущий каталог. | |
query | Утилита командной строки эмулирующая функционал Tracker'a "Найти по формуле". (специфично для Haiku) | |
quit | Завершает работу приложения. | |
ramdisk | Creates a ramdisk. (Haiku specific) | |
rc | Компиллятор ресурсов | |
readlink | Выводит путь до объекта символической ссылки. | |
reindex | Помещает атрибуты существующих файлов во вновь созданный индекс. (специфично для Haiku) | |
release | Освобождает семафор. | |
renice | Изменяет приоритер запущенных процессов. | |
rlog | Выводит лог-сообщения и другую информацию о файлах RCS. | |
rm | Удаляет файлы и директории. | |
rmattr | Удаляет атрибут из файла. (специфично для Haiku) | |
rmdir | Удаляет каталоги. | |
rmindex | Удаляет индекс для атрибута. (специфично для Haiku) | |
roster | Выводит информацию о запущенных командах. | |
route | Выводит список сетевых маршрутов и позволяет ими управлять. | |
safemode | Проверяет, запущена ли система в безопасном режиме. | |
screen_blanker | Запускает очистку экрана. | |
screenmode | Показывает/устанавливает режим работы экрана. | |
sdiff | Отображает или производит слияние несоответствий в файлах в виде таблицы построчного сравнения. | |
seq | Выводит последовательность чисел. | |
setarch | Sets the environment to a specific compiler version. | |
setdecor | Отображает/устанавливает декоратор. | |
settype | Устанавливает MIME-тип, сигнатуру и предпочитаемое приложение для файла. | |
setversion | Показывает версию файла. | |
setvolume | Устанавливает уровень громкости системы. | |
setwep | Provides WEP encryption for wireless networks. | |
sh | См. bash. | |
sha1sum | Отображает или проверяет контрольные суммы SHA1. | |
shar | Создает архивы Unix. | |
shred | Перезаписывает файл несколько раз. | |
shuf | Печатает случайную перестановку входных строк. | |
shutdown | Выключить компьютер. | |
sleep | Выполняет остановку на количество указанных секунд. | |
sort | Выводит ортированное слияние файлов. | |
spamdbm | Классифицирует e-mail сообщение как спам или подлиное. | |
split | Разбивает входные файлы на куски фиксированного размера. | |
stat | Отображает статут файла либо файловой системы. | |
strace | Трассирует системные выозвы потока или команды. | |
stty | Отображает/устанавливает параметры терминала. | |
su | Смена действующего пользователя и группы. | |
sum | Выводит контрольную сумму и количество блоков для каждого файла. | |
sync | Форсирует запись измененных блоков на диск, обновляет суперблок. | |
sysinfo | Выводит системную информацию. | |
T - Z | ||
tac | Выводит содержимое файлов в обратном порядке. | |
tail | Выводит последние 10 линий файла. | |
tcpdump | Выводит дамп сетевого трафика. | |
tcptester | [устаревшее] | |
tee | Пишет или добавляет данные из стандартного ввода в файл. | |
telnet | Пользовательский интерфейс для протокола telnet. | |
telnetd | Telnet-демон | |
test | Возвращает правда/ложь после сравнения элементов. | |
timeout | Запускает команду и принудительно завершает ее, если она продолжает работу после истечения указанного количества секунд. | |
top | Отображает запущенные нити и загрузку ЦП. | |
touch | Изменяет метку времени файла. | |
tput | Инициализирует терминал или запрос в базу данных terminfo. | |
tr | Переводит, сжимает и/или удаляет символы со стандартного ввода. | |
traceroute | Печатает маршрут пакетов , принятых через сеть. | |
translate | Преобразует формат файла, используя DataTranslators. | |
trash | Отправляет файлы в корзину или восстанавливает их. | |
true | Ничего не делает, обозначает "удачу" и возвращает величину "0". | |
truncate | Сжимает или расширяет размер файла. | |
tsort | Производит топологическую сортировку. | |
tty | Печатает имя файла терминала, подключенного к стандартному вводу. | |
uname | Выводит информацио о системе. | |
unchop | Воссоздает файлы, разделенные ранее с помощью chop. | |
unexpand | Преобразует пробелы в табуляцию. | |
uniq | Фильтрует соседние совпадающие строки из ввода, записывает в вывод. | |
unlink | Вызывает функцию unlink для удаления указанного файла. | |
unmount | Отключает том. | |
unrar | Распаковывает архив rar. | |
unshar | Распаковывает архив shar. | |
untrash | См. trash. | |
unzip | Распаковывает архив zip. | |
unzipsfx | Используется для преобразования существующего zip-архива в самораспаковывающийся архив. | |
updatedb | Обновляет базу данных локализации. | |
uptime | Выводит дату и время, а так же время, прошедшее с момента запуска системы. | |
urlwrapper | Обертывает URL и MIME типы для командной строки или других приложение, не поддерживающих их напрямую. | |
useradd | Создаёт нового пользователя. | |
uudecode | Раскодирует файл, закодированный uuencode. | |
uuencode | Кодирует файл в uuencode для отправки по электронной почте. | |
vdir | Выводит информацию о файлах. | |
version | Возвращает версию файла. | |
vmstat | Выводит информацию о виртуальной файловой системе. | |
waitfor | Ждет пояления некотого процесса (нити). (специфично для Haiku) | |
watch | Периодически выполяет программу. | |
wc | Выводит количество абзацев, слов и символов (байт) в файле. | |
wget | Инструмент для скачивания файлов через HTTP, HTTPS или FTP | |
which | Находит команду. | |
whoami | Выводит имя пользователя, связанного с текущим действующим ID пользователя. | |
xargs | Собирает и выполняет командные строки со стандартного ввода. | |
xres | Перечисляет и управляет ресурсами. | |
yes | Многократно выводит строку, пока не будет принудительно завершена. | |
zcat | Тоже самое что и gzip. | |
zcmp | См. zdiff. | |
zdiff | Сравнивает сжатые файлы. | |
zforce | Форсирует '.gz' расширение для файлов gzip. | |
zgrep | Поиск в сжатых файлах с использованием регулярных выражений. | |
zip | Добавляет или заменяет элементы в zip-архиве. | |
zipcloak | Шифрует все незашифрованные элементы в zip-архиве. | |
zipgrep | Ищет в zip-файлах строку или шаблон. | |
zipinfo | См. unzip. | |
zipnote | Выводит комментарий к zip-файлу. | |
zipsplit | Разделяет zip-архив на несколько мелких кусков. | |
zmore | Как и more только оперирует несжатым содержимым в любом сжатом файле. | |
znew | Перепаковывает файлы .Z в формат архивов .gz (gzip). |
www.haiku-os.org
Внутренний язык программирования 1С 8.3 для начинающих программистов: условная команда в 1С
Внимание! Перед вами ознакомительная версия урока, материалы которого могут быть неполными.
Войдите на сайт как ученик
Войдите как ученик, чтобы получить доступ к материалам школы
Внутренний язык программирования 1С 8.3 для начинающих программистов: условная команда в 1С
Автор уроков и преподаватель школы: Владимир Милькин
На прошлом занятии мы познакомились со сложными логическими выражениями, которые образуются из простых при помощи логических операций И, Или, Не.
В этом уроке мы разберемся зачем эти логические выражения вообще нужны и научимся применять их на практике.
А понадобятся они нам при изучении новой команды языка программирования 1С, которая называется Условная команда.
Условная команда
Если коротко, то правила и суть этой команды можно представить так:
Более подробно:
- Частью условной команды являются следующие три слова: Если, Тогда и КонецЕсли.
- Между словами Если и Тогда всегда находится некоторое логическое выражение, которое принимает значение Истина или Ложь (логические выражения уже должны быть вам понятны по предыдущим урокам, если это не так - изучите их повторно).
- Между словами Тогда и КонецЕсли может находиться любое количество команд компьютеру (например Сообщить, ВвестиЧисло, ОткрытьЗначение и другие).
- И, наконец, самое главное: команды компьютеру, заключенные между словами Тогда и КонецЕсли выполняются только в том случае, если логическое выражение, заключенное между Если и Тогда принимает значение Истина.
И если раньше: сколько мы написали команд - столько и выполнилось, то, с появлением условной команды, это оказывается не так. Теперь мы можем составлять условия для выполнения тех или иных команд компьютеру. Проявите терпение, скоро всё прояснится. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Приведу примеры использования условной команды с подробным объяснением.
Пример №1.
ЧислоОтПользователя = 0; ВвестиЧисло(ЧислоОтПользователя); Если (ЧислоОтПользователя < 0) Тогда ОткрытьЗначение("Вы ввели отрицательное число."); КонецЕсли; |
Что делает этот код?
- Попытайтесь разобраться сами.
- Затем вставьте его в свою программу и попробуйте выполнить, вводя то положительные, то отрицательные числа.
- И, наконец, загляните в объяснение, чтобы узнать - верно ли вы догадались.
Объяснение
Первые две строчки вам должны быть знакомы по прошлым занятиям.Дальше следует условная команда, условием которой является логическое выражение (ЧислоОтПользователя < 0). Если число, введенное пользователем, действительно меньше нуля, то это выражение принимает значение Истина, иначе Ложь.
Идем дальше. Между словами Тогда и КонецЕсли находится всего одна команда ОткрытьЗначение, которая, как следует из правила для условной команды, выполнится только в том случае, если логическое выражение окажется верным.
А значит, сообщение для пользователя "Вы ввели отрицательное число" выведется только, если значение, введенное пользователем, окажется отрицательным. Иначе ничего не выведется. Что и требуется логикой программы.
Пример №2.
ИмяПользователя = ""; ВвестиСтроку(ИмяПользователя); Если (ИмяПользователя = "Александр") Тогда ОткрытьЗначение("Вас зовут Александр!"); КонецЕсли; |
В этом примере мы вводим имя пользователя и, если оно равно "Александр", то выводим сообщение "Вас зовут Александр!".
Пример №3.
ИмяПользователя = ""; ВвестиСтроку(ИмяПользователя); Если (ИмяПользователя <> "Александр") Тогда ОткрытьЗначение("Ваше имя точно не Александр!"); ОткрытьЗначение("На самом деле, вас зовут " + ИмяПользователя); КонецЕсли; |
В этом примере мы вводим имя пользователя и, если оно не равно "Александр", то выводим сообщение "Ваше имя точно не Александр!" и следом выводим настоящее имя пользователя.
Не правда ли здорово!? Вот так потихоньку мы научили компьютер не просто складывать и умножать. Мы дали возможность ему "думать" и принимать решения. Это, конечно, ещё не искусственный интеллект, но всё же
Продолжим разбирать примеры. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Не забывайте выполнять их на компьютере.
Пример №4.
ЧислоОтПользователя = 0; ВвестиЧисло(ЧислоОтПользователя); Если (ЧислоОтПользователя > 0) И (ЧислоОтПользователя < 10) Тогда ОткрытьЗначение("Вы ввели число между 0 и 10."); КонецЕсли; |
Отличие этого примера лишь в том, что тут используется сложное логическое выражение, составленное при помощи логической команды И.
Таким образом, сообщение "Вы ввели число между 0 и 10." будет выведено пользователю тогда и только тогда, когда введенное число одновременно и больше нуля и меньше десяти.
Расширенная форма условной команды
Разберём расширенную форму условной команды на примере.
Пример №5.
ЧислоОтПользователя = 0; ВвестиЧисло(ЧислоОтПользователя); Если (ЧислоОтПользователя >= 0) Тогда ОткрытьЗначение("Вы ввели положительное число."); Иначе ОткрытьЗначение("Вы ввели отрицательное число."); КонецЕсли; |
Пользователь вводит число. И в случае, если введенное значение больше или равно нулю, программа выводит строку "Вы ввели положительное число", иначе "Вы ввели отрицательное число".
Запустите этот пример на компьютере несколько раз. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Вводите то положительные, то отрицательные значения. Как видите, компьютер прекрасно справляется с задачей определения знака введенного числа. И всё это благодаря использованию нами логических выражений!
А теперь пройдите тест по примеру №5, описанному выше:
Задание №18. Напишите программу, которая вводит от пользователя два числа. Если первое число больше или равно второму, то выводит "Первое число больше или равно второму", иначе "Второе число больше первого".
helpme1c.ru
Команда (программирование) - Википедия
Материал из Википедии — свободной энциклопедии
У этого термина существуют и другие значения, см. Команда.Кома́нда — это указание компьютерной программе действовать как некий интерпретатор для решения задачи. В более общем случае, команда — это указание некоему интерфейсу командной строки, такому как shell.
В частности, термин команда используется в языках императивного программирования. Эти языки так названы, потому что их операторы, как правило, пишутся наподобие глаголам в повелительном наклонении, используемому во многих естественных языках. Если посмотреть на оператор императивного языка как на предложение естественного языка, то команда, в общем, подобна глаголу.
Многие программы допускают использование специально отформатированных аргументов, известных как ключи, которые изменяют стандартное поведение команды, в то время как дополнительные аргументы описывают действия команды. Сравним с естественным языком: ключам соответствуют наречия, в то время как иным аргументам — дополнения.
Примеры[ | ]
Ниже приводятся несколько команд для интерпретатора командной строки операционной системы UNIX (UNIX shell).
Команда cd изменяет расположение пользователя в дереве каталогов с текущего на каталог /home/pete. Команда echo выводит текст hello в поток стандартного вывода, который, в этом случае, напечатает этот текст на экране. Кавычки (заметьте: не такие, какие приняты в Википедии) необходимы для вывода нескольких слов, разделённых пробелами, однако всё зависит от конкретной реализации команды: возможен вывод нескольких слов даже без кавычек; возможно восприятие кавычек в качестве аргумента команды, то есть вывод текста вместе с ними. Команда ls выводит список всех файлов каталога /bin в полном виде (ключ -l), отсортированных по времени (ключ -t) в обратном порядке (ключ -r). Команда chmod используется для предоставления доступа на чтение, запись или выполнение к файлу с именем filename. В символьной записи первая цифра указывает на права пользователя, в то время как остальные две цифры используются для указания прав групп пользователей на чтение, запись или выполнение Вашего файла. 1 — доступ к Вашему файлу на выполнение, 2 — доступ к Вашему файлу на запись, 4 — доступ к Вашему файлу на чтение. 4+1=5 означает, что к Вашему файлу имеется только доступ на чтение и выполнение, 4+2+1=7 означает, что к Вашему файлу имеется доступ на чтение, на запись и на выполнение.См. также[ | ]
encyclopaedia.bid
Урок 1. Программирование. Общее представление
Программа, язык программирования, программист
Для чего необходим компьютер? Ответить на этот вопрос можно по разному. Если попытаться сделать это как можно короче, то получится, что компьютер предназначен для хранения и обработки информации. В свою очередь, под информацией можно понимать почти всё, что угодно. Информацией могут быть символы, буквы, коды, слова, рисунки, звуки, видео...
С хранением информации должно быть все боле менее понятно: у компьютера есть память разного рода, куда записывается в определенном виде информация и в дальнейшем хранится там. А вот что касается ее обработки... Как же компьютер принимает решения о том, что делать с информацией? Никак и не принимает! Он ведь робот, послушная машина, он делает только то, что «скажет» (запишет в компьютерную память) человек.
Именно человек управляет поведением машин, которые лишь послушные, четкие, быстрые исполнители наших пожеланий. В быстроте, отсутствии усталости (в нашем понимании), почти безошибочности выполнения команд заключается преимущество вычислительных машин. Однако самым важным преимуществом является то, что команды человека можно записать в компьютерную память и оставить их выполнение на "потом"; кроме того, выполнять неограниченное количество раз. Итак, компьютеры не умнее людей; у машин нет желаний, творческого подхода, они самостоятельно не могут планировать свою деятельность. Чтобы компьютер что-то сделал, ему нужно руководство человека.
Как человек руководит компьютером или роботом? Составляет так называемые программы на понятном компьютеру языке (языке программирования) и закладывает их в его память. Затем, когда человеку потребуется, он командует компьютеру выполнить ту или иную программу.
Программа представляет собой набор команд, которые машина должна выполнить в определенной последовательности. При этом подразумевается, что будет достигнута та или иная цель, которую планировал человек.
Запустить программу на выполнение может любой человек. Для этого обычно бывает достаточно нажать какую-нибудь специальную кнопку или открыть определенный файл. Знаний при этом может быть минимум. Достаточно того, чтобы человек просто знал, что программа делает и как с ней работать. Такой гражданин называется пользователем. А вот чтобы написать программу (последовательность команд) на понятном компьютеру языке, нужно специальное образование, в результате которого получается так называемый программист. Именно профессиональные программисты умеют писать программы для вычислительных машин. Эти программы решают очень много разных задач. Обычному пользователю достаточно лишь знать, какая программа решает какую задачу. Ему вовсе не обязательно знать, как программа руководит компьютером, чтобы выполнить задачу, т.к. это знание - обязанность программиста.
Среда KTurtle и язык программирования Logo (Лого)
Мы с вами как начинающие программисты будем учиться составлять программы. Но поскольку мы только начинающие программисты, то и делать это будем немного "по игрушечному". Нашим исполнителем будет не настоящий компьютер (или робот), а маленькая черепашка. Это робот-черепашка, он послушный и всегда готовый к работе. От нас же требуется познакомиться с тем, как им можно командовать. Этому и будут посвящены уроки.
Сначала стоит познакомиться со средой обитания робота-черепахи. Средой является приложение (большая программа, которую написал взрослый программист) под названием KTurtle. Если вы еще не знаете, то "turtle" с английского переводится как "черепаха". Буква K впереди обозначает то, что это приложение предназначено для рабочего стола KDE для Linux.
Среда — это еще не язык программирования. Среда всего лишь создает удобное место для работы программиста и наблюдения за поведением программы. Язык программирования — это более важный компонент. Именно на нем мы "говорим" с компьютером; в нашем случае мы говорим с роботом-черепахой. Языком программирования поведения черепахи является язык Logo (или Лого - по-русски). Этот язык специально был придуман для обучения детей программированию. Команды на языке Logo могут быть как английскими, так и русскоязычными (а также французскими и др.).
Вот так выглядит приложение KTurtle сразу после запуска:
Почти всё, что умеет делать зеленая черепашка, - это бегать по холсту и рисовать на нём разным цветом, а также считать и писать. Вот такой вот нам достался незатейливый робот-исполнитель. С другой стороны, нам пока научиться управлять хотя бы им, а дальше уж дело пойдёт.
Команды на языке программирования Logo пишут в специально предназначенном для этого поле (редакторе кода). Передают их на выполнение черепахе с помощью специальной кнопки Выполнить, расположенной на панели инструментов.
После этого черепашка будет выполнять команды, написанной нами программы, а мы на холсте будем видеть результаты этого выполнения.
Вопросы и задания
- Что вы узнали из данного урока? Подготовьте пересказ на тему «Кто такие программисты и зачем они нужны».
- Может ли один и тот же человек выступать в роли и программиста и пользователя? Приведите примеры.
- Запустите приложение KTurtle. Расскажите, как вы будете работать в нем.
- Протестируйте работу приложения KTurtle. Для этого напишите в редакторе кода приведенные ниже две команды и передайте их черепахе на выполнение. Что произошло? Попытайтесь объяснить.
Дополнительная информация: Алгоритм и его свойства.
younglinux.info
Психология программирования в команде / Хабр
Когда над одним и тем же проектом (кодом) работает несколько людей, процесс разработки ПО начинает значительно отличаться. С этим фактом нельзя не согласиться. Вступает в действие целый ряд дополнительных факторов. Общим результатом является понижение скорости разработки, а иногда может понизиться и качество разрабатываемого ПО.Как же быть тогда? Ведь есть проекты, которые в одиночку написать невозможно. В этой статье я попытаюсь показать один психологический аспект работы в команде программистов. Я вас вооружу некоторыми теоретическими знаниями, благодаря которым вы сможете повысить эффективность программистов и их общий эмоциональный фон.
С чем же связано снижение эффективности и качества ПО?
Факторы снижения эффективности программистов можно поделить на объективные и субъективные.Как я понимаю эти 2 терминаОбъективные — это нечто, что не зависит от точки восприятия… Своего рода константы, которые не меняют своего значения, под каким углом ты на них не смотри. А вот субъективные факторы — это те, которые зависят от точки восприятия.
Субъективные факторы влияния на эффективность
Отбрасывая банальную межличностную неприязнь, предположим, что в нашей ситуации мы имеем коллектив из нескольких программистов с достаточным уровнем эмоционального взаимопонимания и уважения. Тем не менее, даже в таком коллективе могут быть проблемы.Дело в том, что программист развивает чувство собственности к коду. Ведь код — это нечто, что он создал, и это нечто осязаемое (его видно на экране монитора). Программист может воспринимать код, как предмет (это я написал этот код) и как пространство (когда у меня в редакторе открыт этот код, я чувствую себя уютно). Таким образом код может быть «моим», «не моим» точно так же, как и стул или как комната. Это мой стул, и я на нем сижу (я написал этот код). Это стул Васи, и Вася им пользуется, и мне на нем сидеть эмоционально неудобно (Вася написал этот код).
Я хочу подчеркнуть, что мы сейчас говорим о субъективной самоидентификации программиста с кодом, который он видит на своем экране.
Программист, работая, может ощущать что этот код «его» или «не его». Эта самоидентификация с кодом довольно важна. Если человек считает, что код «его», то он:
- не будет ощущать отторжения (нечто вроде «свое говнецо не так сильно воняет»)
- общее эмоциональное ощущение программиста будет приподнято. Он будет ощущать себя в зоне комфорта и «у себя дома» (подумайте как он себя будет ощущать, работая с «чужим» кодом… 8 часов в день… несколько месяцев подряд)
- у него возникнет чувство хозяина и владельца (еще примитивнее: чувство вожака, все-таки в основном программисты — мужчины). Эти чувства провоцируют мужчину к проявлению инициативы, ответственности и проактивной позиции по отношению к объекту собственности (к коду, в нашем случае)
- в «моем» коде не страшно делать рефакторинг. Нечто вроде «это моя собственность, и я делаю с ней все, что хочу»
- дорабатывая «свой» код, программист сделает ровно столько изменений в коде, сколько нужно для внесения необходимых корректировок и поддержания архитектуры кода. А вот если код был бы «чужим», то программист скорее всего постарался бы внести минимум необходимых изменений. Добавляя функционал, но не поддерживая архитектуру, он скорее всего «прилепил» бы новый функционал сбоку к уже существующему.
- людям свойственно осторожничать в чужом/новом месте: если от программиста потребуется внести существенные изменения в «чужой» код, то он потратит много времени на ознакомление с кодом (попытается сделать этот код «своим») и банально будет ощущать себя более скованным в эмоциональном плане, внося нужные изменения. В худшем случае он просто «прилепит» свой код к уже существующему (см. предыдущий пункт)
- правя «чужой» код, мы эмоционально затрагиваем его владельца. Сознательно или подсознательно, но программисты признают право собственности других программистов на участки кода точно так же, как в семье за обеденным столом негласно признается место за каждым членом семьи. Сознательно садясь на «чужой» стул за столом, вы ощущаете дискомфорт из-за оказанного эмоционального влияния на «владельца» стула.
Объективные факторы
Есть еще и объективная составляющая: может быть так, что программист знает этот код, или не знает этот код. Под «знать код» я подразумеваю помнить названия функций и что они делают. Не трудно заметить, что эти знания действительно объективны — они либо есть, либо нет, и не важно как себя ощущает наш бедный подопытный программист. Для того, чтобы внести правильные изменения в код, человек должен объективно знать его.Конкретика и постановка задачи
Что же имеем? Теоретическое идеальное состояние для проекта было бы: все программисты объективно знают весь код и все программисты считают весь код «своим». Но скажите мне, пожалуйста, может у одной зубной щетки быть 2 хозяина? К сожалению, нет. Любой программист «трогая», внося изменения в код, делает этот код более «чужим» в глазах автора кода («текущего» владельца).Цель: каждый программист должен работать (максимум возможного времени) с кодом, который он знает, и который он считает «своим». Вот такого результата уже возможно добиться.Решение задачи
В процессе разработки ПО объективные знания о проекте и субъективные самоидентификации программистов к коду будут меняться. Нашей задачей будет влиять на распределение знаний и чувств собственности с тем, чтобы поддерживать поставленную в прошлом абзаце цель. Чем больше программист знает о проекте или чем больше кода он считает «своим» — тем лучше. Кашу маслом не испортишь. Понижать эти вещи нам не за чем, а вот повышать всегда полезно. Другое дело, что повышение этих факторов отнимает время у наших программистов. И тут уже встает вопрос рационализации: программисты могут тратить 2 ч в день на знакомство со своим проектом и 2 ч в день на повышение чувства собственности… Но ведь тогда у них будет лишь 4 ч в день на продуктивную работу :(. Прежде чем мы перейдем к вопросам рационализации, давайте рассмотрим рычаги влияния. Для повышения объективных знаний о коде подходят:- самый проверенный способ — быть автором кода :)
- любая письменная документация о коде
- устные и письменные коммуникации между программистами
- опять же, способ №1 — быть автором кода
- объективные знания о коде. Все-таки проще признать за «свое» ту вещь, в работе которой ты хотя бы разбираешься
- code reviews — когда автор кода показывает код и советуется с другим программистом, этот другой программист оказывает влияние на код (возможно даже некоторые его советы попадут в код). Своеобразно, автор «знакомит» второго программиста с кодом и возникает некоторого рода собственность «наше».
- придерживание стандартов оформления кода повышает чувство собственности «мое» среди всех членов команды, но тут есть свои оговорки (о них ниже)
Отдельный абзац о стандартах оформления кода (еще один способ повышения чувства собственности, просто слишком длинный)
Стандарты оформления кода (какие бы они не были) в основном преследуют цель унификации внешнего вида кода. Так они облегчают чтение кода, и так же они способствуют повышению самоидентификации программиста с этим кодом, даже если он его первый раз видит. Как думает программистО! Написано так, как будто я писал илиО! Смотри, а он тоже жигулевское пиво любит, и диван у него такой же мягкий как у меня дома! Мне здесь уютно! Но не тут-то было. Код может быть оформлен идентично, но вот логика, которой следует код, будет отличаться от той, которую использовал бы наш подопытный программист (наш программист тут бы использовал while цикл, а в коде написан foreach). Эти разницы между логикой кода и логикой того, кто читает этот код, и приводят к тому, что чувство собственности в итоге не создается. Вот поэтому требования к оформлению кода не дают полного ожидаемого результата с одной стороны, с другой стороны они в определенной мере сковывают свободу программистов и добавляют еще один слой бюрократии.Одним из решений было бы заставить всех программистов думать одной и той же логикой, насаждать одну и единственно правильную логику (или детализировать требования к оформлению кода вплоть до того, когда использовать while, а когда использовать foreach). Но ведь это утопия. К тому же, все люди разные, и зачем «клонировать» 10 программистов под копирку. Лучше культивировать взаимопонимание среди программистов и помогать им знакомиться с логикой своих коллег-программистов. В частности, code reviews, могут весьма хорошо заставить программистов узнать логику друг друга. Волшебство code review в том, что программисту Васе достается в руки код, написанный программистом Петей, но Вася не должен ничего в нем править. Он лишь изучает труд Пети и после этого рассказывает Пете свои мысли (Вася предлагает Пете что-то изменить в обеденном стуле Пети, но сам стул не трогает). Пока Вася и Петя общаются, они успевают понять как и что обоим из них нравится. Таким образом в будущем Вася, видя код Пети, уже будет ощущать себя намного уютнее, зная логику Пети.
Вопросы рационализации
Как же найти баланс между тем, чтобы программисты продолжали развитие проекта, но в тоже время всегда работали над кодом, который они чувствуют «своим»? Ответ на такой вопрос будет очень сильно зависеть от контекста. Я вам лишь покажу 2 самых радикальных метода, и вряд ли эти 2 крайности когда-либо будут уместны для использования в живой ситуации, скорее вам нужно будет найти баланс между этими 2 противоположностями.Способ №1. Разделение ответственности и «личные комнатушки»
Если специфика вашего проекта позволяет:- четко разбить проект на несколько подзадач, практически невзаимосвязанных друг с другом
- иметь незаменимых программистов (если программист уйдет, то проект разрушится или очень сильно пострадает),
- у вас будут незаменяемые программисты (если хозяин норки уйдет, то сопровождать эту норку кому-то другому будет трудно)
- если все, кроме одной «норки», будут готовы, то уже завершившие работу программисты не смогут толком помочь программисту, который отстал от графика, т.к. не знают специфики «норки» и скорее лишь будут раздражать программиста
- можно обойтись без документации внутри-норковых процессов. Т.к. одну норку поддерживает один программист, то он все это может удержать у себя в голове
- программисты практически не тратят время на коммуникацию
Способ №2. Форум
Форум — площадь для массового общения. Так же и ваше ПО можно превратить в площадь для массового общения, когда все будут знать все части проекта и будут очень плотно взаимодействовать друг с другом. Плюсы и минусы этого метода — это, практически, инверсия плюсов метода «личных норок».Заключение
Помимо правильного распределения программистов и коммуникации между ними, так же еще важно брать во внимание способ менеджмента и развития проекта. Ожидается ли часто менять вектор развития и часто менять текущие задачи проекта? Зрелый ли это проект? Берите во внимание особенности ваших программистов, может быть среди них есть гений, но он просто-напросто под громадным количеством бюрократии не может разогнаться и взлететь ввысь? Насколько вы уверенны в ответственности ваших программистов и в том, что они не уйдут от вас на полпути? Думайте и решайте.habr.com