Dydaktyka‎ > ‎

Seminarum: Rodzina języków LISP (zima 2010)

Kilka z cytatów ze strony http://lispers.org:

    1. Lisp is worth learning for the profound enlightenment experience you will have when you finally get it; that experience will make you a better programmer for the rest of your days, even if you never actually use Lisp itself a lot. Eric Raymond, “How to Become a Hacker”
    2. Lisp has jokingly been called “the most intelligent way to misuse a computer”. I think that description is a great compliment because it transmits the full flavor of liberation: it has assisted a number of our most gifted fellow humans in thinking previously impossible thoughts. Edsger Dijkstra, CACM, 15:10
    3. Lisp … made me aware that software could be close to executable mathematics. L. Peter Deutsch
    4. Lisp is a programmable programming language. John Foderaro, CACM, September 1991
    5. Lisp is a language for doing what you've been told is impossible. Kent Pitman
    6. Greenspun's Tenth Rule of Programming: any sufficiently complicated C or Fortran program contains an ad hoc informally-specified bug-ridden slow implementation of half of Common Lisp.
Na seminarium zajmiemy się poznawaniem języków z rodziny Lisp. Żadna wcześniejsza styczność z tym językiem nie jest wymagana.

Wymagania

  • Programowanie

Program

Będziemy się zajmować co najmniej trzema odmianami LISPa:
Skupimy się na omówieniu:
  • języka Common Lisp,
  • technik wykorzystania makr do metaprogramowania,
  • modelu obiektowego,
  • różnicach między dialektami.

Zasady

Poczta elektroniczna

  • Wysyłając e-mail należy w polu temat jako prefiks podać następującą frazę: [LISP10]

Zaliczanie

  • Trzeba pojawić się na co najmniej połowie zajęć. Obecność będzie sprawdzana w trakcie trwania zajęć. Brak wymaganej ilości obecności będzie podstawą do niezaliczenia seminarium.
  • Zakłada się, że student w ramach zaliczania przedmiotu poświęci w ciągu semestru 30h na pracę w domu.
  • Zaliczenie przedmiotu polega na:
    • wygłoszeniu dwóch 45 minutowych seminariów lub jednego 90 minutowego,
    • oddaniu indywidualnie dobranego małego projektu programistycznego w dowolnym dialekcie Lisp-u.
  • Oceny wyliczane będą na podstawie poniższej tabeli:
Ilość punktów
Ocena
100% - 90%
5.0
89% - 80%
4.5
79% - 70%
4.0
69% - 60%
3.5
 59% - 50%
3.0
 49% - 0%
2.0

Prezentacje

  • clos.tar.gz   85k - 1 Feb 2011, 11:27 by Krystian Bacławski (v1)
    ‎Common Lisp Object System (autor: Karol Błażejowski)‎
  • Filozofia_Clojure.pdf   542k - 17 Jan 2011, 13:55 by Krystian Bacławski (v1)
    ‎Filozofia Clojure (autor: Mateusz Dereniowski)‎
  • elisp.zip   209k - 16 Jan 2011, 02:56 by Krystian Bacławski (v1)
    ‎Emacs Lisp - zaprogramuj swój edytor (autor: Marcin Milewski)‎
  • Scheme.zip   133k - 13 Jan 2011, 05:00 by Krystian Bacławski (v1)
    ‎Scheme vs. Common Lisp (autor: Bartłomiej Kobyłecki)‎
  • ProgramowanieZUżyciemMakr.zip   103k - 13 Jan 2011, 04:56 by Krystian Bacławski (v1)
    ‎Programowanie z użyciem makr (Autor: Łukasz Zapart)‎
  • TechnikiPisaniaMakr.pdf   604k - 13 Jan 2011, 04:48 by Krystian Bacławski (v1)
    ‎Metaprogramowanie - Techniki pisania makr (autor: Aleksander Balicki)‎
  • kontynuacje.zip   137k - 13 Jan 2011, 04:47 by Krystian Bacławski (v1)
    ‎Kontynuacje (autor: Wojciech Jedynak) ‎
  • CommonLISP-BibliotekaStandardowa.pdf   615k - 10 Nov 2010, 11:25 by Krystian Bacławski (v1)
    ‎Biblioteka standardowa (autor: Jakub Kowalski)‎
  • typy-i-struktury-danych.pdf   805k - 3 Nov 2010, 15:11 by Krystian Bacławski (v1)
    ‎Typy i struktury danych (autor: Aleksandra Woźniak)‎
  • Funkcje_i_zmienne.pdf   290k - 3 Nov 2010, 15:10 by Krystian Bacławski (v1)
    ‎Funkcje i zmienne (autor: Wojciech Jedynak)‎
  • CommonLISP-InstrukcjeSterujace.pdf   510k - 3 Nov 2010, 12:26 by Krystian Bacławski (v2)
    ‎Instrukcje sterujące (autor: Jakub Kowalski)‎
  • lisp-io.pdf   501k - 3 Nov 2010, 12:27 by Krystian Bacławski (v3)
    ‎Obsługa wejścia-wyjścia (autor: Marcin Milewski)‎
Showing 12 files from page Seminarum: Rodzina języków LISP (zima 2010).

Poniżej znajdziecie kilka rad odnośnie przygotowania prezentacji na seminarium. Dobrym pomysłem jest poszukanie na internecie informacji o tym jak nie należy robić prezentacji ;-)

