做javaweb已经有一段时间,虽然算不上大牛,但也积累了一些经验,最近主导公司一个项目的架构。同时指导新人,发现了新人身上存在的一些问题。我其实还算有耐心。但他们有些问题让我很抓狂。想起我刚工作时师傅抓狂的表情,我觉得有必要给刚毕业和刚入职场的程序员一些建议。
学习的态度和方法很重要
刚工作不久肯定很多东西都不会,学校学的和真实的项目差很多,培训机构也只能教你一些表面功夫,你会经历各种异常和报错,不要恐慌,利用百度和谷歌,尽快和他们混个脸熟。
学会js的debug、ajax请求、表单提交、传参、json解析等基本知识,将数据的传递搞清楚,程序异常了先自己找找原因,debug试试,是js错误还是前段值没传过来,是后端变量名字没对上还是配置档配错了,仔细检查检查,不要一报错就找人解决,尽量自己找出解决方法,如果实在解决不了再去找同事帮忙,最好连同几个问题一起去问,别人也有工作要忙,经常打断会降低工作效率,影响别人的进度。
问问题前想好自己的问题再说,你可能会问,问问题都不会吗,是的,很多人不太注意自己沟通表达的方式。
我带的一个新人,每次问问题都是一堆语气词,你看,怎么怎么着,等着我回复,然后怎么怎么着,又等着我回复,说了一堆和问题不太相关的话,最后我实在忍不住,打断他说你到底想问什么,他才说出自己的问题。
问问题前在自己脑子里过一边,简洁的提出问题,再描述现象
有时别人给出一个具体方案没有解释清楚,我们也懂为什么时,在时间和条件允许的情况下去请教清楚:
我刚开始工作领导是不让用system.out.println来输出的,一定要用logger,我就不明白为什么,之前教的就这么用啊,但是改起来也不费劲,我也没详细去问,直到后来接的一个项目,里面有很多system.out.println输出,你在控制台只能看到输出根本找不到是哪个类哪个方法输出的,我才明白为什么。
学习学习再学习 练习练习再练习
想要成为一个顶尖高手,关键是刻意练习,成为一个优秀的程序员,不停地学习和练习是必须的。
新人刚开始时迷茫是很正常,想要努力学习却没有方向。多去问问前辈和同事还有领导,和他们沟通学习的方向,记住成长比成功更重要。
软件技术更新速度飞快,非关系型数据库、nodejs、容器技术、h5 、前后端分离、到现在react ironic 一套搞定ios android 微信公众号,你可能刚学会一个新技术又出来一个更稳定更好用的,所以自学能力非常重要,要时刻保持对新技术的敏感,不一定要精通,也不要出了什么都去学,一般新技术的产生都是为了解决现有技术的瓶颈,了解它产生的背景,以及要解决的问题很重要。
我们刚工作碰到的肯定是别人已经搭好框架的项目,我们写代码只是填充其血肉,我们很少思考他为什么这么写,这些配置都有什么用,换成别的行不行,有了一定基础后要试着尝试自己从0搭建一个项目,这样你就能明白这些过滤器、拦截器、插件、依赖的作用,对你的能力有很大的提升。
如果碰上一个刚起步的新项目会是一个很好的机会,你会经历整个架构的演变,碰到很多坑和问题,这些都是很宝贵的经验。
有了一些小想法或者新技术自己写个小项目试试,慢慢的你的经验会越来越丰富,而不是仅仅知道公司的项目,下班少去看电视剧,玩游戏,自己多实践,写写东西,等一个问题顺利解决或实现了一个小功能,你会体会到无比的成就感。
不要依赖技术大牛
很长一段时间,我在碰到自己解决不了的问题时,都回去问公司里的大牛,感觉很可靠也很厉害,所有的问题都能解决,虽然问题是很快的解决了,但是很少有自己的思考,说白了就是懒,能靠着着别人。后来离开了这个大牛,遇到了问题只能自己死磕,就是一段时间的死磕是自己学到了很多知识,看懂了很多比较底层的原理,也变成了帮别人解决问题的人,提升很大。
养成看源码的习惯
刚开始的时候我也很惧怕看源码,一个是懒,再就是觉得自己看不懂,后来没办法,代码出问题找不到原因,只能硬着头皮跟进去看,开始的确很费劲,看多了就能了解个大概了,你可以了解到一些技术细节,系统的看源码可以学习别人的编程思想,这里推荐学java的同学有时间去研究一下spring的源码,帮助多多。
代码规范
代码规范很重要,不要以为代码是给机器读的就写的很随意,代码是给人看的,你不可能在这干一辈子,总有一天有人要接过你的代码,如果你的代码只有你能看懂,你能想到和你交接的人的心情吗,肯定很想从新写一遍,规范其实也不用非常严格,规范不是限制,下面给出一些常见的java规范:
- 除了静态变量,大部分标识符使用驼峰法则,标识符能准确的表达出它所代表的意义,不要使用supplier1、 service2、aaa、bbb等,包名小写,类名首字母大写,其他文件首字母都小写。
- 状态、类型、参数名称不要直接使用字符串或数字等比较,除非只有一个类中使用
这么写别人根本不知道2是什么状态 if(orderStatus.equels(2){ xxxx } 正确的写法 public interface OrderStatus{ public static final int ORDERSTATUS_NEW = 1;//新建 public static final int ORDERSTATUS_PAID = 2;//已支付 public static final int ORDERSTATUS_DELIVERY = 3;//已发货 } if(orderStatus.equels(OrderStatus.ORDERSTATUS_PAID){ xxxx }
- 注释掉的测试代码或不用的类请尽快删掉,如果还有用的请添加FIXME+注释,否则时间长了自己也不知道为什么注释掉,代码越来越多不好维护
- 编译工具的format要统一,在formatter代码时最好不要全选整个类,而是只format编辑的方法,这样如果大家同时修改一个类而formatter不同会导致更新代码时大量的冲突
- 单个方法不要超过300行,类不要超过3000行,重构请参考《重构-改善既有代码的设计》
- 尽量缩小变量的作用域,作用域过大可能回引起很多想不到的bug。
- 如果代码需要公用,尽量不要复制粘贴,请提到service或util中。
做程序员对很多人其实很苦,你是否因为有“钱景“加入这个行业,你是否真的有兴趣长时间对着电脑敲代码,你能否因为一个小问题一晚上找不到原因继续坚持,如果你想好了就脚踏实地的努力,我们一起共同学习。