迈克尔梅毒

BA,疯牛病,宾夕法尼亚州的MSE,大学。博士,美国威斯康星大学麦迪逊分校。在编程语言,密码学,软件工程特殊利益;对类型理论和软件工程之间的相互影响的研究论文的作者。SLC,1999-

本科课程2021-2022

计算机科学

数字中断

开放式,研讨会,秋季

从TikTok到Zoom,从比特币到优步,从Instagram到Snapchat,到大规模多人在线游戏,到物联网,以及不可替代的代币,数字技术在社会中扮演着越来越“颠覆性”的角色。在这个FYS研讨会上,我们思考这个现象在近期和非近期可能会把我们带到哪里,以及我们是否(或将)能够(或应该)对此做些什么。电子计算机的小型化以及由此带来的计算能力的提高,利用这种能力的短期成本的降低,以及计算机网络的无处不在,把人和地方联系在了一起,使以前认为不可逾越的距离变得越来越微不足道。随着千兆光纤网络、智能手机和可穿戴电脑的出现,各种各样的信息可以在世界各地、人与物之间流动,也可以在瞬间返回。在许多方面,大量更小、更便宜、更快的网络设备改善了我们的生活质量。但是,高度互联的社会也有黑暗的一面:智能手机越多,工作狂就越多;短信交流越多,使用无人机越容易,隐私就越少;互联网覆盖的范围越广,错误信息传播的速度就越快,盗版、垃圾邮件和色情也就越多;遥控恒温器越多,网络恐怖主义的风险就越大。本次研讨会将聚焦于数字网络(网络、社交网络以及其他)与当前事件(包括经济、政治和法律)之间的关系。 The second half of the course will focus on the cultural impact of digital technology ranging from video games and science fiction to the rise of artificial intelligence. This is not a technical course, though at times we will discuss some details that lie behind certain crucial technologies—in particular, the internet and the World Wide Web. While this course is open to all students, first-year students may take the course as a regular seminar or as their FYS seminar. In the latter case, students will have weekly conferences and be expected to enroll in Introduction to Web Programming in the spring as a continuation of their FYS experience.

学院

Web编程:简介

春季开放式小型讲座

这个研讨会介绍了计算机科学的基本原理,通过使用HTML和JavaScript来创建交互式网页。我们将构建的网络应用程序的例子包括:虚拟美术馆;密码生成器和验证器;这是一款老式街机游戏。我们将从头开始学习JavaScript编程,并演示如何将它用作通用的解决问题的工具。在整个课程中,我们将强调抽象的力量和清晰编写、结构良好的代码的好处。我们将涵盖变量、条件、循环、函数、数组、对象和事件处理。我们还将讨论JavaScript如何通过文档对象模型(DOM)与超文本标记语言(HTML)进行通信,以及HTML、JavaScript和级联样式表(CSS)之间的关系。在此过程中,我们将讨论web的历史,建立标准的挑战,以及驱动web成功的工具和技术的发展。我们将学习客户端-服务器架构和客户端和服务器端web编程之间的差异。 We will consider when it makes sense to design from the ground up and when it might be more prudent to make use of existing libraries and frameworks rather than reinventing the wheel. We will also discuss the aesthetics of web design: Why are some pages elegant (even art) when others are loud, awkward to use, or—worse yet—boring. Weekly hands-on laboratory sessions will reinforce the programming concepts covered in class. No prior experience with programming or Web design is necessary (nor expected nor even desirable).

学院

软件设计与开发

中间,研讨年

世界上世界上最杰出的计算机科学家之一唐纳德·伦敦人表示,“计算机程序很有趣写入”,“软件很难”。本课程的目标是为学生提供设计和开发真实软件的味道。Knuth的引号说明了这一课程的两个主题,这不一定是赔率:写作良好软件的挑战不应该抵消写作它的乐趣。一些我们将介绍的主要话题包括抽象的力量,从实施中的设计分离,版本控制,开发环境的选择,创造性地使用现有的软件库和工具,灵活的方法的好处,以及灵活的方法,以及保持良好文件的作用。现在是谚语,“没有替代经验,”比软件工程更相关。考虑到这一点,本课程旨在成为动手。设计和开发技术将主要通过每个学生在整个学年中设计和实施单一的软件项目来教授。特定主题:设计模式,包括模型 - 视图控制器;将用户界面从核心算法分离; wireframe techniques; alpha vs. beta testing; using distributed software versioning tools, such as GitHub; the role of abstract data types and precise API specification; code reviews; workshopping; and the less heralded—but crucially important—skills of documentation writing, software testing, and project management.

