【百度实习日记】Day 22: Gap Week

请假一周,明天回校

酝酿了将近三天的暴雨终究是伴着撼人心魄的雷电肆无忌惮的来了,大坝决堤般的水倾倒的随心所欲,尽情的向渺小的人类展示着来自上天的威严。幸好我带了伞。

又是有个周末,来百度实习刚刚四周,明天晚上要坐上开往星城的列车,用一周时间去处理一些看似重要但事实上并没有什么实际价值的小事儿。4号回京。等等,这里的“回”字似乎不能用,毕竟帝都并不是我的家。而星城又何尝成为我的家呢?一年回一次的那个家才是真正的家啊!然而每年冬天春节过完,不是也对爸妈说“我要回学校了”么?我们从原本应该回的那个地方回到了看似要回的那个地方,但那只不过是短暂的停留罢了,毕竟才四年,一辈子可是有那么多的四年呢!星城都算不上是回,帝都就更算不上了。可是原本要回的那个地方以后又什么时候才能回去呢?他乡成了故乡,就永远都回不去了。既然知道回不去,又干嘛逃离呢?回家,家,又在哪呢?

公交车开的好快,地上的水肆意的溅到窗户上,让人感觉坐的是轮船。门开了,下车的大叔一脚踩到了水里,穿凉鞋的妹纸也不免大叫一声“啊!”。好同情那些没有带伞的人,头发上衣裤子鞋子全湿了,可是又有什么办法。出门带伞是个好习惯呢。

这一个月里我过得挺好的吧。嗯,我觉得挺好。今天的这篇写完,就100篇博客了。

反正有token,在学校也是能上班的啊!一周以后再见。

刘凯宁
20150626

Share

【百度实习日记】Day 21:爱上CR

对自己写的每一行代码负责

CodeReview,在我来百度实习之前,我对CR一无所知。传说中代码是需要审查的,因为你写的代码不仅仅是自己在看,但是在学校里将近3年看似漫长的代码生涯中,我几乎没有怎么看过别人的代码,也没有怎么让别人看自己的代码。个中缘由主要是自己看不进去别人的代码,别人也懒得看自己的代码,于是CR就变成了传说中的事情。近期的三周内,我每一周都在进行CR,确切的说,我开发代码的时间并不长,很多的时间都在修改代码。写代码不仅仅是要实现功能,更重要的是这个功能能不能用更好的方式实现,或者这个功能能不能用更加友好的形式展示在所有有可能阅读到这段代码的RD、QA甚至任何人面前。这个很难。平哥说,改改吧,对写代码有好处。然后写个CR不通过给我。他说的很对,在新人阶段,不仅仅是写代码实现功能,还要多去在意代码的内涵。我挺感谢国伟、平哥、涛哥、学兵、守彬他们在这几周内帮我CR提出的各种意见,我知道了自己写的代码真正是会有人看的,并且还会被更多的人看到,我需要为自己的代码负责。责任意识真的很重要。国伟说写代码的时候一定不能说“我感觉”,“应该是这样”,“差不多”等等这些词语,是就是,不是就不是,就是这么简单,代码是不会骗你的,为什么能成,为什么不成,代码就在那里,你需要非常确定问题究竟出在哪里,而不是靠猜,靠瞎蒙,靠“我觉得”。这种思路我很喜欢,说的很对,我必须也要这么对待代码。总的来说,CR有很多很多好处的,这些东西都需要有意识。我来写一下我对CR的认识:

1、CR能够提高代码质量
这一点不多说,当你自己对自己写的东西再三考虑以后,低级错误一般不会出现。

2、CR能够进行交流
工程师之间怎么交流?靠代码啊!看看别人怎么写,给出自己的意见,怎么处理会比较好,不改会有什么不足,会出什么问题,OK,看代码就好了啊。

3、CR可以了解一个人的思维方式
同样的功能他究竟是怎么写的,怎么写就体现出他是怎么思考的,为什么我是那么写的,我的思路和他的似乎很不同,为什么要这么处理。慢慢的你就知道代码的价值就是一个人思维的体现。

4、CR可以驱使自己更加对代码负责
当自己知道自己的代码会被别人看的时候就会多想一想,自己这么写会不会被吐槽,这么写有没有可能不符合规范,别人那么处理我这么处理能行不?自己在写代码的时候会多想,CR通过以后再出问题就是自己的责任了,这种意识很重要。

