写在工作的第四年的一点感悟~
编码之内
代码规范
代码规范化带给我们的第一个好处就是看着很整齐、很舒服。
虽然说我们现在可以用不规范的方式写代码,现在能看得懂,但等过了几个月后,你再回头看时估计就两眼懵圈了。更不要说万一项目迭代开发,交接给其他人了,所以代码一定要写规范。
下面的是我总结的一些代码规范注意事项:
编码方式:统一用 UTF-8
,一般情况下不要去改动它。
缩进:统一为 4 个空格,将 Tab size 设置为 4 则可以保证 tab 键按 4 个空格缩进。
括号:花括号不要单独一行,和它前面的代码同一行。而且,花括号与前面的代码之间用一个空格隔开。
空格:if、else、for、switch、while 等逻辑关键字与后面的语句留一个空格隔开;运算符两边各用一个空格隔开;方法的每个参数之间用一个空格隔开。
空行:将逻辑相关的代码段用空行隔开,以提高可读性。空行也只空一行,不要空多行。
变量:一行声明一个变量,不要一行声明多个变量,这样有利于写注释。
命名规范
想必程序员一想到命名都很头疼,当遇到混乱或错误的命名不仅让我们对代码难以理解,更会误导我们的思维。
良好的命名,则可以大大提高我们的代码易读性,也能大大增强代码的可维护性。
下面的是关于命名规范的一些基础:
包命名:域名反写 + 项目名称 + 模块名称,全部单词用小写字母。
类和接口命名:使用大驼峰规则,用名词或名词词组命名,每个单词的首字母大写。
方法命名:使用小驼峰规则,用动词或者动名词命名,第一个单词的首字母小写,其他单词的首字母大写。
常量命名:全部为大写单词,单词之间用下划线分开。
变量命名:范围描述 + 意义描述 + 类型描述的组合,用驼峰式,首字母小写。
注释规范
我们也一定要养成写注释的好习惯,当我们在写某个程序的时候,可能当下记得很清楚,这一段是什么机制、如何实现,但是当你写的程序越来越多,你会忘记当初为什么这样写,改动和交接也十分麻烦,对代码进行注释就可以有效避免这种情况。
注释不仅可以让人读懂代码,甚至能让读代码的人获取更多信息。
下面是关于注释规范的一些建议:
文件头注释:文件顶部统一添加版权声明。
类和接口注释:类和接口统一添加 javadoc
注释。
方法注释:方法的用途和参数说明,以及返回值的说明。
变量和常量注释:优先采用右侧 //
来注释,若注释说明太长则在上方添加注释。
数据库
数据库是很重要的一部分,无论对于面试还是工作中,都是一个老生常谈的话题。
比较重要的是数据库优化部分,最常见的数据库模型主要是两种,即关系型数据库(SQL)和非关系型数据库(NoSQL)。
常见数据库:
数据结构
身为程序员的我们,每天都在和不同的数据打交道。那么我们真的对数据结构一清二楚了么?
对各类数据结构进行了分类,并且从定义、特点、原理解析使用方法以及实现的相关案例相结合:
•栈 stack
•队列 queue
•链表 Link
•散列表 Hash Table
•排序二叉树
•红黑树
•B-TREE
•位图
算法
算法无论是对于学习还是工作,都是必不可少的。我们掌握了这些算法背后的逻辑思想,那么是会对我们的学习和工作有很好的促进作用的。
经典算法:
•二分查找
•冒泡排序算法
•插入排序算法
•快速排序算法
•希尔排序算法
•归并排序算法
•桶排序算法
•基数排序算法
•剪枝算法
•回溯算法
•最短路径算法
•最大子数组算法
•最长公共子序算法
•最小生成树算法
版本管理
在现在市面上的大部分公司的代码都是通过版本管理工具来进行托管的,从之前的 SVN 到现在基本人人必用的 Git。
我们需要了解 Git 的每一个具体命令和参数使用,知道执行每个命令会做什么,避免各类分支或者 fork 操作引起的冲突问题。
可以帮助我们:
1.保存开发过程中的代码,方便后续修改。
2.能清楚的看到每一位团队成员提交、修改的代码,责任到人。
3.方便我们完成协同开发的任务,高效工作。
4.为后续客户提供关于项目不同版本的记录。
关于代码版本管理的工具有很多,下面是我常用的:
•SVN:替换了当年开源社区最为流行的版本控制软件 CVS,在 CVS 的功能的基础上有很多的提升同时也能较好的解决 CVS 系统的一些不足。
•Git:用于 Linux 内核开发的版本控制工具,采用了分布式版本库的作法,不需要服务器端软件,就可以运作版本控制,使得源代码的发布和交流极其方便。
•GitHub:GitHub 是目前为止,用户最多的工具了,而且也有很多的开源项目提供,一直都是程序员最钟爱的平台,想要学习的话,都可以去下载项目来学习。
主流工具:
问题排查与解决能力
我们选择开发这条路,会遇到形形色色的问题,发生问题的时候,就是检验程序员能力的时候。很多时候,解决问题并不难,难的是定位问题。
这里面会涉及到很多知识,对于我们的知识储备很重要,所以平时一定要做好积累。
编码之外
笔记
互联网这个行业更新换代很快,需要保持不断的学习,学习的知识点很多,光靠大脑不可能全部记得住。
我们可以把平时记录的技术点、知识、好文章保存或者记录在笔记上。
在这里推荐几款我使用的不错的笔记:
•有道云
•印象笔记
•OneNote
•语雀
推荐语雀:
MarkDown
Markdown 是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式。
我一般都是使用 typora
,这款界面简洁,支持实时预览,支持多种公式类型,支持TOC等标签这款先编写好,然后复制到自己喜欢的编辑器里进行渲染格式,最后发布文章到各个平台。
推荐 Typora:
学会写作
写作是一个非常好的「进阶」 方式。但是平时我们的程序员同学都会很忙有很多事,导致了我们没有太多的时间,同时也很难持续的进行写作,那么我们应该要如何坚持写作呢?
其实是无论坚持什么事情都不是一件容易的事情,写作可以先从技术博客开始,后面也可以写一写生活中的事情。反正就是先让自己写起来,先写起来之后养成习惯,你会受益一辈子的。
一般都会选用上面所说的 Markdown 语法写作,编辑工具也很多,在线的、PC端的都有。
团队协作
我们开发过程中,无论哪一个项目都是很多人一起完成的。任何编程工作不可能会让你自己一个人完成,我们自己写的的代码必须与别人的交互或者混合。就算很优秀的程序员,如果无法与别人协作,都会给项目造成负面影响,对公司的正常运营造成影响。
作为一个合格的程序员,我们更应该学会与人合作。有一句话我记得非常清楚,没有一个人的成功,每个人的成功都是建立在和别人合作的基础之上的, 我们是一个整体,需要共同面对困难,一起分享成功。
下面的方法可以参考:
•分工合理,责任明确,模块化
•高效的沟通机制(聊天软件,任务面板,邮件等)
•定期检查,及时调整(codeReview
、日报、周报、大小会议)
不断学习
在日常开发中,一定要学会去 github 等网站上,学习一些别人的优秀开源项目,学习别人的思想和构架,学习别人的逻辑。
总结自己编码过程中的局限性,只有在不断的学习过程中,才能使的自己的技术不断上升。
身体是革命的本钱
程序员的工作,大多是坐在电脑屏幕前,一坐就是几小时,缺乏锻炼,我们当中很多人都会得颈椎病,还有得了脂肪肝,一些人得了腰间盘突出,以至于年纪轻轻,身体就不行了。
所以,一定要爱护自己的身体,学会养生,不仅是对自己负责,也是对社会负责。
在这里给出的一点建议:
•保持充足的睡眠
•养成规律的饮食
•坚持健身
•多跑步走动
•合理的加班
•培养其他兴趣
学会技术输出和分享
将学到的编程知识写下来,并且将它分享给其他的程序员,将让你变得更优秀。写文章的好处是多方面的。你能够分享想法,并帮助全世界的程序员
我们应该把每天学习的知识、技术,或者是看书的心得体会,用自己的方式表达出来。
多看官方文档
官方文档远比网上的各种博客和论坛等更适合入门学习。当我们遇到很多问题和技术细节的时候,认真将官方文档过一遍,你会发现很多问题和认识模糊的地方都会清晰起来。
程序员都应该掌握通过官方文档去学习一个技术的能力,掌握了这项能力,你就具备了学会其他一切技术框架的基础;而且最原始的官方文档,还能锻炼你的自我学习总结能力。
培养自学能力
程序员无论合适都要有一颗保持学习的心,因为技术更新快、需求变化快,我们不学习就会被淘汰。
机会和挑战只会分配给有准备的人,当我们有机遇能进更好的公司的时候,还是需要依靠自身的硬实力的,这个时候如果我们长期自学积累知识的话,相信都可以把握住任何机会的。
我认为自学应该从这几方面入手:
• 先确定好当前的方向
• 做好长期吃苦的准备
• 有规律有目的型的学习
• 在一个安静的地方学习
• 利用好现有的**网络资源与书籍****
英语水平
对于我们来说,因为技术文档都是英文的,虽然阅读别人的文档可以通过翻译成中文文档来查看,但是一味相信翻译并不可取,毕竟有错误和疏漏有时候都不知道。
而且我们编程每天都在和英语打交道,有更好的英语水平,对我们代码的命名等等都会有很大的帮助。
扩展人际关系
程序员是一个长时间在电脑旁边的人类,我们的业余时间不多,周六日可能还加班,所以封闭性很强。
但是我们一定要抽出时间来维护自己的人脉管理。本身压力也比较大,有了更多的朋友的话,我们闲时也可以一起约出来,聊聊天,谈谈未来的发展。每个人的格局都不一样,多多交流,才能不断进步。
下面我给大家说一下我是怎么维护自己的人脉:
• 要学会主动联系
• 多参加一些社交活动
• 向优秀的人多取经
• 线上线下都可以认识
良好的逻辑思维
逻辑思维能力是我们学习、工作、以及生活中必不可少的一种能力。
拥有良好的逻辑思维,有助于我们高效地学习,工作,以及生活。
总之,练好逻辑思维,可以让我们变聪明、变自信,脱颖而出。
• 结构化思维:把事物组成框架,分类、有序的整合起来
• 系统化思维:整体考虑,注重每一个联系。
• 打破定势思维:要学会创新,增加求知欲。
• 情绪控制:合理控制自己的情绪。
• 换位思考:发生事情冲突,也要在别人角度考虑。
时间管理能力
时间就是金钱,效率就是生命,一点也不过。我们现在这个社会大部分人都有拖延症,该如何解决呢?
其实现在影响我们最大的就是手机了,相比大部分都会一有闲暇时间就会大有手机上的娱乐软件(短视频之类)来打发时间,避免这样,我们就需要一些时间管理工具来改善。
给大家介绍一些我觉得不错的时间管理工具:
• 番茄 ToDo
• Forest 专注森林
• 滴答清单
• 小日常
• Pendo
• 块时间
• 极简代办
• Todolist
最后
哈哈,不好意思,因为很久没更文,所以这一篇就写的有点多了,也算是补上欠下的文章。但是以上列出来的这些清单我相信你用心读完后,肯定还是会有所收获的。
的确,软件开发最重要的技能是提升技术,只要完成任务即可,但是一味的为了完成公司代码而编程我觉得并不可取。
我们也要为自己的未来考虑,毕竟摆在我们面前的 35 岁抉择是迟早会到的,所以不断提升自己的各方面技能才能起到未雨绸缪的作用。
最后一句话,送给大家:硬实力决定下限,软实力决定上下限。
编码之外的软实力也是我们不断前进的源源动力,一起加油吧!