2010-08-09:

Kurs programowania?

question:blog
(Krótki i chaotyczny post napisany "w biegu") Natrafiłem na pewien problem. Mianowicie, skąd początkujący powinien się uczyć programować? Sieć jest przepełniona materiałami dot. najrozmaitszych języków programowania. Są kursy C, dokumentacja Pythona, manuale Intela do Assembly x86, książki o PHP, etc. Ale to wszystko jest o językach. I dobrze! Ale co z nauką komponowania programów (z braku lepszej nazwy przychodzącej mi do głowy)?

(To co napiszę teraz napisze jest oczywiste dla osób które już długo programują)
Zauważcie, że znajomość typów zmiennych czy składni funkcji wcale nie implikuje umiejętności poprawnego skorzystania z nich do "przetłumaczenia myśli na kod". To, że ktoś zna na wspak i po rumuńsku (parafrazując pewne dowcipy o hackerach, lamerach i loozerach) standard C, C++ i Pythona, nie czyni go to jeszcze dobrym programistą. Ale jednocześnie, osoba która umie programować (tj "tłumaczyć myśli na kod"), odnajdzie się bardzo szybko w większości języków programowania, nawet jeśli składnie będzie znać tylko pobieżnie.

Ktoś może zasugerować, że chodzi mi o algorytmikę... ale nie, to nie do końca to. Algorytm też trzeba "przetłumaczyć z myśli na kod", zapisać go przy pomocy składni języka (czyli wykorzystać narzędzia dostarczone przez dany język programowania).

Osobiście nauczyłem się powyższego w tak zwanym międzyczasie i nie miałem żadnych materiałów w których by takie rzeczy były tłumaczone czy prezentowane. Więc może materiały są do tego zbędne?

I tutaj zwracam się z prośbą o pomoc do moich czytelników :)

Natrafiliście może na jakiś kurs programowania dla początkujących?
A może na jakąś książkę lub serię artykułów w czasopiśmie?
A może uważacie, że tego trzeba się nauczyć "po drodze", bez żadnych dodatkowych materiałów?
Każdy pomysł mile widziany! :)

Pozdrawiam serdecznie i zachęcam do dzielenia się pomysłami :)

Comments:

2010-08-09 09:17:06 = Tomek
{
Najlepiej uczyć się programowania pisząc sobie gry. Na początek zgadywanie liczby z przedziału 1-10, jakiś czas potem prosty tetris, nieco później klon Super Mario a dalej to już kto jak lubi.

Po mniej-więcej dwóch, trzech latach i/lub pierwszej płynnej grze 3D na uczącego się spłynie poczucie, że w zasadzie umie wszystko a jego kod jest bliski ideału.

Po następnych 5 latach powinno pojawić się uczucie, że w zasadzie jest się totalnym amatorem, któremu czasem coś wyjdzie.

Dojrzałego profesjonalistę można poznać po tym, że znowu ma odwagę pokazać swoje produkty światu, choć nigdy nie przestanie się ich wstydzić.
}
2010-08-09 09:19:08 = Rinz
{
Mysle ze przede wszystkim uczymy sie tego widzac kod innych. Teraz tylko pozostaje rekurencyjne pytanie skad oni to wiedza? ;) Pewnie od jeszcze starszych stażem, itd, etc, az w koncu dochodzimy do twórców jezyka, a moze i slynnych Elders of IT ;)
Warto tez czytac roznego tips & tricks danego jezyka przegladajac np pytania z serii hidden features na SO: http://stackoverflow.com/search?q=hidden+features :)
}
2010-08-09 09:20:17 = teamon
{
Czytać, czytać i jeszcze raz czytać cudzy kod. I grzebać.

(btw, hc captcha :P)
}
2010-08-09 09:24:30 = Tomek
{
@teamon "Czytać, czytać i jeszcze raz czytać cudzy kod." - to taka sama rada, jak chcącemu się nauczyć jeździć na rowerze mówić "patrzeć, patrzeć i jeszcze raz patrzeć na cudze jeżdżenie"
}
2010-08-09 09:35:29 = Karton
{
Ja najlepiej się uczę od kogoś irl.
Daje to w moim przypadku znacznie lepsze efekty niż czytanie manuali bo mogę dopytać o szczegóły, lub w drugą stronę o bardziej abstrakcyjne rzeczy.

Interakcja jest imo niezastąpiona.

}
2010-08-09 09:38:35 = Kele
{
Ostatnio rozmawiałem na ten temat. Według mnie kluczem jest tutaj zrozumienie tego, jak komputer widzi to co mu przekazujemy ;> Wczuwając się w ten "tok rozumowania" wszystko idzie dużo łatwej. Nie sądzę, żeby istniały jakieś książki, które tego uczą. Jeśli jednak takie istnieją, chętnie poczytam ;]
}
2010-08-09 09:48:02 = Jurgi
{
Nigdy niczego takiego nie widziałem. Może, jeśli już, to w jakichś starych podręcznikach. Ale wątpię. Czy taka wiedza da się w ogóle przekazać? Wydaje mi się, że nie.
}
2010-08-09 10:09:59 = M
{
Myślę, że poprzednicy mają rację - praktyka, czytanie cudzego kodu, ewentualnie pokazywanie go komuś bardziej doświadczonemu.

@Tomek: Masz pojęcie ile mógłbyś się nauczyć, analizując np. w jaki sposób profesjonalny kolaż układa ciało podczas jazdy? Jak zmienia pozycję jadąc pod górkę/w deszczu/pod wiatr? Albo jak ma ułożony tygodniowy plan treningu?

A przykład i tak jest bez sensu, bo tu jest o wiele więcej technik i dróg na skróty, które można o wiele prościej wyciągnąć i sobie przyswoić - oczywiście sam sposób myślenia o problemie trzeba sobie wypracować i tu chyba nie ma jakiejś drogi na skróty. No i oczywiście nie chodzi też o czytanie całego kodu jakiegoś programu - raczej podpatrzenie jak radzi sobie z obsługą konkretnej interesującej czynności.
}
2010-08-09 12:20:41 = raphael
{
A ja myślę, że umiejętność układania programu/algorytmu w myśli to nie wszystko; potrzeba również umiejętności posługiwania się strukturami danych w danym języku programowania. Bo pętle i ify to nie wszystko.

Sam nauczyłem się programować rozwiązując małe zadania, np 'napisz program sprawdzający czy dany wyraz jest palindromem'. I np mam do rozwiązania jakiś problem, i wiem, że do tego dobry byłby perl, ale nie za bardzo znam struktury danych perla, (są inne niz w C). Znam składnie perla, ale co z danymi?

Inna sprawa, początkujący chcą pisać programy które coś robią, czyli korzystają z zewnętrznych bibliotek, a nie napisaliby algorytmu quicksort.

Aktualnie wróciłem do korzenii - przerabiam automaty i wyrażenia regularne.
}
2010-08-09 13:23:19 = Blacha14
{
Jak zaczynałem sie uczyc programowania sciagałem darmowe aplikacje które potem w miare umiejetnosci przerabiałem po swojemu, cos dodałem etc. Później szukałem książek choc znaleźć dobra książke to tez trzeba trafic. Bo wiekszość ksiażek jest pisanych dla poczatkujacych którzy dopiero z ksiażka pierwszy raz siegaja po kompilator. A sa tez ksiazki z dużą iloscią błędów czy wprowadzające w błąd myslenia o pewnych konstukcjach.

Po pewnym czasie zaczałem troche inaczej, poprostu miałem manuala,pisałem swoj program który miałem w głowie na kartce, po kolei co ma byc. Pozniej brałem sie za pisanie. Pisałem program na około długi, nieoptymalny kod ale taki który potrafiłem szybko napisać i działał. Dopiero potem brałem sie za jego optymalizacje po czym kod skracał sie o ponad połowe;p

Teraz mam troche wieksza wiedze ale tez czasem zaglądam do kodu innych i tak samo gdy nie wiem jak cos napisac staram sie pisac to na około, później to optymalizujac :)
}
2010-08-09 15:10:20 = RobertG
{
Cześć,

IMHO do popularnych języków jest sporo dobrych tutoriali i to nie ich brak/wybór jest problemem, tylko brak cierpliwości i zrażanie się pierwszymi błędami. Tu chyba może pomóc tylko wytrwałość (łatwo powiedzieć :)). no ew. pomoc kogoś bardziej obeznanego (no ale z tym różnie bywa).

