Nauka od zera

Dość krótkie pytanie:
Czy wg. Was, warto uczyć się Ruby jako pierwszego języka programowania w swoim życiu ?
W przyszłości chciałbym nauczyć się jeszcze xhtml, css oraz xml.

Warto się uczyć DOWOLNEGO języka programowania, w każdym razie byle nie wykręcać się od nauki programowania tekstem “bo nie znalazłem dobrego języka dla początkujących” :wink:

Niestety, z obecnie popularnych języków żaden nie nadaje się do nauki programowania, bo i żaden z popularnych nie był obmyślany jako język dydaktyczny.

Zatem Ruby jest tak samo dobrym i tak samo złym wyborem jak wszystkie pozostałe. Zaczynając od Rubiego, będziesz musiał przy następnych językach poznać trochę nowych pojęć, zagadnień i praktyk od których Ruby Cię “chroni” - i w drugą stronę, w Rubym jest wiele koncepcji i możliwości, których nie znajdziesz w większości języków, jakie potem napotkasz.

Jednocześnie z Rubym polecałbym naukę C, jako języka o wiele bliższego “metalowi”, przez to też bardziej surowego, szorstkiego i restrykcyjnego - ale i szybkiego oraz pozwalającego na złapanie właśnie tych wszystkich koncepcji, które znać warto, a które Ruby przed Tobą schowa. Poza tym interpreter Rubiego jest napisany C i można tym samym pisać w C rozszerzenia języka.

xhtml, css, xml nie są językami programowania, to języki komputerowe opisujące zaledwie strukturę i/lub prezentację danych (tj. nie da się w nich zaimplementować algorytmów)

(kto pierwszy w odpowiedzi na powyższe zdanie wspomni o XSLT, dostanie wybór - cegłą w głowę, albo miesiąc pisania wyłącznie w XSLT :wink: )

Skoro tak, to czy za 5 lat Ruby (o C nie pytam, bo wystarczająco długo wytrwał), dalej będzie miał jakąś wartość na rynku pracy ?
Co do xhtml […] chodziło mi o połączenie ich z frameworkiem Rails , którym mógłbym się ewentualnie później zająć.

Jeśli w ogóle nie porgramowałeś to może zacznij od: http://pragprog.com/titles/ltp2/learn-to-program-2nd-edition
i zgadzam się z Tomashem co do C (no nie tylko tu) i C++. Tu poleciłbym Ci Symfonie Pana Grębosza.
Tak pozatym to po kilku latach i tak wybór języka nie ma znaczenia, bo na początku musisz poczuć “to coś” :slight_smile:

[quote=absurd]Skoro tak, to czy za 5 lat Ruby (o C nie pytam, bo wystarczająco długo wytrwał), dalej będzie miał jakąś wartość na rynku pracy ?
Co do xhtml […] chodziło mi o połączenie ich z frameworkiem Rails , którym mógłbym się ewentualnie później zająć.[/quote]
Nie masz się co obawiać, dobrą praktyką jest uczenie się raz na kilkanaście tygodni nowego języka :wink:

a ja z “języków programowania” polecałbym najpierw nauczyć się xhtml + css - to taki poziom zerowy imho - jeśli ktoś nie potrafi przebrnąć przez naukę tego, nie ma czego szukać w nauce jakiegokolwiek języka programowania. Gdy już poznasz to, wtedy możesz przejść na Wyższy Stopień Wtajemniczenia, i w zależności od tego, co Cię pociąga- zacząć od pascala,rubego, albo (zaraz forumowicze mnie spalą na stosie :wink: ) php. dlaczego php? bo moim zdaniem poznawanie ideii programowania na języku do bólu obiektowym jest znacznie trudniejsze niż w strukturalnym. Gdy się już załapie programowanie strukturalne, i chce się poznać obiektowość… tu nie ma co już uczyć się tego w php, lepiej wtedy właśnie przejść na rubego…
BTW: czy któryś z forumowiczów programował w lolcode ? ;d

