请画出与上述代码对应的程序流程图;_程序员工作到底是啥?以案例说话,献给有意愿成为猿的朋友...

adf84c5732ca59f1e063cb53561eeeb2.png

以多年迷茫底层老码农的视角,以一个博客开发项目案例,讲述一下各种岗位程序猿到底在干啥,希望对想要进化为猿的同志有一些帮助。这篇也是将之前写过的博客进行了聚合和整理。

一、前言

本文用一个博客网站开发为案例,主要涉及岗位有:项目或需求、产品设计、UI设计、前端(h5、安卓、IOS)、后端(高级和初级java)、测试、运维。不过在不同的公司,这些岗位不见得都有。

由于猿小明曾经是搞java的,所以后端开发部分可能会啰嗦几句。当然也由于一直处于弱鸡的水平,基本还是以码农视角,不涉及架构这种高端工种。

主要涉及内容:需求分析和制定、产品设计、开发(前端、后端)、测试、上线(运维)

如只想看程序猿干啥,请直接跳到第四部分


二、需求制定

1、需求制定会议,可能参与人如下

(1)项目流程清晰明了的话:需求提出方、项目管理、产品设计、开发leader等。

(2)项目流程混乱一点的话:上面那一堆人,再加上开发人员直接介入。

2、模拟需求获取

每个软件系统都是从获取需求开始的,这个需求获取有个大特点,就是需求方(后简称甲发)会给出很简洁的描述,随后附上一句“功能简单实现能用就行“。

碰上这句话最大的感觉肯定就是——来来来,你把脸伸过来。虽说这样,毕竟是乙方,也只能笑脸相迎,技术有啥解决不了的呢?是吧。

哈哈哈,开玩笑了,这部分重要是沟通吧,尽量把甲方大爷的内心独白猜出来,引导他们说出一个大概的具体需求是啥。当然,这方面个人也是比较欠缺的,只能猜一下了。下面对话都是自己编的。

甲:帮忙做个网站呗,个人博客的,照着啥啥博客网站做就行了。

乙:(内心:握草,上来就要csdn啊,那你先给我一个亿),这难度有点高啊,有具体的功能描述没,最好有个文档说明(当然肯定不可能有了)。

甲:没有文档,能发个博客,带图带字的就好了。

乙:博客需要进行分类吗?

甲:需要。

乙:这个个人博客,可以其他用户使用吗?比如支持用户注册发表博客,还是单纯你自己个人博客,其他人只能看。

甲:自己能发表博客,其他人只能看。但是可以邀请认识的人来进行注册发表博客。

乙:需要个人信息设置吗?

甲:这个得有一个自己的介绍,但不是必须的,也要有个头像啊,最好还是能上传修改的。(想想就麻烦啊)

这个先写这么多吧,实在编不下去了。总结一下就是做一个个人博客,可以发布文章。相当于博客网站的一小部分功能。

3、需求分析

3.1 权限控制

博客主页有登录,没有注册。博主可以通过登录进入到个人主页,游客也可进入登录页面,但没有意义,可以浏览博主的博客。后续再加入游客留言功能。

3.2 个人信息页

头像,昵称,职业,个人介绍,邮箱,电话,qq,微信,博主可进行编辑修改。

3.3 博主进行编辑博客

可以写代码,字体颜色,图片,文字大小等,文章类别,标记转载原创等。后续加入草稿,随时自动保存功能。

3.4 博客管理

博主修改,删除个人博客文章,对文章进行分类。


三、产品设计

1、可能的参与人

产品leader、产品经理、技术leader们(参与评审,删减不可能达成功能)

2、产品经理设计如下(负责任的产品会非常详细)

产品用到的的各种工具,画流程图和页面简图,主要是根据需求分析得到如下结果

2.1 业务逻辑流程

页面跳转流程图如下,用word画的,最好还是用visio这种专业工具比较好。

(注意:所有页面均可通过logo跳转到主页,并且登录用户都可通过点击头像图片到个人博客管理主页,这里没有画线)

0df44b648c4905ce3f453a5600c8ebcb.png

2.2 流程、功能说明

(1)主页index功能
1)显示10篇最新发表博客
2)显示5名博客最多的作者
3)显示5名新注册的作者
4)游客显示登录按钮(进入登录页面),登录用户显示博主昵称(点击进入博客管理主页myblog)和退出(刷新当前页)
5)点击推荐的博客进行阅读(跳转博客阅读页readblog)
6)点击推荐作者查看作者个人信息(跳转到博主个人主页blogger)

(2)博客管理主页myblog
1)显示个人信息,设置个人信息(跳转设置页setting)
2)分类管理(跳转博客分类页editcategory)
3)分页展示个人博客,选中博客点击编辑(跳转博客编辑页editblog),或者删除博客刷新当前页
4)点击阅读个人博客(跳转博客阅读页readblog)