5、CR可以尽可能多的将bug杀死在开发阶段
一份代码经过了多人的检测bug 还能出现的话,这bug也是够神奇。

6、CR可以分担风险
当出了问题时候,写代码的人当然是第一负责人,但是CR过程中所有接触的人都要对此承担责任,因为你看过,没有发现问题,CR是不合格的。这时候个人的风险就会降低。

7、CR可以让个人、团队、公司的代码库趋向更优
一个人的代码经过CR以后提高了代码质量,一个团队的代码是各种提高了质量的个人代码的集合体,整个公司的代码是所有大小团队的高质量代码的集合体,这样公司的代码库就会逐渐趋向最优化,对公司来说是一劳永逸的事情。

总之,CR很重要。不管你今后有没有向百度这样能够有晚上的CR流程,请你自己做好CR,对自己的代码负责,也就是对自己负责。做为一个软件工程师,职责不就是写好代码么?

刘凯宁
20150625

Share

【百度实习日记】Day 20: 不要钻牛角尖

钻钻钻

写代码的时候一定要注意解决问题的思路,如果没有想到很好的解决方式就贸然去写,很可能就不知道在写什么了。思想跑偏的时候怎么办呢?我也不知道,我今天就跑偏了,额。

想一下这样的需求:PHP。有一个多维数组,类似这样的:

还有一个一维数组,类似这样的

这两个数组有什么相关之处呢?

观察一下,第一个多维数组的每一级正好对应着第二个一维数组的每一个元素值。要做的事情是,判断第一个多维数组的每一层结构是否和第二个一维数组的每一个元素值相对应,并且判断多维数组的最深层次的那个元素的key(这里是那个a111)它的值(这是是22222)是否和一维数组的最后一个元素的值相等(这里即使那个22222)。想一下怎么实现。

我当时不知道怎么想的,一直试图将一维数组展开然后构造一个多维数组出来,然后去与最初给的数组进行比较。然而很搞笑,那样纠结了很久很久。后来发现可以用很简单的方式实现要的功能:

一次循环,注意停止条件和界限,OK了。

写代码的时候脑子一定要清醒。

刘凯宁
20150624

Share

【百度实习日记】Day 19: 一个项目的生命周期

Show respect  for everyone who devote himself into software development,PLEASE 

今天依旧是写代码,做CR,改代码。但是今天傍晚的时候茜茜大力推行的新人小课堂正式开课了。第一课,茜茜主讲,一个项目的生命周期。虽说是贴吧自己内部的开发流程,但是我仔细想想这个流程是通用的,任何大大小小的团队都可以用这一套流程去做项目的开发和迭代。我简单总结如下,希望在未来的某天能够用得着。另注:本文中所有图片都是我自己依靠今天下午的新人课堂总结所画的,将就着看就好。

1、需求 需求阶段主要是和PM沟通,确定要做什么,为什么做,做了有什么意义,不做有什么损失。这一个步骤挺关键的,如果不知道自己要做什么就贸然上手,很可能就是做出的东西得不到PM的认可,你的开发都是白费力气的。还有就是这个阶段一定要有开发人员和PM共同参加,说清楚该说的,最终达到一个双方都能认可的状态:PM认为开发人员能够完成自己的需求,开发人员认为自己能够开发出来PM想要的东西。如图:

2、接口 这个接口的意义其实蛮多的,在这里我想表达的接口的意义是在RD拿到需求以后到正式开始写代码之前,所有要做的准备工作。包括:明确自己的位置,做好与上下游RD的沟通,怎么与上下游RD进行数据交换,面对需要改进的老功能现在要考虑怎么改,面对需要重新开发的新功能应该要做什么准备,这一切的准备工作都是以后开发顺利进行的保证,所以也很重要。很多情况下就是因为接口没定好,准备工作不充分,导致各个方面的RD不能很好的合作,进而影响到整个开发的进度。这个需要很注意。如图:

