作为一个即做过后台开发,又写过前端代码,还带过几批开发兄弟,后来又干过业务的人,我对做开发和写代码的不同有一些感悟。
写代码和做开发是不同的,从一个新手程序员接到的任务开始讲吧!
一般新手程序员会被分配一个任务,告诉你要写的模块功能需求和输入、输出要求。
这个时候,新手会查看之前的前辈们写的代码参考,复制可用的部分,中间填上功能逻辑。
很多坑就是这个时候埋下的:
1. 在一个程序员尚不清楚整体业务逻辑和总体需求,只知道部分要求的时候,进行功能开发规划和写代码时,就会自然而然地惯性思维驱使下,进行简化代码的逻辑功能、高度耦合代码功能块,逻辑分层非常混乱,可能过两天就看不懂自己在写什么了。而当需求变更时,往往程序员会非常痛苦,因为在代码功能高度耦合的情况下,必须重新编写功能才能完成变更,原先的代码逻辑已经“改不动”了(悲剧!)
2. 直接调用或复用前辈留下的代码(遗产!)是存在风险的,很多时候新手程序员并不清楚复用的代码当时为什么这么写,调用的功能内部除了注释上写明的功能外还干了其他什么事,就这样直接拿来用了之后,可能需求是满足了,但是实际上线后,各种匪夷所思的BUG、问题随之而来。造成耗费大量时间排查问题后,确认问题出在某段被盲目复用的代码上。
3. 新手在写代码时对开发语言本身的理解还停留在教科书上的语法阶段,如何使用语言提供的强大框架、调用现成的API和功能函数等都是不清楚的,或者说非常迷茫,往往为了实现一个功能,自己去写一个复杂的代码逻辑,或者不知道某个API的坑,调用之后留下隐患。
以上对新手程序员的描写就是“写代码”的情景描述。
而“开发”是什么?
“开发“是有规划、有目标的
一、有规划
在被分配一项任务时,开发人员会去了解整体需求,如果拥有1~2个同类项目经验的话,还会为未来可能出现的需求变更预留余地,会分解功能里的逻辑,写出逻辑层次分明的代码,并且代码功能块的耦合度较低。这样在敏捷开发流行的今天,在做需求变更的时候就非常的轻松。(我本人就是这样)
二、有目标
开发做出的系统不止是完成需求要求的基本功能,还要考虑代码执行效率、数据库的使用是否合理、调用其他同事写的方法前要查看源码是否有不适合的逻辑,对于框架、API等也要多调查网上的资料,看看是否有坑。对于并发控制(数据库)、线程调度(后台)、容器重用(前端)等也要有所认识。更高阶的需要考虑安全,一些访问的控制,代码的健壮度(不能因为送了一个错误的参数就抛错误崩溃了)、算法问题造成的溢出等。
总结
所有程序员都是从Ctrl+C、Ctrl+V开始的,都会走过一些坑,尤其是现在流行的敏捷开发,会遗留大量的垃圾代码。因为需求不明确,功能模块规划就模糊、界限不清楚,再加上某些科班出生的程序员会有“迷之自信”,认为能把100行的代码浓缩写成1行是很高超的技巧,给运维留下很深的隐患。
一个程序员,从新手的“写代码”成长为有经验的“做开发”,需要经历至少2年(1~2个大项目,可能会有大量加班996那种)。
P.S. 其实在前端和后台做开发也有很多门道。之后再写那部分,未完待续。。。^_^