BTW fajnie, że poruszasz takie tematy na blogu.
}
2010-08-09 15:10:59 = Galcia
{
A ja uważam, że bardzo pomocnym czynnikiem jest rywalizacja! Pamiętam początki kiedy osoba której bardzo nie lubiłem, również zaczynała swoją przygodę z informatyką - dawało mi to motywację być zawsze lepszym od niego (pomijam już bezpłatne testowanie zabezpieczeń jego stron czy aplikacji :P). Uważam też, że lepsze od każdej książki jest uczenie się na błędach oraz jak już ktoś nadmienił śledzenie "kruczków"/sztuczek w programowaniu lub czytanie różnych ciekawych artów - które naświetlają jakiś problem i pokazują możliwe prawidłowe rozwiązanie. Bardzo przypadły mi do gustu gierki typu hackme/crackme, czy CISCowe interaktywne gry (po vpn z Edinetu o ile dobrze pamiętam https://cp.svc-edinet.eu/). Kiedyś widziałem też serię zagadek odnośnie PHP - bardzo mnie to rozbawiło :)

np. podaj wartość zmiennej post "u" aby wykonać funkcję win()

if (!isset ($_POST['u'])) $nice = 0;
if (ereg ('.', $_POST['u'])) $nice = 0;
if (ereg ('%', $_POST['u'])) $nice = 0;
if (ereg ('[0-9]', $_POST['u'])) $nice = 0;
if (ereg ('http', $_POST['u']) ) $nice = 0;
if (ereg ('https', $_POST['u']) ) $nice = 0;
if (ereg ('ftp', $_POST['u'])) $nice = 0;
if (ereg ('telnet', $_POST['u'])) $nice = 0;
if ($nice) {
if (@file_exists ($_POST['u'])) $nice = 0;
}
if ($nice) {
$nice = @file_get_contents ($_POST['u']);
if ($nice === 'Good Work!') win();
}
}
2010-08-09 15:28:54 = mijagi
{
imho doskonale sprawdzają się kursy/tutki, w których są opisane poszczególne elementy na większym projekcie, np. dobrze uczyć się PHP pisząc od zera sklep internetowy, człowiek uczy się jak wykorzystać wiedzę w praktyce.
}
2010-08-09 17:48:39 = Tomasz Kowalczyk
{
Tak jak powiedzieli przedmówcy - jeśli ktoś ma wystarczająco dużo energii żeby "bawić się" kodem i zwyczajnie przekładać swoje pomysły na działające skrypty / programy, to nie będzie potrzebna mu żadna nauka ani książki, sam będzie w stanie "ogarnąć" temat i brnąć dalej. Ja na początku np. nie rozumiałem jak działają pętle na wielowymiarowych tablicach. W pewnym momencie zrozumiałem, że problem który usiłuję rozwiązać można przedstawić jako operacje na "sześcianie" z liczbami i wtedy nagle zrozumiałem, że po prostu iterujemy po kolejnych [i][j][k]. Potem już poszło jak z górki. ;]
}
2010-08-09 19:09:34 = faramir
{
Ja skrótowo opiszę mój sposób nauki programowania.

Gdy byłem mały (7 lat) dostałem z C64 książkę o programowaniu w BASIC-u i przepisywałem po prostu programy tam zawarte - czasem błąd wkradł się i nie działał program jak trzeba i trzeba było znaleźć odpowiednią linię i poprawić, a gdy chciało się robić coś innego, to należało zrozumieć co dana linia kodu oznacza.

Później, gdy już posiadałem PC, to dostałem książkę odnośnie nauki programowania w Turbo Pascalu - "Turbo Pascal w zadaniach z komentarzem" - książka, która tłumaczyła mi co i jak działa w programowaniu i dlaczego. Oprócz nauki języka uczyło innego sposobu myślenia.

Następnie, wiele zyskałem dzięki lekturze książki "Assembler - krok po kroku" - pierwsze kilka rozdziałów opisało jak działa komputer i programowanie w językach niższego poziomu stało się dzięki temu prostsze.

Do tego dużo praktyki w pisaniu różnych programów dla siebie... Czasem, dzięki czytaniu kodu innych ludzi widać, że coś można samemu lepiej napisać, zastosować lepszą technikę... W pewnym momencie samemu można zobaczyć, że kod, który się napisało, może być lepszy i od razu pisze się poprawniej, lepiej, bezpieczniej, szybciej, czytelniej, ...
}
2010-08-09 21:46:27 = Arv
{
Mój synek bawi się Scratch'em.
http://scratch.mit.edu/
}
2010-08-09 23:27:39 = Vra
{
@Arv
Co to ma być? Manuale intela ma synek czytać!
}
2010-08-10 08:54:30 = gemGreg
{
Mi pod koniec podstawówki pokazał, że istnieje takie coś jak programowanie Reg (kuzyn). W każdym razie na początku dokładnie pamiętam, że nie mogłem pojąć co mam napisać pomiędzy begin a end :) Wszystko rozumiałem tylko nie to (najważniejsze).

Dzisiaj jak już mi programowanie nie sprawia problemów i potrafię myśleć w ten trudny do nauczenia sposób myślę jak można się tego nauczyć.

Prawda jest taka, że my programujący już dobrze nie potrafimy sobie wyobrazić jak tego nie można rozumieć. Tłumaczyłem na studiach koleżance (nie wiem co robiła na infie) co to jest zmienna i mimo tłumaczenia na pojemniczkach i kwiatuszkach po chwili już o tym nie pamiętała gdy problem się rozwijał i dochodziły nowe rzeczy i kolejne. Nawet próbowałem tłumaczyć, że program piszesz jak przepis na ciasto :P

Myślę, że na początku należy nauczyć się myśleć w taki logiczny sposób. Musiałbym się zastanowić jak można by ten sposób usystematyzować i przelać na papie....text :P
}
2010-08-10 09:11:41 = Xer
{
@Galcia
stream data i po zabawie :p
"data://text/plain;base64,R29vZCBXb3JrIQ=="

A co do wpisu na blogu to moim zdaniem najlepszym sposobem jest czytanie kodu + manual/książka, czytając fora o danym języku widzimy kilka podejść do danego problemu co bardzo rozbudza nasza wyobraźnię w danym temacie. Jedyna wada to to że czasem wypowiadają się osoby bez większej wiedzy i podają niewydajne rozwiązania...
Ostatnio panuje moda na prowadzenie bloga i tam nasi "świetni" programiści podają swoje rozwiązania lub tutoriale usiane błędami, nie domówieniami które najczęściej wynikają z braku wiedzy autora na ten temat...
Najgorsze jest jednak to że blogi tego typu są dość mocno wypozycjonowane i w googlach zamiast trafiać na rzeczowy opis dostajemy jakieś ochłapy...
}
2010-08-10 09:18:16 = gemGreg
{
Gyn problem faktycznie jest ciekawy. Nawet z wypowiedzi czytelników widać, że rady są raczej dla już znających chodź trochę programowanie :)
}
2010-08-10 09:46:27 = friends
{
Najlepszym sposobem jest Mentoring :)
Gyn wie o co chodzi :)
Pozdro:)
}
2010-08-10 10:38:45 = mfcas
{
Żeby nauczyć się myśleć jak programista, trzeba programować. Jeżeli chcemy się grać na instrumencie muzycznym, musimy na nim grać.

Zakładając, że w programowanie wkręcają się osoby, których głównym celem nie jest nauczenie się programowania ("bo za to można niezłą kase wyciągnąć"), a raczej zrobienie jakiegoś projektu, przy którym bez programowania ani rusz, sprawa jest znacznie łatwiejsza - nie ma pytań "co powinienem teraz robić?", lub jest ich znacznie mniej i do tego takie osoby raczej nie "miewają lenia".

Osoba, która chciałaby zrobić swoją wymarzoną platformówkę sięgnie po jakiś gotowy engine i zamiast uczyć się jak tu wczytać .bmp do pamięci, a potem z niego skorzystać (nie mówie, że jest to nieprzydatny skill!!!), będzie uczyć się myśleć jak programistą pisząc logikę do owej wymarzonej platformówki w języku skryptowym wybranego silnika. Każdy dobry engine jest dobrze udokumentowany(ktoś kto umie czytać na pewno sobie poradzi), a internet (not google damn it!) roi się od przykładów implementacji platformówkowych featurów.

Jeżeli miałaby powstać książka "Jak myślą programiści" (aaalbo coś w tym stylu), to podejrzewam, że musiałaby być pełna sytuacji, w których programista musiał zacząć myślec. Właśnie dokumentacja przebiegu tych myśli mogła by stworzyć tę książkę.

Nie jestem sobie w stanie wyobrazić innej formy takowej lektury. Wracając do przykładu o muzyku - raczej nie da się napisać czysto teoretycznej książki, która nauczy grać na instrumencie. Chyba jedyne wyjście to rozwiązanie matrixowe, podłączyć kabelek do głowy i voilà.
}
2010-08-10 16:07:50 = lRem
{
Ja tam po staroświecku polecam dobrą książkę. Sam zaczynałem od nauki algorytmiki i po drodze języka Pascal, ktoś mi polecił "Algorytmy" M. Sysły. Można kupić "Język C" Kernighana i Ritchiego i po drodze nauczyć się zaskakująco sporo wiedzy ogólnej. Pewnie chwilę trzeba by poświęcić na szukanie, ale jestem przekonany, że to całkiem wydajna droga.
}
2010-08-10 17:36:22 = Dab
{
Sprawa jest bardzo prosta, potrzebna jest umiejętność analizy tego co chcemy zrobić i wiedza jak to zrobić.

Bez tego pierwszego potem powstają kwiatki w rodzaju "znam b. dobrze C++ (poznałem już funkcje i pętle) jak w mojej platformówce zrobić żeby ludzik skakał?"
}
2010-08-10 19:38:31 = Gynvael Coldwind
{
Dziękuje za liczny udział w dyskusji ;)