Ucząc się Ruby prędzej czy później spotkasz się z C, pobaw się jednym i drugim i poszukaj różnic(w filozofii itp.) Nie wiem jak to jest uczyc sie ruby jako pierwszego jezyka, myśle że zbyt dużo jest w nim magii która nie znając podstaw programowania prowadzi do niedomówień i nieporozumień. Ruby chyba jeszcze długo nie straci swojich wpływów na rynku.

Dość interesujące, na początek, mogą być również Java i C# (zaraz Tomash mnie wdepcze w ziemię). Jest dużo informacji o tych językach w sieci i mozna zacząć od pisania prostych aplikacji desktopowych oraz gier -według mnie, w “webdevie” trzeba sporo ogarnąć na początek -bazy danych, architektuę aplikacji, xhtml, css (te dwa nie są skomplikowane, ale trzeba się z nimi nawojować mocno…). A php, jeśli chciałbyś zawodowo programować, to trochę poroniony pomysł
A prosty program w Javie lub C# -np gra, uczy Cię podstawowych, uniwersalnych umiejętności programisty. Ja wiem, że dla Rubiowców są to często języki mało elastyczne, ale ich poznanie może dać sporo radości - np spróbuj napisać prostą grę. No i w końcu jednak większość firm zatrudnia ciszarpowców i dżawowców.

Słusznie podejrzewasz :wink:

C# nie znam, ale Java - jak ją lubię i piszę weń prawie codziennie (praca magisterska) - jest bardzo kiepskim językiem do nauki programowania. Java wciska na siłę w obiektówkę (która jest jakimś skokiem pojęciowym względem “naturalnego” proceduralnego) i zmusza do używania IDE – podczas kiedy ma to swoje zalety już w “poważnym programowaniu”, w nauce moim zdaniem przeszkadza i uszkadza mózg :wink:

Naprawdę, ża duży “bagaż” czy “narośl” czeka programistę, który chce się nauczyć programowania przez Javę.

No chyba że Processing, ale to trochę inna rozmowa :wink:

Jeszcze więcej firm zatrudnia sprzątaczki i sekretarki.
A najszybciej (po najkrótszej nauce) sporą pensję można dostać na budowie w Polsce lub na zmywaku w jukeju - właściwie to nic nie trzeba się uczyć.

Jeszcze co do wartości na rynku pracy za 5 lat: 5 lat to bodajże obchodzą w tym roku Railsy - przedtem język Ruby znała garstka pasjonatów na świecie, dziś jest 11 w rankingu Tiobe.
Nikt nie jest w stanie przewidzieć co się stanie w ciągu 5 lat - może np. za rok ktoś stworzy framework pozwalający jeszcze szybciej i łatwiej niż w Railsach pisze aplikacje webowe, a zrobi go w np. Ioke, Factor albo Lua. Albo przebiją się frameworki oparte na Lisp. Albo wszyscy piszący w niskopoziomowych odejdą od C/C++ na rzecz D.
Ruby za 5 lat może stać się trzecim-czwartym najpopularniejszym językiem na świecie (obok niedetronizowalnych C, C++ i Javy oraz kuzyna Pythona), a może się też okazać, że wszyscy właśnie odpłyną do jakiegoś innego języka i rubiowcy będą co najwyżej wykonywali opiekę paliatywną nad napisanymi już w ruby/rails systemami.

Jedno czego można być pewnym to trwającej kolejne lata dominacji C i C++, ale żeby w tych językach pisać “zawodowo” musiałbyś uczyć się ich oraz ogólnych zagadnień programistycznych przez kilka lat (studia informatyczne np.). Oraz tego, że będzie żyło sporo systemów napisanych w Javie i ktoś będzie musiał je co najmniej utrzymywać i rozszerzać. Chociaż to ostatnie już teraz można robić w np. Groovym.

Przestań się martwić takimi pierdółami, programista i tak musi być elastyczny oraz zdolny łyknąć nowy język w (jak Punkracy napisał) parę tygodni (przynajmniej składnię i zasadniczą część biblioteki), a złapać jego filozofię i zrobić weń coś sensownego w 3-5 miesięcy. Generalnie warto co roku uczyć się jednego (ale poważnie, tj. machnąć jakiś sensowny projekt) nowego języka programowania. Obecnie, Absurd, Twoim głównym problemem jest znalezienie języka pierwszego - a nie jedynego :wink:
I myślę, że z Rubym można nieźle zacząć.

