1 / 32

在学校里打好程序设计之基础

在学校里打好程序设计之基础. 潘爱民 微软亚洲研究院,网络与多媒体组. 程序设计之重要性. 计算机软件的一切在于软件,而软件是靠程序设计得来的 点子固然值钱,但点子能变成现实才真正值钱. 看计算机发展史上的成功者. Bill Gates 在哈佛大学读书的盖茨与伙伴保罗 · 艾伦一起为 Altair 8800 电脑设计 Altair BASIC 解译器. 看计算机发展史上的成功者. Linus Torvalds 当今世界最著名的电脑程序员、黑客。 Linux 内核的发明人及该计划的合作者。大学时出于个人爱好写出了 Linux 内核的第一个版本.

hansel
Download Presentation

在学校里打好程序设计之基础

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 在学校里打好程序设计之基础 潘爱民 微软亚洲研究院,网络与多媒体组

  2. 程序设计之重要性 • 计算机软件的一切在于软件,而软件是靠程序设计得来的 • 点子固然值钱,但点子能变成现实才真正值钱

  3. 看计算机发展史上的成功者 • Bill Gates • 在哈佛大学读书的盖茨与伙伴保罗·艾伦一起为Altair 8800电脑设计Altair BASIC解译器

  4. 看计算机发展史上的成功者 • Linus Torvalds • 当今世界最著名的电脑程序员、黑客。Linux内核的发明人及该计划的合作者。大学时出于个人爱好写出了Linux内核的第一个版本

  5. 看计算机发展史上的成功者 • David Cutler • VMS和Windows NT的首席设计师。NT之父。 • 去微软前号称硅谷最牛的kernel程序员

  6. 看计算机发展史上的成功者 • Edsger Wybe Dijkstra • Dijkstra最短路径算法 • Semaphore概念 • Goto语句的论述 • THE multiprogramming system

  7. 看计算机发展史上的成功者 • Tony Hoare • 1960年发明Quicksort算法 • formal language Communicating Sequential Processes (CSP)

  8. 看计算机发展史上的成功者 • Anders Hejlsberg • 主攻编译器 • Turbo Pascal、Delphi的设计师 • VJ++、.NET的设计师

  9. 看计算机发展史上的成功者 • Donald E. Knuth • “The Art of Computer Programming‎” • TEX排版软 • KMP算法

  10. 看计算机发展史上的成功者 • Ken Thompson & Dennis M. Ritchie • UNIX • B & C语言

  11. 看计算机发展史上的成功者 • Bjarne Stroustrup • C++ Creator“I designed and implemented the C++ programming language” from his homepage

  12. 看计算机发展史上的成功者 • Richard Stallman • Emacs (GNU Emacs) • GNU C complier • GNU debugger • The founder of GNU project, and the author of GNU GPL

  13. 看计算机发展史上的成功者 • 王选 • 当代毕昇

  14. 理解软件和程序 • 软件 • 代码和数据,融入了各种知识,算法,经验,等许多无形的东西 • 程序 • 软件的执行流,可以理解为指令流,也涉及到环境的信息:输入、输出、存储介质 怎么理解“a= a+1”? 数学中的“ai+1= ai+1”?

  15. 计算机是如何工作的 机器代码

  16. 程序在哪里 • 纸带上的程序 • 磁带中的程序 • 软盘上的程序 • 光盘上的程序 • 硬盘上的程序 内存中的程序

  17. 哪一条指令,哪一个数据单元? • 刚开始那个?上一个?下一个?还是最后那个? • 第0个?第1个?——编号 • 索引——一维,还是二维? • 地址,可寻址的 • 每条指令,每个数据单元都有地址 • 在有些语言中,称为“指针(pointer)”,或者“引用(reference)”

  18. 内存,外存 • 机器有内存,要执行的代码,以及在执行过程中要用到的数据都在内存中 • 机器也有外存,很多种,像硬盘、U盘、CD-ROM,等等 • 一般而言,外存比内存大得多,对于计算机的运行,内存是必不可少的 • CPU直接操作内存中的数据,而外存中的数据被换到内存中以后,才能被CPU使用

  19. 计算机会做什么 • 计算,加减乘除,位操作,浮点运算 • 挪内存中的数据单元

  20. 从机器代码开始工作 现在,这种能力接近于特异功能了,虽然实际上,正常人都能学得会

  21. 在汇编语言上工作 能够精准地控制计算机做最微小的事情,控制力很强,但工作效率低下 时钟频率的提高,人已经无法手工处理如此巨量的指令

  22. 进入高级语言 • 用高级语言来告诉计算机该做什么 • 通过编译器,把高级语言的语句翻译成计算机的指令 • 高级语言更加接近于人们的思考方式,和数学描述 • 主流的语言:Basic,Fortran,Pascal,C/C++,Java,C#,Python,等等

  23. 语言和算法 • 把想法变成用高级语言来描述的程序代码 • 进入程序设计(programming),俗称编程序 • 算法是一种知识的积累,用于完成一些常见的任务。 • 熟练掌握常用的算法是大学期间的学习任务之一 • 对于某些算法,清楚其细节,包括其性能

  24. 常用的数据结构和算法 • 以下数据结构需要熟练掌握 • List, stack, queue, binary tree • 以下算法需熟练掌握 • Sorting,基本的hash算法 • 字符串的处理 • 建议研习STL

  25. 程序设计是一门艺术 • 在程序设计过程中,除了程序和代码本身,还有许多相关的东西 • 程序设计中的思想 • 结构化的思想 • 面向对象的思想 • 类型泛化的思想 • 虚拟机的思想 • 你的程序是一件艺术品,如何迎接同行审视的目光

  26. 写代码的层次 • 按照任务指示,写一个没有下家的程序 • 只要正确地完成功能 • 写一个给大量用户使用的程序 • 考虑到用户的各种意外行为,要健壮 • 写一个可复用的程序组件 • 对接口的理解和实现,包括错误处理 • 写一个代码库,供自己及同伴使用 • 预知客户的行为,库的扩展性 • 写一个开源软件 • 你的面子全在程序上了

  27. 大学时期的程序设计课程 • 汇编语言一定要学,要学到精通掌握 • 精通一门高级语言,推荐C++ • 数据结构 • 算法课程、离散数学 • 建议再学习一门数值计算 • 编译原理 • 软件工程 • 高级程序设计(选学,像网络编程、设计模式等)

  28. 如何自我训练 • 靠老师?靠课程? • 师傅领进门,修行在个人 • 自悟 • 自己最了解自己:你明白了多少,还有什么不明白的。 • 强力训练 • 写程序也是一门工艺,熟练活——功到自然成 • 忌盲目训练——时时反思 • 找一个选题,别担心重复选题

  29. 定位自己 • 基础知识是必需的,没有别的选择 • 平台和工具,甚至语言,你都可以选择 • 平台是相通的,工具是相通的,语言基本上也大同小异 • 精通其一,可走遍天下 • 发扬和控制自己对技术的情绪 • 利用在校时间,把基础打好

  30. 工业界怎么筛选学生 • 基础无疑是最为重要的 • 解决和分析问题的能力 • 动手能力,编程经验

  31. 关于计算机图书 • 少而精 • 每个主题,选一本适合自己的书来精读 • 再选一本参考书,如果上一本不适合做参考 • 建议完整地读几本英文书,中文书可作浏览用

  32. Thanks!

More Related