迈克尔SIFF

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

本科课程二零二零年至2021年

计算机科学

中间编程

中间,研讨会下落

在老师的许可是必需的。学生应该有编程经验至少一个学期。

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

学院

编程网页:介绍

开放,研讨会弹簧

本次研讨会通过使用HTML和JavaScript来创建交互式网页介绍计算机科学的基本原则。该种网络应用程序,我们将建立的例子包括:虚拟艺术画廊;密码生成器和验证器;和一个老派的,街机风格的游戏。我们将从头开始学习JavaScript编程和演示如何可以用作通用,解决问题的工具。在整个过程中,我们将强调抽象的力量和写清楚,结构良好的代码的好处。我们将介绍变量,条件,循环,函数,数组,对象和事件处理。我们还将讨论通过文档对象模型(DOM)和HTML的关系,JavaScript和层叠样式表(CSS)超文本标记语言(HTML)如何JavaScript的连通。一路上,我们将讨论在网络中,建立标准的挑战,以及工具和驱动网络的成功技术的进化史。我们将了解客户端 - 服务器架构和客户端和服务器端Web编程之间的差异。当它从地上爬起来有意义的设计时,它可能会更谨慎地利用现有的库和框架,而不是重新发明轮子,我们会考虑的。我们还将讨论网页设计的美学:为什么有些网页优雅的(甚至是艺术),当别人都响亮,难于使用,或者,更糟糕的是,无聊!

学院

隐私,技术及法律

开放,研讨会弹簧

什么远程会议系统,数字货币,自驾车车辆,斯诺登有什么共同点?问题就出在这个过程中,其重点是如何了一些非常具体的计算机技术正在显着改变日常生活。在这个过程中,我们将开发一系列的讲解快速的变化以及帮助美国排行榜榜首未来一个有理有据的路径核心原则。我们开始与隐私简史,私有财产和隐私法。这需要法律思维进化的20世纪初的技术的两个例子是飞机的飞行员(和乘客)是否非法闯入时,在别人的后院,是否警方可以聆听一个电话亭一个电话平面苍蝇(记住那些?)没有逮捕证。很快,我们将在信息时代到来,并更新这些难题:无人驾驶飞机用红外摄像机,受版权保护的视频上传到YouTube上通过公共WiFi观看苍蝇,一个可恶的评论张贴在Reddit上,俏皮的鸣叫取出来环境和去病毒有目共睹,涉及比特币非法交易是通过venmo看似匿名的各方之间进行。以取得该问题的一个更好的处理,我们会考虑互联网的中心讽刺意味:它是在冷战的方式来维持核攻击的情况下,一个强大的通信系统的高度发达;现在,它的开放性使我们在二十一世纪的安全威胁,如电子监控,聚集和个人信息的挖掘和网络恐怖主义的危险。我们将通过对比电影,如推广末日神话 战争游戏 更多的世俗场景,如电子商务的全部破坏。一路上,我们将解决的问题,例如:不现代科技让人们暗暗地以匿名通讯?可以几个人禁用整个互联网?黑客可以发动从远程计算机核电站导弹或露出蓝图在世界的另一边?我们还将调查其他计算机安全问题,包括垃圾邮件,电脑病毒和身份盗窃。同时,随着我们对智能手机的依赖,短信和电子邮件,我们已经不知不觉地签署了自己生活在一个奥威尔式的社会吗?或者其他技术保持“1984”在海湾?我们的目标是调查是否以及如何社会能够取得平衡,从而实现计算机的安全性,而基本上不削减权利,言论自由和隐私。一路上,我们将介绍网络的科学描述底层理论,使互联网及其相关技术的一次巨大成功等具有挑战性的规范。过程中的相当大的部分将用于编码和解码信息,以使专用通信的介绍性cryptology-科学(和技术)。我们将用怎样的尖端技术,如blockchains,正在影响着今天的商业,以及如何量子密码学和量子计算可能会影响未来的通信隐私的讨论得出结论。

学院

数字中断

开放,研讨会下落

