西工大软件工程新学期(大三上)课程解读

不知道一门课为什么要学, 就很难有兴趣去学; 不知道一门课在整个行业中的地位, 就不知道应该学多深, 应该怎么学, 应该偏向实践还是偏向理论; 不知道一门课到底是干什么的, 就不知道学习的重点在什么地方. 为了在开学前搞清楚这些问题, 我想一边查资料一边思考, 同时一边打字记录下来.

根据数字工大公布的课表来看, 下学期起码有如下课程

  • 计算机组成原理
  • 汇编与接口
  • 数据库系统
  • 数据库系统实验
  • 网络与分布计算
  • 网络与分布计算实验

我还选了数字媒体技术, 另外由于很多人选网络技术与实践(上), 所以我也一并讨论.

  • 数字媒体技术
  • 网络技术与实践(上)

在这么多课程当中, 我只对<汇编与接口>相对了解, 其他科目我没接触过, 所以以下内容纯属瞎扯, 没有任何参考价值. 如有说错的地方, 那实在是很正常.

计算机组成原理 & 汇编与接口

所用教材豆瓣链接:

计算机组成原理 (教材:《计算机组成原理》,唐朔飞,高等教育出版社,2010)

汇编与接口 (教材:《汇编语言与接口技术》,冯萍,机械工业出版社,2002)

  • 为什么计算机能够执行一个程序?
  • 高级语言在编译过程中发生了什么?
  • 在没有C语言之前, 科学家们如何写程序?
  • 为什么黑客大多都精通汇编语言?
  • 那么多软件的"破解版"是如何破解的来的?

计算机组成原理和汇编有着千丝万缕的关系, 两者同时学习, 相辅相成. 有时候汇编看不懂, 是因为硬件结构没理解; 有时候硬件结构为什么这么设计不明白, 是因为汇编语言没学好. 这种矛盾关系造成了这两门课有趣的关系. 喜爱看硬件杂志的(比如《微型计算机》)会从更深层面了解硬件的性能参数对总体性能的影响, 喜欢玩机械的(机器人, 航模)也会得到机器是如何运作的更深的了解, 同理也很适合喜欢拆手机玩的. 我曾经浏览过一本"自己动手制作机器人", 其中很大的篇幅使用了汇编语言控制电机和机械臂.

我曾经用文曲星电子词典来学习汇编语言. 那是一台文曲星nc1020, 可以安装上汇编器, 有功能强大的debug可以执行, 调试, 反汇编. 当时用的是6502的cpu, 苹果II就是用的这个cpu, 玩超级玛丽魂斗罗的游戏机也是用的这一个cpu, 因此如果学习6502的汇编语言, 那么甚至可以去看看超级玛丽的汇编代码(一个浩瀚的工程). 但是我们不学这些老掉牙的过时的东西, 而会学习目前大部分个人电脑都在用的Intel的80x86系列的汇编. 我个人不支持学习Intel架构的cpu, 这个cpu结构并不是设计得很好的一个结构, 而是Intel商业运作得好的垄断结果. Knuth提出的一种理想结构和英国的ARM芯片(目前绝大部分的手机平板都在用这个)的结构都是更好的学习对象.

魅族的黄章当年做MP3和MP4出身, 我想计算机组成原理学得好的话, 自己设计一个MP4是不成问题的(如果真要设计估计电路方面的知识会比较缺). 当年的电子词典是怎么设计的, 车载gps是怎么设计的, 智能路由器, 山寨手机和智能手机的硬件区别, 都可以运用这两门课的知识来深入理解.

从豆瓣图书来看, 这两本书都非常普通, 尤其是汇编与接口一书更是无人评论. 国内教材还是用来考研比较合适. 若要真想学的有趣而又扎实, 还是国外引进图书靠谱. 这两门课都配有上机实验课, 我想实验课是非常重要的. 理论可以自学, 而且自学或许会更有趣; 组成原理实验课需要用的设备是自己很难找到的, 汇编语言的实验如果没有人带也是不好搞的. 我观察课表, 貌似是先上若干周的理论课, 上完理论之后, 再上若干周的实验. 私以为这样相当不科学, 纯上理论课几乎注定让这门课成为很无聊的一门记忆课.

