Разница между разработчиком и программистом. Отличие системного администратора от программиста 2 в чем отличие программиста и пользователя

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

Итак, программисты, в отличие от обычных людей:

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

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

2. Работая, 25% времени ломают голову над тем, как вычислить, что может «поломать» пользователь в создаваемом приложении. «Относительно легко написать правила того, что должна делать программа, если все работает как надо. Намного труднее написать правила для того, что должна делать программа, если что-то идет не так», — пишет Ким Моузер. При этом, многие пользователи считают, что программы должны вести себя как их более умные и знающие знакомые.

3. Знают, что на самом деле даже в самом важном софте, который пользователи используют каждый день, содержится ужасающее количество «костылей», которые каким-то чудесным образом собираются в рабочее целое. «Все равно, что разобрать «Боинг» и обнаружить, что тормоза примотаны скотчем», — пишет один из участников обсуждения, Бен Черри. Программисты знают, что ужасающее количество медицинской, финансовой и личной информации хранится при ничтожном уровне безопасности системы.

5. Знают: если бы у человека было, к примеру, по шесть пальцев на руках, основной системой счисления в мире стала бы 12-ричная, а не 10-ричная, как сейчас.

6. Могут назвать без калькулятора намного больше степеней двойки, чем обычный человек. Сокращение «k» в выражениях типа 100k понимают не как «х1000», а как «х1024». Но если большинство обычных людей считает, что программирование в основном связано с математикой, программисты знают, что здесь на первом месте — логика.

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

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


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

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

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

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

Одно небольшое замечание.

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

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

  • Любой пользователь предпочитает работать с одним и тем же специалистом, который в курсе всех проблем, периодически возникающих в процессе эксплуатации. Поэтому по возможности избегайте ситуаций, когда с вашим клиентом работает другой специалист.
  • Не будьте слишком навязчивы со своими советами, особенно если Вас об этом не просят. И не настаивайте на своей точке зрения - достаточно просто высказать свое мнение. Пусть окончательное решение останется за пользователем.
  • Стремитесь повышать уровень своих знаний не только в программировании, но и в профессиональной области вашего клиента - это позволит вам общаться на одном языке. Пользователи часто задают вопросы, связаные со спецификой своей профессиональной деятельности.
  • Пользователь хочет чтобы система работала постоянно и без сбоев. Его мало волнуют объяснения причин выхода из строя его системы. Если все-таки что-то случилось (что всегда является частью рабочего процесса), пользователь должен знать кто в этом виноват и когда система будет налажена.
  • Хотя пользователь всегда заранее знает об изменениях в структуре отдела, законодательных изменениях, не дожидайтесь от него вопроса о сроках обновления системы. Всегда держите пользователя в курсе такой информации.

ПЛИС (FPGA) расшифровывается как "Field Programmable Gate Array" и представляет собой огромный массив вентилей, которые могут быть запрограммированы и перестроены в любое время и в любом месте. Многие пользователи до сих пор не понимают, что такое ПЛИС. «Огромный набор ворот» — упрощенное описание модели. Некоторые FPGA имеют встроенные жесткие блоки: контроллеры памяти, высокоскоростные коммуникационные интерфейсы и конечные точки PCIe. Внутри FPGA много вентилей, которые можно свободно соединить вместе. Принцип работы более или менее похож на подключение отдельных микросхем логических элементов. FPGA выпускаются ведущими компаниями мира Xilinx, Altera, и Microsemi.

История развития FPGA

Индустрия ПЛИС выросла из программируемой постоянной памяти PROM и логических устройств PLD. В 1970 г. Philips изобрел программируемую в полевых условиях матрицу. В конструкции такой ПЛИС, что состояла из двух планов, достигалась специфическая реализация логических схем: программируемая проводная "И" либо "ИЛИ". Это давало ей возможность реализации функции в виде Sum of Products.

