Профессия программист. Кто такой Программист. Описание профессии

Материал из Википедии - свободной энциклопедии

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

Место программирования в обществе

Существует подготовка математиков-программистов по направлению «Математическое обеспечение и администрирование информационных систем» .

В конце 2000-х в России появилось новое направление подготовки программистов «Программная инженерия» . Областью профессиональной деятельности выпускников по этому направлению является индустриальное производство программного обеспечения . Данное направление подготовки отличается от подготовки инженеров-программистов по профилю «Программное обеспечение вычислительной техники и автоматизированных систем» тем, что общеинженерные дисциплины заменены дисциплинами из новой области знания инженерия программного обеспечения . Объектами профессиональной деятельности инженеров по производству программного обеспечения являются не программы и программные комплексы, а методы и инструменты разработки программного продукта , а также процессы жизненного цикла программного продукта .

Предметом деятельности программистов в науке является решение задач с применением методов прикладной математики и реализацией на ЭВМ (результатом деятельности является полученное при помощи программы решение задачи).

В России подготовка специалистов в этой области ведется по следующим направлениям:

Как вспомогательная деятельность программирование в настоящее время используется в широчайшем круге профессий.

Самообразование

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

Словоупотребление

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

По ошибке программистами порой называют системных администраторов и других специалистов ИТ .

Прикладные и системные программисты

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

История

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

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

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

Первое программируемое вычислительное устройство, Аналитическую машину , разработал Чарльз Бэббидж (но не смог её построить). 19 июля 1843 года графиня Ада Августа Лавлейс , дочка великого английского поэта Джорджа Байрона , как принято считать, написала первую в истории человечества программу для Аналитической машины. Эта программа решала уравнение Бернулли , выражающее закон сохранения энергии движущейся жидкости.

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

Однако ни одна из программ, написанных Адой Лавлейс, никогда так и не была запущена.

Аду Августу, графиню Лавлейс, принято считать почётным первым программистом (хотя, конечно, написание одной программы по современным меркам не может считаться родом занятий или профессиональной деятельностью). История сохранила её имя в названии универсального языка программирования «Ада» .

Первый работающий программируемый компьютер (1941 год), первые программы для него, а также (с определёнными оговорками) первый язык программирования высокого уровня Планкалкюль создал немецкий инженер Конрад Цузе .

Имена людей, впервые начавших профессионально выполнять работу собственно по программированию (в отрыве от наладки аппаратуры компьютера), история не сохранила, так как поначалу программирование рассматривалось как второстепенная наладочная операция.

Профессиональный праздник

Примечания

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

Разновидности

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

  1. Прикладные программисты занимаются в основном разработкой программного обеспечения прикладного характера — игры‚ бухгалтерские программы‚ редакторы‚ мессенджеры и т.п. К области их работы также можно отнести создание программного обеспечения для систем видео- и аудио-наблюдения‚ СКД‚ систем пожаротушения или пожарной сигнализации и т.п. Также в их обязанности входит адаптация уже существующих программ под нужды отдельно взятой организации или пользователя.
  2. Системные программисты разрабатывают операционные системы, работают с сетями, пишут интерфейсы к различным распределенным базам данных. Специалисты этой категории относятся к числу самых редких и высокооплачиваемых. Их задача состоит в том‚ чтобы разработать системы программного обеспечения (сервисы)‚ которые‚ в свою очередь‚ управляют вычислительной системой (куда входит процессор‚ коммуникационные и периферийные устройства). Также в список задач входит обеспечение функционирования и работы созданных систем (драйвера устройств‚ загрузчики и т.д.).
  3. Web-программисты также работают с сетями, но, в большинстве случаев, с глобальными - Интернет. Они пишут программную составляющую сайтов, создают динамические веб-страницы, web-интерфейсы для работы с базами данных.

Особенности профессии

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

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

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

Плюсы и минусы профессии

Плюсы:

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

Минусы:

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

Место работы

  • IT-компании и web-студии;
  • научно-исследовательские центры;
  • организации, которые подразумевают в своей структуре штатную единицу или отделы программистов.

Важные качества

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

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

Обучение на программиста

Компьютерная Академия ШАГ - международное учебное заведение, обучает . Работает с 1999 года. 42 филиала в 16 странах мира. Крупнейший авторизованный учебный центр Microsoft, Cisco, Autodesk. Студенты получают международные сертификаты и международный диплом. Главная цель - трудоустройство каждого выпускника.