@Tomek (komentarz pierwszy)
"Dojrzałego profesjonalistę można poznać po tym, że znowu ma odwagę pokazać swoje produkty światu, choć nigdy nie przestanie się ich wstydzić."
To sobię muszę zapisać hehehe ;>

Anyway, ad meritum, właściwie chodzi mi o ten początkowy okres, w którym człowiek świeży, który nigdy wcześniej nie programował, a ma, np. tak jak piszesz, napisać prostą grę :)
Szczerze, to osoba zupełnie zielona, ma niewielkie szanse, nawet z kursem języka w ręcę, napisać choćby "zgadnij liczbę".
Właśnie moim zdaniem brakuje takiego jakiegoś "wstępu do programowania".
...a może nie brakuje... no właśnie to jest do przedyskutowania ;)

(na resztę komentarzy postaram się odpisać po powrocie ze spaceru ;>)
}
2010-08-10 21:02:29 = Radom
{
Najpierw trzeba sobie podzielić programistów na "programistów właściwych" i koderów. Koder zna język często bardzo dobrze ale nie potrafi zbudować poprawnego algorytmu. Dostaje zadanie i klepie. Programista stworzy dobry algorytm do zadanego problemu. Na studiach dużo znajomych przy zaliczeniu programowania szukało algorytmów w sieci, które implementowali (często copy&paste) nie zastanawiając się nad tym jak działają. Aby być dobrym programistą nie należy wybierać najlepszej drogi ale także starać się poznać dlaczego jest najlepsza. Nie tylko znać x algorytmów ale także rozumieć ich działanie, ich analiza pozwoli na podniesienie umiejętności.

Do początkowej nauki nie znając języka przydatne są programy typu ELI gdzie budujemy algorytmy. W ogólniaku przy użyciu tego programu pisało się algorytmy. Ile głów tyle rozwiązań. Analizując każde człowiek uczył się poprawnego programowania.

Jak ktoś pisał, aby dobrze jeździć na rowerze należy często jeździć i podglądać innych. tak samo tutaj częste pisanie programów i podglądanie innych jest sposobem na naukę. Ćwiczenie i trening czynią mistrza w każdej dyscyplinie.


".... w którym człowiek świeży, który nigdy wcześniej nie programował, a ma, np. tak jak piszesz, napisać prostą grę :)
Szczerze, to osoba zupełnie zielona, ma niewielkie szanse, nawet z kursem języka w ręcę, napisać choćby "zgadnij liczbę"."

Na magisterkę pisałem skrypt w bardzo niszowym języku, byłem tym przysłowiowym zielonym człowiekiem. Tutoriali niewiele, mentorów także brak. Z początkowego skryptu mieszczącego się w kilkunastu plikach w miarę pisania udało się zoptymalizować do paru, czyli to praktyka czyni "mistrza" nie wolno tylko klepać na ilość ale zastanawiać się jak i dlaczego coś działa?
}
2010-08-10 22:41:46 = przemoc
{
Moim zdaniem natomiast sama algorytmika aż tak ważna nie jest, choć podstawy znać trzeba, na pewno. Zacznijmy od tego, że jest potrzebne zdroworozsądkowe i logiczne myślenie. Banały, jasne, ale właśnie znajomość algorytmów bez umiejętności dopasowania ich do bieżącego problemu jest gorszą sytuacją od odwrotnej, gdzie mamy elastyczną wizję całości i potrzebujemy jedynie klocków, by ją złożyć. Bo poprzez ACM, Springer itp. serwisy najprawdopodobniej znajdziemy poszukiwane rozwiązania podproblemów, ale mało prawdopodobne, że głównego problemu.

Raz jeszcze zwrócę uwagę, że, obok programowania per se, jest jeszcze problem programowania w danym języku, tj. z jego duchem i filozofią w tle, a to daleko wykracza nawet poza doskonałą znajomość składni. Dlatego nie do końca zgadzam się z Tobą Gyn, że np. ktoś będący świetnym programistą C++ tak szybko odnajdzie się w Pythonie, w sensie że będzie w stanie w nim pisać prawdziwie pythonowe programy. Ja np. kiedyś używałem Ruby niemal jak interpretowane C na sterydach - pisałem w Ruby, ale prawdziwie rubiowym programowaniem tego nazwać nie można. Język trzeba "poczuć" i "myśleć" nim - tego właśnie książki w znakomitej większości nie uczą. Obcując jednak z wysokiej jakości kodem i słuchając/czytając tych, którzy naprawdę mają coś do powiedzenia w temacie programowania z użyciem danego języka, można ten stan powoli osiągać.

@Radom:
Ja pamiętam czasy, gdy koderzy to właśnie byli pro, zazwyczaj świadomi jak różne rzeczy odbywają się niskopoziomowo, a programiści - szare masy (dajmy na to nie musisz znać typowych sposobów implementacji funkcji wirtualnych by móc naprawdę dobrze z nich korzystać, ale wiedza ta może być przykładowo przydatna w przypadku konieczności przeprowadzenia pewnych optymalizacji w projekcie). Język ewoluuje, nic się na to nie poradzi.
}
2010-08-11 05:51:26 = friends
{
zgadzam się z przemoc :)
język trzeba zrozumieć nabrać dośwadczenie (pisać naprawdę dużo ). Jednak osoba która znam bardzo dobrze C++ , szybko zrozumie pythona dlatego,że wie o co chodzi w programowaniu (obiektowym).
moim zdaniem najlepszym kursem C++ :
jest Symfonia C++ (nie dawno kupiłem i czytałem pobieżnie i muszę powiedzieć ,że się miło zaskoczyłem )
lub
korepetycje u dobrego programisty :>

Pozdrawiam Serdecznie :)

}
2010-08-11 07:46:01 = przemoc
{
@friends
Przemocem, mój nick się odmienia. Proszę, nie stawiaj spacji przed znakami interpunkcyjnymi. ;)
Napisałeś, że się zgadzasz, ale jak widać nie do końca. Tyle że mylisz paradygmat programowania z programowaniem w danym języku. Rozumiejąc ideę programowania obiektowego, która nie jest związana z żadnym językiem (choć możną ją np. wynieść z nauki programowania w C++) oraz znając składnię pewnego języka można dalej nie wiedzieć jak zgodnie ze sztuką realizować obiektowe koncepcje w nim, bo różne języki dają często różny arsenał narzędzi do wykorzystania. Nie mówię, że dobry programista w C++ nie będzie miał łatwiej na drodze do dobrego programowania w pythonie, ale to nie jest tak, że z automatu w trymiga nim zostanie. W szczególności dochodzi się nawet do pozornych błahostek - potencjalna miłość do domyślnych argumentów funkcji i metod będzie musiała zostać poddana próbie w przypadku używania obiektów typów niegwarantujących niezmienności (niebędących immutable). Itd. itp.
}
2010-08-11 12:00:07 = Galcia
{
@Xer

I teraz mi powiedz, że ktoś kto nie czytał man'a phpca od deski do deski by to wymyślił :)
Chociaż to nie jedyny sposób ;) Jak chcesz to mogę poszukać, zrzucałem kiedyś takie zabawy :P