说到汇编必须八卦一本小说, 叫做**《疯狂的程序员. 这是我为数不多的看小说看通宵的其中一本. 书里写的都是发生在作者身上的真实故事, 而且作为一个技术宅能写出一本挺像样的小说(豆瓣评分8.0)很难得. 主角绝影坚持用汇编语言开发程序, 他的好朋友BOSS刘**则一贯推崇c++. 从大学刚入学倒卖圆珠笔芯写到后来在创业公司当全栈工程师, 都非常有趣.

 

数据库系统 & 数据库系统实验

教材:Database Systems: A practical approach to Design, Implementation, and Management. 4th Edition ISBN: 0321210255 (英文教材??)

参考书:自编讲义

前不久舍友fredchen从外面回到宿舍, 大声宣布一个事情, 然后就出发去游历祖国大好河山, 到上海, 哈尔滨考察, 还拿了个大奖. fredchen所宣布的就是现在数据库好赚钱啊, 好赚钱, 一个星期赚n万, 工作几天就可以放假一个月了..(看看安徽人)

通过下面<推荐阅读>的"怎样用三句话向一个8岁小孩解释什么是数据库“一文, 估计可以把数据库是什么东西理解清楚了.

当年我还没出生的时候, 比尔盖茨在个人PC市场上, 首次把软件拿来卖钱. 在那以前软件都是搭配硬件出售的, 软件本身单卖卖不出, 因为当时硬件没有一个标准, 软件开发在这一台设备开发出来, 到另一台设备就运行不了了. IBM兼容机的大规模出现使得比尔盖茨的卖软件的想法得以实现, 而且微软也因此成为了当时IT界的商业帝国.

企业级市场上, 和比尔盖茨做的几乎一样的事情的就是拉里·埃里森创办的甲骨文公司Oracle. 话说隔壁薛主席还是我们学校Oracle俱乐部的主席. 当时IBM的数据库占了市场了大部分, IBM公司里的员工埃里森创造了一种"关系型数据库”, 但是IBM不重视. 所以埃里森就出来创办了甲骨文, 同时他们家的关系型数据库最后也红遍全球. 2013年, 甲骨文已超越 IBM, 成为继 Microsoft 后全球第二大软件公司. 又是一个狗血的剧情啊..

从我们不了解甲骨文就可以知道, 对于目前学校已经上过的所有课程来说, 数据库这门课是一个新知识, 他开启了到为企业服务的公司工作的大门, 同时也为网络开发设下了铺垫. 现在机器学习技术越来越火, 而这门技术又要建立在海量的数据上面, 同时由于信息量的增长速度是指数级别的, 数据库技术在今后很长很长一段时间里, 都将充当非常重要的角色. 越来越多的企业, 包括很多传统企业想要互联网化的企业, 都需要这门技术来为他们服务.

我曾经玩一个有趣的纯文字游戏Hattrick, 大概是一个足球冠军总经理的online版. 在他们的论坛上我发现了一个他们内部的小故事. 因为游戏当时越做越大, 每周发生几万场足球比赛需要机器来计算模拟进行, 庞大的虚拟球员数据需要每周更新, 他们需要招聘一个搞数据库的工程师. 后来在他们瑞典找到了一个优秀的很有经验的家伙, 那家伙来到Hattrick了解了一下情况后, 惊呼"我这辈子还从来没见过这么庞大的数据库!!", 然后兴奋的立刻同意从另一个城市搬家过来加入他们的工作. 我想数据库领域也是一个充满激情的领域吧.

我决心要用这门课学的知识以及下面说的计算机网络知识写一个小东西, 可以运行在网上某个服务器上(比如我用的新浪SAE, 或者可以用阿里云的半年免费服务器). 虽然我有这样的想法, 但是完全没有任何头绪要去做什么. 首先我想做一只爬虫, 让它在互联网上面爬来爬去, 这样才能收集到原始数据. 有了海量的网上的数据, 数据库开发才变得有意思. 我想这样会很有趣, 有想一起搞的最好了! 告诉我我们就一起讨论. 弄得好通过了新浪的开发者认证, 那么云豆就用不完了哈哈哈哈…

在我开始玩新浪的SAE以后, 我发现其中很多术语我看不懂, 而且和数据库很有关系. 除了学校教授的关系型数据库, 最近越来越火的KVDB是什么我也不知道, 更无从体会为什么他能够在关系型数据库垄断市场的情况下异军突起.

