Кіріспе
Компьютерлік ғылымның тарихы қазіргі заманғы компьютерлік ғылымнан көп бұрын басталды, көбінесе математика немесе физика сияқты салаларда көрініс берді. Алдыңғы ғасырлардағы жетістіктер біз бүгін компьютерлік ғылым деп білетін ғылымның пайда болуын болжады. Механикалық өнертабыстар мен математикалық теориялардан қазіргі заманғы компьютерлік ұғымдар мен машиналарға дейінгі осы даму, маңызды академиялық саланың қалыптасуына, Батыс әлемінде үлкен технологиялық прогреске және жаһандық сауда мен мәдениеттің негізін қалады.
The history of computer science began long before the modern discipline of computer science, usually appearing in forms like mathematics or physics. Developments in previous centuries alluded to the discipline that we now know as computer science. This progression, from mechanical inventions and mathematical theories towards modern computer concepts and machines, led to the development of a major academic field, massive technological advancement across the Western world, and the basis of a massive worldwide trade and culture.
Тарихқа дейінгі дәуір
Есептеуде қолданылатын ең ерте белгілі құрал – б.з.д. 2700 және 2300 жылдар аралығында Сумерде жасалған абакус. Сумерліктердің абакусы олардың алтылық сандар жүйесінің дәрежесін анықтайтын, бірінен соң бірі келген бағаналар тізімінен тұрды. Оның бастапқы қолданылуы құмға таспен сызылған сызықтар арқылы болды. Қазіргі заманғы үлгідегі абакус, мысалы, қытай абакусы, бүгін де есептеу құралы ретінде қолданылады. Б.з.д. V ғасырда ежелгі Үндістанда грамматик Панини Санскрит грамматикасын 3959 ережеден тұратын «Аштадхьяи» деп аталатын жинақта қалыптастырды, ол өте жүйелі және техникалық болды. Панини метаережелерді, түрлендірулерді және рекурсияларды пайдаланды. Антикитера механизмі ертедегі механикалық аналогтық компьютер саналады. Ол астрономиялық жағдайларды есептеу үшін жасалған. Ол 1901 жылы Грекияның Антикитера аралынан, Китера және Крит арасындағы кеме апаттық жерінен табылған және шамамен б.з.д. 100 жылға дейін даулануда. Сондай-ақ, Жәбір ибн Афлахтың «Торкетум» атты еңбегі бар. Саймон Сингхтің сөзіне сәйкес, мұсылман математиктері криптография саласында да маңызды жетістіктерге қол жеткізді, мысалы, Әл-Киндидің криптоанализ және жиілік талдауын дамытуы. Бағдарламаланатын машиналарды мұсылман инженерлері де ойлап тапқан, мысалы, Бану Муса бауырларының автоматты флейта ойнатқышы. 14 ғасырдағы Еуропада осыған ұқсас күрделіліктегі технологиялық артефакттар, механикалық астрономиялық сағаттар түрінде пайда болды. Джон Непер 17 ғасырдың басында есептеу мақсатында логарифмдерді ашқаннан кейін, өнертапқыштар мен ғалымдар есептеу құралдарын жасауда үлкен прогресс жасады. 1623 жылы Вильгельм Шикард Иоганн Кеплердің тапсырысы бойынша есептеу машинасының жобасын жасады, оны «Есептеу сағаты» деп атады, бірақ 1624 жылы өрт салдарынан жойылған прототипінен кейін жобадан бас тартты. 1640 жылы француз математигі Блез Паскаль грек математигі Александриялық Герон сипаттаған үлгіге негізделген механикалық қосу құрылғысын құрастырды. 1672 жылы Готфрид Вильгельм Лейбниц 1694 жылы аяқтаған «Баспалы есептегіш» құрылғысын ойлап тапты. 1837 жылы Чарльз Бэббидж алғаш рет өзінің Аналитикалық машинасының сипаттамасын жасады, ол қазіргі заманғы компьютердің алғашқы жобасы ретінде қабылданады. Аналитикалық машинасы кеңейтілетін жадыға, арифметикалық бөлімге және логикалық өңдеу мүмкіндіктеріне ие болды, ол циклдар мен шартты тармақтану арқылы бағдарламалау тілін түсіндіре алды. Салынбаған болса да, жобасы кеңінен зерттелді және Тьюрингке теңдес екені анықталды. Аналитикалық машинасының жады сыйымдылығы 1 килобайттан кем және сағаттың жылдамдығы 10 Герцтен кем болуы керек еді. Алғашқы заманауи компьютерлерді құру үшін математика және электроника теориясында маңызды жетістіктер қажет болды.
Technological artifacts of similar complexity appeared in 14th century Europe, with mechanical astronomical clocks. When John Napier discovered logarithms for computational purposes in the early 17th century, there followed a period of considerable progress by inventors and scientists in making calculating tools. In 1623 Wilhelm Schickard designed a calculating machine as a commission for Johannes Kepler which he named the Calculating Clock, but abandoned the project, when the prototype he had started building was destroyed by a fire in 1624. Around 1640, Blaise Pascal, a leading French mathematician, constructed a mechanical adding device based on a design described by Greek mathematician Hero of Alexandria. Then in 1672 Gottfried Wilhelm Leibniz invented the Stepped Reckoner which he completed in 1694. In 1837 Charles Babbage first described his Analytical Engine which is accepted as the first design for a modern computer. The analytical engine had expandable memory, an arithmetic unit, and logic processing capabilities able to interpret a programming language with loops and conditional branching. Although never built, the design has been studied extensively and is understood to be Turing equivalent. The analytical engine would have had a memory capacity of less than 1 kilobyte of memory and a clock speed of less than 10 Hertz. Considerable advancement in mathematics and electronics theory was required before the first modern computers could be designed.
Готфрид Вильгельм Лейбниц
1702 жылы Готфрид Вильгельм Лейбниц бинарлық сандық жүйе туралы жазған еңбектерімен логиканы формалды, математикалық тұрғыдан дамытты. Лейбниц екілік жүйені жеңілдетіп, жалғау, ажырату, жоққа шығару, сәйкестік, кіріктіру және бос жиын сияқты логикалық қасиеттерді тұжырымдады. Ол Лагранж интерполяциясы мен алгоритмдік ақпарат теориясын болжады. Оның «Калькуль-рациоцинатор» еңбегі универсалды Тьюринг машинасының кейбір аспектілерін көре білді. 1961 жылы Норберт Винер Лейбницті кибернетиканың меценаты деп санау қажет екенін ұсынды. Винердің сөзін келтірсек: «Шындығында, есептеу машинасының жалпы идеясы – Лейбництің «Калькуль-рациоцинатор» еңбегінің механикалық түрде орындалуынан басқа ештеңе емес». Бірақ Джордж Бульдің 1854 жылы өзінің Буль алгебрасын жариялап, есептеу процестерін математикалық модельдеуге мүмкіндік беретін толық жүйе құруына бір ғасырдан астам уақыт кетті. Осы кезде екілік үлгіде жұмыс істейтін алғашқы механикалық құрылғылар ойлап табылды. Өнеркәсіптік революция көптеген тапсырмаларды механикаландыруға көмектесті, соның ішінде тоқыма өнеркәсібі де. 1801 жылы Жозеф Мари Жаккардтың тоқыма станогын перфокарталар басқарды, онда картадағы тесік екілік бірді, ал тесік жоқ жер екілік нөлді білдірді. Жаккардтың тоқыма станогы компьютер емес еді, бірақ машиналардың екілік жүйелермен басқарылуы мүмкін екенін және екілік ақпаратты сақтауға болатынын көрсетті. Леонардо Торрес Квеведо және Ванневар Буш сияқты тағы екі ғалым Бэббиджтің жұмысына негізделген зерттеулер жүргізді. 1914 жылғы «Автоматика туралы эсселерінде» Торрес тек оқу бағдарламасымен басқарылатын аналитикалық электромеханикалық машинаны жобалады және қозғалатын үтірлі арифметика идеясын енгізді. 1920 жылы арифмометрдің 100 жылдығын тойлау үшін ол Парижде арифметикалық бөлімге қосылған электромеханикалық арифмометрді ұсынды, онда командаларды теруге және нәтижелерді автоматты түрде басып шығаруға болады. Буштың 1936 жылғы «Инструменталды талдау» мақаласында Бэббиджтің дизайнын жүзеге асыру үшін қолданыстағы IBM перфокарталарын пайдалану туралы мәселелер талданды. Сол жылы ол электрондық цифрлық компьютер құру мәселелерін зерттеу үшін «Жылдам арифметикалық машина» жобасын бастады.
Чарльз Сандерс Пирс және электрлік коммутациялық схемалар
1886 жылы Чарльз Сандерс Пирс логикалық операцияларды электрлік коммутациялық схемалар арқылы жүзеге асыру мүмкіндігін хат арқылы сипаттады. 1880-81 жылдары ол NOR қақпаларын ғана (немесе NAND қақпаларын ғана) пайдаланып, барлық басқа логикалық қақпалардың функцияларын қайта жасай алатынын көрсетті, бірақ бұл жұмысы 1933 жылға дейін жарияланбады. Алғашқы ресми дәлелді 1913 жылы Генри М. Шеффер жариялағандықтан, NAND логикалық операциясы кейде «Шеффер соққысы» деп аталады, ал логикалық NOR кейде «Пирс жебесі» деп аталады. Осы себепті, бұл қақпалар кейде әмбебап логикалық қақпалар деп аталады. Соңында, логикалық операцияларды орындау үшін релелер вакуумдық түтіктермен алмастырылды. Ли Де Форест 1907 жылы Флеминг клапанына енгізген өзгерістерін логикалық қақпа ретінде қолдануға болады. Людвиг Витгенштейн 16 қатарлы шындық кестесінің нұсқасын «Tractatus Logico-Philosophicus» (1921) еңбегіндегі 5.101-қадам ретінде ұсынды. Вальтер Боте, кездейсоқ тізбектің авторы, 1954 жылы физика саласындағы Нобель сыйлығының бір бөлігін алды, себебі ол 1924 жылы алғашқы заманауи электрондық ЖӘНЕ қақпасын жасаған болатын. Конрад Цузе өзінің Z1 компьютері үшін (1935-1938 жылдары) электромеханикалық логикалық қақпаларды жобалап және құрастырды. 1930 жылға дейін және оның кезеңінде электр инженерлері математикалық және логикалық есептерді шешу үшін электрондық схемаларды құрастыра алды, бірақ көптеген жағдайларда бұл жұмыстар теориялық негізден мүлдем айырылған, тек қана тәжірибелік тәсілмен жасалған болатын. Бұл 1930 жылдардағы коммутациялық схемалар теориясының дамуымен өзгерді. 1934-1936 жылдары Акира Накасима, Клод Шеннон және Виктор Шетаков екі мәнді Буль алгебрасы коммутациялық схемалардың жұмысын сипаттауға қабілетті екенін көрсететін бірнеше мақала жариялады. Электрлік коммутаторлардың қасиеттерін логикалық есептерді шешу үшін пайдалану – бұл барлық электрондық цифрлық компьютерлердің негізгі ұғымы болып табылады. Коммутациялық схемалар теориясы қазіргі заманғы технологияның барлық саласында цифрлық жүйелерді жобалау үшін қажетті математикалық негіздер мен құралдарды ұсынды.
Алан Тьюринг және Тьюринг машинасы
1920 жылдарға дейін компьютерлер (кейде есептеушілер) есептеулерді орындайтын адамдар, кеңсе қызметкерлері болды. Оларды әдетте физиктер басқарды. Сауда, мемлекеттік органдар мен ғылыми-зерттеу институттарында мыңдаған компьютерлер жұмыс істеді. Көптеген кеңсе қызметкерлері, адам-компьютерлер ретінде жұмыс істегендер әйелдер болды. Біреулері күнтізбелер үшін астрономиялық есептеулер жасаса, енді біреулері әскери мақсаттар үшін баллистикалық кестелер құрады. 1920 жылдан кейін «есептеу машинасы» термині адам-компьютердің жұмысын атқаратын кез келген машинаны білдірді, әсіресе Черч-Тьюринг тезисінің тиімді әдістеріне сәйкес келетін машиналарды. Тезисте математикалық әдіс тиімді деп есептеледі, егер оны қағаз бен қаламмен, қажет болғанша, және ешқандай тапқырлық немесе көрегендіксіз орындала алатын нұсқаулар тізімі ретінде жазуға болады. Үздісіз мәндермен есептеуді жүзеге асыратын машиналар аналогты машиналар деп белгіленді. Олар бұрыш сияқты үздісіз сандық шамаларды көрсететін механизмдерді пайдаланды. Цифрлық машиналар, аналогты машиналардың қарама-қарсылығында, сандық мәннің күйін көрсетуге және әрбір жеке цифрды сақтауға қабілетті болды. Цифрлық машиналар жылдам жад құрылғылары ойлап табылғанға дейін айырмашылық машиналарын немесе релелерді пайдаланды. «Есептеу машинасы» термині 1940 жылдардың соңында электронды цифрлық машиналардың пайда болуымен бірге «компьютер» терминіне ұласты. Бұл компьютерлер бұрынғы адам-клерктер орындаған есептеулерді орындай алды. Цифрлық машиналар сақтайтын мәндер аналогты құрылғылар сияқты физикалық қасиеттермен байланысты болмағандықтан, цифрлық жабдықтарға негізделген логикалық компьютер «таза механикалық» деп сипатталатын кез келген нәрсені іске асыра алды. Алан Тьюринг жасаған теориялық Тьюринг машинасы – мұндай аппараттардың қасиеттерін зерттеу үшін жасалған гипотетикалық құрылғы. Қазіргі заманғы компьютерлік ғылымның математикалық негіздерін Курт Гёдель 1931 жылы жариялаған толымсыздық теоремасымен қалады. Бұл теоремада ол формальды жүйеде дәлелдеуге және жоққа шығаруға болатын нәрселердің шектері бар екенін көрсетті. Бұл Гёдельдің және басқалардың осы формальды жүйелерді, соның ішінде mu рекурсивті функциялар мен лямбда анықталатын функциялар сияқты ұғымдарды анықтап, сипаттау жұмысына әкелді. 1936 жылы Алан Тьюринг және Алонзо Черч тәуелсіз және бірлесіп алгоритмнің формализациясын, есептеуге болатын нәрселердің шектерін және есептеудің «таза механикалық» моделін енгізді. Бұл Черч-Тьюринг тезисіне айналды, ол электронды компьютерлер сияқты механикалық есептеу құрылғыларының табиғаты туралы гипотеза. Тезисте кез келген есептеуді жеткілікті уақыт және жад кеңістігі болған жағдайда компьютерде жұмыс істейтін алгоритм орындай алады делінеді. Бұл гипотетикалық машиналар есептеу қабілетінің шектеулерін ескере отырып, математикалық түрде не есептеуге болатынын формалды түрде анықтау үшін жасалды. Егер Тьюринг машинасы тапсырманы орындай алса, ол Тьюрингтік есептеуге жатады. Ол ARC, SEC (Simple Electronic Computer) және APE(X)C машиналарын жобалауға көмектесті.
Алғашқы компьютерлік жабдықтар
Әлемдегі алғашқы электрондық цифрлық компьютер, Атанасофф-Берри компьютері, 1939 жылдан 1942 жылға дейін Айова штатының кампусында физика және математика профессоры Джон В. Атанасофф пен инженерлік аспирант Клиффорд Берри құрастырды. 1941 жылы Конрад Цузе әлемдегі алғашқы функционалдық бағдарламамен басқарылатын компьютерді – Z3 жасады. 1998 жылы ол принцип бойынша Тьюринг толық екені көрсетілді. Цузе сонымен қатар S2 есептеу машинасының жобасын жасады, ол алғашқы процестерді басқару компьютері саналады. 1941 жылы ол әлемдегі алғашқы коммерциялық компьютер болып табылатын Z4 компьютерін шығарып, алғашқы компьютерлік бизнес компанияларының бірін құрды. 1946 жылы ол бірінші жоғары деңгейдегі бағдарламалау тілін – Plankalkül-ді жасады. 1948 жылы Манчестер Бэби аяқталды; ол әлемдегі алғашқы электрондық цифрлық компьютер болды, ол қазіргі заманғы компьютерлер сияқты жадында сақталған бағдарламаларды іске қосты. Тьюрингтің ACE үшін жасаған жобасы бүгінгі RISC архитектурасымен көп ортақ белгілері бар және ол оның заманының стандарттарымен салыстырғанда өте үлкен болған, алғашқы Macintosh компьютерінің жады сыйымдылығына шамалас жоғары жылдамдықты жадты қажет етті. "Қате" терминінің ойлап табылуы жиі, бірақ дұрыс емес, АҚШ Әскери-теңіз күштерінің болашақ контр-адмиралы Грейс Хопперге байланысты айтылады, ол 1945 жылдың 9 қыркүйегінде "қатені" тіркеген деген болжам бар. Алайда, көптеген басқа есептер осы мәліметтерге қайшы келеді. Осы есептерге сәйкес, операторлар осы "оқиғаны" – жәндікпен бірге және "қате табылуының алғашқы нақты жағдайы" деген жазумен 1947 жылдың 9 қыркүйегінде тіркеген (толық ақпарат алу үшін бағдарламалық жасақтама қатесіне қараңыз).
Винер және кибернетика
Норберт Винер жау ұшақтарын анықтау үшін радарлық кескіндерді түсіндіретін зениттік жүйелермен тәжірибе жасап, грек тіліндегі "бағыттаушы" деген мағынаны білдіретін "кибернетика" терминін ойлап тапты. 1948 жылы ол "Кибернетика" кітабын жариялады, ол жасанды интеллектке зор әсер етті. Винер сондай-ақ есептеу, есептеу машиналарын, жад құрылғыларын және басқа да танымдық ерекшеліктерді ми толқындарын талдаумен салыстырды.
Джон фон Нейман және фон Нейман архитектурасы
1946 жылы компьютерлік архитектураның моделі енгізілді және ол Фон Нейман архитектурасы деп аталды. 1950 жылдан бері Фон Нейман моделі келесі компьютерлік жобаларда біркелкілікке қол жеткізуге мүмкіндік берді. Фон Нейман архитектурасы инновациялық деп есептелді, себебі ол машиналық нұсқаулар мен деректердің жад кеңістігін бөлісуіне мүмкіндік беретін идеяны ұсынды. Фон Нейман моделі үш негізгі бөліктен тұрады: арифметикалық-логикалық құрылғы (ALU), жад және нұсқауларды өңдеу құрылғысы (IPU). Фон Нейман машинасының жобасында IPU жадқа адрестерді жібереді, ал жад, егер нұсқау ізделіп жатса, IPU-ға, ал дерек ізделіп жатса ALU-ға бағытталады. 1955 жылдың 31 тамызында Джон Маккарти, Марвин Л. Мински, Натаниел Рочестер және Клод Э. Шенноннан құралған зерттеу жобасы ұсынылды. Ресми жоба 1956 жылы басталды және жасанды интеллекттің құрылымын жақсырақ түсінуге көмектесетін бірнеше маңызды бөліктерден тұрды. Маккарти және оның әріптестерінің автоматты компьютерлерге қатысты идеясы – машина бір тапсырманы орындай алса, оны компьютермен, қажетті нәтижелерді алу үшін бағдарлама құрастыру арқылы растау керек. Сондай-ақ, олар адам миының өзінің күрделілігіне байланысты, машинаның өзі емес, бағдарламаның оны қайталай алмайтынын анықтады. Ондай күрделі бағдарламаны жасауға қажетті білім сол кезде жетілмеген. Бұл идеяның негізі – адамдардың өз тілін қалай түсінетіні, сөйлемдерді қалай құрастыратыны, түрлі мағыналар мен ережелерді қалай беретіні және оларды машинамен салыстыру. Компьютерлер аппараттық деңгейде ғана түсінеді. Бұл тіл екілік кодта (1-лер мен 0-лер) жазылады. Ол компьютерге белгілі бір аппаратты орындау үшін ережелерді беретін нақты форматта жазылуы керек. Минскидің әдісі осы жасанды нейрондық желілердің адам миына ұқсас қасиеттерге ие болуын анықтауға бағытталды. Алайда, ол тек ішінара нәтижелер ғана алды және осы идеяны одан әрі зерттеу қажет болды. Маккарти мен Шеннонның бұл теорияға қатысты идеясы – математикалық теория мен есептеулер арқылы машинаның тиімділігін анықтау және өлшеу үшін күрделі мәселелерді пайдалану тәсілін әзірлеу болды. Алайда, олар тек сынақтардың ішінара нәтижелерін ғана алды. Өзін-өзі жетілдіру идеясы – машинаның өзін-өзі өзгертетін кодты қолданып, өзін ақылды етуі. Бұл машинаның интеллектуалдық деңгейін арттыруға және есептеу жылдамдығын жоғарылатуға мүмкіндік береді. Топ, егер машина зерттеудің абстракциялық бөлігінде тапсырманы орындау процесін жақсарта алса, осы мәселені зерттей алатынына сенді. Топ осы саладағы зерттеулерді кішігірім топтарға бөлуге болатынын ойлады. Бұл жасанды интеллект туралы сенсорлық және басқа да ақпарат түрлерін қамтиды. Компьютерлік ғылымдағы абстракциялар математика мен бағдарламалау тілдеріне қатысты болуы мүмкін. Олардың есептеулік креативтілік туралы түсінігі – бағдарламаның немесе машинаның адам ойлауының ұқсас тәсілдерімен қалай көрінуі мүмкін. Олар машинаның толық емес ақпаратты алып, оны адам миындай толықтыра алатынын көргісі келді. Егер машина мұны істей алса, олар машинаның нәтижеге қалай келгенін ойластыру керек еді.