本文旨在用最通俗的语言讲述最枯燥的基本知识
今日,看到有些文章对码农和程序员做了一些界限划定和差异分析,吓得作者赶紧研究一下自己属于哪个身份,但当仔细查看了这些文章后,发现其实对于写代码的人来说,无非就像周星驰嘴里的”龙套“和”演员“之分,顿时感悟,你是属于码农还是程序员,并不是外界给你定义的,而是你自己对这份职业的态度和付出而形成的一个一种身份。刚好可以借助这段时间作者的一些所见所闻,写几个故事,逐一分析。
文章提纲:
有趣的码农
程序员的自我修养
写一下工作周报吧
不要离公司太近了
最近忙于对公司某个项目进行重构,几乎所有时间都花在搭建架构和编写规范等文档上,以往都是我分析需求、建好数据库表结构、定好开发流程,再把任务分配下去,现在只能把大部分新需求直接交给项目的小伙子来处理。
前两天有个需求是对用户播放视频的行为进行数据收集,我直接把需求丢给小伙子让他全权把控,脱离了我的约束,他也玩的不亦乐乎,三下五除二地就把功能给实现了;提交代码上来后,我瞟了一眼表结构,其中存储播放行为的记录的表名叫做“video_play_log”,当时我心里就咯噔了一下:这名字起的有点局限性啊,但由于时间紧迫,我也没过多的纠结。
后来过了一周,PM跑过来跟我说:“运营反映上次做的用户播放视频的行为数据收集对运营很有帮助,他们希望对音频也做同样的功能”,我心里想:小伙子这下好了吧,一模一样的需求,你是把音频数据放到video_play_log里还是给播放音频的记录建一个新表“audio_play_log”呢?
事实上,这样的现象在开发中屡见不鲜:
有人为了实现一个百叶窗效果,把jQuery1.1到2.0版本的库全引进来,完全不在意页面的性能。
有人为了查到一个数据,把数据库的表关联加子查询再加关联再用内联函数处理,完全不在意SQL的性能。
有人为了达到需求里的流程,代码里的if else嵌套十几层,完全不顾代码恶俗的要命。
....
当上级需要做什么事情时,就按部就班的做事情,干着体力能及的活,拿着适可而止的工资,也不做过多思考,需求写完交差,按时上班、准点下班、对代码不做抽象,也不想解耦,更不会从可扩展性方面思考功能的实现(当然,有些人可能不具备这种大局思维的思考能力,勿怪~)。在领导看来,不差也没有很好;在同事看来,不菜也不是大牛,在自己看来,刚好无欲无求。
诚然,对自己的代码没有太多思考和追求的程序员,这类人可以称之为码农了吧,当然也没有说码农就是不好,没追求就是不好,每个人对自己人生的定义不一样,追求也不一样,当你的理想就是要做这样的一个码农时,嗯,这就够了。
但是当你不停的看到《码农将被机器人替代》、《老程序员应该被雇佣的五大理由!》、《程序自动生成代码》...等之类的新闻报道或者文章时,你的内心感到恐慌:你害怕被老板抛弃,害怕被机器机器替代,害怕你所做的工作在这个世上一文不值时,你就应该思考:
自己应该做一个无欲无求的码农,还是有思想的程序员。
“我不是一个死跑龙套的,我是一个演员”
多少人奉周星驰的《喜剧之王》为电影中的经典,可是有多少能像电影中星爷那样理直气壮地告诉别人:
”我不是一个写死代码的码农,我是一名程序员“
其实要做到并不难,一个人,无论他的身份是程序员,还是掏粪boy,抑或是白衣天使;思考能力,都是人能把任何一份工作做好的必要前提。
一个需求发出,有人拿到了就埋头苦干一通,做出来的东西漏洞百出且扩展性极差。有的人拿到需求之后花一些时间思考,分析需求、拆分逻辑和功能,对于不合理的设计和产品讨论得到确切可行的方案之后,才开工,架构和流程尽可能做到具有弹性和扩展性。
一个页面报错,有的人忙的满头大汗,折腾了一天也没找到问题。有的人却思考问题出现的可能性,使用排除法和调试法,先分析错误码,再定位问题是出现在前端还是接口,定位出来之后,再对逻辑代码进行调试分析,没多久就把问题找到并且修复了bug。
一份代码的编写,有的人东拼西凑,面向过程式的编码,最终功能实现了,代码冗长易读性差,自己也没学到什么东西。有的人会先思考分析应当如何写、哪些业务应该分层、哪些逻辑应该怎么走、哪些代码块应该抽象出来...最终编写出来的代码整洁可读性强、可维护性高,有些抽离出来的代码也可能成为自己的得力工具。
因此,思考能力,是你要想写好一份代码,做一个有修养的程序员是一个必备能力,在日常的开发工作中,当拿到一个需求时,我们应该去思考:
架构:如果构建一个有扩展性的可维护的工程、包、类。
设计:如何设计代码的逻辑,哪里可以抽象,哪里可以拆分。
编码:如何写符合编程规范,做到简洁、安全、耦合度更低。
优化:从性能更高的角度去思考,而不是仅仅从实现功能的角度思考
调试:编码是如何埋点便于问题展示更清楚,问题如何定位、如何调试,如何修复...
这是一个很奇怪的观点。
其实我们心里都有数:程序员都不喜欢写周报,觉得那是文绉绉的几句话一个清单,浪费时间还吃力不一定讨好,有些上司不是程序出身的,发给他也不一定看得懂。
在此我修正一下:这里所说的周报,并不是交给上司那一份,而是交给你自己的那一份。
为什么是交给自己的一份周报呢?我怎么没有交给自己呢?
在此我想你们自己内心回忆一下:上周你做了哪些工作?解决了哪些问题?碰到了哪些坑或技术难点?如何攻克?
可能90%的人都会记得,那么再上一周呢?上一个月?上一年呢?
相信没几个记得吧
你是否曾经因为花了一个通宵攻克下来的功能而兴奋自豪的睡不着?
你是否试过一个bug百思不得其解,最终网友帮你解决了,让你学到一些你没学过的只是而无比开心?
你是否因为自己造出了一个很实用的轮子而迫不及待得想要分享给他人?
这些你都曾经试过,可是现在还会兴奋吗?不会了
当硝烟尽散,一切归于平静之后,有些你曾经很深刻的东西,也会慢慢变得模糊,最终消失。
因此建议你给自己一份工作周报吧,内容不用太多:
做了哪些工作
得到哪些成果
碰到了哪些坑
学到了哪些知识
你每周收集一份这样的内容,日记也好、文章也好、哪怕是一个Excel表格,不断的积累和回顾,会有不一样的收获。
由于公司业务的发展导致人员迅速扩张,公司一个由废弃的旧飞机场改造而成的创业园区租了一个大厂房,打算改造成一个比较艺术氛围的公司,在装修时,极具细心的想到了一些员工需要住宿,因为划了一排房间作为员工宿舍,公司搬进来之后,就有一个名同事入住了这个“新房子”。
我们这些住在外面的同事,嘴上没说啥,但心里都想:真幸福,住公司不拥挤地铁,不用自己出房租,天天都可以睡到8:59起来,多好啊。
一开始他好像也挺享受的,天天睡大觉快到上班时间了悠哉悠哉的起床上班,下班看着我们匆匆忙忙的赶地铁挤公交...
但三个月后突然有一天快下班时,我看到他在拖着行李往公司外面走,我惊讶的说你是去旅游吗?他回答让我出乎意料:他搬出去住了。
后来有一次我们去打球,打完球一起吃了饭,期间,我问他在公司住的好好的为什么搬出去跟我们一样朝九晚六了呢,他说:
“
第一个月:没房租没女朋友,一人吃饱全家不饿,上班写代码,下班在公司看电影玩游戏,工作和生活,玩的不亦乐乎。
第二个月:游戏玩腻了电影也看没了,上班时看着你们匆匆忙忙的来,下班看着你们满载喜悦的走,走到只剩我一个人在公司时,我开始感到有点孤单,在公司住,饿了就点外卖,困了就回房间躺,我的所有时间,都在公司这几百平米的空间里,有人觉得像是世外桃源,我觉得是一个只有我一个烦人的监狱。
第三个月:当项目的工作越来越多的时候,我成了加班的首先考虑对象,每时每刻,我都有可能被工作包围,上一次数据出问题时,老板逼着我查数据查到第二天,等我忙完从电脑桌起来时,你们已经提着早餐进入公司。
常常在夜深人静时,我都在想我这样有什么意义:究竟是省了那点房租?还是省了每天上下班的时间?当我把这些关系搞清楚之后,我发现这其实是在浪费时间,浪费自己的生命,我这段时间的工作收获到的仅仅是那份不需要交房租的薪水,其它的..一无所获。
后来我决意在外面租了一个小房子,每天都按时起床,去附近的公园跑跑步,然后跟着你们一样在路边买了个早餐赶来上班,下班时间,和你们一样匆匆赶回去,在那个小出租屋里,我做了很多事情,买了一些技术书籍,我看到了在工作中我没用到的技术,我的邻居,是一个爱好打篮球的家伙,经常我们约一起去打打球,如果没有什么事情,我就躺着静静思考一些事情,再也不用担心领导突然跳出来叫我查数据或者改代码。这样的工作和生活方式,让我能在工作和生活之间维持一个平衡的状态,我不仅仅靠工作涨经验,也靠生活不断的给予我灵感和前进的线路。
”
听完这些话,作者心里有些失落:原来所谓人之常情的现象,并不是我们表面上所认为的那样发展的。古语云:远水不解近渴,对于公司来说,当你离公司非常近甚至住在公司,就很可能被领导钦点的“加班之子”,加班的次数越多,生活的节奏越容易被打乱,对于个人来说,住得近,内心感觉加班就成了顺理成章的事情。
当你忙到不知道自己在做什么的时候,或许就应该做出些改变了。
欢迎工作一到八年的Java工程师朋友们加入Java工程师学习交流群:795632998
群内提供免费的Java架构学习资料(里面有高可用、高并发、高性能及分布式、Jvm性能调优、Spring源码,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多个知识点的架构资料)合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!