3、开发与自测 当然就是写代码了啊。代码要保证能够逻辑清楚,实现功能,便于阅读。在团队开发当中,免不了要读别人写的代码,所以阅读代码也是一种需要锻炼的技能。我们在写代码的时候需要懂得代码是给人看的,不要用那些容易引起争议的语法或者处理方式,不要强迫自己写复杂的逻辑,不要给后来者挖下坑。写代码是有德行的。还有就是有的公司会制定各种各样的代码规范,你作为公司的一员,有义务也有必要按照公司的代码规范来写代码,于人于己,都是一见好事儿。当然你写的代码必须要能有功能实现啊,哟啊不写了有什么用。如图:

4、CodeReview CR怎么说呢,非常有必要! 代码评审在相当多的大公司都是作为一件重要的事情在做的,百度现在也开始大力推行CR,我个人认为是有很大的意义的。首先你知道你的代码会被其他人看到,你就会写的更加严谨,而不是像自己开发的时候随便想怎么写就怎么写;其次,在被人提出评审意见时,你能够看到其他人是怎么看待这段代码的,他们有什么样的解决方式或者改进方式,他们面对你的代码会有什么想法;第三,经过CR,你的代码会更加有力度更加有分量,这是一个逐渐将代码变优秀的过程。有时候我们说优秀的代码优雅的代码并不是说永远不会出错的代码,但是能肯定的是,在绝大多数情况下,这段代码都能够正常运行,已经规避了很大的出错风险。这样的代码对整个公司都是有价值的。一本万利的事情。如图:

5、测试 QA是必不可少的。但是可能很多人都对QA有误解。并不仅仅是测试,软件的质量保证是很重要的,优秀的QA能够发现RD不能发现的问题,将代码的错误扼杀在上线之前。QA会有很多很多的工具来辅助测试,自动化测试也是大势所趋。软件质量的保证,QA义不容辞。(图略了)

6、部署 部署和接下来的上线是不一样的。我理解的部署是将写好的测试通过的代码真正部署在机器上面,这些机器是现在正在线上跑的机器。部署代码的原则就是不要影响已经上线的代码。部署代码,要考虑各种各样的配置,各种各样的环境,自动化部署也是一个软件行业的重要课题。部署好以后还要做自动化运维监控,时时刻刻观察代码的情况。(图略了,不知道画什么……)

7、上线 终于到上线啦!!!将部署好的代码真正跑起来,为广大用户提供服务,面向真正的用户,让自己的代码实现价值,想起来就好激动!

8、验收 PM是项目的起点,PM也是项目的终点。你做的项目必须要得到PM的认可,要不,一切都是白费。当然,小组内部也要做好总结,对于整个项目开发过程中的各个阶段遇到的问题,有什么收获,还要怎么改进等,都要做好总结,为以后的项目开发留下宝贵的经验。

这样,一个项目就从无到有了。我们的价值也得到了体现。 请尊重每一个互联网软件行业的从业者,谢谢!

刘凯宁 20150623

附录:Vi快速入门:

非常感谢  欧二强@百度 的 《vi快速入门》

ZZ-35165346-230615-1238-453

Share

【百度实习日记】Day 18: 端午节快乐

端午快乐,放假三天

今天周五,还是一如既往的9点10分到公司,开电脑,接水,看邮件,看昨天画的代码流程图,开始写代码。11点开周例会。然后没吃饭,继续完善写好的逻辑,找测试机器,自测功能。然后调整成功,给涛哥看效果,然后就到现在。国伟说的很对,代码没有我猜、我认为、我觉得这种词语,代码必须是严谨的,出了问题就要打印日志去追寻问题。这一点还是比较 欠缺,相信会在慢慢的打磨中降低犯错的几率。PHP当Java写的感觉真的还不错。

然后就发现是端午节放假三天了。这个端午节假期要做的事情也蛮多,制定一个学习计划,为了更好的提高自己,然后制定今天完成的功能说明文档。要不要出去呢,如果有时间的话考虑出去一下也不错。昨晚无意中看到了有关北京顽主的故事,百度了一些那个年代的记忆,突然觉得北京这个城市真的有很多我们外地人不懂的事情,也许老北京才能明白吧,一如去年的老上海。我想用短暂的时光去触摸那些久远的文化,却发现毕竟是时光早逝,那种味道也不会再有。

端午节快乐吧,公司发的粽子也没办法吃,还是寄回家吧。

刘凯宁
20150619

Share