A jako że to nie jest moja myśl:
http://pine.fm/LearnToProgram/

1 Like

A ja uważam, że powinieneś zacząć od MIX-a :smiley:

A tak na serio to powinieneś się najpierw nauczyć programowania a nie języka programowania. Do tego niby dobry jest każdy język, jeżeli wykorzystywałbyś tylko jego podstawowe możliwości czyli. zmienne, pętle, ify. Ruby też może być ale uważam, że z nim mogą być problemy przy nauce. Ponieważ jest to język czysto obiektowy, to w książkach do niego jest to podkreślane od samego początku, autorzy wpajają obiektowość, a to na początku nie jest potrzebne. Druga sprawa, to w Ruby nawet najprostszą rzecz można zrobić na 10 różnych sposobów, więc przyjdzie Ci wybierać rozwiązanie, co też nie jest dobre na początek.

Więc ja bym proponował zacząć od C i nauki prostych algorytmów i struktur danych np. z Cormena. Jak już będziesz umiał zaimplementować parę algorytmów i jakieś proste struktury danych to możesz wtedy zacząć się zastanawiać jakiego języka się uczyć.

Jak ktoś chce usłyszeć bardzo ciekawą prezentację na temat programowania, kogniwistyki i uczenia to polecam:
http://rubyconf2008.confreaks.com/effective-and-creative-coding.html

Pod koniec (koło 33 minut) jest kawałek o tym dlaczego Ruby jest dobry do nauki.

Polecam obejrzeć i przemyśleć, bo dywagacje programistów na forum to jedno, a przemyślana prezentacja, to całkowicie inny poziom (a koleś naprawdę mówi z sensem) :wink:

Dorzucę do tego jeszcze kilka zdań.
Jeśli chodzi o kwestie nauki programowania, to moim zdaniem warto zacząć od kilku prostych algorytmów (np. sprawdzanie czy napis jest palindromem, dodawanie dwóch liczb w notacji dwójkowej) dla Maszyny Turinga. Język MT jest banalny - pisanie programu sprowadza się do określania wartości tablicy przejścia. Co najważniejsze - używając tego formalizmu możemy napisać dowolny program. Ale przecież tego nie robimy.

Potem można spróbować te same algorytmy napisać w C, czy w Pascalu. Okaże się, że program jest o niebo krótszy i dużo bardziej zrozumiały. Z drugiej jednak strony - jego napisanie wymagało poznania bardziej skomplikowanego języka. Wtedy też można pokusić się o napisanie kilku bardziej skomplikowanych algorytmów, które pozwalałyby na interakcję z użytkownikiem, np. odgadywanie wylosowanej liczby, książka adresowa (jako przykład operacji na listach: dodawania, usuwanie, wyświetlanie elementów), etc.

No i potem spróbować to samo zrobić np. w Rubim. I znowu zobaczy się ten duży skok - np. wczytanie i zamiana łańcucha znaków na liczbę jest dużo banalniejsze, nie wspominając o tym, że listy (tzn. tablice) są wbudowane. Na początek można ograniczyć się do wbudowanych str. danych oraz “proceduralnej” części Rubiego (nie zgadzam się, że Ruby narzuca obiektowość tak jak Java - ja korzystam w nim znacznie rzadziej np. z dziedziczenia, co nie zmienia faktu, że jest on bardziej obiektowy od Javy, tzn. wszystkie struktury danych są obiektowe. W pierwszym rzędzie sprowadza się to jednak do sposobu wywoływania związanych z nimi metod, co IMHO jest bardzo intuicyjne. Można w Rubim napisać całkiem pokaźny skrypt, nie pisząc ani jednej klasy. W Javie coś takiego jest niemożliwe.).

