Профессия программист. Знаменитые и великие программисты. Что делают современные программисты

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

Что делает программист

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

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

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

Не лишним станет глубокое изучение английского языка в области IT-технологий для чтения технической документации.

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

Общение – неотъемлемая часть работы программиста. Большинство проектов разрабатывается в команде, где людям необходимо не только дискутировать, но и соглашаться друг с другом. Существует стереотип образа человека, занятого в сфере IT: замкнуты, одинокий очкарик, находящейся на своей волне. В большинстве случаев, это открытые коммуникабельные люди, а отшельничество присуще любому гению, вне зависимости от профессии.

Программист – это востребованная и высокооплачиваемая профессия. Специалист начального уровня может смело претендовать на заработную плату около 1 000 долларов. По мере приобретения опыта и практических знаний, можно выйти на доход 1500-1800 долларов. В крупной организации по разработке программного обеспечения специалисты зарабатывают до 3 000 долларов, на руководящих должностях – 5 000 долларов.

Не пропустите:

Плюсы и минусы работы программистом

Преимущества:

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

Недостатки:

  • работа программистом довольно молодая, по большей части в ней заняты люди не старше 40 лет. Не самая удачная профессия для тех, кто собирается найти спокойную работу, и просидеть там до пенсии;
  • хотя профессия предполагает коммуникабельность, общение сводиться к профессиональным разговорам с коллегами и начальством. Людям, которые нуждаются в постоянном общении с разными людьми, будет довольно сложно;
  • главный минус – сидячая работа за компьютером. Необходимо пристально следить за своим здоровьем, без физической нагрузки существует риск получить проблемы со зрением и опорно-двигательным аппаратом.

Существует несколько вариантов построения карьерной лестницы для специалистов, которые хотят добиться успеха в программировании. Один из самых популярных – объединиться с единомышленниками вокруг креативной идеи, получить внешние инвестиции, и таким образом заявить о себе. Нередко зарубежные компании ищут «светлые умы» среди специалистов в странах пост советского пространства. Талантливые программисты никогда не останутся без работы.

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

Кто же такие программисты, чем они занимаются, почему у программистов такие высокие ЗП?

На самом деле нет простого ответа на это.

Программист сидит за компьютером

Когда я учился в школе, я думал, что это люди, которые сидят за компьютерами. Пожалуй, с этим и связано название профессии в советском исполнении: "Оператор ЭВМ".

В принципе, не плохо - водитель управляет машиной, а "оператор ЭВМ" управляет компьютером. Но здесь есть всё же неувязочка: водитель всё же про "отвезти кого-то/что-то", его же не называют "оператор автотранспортного средства".

Так может и "оператор ЭВМ" - не лучшее название для этой профессии... если, конечно, он не просто сидит за этим самым компьютером.

Программист пишет программы

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


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

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

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


Программист автоматизирует

Автоматизирует решение проблем, а заодно и проблемы.

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

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


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

Вы главное скажите - а что надо автоматизировать?

Программист решает проблемы

Громкое заявление, но если грубо (а честно - это почти всегда грубо) - то так и есть. Часто в работе не было чёткого описания процесса, который надо автоматизировать. Часто это был просто список хотелок, которые надо сделать, и головной боли, от которой надо избавить заказчика.

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

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

Так кто же такие программисты?

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

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

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

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

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

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

  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 типов людей - те, кто понимает двоичную систему счисления, и те, кто не понимает ее.

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

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

(function(w, d, n, s, t) { w[n] = w[n] || ; w[n].push(function() { Ya.Context.AdvManager.render({ blockId: "R-A-329917-1", renderTo: "yandex_rtb_R-A-329917-1", async: true }); }); t = d.getElementsByTagName("script"); s = d.createElement("script"); s.type = "text/javascript"; s.src = "//an.yandex.ru/system/context.js"; s.async = true; t.parentNode.insertBefore(s, t); })(this, this.document, "yandexContextAsyncCallbacks");

Какие бывают программисты

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

В основном это:

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

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

Что должен знать и уметь программист

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

Обычно руководство смотрит еще и на такие качества сотрудников-программистов, как:

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

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

Существуют и минусы:

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

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

(function(w, d, n, s, t) { w[n] = w[n] || ; w[n].push(function() { Ya.Context.AdvManager.render({ blockId: "R-A-329917-3", renderTo: "yandex_rtb_R-A-329917-3", async: true }); }); t = d.getElementsByTagName("script"); s = d.createElement("script"); s.type = "text/javascript"; s.src = "//an.yandex.ru/system/context.js"; s.async = true; t.parentNode.insertBefore(s, t); })(this, this.document, "yandexContextAsyncCallbacks");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Псевдокод

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


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

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

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

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

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

От автора:

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