学院

以往的课程

计算机科学

编译器

中间,Seminar-Spring

编译器通常被称为翻译,并有很好的理由:他们的工作是把一种语言编写程序,并把它们翻译成另一种语言(通常是汇编或机器语言)计算机能够执行。这也许是计算机科学的理论和实践的双方满足的理想选择。现代编译器实现提供的合成:(1)语言理论,如何种语言(包括自然语言和编程语言),可上表示,并通过计算机识别;(2)软件设计和开发,实际如何软件可以开发模块化的方式-e.g,如何一个编译器的部件可以被连接到另一个编译器,以形成一个新的编译器的组成部分。(3)计算机体系结构,计算机了解如何现代化的工作。在这个学期,我们将编写实施平凡的编译器一个新的编程语言(部分原因是我们自己设计)的程序。我们将沿途涵盖的主题包括适用于寄存器分配解释器和编译器,正则表达式和有限自动机,上下文无关文法和乔姆斯基谱系,类型检查和类型推断,语法和语义,以及图着色之间对比的区别。会议的工作将允许学生追求的编译器的不同方面,如面向对象的语言,自动垃圾收集,编译器优化的编译,即时编译,WebAssembly和编译器技术的应用自然语言的翻译。

学院

计算机组织

中级,研讨会

本课程的重点是组成计算机的部件的选择和互连。在现代计算机中有两大类基本部件:硬件(计算的物理媒介)和软件(由计算机执行的指令)。随着技术变得越来越复杂,硬件和软件之间的区别变得模糊。我们将研究为什么会发生这种情况,以及为什么硬件设计师需要关注软件设计师编写程序的方式,反之亦然。在此过程中,我们将从高级编程语言(如Java、Python和c)到基本的机器代码0和1,学习计算机如何工作。主题包括布尔逻辑,电路设计,计算机算术,汇编和机器语言,存储器层次和并行处理。我们将特别关注指令集架构的ARM家族——目前世界上最常用的通用微处理器。如果时间允许,我们将研究能源消耗与多核和移动架构的兴起之间的关系。

学院

数据结构与算法

中间,Seminar-Spring

在本课程中,我们将研究各种数据结构和算法,这对于设计复杂的计算机程序的设计很重要,以及用于管理程序复杂性的技术。在整个课程中,我们将使用Java,强烈类型的面向对象的编程语言。涵盖的主题将包括类型和多态性,数组,链接列表,堆栈,队列,优先级队列,堆,词典,平衡树木和图表以及用于操纵这些结构的几个重要算法。我们还将研究用于分析算法效率的技术。将所有这些主题绑在一起的中央主题是抽象的想法以及信息隐藏和封装的相关概念,我们将在整个课程中强调。每周实验室会在计算机上通过广泛的实践实践加强课堂上涵盖的概念。

学院

数据库

中间,Seminar-Spring

一个现代的数据库系统是记录在数字媒体上的相互关联的事实的集合,以及一套能够有效访问这些事实的计算机程序。在21世纪,数据库通过网络和云计算变得无处不在,以至于用户甚至没有意识到他们的数据存储在哪里,如何访问,以及谁可以访问它。本课程试图通过分析软件(以及硬件)技术来阐明我们的社会为什么以及如何变得如此依赖信息处理,这些技术可以有效地存储和检索信息。我们将通过使用开源平台(如PostgreSQL、SQLite和MySQL)设计数据库和使用客户端技术(如HTML、CSS、JavaScript和一些AJAX)和服务器端编程语言(如PHP、Python和Node.js)设计网站来操作这些数据库来阐述核心原则。主要主题包括关系数据库设计、查询语言(如SQL及其相关语言和低层嵌入式查询语言)、对象-关系模型、ACID属性和客户-服务器范式。我们还将讨论大数据时代如何挑战ACID/SQL模型的霸主地位,并导致MongoDB、Cassandra和Neo4J等NoSQL数据库系统的出现。每个学生将负责设计和实现自己选择的可访问网络的数据库应用程序,使用开源数据库软件和web应用程序编程语言,如Node、PHP、Python或Ruby。学生将在整个课程中完成他们的项目,并在学期结束时向其他同学展示。除了常规的阅读作业,还会有一些习题和简短的编程作业。还将有一项更实质性的方案编制任务,用来说明与实际执行数据库系统有关的问题。 Example conference topics include data mining, database privacy and access control, geographic information systems (GIS), logic databases, and the implementation of a miniature database system.

