Monday, June 16, 2014

how to learn a computer language-in Chinese

发信人: amrita (Amrita), 信区: CS
标  题: 非专业人士转行CS成功经验分享
发信站: BBS 未名空间站 (Sat Oct 12 02:32:18 2013, 美东)

看到很多朋友讨论转行的事情,问题集中在'我是非专业,能不能转,怎么转,学什么'上.
作为一个成功转行的人,我来分享一下个人的经验,希望对大家有所帮助.

先说下个人情况:
[起点]高考失利,被国内三本降分录取,服从分配到农学专业.
[终点]微软SDE.

这里向大家传递的第一个信息是--起点这么低的人都能转,这些硕士博士、腿
肚子都比我脑瓜子聪明的人,怎么就不能转?要有信心,要有勇气!

下面分享一些转行过程中的关键点(正向能量)、痛苦(从中学到了什么)和弯路(你
应该避开).

[关键点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开发的女生是最少的(个人经验)

推荐几个online course网站,适合想转行人士:

http://www.codecademy.com/

https://www.coursera.org/

http://code.org/

https://www.udacity.com/

https://www.edx.org/

No comments:

Post a Comment