На этом курсе вы можете получить профессию программиста дистанционно за 1-3 месяца. Диплом о профессиональной переподготовке установленного государством образца. Обучение в полностью дистанционном формате. Крупнейшее образовательное учреждение дополнительного проф. образования в России.

Оплата труда

Программист - одна из самых востребованных и высокооплачиваемых профессий в России. Даже не самый продвинутый специалист может найти работу в соответствии со своим уровнем знаний, а затем постепенно учиться и набираться опыта. Зарплата стажера — около $1000. Штатный программист в компании среднего уровня (не IT) получает до $1500-1800, чуть больше — в организации, связанной с массовой разработкой ПО. Зарплата ведущего программиста — $2500—3000. Следующая ступень — руководитель IT-отдела. К необходимым знаниям добавляется обязательный опыт работы, владение иностранным языком, навыки управления персоналом и др., а заработок может достигать $4000. Хороший программист может стать руководителем крупного проекта по разработке ПО, и тут уровень доходов достигает $5000 и выше.

Зарплата на 28.03.2019

Россия 40000—180000 ₽

Москва 50000—200000 ₽

Ступеньки карьеры и перспективы

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

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

Знаменитые и великие программисты

Кнут Дональд Эрвин
Мацумото Юкихиро
Таненбаум Эндрю
Рэймонд Эрик Стивен
Фаулер Мартин
Хоппер Грейс
Столлман Ричард Мэттью
Кей Алан
Мейер Сид
Страуструп Бьёрн

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

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

Первое программируемое вычислительное устройство, Аналитическую машину, разработал Чарлз Бэббидж (но не смог её построить). 19 июля 1843 года графиня Ада Августа Лавлейс, дочка великого английского поэта Джорджа Байрона, как принято считать, написала первую в истории человечества программу для Аналитической машины. Эта программа решала уравнение Бернулли, выражающее закон сохранения энергии движущейся жидкости.

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

Однако ни одна из программ написанных Адой Лавлейс никогда так и не была запущена.

Аду Августу, графиню Лавлейс, принято считать почётным первым программистом (хотя, конечно, написание одной программы по современным меркам не может считаться родом занятий или профессиональной деятельностью). История сохранила её имя в названии универсального языка программирования «Ада».

Первый работающий программируемый компьютер (1941 год), первые программы для него, а также (с определёнными оговорками) первый язык программирования высокого уровня Планкалкюль создал немецкий инженер Конрад Цузе.

Имена людей, впервые начавших профессионально выполнять работу собственно по программированию (в отрыве от наладки аппаратуры компьютера), история не сохранила, так как поначалу программирование рассматривалось как второстепенная наладочная операция.

Законы Мерфи для программистов

1. Ничто не работает так, как планировалось запрограммировать.

2. Ничто не программируется так, как должно работать.

3. Хороший программист характеризуется умением доказать почему задачу невозможно выполнить, когда ему просто лень её выполнять.

4. На решение проблемы уходит в три раза меньше времени, чем на обсуждение всех "за" и "против" её решения.

5. Обещанный срок сдачи - это аккуратно рассчитанная дата окончания проекта плюс шесть месяцев.

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

7. Настоящие программисты любят Windows — все ошибки, сделанные по собственной тупости, можно свалить на Microsoft.

8. Следствие — 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.

9. В приступе злости все почему-то молотят по невинному монитору, вместо системного блока.

10. В случае голодовки настоящий программист ещё месяц сможет питаться едой, выковырянной из-под кнопок клавиатуры.

11. Настоящий программист уже как минимум поменял три залитых пивом клавиатуры.

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

13. Дилетантские разговоры о компьютерах вызывают резкую тошноту вплоть до приступов рвоты. Вопрос о том как поменять "обои" в Windows вызывает желание перерезать горло вопрошающему.

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

15. HTML, HTTP, FTP, SMTP, TCP/IP, RTFM и т.д. - это слова, а не аббревиатуры.

16. Словосочетание "мышка-норушка" не несёт никакого смысла.

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

18. Следствие - если твоя программа выполняет мистические действия, значит, ты сделал что-то невероятно тупое.

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

20. Решение всех жизненных проблем находится в интернете. Надо только уметь хорошо искать.

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

22. Тех, кто презирает программистов, программисты презирают сильнее, чем те, кто презирает программистов, презирают программистов, которые презирают тех, кто их презирает.