Po takim pobieżnym przyjrzeniu się kilku językom można przede wszystkim zrozumieć zasadniczą prawdę ich dotyczącą - większość z nich ma swoiste zastosowanie i nie ma języka idealnego do wszystkiego. No i wtedy można zacząć uczyć się Rubiego, albo C, w zależności od tego, co wydało się nam bardziej ciekawe i pociągające.

A ja wciąż uważam, że Ruby może być dobry na wejście. Reimplementacja algorytmów? Żonglowanie rejestrami i wskaźnikami? Kaman, początkujący ma poczuć magię programowania - czyli tworzenia czegoś, co działa i co widać. Na zabawy niskiego poziomu typu “oo, a jak to działa i jak to podkręcić” jeszcze przyjdzie czas.

Uczepiliśmy się analogii samochodowych, więc: dajcie mu pojeździć wozem i nauczyć się prowadzenia, potem dopiero nakłaniajcie do zostania mechanikiem :wink:

Osobiście programowanie “na serio” zaczynałem od QBASICa w 8-ej klasie podstawówki (wiem, późno), rysując sobie na ekranie wykresy kilku różncych funkcji. To była frajda - zobaczyć coś i zmusić komputer do zrobienia czegoś, czego ręcznie w życiu by mi się nie chciało!
A binarnego i szesnastkowego nauczyłem się trzy lata wcześniej, edytując save’y do gier w hexeditorach. Nawet nie ćwierć tej frajdy, co zobaczenie wykresu 2^x w postaci żółtej krzywej na czarnym tle z zielonymi osiami :slight_smile:

No mi nie chodzi o to, żeby do głębi poznać od razu C i operować na rejestrach. Raczej o to, żeby przez rozwiązanie tego samego zadania w kilku językach, które istotnie różnią się poziomem ekspresji, doznać “olśnienia”, o którym pisałem.
Skoro wspominamy dawne czasy, to ja zacząłem od “Bejzika” na C64, potem był Pascal i C/C++. Jak doszedłem do Javy, to wydawało mi się, że “to jest to”. A to była bzdura.
Jak od początku będziesz mieć świadomość, że każdy język pozwala na zrobienie tego samego, ale nie tak samo, to odkryjesz moim zdaniem, jedną z najważniejszych prawd dotyczących programowania.

Jeszcze podam taki przykład - na zajęciach w liceum dałem do rozwiązania niby banalne zadanie: napisać algorytm na MT, który podwaja liczbę w notacji jedynkowej. Co z tego, że w C, czy Rubim możesz zapisać to za pomocą 5 znaków. Na MT trzeba naprawdę wymyślić coś sprytnego żeby zrobić to elegancko i osoby, które już nawet nieźle programowały w C, nie znalazły go. Rozwiązanie takiego zadania może nie nauczy kogoś jak programować, ale może mu pomóc zrozumieć, co to znaczy dobrze programować, a to jest coś zdecydowanie cenniejszego, niezależnie od poziomu rozwoju.
Ja osobiście przez długi czas miałem wątpliwości, czy pisząc programy tak, jak sobie je pisałem, gdzieś na poziomie liceum, programowałem dobrze, czy źle. A odpowiedź jest z grubsza taka: Czy możesz to napisać zwięźlej/czy możesz to napisać bardziej zrozumiale? Jeśli nie, to jest to napisane dobrze.

Dobry programista to nie jest ktoś kto zna dogłębnie Rubiego czy C. Dobry programista poznawszy dany język potrafi właściwie wykorzystywać dostępne w nim abstrakcje, po to by pisać zwięzły i zrozumiały kod. Co oczywiście nie zmienia faktu, że w Rubim daje się to osiągnąć znacznie łatwiej niż np. w C.

Tzn. dobry programista to ktoś taki, kto umie napisać na MT algorytm podwajający liczbę w notacji binarnej?

Prośba.

BTW, w notacji, jak napisałeś, “jedynkowej”, nie da się zapisać żadnej liczby różnej od 0 :stuck_out_tongue:

Ja też jakoś w tym okresie :wink: Dostałem komputer około 2-3 klasy gimnazjum, jesteśmy opóźnieni :stuck_out_tongue:

