Jak zaprogramowano programowanie?

2

Witam, interesuje mnie jak zaprogramowano komputery? Bo przecież ktoś musiał zaprogramować programowanie?
Oraz jak to jest, że to w ogóle działa :)
Procesor np. te wszystkie urządzenia?

P.S - Czy od programistów "aż" taka wiedza jest wymgana?

2
  • Co było pierwsze: jajko czy kura?
  • Kogut.
1

Bardzo ciekawe pytanie. Też mnie zastanawia w czym było 'napisane' oprogramowanie pierwszego komputera....

9
MVC napisał(a):

Bardzo ciekawe pytanie. Też mnie zastanawia w czym było 'napisane' oprogramowanie pierwszego komputera....

Przełącznikami, potem kartami perforowanymi, potem pojawiły się dyskietki and so on...

Eh, te wasze pytania.

5

@PeterZof u mnie na studiach takie informacje były wymagane, miałem semestr elektroniki analogowej żeby wiedzieć jak z tranzystorów zrobili bramki. Potem semestr techniki cyfrowej żeby wiedzieć jak wyglądają proste układy cyfrowe (i na przykład żeby wiedzieć co to w ogóle jest zegar i taktowanie układu). Potem 2 semestry techniki mikroprocesorowej, semestr Asemblerów, semestr Automatów i Języków Formalnych i 2 semestry Teorii Kompilacji ;]
O wszystkim o co pytasz można poczytać, ale to temat na kilka książek a nie na posta na forum.

4

Komputer to nic innego jak automat Moore'a, natomiast program to nic innego jak ciągi alfabetu wejściowego. W zależności od stanu automatu dane jest inne wejście i przejście do konkretnego innego stanu automatu. Automaty mimo, iż abstrakcyjne implementuje się jako układu sekwencyjne. W uproszczeniu można powiedzieć, że komputer to układ sekwencyjny. Tym tropem idąc tworzenie listy rozkazów asm etc. etc. i samo "programowanie" tworzy się na poziomie sprzętowym, jako logiczny układ bramek. Nie interesuje nas tutaj technologia wykonania, czy to na lampach, tranziorach czy na czymkolwiek innym, a same funkcje logiczne. Na studiach miałem parę semestrów układów cyfrowych, jak i architektury komputerów, etc. etc. To, że częśc ekstrakodu asm jest napisana w asm a nie ma znaczenia. Samo "programowanie" zostało wykute przez rzeźbiarzy w krzemie ;p

0

ja myślę, że programowanie zaprojektowano w programach do programowania programów do programowania

2

W trakcie studiów (mój kierunek to lotnictwo z ukierunkowaniem na mechanikę) szukałem szeregu możliwości projektowania. Natrafiłem na analogowe maszyny liczące, które pozwalały w pewnych zakresach przedstawić symulację zachowania statku powietrznego. Wykonanie takiej symulacji było dosyć trudne w eksploatacji i przez to drogie (wymagało dobrania bloków kondensatorów, oproników itd.), zatrudnienia wielu specjalistów, a do tego nie dawało odpowiedniej elastyczności - w konsekwencji było drogie.
W ramach realizacji różnych projektów okazywało się również, że obliczenia przybliżone (bez używania ww. rozwiązania), dzięki aproksymacji tego tam.. są efektywniejsze.
Dlatego bardzo, uproszczając temat, zaczęto stosować model zero-jedynkowy, którego wyniki obarczone błędem dałwały się przyjąć, jako wystarczające. Aparat matematyczny powstał zresztą znacznie wcześniej, ale mógł być do tego zastosowany przy wykorzystaniu 0-1 bramek opartych na lampach, później na diodach.
Patrząc na ewolucję oprogramowania raczej nie dostrzegam, aby w większości przypadków rozwój szedł od rozwiązania bardziej złożonego i lepszego ku gorszemu (wyjątkiem jest może WordPerfect, ale kto go teraz zna?). Więc naturalną koleją rzeczy najpierw się programowało ciągi zero-jedynkowe, później język symboliczny...

8

Tak w temacie:
user image

0

Jeżeli chcesz zainteresować się tym bardziej, polecam LogiSim i... Minecraft'a.

Lepiej Dwarf Fortress (na którym Minecraft jest niejako wzorowany) http://docs.google.com/Doc?docid=0AdISzBuNg6ZWZGd0d2t4YjlfMjJ0ejlzc2dnaA&hl=en - kompletny projekt procesora itd. :D

1

Bo przecież ktoś musiał zaprogramować programowanie?

Zadajesz błedne pytania. Programowanie to proces i jak na razie jeszcze nikt nie zaprogramował programowania (pomijając takie rzeczy jak programowanie genetyczne...). Jeżeli chodziło Ci o to, kto stworzył pierwszy kompilator to była to Grace Hopper: http://inventors.about.com/library/inventors/blaiken_hopper.htm

P.S - Czy od programistów "aż" taka wiedza jest wymgana?

Tak, programista powinien wiedzieć co robi.

2
0x200x20 napisał(a):

Tak, programista powinien wiedzieć co robi.

Niezliczone rzesze programistów PHP są dowodem, że powinien wiedzieć, acz nie musi :] Rynek potrzebuje tanich roboli, wytresowanych do powtarzania wyuczonych sztuczek, wysilających intelekt mniej niż ich koledzy układający kafelki.

1

@TomRiddle

Przykład 1: Pochodnia stale wysyła sygnał 1. Gdy do bloku, na którym stoi pochodnia, dojdzie sygnał 1, wtedy pochodnia zmienia sygnał na 0. W chwili, gdy do tego bloku przestanie dochodzić sygnał, pochodnia znów emituje 1. Widzimy tu NOT.

Przykład 2: Dwie pochodnie wysyłają sygnał 1 i negują inną pochodnię, więc pochodnia ta wysyła sygnał 0. Gdy zanegujemy jedną z dwóch pochodni, druga nadal będzie wysyłała sygnał 1, więc trzecia nadal będzie wysyłała 0. Dopiero, gdy do obydwóch pochodni dojdzie sygnał 1, trzecia przestanie być negowana i wyśle 1. Mamy więc AND.

Przykład 3: dwa redstone (czyli kable) po prostu się ze sobą łączą w jeden. Wystarczy więc tylko jeden sygnał 1, aby na wyjściu od razu było 1. Mamy więc OR.

Jeżeli na końcu AND lub OR doda się negację z przykładu 1, otrzymujemy odpowiednio bramki NAND i NOR. Wymyślenie, jak mają działać w grze XOR i XNOR wcale nie było trudniejsze - przecież każdą z nich można przedstawić jako 2 NOTy, 2 ORy i 1 AND. Później zostało tylko zminimalizować cały układ i gotowe.

Z tych 7 bramek można zrobić wszystko, wystarczy się troszkę znać na elektronice i zrobić np. sumator - to już jedna z części procesora.

Osobiście, zrobiłem już 8-bitowy dysk twardy i coś, co można by nazwać multiplekserem (z tym że nie przekazuje on adresu bitu, ale jedynie informację o tym, że jest przekazywana informacja głównym kablem)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.