Co to jest Dart



Dart to język opracowany przez Google, który przyciąga uwagę kręgów zajmujących się aplikacjami internetowymi Pisanie aplikacji internetowej może być świetną zabawą, szczególnie na początku, kiedy doświadczasz natychmiastowej satysfakcji: zakoduj, przeładuj, powtórz. Niestety wykańczanie i utrzymywanie aplikacji internetowej nie jest takie przyjemne. JavaScript jest świetny do małych skryptów i ma wydajność do uruchamiania dużych aplikacji. Ale kiedy skrypt przekształca się w dużą aplikację internetową, debugowanie i modyfikowanie tej aplikacji może być koszmarem, zwłaszcza gdy masz duży zespół. Wpisz Dart, projekt typu open source, którego celem jest umożliwienie programistom tworzenia bardziej złożonych, wydajnych aplikacji dla nowoczesnej sieci. Używając języka Dart, możesz szybko pisać prototypy, które szybko ewoluują, a także masz dostęp do zaawansowanych narzędzi, niezawodnych bibliotek i dobrych technik inżynierii oprogramowania. Dart ma już narzędzia, takie jak Dartboard (który pozwala pisać i uruchamiać kod Dart w przeglądarce) i Dart Editor (który pozwala tworzyć, modyfikować i uruchamiać aplikacje Dart). Zestaw SDK zawiera narzędzia wiersza polecenia, takie jak kompilator Dart-to-JavaScript (który tworzy JavaScript, który można umieścić w dowolnej nowoczesnej przeglądarce) i maszynę wirtualną Dart (maszynę wirtualną, która umożliwia uruchamianie kodu Dart na serwerach). Najnowszym narzędziem, które zostanie udostępnione, jest kompilacja przeglądarki Chromium o pseudonimie Dartium, która zawiera wbudowaną maszynę wirtualną Dart. Ale fakty mogą się zmienić, a linki mogą się zepsuć. Najnowsze informacje można znaleźć w witrynie Dart

Dlaczego Google stworzyło Dart?

Chcemy, abyś mógł tworzyć świetne aplikacje internetowe. Świetne aplikacje internetowe usprawniają sieć, a kiedy działa lepiej, wszyscy wygrywają. Inżynierowie w Google od dawna myśleli o aplikacjach internetowych. Napisano kilka złożonych i szeroko używanych aplikacji internetowych na dużą skalę (np. Gmail, Google+ i Dokumenty Google), więc dobrze zna wyzwania związane z tworzeniem aplikacji internetowych. Napisano również przeglądarkę (Chrome) i silnik JavaScript (V8), więc dużo przemyśleli, jak przyspieszyć działanie aplikacji internetowych. Zasadniczo stworzyliDart, ponieważ uważali, że pomoże on wprowadzić do sieci więcej świetnych aplikacji i uważamy, że tworzenie bardziej złożonych aplikacji internetowych powinno być łatwiejsze.

Czy sieć naprawdę potrzebuje innego języka?

Twórcy aplikacji ze wszystkich platform powinni być w stanie tworzyć dla nowoczesnej sieci, ale wielu nie-endemicznych programistów internetowych ma inne oczekiwania i wymagania w stosunku do ich języka, narzędzi i platformy programistycznej niż te, które są obecnie dostępne. Uważamy, że jest miejsce na nową platformę, taką, która nie jest obciążona 15-letnim cruftem, która jest znana programistom z różnych środowisk i której struktura umożliwia obsługę większych, bardziej złożonych aplikacji, których wymagają użytkownicy. Uważamy, że JavaScript nie zniknie. W rzeczywistości Google aktywnie współpracuje z TC39 w celu ulepszenia JavaScript, a nowe funkcje już pojawiają się w V8 i Chrome. Jednak nasze zaangażowanie w ulepszanie JavaScript nie powstrzymuje nas od myślenia o innych rozwiązaniach. Na przykład Dart skorzysta z ciągłej pracy nad JavaScript, ponieważ programy Dart kompilują się do JavaScript, aby działać w całej nowoczesnej sieci. Uważamy, że Dart to fascynująca i znana platforma, która spełnia potrzeby programistów z różnych środowisk i doświadczeń, w tym endemicznych programistów internetowych. Wierzymy, że Dart wnosi świeże pomysły do programowania internetowego, a innowacje zarówno w Dart, jak i JavaScript pomogą popchnąć sieć do przodu dla programistów aplikacji i użytkowników.

Pokaż mi kod

Dość gadania, zobaczmy trochę kodu. Niezależnie od tego, czy znasz JavaScript czy Javę, kod Dart powinien wyglądać znajomo. Oto przykład prostej strony internetowej w Dart:

hi.dart:

#import('dart:html');
main() {
document.query('#status').text = 'Hi, Dart';
}
hi.html:


< h2 id="status" >< /h2 >
< script type="application/dart" src="hi.dart" >< /script >

Jeśli przeglądarka nie ma osadzonej maszyny wirtualnej Dart, możesz skompilować kod Dart do JavaScript.

->
< script type="text/javascript" src="hi.dart.js" >< /script >


Spójrzmy teraz na kod Dart, który wykorzystuje funkcje:

send(msg, to, from, [rate='First Class']) {
return '${from} said ${msg} to ${to} via ${rate}';
}
main() => print(send('hello', 'Seth', 'Bob'));
> "Bob said hello to Seth via First Class"

Składnia => używana do implementacji funkcji main() to przyjemny, kompaktowy sposób implementacji funkcji, która oblicza i zwraca pojedyncze wyrażenie. Bez => implementacja metody main() wyglądałaby następująco:

main() {
print(send('hello', 'Seth', 'Bob'));
}

W powyższej implementacji metody send () rate jest opcjonalnym parametrem z wartością domyślną. Ta metoda ilustruje również działanie interpolacji ciągów znaków ($ {var}). Oto kod Darta, który jest bardziej zorientowany obiektowo:

class Point {
Point(this.x, this.y);
distanceTo(other) {
var dx = x - other.x;
var dy = y - other.y;
return Math.sqrt(dx * dx + dy * dy);
}
var x, y;
}
main() {
var p = new Point(2, 3);
var q = new Point(3, 4);
print('distance from p to q = ${p.distanceTo(q)}');
}

Ten kod powinien wyglądać znajomo, jeśli kiedykolwiek używałeś języka opartego na klasach.

Jak mogę grać w Dart?

Najłatwiejszym sposobem wypróbowania Dart jest użycie Dartboard, sposobu na interaktywne wykonywanie kodu Dart w dowolnej nowoczesnej przeglądarce. Tarcza do rzutek jest osadzona w witrynie Dart pod adresem www.dartlang. org. Możesz także użyć Dartboard, przechodząc bezpośrednio na try.dartlang.org. Oto zdjęcie tego, co zobaczysz w tej witrynie:



Zmień kod, jak chcesz, a następnie kliknij przycisk Uruchom (w lewym górnym rogu). Zobaczysz wyniki swojego kodu w nowym obszarze poniżej:



Adres URL w prawym górnym rogu tarczy to link do kodu, który właśnie uruchomiłeś. Podobnie jak większość rzeczy związanych z Dart, Dartboard wciąż się zmienia. Aby uzyskać najnowsze informacje, zobacz samouczek dotyczący tarczy.

A może prawdziwy edytor?

Kiedy wyrośniesz z Dartboard, wypróbuj Dart Editor. Jest to edytor do pobrania dla systemów Windows, Mac i Linux, który umożliwia pisanie, modyfikowanie i uruchamianie aplikacji internetowych Dart. Dart Editor może uruchomić Twój kod Dart za pośrednictwem maszyny wirtualnej lub może skompilować go do JavaScript i uruchomić go w przeglądarce. Oto zdjęcie tego, jak obecnie wygląda Dart Editor:



Aby uruchomić dowolny program w Dart Editor, po prostu kliknij przycisk Uruchom, gdy wybrany jest dowolny element z biblioteki tego programu. Jeśli Twój program jest aplikacją internetową, Dart Editor uruchamia Dartium (Chromium z wbudowaną maszyną wirtualną Dart), aby uruchomić program. Kiedy jesteś gotowy do wysłania do produkcji, Dart Editor może skompilować go do JavaScript, dzięki czemu Twoja aplikacja będzie dostępna dla całej nowoczesnej sieci. Dart Editor ma kilka funkcji, które pomogą Ci edytować kod Dart, a wkrótce spodziewamy się więcej funkcji. Jak widać na powyższym zrzucie ekranu, Dart Editor podkreśla składnię Dart. Dart Editor obsługuje również automatyczne uzupełnianie i może szybko przenieść Cię do miejsca, w którym deklarowane są typy i inne interfejsy API. Możesz również uzyskać szybki zarys klas, metod i pól programu.

Co nowego w Dart?

Teraz, gdy jesteście już przygotowani, porozmawiajmy o języku. Nie będziemy szczegółowo omawiać funkcji i składni Dart - możesz przeczytać o tym wszystkim na www.dartlang.org - ale oto kilka z bardziej interesujących funkcji Dart. Wpisywanie opcjonalne: możesz używać typów lub nie, to zależy od Ciebie. Typy w kodzie Dart nie zmieniają sposobu wykonywania aplikacji, ale mogą pomóc programistom i narzędziom programistycznym zrozumieć Twój kod. Możesz nie zawracać sobie głowy typami podczas opracowywania prototypu, ale możesz dodać typy, gdy jesteś gotowy, aby zaangażować się w implementację. Pojawiający się wzorzec polega na dodawaniu typów do interfejsów i sygnatur metod oraz pomijaniu typów w metodach. Migawki: obecnie przeglądarki muszą przeanalizować kod źródłowy aplikacji internetowej, zanim będzie można ją uruchomić. Kod Dart może być migawkowy - cały jego stan i kod rejestrowany jest w określonym momencie - co może znacznie przyspieszyć uruchamianie. We wstępnych testach aplikacja internetowa z 54 000 wierszy kodu Dart uruchomiła się w ciągu 640 ms bez migawki. Z migawkami zaczęło się w 60 ms. Gdy program Dart działa na maszynie wirtualnej Dart, może zauważyć znaczną poprawę wydajności czasu uruchamiania dzięki migawkom. Izolaty: Dart obsługuje równoczesne wykonywanie za pomocą izolatów, o których możesz pomyśleć jako o procesie bez kosztów ogólnych. Każdy izolat ma własną pamięć i kod, na które nie ma wpływu żaden inny izolat. Jedynym sposobem, w jaki izolat może komunikować się z innym izolatem, są komunikaty. Izolacje umożliwiają pojedynczej aplikacji efektywne korzystanie z komputerów wielordzeniowych. Inne zastosowanie izolatów: uruchamianie kodu z różnych źródeł na tej samej stronie bez narażania bezpieczeństwa. Aby uzyskać więcej informacji, zobacz "Izolaty" na stronie 14 poniżej. Interfejsy z domyślnymi implementacjami: zignoruj ten, jeśli nigdy nie korzystałeś z języka, który zawiera klasy i interfejsy / protokoły. Ciągle tutaj? DOBRZE. Jeśli spojrzysz na biblioteki Dart, zauważysz, że używają one interfejsów w przypadkach, w których niektóre inne języki używałyby klas - na przykład Data i HashMap. Jest to możliwe, ponieważ interfejs Dart może mieć domyślną implementację - klasę (zwykle prywatną), która jest domyślnym sposobem tworzenia obiektów implementujących interfejs. Na przykład, mimo że Stopwatch jest interfejsem, możesz wywołać new Stopwatch (), aby uzyskać domyślną implementację stopera. Jeśli spojrzysz na dokumentację API lub kod źródłowy, zobaczysz, że domyślną implementacją Stopwatch jest klasa o nazwie StopwatchImplementation. Ogólne, ale łatwe: generyczne były już robione, ale są mylące. Dart przyjmuje nowe podejście, projektując system generyczny, który jest bardziej zrozumiały. Kompromis polega na poświęceniu odrobiny dokładności, ale uważamy, że umożliwienie programistom większej produktywności przewyższa projekt języka ivory-tower. Aby uzyskać więcej informacji, zobacz "Ogólne" na stronie 12 poniżej. Biblioteka HTML: przyjrzeliśmy się również, jak należy używać HTML DOM. (DOM jest skrótem od Document Object Model; jest to interfejs, który pozwala programowo aktualizować zawartość, strukturę i styl strony internetowej.) Tworząc natywną bibliotekę Dart (dart: html) w celu uzyskania dostępu i manipulowania DOM, stworzyliśmy elementy, atrybuty i węzły wydają się naturalne

Dlaczego Dart wygląda tak znajomo?

Nowatorski i niepowtarzalny język może być piękny, ale miałby może pięciu użytkowników. Dart jest przeznaczony do masowej adaptacji, więc musi być znajomy zarówno dla użytkowników języków skryptowych (takich jak JavaScripters), jak i użytkowników języków strukturalnych (takich jak programiści Java). Mimo to Dart ma kilka unikalnych funkcji dla języka skierowanego do głównego nurtu. Na przykład interfejsy z domyślnymi implementacjami pomagają ukryć szczegóły implementacji. Opcjonalne pisanie, kolejna nowa funkcja w sieci, powinno pomóc w jaśniejszym rozwiązaniu adnotacji dotyczących zamiarów dewelopera oraz umów dotyczących interfejsu i bibliotek.

Co znajduje się w platformie Dart?

Dart to więcej niż tylko język, to cała platforma dla współczesnych programistów internetowych. Specyfikacja języka: język Dart jest znajomy, z kilkoma nowymi funkcjami, takimi jak opcjonalne pisanie na klawiaturze i izolaty.

