Skip to main content

标  题: [分享]:转行CS成功经验

Make a Donation
FatWallet Coupons and Deals发信人: 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

Popular posts from this blog

CKA Simulator Kubernetes 1.22

  https://killer.sh Pre Setup Once you've gained access to your terminal it might be wise to spend ~1 minute to setup your environment. You could set these: alias k = kubectl                         # will already be pre-configured export do = "--dry-run=client -o yaml"     # k get pod x $do export now = "--force --grace-period 0"   # k delete pod x $now Vim To make vim use 2 spaces for a tab edit ~/.vimrc to contain: set tabstop=2 set expandtab set shiftwidth=2 More setup suggestions are in the tips section .     Question 1 | Contexts Task weight: 1%   You have access to multiple clusters from your main terminal through kubectl contexts. Write all those context names into /opt/course/1/contexts . Next write a command to display the current context into /opt/course/1/context_default_kubectl.sh , the command should use kubectl . Finally write a second command doing the same thing into ...

OWASP Top 10 Threats and Mitigations Exam - Single Select

Last updated 4 Aug 11 Course Title: OWASP Top 10 Threats and Mitigation Exam Questions - Single Select 1) Which of the following consequences is most likely to occur due to an injection attack? Spoofing Cross-site request forgery Denial of service   Correct Insecure direct object references 2) Your application is created using a language that does not support a clear distinction between code and data. Which vulnerability is most likely to occur in your application? Injection   Correct Insecure direct object references Failure to restrict URL access Insufficient transport layer protection 3) Which of the following scenarios is most likely to cause an injection attack? Unvalidated input is embedded in an instruction stream.   Correct Unvalidated input can be distinguished from valid instructions. A Web application does not validate a client’s access to a resource. A Web action performs an operation on behalf of the user without checkin...