学院

中级设计

中级,研讨会

本课程是专为谁懂计算机编程的基础知识(无论是在Python,JavaScript或其他语言),但想利用他们的技能到下一个水平的学生。我们将用优雅而精致的编程语言Haskell的学习软件设计,抽象数据类型,以及高阶函数。我们将介绍的计算复杂度和树形结构的基本原则。我们将强调自上而下的解决问题,使用递归。我们还将学习如何使用基于云的版本控制;例如,使用GIT中和GitHub的。如果时间允许,我们将学习如何建立更大的程序,充分利用数据库和网络协议。

学院

简介计算机编程

开放,讲座秋季

这一讲给出了严格的介绍了计算机科学和计算机编程领域,用优雅,非常实用,且易于学习的编程语言Python的。我们将学习解决问题的原则与电脑,同时获得必要的学科进一步研究的编程技巧。我们将强调抽象的力量,算法理论,并写清楚,结构合理的方案带来的好处。基本主题包括:计算机如何表示和操纵数字,文本,以及其他数据(诸如图象和声音);变量和象征性的抽象;布尔逻辑;有条件的,反复的,以及递归计算;功能抽象(“黑盒子”);和标准的数据结构,诸如数组,列表,和字典。我们将学习入门的计算机图形以及如何处理通过鼠标和键盘简单的用户交互。 We will also consider the role of randomness in otherwise deterministic computation, basic sorting and searching algorithms, how programs can communicate across networks, and some principles of game design. Toward the end of the semester, we will investigate somewhat larger programming projects and so will discuss file processing, modules and data abstraction, and object-oriented concepts such as classes, methods, and inheritance. As we proceed, we will debate the relative merits of writing programs from scratch versus leveraging existing libraries of code. Discussion topics will also include the distinction between decidable and tractable problems, the relationship between programming and artificial intellgence, the importance of algorithmic efficiency to computer security, and Moore's Law and its impact on the evolution on programming languages and programming style. Weekly hands-on laboratory sessions will reinforce the programming concepts covered in class.

学院

Web编程概论

开学,春季讲座

本讲座通过创建交互式网页介绍了计算机科学的基本原则。我们将专注于Web技术的核心级数:内容的HTML,用于布局的CSS,对于US-JavaScript进行交互来说,最重要的。我们将构建的Web应用程序种类的示例包括虚拟艺术画廊;密码生成器和验证器;这是一款老式街机游戏。我们将学习从头开始编程,并演示如何将其用作通用,解决问题的工具。在整个课程中,我们将强调抽象的力量和清晰编写、结构良好的代码的好处。我们将介绍变量,条件,循环,函数,递归,阵列,对象,json表示法和事件处理。我们还将讨论JavaScript如何通过文档对象模型(DOM)和HTML,JavaScript和Cascading样式表(CSS)的关系通信。一路上,我们将讨论网络的历史,建立标准的挑战,以及推动网络成功的工具和技术的演变。 We will learn about client-server architectures and the differences between client-side and server-side Web programming. We will consider when it makes sense to design from the ground up and when it might be more prudent to make use of existing libraries and frameworks rather than reinvent the wheel. We will also discuss the aesthetics of Web design: Why are some pages elegant (even art) when others are loud, awkward to use, or—worse yet—boring. Weekly hands-on laboratory sessions will reinforce the programming concepts covered in lecture. No prior experience with programming or Web design is necessary (nor expected nor even desirable).

学院

隐私、技术和法律

春季研讨会开幕

