1、程序员是做什么的
厨师或其他很多职业是需要学习、做学徒、拿到认证、出师之后才能成为一名厨师。他是要能做出客户满意的饭菜,而不是会炒菜就可以做厨师的。你问一个人,你会炒菜吗?他会轻松地回答:会呀。你继续问他,那你可以做厨师吗?他一定会急忙摆手:不行,不行,不行。
而你去问一个刚入行的程序员,他一定觉得因为现在能写一些代码,所以他就可以做一名程序员。并且,在他工作之后很久也一直认为程序员就是堆代码的,并自称“码农”。这样的人其实也不在少数,很多程序员对自己这一职业也确实存在着误解。就像厨师和很多其他职业一样,程序员也是要能做出让客户满意的软件,能够解决客户问题的软件才行。
写代码不是程序员的目的,写出好的软件才是程序员的目的。写代码只是我们的手段,如果把写代码当做工作的目的,那程序员是很难做好的。
一个程序员写出的软件解决不了问题却总在不停产生制造问题,不会是一个合格的程序员。
2、程序员职业的两个抓手
软件是什么呢?简单说,软件是程序+数据。程序是软件中的编程代码,而数据则是业务数据,好的软件这两者是缺一不可的。大多程序员却都有这样的一个问题,只关注程序,而不关注业务。
比如说,一个很常见的场景,系统上线一定是要有完整的基础业务数据才能够使用的。先不说上线以后的问题,有多少程序员愿意去梳理导入这些业务数据?在上线初期使用时,业务数据经常是和测试数据有出入的,因为测试数据很难100%模拟正式数据,所以经常会有客户说系统报错、操作不了、不能使用等等问题。程序员呢?大概会回答,程序没问题呀。类似的场景相信程序员经历的是很多很多的。
如果忽略了业务,只考虑“程序正确”,软件的可用性是很难保证的,自然也做不出一个好的软件。
不要讲业务逻辑分析是产品经理的事,客户的业务需求描述是客户的事,或者业务需求是项目经理把控的。要知道,他们很多时候都无法审查程序的细节实现,如果程序员不理解业务,那开发出的软件不仅问题很多,估计埋的雷会更多。
所以,成为一名程序员,一定是要把握技术和业务两个方向的。不仅技术能力要提升,业务理解能力也要同步学习提升。这是程序员学习成长提升的两个必要抓手。
3、程序员的技术发展
技术的必要性我想不需要多讲,技术能力不足,不提软件架构,一个功能页面你可能都不知道该用什么组件实现更好。技术是需要程序员初期几乎要投入全部精力去学习掌握的。
在技术方向,从入门到熟练,大概包含这些方面的知识。
开发语言的基础语法到复杂业务的实现,这是开发的根本,从入门的语法基础,一直要到熟悉语言各种复杂的实现,了解各种最佳实践。碰到一些需求,不知道怎么实现,这是不允许的。
除了IDE开发工具要能够熟练使用之外,开发过程相关的软件工具也都要能够了解并能够熟练使用。比如,前端开发要熟悉浏览器的开发者工具、Postman、蓝湖等等,后端开发你要熟悉数据库管理工具、Maven、服务器等等。
再继续,随着工作经验的增长,经历各种项目后,技术生态的相关技术要能够熟悉,并且相关技术覆盖范围也要越来越大。基本要达到针对各种业务需求,你都知道可以使用什么库去实现,并且知道最佳实践方案。
还有,就是对开发中的主要技术架构要能够慢慢熟悉、掌握,能够对架构中的技术选型做出合适取舍,能够针对业务需求或其他方面需求对架构做出调整。
以上,对一个刚入行的程序员,努力的话一年时间在开发语言、开发工具上应该是没有问题;应该能了解基本的相关生态技术,并且对以后遇到新的技术、开源库也能够从容应对、快速学习;基本架构也是比较熟悉了。再之后,技术方面仍然要去掌握更多的知识,仍然要深入学习技术知识,及时追踪新的技术发展。
4、程序员的业务方向
在程序员这个职业中,技术是相对能够快速掌握的,业务却恰恰相反,而业务又是做好软件更重要的一个因素,并且,自始至终的重要。而不幸的是,业务又是大多程序员比较忽略的一个方向。
哪怕你是刚入行的一个程序员,需求不需管,只需按照项目经理的安排工作就可以了。但是,你如果不了解业务,你可能连一个基本的增删改查功能都做不好。比如,不了解业务,你可能就不了解在列表中客户需要看到哪些内容,哪些内容比较重要要放在前面展示;你可能就不了解,客户的这个业务需要按照哪些条件进行筛查;你可能也会不了解,业务中的某些字段实际会有其他的业务关联。所以,就会有这样的情况出现,程序员说增删改查都可以,做好了;客户却认为,我该看的看不到,需要查的没法搜,保存的数据关联不对,根本不能用。
有同学会说,不需要啊,会有详细的原型设计,按照设计做就对了。真的是这样吗?人与人沟通尚且存在遗漏、偏差,设计是死的,它所传达的业务会更准确吗?何况很多的业务逻辑、数据关联,原型设计是没有办法表达的。
所以,理解业务是做好一个页面、做好一个功能、做好一个软件必需的前提。程序员也应该重视业务,重视培养自己的业务理解能力。从最简单的一个功能的业务,到一个模块的业务;从一个系统的业务,到很多行业系统的业务;多从业务的角度审视软件的逻辑是否正确,是否能满足客户的业务需求。
业务的理解能力又该怎么提升呢?
业务理解能力,不仅仅是客户讲述了他们的业务需求后我们听明白了,而是,我们去思考所有业务环节的输入输出是否能够衔接完整,整个逻辑是否自洽。不断地思考业务逻辑的完整性、自洽性,随着经验的提升,业务理解能力才能随之提升。
5、成为优秀的程序员
技术和业务对于程序员来讲,都是极其重要的,但在你的程序员生涯中,业务方向相对技术方向是需要投入更多的精力的。否则,业务能力欠缺,只能按照原型、按照指示去完成代码编写,那你的替换成本可就太低了,别说35岁危机,30岁你就会有危机了。
如果你在拥有扎实的技术的同时,也逐渐锻炼出了出色的业务理解能力,相信你在程序员阶段一定会做的非常优秀。也希望所有程序员都不仅仅是一个“码农”,而是成为一名优秀的程序员,做出更多好的软件。