Altera была создана в 1983 году, а уже в 1984 году выпустила первое в отрасли перепрограммируемое логическое устройство — EP300 с кварцевым окном в упаковке, что позволило использовать ультрафиолетовую лампу на матрице для удаления EPROM метки.

Чтобы преодолеть трудности стоимости и скорости, была разработана программируемая логика массива, в которую входил только один программируемый «И», вводимый в фиксированные «ИЛИ» ворота. PAL и PLA вместе с другими вариантами группируются как простые программируемые логические устройства SPLD. Такие ПЛИС, что интегрированы в один чип с предоставленными межсоединениями для программного соединения блоков, использовались для удовлетворения растущих технологических требований. Они названы комплексными PLD и разработаны Altera.

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

Идея разработки первой коммерчески жизнеспособной ПЛИС принадлежит соучредителям Xilinx Россу Фримену и Бернарду Вондершмитту. XC2064 был изобретен в 1985 году и состоял из 64 настраиваемых логических блоков с 3-мя справочными таблицами. Он дает современное понимание, что такое ПЛИС. Это было в конце 1980 года, когда предложенный Стивом Кассельман эксперимент по созданию компьютера с 6000000 перепрограммированных ворот нашел спонсоров в отделе надводных боевых действий ВМС США, а затем получил патент в 1992 году.

К концу 1990 года появилась большая конкуренция в производстве ПЛИС, тогда доля рынка Xilinx начала снижаться. Такие игроки, как Actel, Altera, Lattice, QuickLogic, Cypress, Lucent и SiliconBlue, заняли свою нишу на мировом рынке FPGA наряду с Xilinx. В 1997 году Адриану Томпсону удалось объединить программирование ПЛИСов и технологию генетического алгоритма с FPGA, начав новую эпоху Evolvable.

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

Принципы программирования

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

Время, затраченное на создание качественного проектного документа, сэкономит его в будущем на рефакторинге, отладке и исправлении ошибок. Реализация решения с помощью программирования ПЛИС включает в себя создание проекта с использованием одного из методов введения проекта. Среди них схемы или код HDL, например, Verilog или VHDL. FPGA могут запрограммировать выходной файл на физическое устройство FPGA с использованием инструментов программирования ПЛИС Altera. Введение дизайна с применением схем больше не используется в промышленности. Синтез и программирования почти полностью позаботились об инструментах вендора, таких как инструменты конфигурации ISE и Vivado и Numato Lab.

RTL обозначает уровень передачи регистра. Разработчик также может столкнуться с терминами Register Transfer Logic или Register Transfer Language, все они означают одно и то же в контексте проектирования оборудования. RTL — это абстракция более высокого уровня для цифрового аппаратного дизайна, которая находится где-то между строго поведенческим моделированием на одном конце и чисто структурным на уровне шлюза — на другом.

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

RTL также называют дизайном «потока данных». Как только проект RTL готов, его легче превратить в реальный код HDL, используя такие языки, как Verilog, VHDL, SystemVerilog или любой другой язык описания оборудования.

ПЛИС — это гораздо больше, чем просто множество ворот. Хотя можно строить логические схемы любой сложности, организуя и соединяя логические элементы. Это способ выразить логику в простом формате, который в конечном итоге можно превратить в массив элементов. Два популярных метода сделать это: введение схемы и языка описания оборудования HDL. До того, как он стал широко используемым, инженеры проектировали все с помощью схем. Они были очень простыми для небольших проектов, но болезненно неуправляемыми — для крупных. Стоит только представить себе, как инженеры Intel рисуют схемы для Pentium, у которого миллионы шлюзов! Это неприемлемо сложно.

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

ПЛИС можно считать строительными блоками, которые позволяют осуществить нужную настройку оборудования. Это особая форма PLD с более высокой плотностью и расширенными возможностями функционала за более короткий промежуток времени с использованием CAD. ПЛИС доступны в различных вариантах на основе используемой технологии программирования.

