查看: 7171| 回复: 20
收起左侧

[经验总结] CS != 编程, SE != CS

substring | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   3
100%
0%
0

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
第一次在这里发帖。觉得这个论坛不错,早上醒来睡不着,胡乱写点个人经验。

其实我没啥资格在这里指点江山什么的。我本科学的数学,跟着别人搞过创业(跟在牛人后面做小弟),也在大公司干过,做过一些说起来很牛其实就那么回事的项目。现在在读软件工程。像清华啊科大啊之类的bbs,都是立志当科学家的牛人,俺说不上话。太傻之类都是集中在申请上。这里很多人都是准备读完出去工作的。带着明确的目的去做事,这很好。
.google  и
废话少说,讲一点个人经验,抛砖引玉。

CS不是编程,或者准确来说,我的想法是如果你去搞cs,不要想着编程,不要从编程序的角度思考问题。计算机科学是一种科学,而编程只是一个工具。站在工具的角度而非问题的角度去思考问题,这看起来很可笑。但很多人都无意识的偏向那么做,这也容易理解,因为编程比cs简单。如果我去面试一个CS的应届本科生,我绝对不会问他某种语言的细节,除非他在简历上写精通。我的第一个问题肯定是关于计算理论的。如果计算理论都不懂,computer science里的computer就失去了意义。 反过来说,学cs却一定要有编程的能力,因为程序运行的结果证明了理论在解决实际问题上的效果。.

SE不是CS。虽然大多美国学校,SE都在CS系里,但是这两者完全不是一回事。光从名字来看,一个是science,研究理论问题;一个是engineering,研究如何搞定实际的东西。SE里有一大块是搞PL和V(erification)&V(alication)的。在我看来,他们也不能算严格意义上的SE。比方说,搞V&V的,发多是研究formal verification或者各种测试的方法,就像数据结构,算法一样,只是一些可以用在实际中的理论,而不是去研究如何去组织测试,测试流程,根据不同项目的特点用不同的测试方法等等这些客观实际的东西。

如何才是一个好的software engineer?很多人自称software engineer,其实他们只是programmer。software engineer的要求比programmer高得多。不是我不鼓励学习技术,但是某个技术研究的再深,也不是software engineer,当然,有的人喜欢做技术专家。software engineer干什么? 比如去和客户沟通,写出一份完善的需求文档;给一份需求文档,做出合理的架构设计。不过,需求分析和架构,一个需要大量业务经验,一个需要大量技术经验。那我们谈谈design。熟读GoF的设计模式,可以把里面26种设计模式用java或者c++一一写出来,然后再娓娓道来他们的优缺点,就可以称精通面向对象设计了?当然不是。在实际的项目中,根据实际情况,合理运用设计模式,或者是设计模式背后的思想,那才是精通设计模式。设计模式等于是招式,照着招式来的都是菜鸟,武林高手,很多时候只用半招就足以杀人,或者连贯使用不同招式里的分解动作。software engineer还要懂测试。你问我编程在哪里?coding是软件工程里最不重要的一步。用一句话来说,may be challenging but not difficult。大多数工业界的项目,在技术上都没啥难点。或者相对其它方面的难点,技术难点不值一提。比方说,我做过的NYPD的911 Dispatch System,用了很多当时看来很高级的技术,有些合作方拿出的技术,连beta版都没出,我们拿着开发文档就开始用了。但项目中的难点却一点不是技术,而在于项目管理,流程和质量控制,需求分析,架构设计。. Χ

立足工业界,还有一个最重要的就是学习能力,很多人说it是年轻人干的活,其实真正的software engineer,越老越吃香。我一老美朋友,在Raytheon(搞军火的,爱国者导弹,战斧导弹都是他家的)工作了十几年。一个很难用的测试工具,我们都没有这类软件的经验,我研究了2个多小时才写出几个简单的可以正确运行的脚步,很多复杂的机制还搞不懂。他都写了十几个,而且不少复杂的命令都用到了。这就是十几年积累而来的学习能力。你说要是同样的职位,人家招谁?估计我愿意每天工作25个小时人家都不要我。

评分

参与人数 3大米 +106 收起 理由
lutianhan08 + 3 大赞!!!
EroicaCMCS + 100
兰橘清檬 + 3 欢迎来介绍你知道的情况

查看全部评分


上一篇:对选校有帮助,01-05MIS顶级刊物论文统计
下一篇:操作系统 。2010年重要会议列表(转载)
kevin8704 2009-8-18 22:22:54 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   51
100%
0%
0
1# substring


好文章,作为SE专业的筒子
我非常赞同LZ的观点,Coding是基础,我认为IT界也是有很多领域,纯Coding只是所谓的“民工”,扯不上研究。
但不可否认,CS又或SE有良好的编程基础,特别是设计模式里面的经验都学上,对做研究又或就业都是有绝对的好处。
回复

使用道具 举报

modifiedname 2009-8-18 22:28:34 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   15050
95%
5%
769
挖这个有意思,把se换成statistician, 后两段好像仍然成立
回复

使用道具 举报

Warald 2009-8-19 01:42:36 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   22333
93%
7%
1754
本帖最后由 Warald 于 2009-8-19 01:44 编辑

这个文章, 说得是工业界的开发应用,在这方面, lz说得很好.

学校里的东西, 跟lz说的,还是很不一样的,学校就是做一堆理想化的假设,然后在这些假设的基础上进行方法研究理论分析; 还有一类research, 生物的为典型, 就是基本靠做实验, 来发掘一下, 看看有没有未知的新东西.
. ----
Verification & Validation, 的确是软件工程里面不可缺少的步骤. 但是目前学术界的很多东西都是理论化的,没办法直接的大规模应用在工业界, 很多很漂亮的理论, 在工业界人士看来, 根本不reasonable. 工业界, 只能采用传统的测试技术.

但是硬件的verification就被广泛应用了, 追究原因,还在于软件开发本身的一些特点.
回复

使用道具 举报

molotov 2009-8-19 02:16:06 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   60
91%
9%
6
受益匪浅啊. "立足工业界,还有一个最重要的就是学习能力,很多人说it是年轻人干的活,其实真正的software engineer,越老越吃香。"
我一个小本还是从简单的coding做起吧, debug和testing也是学习能力的一种锻炼啊.
回复

使用道具 举报

egnaro 2009-9-18 14:46:37 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   0
0%
0%
0
重要的是学习能力,同意!
回复

使用道具 举报

congcong 2011-2-14 10:48:52 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   18
100%
0%
0
写得很好,老文章,赞一个。
回复

使用道具 举报

woshizoy 2011-2-14 13:01:36 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   6
100%
0%
0
标记一下~时看时新
回复

使用道具 举报

liuzxiao 2011-2-14 17:53:44 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   674
95%
5%
32
赞一个 同时mark之~
回复

使用道具 举报

churiver 2011-2-15 15:49:54 | 显示全部楼层
本楼:   👍  0
0%
0%
0   👎
全局:   30
97%
3%
1
赞,这就像习武,技术是外功,懂得怎样把这个技术应用到现实中去是内功。没有内功支持,外功只是屠龙之技。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表