Глава 1. Увод
Основни понятия
- Архитектура: съвкупност от характеристики, определящи функционалната, логическата и структурната организация на компютрите.
- Език за програмиране: език, предназначен за изразяване на изчисления, които могат да се извършат от машина.
- Компютър: машина, която може да замени един човек, като изпълнява набор от фиксирани инструкции вместо него.
- Програма: редица от такива инструкции.
- Машинен език: примитивните инструкции, които изграждат една програма.
- Компилатор: програма която приема програма написана на език за програмиране на високо ниво и го превръща в програма с примитивни инструкции.
История на компютри
Първо поколение (1642-1945)
Може би първия човек който успял за създаде механичен компютър е Блез Паскал (1623-1662), на когото е кръстен езика Pascal. Той създава първата механична сметачна машина наречена Паскалина, която можела да извършва събиране и изваждане. През 1673 г. Готфрид Вилхелм Лайбниц (1646-1716) подобрява машината на Паскал, като добавя възможност за умножение и деление (Практически калкулатор).
Горе долу 150 години няма никакви сериозни подобрения в областта на компютрите. Но преди края на 19 век Чарлз Бабидж (1791-1871) проектира и започва да строи първия механичен компютър, наречен Аналитична машина. За разлика от предишния си опит за компютър, машината на Бабидж била програмируема, имала "памет", "процесор", вход за програмата и изход за програмата. Първата програма за машината била написана от Ада Лъвлейс (1815-1852), която е и първият програмист в историята. По-късно в Америка, Джон Атанасов и George Stibitz, създават едни от първите електронни компютри. Компютъра на Атанасов макар не довършен е ползвал двоична система и е имал памет в модерното и значение. Компютъра на Stibitz е имал по-голям успех и е бил завършен като той е изнесъл лекция за него.
Второ поколение (1945-1955)
В тези години се създава машината COLOSSUS, която декодира машината Енигма. Също така благодарение на работата свършена от Атанасов и Stibitz, Джон Маучли и Джон Преспър Екерт създават първия напълно електронен компютър ENIAC. ENIAC е бил огромен компютър, който е заемал цяла стая, но е дал началото на нова ера в компютрите. По-нататък един от хората в ENIAC проекта Джон Вон Нойман, който бил гений в математика и физиката, могъл да говори много езици и можел да преразкаже всичко което е чел, чул и видял, създава архитектурата на компютрите, която се ползва и до днес.
Набързо до днешни дни (1956-)
- 1950–60-те – Първи компютри с вакуумни лампи → транзистори → интегрални схеми. Миниатюризация.
- 1970-те – Микропроцесори, персонални компютри, първи операционни системи.
- 1980–90-те – Масово разпространение на PC, интернет, графични интерфейси.
- 2000-2025-те – Смартфони, безжични мрежи, облачни услуги, мултиядрени процесори, квантови компютри.
Първите езици 40-60-те години
В началото програмирането е било много трудно, защото се е налагало да се пише на машинен език. Но тъй като било много сложно да се пише на машинен език, започнали да се създават езици от по-високо ниво. Първите такива били
- Cobol - за бизнес приложения
- Fortran - за научни изчисления
- Lisp - за изкуствен интелект и ползва техники от ламбда смятането
- Algol - въвежда структурираното програмиране
С тези езици хората разбрали, че езика е по-добре да е абстракция, по-близка до човешката мисъл отколкото до машиния език
Софтуерните инженери 70-те години
В този период се появяват няколко по-модерни езика, както и операционната система UNIX основата на MacOS, Linux и мн. други
Езиците по това време са
- C - системно програмиране
- Pascal - за обучение на програмисти
- Smalltalk - обектно ориентирано програмиране
- Prolog - логическо програмиране
Персонални компютри 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
В тази диаграма се изпускат много от финните детайли на компилация, но това което ви трябва да знаете е следното
- Препроцесора - замества шаблони в изходния код според някакви правила
- Компилатора - превежда кода от C в изпълним код за дадената операционна система
Някои от популярните компилатори, които може да срещнете са
- GCC - Стои за GNU Compiler Collection, класическия компилатор за C/C++
- Clang - компилатор от проекта LLVM, по-модерен и може би по-добър
- MSVC - Microsoft Visual C++, компилатора на Microsoft за C/C++
Инструменти за разработка
В този курс най-удобните инструменти за писане на код според вашата операционна система са следните
- Windows - Visual studio
- Linux - Visual studio code (VSCode)
- MacOS - Visual studio code (VSCode)
Кратък тест
- Кой е първия програмист в историята?
- Какво прави препроцесора?
- На каква операционна система са базирани MacOS и Linux?