Należy:
  • Odpowiedź sobie na pytanie: "Co chce przekazać uczestnikom seminarium?".
  • Nadać prezentacji odpowiednią strukturę.
  • Wymagać od uczestników interakcji.
  • Przeprowadzić próbę generalną!
  • Przygotować slajdy tak by osoba nie będąca na seminarium też miała szansę zrozumieć ich zawartość.
Błędy:
  • Nieczytelne slajdy:
    • za dużo wierszy na stronie,
    • jasnozielony lub żółty kolor,
    • małe czcionki,
  • Mówienie cicho i/lub do ściany.
  • Czytanie ze slajdów.
  • Brak treningu.
  • Nieprzestrzeganie ram czasowych.
  • Slajdy z samym kodem bez żadnego opisu.
Błędy dotyczące prezentacji kawałków kodu:
  • Za mała czcionka terminala z interpreterem.
  • Wycinki kodu kopiowane ze slajdów lub z pliku (zamiast tego należy wgrywać z dysku - polecenia: load, compile-file).
  • Złe sformatowanie kodu na slajdach (wcięcia / nawiasy) utrudniające czytanie.
  • Brak opisu i zrozumienia funkcji wykorzystywanych przez kod na slajdach.
Być może dobrym pomysłem byłoby:
  • umieszczanie większych przykładów i ich wytłumaczenie,
  • ożywienie widowni poprzez zadanie prostego przykładu do zaprogramowania (maksimum kilka linii),
  • zrobienie kilku ćwiczeń z książek celem przekonania się na własnej skórze co może być skomplikowane / nietypowe / w inny sposób ciekawe (i podzielenie się tym z widownią),
  • pobieżne zaprezentowanie możliwości biblioteki standardowej przy omawianiu danego tematu.

Projekt

Zadaniem projektu programistycznego jest zachęcenie uczestników seminarium do praktycznego poeksperymentowania z jedynym z dialektów języka Lisp. W tym celu należy wykonać większy program lub kilka wybranych zadań z książki "Common Lisp: An Interactive Approach"

Projekt powinien spełniać kilka wymogów:
  • ma być napisany w jednym z trzech dialektów: CL, Scheme, Clojure,
  • mieć nie mniej niż 300 linii (nie lubię miary ilościowej, ale nie mam lepszego pomysłu),
  • powinien używać funkcji z biblioteki standardowej, zamiast wymyślać koło od nowa (a co tam można znaleźć było na jednej z prezentacji),
  • należy skonstruować kilka makr (w miarę możliwości, ale nie na siłę).
Mile widzianie:
  • Program podzielony na moduły.
  • Użycie CLOS lub innego systemu obiektowego.

Tematy i materiały

Uwaga! Spis tematów i materiały, które powinno się wykorzystać do przygotowywania prezentacji są na mojej wiki.

Ogłoszenia

  • Zajęcia w środę 13 października nie odbędą się z powodu braku prelegenta!
  • W związku z niską frekwencją na seminarium 27 października postanowiłem dodać wymóg obecności do regulaminu. Uważam, że byłoby nieuczciwe, gdyby student mógł przyjść tylko raz, wygłosić dwugodzinną prezentację i tym samym zaliczyć przedmiot. Obecność zaczniemy liczyć od zajęć odbywających się 3 listopada i będę wymagał co najmniej siedmiu. Łudziłem się, że obędzie się bez tego. Mam nadzieję, że wszyscy się ze mną zgadzacie, że wprowadzenie tej reguły zapobiegnie niezdrowym próbom zaliczenia przedmiotu.

Terminarz zajęć

DataPrelegentCzas trwaniaTemat
26 January 2011 Paweł Murias 1h Programowanie zorientowane kontekstowo 
19 January 2011 Karol Błażejowski 2h Common Lisp Object System 
12 January 2011 Paweł Murias 1h Programowanie reakcyjne w Lispie 
12 January 2011 Marcin Milewski 1h Emacs Lisp 
5 January 2011 Wojciech Jedynak 1h Kontynuacje 
5 January 2011 Mateusz Dereniowski (nieobecny) 1h Programowanie modułowe i obiektowe w Clojure 
22 December 2010 Bartłomiej Kobyłecki 2h Scheme vs. Common Lisp 
15 December 2010 Mateusz Dereniowski 1h Filozofia Clojure 
8 December 2010 Brak 2h Nieobecność prelegenta z powodu choroby. 
1 December 2010 Aleksander Balicki 2h [MP] Techniki pisania makr 
24 November 2010 Łukasz Zapart 2h [MP] Programowanie z użyciem makr 
17 November 2010 Dariusz Jackowski 2h Nyquist jako system syntezy dźwięku 
10 November 2010 Jakub Kowalski 1h [CL] Biblioteka standardowa 
3 November 2010 Marcin Milewski 1h [CL] Obsługa wejścia-wyjścia 
27 October 2010 Wojciech Jedynak 1h [CL] Funkcje i zmienne 
27 October 2010 Jakub Kowalski 1h [CL] Instrukcje sterujące 
20 October 2010 Aleksandra Woźniak 2h [CL] Typy danych 
13 October 2010 Brak  Zajęcia nie odbędą się z powodu braku prelegenta!