-
Data: 2012-10-14 01:19:06
Temat: Re: sortowanie
Od: Edek Pienkowski <e...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Dnia Sat, 13 Oct 2012 21:25:41 +0200, Michoo napisal:
> On 13.10.2012 14:46, Edek Pienkowski wrote:
>> Dnia Sat, 13 Oct 2012 13:52:31 +0200, Michoo napisal:
>>
>>> Co Ty byś proponował do nauki algorytmów?
>>
>> Coś co ma "contraints" do spełnienia [1], najlepiej nietrywialne [2]; może
>> być wykres Gannta z zadań, ale niektóre uczelnie preferują np. peephole.
> Na _początek_? Może wybiję cię ze złudzeń, które też miałem idąc na
> studia - na informatykę nie idzie banda geeków i nerdów, którzy
> hackowali amigi, atmegi, czy inne zabawki. Większość ludzi swój pierwszy
> program napisze na zajęciach. Ich trzeba nauczyć "co to jest algorytm".
Heh, pewnym podejściem selekcji studentów pomimo akceptowania matury
byłyby na wstępie ćwiczenia "napisz peephole, mając struktury danych,
język funkcyjny, który przez ostani tydzień wyłożyliśmy i parę przykładów.
Najlpiej, jakby działał w ogólnym przypadku, ocena 5 tego wymaga". Ale
wtedy skończyłoby się narzekanie na poziom studentów, a na coś trzeba
zwalić. <niepolityczne uwagi over/>
Wbrew pozorom, niektórzy uczyli powyższego jakieś lata temu, z tym
że bandy ludzi, którzy sobie postawili znak przy przejściu dla pieszych
o nazwie "Nerd X-ing". Użyj googla, fajny znak, mieli zacięcie do detali.
Przedmiot był jak najbardziej wstępny i nie wymagał niczego poza "general
aptitude and pre-calculus high school maths" [1]. Jak widać albo rybki
albo akwarium, albo się zakłada częściowe znerdzenie (pol: kujonizm)
albo się nie robi nawet oprogramowania do pralek nie mówiąc o kalkulatorach
(smartfony pominę). <ok, niepolityczne uwagi naprawdę over/>
Inaczej mówiąc, uważam pisanie optymalizacji używając modelu
sekwencyjnego procesora w języku funkcyjnym za coś, co można robić
_przed_ algorytmiką, żeby wszyscy wiedzieli, co to jest procesor i umieli
napisać, zrozumieć i poprawić kilka prostych struktur danych. No i
cudów nie ma, nie wszystkim to się uda - z tym że na części uczelni
na świecie nie ma polityki "mamy straszny poziom i robimi 10
egzaminów poprawkowych", tylko "ok, w miarę ci poszło", bo nikt
cudów nie oczekuje. Ważna jest idea, którą jednak warto załapać,
jeżeli chce się specjalizować w tym akurat kierunku. Przypuszczam,
że rozwija myślenie w innym kierunku niż przysłowiowe całki.
>> Nie zaczynałbym edukacji od "zobacz, na ile możliwości można zrobić coś
>> tak banalnego jak sortowanie, jakie piękne metody".
>>
> Raczej - coś tak banalnego jak sortowanie można zrobić tak, tak i tak.
> Naucz się pokazywać różnice między tymi podejściami zanim przejdziemy dalej.
No i robi się i tak i tak. Różnica pomiędzy podejściami polega na tym,
że u studentów przede wszystkim należy rozwinąć myślenie. Nie polega to na
wpychaniu wiedzy, bo wiedzę (pamięć faktualną) kążdy ma jaką ma,
pamięta z czym się zetknął (czytając, słuchając robiąc). Pamięć
proceduralną rozwija się inaczej (to ta pamięć odpowiedzialna za między
innymi jazdę na rowerze, z dodatkiem ruchowej - sam wiedza jak się to robi
to za mało), rozwija się ją zderzając z problemami. Trzeba je rozwiązać,
albo polec próbując, bo inaczej nie da się nauczyć "jazdy na rowerze" i
nie da się nauczyć programowania bez rozwalania samemu prostych w sumie
problemów od samego początku.
Biorąc pod uwagę powyższe, implementowanie peephole samemu bez
wystarczających instrukcji danych zanim ktoś zrozumie w ogóle problem
rozwija lepiej niż wykłady,
na których wymienia się sorty i obwieszcza, co to jest złożoność.
Oczywiście, można to samo zrobić z sortem: masz tu tablicę intów (właśnie
ci powiedzieliśmy, co to jest tablica, prawda?) i je posortuj,
czyli ułóż od najmniejszych do największych. I tylko pomagać, jak się ktoś
spyta. Ktoś tak robi? Dawno nie byłem na uczelni.
Potem można wyłoązyć teorię dopiero, bo jak ktoś faktcznie tak jak mówisz
nie wie co to RAM a co to procesor, nie sądzę, żeby w ogóle był w stanie
zrozumieć coś tak prostego jak problemy z sortowaniem. My mamy to już
dawno za sobą, ale ja też kiedyś nie wiedziałem, co to jest program
komputerowy. Z mojego doświadczenia lepiej się przyswaja wiedzę, gdy ma
się za sobą trochę prób, nawet skończonych niepowodzeniem,
bo wtedy się lepiej rozumie temat. Ba, nawet lepiej próbować rzeczy dużo
za trudnych dużo za wcześnie, bo potem wszystko jest prostsze,
fragmenty prawie wpadają w miejsca na brakujące elementy układanki.
Jedynie trzeba zmienić właśnie podejście, zaakceptować niepowodzenia,
przestać udawać że ktoś kto nie wie co to jest program zrozumie
quick-sorta (poza odnotowaniem, że chyba się wie jak to działa)
i ze to jest uczenie algorytmiki.
Z tymi constraints to jest tak, że to tylko pewna struktura poznawcza,
każdy programista ją ma ("jeżeli w kodzie obok a to zawsze b plus
dodatnie x, to y/(a-b) nie będzie dzieleniem przez zero"), ale trzeba ją
wykształcić. Dodatkowo, pomaga pewien wgląd w proces. Dlatego istnieją
takie przedmioty na niektórych uczelniach jak "Jak się uczyć?" czy
bardziej wyspecjalizowane "Street Fighting Maths" (uczy szybkiego
szacowania i paru innych). Ludzie mogą z nich polewać, ale te przedmioty
mają swoje skutki i przyczyny. Tak samo programy uczelni nie powinny uczyć
tylko tego, co się przyda, ale też wykształcić odpowiednio właśnie taką
pamięć w naszych durnych mózgach jak pamięć proceduralna.
Nie mówiąc już o budowaniu abstrakcji, bo ludzki mózg na raz jest w stanie
trzymać w ręku około 5-8 pojęć, choć da się rozwinąć pojemność o kilka
ćwiczeniami na jakiś czas przynajmniej. Ale nie 10 tys. linii kodu na
raz.
Tych właściwości "hardware" nikt nie przeskoczy, trzeba mieć do tego
narzędzia, część narzędzi to nie jest wiedza to umiejętność posługiwania
się niektórymi pojęciami, którą da się nauczyć tylko robiąc - stąd takie
pojęcie, praktykowane, jak "Learning by doing", w dowolnej postaci, może
być lab, mogą być staże.
Powyższe to w zasadzie tło. Ja po prostu nie widzę większego sensu w
zaczynaniu od algorytmów typu sortowanie, jeżeli ktoś praktycznie nie
próbował poradzić sobie ze strukturami danych,
nie rozumie ani reguł ani ograniczeń ani nie posiada odpowiednich
struktur, które mają naturę qualia [3]. To, czy samą algorytmikę zacznie
się od sorta czy od analizy polegającej na wyłożeniu co to jest złożoność
(to drugie przeczy naturalnym własnościom mózgu niestety), najpierw trzeba
mieć inne narzędzia, i w tym procesie nie ma znaczenia, w ramach jakiego
przedmiotu te umiejętności się dostarczy - ok, nie musi to być w
przedmiocie o nazwie algorytmika, ale musi być w wymaganych przed. A
jeżeli sort ma być wykładany jako coś, co ludzie później uzupełnią wiedzą
praktyczną, to sorka,
ale to się nadaje do programowania pralek (dokładnie tak jak w tym
dowcipie o programistkach, zaprogramuj sobie pralkę [2]).
[1] Można znaleźć wszystko używając wyszukiwarki, ze zwróceniem
uwagi na lata wykładanego przedmiotu. Aktualny program jest na Mitx,
zdaje się "wstęp do programowania" lub jakoś podobnie.
[2] Też może być fajne. Gość w ramach demo wyjął kawałek pralki,
dodał trochę prostej elektroniki i to generowało obrazki i dźwięk.
Co kto lubi, ale nie robił tego w ramach profesji. Nerd p..y ;)
[3] Zdaje się są inne dla każdego człowieka, nie da się o nich
tak wprost rozmawiać. Chyba że mi walniesz strumień świadomości
czegoś prostego, jak myślisz o jakimś prostym problemie,
zczynając od "na co po kolei na ekranie nastawiasz gałkę oczną".
PS. Chyba żem się rozpisał...
--
Edek
Następne wpisy z tego wątku
- 14.10.12 01:16 PK
- 14.10.12 01:21 bartekltg
- 14.10.12 01:22 PK
- 14.10.12 01:25 M.M.
- 14.10.12 01:33 bartekltg
- 14.10.12 01:38 bartekltg
- 14.10.12 02:01 Edek Pienkowski
- 14.10.12 02:06 Michoo
- 14.10.12 02:19 Edek Pienkowski
- 14.10.12 02:18 M.M.
- 14.10.12 02:21 Michoo
- 14.10.12 02:29 Edek Pienkowski
- 14.10.12 02:29 bartekltg
- 14.10.12 02:43 Edek Pienkowski
- 14.10.12 02:43 bartekltg
Najnowsze wątki z tej grupy
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
Najnowsze wątki
- 2025-01-04 Warszawa => Spedytor Międzynarodowy <=
- 2025-01-04 Warszawa => System Architect (Java background) <=
- 2025-01-04 Wrocław => Application Security Engineer <=
- 2025-01-04 Chrzanów => Specjalista ds. public relations <=
- 2025-01-04 Katowice => Key Account Manager (ERP) <=
- 2025-01-03 Problem z odczytem karty CF
- 2025-01-03 Jazda z Warszawy do Krakowa teslą
- 2025-01-03 Wrocław => Konsultant Wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-01-03 Warszawa => International Freight Forwarder <=
- 2025-01-03 Mińsk Mazowiecki => Area Sales Manager OZE <=
- 2025-01-03 Warszawa => Spedytor Międzynarodowy <=
- 2025-01-03 Beztłumikowcy
- 2025-01-03 Lublin => Delphi Programmer <=
- 2025-01-03 Lublin => Programista Delphi <=
- 2025-01-03 [OT] nowe osoby w grupach?