Ps.
Gratulacje oczywiście ;D
}
2010-08-11 12:40:58 = Xer
{
@Galcia

zapodaj inne rozwiazania bo ja jakos innego w chwili obecnej nie widze :p
zlinkuj te zabawki chetnie oblukam te zadania :]
a to zadanie co teraz podales to kiedys chyba identyczne bylo na tdhack
}
2010-08-11 12:46:46 = Galcia
{
@Xe
Całkiem możliwe, bo ja to trzymam jako txt/php i nie zawsze mam napisane skąd brane :P

Co do innego rozwiązania - był jeszcze motyw z plain textem (bez base64), lub z niestandardowymi errorami 404, ale to już były sposoby do testowania na lokalnym serwerze, bo tak to tylko datastream ;p Poszperam w domu jak wrócę z roboty i jak znajdę to gdzieś podlinkuje! :)
}
2010-08-12 02:09:38 = Kisiel
{
A wg mnie najważniejsze w programowaniu jest zrozumienie zasady działania komputera. Bo skąd wiecie że wasz kod jest dobry? Bo zajmuje mniej linijek? Chyba nie do końca tak jest... Jeśli ktoś nie wie czemu skoki są kosztowniejsze od przypisania wartości to nie będzie on dobrym programistą.
Są książki, które uczą języków programowania, a zarazem uczą programowania omawiając przykłady. Czytanie takich książek to jedyny wg mnie sposób nauczenia się programowania poza poznawaniem budowy, zasad działania komputera. Nie można jednak brać wszystkiego co piszą w książkach/artykułach (ludzie prawdopodobnie znający się na rzeczy) dosłownie. To, że coś sprawdza się w jednym przypadku, wcale nie oznacza, że jest to najlepszy sposób rozwiązania podobnego problemu - trzeba myśleć a nie bezsensownie kopiować rozwiązania.
}
2010-08-12 12:33:38 = shorinsan
{
Imho wszystko co było do powiedzenia, powiedział już Dab. Aczkolwiek znam wielu ludzi, którzy są dobrymi matematykami a nie mają w ogóle polotu do transformacji myśli na kod jak i tych, którzy potrafią dodawać i trochę odejmować, ale dosłownie "pływają" w kodzie. Koderami/programistami/codemonkey'ami (czy jak tam chcecie ich nazywać) zostali akurat ci drudzy, pierwsi bawią się całką i kredą. Wszystko zależy od człowieka, jeden jest lepszy w jednej dziedzinie, drugi w innej. I nie okłamujmy się, trzeba się urodzić z tym czymś... ;)

@przemoc
za dużo teoretyzowania
}
2010-08-12 18:52:57 = Razo[R]apiD
{
Ja mysle, ze o wiele latwiej jest zaczac programowac znajac bardzo dobrze jezyk angielski - w sensie - na tyle dobrze, zeby znajac podstawowa skladnie jezyka (ktora poczatkujacy poznaja wlasnie z ksiazek i tutoriali) czlowiek byl w stanie przedstawic sobie w glowie w sposob krokowy jak ma to dzialac a potem przekladajac na angielski stworzyc jakis pseudo-kod w swojej glowie i potem posilkujac sie tym co nam jezyk oferuje - przekladac go na realny kod. Wtedy nawet jak dokonca ktos nie wie jak np. uzyskac w programie date albo cos, to znajac angielski wpisze date, a potem juz blisko do date() albo do siegnieca do manuala i wpisania tego slowa w helpie.

Jak wyskoczy blad to chociaz jako tako wtedy uda sie go przetlumaczyc i zaczaic o co biega.

I tak naprawde osoba totalnie zielona w ogole nie zrozumie na poczatku jak dziala komputer i to co pisze, wiec to jej bardzo nie pomoze. Najpierw imho pomoze jej przepisywanie kodu np. z ksiazki i uruchamianie go. I znow - wyskoczy blad kompilacji, szukam bledu pomiedzy kodem a listingiem, znajduje brak srednika i wiem juz jaki wtedy blad wyskakuje. A kazdy blad czy dzialanie programu inne od zalozonego zmusza nas do wczytania sie w kod i tlumaczenia sobie na 'chlopski rozum/lopatologicznie' (w czym wlasnie tez pomaga znajomosc angielskiego) i tak to sie dzieje ze zaczynamy rozumiec co piszemy i dlaczego to co piszemy dziala tak a nie inaczej, a potem juz piszac nastepne programy coraz bardziej myslimy tym specyficznym tokiem.

Trzeba rowniez miec odpowiednia ilosc cierpliwosci, zaciecia, oraz posiadac predyspozycje do tego by dochodzic gdzie jest blad lub problem i myslec jak go pokonac, a nastepnie bardziej sie z tego cieszyc niz finalnego produktu (cos ala zamilowanie/chec poznawcza do odkrywania czegos, bardziej cieszy fakt samego procesu niz ostateczny wynik)
Czesto dla osob bez takich cech komputer, a tym bardziej programowanie to czarna magia.
}
2010-08-13 07:18:27 = faramir
{
@Arv: Super! Jaki świat jest mały - współprowadziłem warsztaty ze Scratcha dla nauczycieli i inne takie tam :).

Fajna sprawa ten Scratch dla dzieci do nauki programowania :).
}
2010-08-13 10:20:35 = garbaty lamer
{
Najlepsze efekty oprócz powyższych daje lektura artykułów "Code SOD" na http://thedailywtf.com
}
2010-08-13 20:31:21 = Gynvael Coldwind
{
@Rinz
"[...] widząc kod innych" - tak, to zazwyczaj jest dobre źródło wiedzy na początku. Co prawda zmieniłbym słowo "widząc" na "analizując" :)

Ad link - thx, nie znałem :)

@teamon
Czyli kolejny punkt do "analizy kodu innych" :)

@Tomek (drugi komentarz)
Hmm, sądzę, że jednak sporo informacji można wyciągnąć z cudzego kodu :)

@Karton
Tak, to fakt. Natomiast, jak zresztą pisałem w PPP, jestem raczej za samodzielnością w nauce, szczególnie prostych rzeczy. W końcu wtedy uczysz się też uczyć :)
Natomiast taka osoba faktycznie może pomóc w rzeczach trudnych lub bardziej, hmm, abstrakcyjnych.
(no chyba, że już umiemy się uczyć, a zależy nam na czasie, to inna sprawa)

@Kele
Słuszna uwaga. Natomiast hmm, czy to znaczy, że początkujący powinien zacząć od bramek logicznych? A może od assemblera? Warte przemyślenia :)

@Jurgi
Hmm, właśnie chciałbym zbadać to, czy można taką wiedzę przekazać :)
Czasem jakieś urywki czegoś takiego widywałem, ale wydaje się, że to zanikło (albo po prostu nie "natykam" się na to).

@M
Czyli "analiza cudzego kodu" ++ :)

@raphael
Oczywiście, masz rację. Natomiast te struktury są w zasadzie bardzo podobne w różnych językach. Jeśli jakiejś brakuje w danym języku, to zazwyczaj jest ona dostępna w jakiejś (nie)standardowej bibliotece.

@Blacha14
Taaak, błędy w książkach się zdarzają. Miałem to nieszczęście, że jak chciałem się uczyć assemblera, to trafiłem na książkę która LEA tłumaczyła jako "Load ASCII" lub podobnie (zupełnie nieprawidłowo), co mnie na kilka ładnych tygodni zawiesiło ;p
Natomiast sądzę, że takich książek jest niewiele :)

@RobertG
Ależ my nie dyskutujemy o tutorialach dobrych języków, a o nauce samego programowania, niezależnie od używanego języka :)
Nigdy nie przeczyłem, że jeśli chodzi o języki programowania i ich naukę, to materiałów jest pod dostatkiem :)

