寄托天下 寄托天下
查看: 36940|回复: 103
打印 上一主题 下一主题

国内五年码农谈一点个人对CS的看法 [复制链接]

Rank: 8Rank: 8

声望
174
寄托币
24426
注册时间
2014-12-24
精华
1
帖子
3174

2016 US-applicant 加拿大offer勋章

跳转到指定楼层
楼主
发表于 2016-1-12 13:59:46 |只看该作者 |倒序浏览
本帖最后由 codercaspar 于 2020-9-22 03:16 编辑



===============================关于CS=============================

CS这个话题被无数留学党吵过了,我也不凑这个热闹。我这就是把我当码农的经验和对这个行业的一点看法介绍给大家。这个论坛上大多数人应该都没有我大,有实际经验的应该也不多,所以也算给大家的决定加些信息依据吧。

我在第一段码农经历的末期已经对这个工作绝望了,天天加班改bug,觉得编程不过如此。那时候甚至动了转到海外销售的念头,这事之所以没成是因为我遇到了一个人,他把我招入他的团队。他让我看懂了什么是真正的CS,什么是好的代码,想写出非常漂亮的代码需要什么。可以这么说,和他一起工作的两年所获得的经验以及认识也是我出国留学的原因之一,我很清楚的知道了我要什么但目前我还缺什么。所以我在这里负责任的说,编程这个工作,如果往下挖,深不见底。

接下来,我想谈谈软件行业本身到底是干什么的。我认为,简单说,软件行业的本质就是通过计算机强大的计算能力把人类从各个行业中的重复的,机械的劳动中解脱出来。所以从这个角度说,计算机编程是对各个行业的升级改造,就好像第一次工业革命时蒸汽机对动力系统的改造。这个东西躲是躲不掉的,必须积极拥抱上去。

所以,写代码本身只是基本功,是基础。想要在这行干得好,你一定要对你所解决的领域本身有出色的认识,清楚的知道你在用软件做什么,能改造这个行业的什么部分,然后实现它。

其实,我一直在想怎么向行业外的解释,想了半天就用通俗易懂的分级给大家讲解一下吧。分级分的比较随意,大家看看意思就行了。

想干这个行业,要经过这些关。

第一关,要会编程语言。这是最最基础的了。我上学那会大家都是学C/C++,现在大学好像是教Java。针对这部分内容,我个人的建议是要多学几种编程语言,会的多你的思路才不会窄。思路不窄,走的路才宽

个人建议是 过程类语言会一个,比如C。OO类语言会一个C++或者Java。函数类语言会一个,比如LISP,HASKELL。最好科研用的也会一个,最常见的就是Matlab了。
这些语言都掌握后,再出现新语言你就不会犯怵了。Python,Javascript还是Go,随便来。千变万变,不离其宗。了不起就是这几类编程语言所代表的哲学的混合产品。

第二关,会点算法。Leetcode刷起来,如果有时间,建议算法导论刷起来。如果还觉得不过瘾,请刷高老爷子的TAOCP。

等你过了这两关后,可以说就具备了当程序员的基本条件了,可以去撸面试了。但要认识到,这两点只能保证你从基层干起。你进入公司后多半先给你培训,培训什么呢?就是我之前说的招你这个公司所要做的软件的业务类型和业务知识。比如我第一份工作是做路由器软件,那你多少要知道些路由,报文交换,TCP/IP这类的知识吧。做底层编程,那中断啊,CPU架构神马的你总要有概念吧。做办公软件,那办公审批流程你总得理解吧。

第三关,精通业务模型。随着你工作的深入,你会发现现在很少有软件是可以独立完成的,都是集团作战。那多数码农在干了2,3年后就会多半面临如下两个选择:一个是自身的编程能力不错,对业务也熟悉不少,再学点行业流行的软件框架之类的,那你可以升职为设计师,架构师。因为软件是一堆人开发,也有的人组织能力强,协调能力强,交流能力强,能在领导面前表现,事情能安排的井井有条,那就成为开发经理,对外接口人神马的。当然现实的情况比这个要复杂,而且现在也有了一个开发经理和设计师杂交出来的职位-产品经理(我是指软件产品啊)

如果你过不了第三关,那么就会一直是个码农。这是很现实的,我知道的很多人,因为理工科学生自身不太会表现自己,也意识不到工作协调的重要性,加上自己也没想那么多,领导给的活做完就不管了,自己回去就看动漫玩游戏,根本不在业务或者产品视野上对自己充电,所以一直就是个“写代码”的。

第四关,这个就比较简单了。设计师继续积攒经验成为总工程师,开发经理则升级为项目总经理这类的。当然能来回交叉,两个方向都做的来的高手也不少见。