从的TikTok放大,从Bitcoin到尤伯杯,从Instagram的的到snapchat,以大型多人在线游戏,物联网,数字技术在社会中永远的“破坏性”作用。在此次研讨会上,我们在那里思考这种现象可能会采取我们立即和不那么不久的将来双方是否存在(或会)任何我们可以(或应该)做的。电子计算机的小型化和计算能力所产生的增加,降低短期成本线束权力,和计算机网络把人们和地方一起,使以前被认为不可逾越永琐碎的距离的普及。与千兆光纤网络,智能手机和可穿戴计算机的出现,各种信息可以流过的世界各地的人与物体和背面之间再次,在瞬间。在很多方面,小的多如牛毛,更便宜,更快的联网设备提高我们的生活质量。但也有黑暗的一面,以高度的社会连接:更多的智能手机,更多的工作狂;更多的短信交流和更容易获得无人机,少隐私;互联网的更大范围,更快的误传的传播和盗版多,垃圾邮件和色情内容;更多的远程控制自动调温器,更大的网络恐怖主义的危险。本次研讨会的上半年将集中在数字网络之间(社交网络延伸至网络,以及)时事,特别是经济,政治,法律等的关系。在中间学期的实时! - 我们将讨论如何在数字化原则,我们正在研究影响2020年11月美国总统大选。课程的最后一部分将集中在数字技术的文化影响,从视频游戏和科幻人工智能的崛起。这不是一个技术过程,但我们将在次讨论一些细节,谎言某些关键技术落后,尤其是互联网和万维网。

学院

以往的课程

计算机组成原理

中间,研讨会下落

在老师的许可是必需的。学生应该有编程经验至少一个学期。

本课程探讨的电脑是如何设计和建筑如何基本块“引擎盖下”可以结合起来,使该执行复杂的算法,强大的机器。有在现代计算机组件的两个基本类型:硬件(计算的物理介质)和软件(由计算机执行的指令)。随着技术变得越来越复杂,硬件和软件的模糊之间的区别。我们将研究为什么会这样,以及为什么硬件设计人员需要用软件方式设计编写程序,反之亦然关注。一路上,我们将学习计算机如何工作:从高级编程语言如Python和JavaScript,为系统级语言C和Java,下至基本零和机器代码的。主题包括布尔逻辑,数字电路设计,计算机算法,组件和机器语言,存储器层次结构和并行处理。将特别注意给予RISC架构,现在是世界上最常见的通用微处理器。时间允许的话,我们会调查能源消耗和多核和移动架构的兴起之间的关系。

学院
相关学科

编译器

中间,研讨会弹簧

在老师的许可是必需的。学生应该有编程经验至少一个学期,最好是一些熟悉计算机组织。

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

学院
相关学科

介绍了网络编程

开放式,讲座式弹簧

本次讲座通过创建交互式网页介绍计算机科学的基本原则。我们将专注于网络技术的核心的三驾马车:HTML内容,CSS布局,和大多数我们的JavaScript交互性很重要。该种网络应用程序,我们将建立包括虚拟艺术画廊的例子;密码生成器和验证器;和一个老派的,街机风格的游戏。我们将学习从地上爬起来编程并演示如何可以用作通用,解决问题的工具。在整个过程中,我们将强调抽象的力量和写清楚,结构良好的代码的好处。我们将介绍变量,条件,循环,函数,递归,数组,对象,JSON对象和事件处理。我们还将讨论通过文档对象模型(DOM)和HTML的关系,JavaScript和层叠样式表(CSS)超文本标记语言(HTML)如何JavaScript的连通。一路上,我们将讨论在网络中,建立标准的挑战,以及工具和驱动网络的成功技术的进化史。我们将了解客户端 - 服务器架构和客户端和服务器端Web编程之间的差异。当它从地上爬起来有意义的设计时,它可能会更谨慎地利用现有的库和框架,而不是推倒重来的,我们会考虑的。我们还将讨论网页设计的美学:为什么有些网页优雅的(甚至是艺术),当别人都响亮,难于使用,或者,更糟糕的是,无聊。每周动手实验课将加强覆盖在演讲的编程概念。没有与编程或网页设计以前的经验是必要的(也不预期甚至也不是可取的)。

学院
相关学科

介绍了计算机编程

开放,讲座下落