(3)设置页setting
1)显示和编辑个人信息,进制修改昵称,可修改个人密码
2)修改完成,可返回(跳转到myblog)

(4)博客分类页editcategory
1)增、删、改添加新分类名称
2)点博客返回myblog

(5)博客编辑也editblog
1)对个人博客进行修改,保存成功后返回myblog

(6)登录页login
1)输入用户名密码,登录成功(跳转到myblog)
2)失败给出提示
3)取消登录,返回myblog

(7)博客阅读页readblog
1)展示博客内容页面,点击博主头像返回myblog

(8)博主个人主页blogger
1)展示博客内容和作者信息,点击作者头像返回blogger

3、 页面样式设计(Axure)

这部分由于不会UI设计,只能用Axure画出各个页面大概的样式,可能比较简洁,也是按照个人博客一些模板画出来的,肯定不好看。

3.1 主页index

最终可能与当前图片有些出入,对Axure尺寸和html页面没有一个整体的认识,估计多做几次就了解了。很是朴素,怕html太复杂。

a13b6cc1273e5b03d0a02d59bfdae169.png

3.2 login页面

bd33792229a754b4ec9651087bd97823.png

3.3 博客管理主页myblog

59de0d082ded4ff1257e95ca6d19a51d.png

3.4 设置页setting

红色字体是解释,在页面不显示

d58f5b84c90ad3e7efc06f81e718e3a2.png

3.5 博客分类页editcategory

26683787be04ba401f5d079c9d788309.png

3.6 博客编辑页editblog

be4348c1cf4d9694f81b4027ce945ee6.png

3.7 博客阅读页readblog

4cc97f3fb31c81bc65958da3b069523e.png

3.8 博主个人主页blogger

58727ad7aa3b70549eb849d0b80a28ad.png

4. 说明

每页的头部,是相同内容,登录用户展示昵称、设置、退出。未登录用户展示登录。

真实页面样式有可能与axure出入比较大,这是由于对于前端技术和UI设计没有整体认识所致。


四、程序猿开发

后端程序猿可能参与的工作:参加产品讲解、了解测试用例、接口文档编写、数据库设计、代码开发、写单元测试、与前端联调、修改bug、coding review(大概率没有)、准备上线程序和配置文件、修改线上问题。

java后端开发,个人认为最主要就是了解业务逻辑、数据库设计、接口文档这三部分。这三部分搞完了,代码顺着去写就好。

当然,涉及到特定业务场景,如秒杀系统,时间长的io操作,金融相关的数据一致性等等,代码逻辑就变得比较难了,不过都有方法去解决。

1、主要参与人

项目管理比较清晰的情况:产品经理、UI设计、前端、后端、测试,以及开发各组负责分配任务的leader

2、各自任务

(1)产品经理召集会议,讲解产品设计
(2)各组负责leader,了解需求,确定任务量和分配
(3)UI设计,根据产品设计进行页面设计
(4)前端,根据产品设计进行前端开发,需要从UI设计获取设计图
(5)后端,数据库设计,后端开发,接口文档撰写,与前端联调
(6)测试,出测试用例文档,给开发人员讲解测试规则,程序测试

3、java程序猿开发

3.1 数据库设计

高级程序员、小组leader或者自己根据产品设计进行数据库设计。

(1) 数据结构图(powerdesigner画的)

471f2bd938f2117232ba171b5e26443b.png

说明:该表的设计一些规则是根据阿里java开发手册,mysql规约部分完成,找个规则会省心一点。

(2) 博客应用表设计说明

该部分有4个表组成,具体信息看图即可,具体关联关系,一对多在"多"内放"一"的id,一对一用的多的"一"内放另一个"一"的id

blogger与blog表是一对多关系,在blog表里边有"博主id"字段,用于内容的关联查找。

blog与blog_content内容是一对一关系,需要通过博客内容id,去找到博客的具体内容。

blog_content内容,这部分是保存富文本框内编辑博客的主要内容,由于该部分比较多,单放到一个表中去保存(具体原因没有试验过,根据那个mysql规约,是可以提高表的检索效率,先保证功能完成,以后实验)。

blog_category,与blog是一对多的关系,与blogger是多对一的关系。

(3) 博客管理表设计说明(待定)

这部分想了想,由于涉及到一些博客审核发布,或者管理员查看博客,博主相关信息,需要到完成主要功能后补充这部分功能。软件初期由自己直接向数据库中添加博主的信息吧,也比较容易。随着用户或者博客量的增多,需要一个管理系统来该web项目进行维护。

(4) 生成数据库(powerdesigner生成)

利用powerdesigner直接生成sql语句,用navicat或者mysql数据库直接运行即可,如下图

47523cb0170b84467ed94aa7a7d3bff1.png