@Galcia
Zgadzam się z tobą :) Natomiast sugerowałbym raczej zdrową konkurencję, niż próbę zrobienia komuś, kogo się nie lubi, na złość :)
Z mojego doświadczenia wynika, że znalezienie osoby na podobnym poziomie umiejętności i wymiana informacji, bardzo przyspiesza rozwój, szczególnie jeśli obie osoby sobie wzajemnie wchodzą na ambicje :)
No i można się wtedy uczyć nie tylko na własnych błędach :)

Hmm, jest to dobre jeśli chodzi o kontynuowanie rozwoju, natomiast chyba nie dotyczy nauk podstaw programowania :)

Ad kod php który podałeś - przypomina mi to jedno zadanie z CTF na CONFidence, chyba w 2009 :)

@mijagi
Czyli takie case-study, tak?
Tak, to brzmi rozsądnie ;)

@Tomasz Kowalczyk
Hehe, ano właśnie, próbujemy ustalić to jak się nauczyć "zwyczajnie przekładać swoje pomysły na działające skrypty / programy" :)
Sugerujesz "zabawę kodem" - czy mógłbyś rozwinąć? Czy chodzi ci o modyfikowanie posiadanego kodu i eksperymentowanie z nim?

@faramir
Przepisywanie programów to bardzo ciekawa rzecz. Od kilku dni prowadzę pewien eksperyment, w którym dostarczam pewnej początkującej osobie kod w PNG i proszę ją aby go przepisała. Trochę się wachałem jeśli chodzi o przeprowadzenie tego, bo to w końcu może być strata czasu (każdy jest inny, i to że np ja się tak uczyłem, wcale nie oznacza, że przyda to się również innej osobie).
Natomiast dość szybko wyszło, że takie ćwiczenie bardzo pomaga nauczyć się zwracać uwagę na szczegóły (literówki, etc). Szczególnie przydatny jest tu (znany z listingów z Bajtka) mechanizm checksumów każdej linii - od razu widać która linia się różni od listingu.
Jestem ciekaw, czy jeszcze jakieś pozytywne aspekty tej metody będą (liczę na jeszcze kilka, pewnie napisze o tym na blogu potem).

"Analiza cudzego kodu"++ :)

@Arv
Ciekawe, nie kojarzę tego, przejrzę to potem :)

@Vra
;D

@gemGreg
Hmm, ciekawa uwaga :)
Fakt faktem, w programowaniu wymagany jest podział zadania na kroki, decyzje, pętle, etc, więc zapewne początkujący musi nabyć umiejętność rozbijania kodu na logiczne części. Hmm, sądzę, że można stworzyć tutorial który by czegoś takiego uczył (chociaż z drugiej strony, te "części" mogą być bardzo różne, w zależności od języka).

@Xer
Czyli "czytanie kodu"++, i do tego zalecasz książkę lub manual.
Ano, przy czytaniu materiałów na forach/blogach trzeba wszystko traktować trochę z przymrużeniem oka :)

@gemGreg
Dokładnie :)

@friends
Hmm, oczywiście pewnego rodzaju mentor może Cię tego nauczyć. Niemniej jednak, pytanie brzmi "jak miałby to zrobić" :)

@mfcas
"co powinienem teraz robić?" - to często zadawane pytanie, sądzę, że te skill tree proponowane przeze mnie parę postów temu trochę na to odpowiedzą :)
Anyway, słuszna uwaga, natomiast dotyczy bardziej dalszego rozwoju, niż podstaw programowania :)
Dalej, "case study" ++. Taak, to dobry pomysł :)
Zgadzam się, że żeby nauczyć się czegokolwiek dobrze, trzeba to robić :)

@lRem
"Dobra książka"++ :)

@Dab
Czyli podział na części, jak wyżej. Tak, to słuszna uwaga :)

@Radom
Artykuły na moim blogu raczej są skierowane do hobbystów, więc zakładam, że osoba faktycznie chce się nauczyć i projektować programy i programować w kilku językach :)
ad ELI, muszę rzucić okiem ;)
ad magisterka - ale programować już umiałeś? (tj pisałeś już w innych językach?)

@przemoc
Raczej chodziło mi o przypadek, w której osoba pisała w 20 językach programowania. W takim przypadku wejście w każdy kolejny język jest dość proste. Nie mówię tutaj o pisaniu 'quality code', ale o napisaniu dowolnego programu bez większych problemów, nawet jeśli kod jakościowo jest nienajlepszy :)
Zgadzam się, że każdy język ma swoje zalecenia, specyficzne konstrukcje, etc, i że trzeba sporo w nim popisać (i sporo materiałów przejrzeć) zanim kod będzie miał dobrą jakość :)

@Kisiel
Czyli "zasada działania komputera"++ :)

@shorinsan
Osobiście uważam, że matematyka i informatyka to obecnie dwie oddzielne działki, czy matematycy tego chcą, czy nie :)

@Razo[R]apiD
Ad angielski - słuszna uwaga, pisałem też o tym w PPP :)
"przepisanie kodu"++
Taak, cierpliwość niewątpliwie jest wymagana :)

@garbaty lamer
Czyli uczenie się na błędach innych :)
Ale to w zasadzie tyczy się też późniejszego rozwoju, niż samych początków.


Podsumowując, padło trochę ciekawych pomysłów, takich jak:
- przepisywanie kodu
- analiza cudzego kodu
- dobra książka
- zapoznanie się z case-study tworzenia pewnych aplikacji
- nabycie umiejętności podziału problemu na części
- etc

Jeszcze jakieś pomysły? A może coś pominąłem? (przy czym chodzi mi o strikte o naukę programowania, tak jak pisałem w poście ;>)

}
2010-08-14 15:11:23 = D.F.
{
Ja natomiast nie do końca rozumiem o co Ci chodzi używając terminu "komponowania programów". W kursach i książkach jest to przecież opisane. Chyba każdy kurs czy książka zaczyna się tak, że omawiany jest prosty szkielet programu w danym języku. Wtedy już początkujący wie co w jakich miejscach ma pisać, a jak już wie, to potem pozostaje się dowiedzieć co tam może wpisać. Autorzy też często udzielają wskazówek jak sobie podzielić cały projekt np. podzielić go na pliki, które potem się dołącza do głównego programu czy utworzyć osobne katalogi, gdy mamy dużo plików projektu.
}
2010-08-14 16:13:08 = Kele
{
@ D.F.

Myślę, że większość osób, które odwiedzają tego bloga dość łatwo załapało programowanie, więc ciężko oceniać po własnych doświadczeniach. Ja czasem jak tłumaczyłem coś osobom, które nigdy związku z kodem nie miały a w szkole musiały programować w Pascalu, to zawsze największym problemem było to, żeby zrozumieć, że komputer robi TYLKO TO co mu każemy według pewnych reguł.

Takim najpopularniejszym błędem pod względem myślenia zawsze było to, że napisanie: WriteLn('x = ', a + b); nie zmieniało x'a. Dla nich było jasne, że skoro jest napisane x = a + b, to ten x jest zmieniony, nie zwracali uwagi zupełnie na resztę.
}
2010-08-14 17:53:34 = TomekG
{
Ja bym podszedł trochę inaczej starając się od kompletnego zera komuś tłumaczyć programowanie:

Najpierw postarałbym się wytłumaczyć czym jest w ogóle liczba - jaka jest różnica między zwykłym symbolem przedstawiającym cyfrę a wartością
jaka ta liczba przedstawia i czym to może być. Wiem po sobie jak trudno jest zrozumieć to, że wpisuję kilkanaście linijek kodu w C, dopisuję nazwy
jakichś funkcji w WINAPI a efektem tego jest okno przed moimi oczyma na monitorze. Zaglądam więc jakimś debuggerem w wygenerowanego exeka - a tam znów
tylko jakiś liczby ustawione w rzędzie po 16 w każdym i tak w pasku mogłoby się wydawać do nieskończoności :) myślę sobie: skąd te okno! jak to możliwe że liczby
zmusiły komputer, by przekazał dane dalej tak by monitor zinterpretował to jako okno :) posługiwałbym się analogiami (np maszyną Maszyna Rube Goldberga) tak by czytelnik zaufał nawet nie wiedząc jak to się dzieje "behind the scenes", że coś tam gdzieś puknięte na wejściu może dać zupełnie nie związany z początkiem efekt na wyjściu (liczba -> okno). Musiałoby by się tam też znaleźć wzmianka podstaw fizyki tłumacząca językiem prostym jak to w ogóle jest że widzimy - samo to co u
nie których mogło by wywołać "aha". Ostrzegłbym że w pierwszym zetknięciu z programowaniem trzeba się przygotować na natłok informacji - ale starałbym się
nie wzbudzać paniki mówiąc, że choćby nie wiem jakie skomplikowanie "to tylko bardzo dużo, bardzo prostych rzeczy". Przydałoby się tu opisanie jak się samemu czuło
gdy się z tym wszystkim zaczynało - o ile jeszcze to pamiętasz?:) to dawałoby otuchy i motywacji by czytać następną stronę tutoriala hehe Przydałaby się też
lekcja historii tak by dzisiejsza generacja choć lekko poczuła z jakimi problemami borykali się kiedyś programiści i jak wiele rzeczy oraz dlaczego ewaluowało
do takiej postaci jak jest teraz i co to dało (np języki obiektowe itd). Pisanie kodu rozpocząłbym od "pseudokodu" i problemu z życia (bez zbędnych przecinków, średników itd) by miare szybko przejść do prawdziwego kodu. Wyjaśnianie programu zawsze zaczynałbym od bardzo ogólnego wyjaśnienia co sie dzieję i w miare przyrostu stron zwiększałbym jakby rozdzielność tłumaczenia by wiedza
dobudowywała się "klockami" krok po kroku a nie wszystko albo nic. W sumie to dużo by tu pisać ale taki mniej więcej byłby początek artu :)
}
2010-08-14 19:05:47 = Karton
{
Główny kłopot to dostosować poziom przekazu do poziomu odbiorcy i właśnie dlatego imo nie ma nic lepszego niż rozmowa irl(chodź skype czy nawet gadu też daje radę) i jakieś przykłady.

@Gynvael (to odnośnie samodzielnej nauki :))
Oczywiście rozmowa i pokazywanie co i jak to powiedzmy 1~3h w tygodniu a jakieś 40~60h to pisanie programów, czytanie i oglądanie różnego rodzaju pomocy(książki, fora, videoarty).

