转行软件开发的通用学习路径(转自刘校长亲笔)

【序言】
哈!2015年到啦,我知道好些个朋友今天都许下心愿、立下誓言:“从今天起好好学习
、天天向上,一定要以XXXX方面取得成功!”其中就不乏有朋友是打算在今年从某个“
坑”专业跳进软件开发这个行业的,对吧?不过呀,您先别急——光有志愿、不知道该
往哪儿使劲儿,到头来又要被人笑话“无志之人常立志”了。作为一个在软件行业打拼
了十多年、常年带人转行的人,我可以很负责任地告诉你:转行软件开发的drop率还是
非常高的——别老盯着那些转行成功的光鲜帖子看,这跟做买卖一样,做赔了的从来不
会出来声张的。造成大家半路放弃的原因就是不知道正确的学习路径。为了让那些打算
今年转行软件开发的朋友能取得成功,今天我就把多年来积累下来的通用学习路径给大
家说一下。干货百分百哦!
【正文】
那位朋友说了——你算老几啊跟我们说这些。好吧,先介绍一下自己。我叫Timothy 
Liu,是国内三本农学学士,自学软件开发,一路杀进微软,在自己创业,run两家公司
(离开微软是因为某开挂民族实在没质量文化、把微软毁的不轻)。软件写了十多年,
因为生于教育世家,所以能把自己所会的东西清楚地讲给大家,于是顺便一直在搞教学
。写过书,销量不错;出过视频,YouTube上排名Top 1。如果你感
觉我有资格介绍怎么自学,那么请接着往下看,否则呢,新年快乐!您就不必浪费时间
啦:)
今天咱们说的就是转软件开发,至于计算机行业其它职位,您移步看我的另一篇文章《
计算机行业发展方向小全》。
软件开发,说全了就是“使用编程语言和工具开发软件”,能开发出来有价值的软件,
那你就有工作,或者说有生产力、有被剥削的价值;写不出来,那就只能当当爱好了。
自然,你能写的越多、越快、质量越好、价值越高、别人越写不出来,那你的薪水就越
高。
“使用编程语言和工具开发软件”——软件是什么,我就不啰嗦了,重点就剩两个了,
一个是编程语言,一个是编程工具。
【先说选语言】
先说选语言吧。一句话,编程语言那就是打开软件开发行业大门的钥匙。什么Java、C#
、Python、Ruby、C、C++,无非就是一大串钥匙。很多初学的朋友会花很多时间“挑钥
匙”,这个心理是可以理解的,因为怕选错了语言学出来没人要。于是呢,很多教人入
门的文章就在选语言方面大做文章,吹的五花八门儿。实际上呢,一大串钥匙,你选一
把,先把门打开,进门要紧啊!外面多冷啊。之所以不建议大家在选语言方面花很多时
间原因是语言都有自己的使用领域,语言之间的比较无非是以己之长攻人之短,大家怕
选错,所以老盯着各门语言的缺点看了,结果是技术还没学,先学了一堆自己都不知道
是在说什么的“缺点”,自己把自己给吓退了。我从来不担心大家拿哪个语言入门,原
因有二:(1)现在靠单语言生存基本上已经是不可能了,几个大语言,两三五年内是
都需要会的;(2)能活下来的语言目前出现非常明显的“趋同性”,也就是功能方面
“你有我有全都有”,你学会一门,再学一门的时候比较着学,很快。用教育学上的术
语来说就同知识的可迁移性越来越强。
要说真就一点儿也不选、拿起什么学什么,这也不是我想说的。怎么着你也得选个比较
流行的、还没死掉的语言吧。那选什么呢?问Google吧,你搜programming language 
ranking,前排的几个链接都有不错的参考价值。
我个人是推荐Java、C#、Python的,有些有点基础的同学抬杠,说C/C++能让你了解底
层,应该从C/C++入门。如果你是CS专业的同学,我一定是推荐学习C/C++甚至是一些汇
编语言的,但对于自学编程、以找工作为目的的同学,我建议你先入了门,回头再用C/
C++来扎实功底。简单说,C/C++对于自学者来说,学习曲线太陡,学不出来。
【再说工具】
也不知谁先说的“高手开发软件的时候都直接使记事本加编译器”,我估计是看武侠看
多了。听我说:没那回事儿(极特殊、迫不得已的情况除外)!前面说了,程序是要有
价值的,现在有点儿价值的程序动不动也得几千上万行了,记事本根本应付不了。真正
工作时,你99.99%的时间是使用专门的开发工具在写程序,这种专门工具就是“集成开
发环境”(Integrated Development Environment, IDE),之所以叫这个名字,是因
为它把代码编辑(像在记事本里写程序就是编辑代码)、代码编译(使用编程语言的编
译器把你写的文本代码编译成计算机能执行的程序)、代码调试(代码有错的时候发现
错误在哪里并进行修改)等多种功能集成在了一起。
每种语言都有市面上流行的IDE。比如Java,有IntelliJ IDEA、Eclipse、NetBeans;C
#是Visual Studio一家独大,等等。初学者常掉进去一个坑就是,选了哪个大学的教材
,这个大学往往绑定自家的某个非生产性的IDE,结果你学不到什么生产力,与Amazon
上卖的书也对不上号儿。
提醒大家一点,学使用IDE的时候,要留意使用快捷键,用的越熟越好。
【学语言】
选了语言和IDE,开学啦!
无论你选的哪门语言,前面说了,语言的趋同性越来越强,那么按这个一个顺序学,经
过转行哥多年的教学实践,是最快的:
(1)过一遍语言的所有关键字和操作符(2)语言都支持哪些数据类型,要重视数据类
型这个东西(3)这门语言是怎么声明变量和为变量赋值的(4)如何使用变量和操作符
组成表达式(5)如何拿表达式组成陈述式语句(6)分支/判断语句和循环语句怎么玩
儿,如何跳转(7)这门语言的函数/方法怎么写、怎么调用,特别要留意参数列表和返
回值。
前面是说的任何一门语言都支持的面向过程编程的部分。接下来该面向对象部分了。
(8)这门语言是如何声名类的(9)类都有哪些成员(10)同一个类中方法的重载(11
)这门语言是否支持接口和抽象类(12)子类对父类的重写,多态,面向接口编程(13
)面向对象设计的基本原理
最后,现在的语言多少都支持一点动态编程和函数式编程,有余力的同学可以了解下面
的知识
(14)这门语言有没有Lambda表达式,怎么玩儿(15)如何进行函数式编程(16)是否
支持动态编程
【学习库】
有些人希望自己写的程序能被别人重用,这样可以挣钱或者拉人气;有人希望通过重用
别人的程序来节省自己的时间——有供有需,自然就有了很多可以被人重用的代码片断
。这些代码片断要么是一些函数,要么是一些类,聚集成一个“仓库”后就有了函数库
或者类库。写库的人可以从中获利,用库的人自然获利更多——因为不必再“重新发明
轮子”了。每种语言都有自己基本库(语言厂商或者IDE厂商制造的),还有一些专门
靠写库挣钱的公司编写的第三方库。一句话:你会的库越多,你写程序就越轻松。比如
,现在客户要一个“指纹加密文件夹”程序,你自己写指纹识别的代码(暂且认为你能
写出来)、自己写加密算法代码,最后集成成一个程序给客户,你算了下时间,需要2
年完成;我买了一个指纹识别库,又买了一个加密算法库,专心把它们拼成一个程序,
还有时间做个漂亮的界面,1个月交货,要个合理的价钱,你说谁能生存下去?
【学习模式与框架】
哈,你也知道靠堆类库挣钱了?那我告诉你,你堆着堆着程序就乱掉了,而我还可以继
续往上堆!为什么?因为我知道怎么堆类库程序才能大而不乱。这就是软件的模式和框
架——类与类之间怎么配合就是设计模式(design patterns),类库与类库之间怎么
配合就是框架。不过呢,想学框架,前提是把类库玩儿熟。那些类库还没玩儿几个就吵
吵着“我要写框架”的,只能送他两个字——“太浮躁”。
【学习架构】
我一直说,现在是学习软件开发的好年代。为什么呢?因为优质的程序太少了。为什么
写程序的人那么多,优质的程序那么少呢?因为懂架构的人太少了。什么是架构?举个
例子:开始动手写一个项目的时候,团队把程序设计成了跑在一台机器上的小程序,结
果突然有一天老板给团队配了20台性能超强的机器说:“我要在原来1/20的时间内看到
结果”,团队立马傻眼——因为你程序一开始设计的目标就没考虑这个,以至于它的架
构就是个“本田雅阁”,你现在要个“解放卡车”,我再怎么改也改不出来。说实话,
写程序的,谁没糟蹋过几个项目呀!谁又能没被烂项目糟蹋过呀!为了不再遭受臭代码
的折磨,那就得把项目的架构或者说骨架搭好。但这个吧,已经超出转行自学的范畴了
,因为如果你能学到这里,你已经在软件开发行业工作好几年了:)
【学习心态】
说说学习心态吧,这是个软实力,很多博士前博士后的,学习能力没的说,栽就栽在心
态上了。简单说:别把转行想那么难,也别把转行想的太简单。心态这事儿,自己在学
习中调整吧,每个人的条件的境遇都不同。
【学习技法】
就算知道了学习的路径,还是有很多同学drop了。为啥呢?因为不会学习。我先说什么
叫“会学习”:学软件开发最大的特点就是——它是一门手艺活儿,所以要领就是多练
,学的知识要落实在代码上,代码要能默写。
有这么几类人,有可能drop:(1)爱说的人,这类人学东西走嘴,不走心也不走脑,
是学给别人看的,学一点儿东西就等着别人表扬呢,结果大家都忙着学习呢,谁顾的上
表扬你呀,这类同学的drop率不是特别高,100%。(2)钻牛角尖的,这类同学是遇到
问题后不搜索,自己就用那点儿有限的知识瞎琢磨,浪费很多时间,学出来的东西还四
不像(3)过分强调基础的,有些同学学从一个知识点能挖到很深的基础上去,结果在
很深的、目前无关紧要的问题上浪费很多时间,该学的没学会,动机是好的,但过犹不
及。提醒这样的同学,你盖的是“埃菲尔铁塔”而不是“金字塔”,两个虽然都是塔,
但要求不一样——你的目的不是未来搞科研,所以没必要盖那么结实,而且你也没那么
多时间。不过,也许这正是个好的迹象——你是真的喜欢这个行业,为什么不考虑进入
大学深造,成为顶尖人才呢?(4)基础不扎实就想学的太快。有些同学,问我一个高
级问题,我一看,初级的代码还有错的,我就不知道他是怎么开始学这些高级内容的。
这类同学,我只能很惋惜地说:“亲,从头再来吧”。这类同学的drop率也不高,100%
。(5)不主动动手解决问题的,这类同学无论是遇到看不懂的书、做不出的题,还是
程序出错,绝对不会自己动手去搜索,要么是四处贴代码、寻找人肉debugger,要么是
等着别人来帮忙,如果没人帮忙,那就放弃。这类同学的drop率,呵呵,自己猜!
【尾声】
足足写了三个小时,希望对大家有帮助。如果你看了感觉有用,麻烦转载的时候注明出
处和作者。
虽然我是搞软件开发培训的,但我还是鼓励大家自学——听起来有点儿矛盾是吧?原因
是,如果能自学成功的同学,那么你来我这里培训也差不多能成功,那就别浪费钱了。
我的培训是用来帮助那些自学起来有困难的朋友的。
当然了,培训的另一大用处就是极大地缩短学习时间(道理有点儿像使用类库),同时
获得业界的经验。在帮助大家节省时间方面,我还是非常有自信的。如果自学需要一年
的话,我能帮你缩短到半年左右:)
如果大家对我的培训感兴趣,请移步http://www.waspec.org/courses了解更多信息。
另外,如果遇到哪里转载了我的文章,麻烦大家告知我一声,谢谢!
  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 单片机软件开发中,通常使用交叉编译器将高级语言代码转换成机器语言,然后将机器语言烧录到目标芯片中。因此,单片机软件开发的交叉编译器选择和配置至关重要。 对于单片机软件开发中的转行嵌入式开发,需要掌握底层硬件知识,如芯片体系结构、外设寄存器编程等。此外,还需要掌握常用的编程语言,如C、C++等,并了解常见的嵌入式操作系统,如FreeRTOS、uC/OS等。 对于单片机软件开发中的代码调试,可以通过硬件调试器(如JTAG、SWD等)或软件仿真器(如Simulink、Keil MDK等)进行。在调试过程中,可以使用printf()函数输出调试信息,或使用调试器提供的断点、单步执行等功能进行调试。 总之,在单片机软件开发中,需要掌握底层硬件知识、编程语言和开发工具的使用,以及调试技巧。这样才能开发出高质量、稳定可靠的嵌入式系统。 ### 回答2: 单片机软件开发是嵌入式系统开发的一种应用领域,对于想要转行嵌入式的人来说,需要进行一些相关的学习和准备。 首先,需要熟悉嵌入式系统的概念和基本原理,了解嵌入式系统的硬件平台和软件开发环境。可以通过学习相关的教材、参加培训课程或者自学来掌握这些知识。 其次,需要学习嵌入式系统的编程语言和开发工具。常用的嵌入式系统编程语言包括C语言和汇编语言,而常用的开发工具包括编译器、调试器和仿真器等。可以通过实际的编程练习和项目实践来提高自己的嵌入式开发能力。 此外,还应该了解常用的嵌入式操作系统和相关的驱动程序开发。许多嵌入式系统都使用实时操作系统(RTOS)来管理任务和资源,而驱动程序的开发涉及到与硬件的交互。对于转行嵌入式的人来说,掌握一种或多种常用的嵌入式操作系统,并熟悉驱动程序的开发流程和技术是非常重要的。 最后,需要进行一些实际的项目练习和实践,以提升自己的实际操作能力。可以通过参与开源项目、自己动手设计和开发一些小型的嵌入式系统,或者找到一些相关的实习或工作机会来积累经验。 总之,想要从单片机软件开发转行嵌入式,需要通过学习嵌入式基础知识、掌握嵌入式编程语言和开发工具、了解嵌入式操作系统和驱动程序开发,并进行实际的项目练习和实践。通过不断地学习和实践,逐步提高自己的嵌入式开发能力,从而实现转行嵌入式的目标。 ### 回答3: 单片机软件开发转行嵌入式可以考虑以下几个方面的工作: 1. 学习嵌入式系统原理和体系结构:首先需要了解嵌入式系统的基本原理和体系结构,包括处理器、内存、外设等组成部分,以及其与外部环境的交互方式。 2. 学习嵌入式编程语言和开发工具:嵌入式系统常用的编程语言包括C、C++和汇编语言等,掌握这些语言以及常用的开发工具(如开发板、仿真器等)将有助于进行嵌入式软件的开发。 3. 学习硬件电路设计知识:因为嵌入式系统需要与硬件进行交互,对硬件电路设计有一定的了解可以更好地理解硬件与软件的配合工作。 4. 掌握实时系统和实时操作系统:嵌入式系统一般需要满足实时响应的需求,因此了解实时系统和实时操作系统的原理和开发方法十分重要。 5. 积累项目经验和实践能力:通过参与实际嵌入式开发项目,积累相应的项目经验和实践能力,包括软件调试、性能优化、软硬件调试等方面,以提高自身的能力和竞争力。 总之,单片机软件开发转行嵌入式需要学习嵌入式系统的原理、编程语言和开发工具,了解硬件电路设计知识,掌握实时系统和实时操作系统,并通过实践项目来提高自己的能力和经验。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值