这只是为了方便大家理解,我把软件工作很简化了。大家可以看看,自己的兴趣,爱好和天赋在哪里,能否适应这个工作的要求?

当然,学习计算机理论是另一个话题,也是我感兴趣的方向,也算是我出国留学的原因之一。大家有兴趣的可以和我私下讨论。
这里我加点私货,我觉得,计算机界的大神都是理论界和工业界都搞得定的大牛。

===============================总结===============================

我只是简单的把软件这个行业的大概给大家粗粗的描述了一下,让大家对这个行业以及行业内部的上升通道有个印象。

至于这个行业是不是青春饭?年纪大了就学不动了吧?能挣钱吗?竞争激烈吗?等问题,我之前在别的帖子里说过了,想了解请移步

https://bbs.gter.net/forum.php?mo ... ge=28#pid1779969478
https://bbs.gter.net/forum.php?mo ... age=5#pid1779229736

============================一点补充===============================

基本上具备了第一关和第二关的能力,就可以出来面试了。你看基本上公司面试都要求说熟练掌握XXX语言,但你仔细看多数还有一条,就是计算机专业,数学专业优先考虑。不知道大家有没有想过为什么会这样?因为他们是科班出身。那科班出身的到底有什么优势呢?

我之前也说在第一份工作末期,我对编程工作已经绝望了。原因就是系统有无穷无尽的bug(不是我的代码导致的,我的代码bug不多),每天工作就是在不停的找bug和改bug。我在思考为什么会这样,一直没有结果所以一度认为这工作太操蛋。后来我遇到了高手,终于弄明白一点。

结合我之前说的程序员们在第三关面临的两条路。如果走向开发经理这条线,简单说,就会研究各种开发模式。比如瀑布性开发(当年灯塔国开发战斗机时用的模式)到现在很流行的敏捷开发。开发经理就需要根据这些开发模式的特点结合自己手上开发人员自身的素质和任务本身做相应的工作任务分配等,然后带领大家奔着一个目标努力前进。

产品经理则高端一点,不仅带领大家前进,还要自己去找前进的目标。

我个人是想走另外一条路的,所以对此也有点心得。为什么很多程序员在干了2,3年后都会觉得编程不过如此。一个原因(发生在我身上的)就是业务模型本身没有和编程结合起来。听起来很扯淡,但这是真的。简单的说,代码就是业务模型的具体展现,是你脑子中业务概念的现实存在。有些人是业务本身一团浆糊,所以代码写的烂。更多的则是没有把代码和业务结合得很好。脑子里想的挺好,代码写出来就不是那么回事,所以bug不断。或者是代码写的太死,业务模型一有改动,代码修改起来要累死人的节奏。我一开始就是卡在这里,时间久了觉得这事也不过如此。但给我第二份工作的那个研发高手用自身的实力告诉我"你啊,too naive, too simple"。本来是有很好的方法的,只是你不知道。方法是什么呢?就是数学。。。。

简单的说,比较好的办法是用数学的抽象思维去思考整个业务,提炼出核心概念,周边概念。再思考出各个概念之间的关系,映射到数学的运算关系上,然后两个概念“运算”后有一个新的概念,把这个概念再加进系统中,思考其与其他概念的逻辑关系。(我只能这么描述了,想有更多请看SICP这本书)

所以也就是说突破第三关的一个关键就是要有足够的数学思维,理论背景。当你把业务抽象后,代码清晰可读,容易变动而且还没有bug,看起来就像读数学公式一样过瘾。(这是我亲眼所见)此外就是再加上些工程师的思维方式,比如要会做取舍,要清楚自己系统和硬件的极限在哪里等。这几条你都具备了,想不成为一个优秀的软件设计师,架构师都难。

又啰嗦了这么多,仅供大家参考。大家可以看看软件之路各个分支上需要怎样修炼再看看自己是否具备和喜欢不同方向所要求的不同素质。这样在做决定时就不会太盲目了。

========================补充=======================================
在知乎上看到  安江泽 对 作为一个程序员需要学多少技能? 这个问题的回答。觉得他总结得非常好,比我说的清楚的多了, 所以借花献佛, 把他的回答贴过来, 给大家作参考。

====================================================
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
作者:安江泽
链接:https://www.zhihu.com/question/20376060/answer/14943398
来源:知乎

