码农人生-如何快速使用从未学过的语言实现项目开发-第002期博文

如果你遇到过需要使用从未学过的语言去实现业务需求,或者你想快速入门一门新的语言,这篇文章值得你阅读参考。本篇主要讲述类似场景的方法论和我自己的实践故事,大神可以绕着跑了。

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

时间: 2024-10-11 03:22:56

码农人生-如何快速使用从未学过的语言实现项目开发-第002期博文的相关文章

码农人生——博客园中哪些人开通了技术公众号—第004期博文

这周写了几篇博文,感觉不是技术类的没有必放过来,只好准备收集下博客园中的技术公众号,有空研究下,大家是怎么传经送道的.这些年,觉得作为技术的开发者,也应该是技术的布道者,不仅仅是自己能够用技术干什么,重要的是自己的技术得到别人的认可,并且能够使得别人受益. 但是,大多数码农,勤勤恳恳,写作水平一般,并不是很能够表达,或者说写作是另一个行业,作为码农,可能没有太多的时间去创作,去学习一种叫做,如何写作教别人如果学习的技能. 现在我也是一样. 这里只是从前100名推荐名单中手工筛选出来的列表.如果出

码农人生——信息时代大龄码农的必杀技——写作技能--第005期博文

这几年,各大平台占据了互联网的流量,内容成为他们的核心输出,作为内容输出者来说,这无疑是一次好的机会,人人写作的时代已经到来了. 写作如同操作上世纪计算机技能成为各行各业的标配一样,必然会成为这个时代必备的技能. 程序员行业相信更是如此,因为程序设计编码是一个高级烧脑的工作,也是个不断更新迭代的工作. 程序员会写作,能够把自己的学习.技术.观点分享出去,会写作能够获取额外的一份报酬.擅长写作者,必然先人一步! 如何写作呢,相信那句古话,熟能生巧,熟读唐诗三百首,不会作诗也会吟. 一个写作计划 我

明明白白学通C语言(二维码版)

明明白白学通C语言(二维码版)清华大学出版社 全书共15章,分为3篇.第1篇为程序的基石--数据,介绍了C语言的概况及其处理的数据的种类,包括整型.实型和字符型等:第2篇为程序的本质--处理数据,介绍了C语言提供的处理数据的各种方法,包括运算符.表达式.语句及其结构等:第3篇为处理大量数据,介绍了C语言提供的对于大量数据的高级处理方法,包括数组.指针.结构和文件操作等. 本书是 一本与众不同的C语言图书,全书以全新的模式来分析和讲解C语言,以期带给读者不同的编程学习体验.本书创造性地将智能手机巧

Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 【转】

原文地址:Linux内核源码分析--内核启动之(3)Image内核启动(C语言部分)(Linux-3.0 ARMv7) 作者:tekkamanninja 转自:http://blog.chinaunix.net/uid-25909619-id-4938390.html 在构架相关的汇编代码运行完之后,程序跳入了构架无关的内核C语言代码:init/main.c中的start_kernel函数,在这个函数中Linux内核开始真正进入初始化阶段, 下面我就顺这代码逐个函数的解释,但是这里并不会过于深入

学习spring2--跟我一起学Spring 3(3)–使用Spring开发第一个HelloWorld应用

http://www.importnew.com/13246.html 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - 导航条 - 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - iOS - Python - Android - Web前端 跟我一起学Spring 3(3)–使用Spring开发第一个HelloWorld应用 2014/10/10 | 分类: 教程 | 5 条评论 | 标签: SPRING, 教程 分享到

【小程序源码案例】微信小程序项目开发案例分享

作者:web小二本文标签: 微信小程序 小程序源码案例 小程序项目小程序的开发,并不是适合所有公司,我今天跟大家分享小程序方面的教程,主要是供大家学习使用.学习这种东西,有时候则是单纯的喜欢,没有任何目的,很单纯的为了好玩,记得很早之前学flash,没有想法,就是觉得好玩,纯娱乐爱好而已.到后来玩视频剪辑也是出于同样的原因,不图钱财名利,只是图自己个人爱好娱乐. 但是,学习,有时候则是需要有明确目的,特别是关系到自己吃饭问题的时候,你就需要非常有目的去学习,并且还需要制定好学习的计划与目标,希望

《Effective C#》快速笔记(一)- C# 语言习惯

目录 一.使用属性而不是可访问的数据成员 二.使用运行时常量(readonly)而不是编译时常量(const) 三.推荐使用 is 或 as 操作符而不是强制类型转换 四.使用 Conditional 特性而不是 #if 条件编译 五.为类型提供 ToString() 方法 六.理解几个等同性判断之间的关系 七.理解 GetHashCode() 的陷阱 八.推荐使用查询语法而不是循环 九.避免在 API 中使用转换操作符 十.使用可选参数减少方法重载的数量 十一.理解短小方法的优势 一.使用属性

从零一起学Spring Boot之LayIM项目长成记(一) 初见 Spring Boot

项目背景 之前写过LayIM的.NET版后端实现,后来又写过一版Java的.当时用的是servlet,websocket和jdbc.虽然时间过去很久了,但是仍有些同学在关注.偶然间我听说了SpringBoot这么个东东,据说是省去了很多繁杂的配置.可以傻瓜式的创建项目,轻轻松松做出一个网站来,那么出于我对LayIM的情有独钟,于是乎想借用它来帮助我学习SpringBoot,并且全程记录,省的以后再走弯路和掌握解决问题的方法.(当然,我也是新手,我的解决方法就是百度,stackovreflow等网

从零一起学Spring Boot之LayIM项目长成记(五)websocket

前言 距离上一篇已经比较久的时间了,项目也是开了个头.并且,由于网上的关于Spring Boot的websocket讲解也比较多.于是我采用了另外的一个通讯框架 t-io 来实现LayIM中的通讯功能.本篇会着重介绍我在研究与开发过程中踩过的坑和比较花费的时间的部分. WebSocket 在研究 t-io 的时候,我已经写过关于t-io框架的一些简单例子分析以及框架中关于 websocket 中的编解码代码分析等,有兴趣的同学可以先看一下.因为 在LayIM项目中我会是用到 Showcase D