Od czego zaczynaliście naukę programowania?

Koleżanki i koledzy czasy się zmieniają a co za tym idzie zmieniaja się i technologie.
W latach 60-tych “modne”/popularne były inne języki programowania niż obecnie. Najpierw Lisp, potem C itd. Nic więc dziwnego, że najczęsciej naukę programowania rozpoczynało się od języka Lisp czy C. Obecnie najczęsciej są one odradzane jako pierwszy jezyk programowania :smiley: Jako argument podaje się najczęsciej, że są trudne, a programista Lisp będzie miał trudniej znaleź pracę niż ktoś kto zna Jave :slight_smile:

Ciekawi mnie od czego zaczynaliście naukę programowania. Czy dla kogoś z was pierwszym językiem programowania jaki poznał był nasz ulubiony język Ruby?

I czy też odradzalibyście naukę języka Lisp albo C jako pierwszego języka? Jeśli tak to z jakiego powodu?

No i kolejna kwestia, którą chciałbym poruszyć. A może na uczelniach powinni uczyć nie tego co modne np: Javy i C# a tylko i wyłącznie standardów jak Lisp i C a innych jęyzków student powinnien nauczyć się sam?

1 Like

Ja zaczynalem od C (zakladajac ze BASIC i Pascal sie nie licza) i polecam, tym bardziej ze jest to jezyk bardzo prosty, a jednoczesnie obecny ‘pod spodem’ wiekszosci jezykow ‘wyzszego poziomu’.

(i np. jesli jakis gem sie ‘nie instaluje’ wywalajac sie przy komplilacji kawalka w C, to zamiast lamentowac w internecie mozna samemu zajrzec o co chodzi)

Ale nie tylko - wydaje mi sie, ze jest cos we ‘wskaznikach’ w C, co powoduje, ze ich zrozumienie (wskazniki + pamiec oraz np. uswiadomienie sobie, ze wskaznik na cos, string oraz tablica to wlasciwie to samo, a roznica wynika jedynie z interpretacji pewnych adresow) umozliwia szybkie zrozumienie konstrukcji ‘wyzszego poziomu’.

Poza tym od C do komend systemowych w Unix/Linux jest 1 krok, a znajomosc tego ‘jak to dziala’ pod spodem czesto sie przydaje.

Dzieki C, dosc latwo przyszlo mi opanowanie perla. A znajac perla i jego map/grep, latwo zaczac ‘na dzien dobry’ operowac konstrukcjami ‘listowymi’ typu map, each, select w rubym. A znajac to, latwo przejsc na myslenie w kategoriach operowania na listach ktore jest powszechne np. w scali

Nie wspominajac o Objective-C - znajac dobrze C + przynajmniej jeden jezyk ‘dynamiczny’, zaczyna to wygladac bardzo znajomo. Tym bardziej, ze spora czesc API napisana jest ‘na dole’ w C (np. Core Audio) i czesto kod zawiera konstrukcje zarowno w Obj-C jak i w C (jako ze Obj-C jest ‘kombatybilne’ z C)

Polecalbym nauke C + jakiegos jezyka skryptowego (ruby, python, javascript) ROWNOLEGLE jako ‘poczatek nauki programowania’. I proby implementowania tych samych rzeczy w obu ‘swiatach’ - i tu i tu zazwyczaj korzysta sie z jakichs bibliotek (wtedy mozna odkryc, ze np. curl to nie tylko ‘polecenie systemowe’ ale glownie biblioteka libcurl, ktora mozna uzyc we wlasnym programie do komunikacji z serwerem); w ten sposob nie bedzie sie skazanym ani na ‘zbyt niskopoziomowe’ ani ‘zbyt wysokopoziomowe’ myslenie, a budowanie wlasnej bazy ‘analogii’ droga rozwiazywania konkretnych - nawet najprostszych - problemow jest bardzo cenne.

(poza tym znajac C mozna zobaczyc, jak NAPRAWDE dziala MySQL i setki innych rzeczy, ktorych uzywa sie kazdego dnia mniej lub bardziej jawnie)

To jest skomplikowany temat, sam skonczylem informatyke na tzw. uczelni (Politechnika Warszawska) i do dzis nie wiem, jakie podejscie byloby ‘optymalne’. To, co nastapilo w moim przypadku to:

  • solidne poglebienie C i C++
  • poznanie podstaw perla, Lisp-a, Javy (po jednym semestrze na kazdy)
  • duzo czasu spedzonego nad asemblerem (na maszynach RISC-owych SPARC z Sun Microsystems :wink: - z tym ze przed studiami sam pisalem rozne rzeczy w asemblerze pod PC,
  • ale rowniez: poznanie systemow Unixowych z administracja wlacznie, programowanie www (CGI, HTTP co uwazam ze przydaje sie do dzis bez wzgledu na jezyk)
  • zagadnienia z dzialania systemow operacyjnych w ogole,
  • algorytmy i struktury danych,
  • wybrane zagadnienia z baz danych
  • wybrane zagadnienia z systemow (i algorytmow) rozproszonych
  • cala masa innych rzeczy, ktore byc moze byly strata czasu

Ale bylo tez cos innego: pewien ‘klimat’ na to, zeby samemu poznawac pewne rzeczy; np. kompilowac Linuxowe paczki ze zrodel :wink:

Nie mialem za zajeciach np. nic z javascriptu - ale widzac ‘jak dziala’ www, oczywiste bylo, ze warto poznac jak w tym pisac - i na 2gim bodaj roku napisalem 2 wersje Tetrisa. Dwie, bo jedna pod Netscape Navigatora, a druga po IE 4 - obie w bardzo rozny sposob podchodzily do obslugi ‘warstw’ (czyli absolutnie pozycjonowanych elementow - Navigator traktowal to jako osobny typ elementu)

Czasem nauka na uczelni odbywa sie tez ‘przy okazji’ - jesli musisz pracowac w terminalu i pisac np. skrypty badz program w asemblerze, to jest duza szansa na to, ze zaczniesz to robic albo w vim albo w emacsie :wink: bez koniecznosci przechodzenia przez przedmiot pt. ‘programowanie w edytorze vim’. To uczy rowniez czegos innego - znajdywania rozwiazan w obecnosci konkretnych ograniczen.

Jesli chodzi o ‘jezyki’ ktore byly obecne w programie - i tak potrzebowalem kolejnych 4-5 lat praktyki (czytaj stosowania ich w pracy), zeby poczuc sie w nich swobodnie (poza lispem, ktorego nigdy pozniej nie dotknalem - poki co). Tzn, po paru miesiach wydawalo mi sie, ze cos dobrze znam, a po kolejnych 4ch latach widzialem, ze wczesniej mi sie to tylko ‘wydawalo’ :wink:

Moim zdaniem rola uczelni moze/powinna sprowadzac sie do:

  • dawanie dostepu do technologii / sprzetu, ktory nie jest osiagalny / tani dla pojedynczych osob,
  • pokazywania pewnych nowych rzeczy,
  • poglebiania rzeczy znanych,
  • inspirowania przez kadrę / gości ktora potrafi ciekawie mowic, ale jednoczesnie majac konkretne praktyczne (i komercyjne) doswiadczenie w tym, o czym mowia,
  • zebrania w jednym miejscu grupy ludzi, ktorzy moga sie wzajemnie nakrecac i pomagac w zglebianiu pewnych zagadnien
1 Like