23. Если ты понял предыдущее — то ты программист.

На этом свете 10 типов людей - те, кто понимает двоичную систему счисления, и те, кто не понимает ее.

Видео: ты ж программист

Справка

Билл Гейтс, Марк Цукерберг, Шон Паркер, Торвальдс Линус… Все эти люди прославились благодаря особому таланту в программировании. Работа в такой области считается преимущественно мужской, но первым программистом является женщина. Это дочь знаменитого английского поэта Байрона - Ада Лавлейс. Именно благодаря ей появились первые приёмы управления вычислениями, которые до сих пор используются в современном программировании.

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

Востребованность профессии

Достаточно востребована

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

Вся статистика

Описание деятельности

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

Заработная плата

средняя по России: средняя по Москве: средняя по Санкт-Петербургу:

Уникальность профессии

Довольно распространенная

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

Как пользователи оценивали этот критерий:
Вся статистика

Какое необходимо образование

Высшее профессиональное образование

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

Как пользователи оценивали этот критерий:
Вся статистика

Трудовые обязанности

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

Вид труда

Исключительно умственный труд

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

Как пользователи оценивали этот критерий:
Вся статистика

Особенности карьерного роста

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

Возможности карьерного роста

Возможностей достаточно

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

Как пользователи оценивали этот критерий:

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

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

- Чем занимаются программисты? Это не так-то просто рассказать… Ответьте мне для начала: как в двух словах можно описать, например, суть профессии хирурга?
- Хирург проводит операции.
- Да, отличное описание! Ну а, скажем, футболиста?
- Играет в футбол!
- Угу, а хирург «занимается хирургией». А если без однокоренных слов?
- Пинает мяч?
- Вот это точно. А что же делает программист, кроме как «разрабатывает программы»?
- …
- Программист пишет код . Исходный код своей программы, составленный на каком-то специальном языке программирования. Точнее говоря, сначала он продумывает структуры своих данных, потом составляет алгоритмы для работы с этими структурами - ну а затем уже представляет это в виде кода.
- Что ещё за «структуры данных»? Разве он не управляет компьютером, не нажимает кнопки?
- Эх...

Миф №1: программист работает с компьютерами

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

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

Миф №2: машина умеет думать

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

- В общем, код любой программы представляет собой набор команд, а компьютер их тупо исполняет.
- То есть, он не понимает сути самих команд? Но как он воспринимает текст, который я ввожу на экране?
- Когда ты крутишь педали на велосипеде - понимает ли он, что ему сейчас нужно поехать вперёд?
- Нет, но ведь едет. Поскольку его цепь преобразует вращение педалей во вращение колёса.
- Именно! Также и компьютер преобразует введённый тобой текст в набор чисел.
- Каким образом?
- У каждого символа текста есть свой числовой код, который знает компьютер. Это называется кодировкой. Например, английская «a» кодируется числом 97, а знак равенства - числом 61.
- Поэтому машина и может понимать текст, который мы ей сообщаем?
- Нет, она «понимает» не смысл. А лишь то, каким образом этот текст хранить, и как к нему обращаться.
- Выходит, сначала мы вводим текст, затем компьютер разбивает его на символы, а каждый символ уже представляет в виде числа?
- Верно. Сложные структуры представляются в виде более простых , которые и «понимает» машина.

Скажите мне, из чего состоит жилой дом?
- Ну… Из этажей.
- А из чего состоят этажи? И так далее.
- Этажи - из стен. А стены - из кирпичей. А кирпичи…
- Вот числа для компьютера - это то же, что и кирпичи для дома. Символы - это стены. Отдельные предложения - этажи. А книги - целые дома! Но у программистов есть преимущество перед строителями.
- Какое?
- Строитель не может строить целыми этажами, он вынужден всегда класть кирпичи. Даже если некий сверхмощный подъёмный кран позволит ему строить готовые этажи, он не сможет строить им целые дома или жилые кварталы. А программист сможет! Раз он уже «обучил» машину понимать конечный текст - то, по сути, он «обучил» подъёмный кран строить готовый дом за одно действие.
- То есть, программист может использовать всё более и более сложные структуры данных?
- Да. Поэтому первая из составляющих его работы - представить понятные человеку данные (текст, изображение, звук) в виде объединения более простых данных, уже понятных компьютеру. Разработчик практически «с нуля» составляет структуру, которая должна полностью описывать понятную человеку вещь - причём таким образом, чтобы эта структура была легко расширяемой и изменяемой (ведь в программу часто приходится вносить какие-то новые возможности).
- Хех! Выходит, что он строит резиновые дома из съёмных панелей!
- Примерно так. Однако, ещё ему придётся не только описать, что же ему нужно построить - но и как всё это построить. То есть, придумать алгоритм. Это вторая из составляющих его работы.
- Программист придумывает алгоритм на каждое действие?
- Именно. Поэтому алгоритмов получается очень много. Но его работу облегчает то, что одни действия могут содержать в себе другие, уже описанные им ранее.
- И здесь ему на помощь приходит язык программирования?
- Не совсем...

