地址:http://bbs.sysu.edu.cn/bbstcon?board=CS&file=M.1267951351.A
发信人: kyhpudding
(只要衫除实得~), 信区: CS
标 题: IT 民工男的 CS 课程记忆
发信站: 逸仙时空 Yat-Sen Channel (Sun Mar 7 16:42:31 2010), 转信
先介绍下自己, 03CS 本科
在某更懂中文的地方混了两年多, 做社区产品, 后来做基础平台
带项目带新人前端到后端应用到底层跟各部门死磕无处不折腾
每年都为可以公费回广东回来校招, 据说是杀手, 不过我不觉得
最近在一以企鹅为吉祥物的公司继续折腾
此文仅代表个人观点, 也只包含个人经验
聊聊 CS 本科各种课程对实际工程工作,
更准确点, 对典型互联网行业的工程工作的影响
试图回答: 这些课程有啥用? 以及, 为啥面试会问这种 BT 问题?
不过如果你不希望走技术方向, 或者希望折腾一下技术就"转管理"
请忽略这篇文章
首先是数学, 我本科四年最后悔的事就是没把数学学好. 掩面, 这个问题先不谈.
程序设计, 首先是语言问题. 可能大家会抱怨出来工作基本都是 java C# 了, 为毛
大学还在教 C++, 落后! 好吧, 我最熟悉的语言其实是 C 语言......
我们看程序设计担负的任务. 一方面, 你必须掌握一门跟计算机沟通的语言, 否则后面
的课根本没法学. 另一方面, 通过学习程序设计 --- 而不是某一门特定语言, 掌握一些
基础的设计方法和一些思路, 为进行真正的工程开发做准备.
从掌握计算机原理, 以有效利用计算机的角度考虑, 应该选一门相对低级的高级语言,
这自然是 C, 它对于一些底层问题: 硬件, 数据结构, 底层操作系统机制等
提供了合适程度的抽象, 把我们对计算机的认识从底至上衔接起来: 写汇编时, 你得知道
指令对底层硬件的意义; 同样的, 你需要能把 C 的循环, 数组寻址, 指针在汇编上
到底是什么解释清楚, 你需要知道函数调用压栈的到底是什么数据, memcpy 到底怎么
拷的数据 (经典问题). 到学 OS 时, 如果用 linux (或任何 UNIX-like) 做教材样本,
你得有很扎实的 C 语言功底, 才做得来操作系统实验, 或者至少理解系统调用用怎么
完成. C 是系统底层的标准语言, 扎实的 C 语言基础是了解系统底层原理的
敲门砖, 至于为什么要对这些计算机系统底层如此了解的原因, 我们下面再谈.
另一方面的任务, 涉及到许多人每天的工作 --- 程序设计. 两个分支: 数据结构和算法,
软件设计范式, 抽象, 建模现实世界问题, 提供计算机解决. 这要求有一个能让底层细节
不会阻碍思考, 而且相对实用的语言. 越来越多的大学使用 Java, 当然也有不少人讨厌
这个, MIT 使用 scheme 和 python. 从达到教学要求角度看,