Biblioteki: biblioteki podstawowe zapewniają funkcje, w tym kolekcje, daty i matematykę, a także powiązania HTML, operacje we / wy po stronie serwera, takie jak gniazda, a nawet JSON.
Kompilator do JavaScript: Możesz skompilować programy Dart do JavaScript, które mogą działać w całej nowoczesnej sieci.
VM: maszyna wirtualna jest zbudowana od podstaw w celu natywnego uruchamiania kodu Dart. Maszyna wirtualna działa w wierszu poleceń dla aplikacji po stronie serwera i może być również osadzona w przeglądarkach dla aplikacji po stronie klienta.
Integracja z Chromium: maszyna wirtualna Dart została osadzona w kompilacji Chromium o pseudonimie Dartium, umożliwiając uruchamianie natywnych aplikacji Dart bez uprzedniej kompilacji do JavaScript.
Dart Editor: Ten lekki edytor, wraz z podświetlaniem składni i uzupełnianiem kodu, może uruchomić skrypt w maszynie wirtualnej lub aplikacji internetowej w Dartium. Może również skompilować Twoją aplikację internetową do JavaScript i uruchomić ją w innej przeglądarce.

Czy powinienem dziś używać Dart w mojej aplikacji?

Dart wciąż się zmienia, więc na razie nie stawiaj na to farmy. Jednak wszystko w Dart jest open source i otwarte na debatę, więc zachęcamy do wypróbowania Dart i przekazania opinii. Gdy język i biblioteki się uspokoją (w tym roku, jeśli wszystko pójdzie zgodnie z planem), spodziewamy się, że będziesz w stanie uruchamiać produkcyjne aplikacje internetowe Dart we wszystkich głównych nowoczesnych przeglądarkach.

Czy oczekujesz, że ludzie będą używać Dart?
Możesz używać Dart do tworzenia złożonych, wysokowydajnych aplikacji dla nowoczesnej sieci. Język Dart jest przeznaczony do pracy na kliencie i serwerze, co oznacza, że można go używać do implementacji kompletnej, kompleksowej aplikacji. Możesz także użyć Dart do skalowania rozwoju w miarę, jak Twój program rośnie z małego zestawu funkcji do dużej kolekcji klas. Na przykład tworzenie stron internetowych zachęca do bardzo krótkich iteracji programistycznych. Gdy udoskonalasz swój pomysł, a zakres i złożoność programu rośnie, kod prawdopodobnie będzie wymagał większej modułowości i hermetyzacji. Dart umożliwia refaktoryzację z funkcji do klas oraz od kodu bez typu do kodu wpisanego. Jeśli chodzi o wdrożenie, masz dwie opcje: kompilację do JavaScript lub użycie maszyny wirtualnej Dart. W przypadku kodu po stronie klienta kompilacja do JavaScript umożliwia uruchomienie kodu Dart w nowoczesnych przeglądarkach. Przyszła wersja Chrome będzie dostarczana z wbudowaną maszyną wirtualną Dart, umożliwiającą uruchamianie kodu Dart bezpośrednio w przeglądarce Chrome bez uprzedniej kompilacji do JavaScript.

Jak mogę skompilować do JavaScript?

Aby stworzyć czytelny dla człowieka kod JavaScript, powinieneś użyć kompilatora Frog (dostępnego w Dart SDK). Wciąż trwająca praca, Frog generuje kod JavaScript, który jest mały i wydajny. Na przykład załóżmy, że masz następujący kod Dart:

class HelloWorld {
yell() => print("hello world!!!!");
}
main() => new HelloWorld().yell();
Frog compiles that into the following JavaScript code:
// ********** Library dart:core **************
// ********** Natives dart:core **************
// ********** Code for Object **************
// ********** Code for top level **************
function print(obj) {
return _print(obj);
}
function _print(obj) {
if (typeof console == 'object') {
if (obj) obj = obj.toString();
console.log(obj);
} else {
write(obj);
write('\n');
}
}
// ********** Library dart:coreimpl **************
// ********** Code for NumImplementation **************
NumImplementation = Number;
// ********** Code for StringImplementation **************
StringImplementation = String;
// ********** Code for _Worker **************
// ********** Code for top level **************
// ********** Library helloworld **************
// ********** Code for HelloWorld **************
function HelloWorld() {
}
HelloWorld.prototype.yell = function() {
return print("hello world!!!!");
}
// ********** Code for top level **************
function main() {
return new HelloWorld().yell();
}
main();

Jak widać, kod JavaScript jest prosty. Aby pobrać kompilator Frog, pobierz SDK, który jest teraz dostępny w wersji wstępnej.

Jakie biblioteki są dostępne?

Na razie Dart ma trzy biblioteki, z których możesz korzystać:

dart : core

Podstawowe interfejsy API, na które mogą liczyć wszystkie aplikacje, niezależnie od tego, czy są to samodzielne skrypty, czy działające w przeglądarce. Te interfejsy API umożliwiają wykonywanie takich operacji, jak:
•  wyświetlić tekst podstawowy (print ())
•  grupowanie obiektów w kolekcje (kolekcja, zestaw, lista, kolejka)
•  manipulować parami klucz-wartość (mapa)
•  określić daty i godziny (data, strefa czasowa, czas trwania, stoper)
•  używaj ciągów (String, Pattern, RegExp)
•  używaj liczb (num, int, double, Math)
•  zwrócić wartość przed zakończeniem operacji (Future)
•  porównać podobne obiekty (porównywalne)
•  wykonać operację na każdym elemencie w obiekcie wieloelementowym (Iterowalne)

dart: html

Interfejsy API do tworzenia interfejsów użytkownika dla aplikacji internetowych. Na przykład:

•  pobierz obiekty globalne (dokument, okno)
•  znaleźć elementy HTML (query elementu () i queryAll ())
•  dodawać i usuwać programy obsługi zdarzeń (element we właściwości)
•  operować na grupach obiektów przy użyciu wbudowanych interfejsów kolekcji Dart

dart: io

Interfejsy API po stronie serwera do łączenia się ze światem zewnętrznym. Ta biblioteka jest dostępna tylko wtedy, gdy maszyna wirtualna Dart jest uruchomiona na serwerze. Przykłady:

•  odczyt i zapis danych (InputStream, OutputStream)
•  otwierać i czytać pliki (Plik, Katalog)
•  podłączyć do gniazd sieciowych (Socket)

Społeczność rozpoczęła także przenoszenie bibliotek, z których możesz korzystać. Na przykład biblioteki kryptowalut z Closure zostały przeniesione do Dart. Na potrzeby tworzenia gier popularny silnik fizyki Box2D został również przeniesiony do Dart.

Pokaż więcej kodu

Przedstawiliśmy przegląd najciekawszych funkcji Dart i pokazaliśmy trochę kodu Dart. Teraz omówimy kilka z tych funkcji - typy, typy ogólne, izolaty i manipulacje DOM - i pokażemy jeszcze więcej kodu.

Typy

Powyżej pokazaliśmy ten przykład:

class Point {
Point(this.x, this.y);
distanceTo(other) {
var dx = x - other.x;
var dy = y - other.y;
return Math.sqrt(dx * dx + dy * dy);
}
var x, y;
}
main() {
var p = new Point(2, 3);
var q = new Point(3, 4);
print('distance from p to q = ${p.distanceTo(q)}');
}

Możesz zauważyć, że chociaż kod definiuje i używa klasy, w przeciwnym razie nie ma typów. W Dart typy są opcjonalne. Nie zmieniają sposobu działania programów, ale sprawiają, że kod jest bardziej zrozumiały dla narzędzi (takich jak debuggery i IDE) i programistów (takich jak Twój zamiennik, kiedy przechodzisz do jeszcze lepszego projektu). Pomyśl o typach jako o adnotacjach lub dokumentacji, które mogą pomóc narzędziom i ludziom lepiej zrozumieć Twoje zamiary i wcześniej wykryć błędy. Uważamy, że dobrym miejscem do rozpoczęcia dodawania typów są sygnatury metod i interfejsy - "powierzchnia" programu. W miarę dodawania do projektu większej liczby osób i generowania większej liczby klas warto wiedzieć, jakie typy są używane przez metody (i które z nich są zwracane). Oto poprzedni przykład z typami dodanymi do definicji interfejsu API:
v class Point {
Point(this.x, this.y);
num distanceTo(Point other) {
var dx = x - other.x;
var dy = y - other.y;
return Math.sqrt(dx * dx + dy * dy);
}
num x, y;
}
main() {
var p = new Point(2, 3);
var q = new Point(3, 4);
print('distance from p to q = ${p.distanceTo(q)}');
}

Zwróć uwagę, że nie dodaliśmy typów do treści metody distanceTo (). Wyłaniający się wzorzec idiomatycznego Darta polega na używaniu typów jako sygnatur metod, ale nie w treściach metod. Treści metod powinny być wystarczająco małe, aby można je było łatwo zrozumieć, i oczekujemy, że w pewnym momencie narzędzia przeprowadzą wnioskowanie o typie. Jeśli jednak wolisz używać typów wszędzie, możesz zmienić var dx na num dx i tak dalej.

Ogólne

Jeśli wcześniej nie korzystałeś z typów ogólnych - a może nawet jeśli już tak - zobaczenie czegoś takiego jak List < E > w dokumentacji API może być nieco przerażające. Nie martw się. Leki generyczne w Dart są łatwe. Na przykład, jeśli nie obchodzi Cię, jakie typy obiektów znajdują się na liście, możesz utworzyć taką listę:

new List()

Jeśli wiesz, że Twoja lista będzie zawierała tylko jeden rodzaj obiektu - na przykład tylko ciągi znaków - możesz (ale nie musisz) zadeklarować, że podczas tworzenia obiektu List:

new List < String > ()

Po co zawracać sobie głowę dodatkową ceremonią? Określenie, jakie typy może przechowywać Twoja kolekcja, jest dobrym sposobem na udokumentowanie zarówno innym programistom, jak i narzędziom, jakie są Twoje oczekiwania. Narzędzia i środowisko wykonawcze mogą wcześnie wykrywać błędy. (Fakt: new List () to skrót od new List < Dynamic > (). Dynamic to typ używany za sceny dla zmiennych "bez typu".) Oto przykłady tego, jak Dart traktuje różne typy i kolekcje bez typu. Jeśli znasz typy ogólne w Javie, zwróć szczególną uwagę na dwa ostatnie przykłady.

main() {
print(new List() is List< Object >);
print(new List() is List< Dynamic >);
print(new List< String >() is List< Object >);
print(new List< Object >() is! List< String >); // Not all objects are strings
print(new List () is! List< int >); // Strings are not ints
print(new List() is List); // TRUE! Every list of string is
// a list
print(new List() is List< String >); // TRUE! It's OK to pass a List // to a method that expects
// List< String >
}
Ostatnie dwa przykłady podkreślają kowariantne typy generyczne Darta. Ponieważ na wolności natkniesz się na nietypowy kod Dart, język Dart musi umożliwiać traktowanie nietypowej listy tak samo, jak wpisanej listy i odwrotnie. Jak możesz stwierdzić z powyższego kodu, sparametryzowane typy Darta są reifikowane. Oznacza to, że typy ogólne nie są tracone w czasie kompilacji, więc Dart naprawdę wie, że List to "lista ciągów znaków".

Manipulowanie DOM

Ponowne odwiedzanie DOM, aby uczynić go bardziej dartowym, ma wiele zalet. Możesz używać elementów i węzłów jako rzeczywistych obiektów Dart i możesz przechodzić przez węzły potomne, tak jak w przypadku innych kolekcji Dart. Na przykład, oto kod, który znajduje określony element, a następnie wykonuje różne operacje na elemencie i jego elementach podrzędnych.

#import ("dart: html");
main() {
// Znajdź element.
var elem = document.query ("# id");
// Obsługa zdarzeń.
elem.on.click.add ((event) => print ('click!'));
// Ustaw atrybut.
elem.attributes ['nazwa'] = 'wartość';
// Dodaj element podrzędny.
elem.elements.add (nowy Element.tag ("p"));
// Dodaj klasę CSS do każdego elementu podrzędnego.
elem.elements.forEach ((e) => e.classes.add ("ważne"));
}

Izolacje

Mimo że Dart jest jednowątkowy, nadal możesz korzystać z maszyn wielordzeniowych, używając izolatów. Izolacja zapewnia izolację pamięci między różnymi częściami uruchomionego programu. Każdy izolat może działać w oddzielnym wątku lub procesie zarządzanym przez maszynę wirtualną Dart. Izolaty komunikują się, wysyłając wiadomości przez porty. Komunikaty są kopiowane, aby izolat nie mógł zmienić stanu obiektów należących do innych izolatów. Aby zilustrować działanie izolatów, zbudujmy prostą usługę echa. Najpierw zdefiniujemy echo (), funkcję do uruchomienia w izolacji. Każdy izolat ma port, którego możemy używać do odbierania wiadomości. Odpowiemy na wiadomość za pośrednictwem podanego portu odpowiedzi. Metoda main () tworzy nowy izolat dla funkcji echo () za pomocą funkcji spawnFunction (). Użyj SendPort, aby wysyłać wiadomości do izolatu i nasłuchiwać odpowiedzi za pomocą then ().

#import ('dart: isolate');
echo() {
port.receive ((msg, Reply) => Reply.send ("Echo: $ msg"));
}
void main () {
SendPort sendPort = spawnFunction (echo);
sendPort.call ("Hello, Dart!"). then ((response) => print (response));
}

Oto wynik:

Echo: Cześć, Dart!

Przetestowaliśmy powyższy kod na maszynie wirtualnej Dart. W JavaScript izolaty kompilują się do pracowników sieci web, dzięki czemu mogą działać w oddzielnych procesach. Izolaty wciąż są refaktoryzowane. Wypatruj kolejnych aktualizacji


Powrót

Software Engineering



Preludium: obliczenia od czasów starożytnych do epoki nowożytnej

