楼主: 时光人
821 1

[网帖精选] 程序员的能力要求与工作过程 [推广有奖]

  • 3关注
  • 34粉丝

院士

23%

还不是VIP/贵宾

-

威望
1
论坛币
26910 个
通用积分
429.5268
学术水平
95 点
热心指数
109 点
信用等级
91 点
经验
39970 点
帖子
1630
精华
3
在线时间
580 小时
注册时间
2019-2-25
最后登录
2024-8-28

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

CDA网校:数据科学、人工智能从业者的在线大学。

数据科学(Python/R/Julia)数据分析、机器学习、深度学习


了解、入门、熟练、精通

程序员是一个门槛不高的职业,但是优秀程序员的门槛很高。用代码实现功能是一个十分容易完成的任务。自然语言的语法那么复杂,大家都能很好的组织成文,何况程序语言的那几个单词和几条简单的语法规则呢?花点时间,人人都会。一个优秀的程序员,则需要极强的抽象与概括的能力,还有优秀的逻辑分析能力,沟通和理解能力也是程序员非常重要但总是被忽略的能力;抽象概括的能力是代码简洁优美的基础,逻辑分析能力是代码高效稳定的基础,这两者也是架构能力的基石;沟通与理解能力是代码有效易用的基础。程序员通过沟通才能充分知晓并理解需求,通过理解才能知晓需求背后的本质诉求和需求边界,这样才能写出客户真正想要的代码,真正瞄准客户痛点的代码。

基础能力很重要,但是难以度量。工作这么多年,也阅读了许多简历,有些人在简历上的技能清一色的都是精通。汉语中精通是对一个人技能的最高评价吧。这么多的精通,一个月 20k 的要价不觉得低了么?技术能力永远是程序员的核心能力,上述的抽象概括、逻辑分析和沟通能力决定一个程序员在技术的路上能走多远,有些人工作十几年,技能水平可能仍然是入门,有些人可能工作一年就精通了,这折射的就是这个人的基础能力,而技能水平是易衡量的。

了解、入门、熟练、精通。

技术的四个阶段

了解表示某个人对某个技术有所了解,能说出这个技术的几个特点,比如问你了解 JAVA 吗,如果可以回答出 JAVA 是面向对象的语言,运行在 JVM 虚拟机上,具有跨平台的特点,其他点也可以,只要能知道一两个,就达到了解的水平了。入门,表示会用了,当然不是会写 hello world 了,而是了解这个技术的用法,在搜索的辅助下,能完成大部分的任务,比如用 JAVA 写多线程,处理 Exception。熟练,表示技术人员对某个技术的基本特性有深刻的理解,技能熟练度不再是业务实现的瓶颈,技术人员可以在这个技术的限制之内实现任何自己期望的结果,比如用 JAVA 写一个用户管理系统,用 JAVA 写一个后台服务,定位 CPU 过高、内存泄漏的问题。精通表示技术人员不仅对某个技术的特性有深刻的理解,对这个技术的边界也有清晰的认识,知道这个技术可以做什么,不可以做什么;知道这个技术的实现原理,能处理该技术的绝大部分问题,并有自己的经验总结。精通也意味着技术人员不仅可以用这个技术实现自己的期望,还知道实现得怎样,即这个实现存在的风险,以及风险的处理。怎样的事情需要程序员达到精通水平呢?比如用JAVA 实现一个高性能的稳定的用户管理系统和后台服务。总结下来就是:了解了,会写功能了,会写系统了,会写一个高性能高稳定性的系统了。

技术入门很容易,熟练和精通不易。照着教程,就可以入门了;写功能,几个类,几个方法,简单的抽象和逻辑分析就可以实现,沟通也相对简单;写系统则需要在系统层面进行模块的划分和逻辑过程的切分,要求更高些,沟通过程也较长;高性能高稳定性的系统,不仅要会进行模块的划分和逻辑切分,还需要会进行更加合理的模块划分,更加高效的逻辑切分,这个划分和切分不仅是系统功能的实现的基础,还是系统性能和稳定的基础。对照程序员的水平,一门技术入门是初级程序员,熟练是中级程序员,精通是高级程序员,多门技术精通就是资深程序员了。

沟通、设计、实现、检查、自测、文档

有人误会程序员的主要工作内容就是写代码。如果要做个类比,写代码就相当于餐饮店炒菜的环节,餐饮店还有计划、采购、处理……程序员的工作内容除了写代码,还包含需求的沟通,即知道自己接下来写的代码要实现什么东西;还有代码的设计,即思考接下来的代码怎么写;然后才开始写代码;写完代码还需要检查和自测试,即看看自己写得怎么样了;最后还需要写写文档,让大家知道怎么用你写的东西;有时候还要组织大家评审下,让别人知道自己完成任务了。

程序员的工作过程

写代码,或者程序员的工作的一般步骤是沟通、设计、实现、检查、自测、文档。沟通是理解需求,明白需求的核心诉求和需求的边界;设计是分解需求,进行代码结构和逻辑的设计,如果是在已有代码的基础上的开发,还需要确认当前设计对现有代码的影响,确定修改的范围;实现就是写代码。实际工作中,实现和设计有时候是交替进行的,在实现的过程中发现设计的问题,则需要返回修改设计,甚至完全推倒原来的设计。实现完成后,很多人就认为任务完成了,可以提交测试了。写完代码,检查下,自己阅读下代码,补充注释,删繁就简,这个工作是当下多一小时,未来少十小时的杠杆工作,还可以降低代码的 bug 率,提高代码可读性可维护性。自测保证代码的质量,可以从功能、性能、稳定性、并发四个方面进行。自测的内容很多,实际操作就是写完代码,跑下功能,多跑几次,几个并发一起跑个几分钟。文档一般是程序员任务的最后一个环节,也可以在之前的几个阶段积累。文档包含程序的设计文档,必要的关于功能的说明,比如服务的接口文档,功能的使用方式,还有一些必要的自测试的结论。写好文档,就可以和代码的一起交付给测试,开始代码的下一个生命周期了。

从需求的沟通,到文档的输出,是程序员开发任务的一个闭环,即代码和文档的交付是一个程序员某个任务完成的标志。单纯的代码提交仅仅是写完代码了,不意味着整个任务的完成,文档不仅是对这次任务的总结,也是这次任务质量的一个保证。当一个程序员完成文档输出,并通过了交付评审,意味着他可以开始下一个任务了。有人说,还有 bug 修复,bug 修复属于另一个流程,不属于上述开发中的一环,它应该属于测试中的一个环节。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


已有 1 人评分经验 收起 理由
yunnandlg + 100 精彩帖子

总评分: 经验 + 100   查看全部评分

沙发
yunnandlg 在职认证  学生认证  发表于 2019-10-12 22:42:08 |只看作者 |坛友微信交流群
You got things to do. Places to go. People to see. Futures to make.
我们还有事要做,有地儿要去,有人要见,有梦要实现。

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-10-6 09:18