Projekt badawczy Polska-Namibia 2010

Puppeter: widzę, że jesteś całkiem kumaty koleś, to mi powiedz czy wynalazki takie jak ww całki, macierze itp miałeś w liceum? bo ja się przyznaję, że nie. i coraz bardziej zaczynam się niepokoić;/
Ney. Całek jako takich nie ma w programie trzyletnich liceów, a zasadniczo nikt przed maturą nie powinien nawet w słyszeć o tak abstrakcyjnych pojęciach jak macierze w postaciach innych niż 'wyznaczniki' układów równań czy filmy braci Wachowskich.
A szkoda, bo liznąłem po wierzchu i jednego i drugiego (macierzy przy programowaniu grafiki - transformacjach geometrycznych, a całkowania w stopniu minimalnym do olimpiady fizycznej) i oba narzędzia mają, że tak to ujmę, dużo powera. ;)
ale chyba coś tam jednak tłumaczą na tych studiach, nieprawdaż?
Jako rzekła koleżanka Justyna, wykładowcy prawdodopodbnie będą wprowadzali wzory w formie całkowej, ale to tylko dlatego, że na dłuższą metę jest to wygodniejsze i bliższe rzeczywistości, niż jakieś tam abstrakcyjne sumy nieskończone, czy magiczne wzory wzięte z kosmosu (lub karty wzorów), a przy tym zastosowanie praktyczne całek w fizyce jest w większości przypadków proste i intuicyne jak konstrukcja cepa. Prawdziwe czarowanie zaczyna się dopiero przy przejściu do rachunku całkowego jako matematycznej sztuki walki samej w sobie.
Mimo wszystko jednak myślę, że głębsze obeznanie z tematem pozwala po prostu łatwiej i dokładniej skupić się na właściwej treści wykładu, a człowiek nie skrobie się co i rusz po łepetynie zastanawiając dlaczego ten pan przy tablicy ciągle rysuje takie dziwne wężyki i szachownice.
Poza tym, jak powiedziałem, całkowanie i macierze mają po prostu pewien rodzaj subtelnego matematycznego uroku i z tej też prostej przyczyny coraz bardziej kusi mnie pomysł wzięcia udziału w bridgingu. :)
Piekny kod nie ma co...
1. Uzyj odpowiednich znacznikow!<nie wiesz ktorych to spojrz w moja kolorowa sygnaturke pisana duzymi literami :P >
2. Hmmm... uzyj petli czy czegos do rysowania szachownicy i pol a kod ci sie drastycznie zmniejszy.
3. Hmmm... zabrales sie do sprawy, ze tak powiem od d... strony --> strona wizualna to twoje nie dosc, ze najmniejsze zmartwienie to na dodatek najlatwiej jest a wykonac. Ba powinienes zaczac pisanie programu od tego co zaraz napisze, ale czesc graficzna powinienes zostawic na sam koniec, bo tylko niepotrzebnie ci ona zasmieca edytor.
Wiec pierwsza rzecz jaka powinienes zrobic to wymyslic w jaki sposob komputer ma sprwdzac czy ruch hetmana z pola A na pole B jest dozwolony<dla ulatwienia powiem, ze hetman z tego co mi sie kojarzy[moze zle moze dobrze nie wiem, ale mniejsza o to ;) ] moze sie poruszac ukosnie badz poziomo/pionowo i rzecz jasna nic nie moze mu stac na przeszkodzie>
Nastepnie powinienes pomyslec jak to wszystko zaprogramowac<na twoim miejscu uzylbym zapewne tablic dwuwymiarowych do reprezentacji szachownicy i polozenia na niej odpowiednich figur>
Dopiero na koncu gdy juz bedziesz wszystko mial powinienes sie brac za strone graficzna.
Aby ulatwic nieco sprawe powinienes wpierw zaczac od pobrania od uzytkownika wspolrzednych pola startowego i koncowego, nastepnie powinienes stworzyc tymczasowo nic nie robiaca funkcje ktora by zwracala wartosc bool odnosnie tego czy mozna wykonac ruch hetmanem z pktu A do pktu B<funkcja moze sie nazywac np function ruchAB(A: pkt; B: pkt) : bool -- to tylko naglowek i w dodatku nie mam pewnosci czy 100% prawidlowy, ale pkt to np jakis rekord przechowujacy wspolrzedne punktu na szachownicy>
Pozniej powinienes dodac instrukcje warunkowa, ktora by sprawdzala czy mozna wykonac ruch z A do B i jezeli tak to chwilowo niech nic nie robi lub niech wypisuje odpowiedni komunikat<aby bylo wiadomo, ze instrukcja warunkowa dziala> natomiast jezeli warunek nie jest spelniony to wtedy wypisujesz komunikat ze ruch nie jest dozwolony i tyle.
Nastepny krok to umieszczenie calosci w petli <chyba odpowiednia byla by petla repeat until;> i teraz powinienes przetestowac program czyli np sprobowac ustawic funkcje sprawdzjaca czy ruch jest mozliwy czy nie tak aby za pierwszym razem zwracala true a za drugim false -- jezeli po uruchomieniu programu otrzymasz prawidlowy komunikat<zalezny od tego co sie bedzie dzialo w instrukcji warunkowej> to mozesz odetchnac na pare minut<przyda sie bo teraz najgorsze[?] B) >
Teraz powinienes sie zabrac za implementacje funkcji sprawdzajacej czy ruch z pktu A do B jest dozwolony jak to robisz to testujesz program czy dziala jak nalezy.
Teraz dopiero powinines sie zabierac za cala otoczke graficzna i odpowiednim wywolaniem funkcji rysujacych w petli ktora uprzednio stworzyles, tak aby zamiast wypisania komunikatu, ze ruch jest dozwolony rysowalo szachownice i przesuwajace sie figury. Ta czesc programu bedzie wymagac nieco pokombinowania, ale i teoretycznie powinienes miec przy niej najwiecej satysfakcji<wiecej niz przy pisaniu wspomnianych wczesniej petli i funkcji i takich tam roznych.
Chyba tyle --> jezeli liczysz na cos wiecej, to hmmm... wiecej w obecnej chwili oznacza podanie kodu programu a tego nie zrobie, wiec zabieraj sie za pisanie programu i jak bedziesz mial problemy to pisz a moze ci ktos pomoze<jezeli umiescisz kod pomiedzy odpowiednimi znacznikami, jezeli podasz tylko niedzialajaca czesc fragmentu kodu + ewentualnie pare dodatkowych linijek poprzedzajacych ten fragment, jezeli opiszesz co nie dziala i jakie komunikaty bledow dostajesz -- wtedy masz o wiele wieksze szanse na uzyskanie konkretnej pomocy niz przy tym co do tej pory napisales>
Pozdrawiam.
Nazwy metod były bardzo wymowne, pamiętam też, że w którymś miejscu rzucany był wyjątek o wdzięcznej nazwie ,,SzefiePlytkiSieSkonczyly'' Jest to dla mnie przykład na ,,uczłowieczenie'' algorytmu, przetłumaczenie go na pojęcia, przy pomocy których autorowi łatwiej się myślało.
Powiedziałbym nawet, że to podstawa programowania zorientowanego obiektowo - ma ono umożliwić przełożenie elementów problemu w "przestrzeni problemu" na elementy w "przestrzeni rozwiązania", najlepiej w skali 1:1.
Za drugą część podstawy uznałbym tzw. podejście "stepwise refinement", tudzież "top down", z rozbijaniem problemu na coraz mniejsze komponenty idąc od góry (zamiast zaczynać od pola nr 1 i pisać kod pozwalający się dostać na pole nr 2 - swoją drogą ponoć przestawienie się z tego drugiego, naturalnego i gorszego sposobu, na ten pierwszy, zabiera statystycznie ok 100h spędzonych nad kodem).
Czyli np. klasę "WylozPlytkamiPodworko" rozbilbym na metody "WylozPlytkamiPoziomyRzadek", a te połączył metodami "ZmienRzadekGdyStoiszTwarzaWPrawo" i "ZmienRzadekGdyStoiszTwarzaWLewo".
Właśnie pisałem coś takiego ostatnio - myślałem, że zajmie mi 5 minut napisać program rysujący "szachownicę" (bez powtórzeń typu "podwójnie pokolorowane pole") na siatce dowolnej wielkości.
Źle myślałem - pierwsza wersja programu wykrzaczyła się na "błędzie o jeden za mało" (OBOB, albo fencepost error), druga zaraz potem na siatce typu 1x8
Poza tym programy pisze się tak naprawdę dla ludzi, którzy potem będą nanosić poprawki na Twój kod (jeżeli chcesz jako programista zarabiać).
Z tego powodu każda funkcja/metoda ma wykonywać dokładnie jedno zadanie, i mieć maksymalnie czytelną nazwę (to samo odnosi się do nazw zmiennych, no chyba, że mówimy o liczniku obiegów pętli).
Do tego pisze się komentarze przy funkcjach, wpisując przy każdej 1) co robi 2) stan domyślny przed użyciem funkcji 3) stan wynikowy po zakończeniu działania funkcji
Od kolegi programisty pracującego w branży wiem, że czasowo 90% pracy z kodem to poprawianie czyichś programów; 10% to pisanie własnego kodu.
A pisanie czytelnego kodu naprawdę poprawia wydajność tych 90% czasu :)
Źródła: wykłady z metodologii i paradygmatów programowania z MIT i Uniwersytetu Stanforda oraz kumpel piszący kod dla Google.
Autor omawianego przez Ciebie programu idzie więc zdaniem moich źródeł (i moim, skromnym) w BARDZO dobrym kierunku
u mnie łatwość z tego wynika z mojej "empatii" wobec maszyn - jestem w stanie wczuć się w sposób myślenia maszyny i rozwiązać zadanie tak jakby ona miała to robić.
One nie myślą.
Ale wiem, żeś etykiem, więc w ten sposób łatwiej Ci podejść do problemu, więc nie będę ględził.
Baw się dobrze nad tym problemem, bo jest całkiem fajny (nie uważam tego za jakiś punkt honoru, czy Ci się uda, czy nie - prawdopodobnie jesteś zajętym człowiekiem i nie znajdziesz czasu [ja bym raczej nie znalazł]; jeśli jednak znajdziesz, jestem ciekaw Twojego podejścia do niego).
A na temat: statystycznie rzecz biorąc etyków mniej ciągnie do robienia kariery naukowej i mniej czasu poświęca na rozwój swoich szarych komórek.
11. Nieobojętny co do swojej inteligencji, często dąży do obrony doktoratu, do otrzymania stopnia naukowego â to daje mu możliwość spokojnie pracować i nie marnować czasu na udowodnienia tego, że nie jest âŸwielbłądemâÂÂ.
Analogicznie, życie wymaga od człowieka by opanował pewne podstawy życia społecznego i nie powinien on z racji słabych funkcji oczekiwać taryfy ulgowej w momencie gdy jego empatia zawiedzie i zachowa się jak cham.
Po ponad dwudziestu latach prób i błędów wnioskuję, że najlepszym podejściem dla mnie, aby uniknąć powyżej opisywanych zachowań, jest zredukować ilość kontaktów międzyludzkich.
Działa jak ta lala: im mniej, tym łatwiej ogarnąć.