Глава 1. Увод

Цел: да се придобие представа за архитектурите, програмирането и езиците за програмиране и процеса на превръщане на код в изпълнима програма.

Основни понятия

История на компютри

Първо поколение (1642-1945)

Може би първия човек който успял за създаде механичен компютър е Блез Паскал (1623-1662), на когото е кръстен езика Pascal. Той създава първата механична сметачна машина наречена Паскалина, която можела да извършва събиране и изваждане. През 1673 г. Готфрид Вилхелм Лайбниц (1646-1716) подобрява машината на Паскал, като добавя възможност за умножение и деление (Практически калкулатор).

Сметачната машина на Лайбниц
Фигура 1. Сметачната машина на Лайбниц

Горе долу 150 години няма никакви сериозни подобрения в областта на компютрите. Но преди края на 19 век Чарлз Бабидж (1791-1871) проектира и започва да строи първия механичен компютър, наречен Аналитична машина. За разлика от предишния си опит за компютър, машината на Бабидж била програмируема, имала "памет", "процесор", вход за програмата и изход за програмата. Първата програма за машината била написана от Ада Лъвлейс (1815-1852), която е и първият програмист в историята. По-късно в Америка, Джон Атанасов и George Stibitz, създават едни от първите електронни компютри. Компютъра на Атанасов макар не довършен е ползвал двоична система и е имал памет в модерното и значение. Компютъра на Stibitz е имал по-голям успех и е бил завършен като той е изнесъл лекция за него.

Второ поколение (1945-1955)

В тези години се създава машината COLOSSUS, която декодира машината Енигма. Също така благодарение на работата свършена от Атанасов и Stibitz, Джон Маучли и Джон Преспър Екерт създават първия напълно електронен компютър ENIAC. ENIAC е бил огромен компютър, който е заемал цяла стая, но е дал началото на нова ера в компютрите. По-нататък един от хората в ENIAC проекта Джон Вон Нойман, който бил гений в математика и физиката, могъл да говори много езици и можел да преразкаже всичко което е чел, чул и видял, създава архитектурата на компютрите, която се ползва и до днес.

Набързо до днешни дни (1956-)

Първите езици 40-60-те години

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

С тези езици хората разбрали, че езика е по-добре да е абстракция, по-близка до човешката мисъл отколкото до машиния език

Софтуерните инженери 70-те години

В този период се появяват няколко по-модерни езика, както и операционната система UNIX основата на MacOS, Linux и мн. други
Езиците по това време са

Персонални компютри 80-те години

В този период компютрите почват да навлизат в домовете на хората. Тук се въвежда и първия език, който се търси днес в ИТ пазара C++, като той запазва синтаксиса на C но добавя обектно ориентираните елементи на Smalltalk. Появяват се първите версии на Word, Excel и някои от големите програми, които знаем в днешно време. За първи път софтуера почва да се продава като продукт

Интернет и глобализация 90-те години

Тук се появяват нови езици с по-лесна интеграция в модерния свързан свят. Първия е Java, който и в днешно време е най-популярния език за web приложения (3 миларда устройства изпълняват програма написана на java). Втория важен език за този период е javascript, който добавя динамични елементи към всички уеб-сайтове и част от приложенията, които ползваме всеки ден включително и приложението, което се ползва за да се напишат тези записки (VSCode). Също така почва софтуера активно да се разпространява по интернет и се въвежда open-source културата.

Мобилни приложение и Web 2000-те

Появяват се съвременни езици като PHP, Python, C# и Ruby и платформи като .NET. Почват да се пишат програми за телефони за операционните системи IOS и Android (Пак базирана на Unix). Въвеждат се на пазара първите социални мрежи, като те изместват класическите десктоп приложения.

Облачна инфраструктура и изкуствен интелект 2010г-

Въвеждат се първите библиотеки за машинно самообочение PyTorch, Tensorflow на Python. Титаните на IT индустрията създават възможност за наемане на тяхната инфраструктура (AWS, Azure, Google cloud). Вече често програмите почват да работят на няколко компютъра, наречено още дистрибутирано програмиране..

Защo C++

Много хора, като започват да пишат на C++ и виждат сравнения с другите езици често се питат защо да учат C++ когато има по-лесни езици като Python, JavaScript или Java. Наистина C++ е по-сложен от тези езици, но той има няколко предимства, които го правят много подходящ за изучаване на програмирането. C++ ни предоставя възможност да придобием разбиране на по-основно ниво. А всеки знае че ако нямаме основи, няма как да станем добри в нещо.

Защo C

Много хора, като започват да пишат на C и виждат сравнения с другите езици често се питат защо да учат C когато има по-лесни езици като Python, JavaScript или Java. Наистина C е по-сложен от тези езици, но той има няколко предимства, които го правят много подходящ за изучаване на програмирането. C ни предоставя възможност да придобием разбиране на по-основно ниво. А всеки знае че ако нямаме основи, няма как да станем добри в нещо.

Програмите на C и етапите на обработката

Тук има кратка диаграма описваща процеса на компилация

          flowchart TD
          A[Изходен код на C] --> |Препроцесор| B[обработен код]
          B --> |Компилатор| C[Изпълним файл]
          style A fill:#12161b,stroke:#4da3ff,stroke-width:2px,color:#e6eaf2
          style B fill:#12161b,stroke:#4da3ff,stroke-width:2px,color:#e6eaf2
          style C fill:#12161b,stroke:#4da3ff,stroke-width:2px,color:#e6eaf2
      

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

Някои от популярните компилатори, които може да срещнете са

Инструменти за разработка

В този курс най-удобните инструменти за писане на код според вашата операционна система са следните

Относно Visual studio code (VSCode): инсталацията е малко по-сложна за хора, които за първи път го правят но може да следвате тази документация

Кратък тест

  1. Кой е първия програмист в историята?
  2. Какво прави препроцесора?
  3. На каква операционна система са базирани MacOS и Linux?