由于软件服务外包协会培训,此次培训由我们Java后端学习小组负责,特写一篇博文以作总结。
相信大家在选择IT这条路的时候,很期待的一件事情就是开发一款属于自己的App,包括我自己在内,但是无奈没有什么概念,这种想法往往就会扼杀在萌芽阶段。
所以这里我来讲一讲我们大学生如何来开发一款App。
一个好的idea往往是一个App的起源,比如你现在看到的qq、微信、淘宝等有名的App,都是起源于一个小小的idea。
这个idea往往确定了你这个App的方向,决定了你这款App的发展趋势。
但是有一个好的idea是远远不够的,有多少项目是被扼杀于idea阶段;又有多少项目虽然有一个好的idea,但没有一个好的实施手段,终究走向失败。
所以一个好的idea只是你开发一个App的第一步。
有了idea后,我们接下来要做的就是根据这个idea进行拓展,深挖需求并形成需求报告。
这里的需求是确切的、具体的,也就是说不该出现那种乍一看不知道怎么去实现的需求。
这个阶段其实是非常耗时的,因为你要从一个idea转变成具体的需求报告,尤其是这个idea并不完善时,这个任务难度也会增大。
作为大学生团队,想要开发出一个初代App,你必须要以下人员配置:
美工、前端、后端。
这个配置是必不可少的,当然如果前端会干美工的活,那也可以不用美工。
PS:我还是建议有美工的配置,毕竟人家专业嘛。
说完人员配置,再说说分工,一般开发一个App也有以下步骤,分工如下:
每个人负责自己的部分,各司其职,协作开发。此时负责人的领导力将会发挥大作用,如何让每个成员贡献自己的一份力量则是负责人该好好思考的问题。
作为大学生团队,对于一般的App开发,所需的设计主要分为以下三个:
UI设计主要由美工来完成,这里放一些我自己在做的那个App的部分UI设计初稿以作参考
这个是我们实验室一位美工大佬做的,比我们当初设计的专业多了!
什么是接口设计呢?
大家或许常常听到面向接口编程,但往往不知道什么是接口。
在App中,我们说的接口通常是指前后端交互的一个规范,它明确了请求的方式和请求路径以及响应的数据格式等等,它是连接前后端的桥梁。当然,它还有另一个名字,就是我们常说的API。
所以说接口很重要,需要在编写之前就确定好接口,不然到后面开发的时候前后端就会因为接口问题产生矛盾,所以我们要在正式编写之前把接口设计好。
这里我拿我在做的那个App为例,展示一下接口长什么样子。
PS:我们是在网易的NEI平台上做接口管理的
以上是一个简单的接口演示,其实接口设计的内容远不止这些,在这个过程中还要制定前后端交互规范等等…
为什么别人淘宝能抗住双十一那上亿的并发量,为什么我们的App稍微来个两三百的流量冲击服务器就直接宕机了呢。
这背后就是架构的力量,为什么人家淘宝能抗住那么高的流量冲击?那是因为人家背后的系统设计是极其复杂的,并不是我们这种简单的单体垂直架构能比的。
但这并不是说架构设计一定要越复杂越好,如果一个只有几十流量的App你却要把它设计成能抗住上万并发的分布式系统,这只能说明你有钱有时间。
一个好的架构设计应该是根据App自身的情况来进行设计,千万不要过度设计,一个能抗住上万并发的系统肯定比我们平时随便编写的系统要好,但是这是以系统复杂度和高昂的维护成本为代价的。
前端:前端拿到美工设计的UI设计稿后就可以开始逐步写代码去实现了,但是这并不是说前端一定要等着美工把所有都设计出来再做,我们完全可以把确定下来的页面先完成。
后端:根据之前的架构设计搭建出一套自己框架环境,然后在这之上去逐步完善接口。
PS:一般大学生开发的App一般都是选择最传统的单体垂直架构,不推荐去玩那些分布式微服务之类的,那种系统复杂度高,且服务器也是一笔巨大的开销,这对大学生而言一般无力承担。
等你的App发展好了,得到学校的支持之后,再去玩那些也不迟,这时就要对之前的代码拆分重构,当然最好是写的时候就考虑到这点,这样后期拆分也会容易很多。
写完代码之后,此时应该做把后端写好的东西打包部署进行测试。
而测试大致分为以下几类:
单元测试:
这个最好是在写代码的时候就进行,每写完一部分代码,就进行一次单元测试,这有利于你检查出错误,因为这时候的bug还是比较好找的,等你到之后部署上线进行联调测试时,bug定位将会极其困难。
接口测试:
这个最好也在开发阶段就先自己简单测试一下,测试成功了再提交代码,当然,在正式部署到服务器上测试时,要对每个接口进行测试,看是否返回预期的数据
联调(实机测试):
这个一般就是以一个用户的角度体验我们写出来的App,从注册到登录,再到使用,看看这个过程是否有bug或者体验不好的地方存在。
这个阶段就是一个循环往复的过程,测试出bug了就重新去改代码,改好后再测试,直至测试后发现没什么太大的问题,在进入下个阶段。
接下来要做的就是将你的程序真正发布到生产环境中,再把你的App推到各大应用市场。
到此已经开发出了一个初代App,此时进入运维阶段,开发人员根据用户的反馈和实际运行的情况来进行修改、调整,但App开发之路到此并未结束,根据后期业务和用户量变化,当初设计的东西都可能会发生改变,这就会促使App开始迭代,促使架构升级更新…
之后涉及的东西与此次培训无关,就不再赘述,有兴趣的同学可以去自行了解一下架构演进方面的知识。
总之,一个App的开发绝不仅仅你看到的那么简单!
现在我们已经大概了解了大学生开发一个App的流程,现在我们来思考一个问题:
Java后端开发在App开发中扮演了什么角色?
要回答这个问题,我们必须要知道什么是Java后端开发。
什么是Java后端开发呢?
或者我们换个问法——前后端开发的区别是什么?
拿我们身边最常用社交软件qq、微信举例,你看到所有图片、布局以及你点击滑动所产生的交互效果,这都是前端的功劳;那么后端干了什么呢?看看你的聊天记录,看看你的账号信息,这些数据哪来的?就是从后端传过来的。
如果从分布来界定的话,那么你手机上的App就是前端,后台服务器上跑的程序就是后端。
所以回到最初的问题上来,Java后端开发到底扮演什么角色呢?
我觉得如果说前端负责的是数据的展示和用户的交互的话,那么后端就是负责数据的存储和数据的处理。后端上的东西是用户不可见的,但是又跟用户息息相关。后端开发就是默默担任着这种工作。
这个是b站up主CodeSheep推荐的学习路线,其中包括了很多学科基础知识,像数据结构,算法,计算机网络,操作系统等等,这些东西看似对于我们开发而言收效没有直接学专门的技术来的快,但是这些知识会为我们未来打基础,我们能走的多远在于这些根基是否牢固。
但是上面有些技术并不是全都要学,比如统一方面的技术只需学其一即可。
这其实是个很实用的学习路线,它上面讲的东西如果认真去学,那么你确实可以在短时间内成为一个大佬,但是再往前走还是要回过头来修炼“内功”,看看那些经典的书籍和大佬写的博客。
在这里我把Java学习分为几个阶段:
PS:这里阶段的划分是根据我自己技术进步的感觉来划分的
这个阶段主要是学习Java基础知识,掌握Java基本类库的使用。
在这个阶段后,你会感觉自己终于学会了们新的语言,会感觉到自己技术的进步。
此时你开始接触开发所需的基本知识,如数据库,服务器,网络协议,jdbc,git,maven等等…
此时你学了很多知识,对于开发有了大致的印象,但会感觉到学了很多,但是有点难以串起来,此时你需要一个小项目来串联你所学的技术。
此阶段你开始接触框架,学习典型的SSM,SpringBoot,此时你会发现原来开发可以这么简单。
此时你应该尝试用自己的所学去做项目,比如搭建自己的个人博客。就比如我的博客,当初我还为此写了一篇博客【项目实战】个人博客(SpringBoot,SSM,thymeleaf,Semantic UI)——从设计思路到部署一站式教学。
接下来你一般会遇到困惑——我是该继续往上学,去学分布式微服务呢?还是往下学,学习源码原理来巩固基础呢(因为此时你也大概明白自己基础的薄弱)。
当然,无论你选择哪个,或者你选择两个同时进行,都没关系,前者会提升你的眼界,让你从一个设计者的角度去分析问题,后者会夯实你的基本素养,为你未来找工作打下坚实基础。
PS:我的建议是两者齐头并进的。
此时你应该回归底层,去探究一些底层原理,如jvm的运行机制,spring框架的核心原理等等…可以多看看一些经典的书籍(比如Thinking in Java)和大佬博客以及一些好的课程。
这个阶段你会发现之前学的真的好不扎实!
有了上述的基础,你就可以开始研究架构方面的知识,你应该以一个设计者的角度去学习,可以从当前的单体架构开始学习,一直到现在流行的分布式微服务…
尤其是你自己去维护一个App,然后试着去模拟架构演进的过程时,这会非常有意思!
这块内容其实我在我曾经写的另一篇博文用我的亲身经历来告诉你如何自学Java?讲过了,你是否学的好,在于你的目标是否能够支撑你接下来的自学之路,在此就不多做赘述了。
以上就是20学年软件创新实验室第二次培训的内容,主要分享了大学生如何开发一款App,讲解了下什么是后端开发,分享了下Java后端开发的技术路线以及怎么去自学。
至于我为什么不去讲那些具体的知识点呢,这我是有考量的,首先,在有限的时间内教不了多少知识点,而且效果不一定好;其次,初学者如果直接从具体知识点入手,就像我们打开一个项目直接去看源码一样,很容易迷失在其中,渐渐失去学习的方向和兴趣。所以我此次培训采用自顶而下的讲解思路,先从宏观讲App开发,激起大家的学习兴趣和热情,再慢慢往下讲解Java后端开发,给大家一个方向上的指导,再教大家如何去自学Java,毕竟,授人以鱼不如授人以渔嘛。最后再开始实验室传统——手把手教讲解安装jdk,idea以及配置环境的步骤以及原因。
其实培训时不止讲了这些,还有环境配置和答疑环节没有写到,但我觉得那些没有必要记录,再加上我时间有限,所以未过多记录。
最后,祝大家都能以梦为马,不负青春韶华。为着目标,努力前进吧!
PS:该培训已录屏,具体地址:浙江师范大学软件服务外包协会20学年第二次技术培训——Java后端技术培训
微信推文:第二次培训——Java后端技术