这一讲给出了严格的介绍了计算机科学和计算机编程领域,用优雅,非常实用,且易于学习的编程语言蟒蛇。我们将学习解决问题的原则与电脑,同时获得必要的学科进一步研究的编程技巧。我们将强调抽象的力量,算法理论,并写清楚,结构合理的方案带来的好处。基本主题包括:计算机如何表示和操纵数字,文本和其它数据(诸如图象和声音);变量和象征性的抽象;布尔逻辑;有条件的,反复的,以及递归计算;功能抽象(“黑盒子”);和标准的数据结构,诸如数组,列表,和字典。我们将学习入门的计算机图形以及如何处理通过鼠标和键盘简单的用户交互。我们也会考虑随机性的,否则确定性计算,基本排序和搜索算法,程序如何通过网络沟通的角色,和游戏设计的一些原则。朝学期结束,我们将调查稍大的编程项目等将讨论文件处理;模块和数据抽象;和面向对象概念,如类,方法和继承。当我们继续,我们将讨论编写程序的相对优点从头与利用的现有代码库。讨论的议题还将包括可决定性和易处理问题之间的编程和人工智能之间的关系的算法效率,电脑安全的重要性摩尔定律其对编程语言和编程风格的演变影响的区别,和和。每周动手实验课将加强覆盖类的编程概念。

学院
相关学科

数据库

中间,研讨会弹簧

在老师的许可是必需的。学生应该有编程经验至少一个学期。

现代数据库系统是记录在数字媒体上相互关联的事实的收集和一套有效的访问这些事实的计算机程序。在21世纪,数据库已成为通过网络和{云计算”到如此地步,用户甚至可能没有意识到,他们的数据存储,它是如何被访问,以及谁可以访问它无处不在。本课程试图揭示为什么和如何我们的社会已经变得如此通过检查软件(以及在较小程度上,硬件)的技术依赖于信息处理光铅的高效存储和检索信息。我们将通过设计使用开源平台(如PostgreSQL的,SQLite和MySQL的)数据库和设计网站使用的客户端技术(如HTML,CSS,JavaScript和有点阿贾克斯)和服务器来处理这些数据库说明核心原则侧的编程语言(诸如PHP,Python和的node.js)。主要主题包括关系数据库设计,查询语言(例如,SQL,其亲戚,和较低级的嵌入式查询语言)时,对象关系模型,酸性质,和客户端 - 服务器范例。我们也会考虑大数据时代是如何挑战酸/ SQL模式的优势和引起的NoSQL数据库系统,如MongoDB的,卡桑德拉和Neo4j的。每个学生将负责设计和实施他们自己选择的Web访问的数据库应用程序,使用开放源代码数据库软件和网络应用程序的编程语言,如节点,PHP,Python或红宝石。学生将在整个工作过程中对他们的项目,将展示他们在学期结束时休息之类的。除了常规的阅读作业,将有几个习题集和短编程作业。也将有用来说明有关实际执行数据库系统的问题进行了较大幅度的编程任务。例如会议主题包括数据挖掘,数据库隐私和访问控制,地理信息系统(GIS),逻辑数据库,和一个微型数据库系统的实施。

学院
相关学科

隐私,技术及法律

开放,研讨会下落

什么数字货币,自驾车车辆,斯诺登有什么共同点?问题就出在这个过程中,其重点是如何了一些非常具体的计算机技术正在显着改变日常生活。在讲座中,我们将开发一系列的解释的快速变化,并帮助我们向图表未来有理有据的路径核心原则。我们开始与隐私简史,私有财产和隐私法。的,需要法律思想演变早在20世纪技术的两个例子是:1)飞机的飞行员(和乘客)是否非法闯入,当飞机飞过一个人的后院;并且,2)是否警察可以听到从电话亭打来的电话(记得那些?)没有逮捕证。很快,我们将在信息化时代到来,可以更新这些难题,例如:无人机飞行用红外摄像机,受版权保护的视频上传到YouTube上通过公共WiFi观看,一个可恶的评论张贴在Reddit上,俏皮鸣叫是断章取义,并一炮而红有目共睹,涉及比特币非法交易是通过venmo看似匿名的各方之间进行。以取得该问题的一个更好的处理,我们会考虑互联网的中心讽刺。它是在冷战的方式来维持核攻击的情况下,一个强大的通信系统的高度发达。现在,它的开放性使我们在二十一世纪的安全威胁的风险,如电子监控,聚集和个人信息的挖掘和网络恐怖主义。我们将通过对比电影,如推广末日神话 战争游戏 更多的世俗场景,如电子商务的全部破坏。一路上,我们将解决的问题,例如:不现代科技让人们暗暗地以匿名通讯?可以几个人禁用整个互联网?黑客可以发动从远程计算机核电站导弹或露出蓝图在世界的另一边?我们还将调查其他计算机安全问题,包括垃圾邮件,电脑病毒和身份盗窃。同时,随着我们对智能手机的依赖,短信和电子邮件,我们已经不知不觉地签署了自己生活在一个奥威尔式的社会吗?或者其他技术保持 1984 在海湾?我们的目标是调查是否以及如何社会能够取得平衡,从而实现计算机的安全性,而基本上不削减权利,言论自由和隐私。一路上,我们将介绍网络的科学描述底层理论,使互联网及其相关技术的一次巨大成功等具有挑战性的规范。过程中的相当大的部分将专门介绍密码学的编码和解码信息,以使专用通信的科学(和技术)。我们将用怎样的尖端技术,如blockchains,正在影响着今天的商业,以及如何量子密码学和量子计算可能会影响未来的通信隐私的讨论得出结论。

