Програмирането е компютърна наука и дял от математиката-информатиката, която се занимава с методите и средствата за създаване на компютърни програми. Компютърната програма представлява алгоритъм, който може да бъде „разбран“ и изпълнен от компютъра. При програмирането се използват езици за програмиране, на които се записват изходните текстове на програмата.[1]

Програма за колцентрове, писана на Java

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

В сферата на софтуерното инженерство, програмирането е част от процеса на разработка на софтуер.

В някои специализирани приложения или специфични ситуации, програма може да бъде написана или модифицирана чрез директно зареждане на нужните инструкции на машинен код и тяхното изпълнение.

Софтуерен инженерРедактиране

Софтуерният инженер (програмист) е математик / софтуерен инженер, който пише компютърни програми. Работата на програмиста обикновено включва:

История на програмиранетоРедактиране

Най-старата машина за програмиране (това е машина, чието поведение може да се контролира от промените на програма) е програмният хуманоиден робот на Ал Джазари през 1206 г. Външният вид на робота на Ал Джазари е механизирана лодка с четирима автоматични музиканти, която се носи по езерото и забавлява гостите по време на кралските балове. Неговият механизъм включва програмируеми барабани с ключе, захванати на малка ръчка, които отмерват ритъма. Барабанистът е можел да изпълнява различни ритми в зависимост от положението на ключето.

Често за образец на ранното изкуство е считан жакардовият стан, създаден през 1801 г. В тази машина се използвали картонени карти с дупки по тях, като дупките показват извивките на дрехата. Така в зависимост от картите, които му се поставят, станът можел да произвежда напълно различни дрехи. Такива карти е използвал и Чарлз Бабидж през 1830 г., за да управлява своята сметачна машина. Тук отворите се използват за контрол на машината.

 
Перфокарта на Холерит

Това нововъведение по-късно е подобрено от Херман Холерит, който прилага перфорацията по определена схема за въвеждане на данни. Холерит изобретява специална перфорираща машина за въвеждане на големи масиви от данни, наречена табулатор. Тя се основава на релета и работи с перфокарти, които получават неговото име. Освен тях изобретява и четец за тези карти. Първото приложение на машината е при обработката на резултатите от преброяване на населението в САЩ през 1890 г. когато резултатите са обработени много по-евтино от очакваното и преди определения срок (при предишното преброяване обработката отнела години)[3]. Следват усъвършенствувания на машината и през 1906 г. моделът Type I Tabulator вече е снабден с комутационен панел и позволява бързо и автоматизирано да се изпълняват различни задачи в счетоводството и складовото стопанство (първата крачка към програмирането).

 
Ада Лъвлейс се счита за първата програмистка

През 1896 г. Холерит основава компанията Tabulating Machine Company (днес IBM). До края на 40-те години имало различни видове машини за програмиране с комутационен панел, които да изпълняват четенето на картите. Ранните компютри също са били програмирани чрез комутационни панели.

Изобретението на Джон фон Нойман позволява програмите да бъдат запаметени в компютърна памет. Ранните програми трябвало стриктно да задават инструкциите на отделната машина, обикновено в бинарен вид. Всеки модел компютър се нуждаел от различни команди за изпълняването на една и съща задача. По-късно са създадени езиците за програмиране, които позволяват на програмистите да представят всяка инструкция в текстов формат, като въвеждат абревиатури за всички операции, вместо да ползват числа и специфични адреси в символен формат. През 1954 г. е създаден FORTRAN – първият език на високо ниво. Това позволило на програмистите да извършват изчисленията директно чрез задаване на нужната формула. Изходният текстов код на програмата се превежда до машинни инструкции чрез специална програма, наречена компилатор. След това са създадени още много езици за програмиране (някои от тях с комерсиална цел) – като например COBOL. Програмите обаче все още се въвеждат с перфокарти или перфолента.

 
Кутия с перфокарти за няколко различни програмни пакета от ранните години на програмирането

Към края на 60-те години устройствата за съхранение на данни и компютърните терминали се развиват достатъчно, за да стане възможно програмите да бъдат писани директно на клавиатурата. Създадени са текстови редактори, които позволяват на програмистите да въвеждат, редактират и обработват кода си много по-лесно, отколкото с перфокартите.

