Zrozumienie przez laika podstaw działania komputera.

0

Witam,

Słowem wstępu: mam 29 lat i dwa tygodnie temu przez przypadek "odkryłem" frajdę jaką daje programowanie. Wybrałem Python i jest super. Kilka noce zarwanych już było ;) Dodam, że jestem totalnym laikiem w kwestiach informatycznych.

Pytanie jakie chce zadać brzmi: co powinienem wiedzieć, aby lepiej zrozumieć, lub żeby w ogóle pojąć zasadę działania komputera. Nie mam na myśli informacji typu CPU odpowiada za x rzeczy, tylko jak faktycznie to funkcjonuje. Oczywiście szukam tych informacji w sieci, ale nie mogę nigdzie tego znaleźć w bardziej usystematyzowanej i skoncentrowanej formie.

Proszę o jakąś wskazówkę, informacje co powinienem wiedzieć, bo trochę się gubię. Myślałem o jakimś podręczniku dla kierunku informatycznego, jednak chciałbym pierw prosić o waszą opinię.

3

@LMR - a po co Ci wiedza z zakresu działania komputera do programowania? Twoim zadaniem będzie pisanie softu, a to jak działają podzespoły komputera i co za co odowiada nie musisz wiedzieć; Nie zrozum mnie źle - oczywiście możesz zagłębić się w ten temat do woli, jednak do samego programowania nie jest to potrzebne;

Niedawno ktoś z forumowiczów, programistów etatowych (jak domniemam) pochwalił się, że nie umie nawet wymienić HDD :D

Jeśli już chcesz coś więcej wiedzieć w tym temacie, to szukaj materiałów po angielsku - jest ich dużo więcej i z reguły zawierają więcej cennych informacji; Ale to już raczej elektronika niż programowanie.

0

Ok, to inaczej. Czy jest coś takiego, jak -nazwijmy to - "elementarz programisty"? Czyli niezbędny zakres wiedzy potrzebny do tego, żeby programować. Zapewne różni się on od założonych celów, ale chodzi mi o takie podstawy.

Przepraszam, ale ciężko mi sformułować odpowiednie pytanie w dziedzinie o której nie mam za bardzo pojęcia.

0

Zależy co programujesz. Jeżeli chcesz pisać prosty backend w Django przykładowo (przykład dla Pythona), albo frontend, to taka wiedza nie jest ci potrzebna. Jeżeli chcesz pisać jakieś niskopoziomowe rzeczy w C, C++ itd. to jak najbardziej jest to potrzebne.

<font size="0.5">backend - oprogramowanie po stronie serwera, frontend - to co widzisz (np. w przeglądarce)</span>

2
furious programming napisał(a):

@LMR - a po co Ci wiedza z zakresu działania komputera do programowania? Twoim zadaniem będzie pisanie softu, a to jak działają podzespoły komputera i co za co odowiada nie musisz wiedzieć; Nie zrozum mnie źle - oczywiście możesz zagłębić się w ten temat do woli, jednak do samego programowania nie jest to potrzebne;

Traktowanie komputera jako "magicznego pudełka" oczywiście nie uniemożliwia programowania. Korzystasz w swoim Delphi zaawansowanej zewnętrznej biblioteki (closed source), powiedzmy - DLLka do obsługi rozproszonego systemu plików. Wywołania wydają się OK, mimo to leci access violation gdzieś ze środka biblioteki.

  • testujesz argumenty na pałę i liczysz że zadziała
  • zgłaszasz się do producenta biblioteki, który nie ma pojęcia na czym polega Twój projekt i dwa tygodnie szukacie przyczyny
  • odpalasz debugger i oglądasz asma, analizujesz punkt wyłożenia się biblioteki i wyciągasz wnioski

Która opcja jest najbardziej logiczna? Sensownie nie zdebugujesz nie mając podstaw low level, sposobu działania systemu pod którym to chodzi itp.

0

Na tę chwilę piszę co się da ;) Nie mam z tym jakiś konkretnych planów związanych. Po prostu daje mi to ogromną satysfakcję i frajdę. Tym bardziej, że dzięki temu stale się rozwijam.

Co do front end jak i back, to nie jestem zainteresowany. Znam trochę html i css, ale jakoś tworzenie stronek mnie nie pociąga.

0

Może mobilki ?

0

