如果你遇到过需要使用从未学过的语言去实现业务需求,或者你想快速入门一门新的语言,这篇文章值得你阅读参考。本篇主要讲述类似场景的方法论和我自己的实践故事,大神可以绕着跑了。
1.那些应急上马又不得不上的项目
有时候我们会突然接到紧急的任务,使用新的语言去实现一些软件功能,亦或接到公司的转型项目,比如原来是C#写的,现在项目要求使用Java去写。或者为了工作快速入门一门新语言,我们第一需求就是完成它,更好地完成它。
现在需要实现这些业务场景需求,要么去招聘新的人员、要么使用现有程序员去学习新的语言去实现它。前提是这些业务需求场景是有时间限制的,必须在规定时间内完成。
这很为难,招聘新的人员带来公司的成本,需要对招聘的人负责人,如果这个项目做完了,人又多出来了,对公司来说很不划算。老板自然不愿意多投入。有时候招人不是你想招就能招,招聘一名与公司价值观相一致的正常要半年,如果是启用老员工去做这件事,可以增加现金激励、升职加薪激励,让愿意干的员工去学习新的知识,员工自身可以增加项目经验、学习到新的技能,公司也省了不少成本。那么现在的问题是责任落到了这个员工身上,他面对的问题就是“如何快速的学习新的语言或技术,快速的应用到业务场景上呢?
我有幸做过不少类似的需求场景项目,激情奋战之后,积累一些经验,与大家共享,一些理论,我曾经与人探讨,但大多是不同意见者。
2.编程语言的本质
我们使用某个编程语言,但绝不会超出这个语言本身的特性。甚至可以说,我们编写软件都是出自语言本身的API,我们只是搬运工。
我们的高级语言不论是PHP、ASP、C#、Java还是C++、Lue、Javascript等等他们都有哪些共性
1.在操作系统上运行
2.最终使用了二进制
从这条特性上来说,我们写的所有的语言都是二进制的不同体现。“条条大路通罗马”我们只是走了不一样的路。
我们(使用语言的人)是使用某种语言,我们只是在使用语言,并不能发明某种语言之外的特性。
当我们编写某种软件功能的时候,假如我们编写网络通信,我们需要调用语言作者提供的接口来实现,或者借助语言本身提供的底层技术来实现,但是我们并不能发明更多的接口或技术。我们是使用者,如果一种语言不支持多线程,那应该是语言不支持,而不是所在的环境不支持。
所以本质上来说,语言所有的特性对我们使用者来说,是已知的,可认知的可实现的。那么最好的学习资料应该是语言开发者的提供的文档和示例。
那么是不是我们必须学习完所有的特性才能编写软件,只要写过两种语言以上的人来说,编写软件功能的逻辑是差不多。所以我们知道了如何编写软件,使用新语言就想堆积木一样,你需要什么的函数、方法你去库里找到它和它的使用事例,重要的是我们架构软件的方法,而使用什么样的语言都是可选项。
3.编程语言的快速学习方法(实例)
总会有一些方法论,指导着我们学习进步。
2015年的时候,公司有个app,民生银行的tpa软件,那时候做ios app还是比较热门的工作,招聘一个的成本还是相当的高,主要做完之后又不在需要这个岗位,我作为公司骨干,毅然挑起重担,因为老板开心、自己也想了解下编写ios app的快感。
1.基本语法的了解
对比学习法,我对object-c基础知识做简单的了解,当时买了本书,学习一门语言的基础知识就是边看边写边练边记录成博客日志。我大概花了两周的时间完成所有基本知识的学习和事例的编写。
这个过程中,我了解了object-c语言的基本编写语法,熟练掌握了Xcode使用。
当然正如《极客时间》红人耗子叔推荐的那样,学习语言最好做类别学习,我是把IOS的object-c跟C#做对比(当时我最熟悉的是C#),了解学习起来就特别的快。
2.业务分析
了解了基本语法、IDE的使用后,就是对目标业务需求做一定分析,找到知识点,找些相关联的开源的代码下载下来训练。
我做的是保险TPA软件,就是保险理赔手机客户端,主要涉及知识点包括:界面布局、界面后台的按钮时间、页面加载销毁等事件、页面跳转、页面间信息共享、以Json形式调用服务器接口、文件上传、版本自动检测升级等。只要写过客户端的(html客户端、winform、linux桌面、java桌面等后面会分享)都知道这些都是构成客户端软件的基本要素。这些软件非常容易找。例如类新闻客户端、oschina的开源客户端都是可以的。
我找到这些客户端源码,在本机先调试起来,然后依据记录下他们的涉及到知识点的功能点在哪里实现(注意我并不需要完全了解是怎么做的)。
这个阶段我花了大约2周的时间,有人说这么短的时间,了解不够,我并不需要了解学习每个代码每个知识点,主要对软件整体的知识、软件的架构的了解,对比与已知软件的异同。
3.项目架构与关键技术
就是开始架构阶段,这个阶段通常是我最花时间的阶段,我通常考虑一个架构方式,需要通盘考虑他的可用性、可扩展性。这个阶段我对关键技术进行实现。
例如当采用何种界面、代码架构模式,我采用的是界面与代码分离模式,没有采用story模式,也没有采用纯代码模式(后来第二版本我改成了纯代码模式)。这种mvc的架构模式最适合初学者特别是知道c#的mvc或者java的mvc的学习者,当时考虑了很多,怕自己一但定下来,后面遇到问题就很难做下去。
当时在架构阶段我实现了:界面代码的搭建模式、实体类的创建(因为当时服务端的接口以及给出来了)、列表的实现、列表的分页、文件的上传、页面的信息共享、页面跳转、基于http/https的post、get方法、json的编码和解码等主要关键点。
这个阶段我花了3到4周的世界,大部分时间是在思考,实例代码其实在上一个阶段就有框架了,只是在这个阶段把他填充时了。
4.项目编码阶段
这个时间UI已经出来了,高保真图和切图都已经做好了,我进入到真正的编码阶段,这个阶段反而编码很快,只是对我这个新手来说经常要去google搜索一些基本语法的使用,这看起来对oc编程者来说很可笑。
这个阶段我大概花了1个月的时间。
项目编写很顺利,不会的去google查询,遇到几次闪退,有的就是xiaobai常常遇到的问题,有的到google多搜索几次就解决了。
5.上线
测试很顺利,因为没有多少东西,接口api已经是测试过的,客户端没有多少权限问题,剩下的是几个不同尺寸的适配问题,感谢乔帮主,iphone设计的如此完美,适配已经不成问题。
最后顺利交差。
方法的普适性
这些方法是否适合不同语言,我原来是写ASP出生,我用这种方法直接应用到IOS App、Java桌面程序、Android客户端、Linux QT主机监控程序等等。就我自己而言,不同语言间是具备普适性的。不同的人之间是否有用这种方法,我没有特意去调查,但我坚信这套方法论是没有问题。当然各个人的学习的方法各有不同的,本质上应该有相同的地方。
4.总结一下快速学习步骤
1.基本语法的了解,了解新语言的基本语法和相关知识,主要方法就是不停地取编写示例、运行示例、写博客或日志。
2.业务分析,对当前的业务需求做技术点分析,可表述为关键技术的实现(相对于技术小白的关键点),可以找到类似开源的项目或半成品下下来程序跑起来、日志记起来。
3.项目架构与关键技术,寻找对本次项目的最有效架构,架构实际上跟具体语言是没有关系的,但是也要考量语言实现的难易,并把关键技术统统实现预演。
4.项目编码阶段,这个阶段跟其他项目的编码阶段没有差异。
5.上线(后面步骤不写了)
当然速成方法的优势是快速应用,如果要深入了解继续加强,总的方法就是多看、多练、多写、多教(写博客教别人用、写教程给别人参考、录视频做分享等)。
我分享的方法只适用于应急场景,那些勇于专研某个领域的人,则不屑于这样的方法论。
本文是2019年年度计划的第002期博文,以此记录共勉。
完!
原文地址:https://www.cnblogs.com/fishpro/p/10223492.html