Inaczej nie da się ocenić poziomu odbiorcy tak dobrze więc i efekty takie dobre nie będą(przekaz nie będzie kompatybilny :)).

}
2010-08-15 20:26:18 = anonim
{
@Gynvael:
mówiąc o komponowaniu programów - pamiętam Twoją grę z jakiegoś compo (krówki i świnki w temacie) - ciężko było tę grę nazwać dobrze skomponowaną ;]

Moim zdaniem "komponowania" programów można się nauczyć tylko z doświadczenia - jak człowiek pisząc większe projekty zobaczy, że pisanie bez ładu i składu utrudnia rozwój projektu, to sam prędzej czy później wpadnie na to, że trzeba to zmienić (czyt. jakoś ułożyć i zakomponować). Ewentualna nauka komponowania progsów mija się z celem, bo taki nowo nauczony programista na 99% nie będzie wiedział PO CO cokolwiek planować i układać, skoro można to zrobić na prostszy (na pierwszy rzut oka) sposób.

To tyle ode mnie w temacie.
}
2010-08-15 21:49:40 = Gynvael Coldwind
{
@D.F.
Co do "komponowania programów", to przyznaje, że trudno mi to jednoznacznie zdefiniować. Zachęcam do ponownej lektury posta, lub moich komentarzy, a nuż się zrozumiemy :)
Głównie chodzi mi o umiejętność rozbicia danego zadania na takie części, które można przetłumaczyć na kod / dane.

Czy mógłbyś wymienić kursy lub książki, w których jest to opisane w taki sposób, że można to zastosować w (prawie) dowolnym języku programowania (z danej grupy oczywiście)?
Szczerze mówiąc, jeśli chodzi o książki i kursy które widziałem, to autorzy za bardzo imo skupiają się na języku. Przy czym przyznaje, że widziałem tylko kilka pozycji :)

@TomekG
Hmm, czyli jeśli dobrze rozumiem, proponujesz zacząć od tego "jak działa komputer", czyli kolejny głos w tą stronę :)

@Karton
Ah, w takich proporcjach przyznaje, że ma to sens :)

@anonim
"mówiąc o komponowaniu programów - pamiętam Twoją grę z jakiegoś compo (krówki i świnki w temacie) - ciężko było tę grę nazwać dobrze skomponowaną ;]"
Rozumiem, że mówisz o http://gynvael.coldwind.pl/?id=168 :)
Moim zdaniem była bardzo dobrze skomponowana, z uwzględnieniem posiadanych zasobów ma się rozumieć :)
Zauważ, że na zrobienie tej gry, tj.:
- zaprojektowanie jej
- rozplanowanie kodu
- stworzenie grafiki
- i stworzenie kodu
były tylko 3 godziny, tj. 180 minut :)
Prawdę mówiąc, częstym błędem na compo typu time-limited, popełnianym szczególnie przez bardziej doświadczonych programistów (np. przeze mnie na ostatnich dwóch IGK ;p), jest przerost formy (tj. "ładności" kodu) nad treścią (czyli tym co faktycznie w grze się dzieje).
Na time-limited compo nie ma czasu na ładne klasy, śliczne struktury, elastyczny i podzielony na moduły kod, czy optymalne algorytmy.

Ano, doświadczenie jest niezbędne oczywiście. Natomiast mi chodzi o przypadek, w którym osoba zielona, chce się zacząć uczyć programować, tj. chce stworzyć dany program, ale nie wie ani jak komputer działa, ani nie zna żadnego języka programowania, ani nigdy nie programowała. Moim zdaniem w takim wypadku nauczenie się języka to za mało, żeby stworzyć program ;>

Poza tym, rozmawiamy raczej o osobie która się hobbystycznie zajmuje programowaniem, tj. która robi to for fun, a nie o kimś kto chce się na jutro nauczyć programować, bo wczoraj usłyszał że więcej zarobi jako programista :)
}
2010-08-16 08:34:49 = matidz
{
Ja sie uczylem programowania przeklepujac toutoriale(bardzo szczegolowe) w Delphi(ver. 5)->na poczatku mozna wiekszosc wyklikac i oswoic sie z kodem pozniej samemu probowac modyfikowac, coraz bardziej skomplikowane tutki zawierajace mniej szczgolow. Pierwsze samodzielne kody->coraz bardziej rozbudowane. Probowalem 'dla zabawy' zapisywac kod otaczajacego swiata w 'pseudokodzie', z czasem 'logiczne' myslenie weszlo w nawyk.

Wydaje mi sie ze wazny tez jest jezyk programowania na poczatek. Jezeli zaczniemy nauke ok jakiegos jezyka bez deklaracji typu zmiennych- to nie bedzie dla nas naturalne ze zmienna ma jakis okreslony typ, jezeli nie bedziemy uzywali wskaznikow to nie zrozumiemy czym jest adres w pamieci. Przydaly by sie jeszcze wymagane wciecia.
}
2010-08-16 16:01:13 = D.F.
{
@Gynvael
"Czy mógłbyś wymienić kursy lub książki, w których jest to opisane w taki sposób, że można to zastosować w (prawie) dowolnym języku programowania (z danej grupy oczywiście)?"

Takich książek to nie spotkałem, tego typu wskazówki widziałem w książkach dotyczących danego języka. Ciekawe czy są właśnie takie książki (tak jak np. Inżynieria Oprogramowania traktuje o "życiu" programu komputerowego, niezależnie w czym został on napisany). Chociaż myślę, że takie rzeczy się poznaje dla jednego języka, a później się ewentualnie dowiaduje, że w jakimś języku jest inaczej.
}
2010-08-16 18:52:30 = anonim
{
@Gynvael
ktos kto uczy sie programowac "bo wiecej zarobi", a nie dlatego ze ma takie zainteresowania, nigdy nie bedzie dobrym programista, glownie dlatego ze taka osoba wychodzi z zalozenia, ze jak cos "bedzie potrzebne" (czyt. poki mnie pracodawca nie zmusi, to sie nie naucze), to sie na biezaco tego nauczy - byc moze to sie sprawdza przy pisaniu yet another databases, ale w przypadku innych dziedzin informatyki nie wydaje mi sie, zeby taka osoba pisala wydajnie czytelny i szybki w dzialaniu kod - zreszta tak jest z kazdym zawodem
a co do krowek i swinek - faktycznie, miales malo czasu na napisanie tej "gierki", tak czy siak wydaje mi sie, ze nie powinnismy oceniac jakosci kodu po tym, ile ktos mial czasu na jego pisanie ;] a jakosc kodu jest raczej rzecza subiektywna, kazdy ma inny styl pisania (maly offtopic - nie urazajac nikogo, nie rozumiem celu takich compo - wiekszosc z opublikowanych tam gier nie byla wcale grywalna, tower defense nie bylo niestety od tego wyjatkiem ;p)
}
2010-08-16 19:28:56 = Grzonu
{
Nie uwazam sie za wielkiego profesjonaliste, ale uwazam ze to chyba przychodzi samo z czasem w miare pisania programow. Sam widze po sobie ogladajac swoj kod np. z przed roku ze dzis dany problem rozwiazalbym zupelnie inaczej.
}
2010-08-16 19:50:57 = Gynvael Coldwind
{
@matidz
Czyli "przepisywanie kodu"++ :)
Co do języka - słuszna uwaga, która w zasadzie rodzi nowe pytanie: Od jakiego języka powinien zacząć początkujący?
W końcu, z jednej strony powinien być niskopoziomowy, żeby zrozumieć działanie komputera i nie było potem problemów ze zrozumieniem wskaźników, czy też optymalizacji na poziomie implementacji,
ale z drugiej strony, powinien być na tyle wysokopoziomowy, żeby efekt był widoczny w miarę szybko i żeby dana osoba się nie zniechęciła (w końcu programujemy for fun ;>)
Szczerze mówiąc, to skłaniam się w tym wypadku raczej w kierunku języków wysokopoziomowych (mimo iż sam preferuje te bardziej zbliżone do sprzętu).