Модерно програмиранеРедактиране

Изисквания за качествоРедактиране

Какъвто и да е пътят за разработване, финалната програма трябва да отговаря на някои основни свойства. Следните свойства са сред най-важните:

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

Четимост на изходния кодРедактиране

В компютърното програмиране четимостта се отнася до лекотата, с която човешкият четец може да разбере целта, контролния поток и работата на изходния код. Това засяга аспектите на качеството по-горе, включително преносимост, ползваемост и най-важното поддръжка.

Четимостта е важна, защото програмистите прекарват по-голямата част от времето си в четене, опитвайки се да разберат и модифицират съществуващ изходен код, вместо да пишат нов изходен код. Нечетливият код често води до грешки, неефективност и дублиран код. Проучване установи, че няколко прости трансформации на четливост правят кода по-кратък и драстично намаляват времето за разбирането му.

Следването на последователен стил на програмиране често помага за четливостта. Въпреки това, тя е нещо повече от стил на програмиране. Много фактори, които имат малко или нищо общо със способността на компютъра да компилира и изпълнява ефективно кода, допринасят за четливостта. Някои от тях са:

Аспектите на презентация (като тире, нови редове, цвят Отбелязването и т.н.) често са разглеждани от изходния код редактор , но аспектите съдържание отразяват талант и умения на програмист.

Различни езици за визуално програмиране също са разработени с намерението да се разрешат проблемите с четливостта чрез приемане на нетрадиционни подходи към структурата и показването на кода. Интегрираните среди за разработка (IDE) имат за цел да интегрират цялата подобна помощ. Техники като рефакторинг на код могат да подобрят четливостта.

Сложност на алгоритъмаРедактиране

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

Езици за програмиранеРедактиране

Различните езици за програмиране поддържат различни стилове на програмиране (парадигма на програмиране). Според стила основните сред тях са: обектно-ориентирано, императивно, функционално и декларативно [4]. Според друг източник обектно-ориентираното програмиране спада към императивния стил, а функционалното програмиране спада към декларативния:[5]

  • Императивни
    • Процедурни
    • Рефлективни
  • Декларативни
    • Функционални
    • Логически
    • Функционални + Логически
    • Хибридни (декларативни + императивни)
      • Генетични
  • Структурни
    • Обектно ориентирани

Според предназначението си езиците за програмиране биват с общо предназначение и специализирани. Популярни съвременни езици за програмиране с общо предназначение са Java, C#, Object Pascal, C, C++, PHP, Perl. Специализирани езици за програмиране са например SQL (за заявки към системи за управление на бази от данни), JavaScript (за реализиране на динамично поведение в уеб сайтове от страна на клиента) и т.н.

Избирането на език за програмиране е свързано с много съображения като например фирмена политика, оперативна съвместимост, наличност на библиотеки или лични предпочитания.

ИзточнициРедактиране

  1. Желязко Желязков (и други колектив), Информатика, Учебници за ВУЗ
  2. Информатика, Учебници за ВУЗ, ИУ – Варна, 2013
  3. U.S. Census Bureau: Tabulation and Processing
  4. ((en)) Nørmark, Kurt. Overview of the four main programming paradigms. Aalborg University, 9 май 2011. Линк ат 22 септември 2012.
  5. Принципи на Функционалното програмиране. Увод в Scheme. // Посетен на 29.12.2014.

ЛитератураРедактиране

  • Дейкстра Э., Дисциплина программирования – 1-е изд. – Москва, 1978. – 275 с.
  • Дональд Кнут., Искусство программирования, В четырёх томах, Москва, 2001 − 2013

Вижте същоРедактиране

    Тази страница частично или изцяло представлява превод на страницата „Computer programming“ в Уикипедия на английски. Оригиналният текст, както и този превод, са защитени от Лиценза „Криейтив Комънс – Признание – Споделяне на споделеното“, а за съдържание, създадено преди юни 2009 година – от Лиценза за свободна документация на ГНУ. Прегледайте историята на редакциите на оригиналната страница, както и на преводната страница, за да видите списъка на съавторите. ​

ВАЖНО: Този шаблон се отнася единствено до авторските права върху съдържанието на статията. Добавянето му не отменя изискването да се посочват конкретни източници на твърденията, които да бъдат благонадеждни.​