Napisałem coś takiego? Dobry programista potrafi znaleźć eleganckie rozwiązanie problemu w ramach narzuconych ograniczeń (każdy język posiada pewne ograniczenia). Sprowadzanie tego do powyższego stwierdzenia jest po prostu bez sensu.

Mylisz się. W notacji jedynkowej liczba jedynek reprezentuje liczbę. ‘111’ to liczba 3. Notacja jedynkowa, to nie jest notacja pozycyjna o podstawie 1.

Witam.
Poznaj na początku xhtml i trochę css, jeśli masz na myśli programowanie związane ze stronami www.
Jeśli tak - potrzebujesz nauki języka interpretowanego.
Jeśli nie - chcesz robić programiki działające np. pod windowsem - przyda ci się język kompilowany (np. Visual Basic - bardzo prosty do nauki na początek).
W kwestii programowania działającego po stronie serwera (czyli tak łopatologicznie - oprogramowania stron www) nie wiem, czy Ruby jest rzeczywiście najlepszym wyborem.
Darząc wielkim szacunkiem Ruby i jego frameworki pozostaje kwestia tego, że pewnie chciałbyś, aby twoje pierwsze “oprogramowane stronki”
znalazły się w internecie - nie koniecznie aby komuś służyły, ale po prostu - dla czystej satysfakcji.
Jeśli jesteś całkowicie zielony, wybierając Ruby on Rails musiałbyś nauczyć się stawiać aplikacje w Ruby na serwerze produkcyjnym.
Moje zalecenie - poducz się php.
Bardzo wiele osób zaczyna od php.
Ruby on Rails to framework.
Na frameworki przyjdzie ci jeszcze czas.
O ile framework Rails bije na głowę większość frameworków php, mimo wszystko polecam na początek php.
Tworzysz plik index.php
Zapisujesz w nim w dowolnym edytorze (np. w notatniku)

<?php echo 'pierwszy program'; ?> Wrzucasz teraz plik index.php na serwer (np. przy pomocy klienta ftp FileZilla) i masz już swój program w internecie na swojej domenie. To wszystko. Potem tylko się uczyć i próbować.

Jeśli chcesz koniecznie pracować tylko na localhoście (łopatologicznie - tylko na swoim komputerze),
to zainsaluj sobie środowisko InstantRails dla Ruby lub Webserv(XP) albo WampServer(Vista) dla PHP.

Omijając temat języka programowania - naucz się na początek co to są: zmienne, stałe, typy proste, pętle, instrukcje warunkowe, operatory it.
Potem poznaj funkcję, a na końcu obiekty.
UAWGA!
Programowanie należy do kategorii schizofrenii narkotycznych !
Jak się zagłębisz i wciągniesz, wszystko zostawisz z boku.
Pędziesz chciał tylko pisać, pisać pisać…
Jak ktoś ci będzie truł głowę czymś innym, będzie sobie wyrywał włosy i czekał, aż wrócisz do komputera :slight_smile:
Pozdro

[quote=korkie]Pędziesz chciał tylko pisać, pisać pisać…
Jak ktoś ci będzie truł głowę czymś innym, będzie sobie wyrywał włosy i czekał, aż wrócisz do komputera :)[/quote]
Bzdura. Pasja programowania nie musi oznaczać stania się nolajfersem.

[quote]Tworzysz plik index.php
Zapisujesz w nim w dowolnym edytorze (np. w notatniku)

<?php echo 'pierwszy program'; ?> Wrzucasz teraz plik index.php na serwer (np. przy pomocy klienta ftp FileZilla) i masz już swój program w internecie na swojej domenie. To wszystko. Potem tylko się uczyć i próbować.[/quote] ;)

Dziękuje za tak “rozległą” pomoc.
Na początek przejże swoje stare książki Grębosza, wymieszam to z Językiem ANSI C, a później ?
Kto wie…

jak już jedziesz z Gręboszem to zalecam Ci pisanie czegos na boku troche, mimo ze raczej nie zaleca sie nauki w walce to np po sobie wiem ze jak nie pisze czegos na boku to przyklady czysto ksiazkowe ( chociaz to mocna strona Grebosza smile ) potrafia zniechecic do wszystkiego smile