구구단, 소수, 피보나치 수열 구하기 ë“±ì˜ ê°„ë‹¨í•˜ê³ ì‰¬ìš´ ë¬¸ì œë“¤ ---- ìžì£¼ 사용ë˜ëŠ” ToyProblems: * Hello World * 구구단 * 소수 * 피보나치 수열 * í…스트 ë„형 ìž‘ë„ * 숫ìžì•¼êµ¬ * ---- ë‹¹ì‹ ì€ ì´ì œê¹Œì§€ ì´ëŸ° ë¬¸ì œë“¤ì„ í›„ë°°ë“¤ì—게 가르치면서 ê·¸ë“¤ì„ ì •ì‹ ì˜ ê°ì˜¥ ì†ì— 가둬넣지 않았습니까? ì´ì œê¹Œì§€ 구구단 ë¬¸ì œë¥¼ ì •ë§ ìƒì†Œí•œ 방법으로 해결한 후배를 본 ì ì´ ìžˆìŠµë‹ˆê¹Œ? ëª¨ë‘ for 루프를 ì“°ì§€ 않ë˜ê°€ìš”? 네. ë‹¹ì‹ ì€ ì´ì œê¹Œì§€ í›„ë°°ë“¤ì„ ìžì‹ ì˜ í˜‘ì†Œí•œ 패러다임으로 세뇌시켜왔습니다. (사실, ì‹œê°„ì„ ì¨ê°€ë©° 후배들ì—게 ìžì‹ ì˜ ì§€ì‹ì„ ë² í‘¸ëŠ” ì„ ë°°ë“¤ì€ ì •ë§ í›Œë¥í•˜ê³ 그런 ì‚¬ëžŒë“¤ì„ í„í•˜í• ìƒê°ì€ ì „í˜€ 없습니다. ì¼ë¶€ëŸ¬ 좀 ê³¼ìž¥ì„ í•´ì„œ ì¼ìŠµë‹ˆë‹¤.) --JuNe ---- ToyProblemsì—는 단ì ì´ ìžˆë‹¤. 너무 간단하다. 배우는 ì‚¬ëžŒì€ ì§€ë£¨í•˜ê³ ì‹œì‹œí•˜ê²Œ ëŠë‚„ 수 ìžˆê³ , ë¬¸ì œë¥¼ 풀어ë´ì•¼ 별 ê°í¥ì´ 없으며, 새로운 걸 ë°°ìš´ ëŠë‚Œì´ 들지 않는다. 그러나 그들ì—게 ì•„ì§ ë³µìž¡í•œ ë¬¸ì œëŠ” 시기ìƒì¡°ì´ë‹¤. ì´ ë”œë ˆë§ˆë¥¼ 어떻게 깨트릴까. ToyProblems를 풀게 í•˜ë˜ ë‹¤ìŒ ë°©ë²•ì„ ì´ìš©í•œë‹¤. Seminar:TheParadigmsOfProgrammingì„ í•™ìŠµí•˜ê²Œ 하는 것ì´ë‹¤. 1. ì¼ë‹¨ ìžì‹ ì´ ì•„ëŠ” ë°©ë²•ì„ ì´ë™ì›í•´ì„œ ë¬¸ì œë¥¼ 풀게 한다. 1. ì„ ë°°ê°€ ì´ ê°„ë‹¨í•œ ë¬¸ì œë¥¼ 다양한 패러다임으로 다르게 í’€ 수 있다는 ê²ƒì„ ë³´ì—¬ì£¼ê³ ê°„ëžµížˆ 설명한다. ì´ë•Œ, ëŒ€ë¶€ë¶„ì˜ ê²½ìš° 긴 ì„¤ëª…ì´ í•„ìš”ì—†ë‹¤. ì´ë¯¸ ë¬¸ì œë¥¼ 풀어봤기 때문ì´ê¸°ë„ í•˜ê³ , ë¬¸ì œ ìžì²´ê°€ 간단하기 때문ì´ê¸°ë„ 하다. 1. ì´ë²ˆì—는 해당 íŒ¨ëŸ¬ë‹¤ìž„ì„ ì´ìš©í•´ì„œ 앞서 1번ì—서 í’€ì—ˆë˜ ë¬¸ì œì™€ ìœ ì‚¬í•˜ì§€ë§Œ 다른 ë¬¸ì œë¥¼ 풀게 한다. ì´ëŸ° ì‹ìœ¼ë¡œ íŒ¨ëŸ¬ë‹¤ìž„ì„ ì—¬ëŸ¬ê°€ì§€ 소개한다. 예를 들어 구구단 ê°™ì€ ë¬¸ì œëŠ” 최소 10가지 ì´ìƒì˜ 패러다임으로 í’€ 수가 있다. í•™ìƒì€ ì´ ê²½í—˜ì„ í†µí•´ í”„ë¡œê·¸ëž˜ë° "ê°œë…"ê³¼ "패러다임"ë“¤ì„ í•™ìŠµí•˜ê²Œ ë˜ë©°, ì–´ë–¤ ê²½ìš°ì— ì–´ë–¤ íŒ¨ëŸ¬ë‹¤ìž„ì´ ë” ì ì ˆí•œì§€ íŒë‹¨í• ëŠ¥ë ¥ì´ ìƒê¸°ê³ , ë¬´ì—‡ë³´ë‹¤ë„ í•œê°€ì§€ íŒ¨ëŸ¬ë‹¤ìž„ì— ëŒ€í•œ 초기 ê°ì¸(새ë¼ìƒˆê°€ ì²˜ìŒ ë³¸ í°ìƒ‰ì„ 무조건 어미ë¼ê³ ìƒê°í•˜ëŠ” 효과)ì„ ê¹¨íŠ¸ë¦¬ê³ , 좀 ë” ìžìœ 로워질 수 있다 -- 한가지 패러다임만 아는 사람보다는 여러가지 íŒ¨ëŸ¬ë‹¤ìž„ì„ ì•„ëŠ” ì‚¬ëžŒì´ ë” ê°œë°©ì ì´ê³ í¬ìš©ë ¥ì´ 넓다. --JuNe ---- ê³ í•™ë…„(ì €í•™ë…„ì„ ê°€ë¥´ì¹ ì‚¬ëžŒë“¤) 대ìƒìœ¼ë¡œ ê°•ì˜ë¥¼ 해줄 ìš©ì˜ê°€ 있습니다. 만만한 ë¬¸ì œê°€ ê²°ì½” 만만한 게 아니ë¼ëŠ” 것, 간단한 것ì—서 ì •ë§ ì—„ì²ë‚˜ê²Œ ë§Žì€ ê±¸ 배울 수 있다는 것 ë“±ì„ ëŠë¼ê²Œ ë 것입니다. --JuNe ''요세 ì €ë„ ìœ„ì™€ ê°™ì€ ê²ƒ ë•Œë¬¸ì— ê³ ë¯¼ í–ˆëŠ”ë° í•´ê²°í•˜ê¸°ê°€ 쉽지 않았습니다. 후배들ì—게 좀 ë” ë§Žì€ ê±¸ 배울 수 있는 ë¬¸ì œì— ê´€í•˜ì—¬ì„œ... ê·¸ëŸ°ë° ì–´ë ¤ìš´ ë¬¸ì œëŠ” ì¢Œì ˆí• ê±° ê°™ê³ ê·¸ë ‡ë‹¤ê³ ì‰¬ìš´ ë¬¸ì œëŠ” 배우는 게 얼마 없는 ê±° ê°™ê³ ... 여러 가지 íŒ¨ëŸ¬ë‹¤ìž„ì„ í†µí•´ì„œ ê³ ë¯¼ì„ í•´ê²°í• ìˆ˜ 있다면 ì´ë²ˆ ê¸°íšŒì— í•œ 번 ì‹œë„ í•´ë³´ê³ ì‹¶ìŠµë‹ˆë‹¤. --재ë™'' == ToyProblems Lab == *ë‚ ì§œ: 6ì›” 1ì¼ ì˜¤ì „ 10시 *장소: 중앙대 공대 7층 컴퓨터 공학과 PC실 (여러 ëŒ€ì˜ ì»´í“¨í„°ì™€ í™”ì´íЏ 보드가 ì´ê³³ë°–ì—는...) *준비물: 기본ì 으로 ì´í´ë¦½ìŠ¤ì™€ Python 2.3b1( + idlefork), NetMeeting 설치 *강사: [김창준] *ì¡°êµ: [ê°•ê·œì˜] *ì°¸ê°€ìž ìžê²©: 후배를 가르ì³ë´¤ê³ , ì•žìœ¼ë¡œë„ ê°€ë¥´ì¹ ì‚¬ëžŒ. *ì‹ ì²ìž: 1. [류ìƒë¯¼] : 요즘 조금 ë°”ì˜ì§€ë§Œ, ì‹œê°„ì´ ë§žëŠ”ë‹¤ë©´, 당연히! 안맞으면 맞추어서~ 당연히! 2. [ì¸ìˆ˜] 3. [ìž„ì¸íƒ] 4. [ì‹ ìž¬ë™] 5. 채í¬ìƒ 6. [1002] 7. [ìƒìš±] : 늦게 ì˜¬ë ¤ì„œ 죄송해요... 참가 ê·¸ëž˜ë„ ê°€ëŠ¥í•˜ê² ì£ ?? ã…¡.ã…œ ì¼ì´ ìƒê²¨ì„œ 못가게 ë˜ì—ˆìŠµë‹ˆë‹¤. ã…œ.ã…¡ --[ì°½ì„] 잘하면 ê°ˆ 수 ìžˆì„ ì§€ë„ ëª¨ë¥´ê² ìŠµë‹ˆë‹¤. -_-; 지금 시간 조율중ì´ë¼..;; ê¼ ê°€ê³ ì‹¶ì–´ì„œ.^^;; 죄송합니다. ì´ëž¬ë‹¤ ì €ëž¬ë‹¤ 해서..; ë˜ë„ë¡ ê°€ë„ë¡ í•˜ë ¤êµ¬ìš”.. ìž¬ë°Œì„ ê±° ê°™ì€ë°..^^;; ---- ToyProblems를 풀면서 ì ‘í•˜ê²Œ ë 패러다임들(아마ë„): CSP, Generators, Coroutines, Various Forms of Recursion, Functional Programming, OOP, Constraint Programming, State Machine, Event Driven Programming, Metaclass Programming, Code Generation, Data Driven Programming, AOP, Generic Programming, Higher Order Programming, Lazy Evaluation, Declarative Programming, ... ---- '''Programme''' * ì „ì²´ ì§„í–‰ 2시간 30ë¶„ * ToyProblems 후보 : 구구단, 소수구하기, SpiralArray, 삼ê°í˜• 그리기, (기타 참가ìžê°€ ì›í•˜ëŠ” 것 추가 가능. 단 ì¡°ê±´ì€ 1í•™ë…„ì´ í•œ 시간 ë‚´ì— í’€ 수 있는 간단한 ë¬¸ì œ) * PairProgramming * ìžì‹ ì´ ì›í•˜ëŠ” 언어 (python recommended) ---- 1. 여기ì—서 ë‘ ê°€ì§€ ì •ë„를 ê³ ë¥¸ ë‹¤ìŒ 1. ê·¸ 중 í•˜ë‚˜ì— ëŒ€í•´ 스스로 ë¬¸ì œë¥¼ 풀게한다 10m. 1. 비êµí•´ 본다. 몇 가지 íŒ¨ëŸ¬ë‹¤ìž„ì´ ë‚˜ì™”ë‚˜(ì•„ë§ˆë„ í•˜ë‚˜ë‚˜ ë‘˜ì„ ë„˜ì§€ ì•Šì„ ê²ƒì´ë‹¤) 10m 1. ì „í˜€ 새로운 패러다임으로 ë™ì¼ ë¬¸ì œë¥¼ 푸는 ê³¼ì •ì„ ë³´ì—¬ì¤€ë‹¤ 10m 1. 비슷하지만 약간 다른 ë¬¸ì œë¥¼ 풀게한다 10m 1. 비êµí•´ 본다. 5m 1. ë˜ ë‹¤ë¥¸ 패러다임으로 ë™ì¼ ë¬¸ì œë¥¼ 푸는 ê³¼ì •ì„ ë³´ì—¬ì¤€ë‹¤ 10m 1. 비슷하지만 약간 다른 ë¬¸ì œë¥¼ 풀게한다 10m 1. 1번ì—서 ê³ ë¥¸ 나머지 ë¬¸ì œë¥¼ 가능하면 다양한 방법으로 여러번 풀게한다. ê°ìž 몇 ê°œì˜ ì „í˜€ 다른 í”„ë¡œê·¸ëž¨ì„ ë§Œë“¤ì–´ 내는가? 60m 1. 비êµí•œë‹¤. 10m 1. í† ë¡ 15m ---- ê°ìƒ ì¸ìˆ˜ - ì‹ ê¸°í–ˆë‹¤. CSPê°€ 재미 있었다. ì§‘ì—서 í•´ë´ì•¼ê² 다. í¬ìƒ - CSP를 ì‘용해 ë¬¸ì œë¥¼ 푸는 ê²ƒì„ ë“£ê³ ë‚œ 후 Alan Kayê°€ Paradigmì´ Powerful Ideaë¼ê³ í–ˆë˜ ê²ƒì— ê³ ê°œë¥¼ ë„ë•ë„ë• í• ìˆ˜ 있었다. ê·¸ë™ì•ˆ FP를 맛만 보았지 ì œëŒ€ë¡œ íƒêµ¬í•˜ì§€ ì•Šì•˜ë˜ ê²ƒì´ ì•„ì‰¬ì› ë‹¤. FPì— ëŒ€í•œ ê´€ì‹¬ì´ ë” ì»¤ì¡Œë‹¤. ìƒìš± - 새로운 ìƒˆê³ ë°©ì‹ì„ 알아 간다는 ê²ƒì€ ìž¬ë¯¸ìžˆì—ˆë‹¤. ì§€ì› - FP Skill ì„ ë°°ìš°ê²Œ ëœ ê²ƒì´ ì¢‹ì•˜ë‹¤. 창준 늦게 온 ì‚¬ëžŒì´ ì¤‘ê°„ì— ì°¸ì—¬í•˜ëŠ” ê²ƒì€ ë¬¸ì œê°€ 있다. ê·¸ ì‚¬ëžŒì€ ì•žë¶€ë¶„ì„ ëª¨ë¥´ê¸° ë•Œë¬¸ì— ì–´ë–¤ ë¶€ìž‘ìš©ì´ ìžˆë‹¤. 코딩 ì‹œê°„ì´ ë¶€ì¡±í–ˆë‹¤. Code Kata를 í•´ë³´ì§€ 못해서 아쉽다. í•œë¬¸ì œ 여러번 푸는 ê²ƒì€ ì—시 좋ì€ê²ƒ 같다. ìƒë¯¼ - 새로운 ì‚¬ê³ ëž€, 새로운 ì‚¬ê³ ë²•ì´ë¼ 불리우는 것ì´, 미묘한 ì°¨ì´ë¥¼ ì¸ì§€í•˜ëŠ” 것ì—서 온다는 ì‚¬ì‹¤ì„ ì•Œì•˜ë‹¤. 겸ì†í•œ ìžì„¸ê°€ 중요한것 같다. - 창준 - Higher Order Programmingê³¼ ë¡œìš°ë ˆë²¨ì—ì„œì˜ ì„¤ëª…(예컨대 단순한 함수 í¬ì¸í„°ë¡œ 설명하는 것)ì˜ ì°¨ì´ëŠ” ë¯¸ë¬˜í•˜ê³ , ë˜ í¬ë‹¤. ë™ì‚¬(달리다)를 명사(달림)ì˜ í’ˆ ì•ˆì— ë„£ëŠ” 것ì´ë‹¤. ì´ ì‚¬ê³ ì—서 ì—„ì²ë‚œ ì°¨ì´ê°€ ìƒê¸¸ 수 있다. ìž¬ë™ - í•œë¬¸ì œ 다시 풀기가 재미있었따. ì‚¬ê³ ì˜ ê³ ì •í™”ë¥¼ 경계해야 ê² ë‹¤. ì‹œê°„ì•ˆì— ëª»í•´ì„œ 충격 ì´ì—ˆë‹¤. - 창준 - 타ì¸ì„ 가르치기 위해, 여러가지로 í’€ ê°€ëŠ¥ì„±ì´ ì£¼ì–´ì§€ëŠ” ê²ƒì„ ë¬¸ì œë¡œ 만들ìž. ì„천 - 늦으면 안ëœë‹¤. Python 사용중 아는 것과 쓰는 ê²ƒì˜ ì»¤ë‹¤ëž€ ì°¨ì´ë¥¼ ëŠê¼ˆë‹¤. 기존 ì‚¬ê³ ì— ê°‡í˜€ë²„ë ¤ 새로운 ì‚¬ê³ ë¡œ ì „ì´ ëª»í•˜ëŠ” 것ì—서 ì–´ë ¤ì›€ì„ ëŠê¼ˆë‹¤. - 창준 - êµìœ¡ì˜ 3단계 언급 Romance(시, Disorder)-Discipline(예, Order)-Creativity(ì•…, Order+Disorder를 넘는 무언가) , 새로운 ê²ƒì„ ë°°ìš¸ë•ŒëŠ” 기존 ì‚¬ê³ ë¥¼ 벗어나 새로운 ê²ƒë§Œì„ ìƒê°í•˜ëŠ” 배우는 ìžì„¸ê°€ 필요하다. ( 예-최배달 ìœ ë„를 배우는 ê³¼ì •ì—서 ìœ ë„ì˜ ê·œì¹™ë§Œì„ ì§€í‚¤ë©° 싸우는 모습), disciplineì—서 creativity로 넘어가는 ê²ƒì´ ì¤‘ìš”í•˜ë‹¤. ê·œì˜ - 가르치는 ê²ƒì˜ ì–´ë ¤ì›€. 어설프게 ê°€ë¥´ì¹˜ë ¤ë‹¤ê°€ ì–´ë–¤ ë©´ì—서는 피해를 줄 ìˆ˜ë„ ìžˆê² ë‹¤ëŠ” ìƒê°ì„ 했다. ê·¸ë¦¬ê³ ìˆ˜í•™ì´ë‚˜ 논리ì ì‚¬ê³ ì˜ ì¤‘ìš”ì„±ì„ ê¹¨ë‹¬ì•˜ë‹¤. ì¸íƒ - 가르치는 것 ì—시 배우는 ê³¼ì •ì´ë‹¤. Metaphoreì˜ í•„ìš”ì„± ---- Higer order programmingì—서 중요한 ê²ƒì€ ë™ì‚¬ë¥¼ 명사화해준다는 것ì¸ë°, Command Patternë„ ì´ì™€ 비슷한 것 같습니다. CPë„ Functor ì˜ ì¼ì¢…ì´ë‹¤. ( 예 - Spiral Matrix를 Vectorì˜ ë°©ë²•ìœ¼ë¡œ 풀기). CP부터 ë°°ìš°ë©´ CPì—서 ì œì‹œí•˜ëŠ” 예ì—서만 ì 용하는 것으로 ê°‡ížìˆ˜ 있다. 추천책 3ê¶Œ * [SICP] http://mitpress.mit.edu/sicp * HTDP (How To Design Programs) http://www.htdp.org/ * CTMCP http://www.info.ucl.ac.be/~pvr/ 그외 ì–¸ê¸‰ëœ ì±…ë“¤ * HowToSolveIt * ChapterZero * How to Prove it * How to Read and Do Proofs * Proofs and Refutations (번ì—íŒ ìžˆìŒ) * ë¬¸ì œí•´ê²°ì˜ ìˆ˜í•™ì ì „ëžµ * The Art and Craft of Problem Solving ---- JuNe님 소스 공개 해주셔요. _tempì— ìžˆë˜ ì½”ë“œë“¤ì´ ëˆˆ ì•žì— ì•„ë¥¸ê±°ë ¤ìš”. :) --[ê°•ê·œì˜]