Ludzka potrzeba obliczenia prawdopodobnie zrodziła się w prehistorii, kiedy ludzie zaczęli gromadzić dobra fizyczne. Wkrótce stało się pożądane śledzenie, ile konkretnych rzeczy (np. bydła) należało do rodziny lub plemienia. Gdy tylko proste dodawanie i odejmowanie stało się możliwe, potrzebna była rejestracja informacji, aby mogła być przechowywana przez długi okres czasu i mogła być udostępniana innym. Wczesne urządzenia rejestrujące były kamyczkami lub obiektami fizycznymi, ale ostatecznie okazało się, że można je zastąpić symbolami. Gdy ludzie ewoluowali i zaczęli osiedlać się w społecznościach, pojawiły się inne potrzeby obliczeniowe, takie jak pomiar wymiarów cegieł lub oznaczanie pól. Z czasem pojawiła się ciekawość i potrzeba bardziej złożonych obliczeń czasu, odległości i pozycji gwiazd. Dość szybko praca związana z obliczeniami została uznana za uciążliwą i dlatego opracowano urządzenia mechaniczne, które mogłyby przyspieszyć obliczenia (liczydło należy do pierwszych). Narzędzia do wspomagania decyzji logicznych były ostatnimi, które opracowano. Potrzeby dotyczące szybkich obliczeń, przechowywania danych na duże odległości i złożonego procesu decyzyjnego były kluczowymi czynnikami, które ostatecznie przyczyniły się do zainspirowania projektowania komputerów i oprogramowania.

Ludzka potrzeba obliczenia

Tekst na temat historii inżynierii oprogramowania i komputerów nie powinien rozpoczynać się nagle w konkretnej dacie, takiej jak 1930 r. Prawdą jest, że komputery cyfrowe i początki oprogramowania zostały po raz pierwszy wyartykułowane między 1930 a 1939 r., Ale wiele wcześniejszych wynalazków ponad tysiące lata temu utworzyły scenę. Od czasów starożytnych do dzisiaj istniała ludzka potrzeba różnego rodzaju obliczeń. Istniała także ludzka potrzeba zachowania wyników tych obliczeń w jakimś trwałym formacie. Inną ludzką potrzebą, którą trudniej wyartykułować, jest potrzeba logicznej analizy alternatywnych wyborów. Przykładem takiego wyboru jest podjęcie długiej, płaskiej drogi lub krótkiej, pagórkowatej drogi podczas przenoszenia produktów na rynek. Innym wyborem jest rodzaj uprawy, który jest najbardziej odpowiedni dla danego kawałka ziemi. Ważniejszą alternatywą jest to, czy społeczność powinna iść na wojnę z inną społecznością. W dzisiejszym świecie niektóre wybory mają znaczenie dla życia i śmierci, takie jak najlepsza terapia w leczeniu poważnego stanu zdrowia, takiego jak gruźlica odporna na antybiotyki. Inne wybory mają znaczenie ekonomiczne. Republikanie i demokraci są przykładami zupełnie przeciwnych poglądów na temat tego, jakie wybory są najlepsze dla gospodarki USA. W przypadku wyborów z diametralnie sprzecznymi alternatywami, obie strony nie mogą mieć racji, ale obie strony mogą łatwo się mylić. (Możliwe jest również, że jakiś inny wybór i żadna z alternatyw nie jest najlepsza.) Z analizy tego, co przemawia za argumentami między Demokratami i Republikanami, obie strony wydają się być złe, a końcowe wyniki prawdopodobnie zaszkodzą amerykańskiej gospodarce, nie ważne, która ścieżka zostanie podjęta. Z punktu widzenia kogoś, kto codziennie pracuje z komputerami i oprogramowaniem, tworzenie modeli matematycznych porównawczych wpływów na gospodarkę podniesienia podatków (cel Demokratów), zmniejszenie wydatków (cel Republikanów), lub połączenie obu. Ale zamiast racjonalnych dyskusji poszerzonych o realistyczne modele finansowe, obie strony jedynie wylały retorykę, nie mając prawie żadnych faktycznych informacji ani dowodów na argumenty obu stron. Zadziwiające jest słuchanie przemówień republikanów i demokratów. Obie poruszają się przeciwko sobie, ale żadna ze stron nie przedstawia niczego, co wygląda jak solidne dane. Te same problemy pojawiają się na szczeblu państwowym i miejskim. Na przykład przed wyborami w 2012 r. Zgromadzenie Ogólne Rhode Island przepchnęło nierozsądne ustawodawstwo, które podwoiło liczbę wyborców na stanowisko wyborcze, co skutecznie zmniejszyło liczbę miejsc dostępnych dla obywateli do głosowania o połowę. Nieuniknionymi skutkami tej głupiej decyzji były olbrzymie szeregi zirytowanych wyborców, czekanie do czterech godzin na głosowanie i konieczność utrzymywania niektórych stanowisk do głosowania otwartych prawie do północy, aby pomieścić wyborców oczekujących w kolejce. To nie był bardzo skomplikowany problem. Liczba wyborców przechodzących przez stanowiska do głosowania na godzinę jest znana od lat. Jednak Zgromadzenie Rhode Island nie zdołało wykonać nawet podstawowych obliczeń dotyczących tego, o ile zmniejszy się liczba stanowisk głosowania o połowę w stosunku do czasów oczekiwania wyborców. W rezultacie w wyborach w 2012 r. wielu mieszkańców Rhode Island, którzy nie mogli sobie pozwolić na cztery godziny lub więcej, po prostu nie zagłosowało. Zostali oszukani przez głupotę głupiego prawa, które przeszło przez nieudolne zgromadzenie ogólne. To prawo zgromadzone przez Rhode Island Assembly było niekompetentne i nie powinno być nigdy przekazywane bez matematycznego modelowania wyników redukcji miejsc wyborczych w czasie oczekiwania na głosowanie. Istotą dbania o rządy stanowiące nierozsądne prawa i wydawania głupich regulacji jest to, że w dzisiejszym świecie komputery i oprogramowanie mogą łatwo dostarczać oceny wpływu, a być może nawet eliminować myśli o przekazywaniu takich głupich praw i przepisów. Fakt, że ludzie używali matematyki, dokonując logicznych wyborów i zachowywali zapisy od czasów prehistorycznych do dzisiaj, porusza pytania związane z historią oprogramowania i komputerów:

•  Jakiego rodzaju obliczeń używamy?
•  Jakie informacje lub dane musimy zapisać?
•  Jakie są najlepsze metody przechowywania danych do przechowywania informacji na duże odległości?
•  Jakie metody analizy mogą pomóc w dokonywaniu skomplikowanych wyborów lub decyzji?
•  Jakie są najlepsze metody przekazywania danych i wiedzy?

Interesujące jest rozważenie tych pięciu pytań od czasów starożytnych po erę współczesną i zobaczenie, w jaki sposób komputery i oprogramowanie stopniowo pojawiły się, aby pomóc w radzeniu sobie z nimi.


Powrót

Wczesna sekwencja wiedzy numerycznej



Prawdopodobnie wkrótce po tym, jak ludzie mogli mówić, mogli również liczyć, przynajmniej do dziesięciu, używając swoich palców. Możliwe, że neandertalczycy lub kromaniończycy mogli liczyć już 35 000 lat temu, na podstawie równoległych nacięć zadrapań zarówno na kości wilczej znalezionej w Czechosłowacji sprzed około 33 000 lat temu, jak i kości pawianów w Afryce sprzed około 35 000 lat temu. Nie wiadomo, czy zadrapania odnotowały upływ dni, liczby przedmiotów, czy też zostały porysowane jako sposób na upłynięcie czasu. Najbardziej interesująca jest kość wilka, ponieważ ma 55 zadrapań pogrupowanych w zestawy pięciu. Zwiększa to prawdopodobieństwo, że zadrapania zostały użyte do policzenia obiektów lub czasu. Jeszcze starsze kły mastodontów sprzed około 50 000 lat miały wywiercone 16 otworów o nieznanym przeznaczeniu. Ponieważ neandertalczycy i kromaniończycy pokrywali się z około 43 000 p.n.e. do 30 000 p.n.e, te artefakty mogły pochodzić z dowolnej grupy lub z innych współczesnych grup, które obecnie wyginęły. Interesujące jest, że pojemność czaszki i rozmiary mózgu zarówno neandertalczyków, jak i kromaniończyków wydają się być nieco większe niż współczesnych homo sapiens, chociaż nowoczesne płaty czołowe są większe. Rozmiar mózgu nie przekłada się bezpośrednio na inteligencję, ale wskazuje, że pewna forma abstrakcyjnego rozumowania mogła wystąpić bardzo wcześnie. Malowidła jaskiniowe pochodzą sprzed ponad 40 000 lat, więc przynajmniej istniała jakaś forma abstrakcji. Oprócz liczenia przedmiotów i przedmiotów ważne było również, aby móc zachować przynajmniej przybliżony przebieg czasu. Prawdopodobnie długość roku była znana przynajmniej subiektywnie ponad 10 000 lat temu. Wraz z nadejściem rolnictwa, także około 10 000 lat temu, wiedza o tym, kiedy sadzić określone rośliny i kiedy je zbierać, pomogłaby w produkcji żywności. Jednym z pierwszych znanych osiedli był Catal Huyuk w Turcji, liczący około 7000 p.n.e. Ta wioska, zbudowana z cegieł błotnych, prawdopodobnie miała kilkaset osób. Odkrycia archeologiczne wskazują na rolnictwo pszenicy, jęczmienia i grochu. Mięso pochodziło od bydła i dzikich zwierząt. Ustalenia grotów strzał, głów maczug, ceramiki, miedzi i ołowiu wskazują, że prawdopodobnie niektóre formy handlu miały miejsce w Catul Huyuk. Handel nie jest łatwy do przeprowadzenia bez jakiejś metody śledzenia obiektów. Było też wiele obrazów namalowanych na ścianach, co może wskazywać na zainteresowania artystyczne. Prawdopodobna wczesna sekwencja ludzi nabywających wiedzę numeryczną mogła zacząć od kilku kluczowych tematów:

•  Prehistoryczna wiedza numeryczna i matematyczna:
- Liczenie obiektów w celu zarejestrowania własności
- Zrozumienie dwóch podstawowych operacji dodawania i odejmowania
- Pomiar kątów, np. na wschód lub zachód, aby się nie zgubić
- Liczenie upływu czasu w ciągu roku na pomoc dla rolnictwa
- Liczenie czasu codziennego na koordynowanie działań grupowych

•  Wiedza numeryczna i matematyczna z wczesnych cywilizacji:

- Zliczanie długości fizycznej, szerokości i wysokości w celu budowania struktur
- Pomiar masy i objętości w celach handlowych
- Pomiar długich dystansów, takich jak między miastami
- Pomiar wysokości gór i położenia słońca nad horyzontem
- Zrozumienie matematycznych operacji mnożenia i dzielenia

•  Wiedza liczbowa i matematyczna prawdopodobnie pochodząca od kapłanów lub szamanów:

- Liczenie czasu astronomicznego, takiego jak zaćmienia i pozycje gwiazd
- Pomiar prędkości lub prędkości poruszających się obiektów
- Pomiar krzywych, okręgów i nieregularnych kształtów
- Pomiar szybkości zmian, takich jak przyspieszenie
- Pomiar niewidzialnych zjawisk, takich jak prędkość dźwięku i światła

•  Wiedza numeryczna i matematyczna opracowana przez matematyków:

- Analiza prawdopodobieństwa gier i hazardu
- Zrozumienie abstrakcyjnych tematów, takich jak zero i liczby ujemne
- Zrozumienie złożonych tematów, takich jak odsetki złożone
- Zrozumienie bardzo złożonych tematów, takich jak infinity i niepewność
- Zrozumienie abstrakcyjnych tematów, takich jak liczby irracjonalne i niepewność kwantowa

