OCR Text |
Show THE UNIVERSITY OF UTAH RESEARCH POSTERS ON THE HILL 2013 LEARNING COMPUTATIONAL PRINCIPLES BY TEACHING A COMPUTER Tyler Sorensen (Ganesh Gopalakrishnan) School of Computing University of Utah n Learning Computational Principles by Teaching a Computer Tyler Sorensen and Ganesh Gopalakrishnan School of Computing CENTER FOR PARALLEL COMPUTING O UTAH Problem / Motivation > C S students are often intimidated and uninterested by foundational topics > This leads to low retention of concepts and lack of awareness of APPLIED concepts! > Foundational topics are becoming prevalent in m o d e m computing (verification, NLP. compilation etc) > W e can't simply add more Foundations topics to existing syllabi > H o w to increase the effectiveness of teaching Foundations topics including > Less paper/pencil based - more code-interaction based > Emphasis not just on scanning and parsing, but also on modeling and verification u UNIVERSITY OP UTAI Approach and Developed Material > Introduce logic and automata interwoven > Provide declarative code-modules wntten in Python and ask students to design extensions The renowned book "Structure and Interpretation of Computer Programs'1 employs this Active Learning approach. *- Electronic textbook with exercises and code samples enforcing declarative programming in the popular Python programming language > Python encodings of basic automata including: DFA. NFA and Regular Expressions. Functionality includes conversion between equivalent automata and graphic generation. > Python encodings of logic tools including: basic SAT algorithm (100 LOC). modem SAT code (600 LOC). B D D implementation, and puzzle solvers using S M T > This material was implemented in teaching C S 3100 Models of Computation Fall 2012 with over 50 enrolled students Here are some results > Similar style of teaching now being implemented in CS2100 Discrete Structures Spring 2013. Computational principles such as formal mathematical logic are distillations of the actual workings of a computer. For several reasons, a computer science beginner often finds these principles disconnected from reality, and in turn does not enjoy or retain the material. First, the student has to witness and experience some of the distillation of h o w real-world scenarios were abstracted away from. Second, they need a vehicle to challenge their understanding by having a "calculator" that can directly deal with formal mathematical logic and related topics. Last but not least, one truly understands something when one can teach someone else. These ideas are well illustrated in books such as [1]; however, such works are rare. The popular Python programming language provides a succinct syntax for expressing mathematical ideas, illustrates real-world connections, and offers a vehicle through which a student can teach a computer (codify the knowledge) and "calculate" outcomes (such as logical inferences). Over the last several months we have been developing Python modules for teaching foundational topics. Our completed work includes modules for classical automata (NFA, PDA, Turing Machines) and a variety of inference engines (DPLL, BDD). This material is currently being used to teach the course CS 3100 at the University of Utah with over 50 enrolled students and has been met with a positive response. W e are also creating an e-book which w e plan on releasing open source which will encourage adoption of our course material elsewhere. Future plans include introducing this style of teaching even earlier in the CS curriculum and the release of robust program modules for even more topics in logic and systematic software verification. 5 »6 H2 ] 1- T" *.- • • • *££=.•£• TZZZZZZZZLIZ AL/C-*" A. A:_ A L «.•* .-.•.,.».„•< <„-.»-< v.».<„-i ^,-S *•-•"•-•«•»-<••-« (..•art « <1J ») (a,«rt (. cl, •» Ccaclara-fur, clj {) InO (aiaart (or (. 11 clt t»> 1) « <»> 1>» , 23 |