Миф №3: язык программирования нужен для составления алгоритмов

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

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

- Правда, многие из нынешних языков программирования уже содержат «в себе» набор заранее составленных алгоритмов, которые разработчик может использовать в качестве готовых. Поэтому язык всё же немного облегчает процесс составления алгоритмов.
- То есть, если один программист составил какой-то алгоритм, то его тут же могут использовать другие?
- Да, и это происходит постоянно. Это одна из причин, почему отрасль IT так быстро развивается. Однако новые алгоритмы приходится составлять самому.
- А составь какой-нибудь прямо сейчас!
- Легко. Классический пример: у вас есть книга, в ней 1000 страниц. Вам нужно открыть в ней, к примеру, 875-ю страницу. Как бы вы стали это делать?
- Ну, просто пробежал от первой до 875-й, только и всего.
- Угу, и придётся тебе глядеть на номер каждой страницы. А представь, если все их уголки слиплись - сколько времени тогда пройдёт? А вот мне достаточно перебрать лишь 3 страницы!
- Как?
- Вначале я выберу страницу, которая находится посередине книги, то есть 500-ю. Потом посмотрю: в какую из образовавшихся половин должна попасть искомая страница?
- Во вторую. А дальше что?
- То же самое. Интервал с 500-й по 1000-ю я снова поделю надвое, открыв центральную страницу. Получится интервал от 750-й страницы до 1000-й, в нём я опять выберу центральную. Какой будет номер?
- 750 плюс 125… Так это же и есть 875!
- Вот видишь. Всего 3 действия! Даже если я буду не совсем точен при выборе центральной страницы, я всё равно найду нужную намного быстрее тебя. Этот алгоритм носит название «дихотомия». Хотя в реальности программисты используют куда более сложные алгоритмы.
- И ты можешь записать его на бумаге?
- Конечно. Где там моя ручка?

Псевдокод

повторяем цикл: ищем(в книге, центральную_страницу); если (центральная_страница = искомой_странице) выходим из цикла; иначе если (центральная_страница < искомой_страницы) удаляем(в книге, все страницы от первой до центральной); иначе удаляем(в книге, все страницы от центральной до последней);


- Ну как, алгоритм ясен?
- Хм… Да, и впрямь ясен.
- Сейчас он записан в виде, уже слегка похожем на реальный программный код.
- А в чём отличия?
- В реальном коде все слова будут написаны на английском, а также будет заранее описана структура «книга» (помните, что я раньше рассказывал про структуры данных?). Плюс, для действий «ищем» и «удаляем» тоже будут составлены свои алгоритмы. Но в целом - всё то же самое.
- И ты занимаешься этим изо дня в день?
- В основном.
- И тебе не скучно?
- Ничуть!

Миф №4: программирование - это скучно

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

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

- В шутку можно сказать, что в итоге получается какой-то детектив в выдуманном мире, выраженный с помощью языка программирования.
- А убийца в этом детективе - дворецкий?
- Ага, нулевой указатель. Бывает так, что весь отдел день-другой ловит особо назойливый баг, и каждый программист из отдела берёт на себя какой-то участок кода. Получается целое расследование, с наказанием виновных и награждением сопричастных…
- Хм, а это и впрямь интересно звучит!
- Вот видишь.
- А, скажем, я могу хоть немного научиться программированию?
- Да, конечно! Я знаю один сайт специально для этого...

От автора:

Данный диалог вполне реален, вплоть до финальной реплики. Конечно, он порядком приукрашен - но, уверяю вас, примерно так всё и было;)
  • Сергей Савенков

    какой то “куцый” обзор… как будто спешили куда то