将preview窗口中的所有内容复制出来就是可执行的sql语句,每个表内容在博客应用中双击就会弹出表结构,同样是preview窗口可导出单个表创建的sql。

如有表结构的更新,需要先删除表,再用上述方法导出sql创建表。如果已存在数据,请在mysql或者navicat内修改表结构进行保存。

3.2 接口文档(这个开始就得自己做了)

在开发之前,需要写好接口文档,然后将文档发送给前端。接口文档有好多工具啦,代码管理的github、word啥的都行,看团队要求。

下面就是根据产品和数据库设计,写了一个接口文档,大概的格式也就这样吧。如果用团队协作工具写的话,就是copy以前,然后改掉内容,格式完全不用变。

3.2.1 接口设计说明

接口设计,即html页面请求到,java后台返回数据的接口。预期实用restful风格,所以接口形式是url+请求参数,数据格式为json。由于文章统计阅读量和博主的总阅读量这部分没想好如何去实现,所以暂时先放一下。基本上是每个html加载后进行一次请求获取数据,然后重写页面数据内容。其实,写一大堆接口,单纯就是为了做前端html和后端java两个人同时工作使用。这里基本就一个人做了,直接写代码也可以的,既然写了也只是为了试着写写。

一般接口文档格式就是:

url: "域名/请求路径"
请求方法:GET(或者POST)
请求参数:无
返回值说明(data部分):用一个表格,说明每个值的类型、含义,例如(id,int,博客id。status表示返回状态也要说明,如200表示成功,500表示服务端错误等)
具体返回值例子:json格式
{
status: 200,
message: "successful",
data:{
“id”: 123,
"name": 张三,
"sex": 男
}
}

3.2.2 接口设计文档

每个页面都有几个接口,一般就是对应的不同操作。

这部分内容太多,就直接把返回值说明和返回值例子放到一起了,如下面第一个例子(主页index),全部返回应该是:

{
status: 200,
message: "successful",
data:{
“blogList”: [{......}],
"bloggerList": [{......}],
"newBlogList": [{....}]
}
}

(1) 主页index

加载完成后获取数据:10篇博客、5名博客数最多的作者、5名新作者(这数量可能代码实现有调整,根据页面展示情况)

url: "/fblog/ blog/indexData"
请求参数:无
返回:json
blogList: 博客列表,每个元素内容,例
[{
id:123 博客id,用于点击进入阅读页定位博客。
title:"create blog" 博客标题
createTime:"2016-06-07" 博客创建时间
nickname:"bjjoy" 作者昵称
summary:"aaaaaa" 博客简介
}]

bloggerList:作者列表,每个元素内容,例
[{
id:333 作者id,用于点击进入作者主页。
nickname: "bjjoy" 作者昵称
profession: "IT" 行业
blogNum: 3 文章数量
}]

newBlogList: 新博客列表,每个元素内容,例
[{
id:123 博客id,用于点击进入阅读页定位博客。
title:"create blog" 博客标题
}]

(2) login页面

点击登录操作,登录成功跳转到myblog页面,失败给出提示,取消返回index

url: "/fblog/blog/blogger/login"
请求参数:无
返回:json,保存至localStorage,多页面实用比较方便
id: 123 博主id
nickname: 博主昵称

(3) myblog页面

i)加载完成,发送请求获取数据。个人信息和博客列表。

url: "/fblog/blog/blogger/getBloggerInfo"
请求参数:json
id: 333 作者id(localStorage.bloggerId)
返回:json
blogList: 博客列表,分页形式,每个元素内容,例
[{
id:123 博客id,用于点击进入阅读页定位博客
title:"create blog" 博客标题
createTime:"2016-06-07" 博客创建时间
nickname:"bjjoy" 作者昵称
summary:"aaaaaa" 博客简介
category:"web开发" 分类名称
readNum: 0 博客阅读数(暂时没做)
}]

profession: "IT" 行业
gender: 0 性别,根据0,1展示男性或女性
address: 火星 地区
birthday: 2017-03-03 生日
summary: 程序猿 作者简介
totalReadNum: 0 总阅读数(暂时没做)

ii)点击博客搜索按钮

url: "/fblog/blog/blog/searchBlog"
请求参数:json
bloggerId: 333 作者id
title:"create" 博客title,模糊查询
gmt_create:"2016-03-09" 创建博客时间
categoryId: "999" 类别id
返回:json
blogList: 博客列表,分页形式,每个元素内容,例
[{
id:123 博客id,用于点击进入阅读页定位博客
title:"create blog" 博客标题
createTime:"2016-06-07" 博客创建时间
nickname:"bjjoy" 作者昵称
summary:"aaaaaa" 博客简介
category:"web开发" 分类名称
readNum: 0 博客阅读数(暂时没做)
}]

iii)点击类别,给出类别下拉框