@D.F.
"Chociaż myślę, że takie rzeczy się poznaje dla jednego języka, a później się ewentualnie dowiaduje, że w jakimś języku jest inaczej."
Hmm, być może masz rację :)

@anonim
"a co do krowek i swinek - faktycznie, miales malo czasu na napisanie tej "gierki", tak czy siak wydaje mi sie, ze nie powinnismy oceniac jakosci kodu po tym, ile ktos mial czasu na jego pisanie ;] a jakosc kodu jest raczej rzecza subiektywna, kazdy ma inny styl pisania "
Zauważ, że nie mówiliśmy o jakości kodu, a o rozplanowaniu aplikacji :)
Poza tym, w skrajnych przypadkach (a deadline 180 minut to jest skrajny przypadek) również należy imo brać pod uwagę czas, lub inne podobne czynniki.

"nie urazajac nikogo, nie rozumiem celu takich compo - wiekszosc z opublikowanych tam gier nie byla wcale grywalna"
Patrzysz na to od złej strony. Na compo nikt nie ma na celu wyprodukować gry dla gracza. Celem compo jest sprawdzenie siebie, "powalczenie" z innymi (dla niektóry jest to niezła motywacja), sprawdzenie co faktycznie da się stworzyć przy ograniczonych zasobach (czas, wielkość zespołu, dostępne biblioteki/grafiki/etc, czy też końcowa wielkość pliku wykonywalnego), nauczenie się radzenia sobie w bardzo stresujących warunkach, no i przede wszystkim dobra zabawa :)

Jest sporo osób które lubią brać udział w tego typu compo (np. sporo ludzi z gamedev.pl, z demosceny lub z innych scen mniej czy bardziej powiązanych z programowaniem), i sporo osób której ta forma zabawy w ogóle nie odpowiada.
Więc jeśli nie brałeś nigdy udziału w compo typu time-limited, lub brałeś ale się zraziłeś, to obawiam się że się po prostu w tej sprawie nie zrozumiemy :)

Proponowałbym nie kontynuować offtopicowania ;)
}
2010-08-17 10:05:43 = anonim
{
@Gynvael
rozumiem, ze mowimy o rozplanowaniu aplikacji w sensie rozplanowaniu jej kodu zrodlowego (podzial na odpowiednie klasy, funkcje, itp), wiec ma to spory wplyw na jakosc kodu (ofcoz to nie jest jedyny czynnik nan wplywajacy, ale jednak bardzo wazny) - byc moze zastosowalem zbyt duzy skrot myslowy.
co do compo, to nie bede odpowiadal ze wzgledu na Twoja prosbe o nieofftopicowanie, niektorych bawi po prostu dobrze dzialajaca funkcjonalna aplikacja, a niektorych bawi pisanie kodu w stresujacych warunkach (masochizm :) ), i ja to rozumiem :)

co do tego, w jakim jezyku powinien pisac poczatkujacy - ano w takim, ktory pozwoli mu na swobode wyrazenia wlasnego "ja" w postaci kodu - sa ludzie ktorych bawi prezentacja pewnej tresci, wtedy zainteresuja sie jezykami webowymi, sa ludzie ktorzy chca pisac appki dla wlasnych potrzeb (bo np nie znalezli odpowiedniego programu w necie), wtedy sie zainteresuja jakims C#/Java/Scratch, programisci gier siegna po C++, natomiast osoby ktore chca poznac tajniki dzialania sprzetu/systemu/czegostamciekawego siegna po asma lub C +WinAPI (ew. API systemu ktore ich interesuje), ogolna porada jest jednak taka by wybrac jezyk do ktorego jest w necie najwiecej materialow, najlepiej w ojczystym jezyku
}
2010-08-17 12:31:48 = Qui
{
Wiesz Gyn, mi sie zdaje, ze to jest cos, czego ciezko sie wyuczyc, albo ktos ma predyspozycje i rozumie to wszystko (tudziez uczy sie tego w tzw. 'miedzy czasie'), albo nie... imo to jest wlasnie czynnik ktory odroznia ludzi, ktorzy powinni sie zajmowac programowaniem od tych, ktorzy nie powinni ; ]

Skoro napisales taki post w temacie 'szopy na rowery' to bardzo chetnie sie wypowiem :D (zreszta widze, ze komentarze posypaly sie dosc obficie, wiec nie jestem jedyny ; ])