学院
相关学科

交互式网络

开放,研讨会弹簧

没有与编程或网页设计以前的经验是必要的(也不预期甚至也不是可取的)。

本次研讨会探讨通过检查的基本技术以及这些技术背后的理论的影响,以及网络的进口。尤其是,我们专注于网络的互动性:用户如何消费内容,但更重要的是,创建它。我们认为这两个故意创作(例如,定制的web站点,状态更新,留言板帖子,Instagram的的饲料)和无意的(例如,用户的搜索历史的痕迹)。阶级联合的讨论和辩论与实践,入门教程构建交互式网页。讨论包括网络的简史,互联网和网络,网络中立性和开源之间的差异,制定的标准的挑战,以及工具和驱动网络的成功技术的发展。从技术面上看,我们介绍了基本的编程概念,如变量,条件,循环,函数,递归,数组,对象和事件处理。我们开发使用的工具以及强调易用性,让我们能够专注于意思,而不是称重我们失望与语法的语言(例如,铅笔代码和CoffeeScript的)计划。我们利用浏览器的力量创造有声音和动画的多媒体应用。我们使用的工具,使数字艺术和简单,但娱乐性,游戏的协同创作。我们了解交互式Web编程的核心技术:通过文档对象模型(DOM)和之间的HTML,JavaScript和层叠样式表(CSS)的关系,如何与超文本标记语言JavaScript的通信(HTML)。当它从地上爬起来有意义的设计时更谨慎地利用现有的库和框架,而不是推倒重来,我们还考虑一下。我们讨论的用户体验(UX)和网页设计的美学:为什么有些网页优雅的(甚至是艺术),当别人都响亮,难于使用,或者,更糟糕的是,无聊。

学院

数据结构和算法

中间,研讨会弹簧

在老师的许可是必需的。学生应该有编程经验至少一个学期。

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

学院

计算机组成原理

中间,研讨会下落

在老师的许可是必需的。学生应该有编程经验至少一个学期。

本课程的重点是,使一个计算机组件的选择和互连。有在现代计算机组件的两个基本类型:硬件(计算的物理介质)和软件(由计算机执行的指令)。随着技术变得越来越复杂,硬件和软件的模糊之间的区别。我们将研究为什么会这样,以及为什么硬件设计人员需要用软件方式设计编写程序,反之亦然关注。一路上,我们将学习计算机如何从更高层次的编程语言,比如Java,Python和C-下降到零基础和机器代码的人工作。主题包括布尔逻辑,电路设计,计算机算法,组件和机器语言,存储器层次结构和并行处理。将特别注意给予ARM系列指令集架构,现在是世界上最常见的通用微处理器。时间允许的话,我们会调查能源消耗和多核和移动架构的兴起之间的关系。

学院