程序员为什么你那么累!!!

前言
一提到程序员,大家首先想到的是以下标签:苦逼、加班、通宵熬夜。但是,凡是工作了的人都知道,其实大部分程序员做的事情很简单,代码CRUD可以说毫无技术含量,就算什么不懂依葫芦画瓢很多功能也能勉强做出来,做个多线程并发就算高科技了,程序员这行的门槛其实还是比较低的。(这里说的是大部分,有些牛逼的,写算法、jvm等的请自动跳过)

这里写图片描述

是不是觉得很矛盾,一方面工作不复杂,一方面却累成狗,有没有想过问题出在哪里?有没有想过时间都花在哪里?

大家写的东西都是一些crud的业务逻辑代码,为什么大家这么累,加班加点天天都是奋斗者?我发现大多数人的大部分时间都是在定位问题 + 改代码,真正开发的时间并不多。定位问题包括开发转测试的时候发现问题和上线后发现问题,改代码的包括改bug和因为需求变动修改代码。

所以说,simple is not easy。很多人因为觉得简单,所以功能完成自己测试ok了就算了,没有思考有没有更加好的方式。归根到底是因为编码习惯太糟糕,写的代码太烂,导致无法定位频繁修改频繁出问题。

编码习惯比技术更重要!
其实,对于个人来说,技术很重要,但是对于工作来说,编码的习惯比技术更加主要。工作中你面试的大部分技术都不需要用到的。工作中,因为你的编码习惯不好,写的代码质量差,代码冗余重复多,很多无关的代码和业务代码搅在一起,导致了你疲于奔命应付各种问题。

所以在做一个项目前,最好遵循公司制定的代码框架和开发规范(如果没有,那我也是醉了),把代码量减下去。在这一步后,大家的代码量能下去最少1/3,后台的问题数也会明显下降,加班自然就减少了。

给大家一个直观的例子。下面是controller的一个删除数据的接口,很多人的写法是这样的,功能很简单,输入一个对象id执行删除返回是否删除成功。大家有没有觉得什么问题?

这里写图片描述

其实上面的代码也没有大问题。如果是我,我会开发自己的代码框架,最后制定代码框架交付的代码如下(这是controller的部分):

这里写图片描述

扫描二维码关注公众号,回复: 2908018 查看本文章

用到的技术就是AOP,也不是什么高深技术,怎么样?代码量就一行,特性一个都没有丢。

所以说技术无所谓高低,看你怎么样用。上面的代码简单说一下问题,第一,lang和业务没有什么关系,我后面的代码框架去掉了(不是说我后面的代码没有这个功能,是把他隐藏起来对开发人员透明了,使用的技术就是ThreadLocal)。第二,前面那个代码,实际上干活的就只有一行,其他都和业务代码没有一毛钱关系,我的代码框架里面完全看不到了。

使用的技术真的很简单,但是编码效果非常好,大家不要因为使用的技术初级就觉得不重要!!使用这套框架后,大家再也不需要大部分时间都写一些无聊的代码,可以有更加多时间学习其他技术。这就是我说的工作中,编码习惯(或者说编码风格)比技术更加重要。我觉得同阶段的人在技术上的能力其实都差不多,差别主要是在编码上。

编程是一项需要注意力高度集中的工作,因为一不小心就会产生bug,但要写好代码,良好的编程习惯是必不可少的,拥有良好的编程习惯,意味着你可以在相同或更短的时间里完成比其他人更多的任务。下面为大家提出几点个人认为值得坚持的编程习惯:

值得坚持的九大编程习惯
1、了解数据结构和算法
如果你要成为一个高效的开发者,首先必须学会快速排序、学会辨认O(n2)程序、学会编写递归函数,你便能够利用有限的时间快速地完成任务,不用延长上班时间深夜加班。其次,尽可能去了解底层命令(plumbing),以便能够作出明智的决定(Web框架是怎么存储session状态的、Cookie到底是什么)。

2、精通一个编辑器
高效开发者通常是用IDE编辑器吗?不是的,他们更常用文本编辑器,因为这样会学到更多的东西。如果使用编辑器选择通用的Emacs或Vim,自然是最好的,如果不能,就挑选你的首选平台最支持的。使用宏,不断地写代码;使用Visual Studio或SublimeText的自动补齐功能。

3、掌握代码调试技巧
在移动互联网时代,基于市场和需求的变化,项目的周期有时会缩短,一个月的工作计划,缩短到两个星期,项目的压力难免会导致程序员的代码质量有所下降!因此,调试技巧在这样的环境下就显得尤为重要。高级程序员会在函数的开始和结束输出Log,把所有的参数和返回值打印到日志系统,便于追踪。方便在解决问题的过程中,使用开发工具一行一行进行调试,实时观看参数的变化。