Они могут быть запрограммированы с использованием:

  1. Antifuse Technology.
  2. Программирование на основе технологии Flash как устройства от Actel.
  3. FPGA может быть перепрограммирован несколько тысяч раз, что занимает несколько минут в самом поле для перепрограммирования и имеет энергонезависимую память.

ПЛИС на основе технологии SRAM, которая предлагает неограниченное перепрограммирование и очень быструю реконфигурацию или частичную реконфигурацию во время самой работы с небольшим количеством дополнительных схем. Большинство таких компаний, как Altera, Actel, Atmel и Xilinx, производят эти устройства.

Конфигурируемые логические блоки

Независимо от различных производителей и несколько разных архитектур и наборов функций, большинство FPGA имеет общий подход. Основными компонентными блоками любой FPGA являются гибкий программируемый «логический блок» (CLB), окруженный программируемыми «блоками ввода / вывода» с иерархией каналов маршрутизации, соединяющих различные блоки на плате.

Кроме того, они могут состоять из DLL-библиотек для распределения и управления часами и памяти RAM выделенного блока с основным строительным блоком логической ячейкой. Последняя состоит из генератора входных функций, логики переноса и элементов хранения. Генераторы реализуются в виде справочных таблиц и зависят от введения. Например, Xilinx Spartan II имеет 4 входных LUT с обеспечением каждого 16X1 битным синхронным ОЗУ с использованием мультиплексоров как регистров сдвига для захвата данных в пакетном режиме. Элементы хранения являются чувствительными к краям триггеров или к уровню задвижек.

  1. Арифметическая логика включает в себя вентиль XOR для работы с полным сумматором и выделением логических линий переноски.
  2. Блок ввода / вывода и матрица маршрутизации. Этот блок имеет входы и выходы, поддерживающих широкий спектр стандартов и интерфейсов сигнализации.

Базовый блок ввода / вывода показан ниже.

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

Матрица маршрутизации

На любой сборочной линии медленный сегмент определяет общую производительность. Алгоритмы маршрутизации используются для разработки наиболее эффективных путей обеспечения оптимальной производительности. Маршрутизация осуществляется на разных уровнях, таких, как локальный, маршрутизация общего назначения между различными CLB, маршрутизация ввода-вывода между блоками и CLB, выделенная маршрутизация для определенных сигнальных классов с целью максимизации производительности и Global Routing для распределения тактовых и других сигналов с очень большим разветвлением. Семейства FPGA также имеют большие блочные структуры RAM для дополнения распределенных LUT RAM, размер которых варьируется для различных устройств FPGA.

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

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

Качество и проблемы ворот

Безопасность системы всегда была главной проблемой, так как код должен раскрываться каждый раз, когда загружался в ПЛИС. Такая гибкость делает FPGA потенциальной угрозой вредоносных модификаций при изготовлении, поэтому шифровании битовых потоков вовремя пришло ему на помощь.

Часто неопытные дизайнеры и пользователи сталкиваются с дилеммой, насколько мощная ПЛИС подходит для их разработок. Производители часто указывают метрики, например, «количество ворот». Например, программирование ПЛИС Xilinx использует 3 метрики для измерения объема FPGA, максимальных логических элементов, максимальных битов памяти и типового диапазона шлюзов. Пока они являются согласованными, миграция между моделями несколько упрощается, но она редко предлагает точное сравнение у различных поставщиков через разнообразие в архитектурах и из-за различий в производительности.

Наилучшим показателем является сравнение типа и количества предоставленных логических ресурсов. В дополнение к этому, разработчик должен полностью осознать, что именно нужно от устройства, поскольку производители могут похвастаться возможностями, которые будут иметь наименьшее значение для работы. Например, Stratix II EP2S180 от Altera имеет около 1,86,576 LUT с 4 входами, а Xilinx Virtex-4 XC4VLX200 содержит соответственно 1,78,176. Однако, если для проектирования нужна только 177 тыс. LUT, это будет достаточно.