这些都让我对这门课充满期待.

 

网络与分布计算 & 实验

教材:Computer Networking: A Top-Down Approach Featuring the Internet. 4rd edition  (又是英文教材?)

参考书:Java(TM) Network Programming and Distributed Computing . First edition

我的水平单看标题完全看不出来要学什么. 所以还是上豆瓣看看教材介绍. 从参考书上来看, 很可能用的语言是Java. 我觉得用什么语言都不是重点, 所以无所谓, 但是如果换成用python来讲我会更喜欢.

这两本书, 第一本讲的是网络, 第二本讲的是分布计算. 这是个互联网的时代, 数据库那门课和这两门都让我非常兴奋, 我觉得学这些东西非常棒, 我很喜欢, 都能够让我开发出我以前没有能力开发出来的新的东西. 对于第一本书, 教材, 从豆瓣来看, 很难得, 学院给这门课挑了一本好书, 这也让我很开心. 我相信这本书能够告诉我很多我想知道的东西, 比如网络里面的各种协议, TCP/IP, P2P之类的. 他自顶向下的介绍顺序也让人更有兴趣去了解网络, 层层深入.

数据库和网络学好, 未来有很多种精彩的可能. 玩数据挖掘, 管理数据中心, 建设网络后台. 网络工程师的工作很有意思. 上个学期我回家的时候, 在县城里看到电信在宣传25m的网络. 这次回来, 我看到那个广告牌已经换成了100M的速度. 网络的发展真的是非常快, 随着网速的增长, 网络可以做的事情越来越多, 本世纪互联网在方方面面改变人类的生活, 生产方式, 互联网起着非常重要的作用, 这两门课学好, 可以说是更新了程序员在新时代下的兵器, 就像长枪长矛变成火药.

关于分布式计算, 我还是想到了机器学习, 数据挖掘. 海量数据的处理是很麻烦的一件事情. 我在看«机器学习实战: python语言实现» 的时候, 这本书的作者就说书中一些习题用我们的笔记本电脑要算上一个星期才能出结果. 但是Amazon给出了解决方案, 我们可以租用他的计算机群集, Amazon用众多服务器进行分布式计算, 就能在几分钟之内完成课本的习题, 而只要付出几块钱就能使用这些服务. 随着网络的发展, 客户端的性能要求越来越低, 服务器的性能要求越来越高, 同时也为了延续摩尔定律的速度给人类带来的极大好处, 分布式计算一样是越来越重要的一门技术.

 

选修: 网络技术实践(上)

这门选修课年年都很火. 我选修学分选够, 所以这门就不选了, 节省三百块钱. 如果好听旁听也是可以的. 据说是思科的人来讲这门选修. 最近我看《浪潮之巅2.0》, 发现思科真的是很厉害. 如今世界上这么庞大一个网络, 需要非常多的类似路由器的设备. 这些东西当年几乎全是思科提供的, 如今中国的华为越来越火, 很有希望赶超思科在这一领域成为世界第一, 值得关注.

这门课介绍的东西听说是很实用, 但是听说到的信息太少, 实在不知道到底是讲什么的. 如果是讲路由器怎么用, 虽然很精彩, 但是也不可能讲一个学期. 所以其中精彩只能上课后才知道了.

 

选修: 数字媒体技术

老师是聂煊.

听说很好过.

畅神希望我学完后能够做出bilibili上面那种很黄很暴力的动漫给他看.

畅神真邪恶.

 

一些闲话

总的来说, 学校开设的课程是不错的. 详细来说, 某些课的教材选的很好(网络), 某些课的教材选的很烂(汇编), 某些选的一般般(组成原理, 数据库). 由于学的东西比较多, 同时又很多新的理论, 尽量争取时间来进行编码实践是很有必要的. 一个网络方面的小项目的开发是一个不错的选择, 希望有人加入和我一起完成, 小项目合作使用github来管理, 如果人少很正常, 如果人多也可以很方便的用github搞出不同的分支. 鉴于GFW的问题, 可能会选用gitcafe, 也可能不会.

 

推荐阅读

下面这些文章我都看过, 确实写的不错噢:

怎样学习和理解计算机组成原理?

怎样用三句话向一个 8 岁小孩解释什么是数据库?

《计算机网络》这门课为何如此之难?