4、不要重复造“轮子”
我们对代码的记忆最多只有一周,如果代码没有注释说明,也许过一段时间就会忘记它的具体意义,两周前写的代码相信能清楚记得的人不多。重复是怎样发生的呢?

1.程序员们没有意识到他们在重复。

2.程序员们偷懒,他们重复,因为那样似乎更容易。

3.同一个团队的几个人重复同样的信息。

市场需求瞬息万变,需求的变化导致代码需要重新修改,这时的程序员也未必是当初那个程序员,导致隐藏的问题产生,产品到用户手上随时会爆发问题。高级程序员会尽力避免开发重复的代码,选择组装成公共组件库。

5、尽量使你的程序解耦
全球首位计算机博士David Wheeler曾说过,“计算机科学领域的任何问题都可以通过增加一个中间层来解决”,这句话诠释了解耦的重要性。网络七层协议的设计,软件开发的设计中,数据层、服务层和应用层,无不参考这位博士的思想。这样的例子生活中随处可见,共享单车的出现,就是对我们出行的解耦合。你要做的是在你需要的时候去使用,不需要了解更多的细节,出现问题了也不需要你去维修,只管用就好。高级程序员开发的代码,既屏蔽细节,又提高了灵活性。

6、适当的进行重构
重构是改善现有代码的设计,在给外部提供接口不变的前提下,随着时间的推移,在内部重写、重做和重新架构代码。

什么时间做最好?做的太早,看不出有做的必要性;做的晚,耗费大量的时间周期,会影响当前的项目。

初期的系统架构设计以简单、易用为主,在人力资源匮乏的条件下,首要任务是先把系统搭建起来,短期实现基础版。后期随着需求的增加,系统变得庞大,早期的架构明显有些弊端,不能跟随项目进行发展,这时候重构就势在必行了。高级程序员清楚在什么时间点进行重构,在不影响外部系统的情况,重新开发,提供更稳定的服务。

7、积累自己的代码库
如果你做了多年的软件开发,没有做总结,没有积累自己的代码库,面对新的项目,所有代码又重写一遍,无疑浪费了很多时间。虽然网络上可以下载到相关代码,但如果在自己的代码库里积累好,就省去了搜索的时间,在一些细节上改善,可以适当缩短加班时间。高级程序员会积累自己的代码仓库,构建自己的知识体系,通过Wiki或者其他知识管理工具构建一个知识框架,大的分类可以包括软技能、架构、语言等,小的分类可以更细化。

8、一段时间内专注于一种类型的语言
如果你正在设计或开发网站,你将需要同时熟悉多种不同的语言,你可能会想同时学习所有的这些语言,特别是考虑到它们是如何相互关联的。说到这里,联想到很多程序员出现通而不精的问题,定是在平时工作时没有针对某一技术深入研究,如果你真的想快速提高,我建议专注于一个特定领域的专业知识。你想更好地利用CSS?把重点放在这里,尝试使用一个单一的HTML文档只使用CSS实现不同的布局。CSS Zen Garden 是一个使用相同布局实现不同页面样式非常棒的例子,你也可以通过查找元素的列表,并把精力集中在里面。举个例子,你熟悉CSS2,但想提升对 CSS3 的理解,你可以学习CSS3属性并逐一的实现它们,你可以阅读当前的 CSS3规范 ,还可以通过每个模块的学习来了解它在浏览器上能(或不能)做什么。

9、重新回顾代码
重新去回顾和审视自己写过的代码,通常会有两种体验,一种是我怎么写了这么烂的代码;另外一种则是对自己写过的代码充满了成就感。回顾代码有时可以触发我们新的想法,也许在这个过程中你会突然想到曾经遇到的问题的解决方案,这也是一种技术的总结。

养成这些习惯并不是一蹴而就的,最好并且唯一的方法就是开始采用它,然后不知不觉就养成了。write less,do more,这是程序永远的主题,努力培养一些好的习惯,只要你不断努力,以上仅是我个人建议,若有遗漏之处欢迎提出,共同进步,若喜欢我的文章,请为我点赞,继续关注!

如何学习才能快速入门并精通呢?
当真正开始学习时难免不知从何入手,从而导致效率低下影响继续学习的信心。

但最重要的是不知道需要重点掌握哪些技术,学习时频繁踩坑,最终浪费大量时间。

为了让学习变得轻松高效, 现在给大家提供一个学习平台,让你在实践中积累经验掌握原理。主要方向是JAVA架构师,在这里你可以学习Java工程化、高性能及分布式、深入浅出、性能调优、Spring,MyBatis,Netty源码分析和大数据等知识点。可以加QQ:3136292260,或是关注微信公众号:Java资讯库,免费的大型互联网Java技术视频分享给大家。

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_42894896/article/details/81988016