Если ОЗУ - это желательная метрика для дизайнера, то ни 6 Мбит Xilinx XC4VLX200, ни 9 Мбит Altera EP2S180 не будут предпочтительнее по сравнению с менее рекламируемой, более старой моделью XC4VFX140 с 9,9 Мбит.

Языки программирования и ПО

Программирование ПЛИС Altera для начинающих стартует с выбора языка. Опция C, C ++ или System C позволяет использовать возможности крупнейших устройств и, в то же время, достижения сходства реалистической графики разработки. Возможность использования на базе C для проектирования FPGA обеспечивается HLS (синтез высокого уровня), который уже много лет находится на грани прорыва с таким инструментом, как Handle-C. В последнее время это стало реальностью благодаря тому, что крупные поставщики Altera и Xilinx предлагают HLS в своих наборах инструментов Spectra-Q и Vivado HLx соответственно.

Доступен ряд других реализаций программирования ПЛИС Altera для начинающих на основе C, таких как OpenCL, который предназначен для разработчиков программного обеспечения, желающих повышения производительности с помощью FPGA без глубокой понимание дизайна FPGA.

Как и в случае с HDL, HLS имеет ограничения при использовании подходов программирования ПЛИС на C также, как и с традиционными HDL, разработчикам приходится работать с подмножеством языка. Например, сложно синтезировать и реализовать системные вызовы, так как нужно убедиться, что все ограничено и имеет фиксированный размер. В HLS приятно то, что можно разрабатывать свои алгоритмы с плавающей запятой и имеется инструмент HLS преобразования плавающей запятой в фиксированную.

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

Этапы проектирования

Обучение программированию ПЛИС можно проводить онлайн, поскольку платформа хорошо представлена в интернете. При настройке ПЛИС первым шагом является проектирование схемы, для которой необходимо знание цифровой электроники. В отличие от программирования, гораздо сложнее начать нарезку кода, если архитектура программы не ясна. Как только станет ясно, что нужно реализовать, приступают к описанию схемы, используя один из языков: Verilog или VHDL.

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

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

Аппаратные средства и наладка

Intel Quartus Prime Software Suite Lite Edition — программное обеспечение для проектирования ПЛИС. Оно идеально подходит для начинающих, так как его можно скачать бесплатно, а файл лицензии не требуется. Можно загрузить программное обеспечение на сайте производителя. Файлы имеют большой размер (несколько гигабайт), их загрузка и установка может занять много времени. Чтобы минимизировать время и необходимое дисковое пространство, рекомендуется загружать только те элементы, которые необходимы для пользовательских задач. При запросе, файлах для загрузки, снимают флажок «Select All» и выбирают только Quartus Prime и поддержку Cyclone V устройства.

Алгоритм создания проекта:

  1. Открывают Мастер нового проекта.
  2. Выбирают Next > Каталог > Имя > объект верхнего уровня.
  3. Выбирают каталог для размещения проекта, например, «Blink» и помещают его в папку intelFPGA_lite, но можно разместить его где угодно и нажимают «Далее».
  4. Когда будет предложено создать каталог, выбирают «Да».
  5. Выбирают «Пустой проект» и нажимают «Далее».
  6. Добавляют файлы и «Далее».
  7. Настраивают семейства, устройства и платы, выбирая следующее: семья - Циклон V, устройство - Циклон V SE, база, название устройства: 5CSEBA6U2317.
  8. Чтобы выбрать конкретное устройство, нужно нажимать стрелки вверх / вниз, чтобы увидеть список поддерживаемых устройств, пока не появится 5CSEBA6U2317.
  9. Пользователю может понадобиться расширить поле «Имя», чтобы увидеть полное имя устройства, нажать «Далее».
  10. При настройке инструмент EDA, используют стандартные инструменты, поэтому никаких изменений не будет, нажимают «Далее» и «Готово». Появится экран резюме.
  11. Создают файл HDL с внедрением Verilog в качестве HDL.
  12. Переходят на вкладку File (главное окно) и выбирают New.
  13. Выбирают Verilog HDL File и нажимают кнопку ОК.
  14. Выбирают «Файл»> «Сохранить как».
  15. Выбирают имя файла. Это имя файла верхнего уровня, и оно должно совпадать с именем проекта.
  16. Нажимают «Сохранить».
  17. Создают модуль Verilog.
  18. Копируют и вставляют ниже размещенный код Verilog в окно blink.v, а затем сохраняют файл кода.
  19. Нажимают правой кнопкой мыши «Анализ и синтез», а затем нажимают «Пуск», чтобы выполнить проверку синтаксиса и синтеза кода Verilog.

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

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

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

