Статья «Программа и программирование как вид деятельности человека»
«Программист должен обладать способностью первоклассного математика к абстракции и логическому мышлению в сочетании с эдисоновским талантом сооружать все, что угодно, из нуля и единиц. Он должен сочетать аккуратность бухгалтера с проницательностью разведчика, фантазию автора детективных романов с трезвой практичностью экономиста»
Академик А.П. Ершов
Информационные технологии занимают все более значимую роль в человеческом обществе. Они проникли во все сферы деятельности. Для обслуживания общественных потребностей в автоматизации труда, хранения данных, связи и др.
Программирование представляет собой такое понятие, которое для большинства людей не имеет абсолютно никакого значения. Конечно, практически каждый человек слышал это слово, но при этом многие даже не представляют себе, чем оно является.
Программирование есть вид деятельности человека, связанный с процессом записи готового, ранее разработанного, обдуманного и проверенного алгоритма в виде текста программы.
-
Что такое программа?
Компьютер работает, подчиняясь командам. Мы можем вводить эти команды с помощью клавиатуры. Действия компьютера должны подчиняться определенным алгоритмам. Но этого недостаточно. Надо, чтобы эта система правил была переведена в такую форму, которую бы понимала любая часть компьютера. Только после этого машина оживает и может выполнять свои функции.
Такой формой представления алгоритма является программа. Программа содержит команды (инструкции) на языке, понятном компьютеру. Она сообщает ему, как надо действовать, как обрабатывать данные для получения результата. Любое такое действие задается программой. Компьютер без программы как человек без души, без чувств, без мыслей. Это бесполезный хлам, груда железа. Программы делают компьютер вашим другом, помощником, советчиком, партнером по игре.
Программа - упорядоченная последовательность команд (инструкций), необходимых компьютеру для решения поставленной задачи.
Для программы важно не только какие действия в нее входят, но и в каком порядке они следуют. При постройке дома сначала возводят стены, а потом их штукатурят - наоборот не получается.
-
Кто пишет программы?
Программы пишут специально подготовленные люди - программисты. Эта профессия самая дефицитная в мире. Программист — это специалист, занимающийся разработкой программного обеспечения (ПО) для персональных, встраиваемых, промышленных и других разновидностей компьютеров, то есть программированием. Это может быть как руководитель крупных проектов по разработке ПО, так и «одиночка», пишущий код конкретной программы. Программированию учатся всю жизнь. Нет такого учебника, пособия, прочитав которые можно было бы сразу стать программистом. Подготовка программиста начинается с освоения основных понятий и овладения простейшими приемами.
Личные качества.
Практически ежемесячно выходят новые версии программ, обновляются характеристики оборудования, и специалисты в области информационных технологий должны быть всегда в курсе этих изменений. Поэтому способность к самообучению – один из главных навыков, которым должен обладать программист.
Владение английским языком на уровне чтения технической документации является еще одним обязательным требованием, предъявляемым к представителям этой профессии. Для таких специалистов очень важно умение работать: в команде, над большими проектами, со средствами коллективной разработки, с крупными финансовыми системами (бюджетными, банковскими, управленческого учета). Для претендентов на позицию ведущего программиста желательны навыки управления проектами и коллективом, самостоятельность, инициативность, а также способность нести личную ответственность за поставленную задачу.
Образование.
Программистов готовят во множестве высших учебных заведений. Хотя в этой сфере успешно работает и множество специалистов с другим образованием, а иногда даже вообще без высшего образования. Много хороших программистов — самоучки.
Самым важным в процессе обучения является не столько прослушивание лекций, сколько решение задач и участие в различных учебных проектах. Будущему программисту важно научиться думать, находить верные решения, «шевелить мозгами». Информационные технологии развиваются очень быстро, поэтому для таких специалистов необходимы навыки самообразования, чтобы после получения основного диплома идти в ногу со временем и не терять квалификации. Специалисту в этой области нужно знать языки программирования, уметь создавать веб-страницы, владеть иностранным языком (английским как минимум) и постоянно совершенствовать свои знания, так как через несколько лет он может оказаться не удел. Не все программисты создают сайты. Есть те, которые разрабатывают программы специально для работы конкретного предприятия (прикладные программисты).
-
Программирование в жизни современного человека.
Программирование занимает одну из значительных ниш в современном мире. Это не просто способ заставить работать «железяки», но и поставить себя на путь развития своих способностей.
При решении какой - либо задачи человек сначала продумывает, как должен действовать компьютер для достижения цели, представить план действий в виде алгоритма. Далее этот алгоритм преобразуют в форму, понятную компьютеру, т.е. составят - программу. Такой процесс называют программированием.
Затем программе дается имя и она помещается в память компьютера. Он начинает выполнять действия по этой программе в тот момент, когда вы зададите ему команду запуска (выполнения).
Как выглядит программа?
Начнем с простого вопроса: «А как выглядит письмо?» Дело в том, что письма, написанные на русском и китайском языках, выглядят совершенно по-разному. Программы тоже пишут с помощью специальных языков - их называют языками программирования. Естественно, что на даже одинаковые программы, написанные на разных языках, выглядят по-разному.
Как пишутся программы?
На вопрос «Кто пишет программы?» ответить было легко. Труднее ответить на вопрос «Как?» Существуют различные способы взаимодействия человека и ЭВМ в процессе решения задачи. Эти способы меняются, следуя за совершенствованием вычислительных машин. Доля машинного участия при этом растет.
На самых первых машинах с программным управлением алгоритм решения задачи записывался самим пользователем на внутреннем языке машины, на языке кодов. Это значит: человек, готовивший ЭВМ к решению задачи, выписывал одно за другим все необходимые указания для ЭВМ, обдумывал каждое условие ветвления процесса решения задачи, предусматривал одно за другим все необходимые указания для ЭВМ, обдумывал каждое условие ветвления процесса решения задачи, предусматривал конкретные ячейки памяти для хранения исходных данных, промежуточных результатов и принимал решение о форме выдачи результата. Все детали процесса решения он записывал в виде слов двоичного алфавита, в виде двоичных кодов.
Такой способ программирования принято называть ручным программированием. Это важный способ составления программ — его достоинства и недостатки следует знать. К недостаткам относят трудоемкость работы: при составлении программы решения сложной задачи приходится выписывать очень много команд и условий (иногда десятки тысяч), очень трудно следить за взаимосвязью между отдельными блоками программы. Все это отягощается тем, что все тексты выписаны в виде двоичных слов (позднее восьмеричных), разобраться в тексте кем-то записанной программы очень сложно: комментарии и разъяснения помогают очень мало. Анализ текста программы бывает иногда столь затруднителен, что легче составить программу заново, нежели разобраться в ее тексте, составленном другим программистом. Все это приводило к тому, что подготовка программы (по уже выверенному алгоритму) и ее отладка длились очень долго, порой несколько месяцев.
Составление программы на машинном языке дело кропотливое, требующее большого внимания. Программисту необходимо самостоятельно распределять ячейки оперативной памяти под программу, исходные данные, результаты счета. Разобраться в чужой программе без подробных пояснений автора о ее структуре и распределении машинной памяти было практически невозможно. Да и сам процесс составления программ на машинном языке был очень трудоемким и длительным.
Посудите сами, опытные программисты способны были сделать в среднем всего несколько команд за рабочий день. Если программа состоит, например, из 700 команд, а это, вообще говоря, программа не очень сложной задачи, то один программист будет ее разрабатывать три месяца! А что если привлечь пятнадцать программистов? Можно ли запрограммировать эту задачу за неделю? Оказывается, нет. И вот почему. Пусть для сооружения дома требуется две тысячи человеко-дней. Смогут ли две тысячи человек построить этот дом за один день? Конечно, нет! В работе над одной задачей участвуют обычно один - два, реже три-четыре программиста. При большом их числе организовать четкую совместную работу практически невозможно: состыковать в единое целое куски программ, написанных разными людьми,— большая проблема. Как же тогда быть с задачами, для которых программа содержит 2—3 тысячи и более команд? Программировать годы? Число задач росло быстро, лавинообразно. Чтобы полностью учесть все возрастающие запросы науки и производства, надо было бы иметь целую армию программистов, состоящую из нескольких миллионов людей, т. е. через несколько лет значительная часть работоспособного населения страны превратилась бы в программистов.
В 50-е гг., когда программирование вручную было господствующим, для повышения эффективности использования ЭВМ, для обеспечения их более полной загруженности прибегали к увеличению числа штатных программистов. И все-таки громоздкость программ мешала обмену опытом, их специфичность отпугивала непрофессионалов. Все это снижало эффективность применения вычислительной техники в народном хозяйстве.
Вот почему и началась борьба за сокращение сроков программирования задач, за повышение производительности труда программистов, за облегчение трудоемкого процесса «ручного» программирования. Недостатки ручного программирования были столь серьезными, а потребность в широком использовании ЭВМ столь значительной, что к решению проблемы повышения труда программистов и операторов были привлечены большие силы: работали математики, лингвисты, инженеры-специалисты по вычислительной -технике. Бесконечные «полчища» цифр наверняка мучили в кошмарных снах не одного программиста, составлявшего сложные программы на машинном языке. Если на первых порах программист получал радость от общения с машиной на ее языке, то с усложнением задач труднообозримые колонки цифр стали преградой общения даже между специалистами. Машинные языки оказались весьма неудобными для публикации и обучения (тем более, что разные ЭВМ имели отличные друг от друга языки), служили причиной возникновения в программе ошибок. Недостатки машинных языков привели к созданию искусственных языков программирования, предназначенных для описания алгоритмов. Девиз алгоритмических языков достоин математиков: «То, что вообще может быть сказано, может быть сказано ясно, а о чем невозможно говорить — о том следует молчать». В начале 60-х гг. появились первые практические подходы к замене ручного программирования автоматическим.
Не следует, однако, думать, что ручное программирование как метод изживает себя. Нет, дело в том, что существуют программы, которые целесообразно писать именно вручную, самым эффективным образом используя аппаратурные особенности всех элементов и узлов ЭВМ.
Алгоритмический язык в силу его лаконичности и строгости правил построения фраз дисциплинирует мышление. Логическое несовершенство метода, скрытые изъяны часто обнаруживаются при попытке его описания на алгоритмическом языке. Важным достоинством алгоритмических языков является их независимость от конкретного типа машины, для которой предназначена написанная программа. Программист, работающий на алгоритмическом языке, может вообще не знать систему команд ЭВМ, ему практически не нужно переучиваться при переходе от одной машины на другую. Для того чтобы программа, написанная на алгоритмическом языке, могла быть выполнена на ЭВМ, она должна быть сначала переведена с используемого языка, на собственный язык машины. Этот перевод выполняет сама ЭВМ. Речь идет о программах-трансляторах - так называют программы, с помощью которых реализуются идеи автоматического программирования (слово «транслятор» означает переводчик).
Программирование на алгоритмических языках гораздо проще программирования на машинном языке по той простой причине, что многие элементы этого процесса берет на себя транслятор. Поэтому при составлении программы математики стали делать гораздо меньше ошибок. К тому же транслятор помогает выявлять часть синтаксических ошибок.
Программы трансляторы разрабатываются высококвалифицированными специалистами, как правило это делается вручную. На одной и той же машине можно использовать трансляторы с несколькими языками программирования - это позволяет выбрать для решения задачи наиболее подходящий язык программирования.
ТРАНСЛЯТОР
КОМПИЛЯТОР ИНТЕРПРИТАТОР
Принцип литературного перевода: Принцип синхронного перевода:
переводит весь текст сразу, обрабатывает текст не заранее,
заранее его обрабатывает, а а непосредственно во время работы, потом исполняет. переводит «на ходу».
-
Особенности программирования
Программирование – интеллектуальная деятельность.
То, что производят программисты, нематериально – это brainware, результат коллективного мыслительного процесса проектной команды, материализованный на одном из языков программирования.
Если и проводить аналогию, то программисты работают исключительно на вершине описанной пирамиды. Программирование – это проектирование и только проектирование. Роль конструкторского бюро для программного проекта играют компилятор и сборщик программ. А программистским аналогом завода, который переводит конструкторскую документацию в продукт, доступный потребителю, служит вычислительный комплекс, на котором выполняется созданная программа.
Производительность программистов с одинаковым опытом по-прежнему будет отличаться в десятки раз. Никто не знает, каким местом человек думает и, как он этим местом это делает. В любой другой отрасли за спиной работника-стахановца сразу же поставили специалиста по научной организации труда, который бы составил карту прогрессивного технологического процесса и установил новые производственные нормативы. А что увидит это специалист из-за спины программиста? Habrahabr.ru?
Отсутствие законов.
В разработке программного обеспечения (ПО) еще не открыты свои законы Ньютона, нет уравнений Лагранжа или хотя бы сопромата, которые помогли бы нам спроектировать и доказать правильность архитектуры новой нетривиальной программной системы. Наработки математиков в области логики, теории информации, численных методов, реляционной алгебры, теории графов и некоторых других дисциплинах не покрывают сложность задач промышленного программирования.
Даже выдающиеся программисты не возьмут на себя смелость утверждать об архитектуре новой программной системы то, что она будет успешной. Хотя в программировании уже накоплен определенный опыт провалов, который может позволить искушенному программисту увидеть в архитектуре новой системы антипаттерны — источники серьезных будущих проблем. Но не более того.
Существующее состояние Software Engineering напоминает большую поваренную книгу с многочисленными описаниями рецептов однажды успешно приготовленных блюд из ингредиентов, которых никогда в будущем не будет. Завтра новой системе будут другие вычислительные машины, технологии, языки программирования, инструменты и окружающее ПО, новые проблемы взаимодействия с которыми обязательно придется решать.
Программирование – это ремесло. А поскольку это ремесло, то человек, научившийся писать программы на C ++, будет также далек от профессионала, как ученик третьего класса средней школы, научившийся писать по-русски, от А. С. Пушкина или Ф. М. Достоевского. Путь к мастерству в ремесле лежит только через опыт. Нельзя научиться разрабатывать программные продукты, читая книги.
Свобода – необходимое условие работы программиста. В силу отсутствия открытых законов большинство решений программистских задач находится методом проб и ошибок. У программистов должно быть право на ошибку. Это нормальный атрибут творческого поиска. На ошибках учатся. Умный не тот, кто не делает ошибок, а тот, кто их не повторяет.
Одним из элементов свободы является отсутствие жестких сроков на выполнение задачи. Для профессиональных управленцев отсутствие жестких сроков может звучать как нонсенс, но в творческой деятельности это один из обязательных элементов. Бессмысленно заставлять программистов работать больше, устраивать сверхурочные авралы и субботники. Работать больше, это совсем не значит — работать продуктивнее. Скорее наоборот. Излишнее давление и суета приводят к непродуманным решениям и многочисленным последующим переработкам.
Задание. Пользуясь текстом, найти ответы на следующие вопросы:
-
С каким видом деятельности человека связано программирование?
-
Что такое программа и что важно учесть при её составлении?
-
Кто пишет программы? Чем должен обладать человек этой профессии?
-
Как пишут программы? При ответе на вопрос рассмотреть два способа программирования:
а) ручное программирование (в чем заключается, его недостатки и достоинство);
б) автоматическое программирование (в чем заключается и его достоинства по сравнению с ручным программированием).
5. Что такое программа – транслятор? Виды трансляторов и их характеристика
6. Какими особенностями обладает программирование?
3