Make a Donation
发信人: amrita (Amrita), 信区: CS
标 题: [分享]:转行CS成功经验
发信站: BBS 未名空间站 (Sat Oct 12 02:32:18 2013, 美东)
看到很多朋友讨论转行的事情,问题集中在'我是非专业,能不能转,怎么转,学什么'上.
作为一个成功转行的人,我来分享一下个人的经验,希望对大家有所帮助.
先说下个人情况:[起点]高考失利,被国内三本降分录取,服从分配到农学专业.[终点]
微软SDE.这里向大家传递的第一个信息是--起点这么低的人都能转,这些硕士博士、腿
肚子都比我脑瓜子聪明的人,怎么就不能转?要有信心,要有勇气!
下面分享一些转行过程中的关键点(正向能量)、痛苦(从中学到了什么)和弯路(你
应该避开).
[核心]转行指的是要在CS行业工作,而不是说新学了一堆CS的理论知识.所以,未来的学
习过程中要以培养生产力,无论是开发能力,还是测试能力,还是组织协调能力(文科同
学有可能会转项目经理或者产品经理).理论知识有助于更扎实地使用你的技能,但这回
是处在辅助地位.学位学习是知识为主,技能为辅,转行学习要倒过来,技能为主,知识为
辅.
[关键点0]不要在‘选择’上浪费太多时间,心动不如行动,想好转了就马上开始计划
,然后开始学习。很多人就是在拖拖拉拉的选择过程中几年也没转成。要开始学了,那
就选准一个方向(语言和程序方向,详见后面)开足马力学,不要纠结于“我是学Java
还是.NET?”“XXX语言好还是YYY语言好?这个的缺点是什么、那个的缺点是什么……”
[关键点1]你不必多喜欢计算机,但至少不能讨厌,不然它不能吸引你反而互相排斥,学什
么都学不进去的.
[关键点2]正确的计算机操作,很多人笑了.但你问问计算机玩的好的人,正确的指法和飞
一样的操作给他们带来了多少好处.
[关键点3]清楚的语言表达能力(女生有这方面的天赋).现在的程序大多是面向对象编
程,写程序基本上跟聊天一样.语言能力好的人思路清晰,用词准确,组织有条件,程序的
要求是一样的.如果你未来成为软件工程师,看到一堆胡言乱语般的代码,不信你找写代
码的人聊聊天,他说话肯定也那样.而且你想,汉语或者英语这么复杂的语言你都能说好,
词汇量不超过100个的编程语言哪有学不好的道理??
[关键点4]一个入门语言.建议C系语言,C/Java/C++/C#/JavaScript/Objective-C都是这
一系的,好处是个会了别的看着眼熟(尽管还是有些不一样的地方),而且语言排名里C
和Java不分伯仲, C++/Objective-C一直在争季军,C#在老五老六的地方呆好些年了...
不用多说了吧?C系霸占前五名,占就业市场的80%以上.如果你感觉C系语言看着不舒服
(相信我,每个人都有自己用着最舒服的语言,不见得你老婆/老公喜欢的语言你就一定
喜欢)你也可以试试Smalltalk系的语言,这系的语言动态语言居多,在排行榜上上升势
头强劲,多与Linux的文化有些渊源(跟BASH看起来像),Ruby/PHP/Python算是这系的(
PHP也有C系的血统,但个人感觉更Smalltalk一些).我走了[弯路], 是从VB开始的,又学
的DELPHI,原因很简单,一开始的时候对C系水土不服.后来喜欢上了C#才转过来的.之所
以能转,是因为VB.NET/DELPHI和C#/Java在面向对象方面的语法几乎一模一样.[信息]说
学通一门语言后再学另一门会很快,这是真的,一定要相信.后面还会说到.
[关键点5]入门语言怎么学?几个要点:(1)关键字里最重要的一批要都弄懂,会写实
例.汉语有20000多常用词汇,你看看本文一共才用了几个?编程语言也是这样,不到100
个关键字里,四五十个会用来应付80%的日常工作. (2)类库和函数库,光会语言大体
上是没有生产力的,会了类库才算有点生产力了,至少跟着别人能干活了.学类库是个积
累的过程,第一部分知识来源于你看书,第二部分来源你实验和工作中的需求(google和
stackoverflow会教给你很多)第三部分是你去查类库文档,MSDN和Java JDK文档都是这
类的 (3)语言和类库重叠的部分,有些语言自己带一些库, C++/Ruby/PHP/Python等,
这块书里讲的少,实践用的还挺多,只能靠写代码的时候积累和看文档了.(4)工具,特
别是开发环境(IDE),最好有个师傅带带你.(5)业界框架,前面说过类库,而框架是用
类库里的类'堆'起来的,结构良好的,有一定功能的组件集合.Java里的Spring,
Hibernate什么的, .NET里的Entity Framework, Enterprise Library等, PHP的Zend
framework等...这个学习的时候不一定需要精通,但你要知道原理,能写一两个小程序.
目的是有人带着你的时候你能干活.一切为生产力服务(话说生产力就是钱啊!)
[关键点6]入门语言学到什么程度?你知道什么叫中译英吧?就是把中文译成英语.你试
试能不能做到'中译Java'或者'中译C#'. 也就是用面向对象的语法把你要说的意思表达
出来.
[关键点7]如何快速学习?不管你学哪门语言,快速从UI到Database打通都是一个好办法
. 无论是你学Java也好,C#也好,找个朋友,花上半天工夫, 带着你写一两个程序, 这个
程序有UI(Web/桌面/手机), 有服务层, 用到框架, 读写数据库. 这样你就知道数据从
哪儿来,到哪儿去, 怎么由db里的条目变成对象,怎样在ui上表达...
[关键点7]一定要边学边练. 一定要相信我,坐在那里看计算机的书看多少个小时都白扔
. 看一个例子,写一个例子,写完之后立刻一步步debug(无论它有没有bug),这是最快
的学习方法. 特别是debug能力. 因为你工作后的第一个任务90%的可能是给前辈修bug
. [弯路]我这点一开始做的非常差,我一开始属于学院派的,语言说起来头头是道,上手
能力不行,经常被刚毕业的小弟bs
[关键点8]说哪 儿了...想不起来了.哦对了,有空的时候把你学到的东西讲给别人听(
包括帮助比你还新的初学者),讲通了,包你一辈子不忘.我最初转行的时候被赶鸭子上
架边自学边给中学生讲计算机知识和编程基础, 一不小心学的还挺扎实.
[关键点9]读代码. 网上有很多开源代码,拿来读.能读懂多少就读多少,哪怕是一个片断
. 这是让你'练胆', 就是见了大规模的程序不胆怯. 无论你未来进MS还是Amazon,他们
的程序规模相当大.经过练胆的过程, 你一上手就不怕, 效率自然就上来了. 还有一点
就是, 开源代码一般质量都不错, 你可以从中培养编程语言的'语感'(跟英语的语感一
个道理),未来工作中可以翻过头来参考(但不能直接抄哦!)也能分清工作中别人的
代码什么是好的,什么是不好的.
[关键点10]你得有好朋友带,你得有好朋友带,你得有好朋友带,你得有好朋友带...
[关键点11]像学佛从皈依到成佛有个次第一样,学编程也一样. 大致是这样一个次第:
语言-库->框架->模式->架构,不用学到模式级别你就已经能工作了.
[关键点12]算法有多重要?如果你的工作岗位跟写算法相关,那就很重要了,但大多数工
作岗位上面向对象的设计思想要比算法设计思想更重要. 甚至好的面向对象设计能够简
化复杂的、面向过程思想的算法.
[关键点13]算法有多重要?我写重复了?没有!这次是说面试.很多公司面试的时候很
看重算法,但工作起来用的并不多.何解?那是考你的基础扎实不扎实,脑子灵活不灵活.
据我估计, 50%的题集中在string和一维向量的操作; 35%集中在tree的操作; 剩下15
%考考深/广度优先的图顶天了.
[关键点14]要有内应, 也就是有人推荐. 一定一定一定. 推荐你的人能告诉你大约考什
么题, 工作是什么, 可以让你先试试他们正在做的工作. 佛国人在这点上做的比我们强
,我们要学习. 别忘了,推荐你的人、帮助过你的人,你要感恩.
[关键点15]要不要做qa或者tester先?其实也是不错的选择.因为大部分tester和qa也
不是纯手动的了,也要写代码,了解产品.这是整个软件生存周期中的一部分,而且相对容
易上手.
[关键点16]大公司还是小公司?这不是一个非黑即白的问题.两个都面着,能进哪个进哪
个.但,切记切记切记!要跟进一个有质量文化的组,这个组里有人愿意带你,你的工作可
以有压力,但不能不开心, 你的领导可以批评你,但不能整你.对了,还有一类公司叫外包
公司,可以把外包公司当作进大公司的跳板.
[关键点17]关于教材.(1)书,买前先借,因为你不知道哪本书你看着最舒服.花了银子
买回来看着不舒服太浪费.(2)视频, youtube上几乎每种技术都有免费的教程. 我的
感觉,初学一个技术(特别是框架)的时候,youtube对我的帮助比google还大. (3)课
程, 没必要参加面对面的培训. 我花$299在pluralsight上注册了个全年,学的很爽. 类
似的网站还有不少,都不贵. 国内也有很多网上的免费课, 可惜比较水.而且对英语工作
环境没什么帮助.
[关键点18]关于方向.大体而言,写程序有三个发展方向:UI层, 服务层(业务逻辑层)
和数据库(需要学几种SQL语言).不建议以UI层为入门,因为这一层的技术杂,变化快,
模式和框架最多.可以尝试由服务层或数据库层入门. 这两层的技术相对稳定, 框架和
模式也都很经典, 特别是服务层, 它是传统意义'编程'在现代的延伸.回想一下,女孩搞
数据库的也不少.我的数据库老师,还有后来遇到的一些女同事, 好多都是搞数据库和BI
的. 搞UI开发的女生是最少的(个人经验)
先写这么多吧,我感觉关键点都写上了,如果以后还想起来,我再补充.
祝大家转行顺利,工作愉快!
另外,我建了个QQ群和大家一起探讨入门问题:277252742,感兴趣可以试试.
-----------
后记:
[1]最近跟加入群的朋友们讨论,发现很多朋友认为转行=读cs专业的本科或硕士.这是一
个有偏差的想法.转行指的是你具备新行业的生产力,而学位学习更多地是帮助你获得专
业知识.其中虽然有一些与生产力相关的东西,但远不如你把时间全部投入到生产力培养
上.比如,大学的Java课本专注于语言本身,ood也与实际项目脱离比较远.像流行的Java/
.NET框架基本上是不讲的.前面说过,对类库和框架的了解才是生产力的所在.
--
发信人: amrita (Amrita), 信区: CS
标 题: [分享]:转行CS成功经验
发信站: BBS 未名空间站 (Sat Oct 12 02:32:18 2013, 美东)
看到很多朋友讨论转行的事情,问题集中在'我是非专业,能不能转,怎么转,学什么'上.
作为一个成功转行的人,我来分享一下个人的经验,希望对大家有所帮助.
先说下个人情况:[起点]高考失利,被国内三本降分录取,服从分配到农学专业.[终点]
微软SDE.这里向大家传递的第一个信息是--起点这么低的人都能转,这些硕士博士、腿
肚子都比我脑瓜子聪明的人,怎么就不能转?要有信心,要有勇气!
下面分享一些转行过程中的关键点(正向能量)、痛苦(从中学到了什么)和弯路(你
应该避开).
[核心]转行指的是要在CS行业工作,而不是说新学了一堆CS的理论知识.所以,未来的学
习过程中要以培养生产力,无论是开发能力,还是测试能力,还是组织协调能力(文科同
学有可能会转项目经理或者产品经理).理论知识有助于更扎实地使用你的技能,但这回
是处在辅助地位.学位学习是知识为主,技能为辅,转行学习要倒过来,技能为主,知识为
辅.
[关键点0]不要在‘选择’上浪费太多时间,心动不如行动,想好转了就马上开始计划
,然后开始学习。很多人就是在拖拖拉拉的选择过程中几年也没转成。要开始学了,那
就选准一个方向(语言和程序方向,详见后面)开足马力学,不要纠结于“我是学Java
还是.NET?”“XXX语言好还是YYY语言好?这个的缺点是什么、那个的缺点是什么……”
[关键点1]你不必多喜欢计算机,但至少不能讨厌,不然它不能吸引你反而互相排斥,学什
么都学不进去的.
[关键点2]正确的计算机操作,很多人笑了.但你问问计算机玩的好的人,正确的指法和飞
一样的操作给他们带来了多少好处.
[关键点3]清楚的语言表达能力(女生有这方面的天赋).现在的程序大多是面向对象编
程,写程序基本上跟聊天一样.语言能力好的人思路清晰,用词准确,组织有条件,程序的
要求是一样的.如果你未来成为软件工程师,看到一堆胡言乱语般的代码,不信你找写代
码的人聊聊天,他说话肯定也那样.而且你想,汉语或者英语这么复杂的语言你都能说好,
词汇量不超过100个的编程语言哪有学不好的道理??
[关键点4]一个入门语言.建议C系语言,C/Java/C++/C#/JavaScript/Objective-C都是这
一系的,好处是个会了别的看着眼熟(尽管还是有些不一样的地方),而且语言排名里C
和Java不分伯仲, C++/Objective-C一直在争季军,C#在老五老六的地方呆好些年了...
不用多说了吧?C系霸占前五名,占就业市场的80%以上.如果你感觉C系语言看着不舒服
(相信我,每个人都有自己用着最舒服的语言,不见得你老婆/老公喜欢的语言你就一定
喜欢)你也可以试试Smalltalk系的语言,这系的语言动态语言居多,在排行榜上上升势
头强劲,多与Linux的文化有些渊源(跟BASH看起来像),Ruby/PHP/Python算是这系的(
PHP也有C系的血统,但个人感觉更Smalltalk一些).我走了[弯路], 是从VB开始的,又学
的DELPHI,原因很简单,一开始的时候对C系水土不服.后来喜欢上了C#才转过来的.之所
以能转,是因为VB.NET/DELPHI和C#/Java在面向对象方面的语法几乎一模一样.[信息]说
学通一门语言后再学另一门会很快,这是真的,一定要相信.后面还会说到.
[关键点5]入门语言怎么学?几个要点:(1)关键字里最重要的一批要都弄懂,会写实
例.汉语有20000多常用词汇,你看看本文一共才用了几个?编程语言也是这样,不到100
个关键字里,四五十个会用来应付80%的日常工作. (2)类库和函数库,光会语言大体
上是没有生产力的,会了类库才算有点生产力了,至少跟着别人能干活了.学类库是个积
累的过程,第一部分知识来源于你看书,第二部分来源你实验和工作中的需求(google和
stackoverflow会教给你很多)第三部分是你去查类库文档,MSDN和Java JDK文档都是这
类的 (3)语言和类库重叠的部分,有些语言自己带一些库, C++/Ruby/PHP/Python等,
这块书里讲的少,实践用的还挺多,只能靠写代码的时候积累和看文档了.(4)工具,特
别是开发环境(IDE),最好有个师傅带带你.(5)业界框架,前面说过类库,而框架是用
类库里的类'堆'起来的,结构良好的,有一定功能的组件集合.Java里的Spring,
Hibernate什么的, .NET里的Entity Framework, Enterprise Library等, PHP的Zend
framework等...这个学习的时候不一定需要精通,但你要知道原理,能写一两个小程序.
目的是有人带着你的时候你能干活.一切为生产力服务(话说生产力就是钱啊!)
[关键点6]入门语言学到什么程度?你知道什么叫中译英吧?就是把中文译成英语.你试
试能不能做到'中译Java'或者'中译C#'. 也就是用面向对象的语法把你要说的意思表达
出来.
[关键点7]如何快速学习?不管你学哪门语言,快速从UI到Database打通都是一个好办法
. 无论是你学Java也好,C#也好,找个朋友,花上半天工夫, 带着你写一两个程序, 这个
程序有UI(Web/桌面/手机), 有服务层, 用到框架, 读写数据库. 这样你就知道数据从
哪儿来,到哪儿去, 怎么由db里的条目变成对象,怎样在ui上表达...
[关键点7]一定要边学边练. 一定要相信我,坐在那里看计算机的书看多少个小时都白扔
. 看一个例子,写一个例子,写完之后立刻一步步debug(无论它有没有bug),这是最快
的学习方法. 特别是debug能力. 因为你工作后的第一个任务90%的可能是给前辈修bug
. [弯路]我这点一开始做的非常差,我一开始属于学院派的,语言说起来头头是道,上手
能力不行,经常被刚毕业的小弟bs
[关键点8]说哪 儿了...想不起来了.哦对了,有空的时候把你学到的东西讲给别人听(
包括帮助比你还新的初学者),讲通了,包你一辈子不忘.我最初转行的时候被赶鸭子上
架边自学边给中学生讲计算机知识和编程基础, 一不小心学的还挺扎实.
[关键点9]读代码. 网上有很多开源代码,拿来读.能读懂多少就读多少,哪怕是一个片断
. 这是让你'练胆', 就是见了大规模的程序不胆怯. 无论你未来进MS还是Amazon,他们
的程序规模相当大.经过练胆的过程, 你一上手就不怕, 效率自然就上来了. 还有一点
就是, 开源代码一般质量都不错, 你可以从中培养编程语言的'语感'(跟英语的语感一
个道理),未来工作中可以翻过头来参考(但不能直接抄哦!)也能分清工作中别人的
代码什么是好的,什么是不好的.
[关键点10]你得有好朋友带,你得有好朋友带,你得有好朋友带,你得有好朋友带...
[关键点11]像学佛从皈依到成佛有个次第一样,学编程也一样. 大致是这样一个次第:
语言-库->框架->模式->架构,不用学到模式级别你就已经能工作了.
[关键点12]算法有多重要?如果你的工作岗位跟写算法相关,那就很重要了,但大多数工
作岗位上面向对象的设计思想要比算法设计思想更重要. 甚至好的面向对象设计能够简
化复杂的、面向过程思想的算法.
[关键点13]算法有多重要?我写重复了?没有!这次是说面试.很多公司面试的时候很
看重算法,但工作起来用的并不多.何解?那是考你的基础扎实不扎实,脑子灵活不灵活.
据我估计, 50%的题集中在string和一维向量的操作; 35%集中在tree的操作; 剩下15
%考考深/广度优先的图顶天了.
[关键点14]要有内应, 也就是有人推荐. 一定一定一定. 推荐你的人能告诉你大约考什
么题, 工作是什么, 可以让你先试试他们正在做的工作. 佛国人在这点上做的比我们强
,我们要学习. 别忘了,推荐你的人、帮助过你的人,你要感恩.
[关键点15]要不要做qa或者tester先?其实也是不错的选择.因为大部分tester和qa也
不是纯手动的了,也要写代码,了解产品.这是整个软件生存周期中的一部分,而且相对容
易上手.
[关键点16]大公司还是小公司?这不是一个非黑即白的问题.两个都面着,能进哪个进哪
个.但,切记切记切记!要跟进一个有质量文化的组,这个组里有人愿意带你,你的工作可
以有压力,但不能不开心, 你的领导可以批评你,但不能整你.对了,还有一类公司叫外包
公司,可以把外包公司当作进大公司的跳板.
[关键点17]关于教材.(1)书,买前先借,因为你不知道哪本书你看着最舒服.花了银子
买回来看着不舒服太浪费.(2)视频, youtube上几乎每种技术都有免费的教程. 我的
感觉,初学一个技术(特别是框架)的时候,youtube对我的帮助比google还大. (3)课
程, 没必要参加面对面的培训. 我花$299在pluralsight上注册了个全年,学的很爽. 类
似的网站还有不少,都不贵. 国内也有很多网上的免费课, 可惜比较水.而且对英语工作
环境没什么帮助.
[关键点18]关于方向.大体而言,写程序有三个发展方向:UI层, 服务层(业务逻辑层)
和数据库(需要学几种SQL语言).不建议以UI层为入门,因为这一层的技术杂,变化快,
模式和框架最多.可以尝试由服务层或数据库层入门. 这两层的技术相对稳定, 框架和
模式也都很经典, 特别是服务层, 它是传统意义'编程'在现代的延伸.回想一下,女孩搞
数据库的也不少.我的数据库老师,还有后来遇到的一些女同事, 好多都是搞数据库和BI
的. 搞UI开发的女生是最少的(个人经验)
先写这么多吧,我感觉关键点都写上了,如果以后还想起来,我再补充.
祝大家转行顺利,工作愉快!
另外,我建了个QQ群和大家一起探讨入门问题:277252742,感兴趣可以试试.
-----------
后记:
[1]最近跟加入群的朋友们讨论,发现很多朋友认为转行=读cs专业的本科或硕士.这是一
个有偏差的想法.转行指的是你具备新行业的生产力,而学位学习更多地是帮助你获得专
业知识.其中虽然有一些与生产力相关的东西,但远不如你把时间全部投入到生产力培养
上.比如,大学的Java课本专注于语言本身,ood也与实际项目脱离比较远.像流行的Java/
.NET框架基本上是不讲的.前面说过,对类库和框架的了解才是生产力的所在.
--
Comments
Post a Comment
https://gengwg.blogspot.com/