Производители начали экспериментировать с таким понятием, как встраивание ПЛИС в интегральные микросхемы для создания гибридного устройства. Основное внимание по-прежнему уделяется маршрутизации межсоединений, а в архитектурах CLB наблюдаются меньшие изменения. Поскольку ПЛИС продолжают включать процессоры, новое поколение потребует не только знаний аппаратного обеспечения цифрового дизайна, но и опыта разработчиков в процессе однократного программирования ПЛИС. В целом, ожидается, что FPGA отнимет долю рынка в устройствах ASIC и станет доминирующей технологией, охватывающей множество приложений из различных областей.

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

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

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

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

Несколько лет назад на вопрос «кем ты работаешь?» можно было многозначительно двинуть бровями и сказать: «компьютерщик». Этого было достаточно. Объяснять тонкие материи неподготовленным людям, которые в лучшем случае могли похвастаться строчкой в резюме «Уверенный пользователь ПК» было лишним, так как породило бы только ещё больше вопросов. Но времена меняются, грамотность повышается, и теперь, когда «уверенный пользователь ПК» стало атавизмом, за ним же последовало и некогда универсальное слово «компьютерщик».

У профессий программиста и разработчика много общего, да и в быту эти слова часто используют как синонимы, но разница, хоть и не всегда заметная, есть. Иначе почему вообще появились такие понятия как software developer, computer scientist и programmer?

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

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

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

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

И даже переместившись в будущее на пару десятков лет, всё еще сложно представить себе какого-нибудь Билла Гейтса, который собрал бы у себя в гараже компьютер длиной в 17 и высотой более 2.5 метров, который бы состоял из 765 тысяч деталей, синхронизировался при помощи 15-метрового вала и приводился в движение электрическим двигателем мощностью в 5 лошадиных сил - как Марк-1, разработанный несколькими гарвардскими математиками по контракту с IBM в 1941-м году.

