专栏首页java工会如何快速使用从未学过的语言实现项目开发

如何快速使用从未学过的语言实现项目开发

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

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.上线(后面步骤不写了)

当然速成方法的优势是快速应用,如果要深入了解继续加强,总的方法就是多看、多练、多写、多教(写博客教别人用、写教程给别人参考、录视频做分享等)。

我分享的方法只适用于应急场景,那些勇于专研某个领域的人,则不屑于这样的方法论。

文: 博客园 fishpro

推荐阅读

print_r('点个好看吧!');
var_dump('点个好看吧!');
NSLog(@"点个好看吧!");
System.out.println("点个好看吧!");
console.log("点个好看吧!");
print("点个好看吧!");
printf("点个好看吧!");
cout << "点个好看吧!" << endl;
Console.WriteLine("点个好看吧!");
fmt.Println("点个好看吧!");
Response.Write("点个好看吧!");
alert("点个好看吧!")
echo "点个好看吧!";

本文分享自微信公众号 - java工会(javagonghui)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-01-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 现身说法:37岁老码农找工作

    他说他们部门调整,虽然最后他留了下来,但还是非常焦虑。人无远虑必有近忧,他这次被刺激到了,想提高一下自己,以免下次再有类似的心惊肉跳。但怎么提高呢?

    三哥
  • Linux部署项目常用命令

    三哥
  • 团队如何进行CodeReview

    三哥
  • Python开根号

    (现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了。最近发现了一个非常适合小白入门的教程,不仅通俗易懂而且还很风趣幽默。所以忍...

    py3study
  • SAP CRM CUSTOMER_H扩展字段的设计原理

    If we add new extension field to include structure INCL_EEW_CUSTOMER_H via AET o...

    Jerry Wang
  • Python简单实现基于VSM的余弦相似度计算

    在知识图谱构建阶段的实体对齐和属性值决策、判断一篇文章是否是你喜欢的文章、比较两篇文章的相似性等实例中,都涉及到了向量空间模型(Vector Space Mod...

    周小董
  • 【Go 语言社区】跨域问题解决方案:jsonP客户端和服务器代码

    客户端代码: <html> <head> <script type='text/javascript'> function mycallback(reco...

    李海彬
  • OpenAI开发的机械手不需要人类来教,可自主学习,模拟人类行为

    当你还是个婴儿的时候,用手抓东西是你学会做的第一件事,但这绝不是一件简单的事情,它只会随着你的成长而变得更加复杂多变。这种复杂性使得机器很难自学,但是Elon ...

    程序你好
  • 面试 HTTP ,99% 的面试官都爱问这些问题

    HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol),HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视...

    cxuan
  • [续]iOS开发中的这些权限,你搞懂了吗?

    Jacklin999

扫码关注云+社区

领取腾讯云代金券