1. 学好"物理"。 基础算法和数据结构。是计算机世界的基本定律,是程序问题的终极答案;
2. 学好“化学”。 各类系统和语言的关键性质,提供能写出优秀程序的原料;
3. 学好“生物”。 不同的技术构成不同的生态系统,不同的生态系统有不同的规则。程序符合生态系统环境,才能长成参天大树。
4. 学好“历史”。 技术从哪里来,要到哪里去;
5. 学好“文学”。 写明白文档,表达好逻辑,起得好名字,用得好隐喻;
6. 学好“建筑”。 钢铁,水泥,脚手架,防灾,抗压,无单点,架构是系统的核心;
7. 学好“艺术”。 写程序对得起自己的眼睛,做产品对得起用户。
8. 学好“经济”。 成本、收益和时间帮助你做编程时的主要决策。
编程世界是真实世界的缩影。程序员要做的就是先“高中”毕业,然后选择一个最擅长的专业继续深造。
====================================================
已有 7 人评分寄托币 声望 收起 理由
wt03 + 6 赞赞赞!
legenddaniel + 1 瞻仰膜拜
anranzhilv + 10 + 5 感谢分享
Arthur M7 + 8 大神啊!
happymiaomiao + 8 赞一个
kuyigougou + 10 + 5 原创就是给力
云舞2012 + 1 逻辑清晰,一目了然,感谢分享!

总评分: 寄托币 + 20  声望 + 34   查看全部投币

回应
35

使用道具 举报

Rank: 6Rank: 6

声望
187
寄托币
2379
注册时间
2012-3-11
精华
1
帖子
873
沙发
发表于 2016-1-12 14:53:50 |只看该作者
感谢分享~~感兴趣的坛友应该有很多

使用道具 举报

Rank: 4

声望
55
寄托币
454
注册时间
2013-7-11
精华
0
帖子
143
板凳
发表于 2016-1-12 15:33:17 |只看该作者
本帖最后由 云舞2012 于 2016-1-12 15:35 编辑

      您把CS专业以后从事工作的方向分几个层次写得很清楚,非常感谢您的分享!
      我的儿子目前在加拿大就读11年级,本科想读CS专业。目标是滑铁卢大学,成绩虽在上升阶段,平均分尚不能保证达到90分以上。以后就业想去多伦多,因此大学想选在东部,如果第一选择是滑铁卢大学,第二第三依次选哪些大学的CS申请比较好呢?孩子的平均分预估应该能在85分以上,在学校选修了计算机软件的课程,成绩A,12年级计划学计算机的AP课程,这对申请滑铁卢大学有帮助吗?
      非常感谢CS专业人士一直以来在这里的分享,让我受益匪浅,希望能在孩子申请加拿大的大学CS专业问题上得到你们的无私帮助,谢了先!
已有 1 人评分声望 收起 理由
Stephilosophy + 3 为孩子操心了,父母对孩子的爱使人感动!

总评分: 声望 + 3   查看全部投币

使用道具 举报

Rank: 3Rank: 3

声望
140
寄托币
646
注册时间
2013-10-30
精华
0
帖子
91

美国offer勋章 加拿大offer勋章 香港offer勋章 新加坡offer勋章 英国offer勋章 欧洲offer勋章 澳洲fall勋章 梦舞槿樱

地板
发表于 2016-1-12 15:39:49 |只看该作者
深表赞同,我记性太差了,算法看完就忘。。。。
友商 诺基亚发来贺电

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
2929
寄托币
33718
注册时间
2009-9-28
精华
6
帖子
20229

寄托优秀版主 Aquarius水瓶座 枫华正茂 一帆枫顺   烤鸭大厨 在任资深版主

5
发表于 2016-1-12 21:09:58 |只看该作者

使用道具 举报

Rank: 9Rank: 9Rank: 9

声望
2929
寄托币
33718
注册时间
2009-9-28
精华
6
帖子
20229

寄托优秀版主 Aquarius水瓶座 枫华正茂 一帆枫顺   烤鸭大厨 在任资深版主

6
发表于 2016-1-12 21:13:14 |只看该作者
工作以后深感与人沟通的重要性啊 多了不敢说 找不到工作的人80%以上有英语不够好的原因

使用道具 举报

Rank: 5Rank: 5

声望
187
寄托币
2227
注册时间
2007-6-27
精华
0
帖子
303
7
发表于 2016-1-13 00:51:38 |只看该作者
一点实际操作建议:
第一关,看编程语言的manu对某语言快速入门
第二关,刷题,leetcode跟cc150来回刷
第三关,自己做project,idea来源于网上,甚至可以是公开课的project

使用道具 举报

Rank: 8Rank: 8

声望
174
寄托币
24426
注册时间
2014-12-24
精华
1
帖子
3174

2016 US-applicant 加拿大offer勋章

8
发表于 2016-1-13 01:18:35 |只看该作者
云舞2012 发表于 2016-1-12 15:33
您把CS专业以后从事工作的方向分几个层次写得很清楚,非常感谢您的分享!
      我的儿子目前在加拿 ...