Слишком трудо- и мозгоёмким было это дело, поэтому исторически так сложилось, что кто компьютер строил, тот его и «танцевал». Компьютеров было мало - тех же «Колоссов» к концу войны работало всего 10 штук. Лишь через несколько лет начали появляться первые коммерческие модели - например, IBM 701 (в первый год продано 19 штук, или IBM 650 (в первый год продано уже 450 штук). Основными покупателями были научные лаборатории, авиакомпании, государственные институты.

И пусть даже с 1965 года американцы тысячами начинают выпускать PDP-8 , который стоит «всего» 18 тысяч долларов - он имеет несовершенную архитектуру памяти, из-за чего немалое количество требовательных к ресурсам проектов на нём загнулось. Так что программировать в те времена было нелегко (привет железу) и совсем не так удобно и доступно, как сейчас. Людей, которые умели программировать, были единицы. Тех, кто мог на этом что-то заработать - ещё меньше. И всё это время за программистом вполне заслуженно держится слава «ботана», носителя одного свитера и завсегдатая библиотек. Экий вундеркинд не от мира сего, который занимается очень узкой областью, недоступной для масс.

Исторически так сложилось, что люди с мозгами, которые умели разговаривать с машинами на «ты», работали исключительно на военно-промышленный комплекс либо в науке. Отсюда истинный программист в историческом смысле этого слова - это человек, который пишет программы для оборонного/оружейного комплекса, для вычислительных мощностей в каких-нибудь КБ или научных институтах, программирующий роботов, ракеты для полёта в космос и так далее. Исключительно дела государственной значимости. Максимум инноваций. Денежный интерес либо отсутствует, либо занимает вторые места. Общественности не важно, сколько миллиардов долларов они отдали изобретателям за компьютеры и интернет, и точно также им не важно, сколько денег ушло на программу Аполлон. Зато теперь у каждого в кармане по компьютеру, а на Луне флаг и следы сапог. Никто не помнит богачей, зато все помнят инноваторов, потому что первые потребляют, тогда как вторые дают.

Разработка

Коммерческого программирования в чистом виде не существовало и не существует до сих пор - слово «программирование» здесь явно не к месту. Вот разработка - другое дело. То, что Microsoft, IBM, HP, Apple и другие компьютерные первопроходцы захватывали рынки и зарабатывали огромные деньги, не отменяло того факта, что в каждом новом продукте закладывался шаг вперёд. Они решали новые, нетривиальные задачи.

Был ли Торвальдс программистом? Разумеется. Ведь он написал ядро для Linux. При этом совершенно не важно, использовал ли он в процессе своей работы лучшие практики и методологии разработки (например, правильно ли называл переменные, оптимально ли использовал память, и так далее). Главное, что работает. Да и победителей не судят. Как не судят и Брендана Ейха - создателя JavaScript, хотя объективно есть за что.

Является ли гений и по совместительству начальник нулей и единиц, будучи даже умнее Торвальдса и Ейха, программистом, если он только и делает, что решает типовые задачи? Например, пишет интернет-магазины. Наводящий вопрос: человек, который служил в спецназе, но теперь работает охранником в магазине - это спецназовец или охранник? Многие охранники, дабы выглядеть лучше в своих же глазах, многозначительно потирая армейские татухи называют себя спецназовцами. Редко кто поставит рядом со своей профессией слово «бывший». Но лишь единицы признаются, что либо они потеряли квалификацию и поэтому работают в охране, либо они слишком круты для занимаемой должности, тем самым паля из пушки по воробьям.

Некоторые сегодняшние программисты как раз напоминают этого спецназовца, который явно не на своём месте и занимается исключительно зарабатыванием денег, спустив свой талант в трубу. Есть и другая, намного более многочисленная категория людей (99%), которые именуют себя программистами, на деле являясь разработчиками (в эту категорию также включены и быдлокодеры). Пишут и меняют свой или чужой код, общаются с заказчиком, клиентами, постоянно фиксят баги - потому что разработчик может позволить себе допускать их; работают не за идею, но за бабло: сегодня на одного дядю, завтра - на другого. Кто больше даст.

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

И пусть не вводят в заблуждение записи в трудовой а-ля «инженер-программист первой категорииї». HR’ы сами не ведают, что творят, используя штампы исчезнувшей 25 лет назад страны. Достаточно лишь задать наводящий вопрос: «Над чем ты сейчас работаешь?». Потому что можно заниматься сколь угодно сложной разработкой с громоздкой и трудной для понимания архитектурой, напичканной массой зависимостей и мозгодробильных элементов, которая требует незаурядных умственных способностей. Но если это интернет-магазин, очередной высосанный из пальца «сервис», спам-робот или, упаси Иисусе, браузерная игра, и человек при этом в своё свободное время не занимается программированием, то дело пахнет разработкой. Как в словосочетании «разработка нефтяных месторождений».

Поэтому на вопрос «Кем работаешь?» более точным мог бы быть ответ «В душе - программист, но работаю разработчиком», «Я разработчик, но когда-нибудь стану программистом», или же: «Я разработчик, рублю капусту». Когда ситуация требует неточного и быстрого ответа, «программиста» можно понять, - все-таки разработчик в контексте ПО - слово относительно новое. Но и называть себя программистом, попивая сок на задворках аутсорса - себя обманывать.