Prehistoryczna wiedza liczbowa i matematyczna prawdopodobnie mogłaby być obsługiwana przy starannej obserwacji, wspomaganej tylko przez żetony, takie jak kamienie lub zadrapania, a także kije do pomiaru długości. Dodawanie i odejmowanie są wyraźnie pokazane przez dodanie lub usunięcie kamieni ze stosu. Wiedza liczbowa i matematyczna z wczesnych cywilizacji wymagałaby połączenia rozumowania abstrakcyjnego wspomaganego przez urządzenia fizyczne. Oczywiście do pomiaru wagi potrzebna jest pewna skala równowagi. Do pomiaru wysokości gór potrzebny jest pewien rodzaj kalkulatora kąta. Potrzebna jest pewna metoda zapisywania, aby śledzić zdarzenia, takie jak pozycje gwiazd w długich okresach czasu. Wiedza liczbowa i matematyczna pochodząca prawdopodobnie od kapłanów lub szamanów wymagałaby połączenia abstrakcyjnego rozumowania; dokładne utrzymywanie czasu; dokładne środki fizyczne; oraz świadomość, że matematyka może reprezentować niematerialne tematy, których nie można zobaczyć, dotknąć ani zmierzyć bezpośrednio. Prawdopodobnie wymagało to czasu poświęconego na studia intelektualne, a nie na rolnictwo czy polowanie. Opracowana przez matematyków wiedza numeryczna i matematyczna jest prawdopodobnie jedną z głównych zachęt prowadzących do obliczania urządzeń, a ostatecznie do komputerów i oprogramowania. Wymagało to zaawansowanej wiedzy na poprzednie tematy, połączonej z dość dokładnymi pomiarami i ciekawością intelektualną w umysłach, które mają skłonność do matematycznego rozumowania. Prawdopodobnie pochodziły one od ludzi, którzy zostali wykształceni w matematycznych pojęciach i byli wystarczająco pomysłowi, by rozszerzyć wcześniejsze koncepcje matematyczne w nowych kierunkach. Jedno z najwcześniejszych miast, Mohenjo-Daro, które zostało zbudowane w północnych Indiach około 3700 lat temu, wykazuje oznaki wyrafinowanej matematyki. W rzeczywistości odważniki i wagi zostały wydobyte z Mohendżo-Daro. To miasto mogło pomieścić 35 000 mieszkańców w szczycie. Ulice są ułożone w ostrożny wzór siatki; cegły i konstrukcja wykazywały znaki standardowych wymiarów i elementów wielokrotnego użytku. Te rzeczy wymagają pomiarów. Zarówno Mohenjo-Daro, jak i inne miasto w północnych Indiach, Harappa, wykazują oznaki pewnego rodzaju władzy centralnej, ponieważ są zbudowane w podobnych stylach. Oba miasta wyprodukowały dużą liczbę glinianych tabliczek naciętych zarówno obrazami zwierząt, jak i symbolami, które uważano za pismo, chociaż pozostają one nierozszyfrowane. Niektóre z tych glinianych tabliczek sięgają nawet 3300 lat. Inne starożytne cywilizacje również rozwijały liczenie, arytmetykę, miary długości i wagi i skale. Egipt i Babilonia miały arytmetykę sprzed 2000 lat. W miarę osiedlania się miast i coraz większego czasu wolnego pozwalano na rozpoczęcie zawodów, które nie dotyczyły pracy fizycznej ani polowania. Te zawody nie zależały od wysiłku fizycznego i niewątpliwie obejmowały księży i szamanów. Z czasem uwolnionym od przetrwania i gromadzenia żywności zaczęły pojawiać się dodatkowe formy matematycznego zrozumienia. Śledzenie pozycji gwiazd przez długi czas, mierzenie większych odległości, takich jak granice własności i odległości między wioskami, oraz mierzenie pozycji i odległości pokonywanych przez łodzie wymagało bardziej złożonych form matematyki, a także precyzyjnych pomiarów kątów i okresów. Pojawienie się budowy łodzi wymagało również zwiększenia wiedzy matematycznej. Kadłuby łodzi są z konieczności zakrzywione, więc proste pomiary wymiarowe nie były wystarczające. Wiosłowanie lub żeglowanie łodzią po słodkiej wodzie lub w zasięgu wzroku można wykonać przy niewielkiej wiedzy matematycznej lub bez niej. Ale kiedy łodzie zaczęły zapuszczać się na oceany, konieczne stało się zrozumienie pozycji gwiazd, aby nie zgubić się. Australia jest oddalona od wszystkich innych kontynentów i nie była połączona mostem lądowym z żadnym innym miejscem, ponieważ kontynenty się rozpadły. Jednak osiedlili się około 40 000 lat temu, najwyraźniej dzięki długiej podróży oceanicznej z jednego (lub więcej) kontynentów. Wyspy Polinezji i Wyspy Wielkanocnej są również daleko od jakiegokolwiek lądu stałego, a jednak zostały zasiedlone tysiące lat temu. Te rzeczy wskazują na wczesną wiedzę na temat pozycji gwiazd i pewnego rodzaju matematyki. Wiele wczesnych cywilizacji w Egipcie, Mezopotamii, Chinach, Indiach i Ameryce Południowej szybko zgromadziło zaskakująco zaawansowaną wiedzę matematyczną. Ta wiedza matematyczna była często kojarzona ze specjalistami, którzy przeszli znaczące szkolenie. Wiele starożytnych cywilizacji, takich jak starożytni Chińczycy, Sumerowie, Babilończycy, Egipcjanie i Grecy, zainwestowało znaczny czas i energię w zapewnienie szkolenia dzieciom. Nie tak dobrze znane na Zachodzie są podobne wysiłki na rzecz szkolenia w Indiach i wśród mieszkańców Ameryki Środkowej i Południowej, takich jak Olmekowie, Majowie, Inkowie, a później Aztekowie. Japonia odbyła również formalne szkolenie. W przypadku wyższych klas szkolenie japońskie obejmowało zarówno umiejętności fizyczne z bronią, jak i tematy intelektualne, takie jak czytanie, pisanie i matematyka. Wszystkie te starożytne cywilizacje rozwinęły formalne szkolenie dla dzieci, a także metody zapisu informacji. Uniwersytet Nalanda w północnych Indiach został założony około 472 r. p.n.e. i trwał do około XII w., A szczyt odnotowano około 500 r. p.n.e. Był to jeden z największych w starożytnym świecie, z ponad 10 000 studentów z całej Azji i ponad 2000 profesorami. Był jednym z pierwszych uniwersytetów, które zapewniły szkolenia z matematyki, fizyki, medycyny, astronomii i języków obcych. Uniwersytet Nalanda miał aktywną grupę tłumaczy, którzy przetłumaczyli sanskryt i prakryt na informacje o Uniwersytecie Nalanda pochodzące z chińskich tłumaczeń zachowanych w Chinach, ponieważ biblioteka Uniwersytetu Nalanda została zniszczona podczas muzułmańskiej inwazji na Indie w XII wieku. Zgłoszono, że jest tak duża, że paliła się przez prawie sześć tygodni. Indyjscy uczeni byli dość zaawansowani nawet w porównaniu z Grecją i Rzymem. Pojęcia takie jak zero i świadomość wielu systemów gwiezdnych były znane w Indiach przed ich poznaniem w Europie. (Olmekowie z Ameryki Środkowej używali również zera przed Grekami). W starożytności, z populacji prawdopodobnie 1000 osób w wiosce neolitycznej, prawdopodobnie ponad 950 było analfabetami lub mogło jedynie wykonywać podstawowe liczenie przedmiotów i radzić sobie z prostymi wymiarami środki. Ale przynajmniej kilka osób było w stanie nauczyć się bardziej złożonych obliczeń, w tym obliczeń związanych z astronomią, budową budynków i mostów, nawigacją i budowaniem łodzi.


Powrót

Wynalazki dla ulepszenia matematyki



Od najwcześniejszej wiedzy na temat liczenia i pojęć numerycznych ci, którzy korzystali z informacji numerycznych, byli zaniepokojeni potrzebami większej szybkości obliczania i większej niezawodności wyników niż ludzki umysł, który nie był w stanie tego dokonać. Aby wyjaśnić późniejsze znaczenie komputerów i oprogramowania, warto zacząć od pierwszych prób poprawy wydajności matematycznej. Warto także zastanowić się, co tak naprawdę robią komputery i oprogramowanie oraz dlaczego są wartościowe. Usługi świadczone ludzkiemu umysłowi przez różne urządzenia liczące obejmują między innymi:

•  Podstawowe operacje arytmetyczne dodawania, odejmowania, mnożenia i dzielenia
•  Matematyka naukowa, w tym potęgi sinusy, cosinusy i inne
•  Matematyka finansowa, w tym proste i złożone odsetki oraz stopy zwrotu
•  Obliczenia logiczne, takie jak routing i wybory między alternatywami
•  Obliczenia czasu, odległości, wysokości i prędkości
•  Uzyskanie użytecznej wiedzy indukcyjnej z dużych zbiorów różnych informacji
•  Logika dedukcyjna, taka jak wyciąganie wniosków z reguł

Podczas prowadzenia badań podczas wyszukiwania w Internecie znaleziono wiele interesujących i przydatnych źródeł. Na przykład IBM ma graficzną historię matematyki, którą można nawet pobrać na iPhony. Wikipedia i inne źródła internetowe mają dziesiątki historii sprzętu komputerowego i niektóre historie rozwoju oprogramowania. W kilku krajach odnotowano kilkanaście muzeów komputerowych, takich jak London Science Museum, które ma działającą wersję silnika analitycznego Babbage′a. Przydatne okazało się połączenie sześciu rodzajów wynalazków, które są synergiczne i ostatecznie powiązane ze sobą, a także z nowoczesnym oprogramowaniem. Matematyka jest pierwszą z tych sześciu form wynalazku. Urządzenia obliczeniowe, komputery i oprogramowanie zostały najpierw wymyślone, aby przyspieszyć obliczenia matematyczne. Matematyka prawdopodobnie zaczęła się od dodawania i odejmowania, a następnie następowała mnożenie i dzielenie. Potem pojawiło się wiele innych bardziej abstrakcyjnych form: geometria, trygonometria, algebra i rachunek różniczkowy na przykład. Drugą formą wynalazku jest rejestrowanie pomysłów i informacji, aby mogły być udostępniane i przesyłane, a także aby pomysły były dostępne przez długi czas. Wynalazki w tej kategorii obejmują systemy zapisu i fizyczne przechowywanie pisma. Fizyczne przechowywanie pisma obejmuje kamienne tabletki, gliniane tabletki, papirus, skóry zwierzęce, papier, a ostatecznie magnetyczne i optyczne przechowywanie. Pamięć masowa obejmuje również rękopisy, książki, biblioteki, a ostatecznie bazy danych i pamięć masową w chmurze. Trzecią formą wynalazku są fizyczne urządzenia obliczeniowe, które mogą pomóc ludzkim uczonym w szybszych i dokładniejszych obliczeniach, niż byłoby to możliwe tylko przy użyciu ludzkiego umysłu i ludzkiego ciała. Tabele przydatnych wartości były prawdopodobnie pierwszą metodą przyspieszenia obliczeń. Urządzenia fizyczne obejmują liczydło, kątomierze, astrolabia, urządzenia pomiarowe, mechaniczne urządzenia liczące, suwaki, komputery analogowe i ewentualnie elektroniczne komputery cyfrowe. Czwarta forma wynalazku obejmuje dostępne kanały dystrybucji informacji dla wielu osób. Pierwszy kanał był bez wątpienia przekazem ustnym i przekazywaniem informacji, które mają być zapamiętane przez uczniów lub uczniów. Wkrótce jednak przekazywanie informacji zaczęło obejmować oznaczenia na kamieniach i kościach; oznaczenia na glinie; i wreszcie piktogramy, ideogramy i wreszcie alfabety. Piątą formą wynalazku jest samo oprogramowanie. To najnowsza forma wynalazku; zasadniczo całe oprogramowanie używane w 2013 r. ma mniej niż 55 lat, prawdopodobnie ponad 50% oprogramowania ma mniej niż 20 lat. Szósta forma wynalazku jest pośrednia. Są to wynalazki, które nie są bezpośrednio związane z komputerami i oprogramowaniem, ale pomagają w ich rozwoju. Jednym z takich możliwych wynalazków jest system patentowy. Drugim i bardzo ważnym wynalazkiem, który umożliwił, był plastik.

Matematyka, urządzenia obliczeniowe i oprogramowanie : Przybliżona liczba lat przed 2013 r

Liczenie obiektów : 35 000
Dodawanie i odejmowanie : 30 000
Pomiar kątów : 25 000
Liczenie rocznego upływu czasu : 20 000
Kamyczki używane do obliczeń : 20 000
Liczenie dziennego upływu czasu : 19 000
Ilościowa długość fizyczna, szerokość i wysokość : 18 000
Pomiar masy i objętości : 15 000
Pomiar długich dystansów między miastami : 10.000
Pomiar czasu astronomicznego : 7000
Geometria : 5500
Zegary : 5,500
Pomiar wysokości słońca i gór : 5000
Mnożenie i podział : 4,500
Pomiar prędkości poruszających się obiektów : 4000
Analogowe urządzenia obliczeniowe : 4000
Algebra : 4,000
Trygonometria : 4000
Ułamki : 4000
Tabliczki mnożenia : 3 900
Zegary: woda : 3300
Liczby dziesiętne : 3100
Liczydło i obliczenia mechaniczne : 3000
Zegary: mechaniczne : 3000
Liczby binarne : 2 700
Zero : 2600
Pomiar krzywych, okręgów i nieregularnych obiektów : 2500
Temperatura pomiaru : 2500
Mechanizm Antikythera : 2200
Astrolabe : 2 100
Abstrakcyjne tematy, takie jak zero i liczby ujemne : 2000
Klepsydry : 1500
Skomplikowane tematy, takie jak odsetki złożone : 1400
Pomiar prawdopodobieństw dla gier losowych : 1000
Rachunkowość : 900
Wykresy : 800
Reguły slajdów : 575
Pomiar szybkości zmiany i przyspieszenia : 500
Kalkulatory mechaniczne do dodawania i odejmowania : 425
Moc pomiarowa : 400
Obliczanie trajektorii : 400
Kalkulatory mechaniczne do mnożenia i dzielenia : 375
Pomiar niewidzialnych zjawisk, takich jak dźwięk : 350
Abstrakcyjne tematy, takie jak liczby irracjonalne i niepewność : 350
Urządzenia liczące dziurkacze : 350
Rachunek : 350
Zliczanie krótkich przejść czasowych (<1 sekunda) : 300
Badania statystyczne na dużą skalę z milionami próbek : 250
Bardzo złożone tematy, takie jak informacje i niepewność : 250
Matematyczna prognoza pogody : 250
Pomiar zjawisk elektrycznych i magnetycznych : 200
Mechaniczne maszyny do tabelowania : 200
Algebra Boole'a : 175
Teoria zbiorów : 150
Zestawy rozmyte : 145
Względność : 105
Pomiar sił silnych i słabych oraz siły ciężkości : 100
Komputery cyfrowe : 70
Badania operacyjne : 65
Języki programowania : 65
Algorytmy sortowania : 55
Bazy danych : 55
Kalkulatory kieszonkowe : 50
Aplikacje matematyczne : 50
Aplikacje oprogramowania naukowego : 50
Aplikacje finansowe : 45
Aplikacje statystyczne : 40
Aplikacje księgowe : 40
Aplikacje architektoniczne i inżynieryjne : 40
Silniki do renderowania grafiki do gier : 35

Tabela ilustruje fakt, że wykorzystanie matematyki przez ludzi jest starożytne i można je prześledzić prawie tak daleko, jak mowa. Powodem tego jest fakt, że wiedza matematyczna stała się krytycznym czynnikiem, gdy ludzie zaczęli żyć w wioskach i handlować z innymi. Ci, którzy polują i zbierają dzikie rośliny, mają niewielkie zapotrzebowanie na matematykę i tylko podstawowe potrzeby dla wyrafinowanej komunikacji jakiegokolwiek rodzaju. pojawienie się rolnictwa, życie w społecznościach i handel z innymi społecznościami przyniosły zapotrzebowanie na wagi, miary, świadomość zmian sezonowych i przynajmniej podstawową arytmetykę, taką jak dodawanie i odejmowanie.

Metody zapisywania i nośniki : Przybliżona liczba lat przed 2013 r