pozdrawiam
pograzony w Zürichowym smutku Qui.
}
2010-08-17 16:28:27 = Amarok
{
Osobiście mogę dostarczyć wieści prosto z "frontu", ponieważ sam właśnie próbuję uczyć się programowania. Zaczynałem już dłuższy czas temu od C++, przy czym były to zajęcia w Pałacu Młodzieży w Warszawie. Nie mogę powiedzieć, że nic mi nie dały, zyskałem podstawowe obycie w pracy z C++. No cóż, bardzo podstawowe i szczerze powiem, że po 2 latach obudziłem się i pomyślałem "Kurcze, przecież ja już powinienem umieć znacznie więcej!". To jest podstawowy problem, z tego co widzę dotykający większość zaczynających przygodę z programowaniem w ten sposób, co ja, czyli ze "wspomaganiem" - wiara w to, że nauczyciel/podręcznik poprowadzi za rączkę i wszystkiego nauczy. Dlatego, jeżeli miałbym wymieniać rzeczy potrzebne do nauki programowania, to na pierwszym miejscu wymienię zapał i prawdziwą chęć programowania (a nie zarobienia kasy, jak wspominali o tym przedmówcy).

Obecnie próbuję mierzyć się z asemblerem jako sposobem na poznanie mechanizmów sterujących komputerem od podstaw, ale nie jest to raczej niestety łatwa rzecz. Przymierzam się też do algorytmiki przy użyciu C++ - stosy, kolejki, listy, drzewa, grafy i tak dalej. Brak mi pomysłu na niskopoziomowy język programowania, coś bardziej podstawowego od C++, ale mniej hardkorowo podstawowego od asemblera.

No więc... Po takim steku właściwie offtopowej gadaniny, moja opinia:

1. Jak już wspomniałem, trzeba mieć "trochę" samozaparcia i naprawdę chcieć dobrze programować.
2. Dużo źródeł wiedzy, podręczniki jak najbardziej wskazane, ale do tego porady starszych stażem kolegów, analiza kodu opensource'owych aplikacji itp, generalnie nastawienie się na poszukiwanie wiedzy i czerpanie jej ze wszystkich możliwych miejsc i przy każdej okazji.
3. Jako języki na początek zdecydowanie polecam C++ i TurboPascala, ten drugi jest raczej bardziej przyjazny w procesie oswajania się z informatycznym sposobem myślenia. Oprócz tego jakiś strukturalny język programowania, niestety przy obecnym stanie wiedzy nie mam zupełnie pomysłu, jaki.
4. Zero litości dla bezmyślnego klepania czegokolwiek, nigdy nie robić niczego, "bo działa", a nie wiedząc dlaczego.

...i chyba tyle.
}
2010-08-18 07:27:18 = JSDK
{
Właśnie w taki sposób jaki ty opisujesz nauczyłem się programować w PHP, korzystając pobieżnie z kursów, a bardziej korzystając z własnego rozumowania
}
2010-08-19 15:08:01 = Ahmed Szaron
{
y tego nie można się nauczyć ?
Powiedział bym że z wiekiem to nawet jeśli miałeś to we krwi
za "młodych lat" to i tak coraz trudniej "komponować"
Mój ojciec był kiedyś brilliant z matmy i dziedzin określanych
mianem ścisłych a z wiekiem gdzieś to z niego uszło
:)
}
2010-08-24 08:03:38 = doopekk
{
Ja polecam pl.spoj.pl

Idealny sposób na naukę programowania. Rozwiązywanie problemów matematyczno-informatycznych to podstawa. Jak ktoś już opanuje prosty kod, nauczy się działania prostych funkcji to sam zacznie pisać swoje funkcje, a następnie przerodzi się to w jakiś większy projekt.
}
2010-08-30 13:48:17 = event15
{
Człowiek przyswaja wiedzę dopiero w momencie kiedy zaczyna coś rozumieć. Jeśli rozumie dla czego to działa w taki sposób, jest w stanie to wykorzystać w późniejszych sytuacjach. On musi czuć to co czyta lub pisze. Jeśli się tego nie czuje to umiejętność programowania jest gorsza. Jeśli to jest dla początkujących to zaśmiecanie głów pojęciami abstrakcyjnymi jest jak próbowanie wyjaśnić obcokrajowcu że chcę jagodziankę a nie herbatę....

Głównie człowiek zapamiętuje poprzez powtarzanie. Jeśli będzie rozumiał to co się dzieje z programem, będzie tworzył kod - czyli powtarzał to co już się nauczył, przy okazji wykorzystując to w praktyce.
}
2010-10-08 12:45:59 = Trevor
{
Nie ma nic złego w podglądaniu prac innych programistów, ale czego to może nauczyć skoro dany programista miał swoją wizję lub sposób rozwiązywania problemów. Dzisiaj niemal każdy może być kierowcą, ale do F1 wsiądzie ten, który trenował, trenował i jeszcze raz trenował żeby stać się mistrzem.
}
2010-10-14 11:26:04 = chesteroni
{
Komentarzy jest tu mnóstwo, ciężko przebrnąć przez wszystkie :/

Moim zdaniem dobrym pomysłem na rozpoczęcie przygody, jest mimo wszystko tradycyjna książka. Sęk w tym, że jak się jeszcze nie zaczęło, to trudno jest znaleźć wartościową pozycję, a kupno "Poznaj C w 24h" itp. jest najgorszym z możliwych wyborów (mało treści, strata kasy itp.).
Tu jest właśnie miejsce dla nas, programistów - powinniśmy być (i często jesteśmy) guru dla młodych adeptów.
Osobiście polecam lekturę Symfonii C++ bo dobrze wprowadza w możliwości języka i tworzy dobre nawyki.
Ale tu problemem jest brak wyglądu tworzonych programów. Mnie to nie przeszkadzało, ale jak ktoś lubi jak mu coś ładnie wygląda...

W każdym razie dobrze jest zacząć od lektury wspomaganej sporadyczną kompilacją, potem trochę pomacać przy drugiej iteracji. A potem to już się wie całkiem sporo i można samemu poszukiwać swojej ścieżki.

Uważam też, że jak ktoś nie ma zacięcia do poszukiwania tej własnej drogi, to i tak nie będzie dobrym/przeciętnym programistą. A jak zacięcie ma, to wystarczy to zainicjować. W końcu ciężko czasem samemu wpaść na właściwy początek. A dalej jest już z górki, choć podsunięcie dobrej literatury nt algorytmów też nie zaszkodzi - po co ktoś ma wymyślać od nowa quicksorta?
}
2010-10-14 12:43:50 = chesteroni
{
No, w końcu przebrnąłem i mam jeszcze dwie uwagi:

@Gynvael:
"
Ano, doświadczenie jest niezbędne oczywiście. Natomiast mi chodzi o przypadek, w którym osoba zielona, chce się zacząć uczyć programować, tj. chce stworzyć dany program, ale nie wie ani jak komputer działa, ani nie zna żadnego języka programowania, ani nigdy nie programowała. Moim zdaniem w takim wypadku nauczenie się języka to za mało, żeby stworzyć program ;>"
Zgadzam się z Tobą i nie zgadzam. To, co piszesz oznacza de facto, że dana osoba albo musi mieć predyspozycje do bycia masta-blasta-hackerem, albo co najmniej rozpocząć, jak nie ukończyć wyższe studia informatyczne.
I zgadzam się, że dobre studia zdolnej osobie mogą wiele dać (nie geniuszowi!), ale nie powinny one być warunkiem koniecznym. Oczywiście trzeba wiedzieć, co tkwi w komputerze, ale już znajomość działania procesora nie jest IMHO konieczna do nauki podstaw programowania (zwłaszcza wysokopoziomowego, np. PHP/Python). Ta wiedza przyjdzie sama z czasem.

I druga uwaga:
Moim zdaniem dobrze jest osiągnąć poziom "niezły" w danym jednym języku, a potem dopiero szukać innych rozwiązań. Dlatego warto na start wybrać coś powszechnego i perspektywicznego. Moje propozycje: C++, C#, PHP, Java
Inne języki są lepsze lub gorsze, ale na pewno są mniej powszechne i trudniej o mentorów i literaturę.
Co więcej - niezła znajomość jednego z tych języków może wystarczyć, aby z programowania żyć i rozwijać się dalej.

Ważne jest, aby po początkowym etapie nauki myślenia algorytmicznego i po opanowaniu podstaw zacząć też myśleć z punktu widzenia projektu jako całości, a nie kodu lokalnego.
}
2010-11-15 17:44:14 = azbercik
{
Powiem tak, książki są OK, ale jednak są najczęściej napisane trudnym językiem. Ciężko się przez nie przegryźć, kiedy się zaczyna. Polecam kurs programowania w C++: http://videokurs.pl/kurs-c.php

Video kursy pozwalają w łatwy i przyjemny sposób zacząć przygodę w programowaniu. Mi ten video kurs pomógł i to bardzo. Autor na początku nazwał kompilatorem całe IDE, ale wydaje mi się, że było to tylko przejęzyczenie. Reszta kursu jest po prostu świetna. Po tym kursie nie tylko zna się język, ale także potrafi się myśleć w programistyczny sposób. Polecam :)
}
2011-01-06 18:42:46 = raptor
{
Jestem początkującym programistą Pythona, uczę się z książki "Python. Od podstaw" oraz z kursu Jakuba Swachy (link: http://uoo.univ.szczecin.pl/~jakubs/). Poza tym w technikum do którego chodzę trochę C++, a w podstawówce i gimnazjum amatorsko Pascal. Zgadzam się z tym, żeby przepisywać kod i starać się go rozumieć (most important!). Tylko skąd te kody przepisywać? Na forach poświęconych poszczególnym językom programowania wielu jest ludzi, którzy piszą kod słaby oraz są tam też ludzie ogarniający dany język. Dla początkującego programisty może to być problem, aby rozróżnić, który kod jest ładniej/wydajniej/lepiej/etc napisany. Tak więc myślę, że jakieś dobre tutoriale/poradniki/kursy w formie czy to pisemnej, czy elektronicznej. Ważne jest, aby w treści tego poradnika było dużo praktycznych przykładów, a na koniec rozdziału obowiązkowo ćwiczenia. Ja dodatkowo mam założony zeszyt do nauki programowania, w którym przepisuję przykłady oraz notatki czytając książkę (myślę, że pisząc do zeszytu piszemy wolniej przez co mamy więcej czasu na przeanalizowanie oraz zrozumienie kodu). Rozdział o programowaniu w książce pt. "Sztuka penetracji" jest wyśmienicie napisany, mamy tam pseudokod z sytuacjami "życiowymi", opisanie działania komputera etc. Polecam.
}

Add a comment:

Nick:
URL (optional):
Math captcha: 5 ∗ 1 + 4 =