程序员的职业素养
花了几个小时,把《程序员的职业素养》看完了,刚开始以为是一本讲代码规范什么的,看了才发现,内容很给力,挺干的。 我觉得工作以来,自己绝对算不上一个称职的程序员,也很不专业,一直想往专业的方向去发展,却总是事与愿违。 一路走来,发现了很多自身的不足以及太多需要学习的知识,看到自己还有那么多不懂得,真棒,又可以学习新知识了。
<!--more-->
简单记录下观书笔记,以便日后查看:
- 专业主义
- 说“不”
- 说“是”
- 编码
- 测试驱动开发
- 练习
- 验收测试
- 测试策略
- 时间管理
- 预估
- 压力
- 协作
- 团队与项目
- 辅导,学徒期,技艺
最初接触编程,除了兴趣爱好之外,就是觉得coding是一件很酷炫的事,在暗黑的终端敲击着绿色白色的代码,做出各种各样的网站,还能编写app……但如果带着这样的心思工作,就很糟糕了,心猿意马,随心所欲,今天对这个感兴趣,学一点,明天对那个感兴趣,再学学,很不专业了,最后什么也做不好。
专业主义
专业程序员
对于程序员来说,没有什么称赞比专业更让人兴奋了。但是想要成为一个专业的程序员,对我来说,还有很长的路要走。
专业意味着责任,工作上的每一个承诺,每一件自己的任务,都要百分百负责。
这个深有体会,刚来公司那会儿,由于之前的公司就我一个技术人员,对待工作就很自由,其实那时候就应该意识到自己的错误,这样的散漫对一个刚毕业没多久的人来说,是很致命的。 来到现在这家公司,当时进来负责一个开发票的模块,pm说这个需求很重要,关系到财务等各个方面,务必做好,同时也给了我一个期限,问我可不可以?对于当时的我来说,从没接触过这这方面的业务,对于技术框架也不熟悉,业务流程也不是很了解,但是还是说应该可以吧。最后的结果和书里说的大部分例子一样,完成的很糟糕,可以说非常糟糕。 最初完成开发阶段之后,简单测试了几个,就提交给QA了,结果QA那边测试出各种问题,老实说,被QA说bug的时候,真的非常尴尬。而且客户测试的时候也出现各种各样的问题,除了数据的问题,最大的问题就是在开发完成之后没有对自己的代码负责,没有做极致的测试。如果开发后,对代码进行细致的测试,考虑各种情况的发生,就不会出现后面一系列的问题了。
很多想成为专业人士的程序员,都把以下几点作为小目标:
- 让QA找不到任何问题
- 要确信代码正常运行
- 自动化QA
最初看到自己写的那一大段代码,真的不想在上面继续修改,但事实上是应该要修改,保持自己的软件灵活可变。专业的开发人员对自己的代码和测试都极有把握,他们敢随心所欲的修改、拆分、重新组织。他们会把switch语句改成堕胎结构,或者将继承层次重构成一条“命令链”。
职业道德
工作以来,接触的很多人,对当下的工作其实很不满,但是又无力改变现状,于是在遇到问题或者无所事事的时候,开始抱怨,各种抱怨。我也不例外,当时从舒适区换到一个新的工作环境时,对业务的不熟悉,对技术的不了解,处理事务的不成熟,都让我整日抱怨,希望公司能够对自己进行职场培训,希望有机会去学习…… 其实这些想法是很消极和偏激的,对于雇主来说,他们没有义务对你进行培训,学习是自己的事情,和公司或者他人都无关。公司发放薪水,作为员工来说,必须明白每个礼拜有7.5*5=37.5个小时是解决公司的问题,而不是个人的问题。除此之外的时间可以合理安排自己去学习,去恋爱,去陪家人朋友。 当处理好这些时间之后,就会发现,无论是工作还是生活,都会非常的充实,而不是各种抱怨,因为之所以抱怨,一方面是对自己的不满,但是却又不愿去做改变和学习,一方面是太闲了,当忙碌起来,根本没时间抱怨。要明白和公司之间的关系,公司是工作的地方,不是学习和成长的场所,个人的职业成长充电是需要付出额外的时间。
了解自己的领域
什么是N-S图表? 知道米利型和摩尔型这两种状态机的差别么? 能不查阅算法手册写出一个快速排序程序么? 知道变换分析么? 如何用数据流图进行功能分解么? 什么是临时传递数据? 耦合性是什么? 什么是parnas表? ……
对于程序员来说,每天都要面临着技术的日新月异,新技术层出不断,行业发展迅速,每天都需要学习,不仅是学习新知识,还要了解过去的知识,基础的,经验的。刚入行的时候,对于我来说,很少去了解领域中的知识,每当交谈的时候,总会对很多名词一脸懵逼,这就是很不专业了。
书中列出了每个专业软件开发人员要精通的事项(仅供参考)
- 设计模式,必须能描述GOF书中的全部24种模式,同时还要有POSA书中的多数模式的实战经验。
- 设计原则,必须了解SOLID原则,而且要深刻理解组件设计原则
- 方法,必须理解XP,scrum,精益,看板,瀑布,结构化分析及结构化设计等
- 实践,必须掌握测试驱动开发,面向对象设计,结构化编程,持续集成和结对编程
- 工件,必须了解如何使用UML图,DFD图,结构图,Petri网络图,状态迁移图表,流程图和决策表
坚持学习
只有坚持广泛学习才不至于落伍,否则跟不上时代
练习
业精于勤
合作
团队协作
辅导
教学相长
了解业务领域
要了解自己公司的业务领域,否则对需求就不能有很好的分析。
与雇主/客户保持一致
站在雇主的角度思考问题
谦逊
接受自己的不足
说“不”
能就是能,不能就是不能,不要说“试试看”-尤达
面对不合理的需求和安排,要根据自己的实际情况作出拒绝,否则将会一直处在被动并且糟糕的状态。
不过我个人理解,如果要说“不”,前提是对需求或者安排的任务以及自身的实际水平和项目有足够的了解,否则连说“不”的资格都没有。因为连自己都说服不了,怎么去拒绝别人的要求。
所以还是要做到对自己的工作负责,熟悉相关领域,才能做出合理的安排,对于不合理的需求或者安排才可以通过分析去拒绝。而不是一味接受最后发现完成不了草草了事敷衍交差,然后不停修补bug。(比如我最开始工作时,老板说的都是对的,按照老板说的来做,最后一个都没做好,因为老板一天一个想法,一拍脑袋一个需求)
说“是”
当承诺一件事情的时候,就要不惜一切代价去完成,因为是你承诺的,就要对这负责。没有借口,如果发现自己兑现不了,就需要及时的说出,而不是藏着掖着最后耽误的更多。早点发出预警,还可以采取其他措施挽救。
说是=对自己将会做某件事做了清晰的事实陈述,而且还明确说明了完成期限,针对自己。
关于编码
编码这部分让我感触最深的就是测试驱动开发,以前很少写单元测试,后来接触多了,越发的觉得测试是很重要的,不,非常重要。(!!!) 千万不要在心烦意乱和心情不好的时候编写代码,亲身体会,一塌糊涂。 还有就是保持睡眠充足! 还有就是保持睡眠充足! 还有就是保持睡眠充足! 重要的事说三遍!!! 切身感受,刚进公司后,有一个月没睡好,睡得太晚,睡不好,那些天不仅记忆力衰退,整个人萎靡不振,每天上班不在状态,就感觉行尸走肉一样,实在是太可怕了,更别提coding了。所以睡眠很重要。
时间管理
安排好每天的时间 可以借鉴番茄工作法,我觉得这个比较适合我,因为我经常注意力不集中,会被各种事情干扰。番茄的25分钟,还是有点效果的,主要还是靠自己自觉。