Na kamieniu lub kościach : 50 000
Na glinie : 6000
Z piktogramami takimi jak hieroglify : 4 500
Na papirusie : 4000
Z ideogramami takimi jak chińskie znaki : 4000
Korzystanie z szyfrowania : 2500
Na welinie : 2000
Na papierze : 2000
W pełnym kolorze : 700
Graficznie : 400
Na kartach perforowanych : 350
Używanie symboli dotykowych, takich jak Braille : 250
Na taśmie papierowej : 250
Korzystanie z aparatów i film : 160
Nagrywanie dźwięków : 130
Magnetycznie na taśmie : 125
Na winylu : 125
Dynamicznie w pełnym ruchu : 100
Na mikrofilmie : 80
Nagrywanie w trzech wymiarach : 75
Magnetycznie na dyskach : 55
Optycznie na dyskach : 50
Na urządzeniach półprzewodnikowych : 35
Korzystanie z multimediów : 30
Korzystanie z aparatów cyfrowych : 25
O e-bookach : 25
Na smartfonach : 10
Używanie bitów kwantowych : 5
Heterogeniczne bazy danych (duże dane) : 5

Nagrywanie informacji

Po przeprowadzeniu obliczeń istnieje również potrzeba przechowywania informacji w formacie trwałym lub przynajmniej długotrwałym, aby informacje mogły być udostępniane innym lub wykorzystane później w razie potrzeby. Tabela 1.2 uwzględnia wszystkie różne metody używane od czasów starożytnych do czasów współczesnych do zapisywania informacji w formie stałej. Jak widać z Tabeli powyżej rejestracja informacji jest starożytną działalnością, która sięga aż do wynalezienia pisma i cyfr. Bez metody rejestrowania informacji, obliczenia lub własność artykułów nie mogą być udostępniane innym osobom ani wykorzystywane później do weryfikacji transakcji. Współczesnym problemem, który zostanie omówiony w kolejnych częściach, jest fakt, że metody przechowywania nie są trwałe i nie ma pewności, jak długo papierowe zapisy lub skomputeryzowane zapisy mogą trwać. Papier jest łatwopalny, a także narażony na działanie owadów, wilgoci i innych form zniszczenia. Pamięć magnetyczna jest długotrwała, ale nie trwała. Co gorsze, każde zabłąkane pole magnetyczne może uszkodzić lub zniszczyć zapisy magnetyczne. Zapisy optyczne przechowywane na plastikowych dyskach mogą trwać 100 lat lub dłużej, ale sam plastik ma nieznaną długość życia, a powierzchnie zapisu łatwo ulegają uszkodzeniu w wyniku ścierania, sadzy, pożaru lub naprężeń mechanicznych. Najważniejsze jest to, że najwcześniejsze znane formy zapisu, takie jak rzeźby na kamieniu lub glinie, prawdopodobnie mają najdłuższą oczekiwaną długość życia w jakiejkolwiek formie zapisu, która została wynaleziona.

Przekazywanie informacji

Tabela poniżej zawiera wykaz wynalazków umożliwiających przekazywanie lub udostępnianie informacji innym ludziom po przeprowadzeniu obliczeń i zapisaniu wyników w jakiś sposób. Jest oczywiste, że prawie wszystkie informacje będą potrzebne więcej niż jednej osobie, więc komunikacja i wymiana informacji są prawie tak stare, jak matematyka.

Kanały komunikacyjne : Przybliżona liczba lat wcześniej do 2013 r