远程会议系统、数字货币、自动驾驶汽车和爱德华·斯诺登(Edward Snowden)有什么共同点?答案就在这门课上,它关注的是一些非常具体的计算机技术是如何戏剧性地改变日常生活的。在本课程中,我们将发展一系列的核心原则来解释快速变化,并帮助我们规划合理的未来道路。我们从隐私、私有财产和隐私法的简要历史开始。20世纪早期需要法律思考才能发展的技术有两个例子:当飞机飞过某人的后院时,飞行员(和乘客)是否属于非法侵入,以及警察是否可以在没有搜查令的情况下监听电话亭的电话(还记得吗?)很快,我们将进入信息时代,并更新这些难题:无人机飞行的红外摄像机,受版权保护的视频在YouTube上被认为通过公共WiFi,可恶的评论发布在reddit,好玩的微博是断章取义,病毒为所有人都能看到,一个非法交易,涉及比特币是通过Venmo看似匿名政党之间。为了更好地处理这个问题,我们将考虑互联网的核心讽刺之处:它是在冷战高峰时期开发的,目的是在发生核攻击的情况下保持强大的通信系统;如今,它的开放性让我们面临21世纪的安全威胁,比如电子监控、个人信息的聚集和挖掘,以及网络恐怖主义。我们将对比电影中流行的世界末日神话,比如战争游戏用更普通的场景,比如电子商务的彻底中断。在此过程中,我们将解决诸如这样的问题:现代技术是否允许人们秘密和匿名交流?几个人就能使整个互联网瘫痪吗?黑客能从世界另一端的远程计算机上发射导弹或揭开核电站的蓝图吗?我们还将调查其他计算机安全问题,包括垃圾邮件、计算机病毒和身份盗窃。与此同时,随着我们对智能手机、短信和电子邮件的依赖,我们是否已不知不觉地将自己置身于一个奥威尔式的社会?或者其他技术能阻止《1984》吗?我们的目标是调查社会是否以及如何在实现计算机安全的同时,不实质性地限制言论自由和隐私权。在此过程中,我们将介绍网络科学,并描述使互联网及其相关技术同时获得巨大成功和如此具有挑战性的基本理论。该课程的大部分内容将用于介绍密码学——编码和解码信息以实现私人通信的科学(和艺术)。 We will conclude with a discussion of how cutting-edge technologies, such as blockchains, are impacting commerce today and how quantum cryptography and quantum computing may impact the privacy of communications tomorrow.

学院

Web编程:简介

春季研讨会开幕

本研讨会通过使用HTML和JavaScript创建交互式网页来介绍计算机科学的基本原理。我们将构建的各种web应用程序的示例包括:虚拟艺术画廊;密码生成器和验证程序;还有一款老式的街机游戏。我们将从头开始学习JavaScript编程,并演示如何将其用作通用的问题解决工具。在整个课程中,我们将强调抽象的力量以及编写清晰、结构良好的代码的好处。我们将介绍变量、条件、循环、函数、数组、对象和事件处理。我们还将讨论JavaScript如何通过文档对象模型(DOM)与超文本标记语言(HTML)通信,以及HTML、JavaScript和级联样式表(CSS)之间的关系。在此过程中,我们将讨论web的历史、建立标准的挑战以及推动web成功的工具和技术的演变。我们将了解客户机-服务器体系结构以及客户机端和服务器端web编程之间的差异。我们将考虑何时从根本上进行设计,以及何时使用现有的图书馆和框架,而不是重新发明车轮更谨慎。我们还将讨论网页设计的美学:为什么有些网页是优雅的(甚至是艺术的),而另一些则是喧闹的、难以使用的,或者更糟糕的是,令人厌烦的!

学院

该交互式Web

春季研讨会开幕

本次研讨会通过研究Web的底层技术和这些技术背后的理论,探讨Web的影响和重要性。我们特别关注Web的交互性质:用户如何消费内容,但更重要的是如何创建内容。我们考虑有意创作(例如定制网站、状态更新、留言板帖子、Instagram feed)和无意的(例如,用户搜索历史的踪迹)。本课程结合了讨论和辩论,以及构建交互式网页的实践教程介绍。讨论内容包括网络的简史、互联网与网络的区别、网络中立性和开放源码、建立标准的挑战以及推动网络成功的工具和技术的演变。从技术方面,我们将介绍一些基本的编程概念,如变量、条件、循环、函数、递归、数组、对象和事件处理。我们使用工具和语言(如铅笔代码和咖啡脚本)开发程序,这些工具和语言强调易用性,使我们能够专注于意义而不是语法。我们利用浏览器的强大功能创建具有声音和动画的多媒体应用程序。我们使用的工具,使数字艺术和简单,但娱乐,游戏的合作创造。我们了解交互式Web编程的核心技术:JavaScript如何通过文档对象模型(DOM)与超文本标记语言(HTML)通信,以及HTML、JavaScript和级联样式表(CSS)之间的关系。我们还考虑何时从根本上进行设计是有意义的,当它更谨慎地利用现有的图书馆和框架,而不是重新发明车轮。我们讨论用户体验(UX)和网页设计的美学:为什么有些页面很优雅(甚至是艺术),而另一些页面声音很大,使用起来不方便,或者更糟的是却很无聊。

学院