Tak jak napisałem w pierwszym poście - dwa tygodnie temu zacząłem i chyba musi trochę czasu minąć, żebym juz z jakimś minimalnym doświadczeniem, oraz wiedzą podjął konkretna decyzję. Zresztą widać jak jest - wiem, że nic nie wiem ;)

1

Musisz znaleźć sobie jakiś porządny tutorial do języka, który Cię zainteresuje. Później musisz po kolei, powolutku czytać (od początku do końca, nie od środka). Często jest tak, że jak coś Cię "zajara" to omijasz ważne podstawy, które nie są aż tak, Twoim zdaniem, interesujące. Przykład dobrego tutoriala: http://learnyouahaskell.com/chapters

Tylko nie zaczynaj uczyć się tego języka, do którego jest ten tutorial, bo gdybym Ci to polecił na początek, inni forumowicze by mnie zjedli. Takie języki to moje osobiste zboczenie.

2

Przedstawię ci połowę wiedzy którą mam o budowie komputerów jeżeli nie wiesz ;p
"Procesor rozumie tylko jest prąd lub nie ma prądu tzn 1/0 - taki jeden to bit
Na początku programowano pisząc takie sekwencje zero-jedynkowe.
Jakiś taki ciąg 10011000 mógł oznaczać operacje dodaj dla procesora
Ale po tym jak walnela satelita na niebie bo sie programista pomylil (zle cos wpisal) wymyslono nowy system
podzielono bity na bajty 8 bitów = 1 bajt "10100011" to jeden bajt te z kolei na 2 oddzielne 1010 0011 i zastosowano system heksadecymalny
czyli tutaj zamiana 1010 = A 0011 = 3, czyli zapis tego bajtu to A3 i teraz to byl nasz rozkaz jakis. Po rozkazie pozniej podaje sie liczbe lub rejestr (cos jak zmienna) Jak nie wiesz o co chodzi to doczytaj, gdzieś indziej. Ważne tylko jest, że później zastąpiono np. A3 które może oznaczać odejmowanie nazwą SUB tak powstał Assembly i jeden z pierwszych języków którego zadaniem jest zamiana tego SUB, żeby rozumiał procesor czyli na A3 (oraz oczywiście innych rozkazów) i to się fachowo nazywa interpreter, ale był to język niskiejjjj abstrakcji.

I teraz kompilator to program który zamienia ci twój pisany kod w jakimś języku na assembly, a później assembler zamienia ci na heksadecymalne wartości, tudzież jedynki. I tak powstaje program".

Akurat to takie podstawy, które powinien znać chyba każdy programista przynajmniej nie dokładnie (sam nie wiem czy gdzieś się teraz nie walnąłem ^^). Mówię ci to bo znam mnóstwo ludzi (niby programistów), którzy nie odróżniają IDE od kompilatora, bo pominęli takie coś a to ciężki błąd :P

1

Poszukaj czegoś na temat "Architektura systemów komputerowych" pierwsze lepsze z brzegu http://wazniak.mimuw.edu.pl/index.php?title=Architektura_systemów_komputerowych ale nie wiem czy to jest przystępnie tam opisane - zazwyczaj tak nazywa się jeden z przedmiotów na studiach o kierunku Informatyka i chyba pokrywa się z tym co cię interesuje. Natomiast jak już zostało wspomniane wiele rzeczy w językach wysokiego poziomu jest ukrywane i upraszczane przez system operacyjny lub język/biblioteki dla programisty. Pewne rzeczy mógłbyś pisać bardziej optymalnie jeśli zdasz sobie sprawę z budowy stosu, dostępu do pamięci czy operacji dyskowych, ale jeśli masz dobrą książkę do swojego języka z pewnością opisana zostanie różnica np. pomiędzy dostępem ciągłym do pamięci a przypadkowym bez wdawania się w szczegóły techniczne (wtedy trzeba trochę wierzyć, że robi się tak i już).

0

Sądzę, ze pisząc a assemblerze dobrze wiedzieć jak działa CPU...

0

Pytanie padło, "co jest przydatne - w sensie wiedza, umiejętność - w programowaniu?".

W programowaniu ważna jest liczba 42. Jest to odpowiedź na wielkie pytanie o życie, wszechświat i całą resztę.

A tek serio, to może http://www.theguardian.com/info/developer-blog/2011/oct/07/programming-developer-journalist

1 użytkowników online, w tym zalogowanych: 0, gości: 1