Słowa z ust : 50 000
Kurierzy : 6000
Migające światła : 5000
Sygnał dymu : 5000
Zapis nutowy : 4500
Gołębie pocztowe : 3500
Kody i szyfry : 2500
Odręczne książki : 2500
Lustra lub polerowane powierzchnie : 2000
Języki migowe : 1750
Wiązane struny : 1500
Drukowane książki : 1000
Wykresy dla wartości matematycznych : 800
Gazety : 350
Czasopisma : 300
Długość sygnału (kod Morse'a) : 175
Touch for the blind (Braille) : 175
Telegraf : 175
Radio : 150
Telefon : 130
Telewizja : 70
Satelita : 60
Sygnały podprogowe : 50
Nauka snu : 40
Dźwięki o ultra-niskiej częstotliwości : 35
Internet : 30
Urządzenia dla głuchych (implanty ślimakowe): 30
Książki elektroniczne (e-booki) : 25
Lasery : 25
Automatyczne tłumaczenie języka : 25
Intranet : 20
Awatary w symulowanych światach : 15
Blogi : 12
Seminaria internetowe lub podcasty : 12
Witryny Wiki : 10
Sieci społecznościowe : 10
Animowane metody multisensoryczne : 5

Na przestrzeni wieków gatunek ludzki opracował wiele interesujących i przydatnych metod przekazywania informacji. Często istnieje potrzeba przesyłania informacji na bardzo duże odległości. Do niedawna gołębie pocztowe były używane do wiadomości między odległymi lokalizacjami. Jednak organizacje wojskowe od dawna uznają, że widoczne pagórki lub inne wysokie miejsca mogą być wykorzystywane do wysyłania informacji na duże odległości za pomocą polerowanych powierzchni w ciągu dnia lub w nocy. Przypomnijmy słynną linię z podróży Paula Revere'a, która opisuje latarnie oświetleniowe w północnej wieży kościoła, aby ostrzec przed zbliżaniem się wojsk brytyjskich: "… jedna jeśli lądem, dwie jeśli drogą morską. " Komunikacja z podwodnymi łodziami podwodnymi była trudna aż do pojawienia się komunikacji za pomocą dźwięków o bardzo niskiej częstotliwości. Kody i tajne komunikaty mają również długą historię kilku tysięcy lat. Późniejsze części zajmą się kilkoma formami kodów i tajnej komunikacji podczas II wojny światowej, w tym słynnymi Indianami "koderami", którzy przemawiali w kodzie opartym na Navajo, Choctaw i innych językach rdzennych Amerykanów. Świadomość potrzeby komunikowania się jest starożytną wiedzą. Jest ciekawe przejście w buddyjskiej sutrze datowanej na około trzeci wiek p.n.e. w której Budda omówił sposób przekazywania jego nauk. Wspomina mimochodem, że na ziemi nauki są przekazywane słowami, ale na innych światach nauki przekazywane są przez światła, zapachy lub inne środki niewerbalne.

Przechowywanie informacji

Tabela poniższa przedstawia sposób przechowywania i dostępu do informacji. Jak wiedzą wszyscy uczeni i badacze, kiedy ilość informacji przekracza kilka książek lub kilkadziesiąt dokumentów pisemnych, istnieje pilna potrzeba stworzenia pewnego rodzaju systemu taksonomicznego lub katalogu, aby zapewnić ponowne znalezienie informacji, gdy będzie to potrzebne. Przechowywanie i dostęp do informacji to kluczowe cechy nowoczesnych komputerów, a nowoczesne oprogramowanie odegrało ogromną rolę w poprawie wyszukiwania informacji.

Przechowywanie informacji i dostęp : Szacowana liczba lat przed 2013 r

Osobiste zbiory informacji pisemnych : 6000
Biblioteki lub publiczne zbiory pisemnej informacji : 4500
Aktualne zbiory praw i kodeksów prawnych : 2000
Kolekcje tematyczne, takie jak biblioteki medyczne i prawne : 1200
Uniwersyteckie programy informacyjne dla tematów : 1000
Taksonomia dla organizacji biologicznej i naukowej : 300
Dewey system dziesiętny dla organizacji książki : 135
Sekwencyjne bazy danych informacji : 65
Losowe bazy danych informacji : 55
Relacyjne bazy danych informacji : 50
Zalecenia dotyczące afiliacji oparte na preferencji z przeszłości : 35
Wyszukiwarki internetowe do wyboru słów kluczowych : 25
Inteligentni agenci do wyboru odpowiednich informacji : 15
Narzędzia analityczne Big Data : 10

Tabela pokazuje tematy, które były trudne dla dużych ilości informacji przez tysiące lat i które w rzeczywistości stają się coraz gorsze we współczesnym świecie. Przez większość historii ludzkości zbiory informacji rzadko przekraczały 10 000 woluminów, nawet dla dużych bibliotek. W dzisiejszym świecie niemal natychmiastowego rejestrowania wszystkich książek, czasopism, prac badawczych, obrazów i innych form treści intelektualnych są teraz miliardy dokumentów. Co tydzień mija coraz więcej informacji publikowanych, zapisywanych i dodawanych do bibliotek w chmurze i innych form przechowywania danych. Nie widać końca. Istnieje pilna potrzeba kontynuowania badań nad najlepszymi sposobami rejestrowania informacji w celu przetrwania w dłuższej perspektywie oraz rozwijania lepszych metod sortowania miliardów rekordów i znajdowania, a następnie agregowania tematów istotnych dla konkretnych potrzeb. Pojawiający się temat "dużych danych" zaczyna zajmować się tymi problemami, ale rozwiązanie nie jest obecnie widoczne i nadal jest nad horyzontem. Pierwszą i najtrwalszą metodą przechowywania i dostępu do danych były biblioteki. W całej cywilizowanej historii wiele znanych bibliotek służyło uczonym i badaczom. Biblioteka Aleksandrii, biblioteka Uniwersytetu Nalanda, biblioteka Perganum, pięć bibliotek Ugarit, rzymskie biblioteki Trajana na forum i biblioteka Konstantynopola były słynne w starożytności. Współczesne biblioteki, takie jak Biblioteka Kongresu, Biblioteka Harvarda i wiele dużych bibliotek uczelnianych nadal służą jako główne repozytoria informacji dla studentów i badaczy. Książki są używane od tysięcy lat w celu rejestrowania i przekazywania wiedzy od człowieka do człowieka, zwłaszcza od nauczycieli do studentów. Osobiste biblioteki podręczników są normalnym wyposażeniem wszystkich zawodów, w tym inżynierii, prawa, medycyny i oczywiście inżynierii oprogramowania. Ostatnio e-booki, wyszukiwarki internetowe i inteligentni agenci umożliwiają jednostkom i uczonym dostęp do większej ilości danych i informacji o większych rzędach wielkości, niż było to możliwe w historii ludzkości do około 45 lat temu.

Włączanie komputerów i oprogramowania

Tabela poniższa nieco odbiega od bezpośredniej linii zstępującej między wynalazkami a komputerami i oprogramowaniem. Ta tabela dotyczy niektórych wynalazków, które później stały się ważne, gdy komputery i oprogramowanie również stały się ważne.

Włączanie wynalazków : Przybliżona liczba lat przed 2013 r

Nowoczesne systemy patentowe : 800
Algebra Boole'a : 175
Tworzywa sztuczne na obudowy komputerowe, ekrany, połączenia itp. : 125
Lampy próżniowe : 120
Karty dziurkowane : 120
Lampy CRT : 80
Architektura von Neumanna : 75
Taśma papierowa : 75
Układy scalone : 70
Tranzystory : 70
Taśma magnetyczna : 70
Języki programowania wysokiego poziomu : 65
Dyski magnetyczne : 60
Systemy operacyjne : 55
Atrament magnetyczny do czeków bankowych : 55
Paski magnetyczne do kart kredytowych : 50
Karty graficzne : 40
Drukarki laserowe : 40
Dyskietki : 40
Drukarki igłowe : 35
Ethernet : 35
Wyświetlacze LED : 30
Drukarki atramentowe : 25
Pamięć półprzewodnikowa : 20
Dyski flash : 15

Jednym z pierwszych wynalazków jest sam system patentowy. Pierwszy znany patent w języku angielskim został przyznany w 1331 roku w Anglii człowiekowi o imieniu John Kemp. Później włoski patent został przyznany we Florencji w 1421 r. Patenty podobne do współczesnych patentów i egzekwowane przez ustawę pojawiły się w Wenecji w ustawie ustanawiającej patenty w 1474 r. Pierwszy patent wydany w Ameryce Północnej został wydany przez sąd stanu Massachusetts w 1641 r. Człowiekowi o nazwisku Samuel Winslow za metodę wytwarzania soli. Pierwsze federalne prawo patentowe w Stanach Zjednoczonych zostało wydane 10 kwietnia 1790 r. I miało tytuł "Akt promujący postęp pożytecznych sztuk".

Uwaga

Nazwa "patent" wywodzi się ze zwrotów "patentów literowych" i "liter zamkniętych". Pieczęć na literach przykryła fałdę i musiała zostać złamana w celu odczytania listu. Pieczęć na liście patentowym została dołączona do dolnej części dokumentu, aby można ją było odczytać z nienaruszoną pieczęcią. Patenty na oprogramowanie mają bardzo skomplikowaną ścieżkę i czasami są blokowane i akceptowane od niedawna. Ale nie ma gwarancji, że patenty na oprogramowanie będą zawsze akceptowane przez urząd patentowy USA. W latach 60. patenty na oprogramowanie zostały zablokowane i wszczęto kilka procesów sądowych, a sądy zasadniczo zgadzały się, że oprogramowanie nie posiada zdolności patentowej. W 1981 r. Sąd Najwyższy USA zaangażował się w sprawę Diamond vs. Diehr i zdecydował, że przynajmniej w szczególnych przypadkach oprogramowanie można opatentować. Wymusiło to zmianę procedury w Urzędzie Patentowym. Sytuacja pozostała jednak mętna i niejednoznaczna iw dużej mierze decydowała o tym indywidualnie, bez żadnych prawdziwych wskazówek i stałych zasad. W 1998 r. W słynnej sprawie State Street Bank vs. Signature Financial Group ostatecznie zdecydowano, jakie formy oprogramowania można opatentować. Ten przypadek dotyczył metody przetwarzania funduszy wspólnego inwestowania. Sąd Najwyższy uznał, że procesy biznesowe, w tym procesy zawarte w oprogramowaniu, mogą być opatentowane. Istniało również wiele innych wynalazków prekursorskich. Na przykład bez tranzystorów i układów scalonych nie byłoby żadnych komputerów przenośnych, komputerów wbudowanych ani żadnych małych urządzeń elektronicznych, które obecnie korzystają z oprogramowania. Wynalazki, które stały się integralnymi częściami komputerów, obejmują tworzywa sztuczne do skrzynek i ekranów, układy scalone, tranzystory, karty graficzne i wyświetlacze LED. Inne wynalazki miały silny wpływ na wykorzystanie komputerów, a tym samym na oprogramowanie, które zostało stworzone do obsługi tych zastosowań. Na przykład bez patentu IBM z 1960 r. Na pasek magnetyczny, który można by zastosować do plastiku, karty kredytowe nie zostałyby opracowane. Bez wynalezienia atramentu magnetycznego czeki bankowe byłyby sortowane alfabetycznie zamiast w porządku numerycznym i prawdopodobnie sortowane ręcznie.


Powrót

Kluczowe wynalazki związane z oprogramowaniem



Wszystkie wynalazki wymienione w poprzednich tabelach są w taki czy inny sposób ważne. Jednak myśląc o wynalazkach, które miały największy wpływ na oprogramowanie, wynalazki omówione w następnej sekcji są najbardziej krytyczne.

Języki alfabetyczne

Informacje zapisane za pomocą piktogramów, takich jak egipskie hieroglify, są eleganckie i piękne oraz stworzyły cudowną kaligrafię, ale takie systemy nie nadają się do szybkiego wprowadzania danych i komputeryzacji. To samo dotyczy informacji zapisanych za pomocą ideogramów, takich jak chińskie i japońskie kanji (które używają chińskich symboli). Istnieją tysiące symboli, co bardzo utrudnia pisanie. Podczas II wojny światowej tekst wprowadzony do japońskiej maszyny kodującej "Purple" faktycznie wykorzystywał dwie amerykańskie maszyny do pisania Underwood i zwykły tekst przy użyciu angielskich znaków. Języki alfabetyczne mają największą szybkość podczas wpisywania tekstu.

Liczby binarne i dziesiętne oraz zero

Komputery i oprogramowanie mogą przetwarzać liczby przy użyciu dowolnej podstawy, takiej jak dwójkowa, ósemkowa, dziesiętna lub szesnastkowa. Jednak obwody elektroniczne do wykonywania matematyki są nieco łatwiejsze do zaprojektowania przy użyciu arytmetyki binarnej. Systemy numeracji ósemkowej lub o podstawie 8 można łatwo przekształcić z binarnego. (Niektóre plemiona rdzennych Amerykanów stosowały liczby ósemkowe, ponieważ liczyły przy użyciu odstępów między palcami, a nie samych palców.) Kilka komputerów było opartych na liczbach ósemkowych, takich jak linia DEC PDP. Liczby szesnastkowe lub szesnastkowe są również używane w komputerach i są wygodne, ponieważ pasują do pojemności bajtów. Jednak większość codziennych obliczeń używanych przez ludzi opiera się na liczbach dziesiętnych lub dziesiętnych. Liczby dziesiętne są nieco analogiczne do klawiatury QWERTY: nie optymalne, ale tak szeroko stosowane, że przejście na coś innego byłoby zbyt kosztowne do rozważenia. Wydawało się, że przecinek dziesiętny pochodzi z Indii w IX wieku, ale to John Napier uczynił tę koncepcję ważną w matematyce zachodniej około 1620 roku. Napier wynalazł również logarytmy i interesujący ręczny kalkulator zwany "kościami Napiera". Logarytmy były używane w regułach pierwszego slajdu i dlatego są ważnym tematem tła dla obliczeń analogowych. Wydaje się, że pojęcie zera ma kilka niezależnych źródeł. Był używany w Babilonie z podstawową matematyką 60, ale najwyraźniej jako symbol zastępczy, a nie faktyczne obliczenia. To użycie miało miejsce około 2500 lat temu. Olmekowie i Majowie używali zera jako prawdziwej liczby i używano go do obliczeń kalendarzowych, które były dość złożone. Wydaje się, że to użycie zera datuje się na około 400 rne. Użycie zera w Indiach datuje się na około 458 rne, kiedy to znaleziono w tekście o matematyce. Nie jest pewne, czy był to autochtoniczny wynalazek, czy odziedziczony po Babilonie. Później, w latach sześćdziesiątych XX wieku, słynny indyjski matematyk Brahmagupta napisał artykuł o zastosowaniu zera, które samo przeszło od zera do liczb ujemnych. Liczby dziesiętne, przecinek dziesiętny i zero były ważnymi prekursorami prowadzącymi do obliczeń komputerowych i programowych.

Komputery cyfrowe

Później omówimy ewolucję komputerów cyfrowych i związanego z nimi oprogramowania od połowy lat 30. XX wieku do 2010 r., Z prognozami do 2019 r. Dość powiedzieć, że oprogramowanie zostało stworzone specjalnie do działania na komputerach cyfrowych. Bez komputerów cyfrowych nie byłoby oprogramowania. Bez oprogramowania komputery cyfrowe nie miałyby większego celu i prawdopodobnie nie zastąpiłyby komputerów analogowych.

Języki programowania wyższego poziomu

Programowanie przy użyciu zarówno języka maszynowego (głównie do poprawek i napraw błędów), jak i podstawowego języka asemblera było pierwszym sposobem programowania komputerów IBM 1401. Język maszynowy jest bardzo podatny na błędy, a także szybko męczy z powodu dużej koncentracji potrzebnej do radzenia sobie z nim. Asembler był krokiem we właściwym kierunku, ale niezbyt dużym krokiem. Konieczność korzystania z dziesiątek instrukcji montażu do wykonywania obliczeń lub formatowania wydruków była czasochłonna i nudna. Języki wyższego poziomu, począwszy od ALGOL, COBOL, FORTRAN, PL / I, APL i innych, skróciły czas kodowania, znacznie zredukowały błędy kodowania i przekształciły programowanie w opłacalne zajęcie.

Pamięć o dostępie swobodnym

Sekwencyjne przechowywanie danych na taśmie papierowej, kartach lub taśmie magnetycznej miało dość długi i użyteczny okres użytkowania. Było to jednak bardzo nieefektywne i wymagało zbyt dużego ruchu taśm, aby osiągnąć duże prędkości. Wynalezienie dysków twardych i pamięci masowej o dostępie swobodnym umożliwiło szybsze przetwarzanie, wyrafinowane algorytmy wyszukiwania i ścieżkę, która ostatecznie doprowadziłaby do dzisiejszego świata "dużych zbiorów danych" z miliardami rekordów i milionami plików wykorzystywanych w przypadku konkretnych problemów. Bez dostępu swobodnego nowoczesne komputery i oprogramowanie poradziłyby sobie tylko z niewielką częścią ważnych problemów związanych z analizą danych. Dostęp losowy doprowadziłby również do koncepcji relacyjnych baz danych, sortowania i różnych potężnych języków zapytań z rodziny Structured Query Language (SQL).


Powrót

Wpływ oprogramowania na ludzi i społeczeństwo



Wpływ oprogramowania na ludzi i społeczeństwo Ramy czasowe, w których rozwijały się komputery i oprogramowanie, to zaledwie 75 lat. Jednak ich wpływ na poszczególnych ludzi i społeczeństwa był tak samo ważny jak prasa drukarska, samoloty, telewizja i samochody.

Korzystne narzędzia i aplikacje

Poniżej znajduje się podsumowanie narzędzi i aplikacji, które zmieniły sposób działania firm; wojny są toczone; a ludzie zbierają informacje, komunikują się i wykorzystują swój wolny czas. Zaskakujące jest, że wszystkie one powstały w ciągu ostatnich 50 lat. Prawdopodobnie połowa z tych narzędzi i aplikacji ma mniej niż 25 lat.

•  Narzędzia biznesowe
•  Księgowość
•  Studia aktuarialne
•  Reklama w Internecie
•  Planowanie rolnictwa
•  Analytics
•  Skanery kodów kreskowych
•  Big data
•  Analiza budżetu
•  Chmura obliczeniowa
•  Analiza konkurencji
•  Śledzenie kosztów i zasobów
•  Szacowanie kosztów
•  Crowdsourcing
•  Zarządzanie relacjami z klientami (CRM)
•  Analiza satysfakcji klienta
•  Obsługa klienta
•  Analiza optymalizacji dystrybucji
•  Sterowanie siecią elektroenergetyczną
•  Pakiety planowania zasobów przedsiębiorstwa (ERP)
•  Finanse
•  Zarządzanie
•  Zarządzanie zasobami ludzkimi
•  Inwentarz
•  Inwestycje
•  Kontrole zapasów na czas
•  Wsparcie prawne
•  Marketing
•  Poszukiwanie ropy naftowej
•  Wprowadzanie zamówień
•  Śledzenie zamówienia
•  Planowanie i harmonogramowanie
•  Kontrole procesu
•  Systemy rezerwacji
•  Szacowanie i analiza ryzyka
•  Zrobotyzowana produkcja
•  Wsparcie sprzedaży
•  Zarządzanie łańcuchem dostaw
•  Ankiety i analiza opinii
•  Sterowanie siecią telefoniczną
•  Oczyszczanie wody
•  Sprzedaż detaliczna w Internecie
•  Bazy danych
•  Grafika i obrazy
•  Muzyka
•  Sygnały i analogowe
•  Tekst i numeryczne
•  Magazyn danych
•  Formularze o mieszanych danych
•  Narzędzia edukacyjne
•  Porównawcze statystyki dotyczące edukacji
•  Planowanie programu nauczania
•  Indywidualne e-learning dla każdego ucznia
•  Analiza spisu umiejętności
•  Specjalne narzędzia dla osób niepełnosprawnych
•  Badania studentów za pośrednictwem sieci
•  Wirtualne sale lekcyjne
•  Urządzenia wbudowane
•  Silniki i hamulce samochodowe
•  Samochodowe systemy bezpieczeństwa
•  Awionika
•  Nawigacja GPS
•  Aparaty słuchowe
•  Produkcja
•  Medyczny
•  Przetwarzanie sygnałów
•  Inteligentne urządzenia
•  Telekomunikacja
•  Narzędzia rządowe
•  Kontrola ruchu lotniczego
•  Weryfikacja w tle
•  Analiza budżetu
•  Spis ludności
•  Akta sądowe
•  Gotowość na wypadek katastrof
•  Analiza ekonomiczna
•  Statystyki zatrudnienia
•  Monitoring środowiska
•  Kontrole finansowe
•  Statystyki dotyczące zdrowia i długowieczności
•  Lokalizacja, projektowanie i budowa autostrad
•  Weryfikacja tożsamości
•  Zagospodarowanie terenu
•  Egzekwowanie prawa
•  Dokumenty prawne
•  Mandaty i przepisy
•  Obrona narodowa
•  Analiza patentowa
•  Dokumenty polityczne
•  Monitorowanie zanieczyszczeń
•  Więzienia
•  Oceny nieruchomości
•  Redystricting
•  Agencje regulacyjne
•  Ocena ryzyka
•  Opodatkowanie
•  Analiza i kontrole ruchu
•  Wsparcie dla bezrobotnych
•  Rekordy wyborców
•  Kontrola zaopatrzenia w wodę
•  Opieka społeczna
•  Zagospodarowanie przestrzenne
•  Wypoczynek
•  Blu-ray i cyfrowe wideo
•  Gry komputerowe
•  Cyfrowe formaty muzyczne
•  Geocaching
•  Listy odtwarzania muzyki
•  Czasopisma online
•  Przesyłanie strumieniowe wideo
•  Światy rzeczywistości wirtualnej
•  Medyczny
•  Koordynacja w czasie rzeczywistym między zespołami medycznymi
•  Urządzenia zewnętrzne
•  Wszczepione urządzenia
•  Prowadzenie dokumentacji ubezpieczeniowej
•  Testy laboratoryjne
•  Monitorowanie szpitala pacjenta
•  Dokumentacja pacjenta
•  Zrobotyzowane urządzenia chirurgiczne
•  Statystyki: krajowe, globalne
•  Obrona narodowa
•  Tarcze przeciwrakietowe
•  Symulacja walki
•  Dowodzenie i kontrola
•  Bezpieczeństwo cybernetyczne
•  Monitorowanie głębin oceanów
•  Wczesne ostrzeżenia o zagrożeniach
•  Szyfrowanie i deszyfrowanie
•  Gromadzenie informacji i koordynacja
•  Analiza logistyczna
•  Przechwytywanie sygnału Agencji Bezpieczeństwa Narodowego
•  Monitoring satelitarny
•  Bezpieczna komunikacja
•  Analiza zagrożeń
•  Narzędzia osobiste
•  Blogi
•  Komputery
•  Listy kontaktów
•  Codzienne kanały informacyjne
•  Urządzenia cyfrowe
•  Aparaty cyfrowe
•  Cyfrowe przetwarzanie obrazu
•  Zegarki cyfrowe
•  E-booki
•  E-mail
•  Grafika
•  podręczne, w pełni funkcjonalne kalkulatory cyfrowe
•  Wsparcie dla osób niesłyszących, niewidomych itp.
•  Finanse domowe
•  Natychmiastowy czat komputerowy
•  Muzyka
•  Tłumaczenie na język naturalny
•  Prezentacje
•  Planowanie
•  Wyszukiwarki
•  Smartfony
•  Portale społecznościowe
•  Arkusze kalkulacyjne
•  Statystyka
•  Komputery typu Tablet
•  Tekst na mowę
•  Przetwarzanie wideo
•  Przeglądarki internetowe
•  Przetwarzanie tekstu
•  Profesjonalne narzędzia
•  Księgowość
•  Analytics
•  Animacja i grafika
•  Architektura
•  Inżynieria lądowa
•  Animacja komputerowa
•  Eksploracja danych
•  Projektowanie
•  Analiza ekonomiczna
•  E-learning
•  Szyfrowanie i deszyfrowanie
•  Inżynieria
•  Inteligentni agenci do skanowania internetowego
•  Egzekwowanie prawa
•  Wsparcie prawne
•  Matematyka
•  Pomoc medyczna
•  Kompozycja muzyczna
•  Nagrywanie, odtwarzanie i miksowanie muzyki
•  Bezpieczeństwo narodowe
•  Analiza patentowa
•  farmaceutyczny
•  Zarządzanie projektami
•  Zarządzanie własnością
•  Publikowanie
•  aukcje nieruchomości
•  Urządzenia do sprawdzania pisowni i gramatyki
•  Statystyka
•  Narzędzia programistyczne
•  Rozmiar aplikacji
•  Automatyczne testowanie
•  Analiza złożoności
•  Kontrole konfiguracji
•  Ciągła integracja
•  Oszacowanie kosztów i harmonogramu
•  Eksploracja danych starszych aplikacji
•  Debugowanie
•  Wsparcie inspekcyjne
•  o Ocena utrzymania i wsparcia
•  Pomiary i wzorce
•  Kompilatory języków programowania
•  Ocena jakości
•  Wymagania i analiza projektu
•  Modelowanie wymagań
•  Analiza możliwości ponownego wykorzystania
•  Szacowanie ryzyka
•  Analiza statyczna
•  Narzędzia testowe (projekt i wykonanie)
•  Wirtualizacja
•  Projektowanie i budowa stron internetowych
•  Narzędzia ochronne
•  Anty spam
•  Antyspyware
•  o Antywirus
•  Inteligentne systemy alarmowe
•  Narzędzia naukowe
•  Analiza archeologiczna
•  Analiza astronomiczna
•  Analiza biologiczna
•  Analiza chemiczna
•  Kalibracja obrazu wspomagana komputerowo
•  Urządzenia optyczne stabilizowane komputerowo
•  Eksploracja głębokich oceanów
•  Analiza DNA
•  Analiza epidemiologiczna
•  Analiza kryminalistyczna
•  Eksploracja geologiczna (radar ze skanowaniem bocznym)
•  Analiza językowa
•  Metalurgia
•  Analiza meteorologiczna i prognozy pogody
•  Nanotechnologie
•  Sterowanie urządzeniami jądrowymi
•  Sprzęt do badań fizyki
•  Lunety celownicze dla osób niesłyszących, niewidomych itp.
•  Symulacje zjawisk fizycznych
•  Pojazdy kosmiczne, łaziki i satelity
•  Wizualizacja

Jak widać z tej listy, komputery i oprogramowanie dokonują głębokich zmian w każdym aspekcie ludzkiego życia: edukacji, pracy, wojnie, rozrywce, medycynie, prawie i we wszystkim innym.

Szkodliwe wynalazki


Komputery i oprogramowanie wprowadziły również szereg szkodliwych wynalazków, które są wymienione poniżej, z których część wcześniej nie istniała. Wśród szkodliwych wynalazków spowodowanych przez komputery i oprogramowanie są kradzież tożsamości, hakowanie i wirusy komputerowe. To nowe i alarmujące działania przestępcze.

•  Porywacze przeglądarki
•  botnety komputerowe
•  Śledzenie klawiatury komputera
•  Spam komputerowy
•  Oprogramowanie szpiegowskie komputerowe
•  Wirusy komputerowe
•  Robaki komputerowe
•  Skomputeryzowana obsługa klienta
•  Trudności w korygowaniu błędów w danych komputerowych
•  Elektroniczne maszyny do głosowania bez kopii zapasowej
•  Narzędzia hakerskie
•  Kradzież tożsamości
•  Wyłudzanie informacji
•  Piractwo
•  Zrobotyzowane rozmowy telefoniczne (robo-rozmowy)
•  Zrobotyzowane systemy broni
•  Broń inteligentna: bomby, drony i pociski
•  Spam
•  Specjalne wirusy atakujące sprzęt przemysłowy
•  Programy szpiegujące
•  Oprogramowanie giełdowe bez wyłączania anomalii
•  Niezrozumiałe menu głosowe telefonu
•  Pornografia internetowa

Zagrożenia te są stosunkowo nowe i wszystkie są coraz bardziej niebezpieczne we współczesnym świecie. Rzeczywiście, kradzież tożsamości stała się jednym z największych i najbardziej powszechnych przestępstw w historii ludzkości. Jest to również przykład nowego rodzaju przestępstwa, w którym przestępca i ofiara nigdy się nie widzą, a w momencie popełnienia przestępstwa mogą być oddaleni o ponad 12 000 mil. Te szkodliwe aspekty komputerów i oprogramowania zapoczątkowały nowe przepisy i nowe branże, które zapewniają ochronę przed wirusami, ubezpieczenie przed włamaniem i inne formy ochrony. Wynalazki te doprowadziły również do powstania nowych i specjalnych jednostek zajmujących się cyberprzestępczością we wszystkich głównych siłach policyjnych, FBI, CIA, Secret Service, Departamencie Obrony i służbach mundurowych, Homeland Security i innych organizacjach rządowych. Pojawienie się Kongresowego Klubu Bezpieczeństwa Cybernetycznego jest oznaką, że te nowe rodzaje cyberprzestępczości przyciągają uwagę na najwyższych szczeblach władzy.

Ważenie ryzyka

Komputery i oprogramowanie dokonują głębokich zmian w każdym aspekcie ludzkiej egzystencji. Wielu czytelników ma tysiące "przyjaciół" w sieciach społecznościowych. Jeszcze więcej czytelników śledzi codzienne życie i czynności niezliczonych celebrytów i osobistych przyjaciół, używając "tweetów" lub krótkich wiadomości. Wiadomości tekstowe zaczynają przewyższać liczbę rozmów telefonicznych na żywo (a także kosztują więcej ze względu na nowe skomputeryzowane algorytmy rozliczeniowe). Zakupy e-booków przewyższyły ostatnio zakupy zwykłych książek papierowych. Banki pobierają teraz dodatkowe opłaty za wystawianie wyciągów bankowych w formie papierowej w przeciwieństwie do wyciągów elektronicznych online. Cała nasza medycyna i edukacja są teraz skomputeryzowane i przechowywane w bazach danych. Nie byłoby możliwe zarezerwowanie lotu lub hotelu bez komputerów i oprogramowania. Rzeczywiście, po dużych burzach śnieżnych lub huraganach, gdy przestają działać linie energetyczne, wiele rodzajów przedsiębiorstw zaprzestaje działalności, ponieważ nie są już przygotowane do obsługi transakcji ręcznych. Gry komputerowe, w tym gry masowo interaktywne z tysiącami jednoczesnych graczy, są obecnie preferowaną formą rozrywki dla milionów młodych ludzi. Nowoczesne filmy wykorzystują efekty specjalne z realistycznym realizmem, które są generowane przez komputery. Możliwe jest nawet tworzenie nowych ról dla nieżyjących już aktorów i aktorów za pomocą komputerów i oprogramowania. Wpływ komputerów i oprogramowania był połączeniem dobra i zła. Z pewnością możliwość wysyłania e-maili i wiadomości tekstowych oraz znajdowania informacji w sieci to bardzo przydatne dodatki w naszym codziennym życiu. Używamy map GPS na naszych smartfonach prawie za każdym razem, gdy podróżujemy, zwłaszcza gdy podróżujemy do nowych i nieznanych miejsc. Zdolność lekarzy do natychmiastowej komunikacji z kolegami pomaga w praktyce lekarskiej. Skomputeryzowane medyczne maszyny diagnostyczne, takie jak skanery CAT i sprzęt do rezonansu magnetycznego, są również korzystne. Implanty ślimakowe przywróciły słuch tysiącom głęboko niesłyszących pacjentów. Produkcja zrobotyzowana jest tańsza, a czasem bardziej precyzyjna niż ręczna budowa wielu skomplikowanych urządzeń. Jednak stale rosnące prawdopodobieństwo kradzieży tożsamości i ciągła potrzeba ochrony naszych komputerów i urządzeń elektronicznych przed hakerami i kradzieżą danych są źródłem ciągłych zmartwień, a także źródłem znacznych wydatków. Oceniając zalety i wady komputerów i oprogramowania, waga dostępnych dowodów jest taka, że oprogramowanie i komputery przyniosły więcej korzyści dla ludzkiego zdrowia niż spowodowały szkody. Oczywiście ci, którzy zostali skrzywdzeni, prawdopodobnie się nie zgadzają. Jednak statystycznie biorąc pod uwagę wszystkie znane zastosowania komputera i oprogramowania we współczesnym świecie, zauważono znaczące korzyści w sposobie komunikacji, prowadzenia interesów oraz prowadzenia prac naukowych i inżynieryjnych. To jest wątpliwe, czy jakikolwiek naukowiec lub inżynier chciałby przestać używać komputerów i oprogramowania. To samo dotyczy wielu innych rodzajów pracy, takich jak opieka zdrowotna, egzekwowanie prawa, księgowość, a nawet nieruchomości.

Podsumowanie

To preludium pokazało ewolucję i konwergencję wielu dziedzin, które połączyłyby się w celu stworzenia nowoczesnych komputerów i oprogramowania. Matematyka, przechowywanie i wyszukiwanie danych, metody komunikacji i samo oprogramowanie połączyłyby się, aby stworzyć współczesną erę oprogramowania osobistego i komputerów osobistych. Późniejsze rozdziały tej książki omawiają ewolucję inżynierii oprogramowania od najwcześniejszych marzeń wizjonerów w latach trzydziestych XX wieku do rozwoju największych i najbogatsze firmy w historii ludzkości do końca XX wieku


Powrót

1930 do 1939: Podstawy informatyki cyfrowej



We wczesnych latach trzydziestych XX wieku oryginalne papiery doprowadziły do zaprojektowania komputerów cyfrowych. Pod koniec dekady kilka działających komputerów cyfrowych dowiodło, że komputery elektroniczne są możliwe. Również w tej dekadzie prawdopodobieństwo poważnej wojny doprowadziło do dużych inwestycji rządowych w wojskowe komputery analogowe do kierowania ogniem, wyrzutni torped i celowników.

Pierwsi innowatorzy nowoczesnej informatyki

Dekada od 1930 do 1939 roku była erą bez oprogramowania, jakie znamy dzisiaj. Była to jednak bardzo owocna era zarówno pod względem wynalezienia logicznych idei leżących u podstaw oprogramowania, jak i projektowania fizycznych urządzeń komputerowych. Pod koniec tej dekady było oczywiste, że wkrótce wybuchnie poważna wojna. Stworzyło to poczucie pilności, które doprowadziło do znacznego finansowania urządzeń do szybkiego obliczania, które można by wykorzystać do celów wojskowych, takich jak obliczenia balistyczne, logistyka i kryptoanaliza. Wszystkie kraje poczyniły znaczne inwestycje w komputery analogowe do celów wojskowych, takich jak sterowanie działami morskimi, celowanie torpedami podwodnymi i celowniki bombowe. Chociaż w tym dziesięcioleciu zbudowano i przetestowano wiele takich urządzeń analogowych, najlepiej omówić je w części omawiającej lata czterdzieste XX wieku, kiedy faktycznie były używane w walce. W 1930 roku Vannevar Bush opracował kalkulator różnicowy, który był dowodem na to, że urządzenia liczące mogą radzić sobie z szeregiem problemów matematycznych zamiast jednej wąskiej formy obliczeń. Było to raczej urządzenie analogowe niż komputer cyfrowy, więc nie jest to linia, z której bezpośrednio wywodzą się dzisiejsze komputery cyfrowe. W 1934 roku niemiecki naukowiec Konrad Zuse wysunął pomysł, że komputer lub silnik liczący będzie wymagał jednostki sterującej, pamięci i jednostki arytmetycznej. Zuse był pionierem zarówno architektury obliczeniowej, jak i języków programowania. Jednak jego twórczość nie była dobrze znana w Stanach Zjednoczonych aż do zakończenia II wojny światowej. Jest pretendentem na krótkiej liście zbudowania pierwszego komputera. Jego najbardziej udane komputery zostały zbudowane w ciągu następnej dekady. W 1935 roku IBM zatrudnił trzy pracownice, jako jedne z pierwszych w firmie technologicznej. Prezes IBM, Thomas J. Watson Sr., zapowiedział, że IBM zaoferuje równe wynagrodzenie i równe obowiązki, niezależnie od płci. Później IBM zrobił to samo z mniejszościami etnicznymi, które były często dyskryminowane. W przyszłych dziesięcioleciach przemysł komputerowy i oprogramowania będzie bardziej egalitarny niż niektóre starsze dziedziny techniczne, takie jak inżynieria mechaniczna i elektryczna. Jest kwestią interesu socjologicznego, że komputery i oprogramowanie zaczęły się od dużej firmy deklarującej równe prawa i równe wynagrodzenie. W 1936 roku Zuse rozpoczął budowę komputera opartego na przekaźnikach (podobnego do prac Amerykanina George′a Stibitza) o nazwie Z1. Ta maszyna została ukończona w 1938 roku, ale okazała się zawodna z powodów mechanicznych. Jednak posiadał programowalność. Po pośredniej maszynie Z2, później w 1941 roku, Zuse ukończył bardziej wyrafinowaną maszynę Z3, którą można było programować, a programy wprowadzano za pomocą perforowanej folii. Maszyny Zuse wykorzystywały liczby binarne i są postrzegane jako operacyjne prekursory dzisiejszych komputerów. Nadal toczy się dyskusja, czy Zuse, Atanasoff i Berry zasługują na uznanie za zbudowanie pierwszego działającego komputera. W rzeczywistości obaj pracowali niezależnie i obaj zasługują na uznanie. W 1936 roku słynny Alan Turing opublikował przełomową pracę zatytułowaną "On Computable Numbers", która jest ogólnie uważana za opis działającego komputera z programem wykonywalnym. Praca Turinga obejmowała zarówno praktyczne, jak i teoretyczne koncepcje, które doprowadzą do imponujących przyszłych wynalazków i działających komputerów używanych do łamania kodów. Maszyna Turinga to abstrakcyjne przedstawienie działającego komputera, który sekwencyjnie przetwarza instrukcje i wykonuje operacje matematyczne i logiczne. Nawet dzisiaj standardową definicją komputera odnoszącego sukcesy jest to, że jest on "ukończony według Turinga" lub zawiera wszystkie koncepcje przedstawione w nowatorskim artykule Turinga. Turing również opracował i zdefiniował koncepcję algorytmu, a także wniósł ważny wgląd w problemy, które mogą być rozwiązane przez komputer, oraz problemy, które są nierozwiązywalne. Wkład Turinga w wysiłek wojenny w Bletchley Park zostanie omówiony w dekadzie od 1940 do 1949 roku. W 1937 roku Claude Shannon, będąc absolwentem MIT, napisał pracę magisterską, która udowodniła, że przekaźniki elektryczne mogą realizować koncepcje logiki Boole′a. Praca Shannona doprowadziła do opracowania udanych obwodów cyfrowych, które są niezbędne do działania komputerów cyfrowych. Rosyjski badacz, Wiktor Szestakow z Moskiewskiego Uniwersytetu Państwowego, opracował teorię podobną do Shannona już w 1935 roku. Jednak koncepcje Szestakowa zostały opublikowane dopiero w 1941 roku, więc idee Shannona mają pierwszeństwo. Zarówno Shannon, jak i Szestow uznali, że logika symboliczna, przedstawiona przez matematyka George&primle; Boole′a w jego książce An Investigation on the Laws of Thought z 1854 r., może być obsługiwana za pomocą przekaźników i obwodów elektronicznych, które mogą obsługiwać logiczne decyzje, a także przeprowadzać matematyczne operacje. To właśnie połączenie przetwarzania logicznego z przetwarzaniem matematycznym daje współczesnym komputerom (i oprogramowaniu) olbrzymi zakres możliwości rozwiązywania problemów. Komputery i oprogramowanie mogą nie tylko zapewniać szybkie obliczenia matematyczne, ale także radzić sobie ze złożonymi problemami logicznymi, takimi jak routing telefoniczny. W listopadzie 1937 roku matematyk Bell Labs, George Stibitz, pracujący w domu na kuchennym stole, zbudował prototypowe urządzenie, które wykorzystywało dwa przekaźniki telefoniczne i żarówki latarki do reprezentowania liczb binarnych 0 i 1. Stibitz również zdał sobie sprawę, że to eksperymentalne urządzenie rozszerzone do obsługi szybkich obliczeń obejmujących zarówno dzielenie, jak i mnożenie. Po początkowej obojętności kierownictwo firmy Bell zdecydowało się sfinansować większą działającą wersję prototypowej maszyny przekaźnikowej Stibitz. Kosztując około 20 000 dolarów, ostatecznie w 1938 roku stała się maszyną o nazwie Model 1. Maszyna obliczeniowa Model 1 miała około 450 przekaźników, które początkowo mogły obsługiwać mnożenie, dzielenie, a później dodawanie i odejmowanie. Ta maszyna wykorzystywała liczby binarne do reprezentowania wartości dziesiętnych, co oczywiście stało się później głównym sposobem działania komputerów. Stibitz będzie nadal wprowadzał ulepszenia, które zostaną omówione później. Jednym z interesujących aspektów maszyny Stibitz było użycie klawiatury typu teletype dla wejść i wyjść. Oznaczało to, że nie było konieczne, aby urządzenie obliczeniowe znajdowało się w sąsiedztwie mechanizmu wejściowego. W ciągu kilku lat, w 1940 roku, Stibitz zademonstrował zdalne wejście i wyjście za pośrednictwem linii telefonicznych na odległość ponad 30 km. Ta wczesna demonstracja zdalnego przetwarzania ostatecznie rozszerzy się na internet, jaki znamy dzisiaj. W 1938 roku William Hewlett i David Packard założyli firmę Hewlett-Packard Company (powszechnie znaną pod inicjałami HP). Ta firma zaczynała od różnych urządzeń elektronicznych, takich jak oscyloskopy i oscylatory audio. W późniejszych latach HP stał się głównym dostawcą komputerów przenośnych, drukarek i niestandardowych aplikacji. W 1939 roku John Vincent Atanasoff i Clifford Berry opracowali prototyp komputera o nazwie ABC (nazwany na cześć inicjałów wynalazców). Ta maszyna jest często uważana za pierwszy komputer cyfrowy na świecie, chociaż istnieją rywalizujące roszczenia i znaczące debaty, a nawet spory sądowe dotyczące pochodzenia współczesnych komputerów. W 1939 roku w laboratorium IBM w Endicott w stanie Nowy Jork rozpoczęto prace nad kolejnym komputerem. Nazywało się to komputerem Harvard Mark 1. Oficjalna nazwa tego urządzenia brzmiała "automatyczny kalkulator sterowany sekwencją". Mark 1 został zaprojektowany przez matematyka z Harvardu Howarda Aikina i innych kolegów, takich jak Grace Hopper i kilku inżynierów IBM. Na projekt Mark 1 wpłynęło wcześniejsze mechaniczne urządzenie obliczeniowe zaprojektowane przez Charlesa Babbage′a w latach siedemdziesiątych XIX wieku, ale nie ukończone za jego życia.

Uwaga: działający silnik analityczny Babbage został zbudowany dopiero w 1991 r. Do udanej budowy w 1991 r. Toczyła się debata, czy silnik analityczny będzie działał, czy nie. Ale zadziałał i był w rzeczywistości kompletnym komputerem cyfrowym Turinga. Po Babbage′u w latach 70. XIX wieku następny kompletny komputer cyfrowy Turinga pojawił się dopiero w latach pięćdziesiątych XX wieku.

Mark 1 był urządzeniem elektromechanicznym, które wykorzystywało przekaźniki, kółka do przechowywania i przełączniki obrotowe. Można go było "zaprogramować" za pomocą sekwencyjnych instrukcji wprowadzanych do komputera za pomocą papierowej taśmy. Prace nad tym komputerem rozpoczęto w 1939 roku, ale zakończono dopiero w 1944 roku.

Małe aplikacje matematyczne

W tej dekadzie bardzo małe aplikacje matematyczne były normą. Nie było prawdziwych języków programowania, bardzo mało miejsca na instrukcje lub dane, a raczej prymitywne urządzenia wejściowe i wyjściowe. Są to głównie małe eksperymentalne "programy" utworzone za pomocą języka maszynowego lub jakiejś formy wprowadzania danych z klawiatury. Jak widać, w tej dekadzie dominowały zastosowania naukowe. Programowanie komputerowe, jakie znamy dzisiaj, tak naprawdę nie istniało w latach trzydziestych XX wieku. Zamiast tego zastosowano różne kontrolki, aby zmienić założenia elektromechanicznych urządzeń obliczeniowych. Maszyna Zuse Z1 miała być programowalna, ale nie działała niezawodnie. W dalszej części tej książki omówimy rozmiary aplikacji, wskaźniki produktywności, i jakości. Nie ma dostępnych danych z lat trzydziestych XX wieku, które umożliwiłyby tego rodzaju analizę. Późniejsze części używają 1000 punktów funkcyjnych jako standardowego rozmiaru, który jest mniej więcej równy około 50 000 instrukcji kodowych w języku takim jak Java. W latach trzydziestych XX wieku, przy ograniczonych możliwościach urządzeń obliczeniowych, prawdopodobnie największe aplikacje matematyczne (nie było innych rodzajów) miały mniej niż 10 punktów funkcyjnych lub być może 500 instrukcji kodowych. Większość "programów" mieściła się w zakresie 2 punktów funkcyjnych lub mniej niż 100 instrukcji kodu. Od 1930 do 1939 roku świat stał w obliczu wielkiej wojny. Wojna pociąga za sobą konieczność wykonywania wielu tysięcy obliczeń w celu obsługi logistyki, balistyki i kryptoanalizy. W 1939 roku brytyjska marynarka wojenna zainstalowała analogowy komputer sterujący działem na pancerniku HMS King George V. Koszt tego komputera wyniósł około 213 000 funtów, czyli około 20 000 000 dolarów dzisiejszych pieniędzy. Zajmie wiele lat zanim komputery cyfrowe otrzymały tego rodzaju fundusze, i minie wiele lat, zanim komputery cyfrowe staną się na tyle wyrafinowane, aby zastąpić komputery analogowe na pokładach okrętów wojennych i samolotów. Nieustanne groźby wojskowe w tej dekadzie uwydatniły pilną potrzebę szybkości i niezawodności, szybkie obliczenia matematyczne, a także do rozszerzania urządzeń obliczeniowych z czystej matematyki na dziedzinę rozwiązywania problemów logicznych. Pionierskie teorie i artykuły stworzone przez Turinga, Shannona, Zuse, Atanasoffa, Aikina, Stibitza i innych wkrótce doprowadzą do powstania prawdziwych komputerów cyfrowych, które potrafią radzić sobie z problemami logicznymi i matematycznymi tysiące razy szybciej niż kiedykolwiek w historii ludzkości. Niektóre z tych koncepcji zaczęłyby mieć praktyczny wpływ na wynik II wojny światowej w ciągu zaledwie kilku lat.

Podsumowanie

Na początku lat trzydziestych XX wieku uznano potrzebę szybkich obliczeń, ale praktyczna wiedza na temat budowy takich urządzeń była niewielka. Pod koniec dekady imponujące badania dostarczyły logicznej podstawy dla przetwarzania cyfrowego, a działające komputery były w trakcie opracowywania. W tej dekadzie nastąpiło również włączenie logiki symbolicznej do projektów komputerowych, co wkrótce otworzy szeroki wachlarz nowych rodzajów aplikacji zajmujących się kwestiami logicznymi, takimi jak routing telefoniczny i inne formy podejmowania decyzji. Komputery nie były już postrzegane jako szybkie kalkulatory matematyczne, ale jako narzędzia, które mogą pomóc w rozwiązywaniu złożonych problemów logicznych. Zbudowano kilka nowych komputerów analogowych do celów wojskowych, takich jak sterowanie działami morskimi, celowniki bombowe i wystrzeliwanie torped z łodzi podwodnych.


Powrót

1940 do 1949: Informatyka w czasie II wojny światowej i w okresie powojennym



Dekada od 1940 do 1949 roku była świadkiem pierwszego użycia komputerów w działaniach wojennych w całej historii ludzkości. Potrzeba szybkich obliczeń do obsługi szyfrowania, deszyfrowania, logistyki, balistyki i innych celów wojskowych doprowadziła do szybkiego rozwoju zaawansowania komputerów i oprogramowania. Tysiące komputerów analogowych zostało wykorzystanych do uzbrojenia morskiego, celowników bombowych i celowania torpedami w okrętach podwodnych. Pod koniec dekady komputery stały się użytecznymi i potężnymi narzędziami wojskowymi i były gotowe do ekspansji w sektorze komercyjnym w następnej dekadzie. Na początku dekady słowo "komputer" było nazwą zawodu, którą stosowano wobec ludzi wykonujących skomplikowane obliczenia, czasami przy pomocy mechanicznych kalkulatorów. Pod koniec dekady termin "komputer" został wycofany jako opis pracy człowieka i przeniósł się do nowoczesnego kontekstu urządzenia elektronicznego

Globalny konflikt i obliczenia

II wojna światowa była globalną katastrofą, w wyniku której miliony ludzi zginęły, stały się bezdomne i zubożałe. Jednak wojskowe zapotrzebowanie na szybkie obliczenia i kryptoanalizę doprowadziło do szybkiego postępu w technologii komputerowej i pierwszych aplikacji, które są podobne do używanych obecnie. Wszystkie główne wojujące strony miały programy badawcze w dziedzinie informatyki: Australia, Chiny, Francja, Niemcy, Wielka Brytania, Indie, Włochy, Japonia, Holandia, Norwegia, Polska, Rosja i Stany Zjednoczone. Komputery analogowe otrzymały większe fundusze niż komputery cyfrowe, ponieważ były wykorzystywane do obliczeń balistycznych. Stany Zjednoczone i Wielka Brytania były najbardziej ambitne i odnoszące największe sukcesy. Komputery zaprojektowane i opracowane przez Wielką Brytanię są najbardziej znane ze względu na ich sukcesy w łamaniu niemieckich kodów i rozszyfrowywaniu wiadomości tworzonych na niemieckiej maszynie Enigma. W 1940 r. Słowo "komputer" było używane jako opis zawodu pracowników ludzkich wykonujących złożone obliczenia dla organizacji wojskowych i cywilnych. Zarówno firmy techniczne, jak i organizacje wojskowe zatrudniały setki ludzkich komputerów, które pracowały za pomocą własnych umysłów lub mechanicznych maszyn dodających i kalkulatorów. Niektóre obliczenia były złożonymi równaniami różniczkowymi, podczas gdy inne były bardziej przyziemnymi obliczeniami płac i kosztów. Większość tych ludzkich komputerów stanowiły kobiety. Powodem tego jest fakt, że wiele kobiet uczyło się matematyki, ale nierówność w wynagrodzeniach kobiet oznaczała, że zatrudnianie komputerów kobiet było znacznie tańsze niż męskich. Ta nierówność w wynagrodzeniach nie zostanie naprawiona przez kilka następnych dziesięcioleci, a nawet dzisiaj nie jest w pełni naprawiona. Kiedy w 1945 roku w Moore School of Engineering w Filadelfii dobiegał ukończenia Electrical Numerical Integrator and Computer (ENIAC), wybrano sześć kobiet, które miały nauczyć się go programować. Tak więc ewolucja terminu "komputer" od opisu pracy człowieka do nazwy urządzenia elektronicznego była częściowo spowodowana faktem, że komputery ludzkie stały się pierwszymi programistami komputerów elektronicznych. Kiedy ENIAC został przeniesiony z uniwersytetu do bazy wojskowej, sześć programistek straciło pracę, najwyraźniej z powodu obowiązujących wówczas ograniczeń płci. Większość kontynuowała programowanie, ale tylko dla cywilnych firm zamiast wojska. Ten problem dyskryminacji ze względu na płeć również utrzymywał się przez kilka następnych dziesięcioleci. Historia nie opisuje roli kobiet we wczesnych etapach rozwoju komputerów.

Uwaga: skale wynagrodzeń za pracę w zakresie inżynierii oprogramowania były nieco bardziej wyrównane ze względu na płeć niż w przypadku niektórych starszych dyscyplin technicznych, takich jak inżynieria mechaniczna i elektryczna. Jednym z powodów może być to, że w 1935 roku Thomas J. Watson Sr., prezes IBM, ogłosił korporacyjną politykę równego wynagrodzenia za taką samą pracę. Później, gdy IBM wszedł do branży komputerowej, kontynuował tę egalitarną politykę. W dziedzinie inżynierii oprogramowania równe szanse zapewniają przewagę konkurencyjną, ponieważ programowanie jest trudnym zadaniem. Równe szanse zatrudnienia i wynagrodzenia zwiększają liczbę pracowników posiadających dobre umiejętności w zakresie oprogramowania.


Powrót