申请大学这事我不是很了解,自己当初申请时也是瞎蒙吓投的。恐怕帮不上什么,不好意思。

使用道具 举报

Rank: 8Rank: 8

声望
174
寄托币
24426
注册时间
2014-12-24
精华
1
帖子
3174

2016 US-applicant 加拿大offer勋章

9
发表于 2016-1-13 01:19:47 |只看该作者
kanghq 发表于 2016-1-12 15:39
深表赞同,我记性太差了,算法看完就忘。。。。
友商 诺基亚发来贺电

^_^,同忘。所以只能时不时的重刷

使用道具 举报

Rank: 8Rank: 8

声望
174
寄托币
24426
注册时间
2014-12-24
精华
1
帖子
3174

2016 US-applicant 加拿大offer勋章

10
发表于 2016-1-13 01:20:44 |只看该作者
wrath 发表于 2016-1-12 21:13
工作以后深感与人沟通的重要性啊 多了不敢说 找不到工作的人80%以上有英语不够好的原因

嗯,会哭的孩子有奶吃啊。
昨晚太晚了没写全,我刚才又补充了点。

使用道具 举报

Rank: 8Rank: 8

声望
174
寄托币
24426
注册时间
2014-12-24
精华
1
帖子
3174

2016 US-applicant 加拿大offer勋章

11
发表于 2016-1-13 01:23:29 |只看该作者
wilsoj 发表于 2016-1-13 00:51
一点实际操作建议:
第一关,看编程语言的manu对某语言快速入门
第二关,刷题,leetcode跟cc150来回刷

第一关:对的,想了解大概看man就行。有时间则建议还是好好的了解这个语言当初被设计时背后的哲学是什么。
第二关:仅仅想找工作就刷题库。想提高一级就去看看算法导论这类书,基本上算法设计都是有一些核心思路的。
第三关嘛:github我觉得就不错,好多开源项目在上面,没事可以看看。

使用道具 举报

Rank: 7Rank: 7Rank: 7

声望
377
寄托币
4851
注册时间
2011-4-29
精华
2
帖子
903

寄托兑换店纪念章 新任版主 2016 US-applicant 商学院offer勋章 加拿大offer勋章

12
发表于 2016-1-13 05:01:34 |只看该作者
云舞2012 发表于 2016-1-12 15:33
您把CS专业以后从事工作的方向分几个层次写得很清楚,非常感谢您的分享!
      我的儿子目前在加拿 ...


虽然不知道这边高中成绩对应能申请什么学校,但对这边CS学校还是有所了解,我个人觉得加拿大CS的第一梯队只有2所UT &Waterloo,如果想本科毕业就就业的话waterloo首选,否则我觉得多大更适合继续深造, 第1.5梯队就一所UBC稍微次于上面2所,加上位置是startup比较多的温哥华, 第二梯队就不好说了,我觉得SFU应该在第二梯队,其他的就不说了,主观性太强,你要申请的话,可以从UBC,UT,Waterloo三家里面选

使用道具 举报

Rank: 7Rank: 7Rank: 7

声望
179
寄托币
4204
注册时间
2012-8-3
精华
0
帖子
1892
13
发表于 2016-1-13 06:42:54 来自手机 |只看该作者
赞一个,希望可以一直幸福地白天写代码晚上看动漫就好了。。

使用道具 举报

Rank: 8Rank: 8

声望
174
寄托币
24426
注册时间
2014-12-24
精华
1
帖子
3174

2016 US-applicant 加拿大offer勋章

14
发表于 2016-1-13 06:52:55 |只看该作者
happymiaomiao 发表于 2016-1-13 06:42
赞一个,希望可以一直幸福地白天写代码晚上看动漫就好了。。

回家看动漫没问题,只要别只看动漫就行了。该干的活还得干。。。。

使用道具 举报

声望
77
寄托币
4504
注册时间
2007-2-7
精华
2
帖子
504
15
发表于 2016-1-13 08:27:44 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

使用道具 举报

RE: 国内五年码农谈一点个人对CS的看法 [修改]
您需要登录后才可以回帖 登录 | 立即注册

问答
Offer
投票
面经
最新
精华
转发
转发该帖子
国内五年码农谈一点个人对CS的看法
https://bbs.gter.net/thread-1934421-1-1.html
复制链接
发送
关闭

站长推荐

寄托24周年庆,发祝福送寄托币!
寄托24岁生日,邀请寄托的小伙伴在本命年周年庆发出你对寄托的祝福, 可以是简单的一句“生日快乐”, 送出祝福小伙伴将会有寄托币奖励!

查看 »

报offer 祈福 爆照
回顶部