url: "/fblog/blog/category/searchCategory"
请求参数:json
bloggerId: 333 作者id
返回:json
categoryList: 类别列表,每个元素内容,例、
[{
id:123 类别id
categoryName:"web" 类别名称
}]

(4) setting页面

i)点击保存按钮

url: "/fblog/blog/blogger/save"
请求参数:json
id: 333 作者id
profession: "IT" 行业
gender: 0 性别,根据0,1展示男性或女性
address: 火星 地区
birthday: 2017-03-03 生日
summary: 程序猿 作者简介
返回:json
success: true 保存成功或者失败

ii)点击修改密码弹窗后保存修改密码操作(密码md5加密)

url: "/fblog/blog/blogger/modifyPwd"
请求参数:json
id: 333 作者id
oldPwd:222 旧密码
pwd: 555 新密码
返回:json
success: true 修改成功

(5) 博客分类页editcategory

i)页面加载完成获取分类信息
url: "/fblog/blog/category/getBloggerCategory"
请求参数:json
bloggerId: 333 博主id,localStorage.bloggerId
返回:json
categoryList: 对应博主的分类列表[{"id":"123","categoryName":"web"}]

ii)删除分类

url: "/fblog/blog/category/del"
请求参数:json
id: 333 分类id
返回:json
success: true 删除成功

iii)添加或修改分类

url: "/fblog/blog/category/save"
请求参数:json
id: 333 分类id(添加值为空)
categoryName: nnn 分类名称(不能为空)
返回:json
success: true 更新完成

(6) 博客编辑页editblog

这部分涉及富文本框,可能麻烦一点,需要有图片上传功能,需要制定图片路径规则,这里等做的时候再详细说。暂时还不了解富文本框如何去进行操作。

i)更新和保存博客

url: "/fblog/blog/blog/save"
请求参数:json
id: 333 博客id(新博客值为空)
title: "nnn" 博客标题(不能为空)
summary: "啦啦" 博客简介(不能为空)
content: "123455" 博客内容
返回:json
success: true 更新完成

ii)添加图片(这部分需要验证)

url: "/fblog/blog/blog/savePicture"
请求参数:json
file: aaa.jpg 图片
返回:json
filePath: /aa/123.jpg 新生成的图片路径

(7) 博客阅读页readblog 与上面类似

(8) 博主个人主页blogger与上面类似

3.3.3 说明

这里数据格式给的不是很规范,只是简单地写了可能有哪些内容,都是json字符串。数据通信部分采用ajax。图片部分可能需要学习一下,找一个富文本框编辑器,用ueditor或者bootstrap的,也可能是其它,边做边看了。希望格式和预想的一样吧,如果有不同再进行修改。接下来就进入编码实现阶段了。由于本人对前端技术js,html,css不是很了解,所以打算先把前端做好,同样是边做边学吧,可能节奏会慢。

3.3.4 可以开始开心的撸代码了

(1)全部自己撸代码,对数据库的增删改查
(2)任务繁重,可能划分模块撸代码,自己负责接口层(只是读取数据库),其他人负责服务层(写入数据库)

五、联调测试上线

1、根据之前接口文档,与前端联调,中间可能出现需要调整文档,需求变更等情况。

2、联调完成,发到测试服务器,由测试同事进行测试,自己盯着bug系统,修改bug。

3、提交代码到线上分支,由leader合并代码(这个也可能就是自己合并一下就行了),根据管理要求提交上线需要的文档。

六、线上问题出了根据管理流程改

这个一般大厂比较严格,涉及到绩效啥的,普通的地方改了就行了。

以上就是一个博客系统开发的简略流程了,其它项目也都差不多,差别也就是公司啦,不同的地方管理制度不一样,开发流程有简有繁,各有各的好处和坏处。

下面是曾经写过的一些公司的开发流程,没有具体案例,和这篇套在一起,感觉就是程序猿的工作了,有点意思不?哈哈哈哈

猿小明:大国企下属企业小互联网团队程序猿日常​zhuanlan.zhihu.com
03bb418b5ecf97fa1a0fa5d234e4b901.png
猿小明:小上市私企混乱型java岗位日常​zhuanlan.zhihu.com
f927d6700a496bed4d7dd1018747be94.png
猿小明:小互联网公司恶心型java岗位日常​zhuanlan.zhihu.com
b36a7228b4d651f8d1e4857a2c1c9da4.png
猿小明:金融小公司java开发岗位日常​zhuanlan.zhihu.com
599fc43a93ca2a0e0e33465dcc621989.png

如果觉得这篇文章值得细品,点个赞,这样下次就可以在你的首页动态里找到文章。

也可以关注@猿小明,及时获得各种公司、团队日常工作生活信息。

也可以关注公众号「迷茫猿小明」,实时获取学习资料、职场趣闻,一起讨论分享职场生活

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值