﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Change Dir-随笔分类-杂谈</title><link>http://www.blogjava.net/changedi/category/43860.html</link><description>先知cd——热爱生活是一切艺术的开始</description><language>zh-cn</language><lastBuildDate>Wed, 25 Feb 2015 15:11:59 GMT</lastBuildDate><pubDate>Wed, 25 Feb 2015 15:11:59 GMT</pubDate><ttl>60</ttl><item><title>2014总结</title><link>http://www.blogjava.net/changedi/archive/2015/02/25/423025.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Wed, 25 Feb 2015 03:01:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2015/02/25/423025.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/423025.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2015/02/25/423025.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/423025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/423025.html</trackback:ping><description><![CDATA[<p style="margin: 0in; font-size: 10.5pt;">&nbsp; &nbsp; &nbsp;<span style="font-family:宋体">今天是春节休假后第一天上班，趁着大家还在休假，抽空总结一下过去的</span><span style="font-family:Calibri">2014</span><span style="font-family: 宋体">，为自己苦逼的</span><span style="font-family:Calibri">2014</span><span style="font-family:宋体">画个句号，迎接新的</span><span style="font-family: Calibri">2015.</span></p>  <p style="margin:0in;font-size:10.5pt"><span style="font-family:Calibri">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体">苦逼用来形容自己，是稍显偏颇了，</span><span style="font-family:Calibri">2014</span><span style="font-family: 宋体">虽然经历了两拨</span><span style="font-family:Calibri">996</span><span style="font-family:宋体">的洗礼（年初和年末），但是技术成长确实没有想象的多，工作四年来，两年时间用来做</span><span style="font-family:Calibri">web</span><span style="font-family:宋体">的后端开发，从</span><span style="font-family:Calibri">spring</span><span style="font-family:宋体">、</span><span style="font-family:Calibri">webx</span><span style="font-family:宋体">的源码，到慢慢深入到一些数据库中间件的使用</span><span style="font-family:Calibri">ibatis</span><span style="font-family: 宋体">和</span><span style="font-family:Calibri">tddl</span><span style="font-family:宋体">（淘宝内部）、消息中间件</span><span style="font-family: Calibri">metaq</span><span style="font-family:宋体">（淘宝内部）、服务框架</span><span style="font-family:Calibri">HSF</span><span style="font-family:宋体">和其他的整个后端相关的内容，大概理解了一遍所有</span><span style="font-family:Calibri">backend</span><span style="font-family:宋体">后，团队缺前端的状况逼的自己开始做</span><span style="font-family:Calibri">frontend</span><span style="font-family: 宋体">，使用</span><span style="font-family:Calibri">jquery</span><span style="font-family:宋体">和</span><span style="font-family:Calibri">kissy</span><span style="font-family:宋体">（</span><span style="font-family:Calibri">brix</span><span style="font-family: 宋体">），使用</span><span style="font-family:Calibri">bootstrap</span><span style="font-family:宋体">，开发自己的基于</span><span style="font-family:Calibri">raphaeljs</span><span style="font-family:宋体">的</span><span style="font-family:Calibri">vnix</span><span style="font-family: 宋体">数据绘图框架等等，对前端的正常业务开发也基本熟练。回顾</span><span style="font-family:Calibri">2013</span><span style="font-family:宋体">年的总结，发现自己去年就开始有些负面情绪了，虽然接触了</span><span style="font-family:Calibri">storm</span><span style="font-family: 宋体">开发，正常时间写</span><span style="font-family:Calibri">hive</span><span style="font-family:宋体">和</span><span style="font-family:Calibri">odps</span><span style="font-family:宋体">的</span><span style="font-family:Calibri">sql</span><span style="font-family:宋体">，开发数据报表，但是这些工作对于技术的直接提升并不明显。在无线反作弊领域做两年了，整个反作弊的设计架构也从最开始的统计分析发展到机器学习后来又逐渐变为混合模式，也算经历了三代的演变。乐观的审视自己这</span><span style="font-family:Calibri">4</span><span style="font-family:宋体">年的蜕变，技术上的提升最大还是在</span><span style="font-family:Calibri">2-3</span><span style="font-family:宋体">年的时候，现在的很多认知提升，都慢慢的转到了架构设计和团队管理，慢慢的自己开始不断挑刺了，我一直不理解我这种变化的原因究竟是什么，开始不满团队的管理模式，经常设想如果自己来干，哪些地方该优化该改进；开始不满产品的技术架构；开始不满团队成员的&#8220;不够优秀&#8221;。</span></p>  <p style="margin:0in;font-size:10.5pt"><span style="font-family:Calibri">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体">回家过了个年，胡吃海喝后，自己开始熟悉原来身边的环境，也开始能看到自己内心去了。你要做成功一个事情，这是之前在阿里巴巴的一个承诺。其实这是很难的，不仅是阿里，你在哪家大公司都很难。那么发泄不满是最低效最没有品位的做法，你只能让身边的人知道你不满，但这重要吗？</span><span style="font-family:Calibri">The thing is to acitvate them</span><span style="font-family:宋体">。一个卓越的人，首先要能包容自己对身边的不满，我们不乱发泄，我们沟通，我们建设。要做成一件成功的事，不是要和一个完美的团队配合，而是要能配合出一个完美的团队。能容别人所不能容，能帮助别人成就别人。</span></p>  <p style="margin:0in;font-size:10.5pt"><span style="font-family:Calibri">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2014</span><span style="font-family:宋体">整个一年我自己总结就是懒惰的一年，这一年，我没怎么读过书，没怎么关注过新技术，没怎么写过有趣的代码，反而还经常玩手游，跟人诉苦水，传播负能量。人生苦短，在即将</span><span style="font-family:Calibri">30</span><span style="font-family:宋体">岁的时候，我却开始纠结一些芝麻绿豆的事情，工资高低啦，晋升啦？</span><span style="font-family:Calibri">These all shit</span><span style="font-family:宋体">。新的一年，自己要有远大的目标，我一定要做成一个事情，而为了这个目标，要持续学习、读书。记得小时候，每到寒暑假，都会把整个假期及未来学期的计划写清楚，虽然那时很幼稚，计划总是什么几点睡觉，几点起床，读哪几本书之类，但是这种习惯，在我们长大后却逐渐褪去了，我们成了没有目标的混日子的混子。想起</span><span style="font-family:Calibri">Fenng</span><span style="font-family: 宋体">之前的一篇文章，讲大公司的混子，还真别说，大公司最多的就是混子。</span></p>  <p style="margin:0in;font-size:10.5pt"><span style="font-family:Calibri">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-family:宋体">不要拘泥于要成为什么样的人，只要知道你要做成什么事就够了，因为只要你努力为这个目标奋斗，你就会成为一个能做成这个目标的人。</span><span style="font-family:Calibri">That's enough</span><span style="font-family:宋体">。</span></p> <div id="haloword-lookup" class="ui-widget-content ui-draggable"><div id="haloword-title"><span id="haloword-word"></span><a herf="#" id="haloword-pron" class="haloword-button" title="发音"></a><audio id="haloword-audio"></audio><div id="haloword-control-container"><a herf="#" id="haloword-add" class="haloword-button" title="加入单词表"></a><a herf="#" id="haloword-remove" class="haloword-button" title="移出单词表"></a><a href="#" id="haloword-open" class="haloword-button" title="查看单词详细释义" target="_blank"></a><a herf="#" id="haloword-close" class="haloword-button" title="关闭查询窗"></a></div></div><div id="haloword-content"></div></div><img src ="http://www.blogjava.net/changedi/aggbug/423025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2015-02-25 11:01 <a href="http://www.blogjava.net/changedi/archive/2015/02/25/423025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最近在看NFL</title><link>http://www.blogjava.net/changedi/archive/2014/10/27/419100.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Mon, 27 Oct 2014 09:27:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2014/10/27/419100.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/419100.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2014/10/27/419100.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/419100.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/419100.html</trackback:ping><description><![CDATA[<p>最近有2个月放空，没有沉淀一些技术上的内容，反而是调整一个工作状态，把更多的时间还原到了生活和娱乐中。当然，就目前来看，这种适当的放空收到了奇效，当时考虑业务的前景时非常的不明朗，甚至对数据质量本身的要求极度偏激，导致对团队的成员有偏见。不过在适当的休息后，这种感觉没有了，取而代之的是清晰的业务方向和思路。</p> <p>为什么会这样，我想这个和我最近痴迷橄榄球NFL有关（怎么这个句式特别像广告呢）。年初的超级碗全场录像把橄榄球运动拉入了我的视野，随着2014-2015NFL新赛季的开始，我也开始关注NFL，美式橄榄球是项非常棒的运动，为什么这么说？运动本身有几个特点非常吸引人：1）高强度身体对抗——无疑这是一项男人的运动，比赛中最常见的就是身体接触。2）规则和体系非常合理，橄榄球的进攻防守规则是非常合理的，进攻组司职攻城略地，而防守组负责守卫家园，这个对于原始的战争游戏模拟的非常到位。3）策略和战术要求极高，橄榄球进攻和防守战术非常多样化，进攻端可以采用地面冲球和传球，传球的话又可以分远距离、中距离和近距离传球，传球的对象，也可以是外接或者跑卫，外接的跑动路线……说不完啊。4）数据拟合准确，当然这是让我最痴迷NFL的原因，美式橄榄球把数据运用到了极致，对于球员的指标衡量非常的准确形象。</p> <p>比起拳击那样的攻击与防御，它显得安全了很多；比起网球、乒乓球这样的球类运动，就相当的刺激荷尔蒙；比起足球和篮球这样的流行运动，橄榄球的规则和完整的体系以及无可出其右的策略性，是最吸引人的。当然足球的魅力在于团队配合可以打得非常精彩，同时个人英雄的出现也可以拯救世界，但是足球里衡量运动员综合素质的指标体系实在是不够好。我个人认为像橄榄球和棒球（NFL和MLB）是最好的数据决策运动体系，好笑的是这都是美国人为之疯狂的运动，而在世界上其他国家却知之甚少。</p> <p>结合橄榄球运动和数据体系构建，确实给了数据从业人员很大灵感，玩NFL Fantasy的玩家都知道每周的Pick’Em可以来预测比赛，要知道一周15场比赛完全猜对的人非常非常多，为什么？因为数据刻画形象且透明，也就是说，我们做预测，不在于算法有多牛逼，而在于指标是否足够好，模型是否足够清晰的能刻画业务本身。这是我一直在做数据挖掘强调的，但是仍然有太多太多的人纠结在算法中不能自拔……NFL有一套自己的rating算法来评估球员的素质，当然这在FM游戏里也有，但是我个人认为NFL的计算更合理，因为橄榄球运动目标性非常强，没有像足球那样过多的回传和组织，橄榄球单箭头的向前就是最好的约束条件，这为数据可操作性提供了基本保障，我个人是这么认为的。另外NFL联盟的运作也类似一个数据体系，联盟约定工资帽，不会出现过分的强弱队之分，一个队伍都是明星大牌，工资帽不允许啊，所以NFL的32支球队，大体水平相当（当然有弱队和强队，这里说的大体相当是指在一场NFL比赛预测中，没有那么明显的胜负趋势，优势微弱=属性连续、分布完美）。另外不同的战术相生相克，在场上随时可以通过暂停来及时调整，这是小步快跑实时运算的等价比喻，足球比赛一开场就至少踢45分钟，这是典型的批处理，教练有个意图都是大声喊，也不见得球员遵循，但是橄榄球就完全不同，每次攻守基本都是战术的完整体现。说起时间，因为足球篮球是连续比赛，而棒球和橄榄球则是分档进攻，这其中的区别体现在数据的可分析性以及一次操作的影响性分析上，其实是很明显的。足球的连续比赛，导致我们在分析一次进攻的成功因素时，需要考虑的变量非常的多，因为时间窗口太大——45分钟，而橄榄球是阶段性的，一次成功的推进，一定是经历一个开球-传球或跑球这样的流程，这明显是规格化的产物，谁告诉你足球进球一定要是本方守门员大脚开球到前锋射门呢？所以对于橄榄球这种阶段性运动，一次分析可以根据本身的进攻和防守阶段被拆成很多的细片，在细片上完成分析，这也符合分析的规律——样本干净且完整。这有点像分布式计算，橄榄球天生分布式，而足球只能一把搞到内存里做完全分析……</p> <p>胡乱扯了一通NFL的东西，美式橄榄球运动是项极度体现智慧的运动，结合数据去玩Fantasy，更觉得其乐无穷。</p> <p>回头有空，再详细举例NFL的数据故事。没准也还聊聊手游和数据的事。</p><img src ="http://www.blogjava.net/changedi/aggbug/419100.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2014-10-27 17:27 <a href="http://www.blogjava.net/changedi/archive/2014/10/27/419100.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>为什么加班</title><link>http://www.blogjava.net/changedi/archive/2014/02/15/409886.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Sat, 15 Feb 2014 03:36:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2014/02/15/409886.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/409886.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2014/02/15/409886.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/409886.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/409886.html</trackback:ping><description><![CDATA[&nbsp; &nbsp; &nbsp; 当一个项目成功上线时，项目经理会做一番汇总，提到整个项目经历中各种感人情节，感谢abcdefg然后感谢大家加班加点的努力&#8230;&#8230; <br /><br />&nbsp; &nbsp; &nbsp; 故事总是这样重复上演，然后一个非常现实的情况是现有的私营企业的加班现状。<br /><br />&nbsp; &nbsp; &nbsp; 首先需要澄清一点的是这里讨论的加班是不带薪的加班（包含不调休等其他直接利益）。 当雇佣制存在时，人们就以&#8220;上班&#8221;来代表自己的工作，有人出钱，有人出力，出钱的人雇佣出力的人，大家为了各自的目的持续这种关系。尤其是私营企业存在时，这种雇佣关系更为明显&#8212;&#8212;老板为自己上班，因为公司是自己的；员工（雇佣工人）为自己上班&#8212;&#8212;赚取工钱（劳动报酬）来养家糊口过日子。虽然都是为自己上班，但是有个概念是老板的自己=公司集体，员工的自己=员工自己（家庭）。也就是说，在这个前提下，两种身份的人上班的目的是不一样的。但是我们知道，雇佣关系的确立需要一个约定，一般就是我们的劳动合同（或者其他劳动规定）。如同其他社会现象一样，工作也有个社会通用约定：比如定点上下班。而加班就是在这个雇佣关系和通用约定之上衍生出来的现象。<br /><br />&nbsp; &nbsp; &nbsp; 企业管理人员明白这种工作目的带来的影响，于是约定如果有加班，则给予更多奖励。于是加班这一现象也就正常了。 但是在正常中必须有异常的陪伴，那就是现在的多数私企做的事情：加班没有报酬。面对这种状况时，有的管理人员会对你说，加班虽然没有加班费，但是你不是没有收获的，加班属于额外的付出，付出会有回报的，你的能力会提升，同时年底可能会有其他的比如年终奖啊晋升啊等等优势&#8230;&#8230;当说出这种话时，如果你信了，那说明你还年轻，容易被忽悠。事实是需要仔细揣摩的，第一点，加班为了什么？如果是你承诺3天做完的活，到日子没交差，那加班搞太正常了，这个不是要讨论的；如果你完全自愿在公司加班学习，那也不要讨论，学习哪里都一样。但是有种加班是所谓的制度或者是强制执行的，项目经理为了让项目顺利执行完，那这个需要讨论一下了。加班本身成为了一种常态，然后又对你承诺是个人提升的前提，那这个就是自相矛盾的了。所有人都休息，你加班，这叫提升；所有人都加班，你也加班，这就不是提升了。如果是短期内项目冲刺，这个加班不叫加班。<br /><br />&nbsp; &nbsp; &nbsp; 注意我说的是常态，就是说公司管理人员把加班作为一项长期事业来进行了~~~这时候其实是你步入到一个低能效倒退的节奏里去了。 亲身经历告诉我，常态的加班带来的后果；第一、低效，员工的工作效率会有个曲线发展，刚开始加班会体现出干的活也多，这时候一切都很美好，但是时间一长，你会发现，原来8小时工作的内容，放到12小时还是这些活，原地不动了~~再过段时间，由于长期的加班，体力意志力以及心智都不是正常发展，所以效率会再降一个档，8小时的工作，12小时加班只能完成一半，而剩下一半不是故意消极怠工就是员工去做自己的事情。于是结果就是本来可以正常发展的业务慢慢走向死亡。第二条后果、员工的全方位亏损，企业发展良好与否，员工是其组成基本，大家都知道招一个人然后到培训他可以完成特定工作这都是有很大成本的，如果这个员工不断成长，那这些成本是值得的，如果这个员工各方面不断的退步，甚至像一颗老鼠屎，那么不好意思，企业这一锅大汤是肯定要毁了，长期的高强度加班带来的人的身体和精神损失我就不多讲了，体验过的都知道。第三条后果就是，企业的名声不好，面对同样的机会，多数人会选择正常的企业，而一个总加班的公司是不会有人选择的。  <br /><br />&nbsp; &nbsp; &nbsp; 最后总结一下，加班是现代企业竞争的常态，但是长期高强度加班不能成为一个企业的常态，说起来这话有点绕。说白了要不要加班就是在考验管理者，正所谓张弛有度，如何调节？不是放一句狠话：天天加班周末不休~~就能打败竞争对手的，真奇怪为什么有的所谓的高层领导那么naive<img src ="http://www.blogjava.net/changedi/aggbug/409886.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2014-02-15 11:36 <a href="http://www.blogjava.net/changedi/archive/2014/02/15/409886.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>过去的一年</title><link>http://www.blogjava.net/changedi/archive/2014/02/07/409578.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Fri, 07 Feb 2014 07:35:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2014/02/07/409578.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/409578.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2014/02/07/409578.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/409578.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/409578.html</trackback:ping><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 公司上班第一天，在一种&#8220;节后综合症&#8221;的气氛下写下这篇一直拖着的总结。</p> <p>&nbsp;&nbsp;&nbsp; 2013已经成了历史的一个数字，在各种数据总结、趋势图表、红包鞭炮、酒席宴请弥漫的后春节状态下，终于回到公司，坐在清冷的办公室，冲一杯咖啡，键盘和聊天声中，开始静静的回忆过去的一年。</p> <p>&nbsp;&nbsp;&nbsp; 3年一个坎儿，也许不假，2013是我最频繁想起跳槽、转行、辞职的一年，为什么？我把它归罪于3年这个坎儿。工作3年整了，在一家公司，一个部门，做着很多类似的事情，有这些想法&#8230;&#8230;正常。先插一段故事，从年前到家到年后的各类聚会，总结起来比上班还累，天天吃肉喝酒，处处谈论着本不感兴趣却不得不谈的现实，开始总跟人抱怨在外地工作辛苦，天天加班拼命，上班路堵不方便，生活成本高，周六日没休息等等。后来所见所想，看着各有各的辛苦，各有各的烦恼，明白抱怨解决不了问题，抱怨只会让大家知道你在外面混的很苦而已&#8230;&#8230;徒劳的。回到正题，总结2013，先谈积极的，生活上，孩子健康成长，父母健康平安，房子按期装修，一切都正常运转按部就班，只是花钱如流水，年底混个0的开始，不过还是很欣慰，一切蛮顺利的。总结总是谈工作更多，那我也就更多的说说工作。</p> <p>&nbsp;&nbsp;&nbsp; 工作好像不那么顺利了，进入了一个很奇怪的循环，也许别人不觉得，但是我自己把现在的状态称作一种尴尬的境地。这一年，在互联网技术这个圈子里，我尝试了4种岗位，2013之前，我是一个专职的Java开发工程师，我关注的是服务端应用的架构设计、代码质量、并发和可扩展，但是到2013年底，我感觉自己成了一个时下流行的ASE&#8212;&#8212;全栈工程师（All Stack Engineer），这种转变是因为团队缺乏&#8220;资源&#8221;而被逼出来的，年初产品改版，全站大换血，没前端资源，没办法，在借了个前端做了2周demo和组件的前提下，我带着一个开发兄弟&#8220;成为&#8221;了前端，写js，写css，后来css变成了less，js也需要自己做前端组件，1个月后，我们真的成为了前端，这时候的我，开始关注数据可视化组件（了解d3和raphael），前端模块化（seajs），前端开发模式(前端OOP)和架构等，看两遍犀牛书已经满足不了我的需求，更多的js书籍进入了我的reading list。项目在快速的迭代后进入稳定，新的需求也可以快速的被完成（因为我们俩已经算是前端熟手了），而后开发人员补充一倍，机器扩容，一切看上去都开始正常。这时一个新的数据项目起步，再次面临&#8220;资源&#8221;紧张，不过这次缺的不是software engineer，而是data algorithm engineer。于是我也重复了这次紧张，进入到数据开发的角色中。数据开发其实是个有意思的角色，关注点主要是写sql，但是在大数据背景下，hadoop要非常熟悉，要理解整个生态，数据开发不是单纯的ETL，写写hive或者pig的ql，而是在结合业务的前提下设计出出色的数据架构，数据架构看上去很虚，但是其作用不亚于软件开发中的架构设计。从某种角度讲，在大数据背景下，好的数据架构起到的作用更大，直观上讲能节省大量的成本。本来数据这块角色可以分很细的，但是同样由于&#8220;资源&#8221;的问题，我承担了全部的工作，当然学习起步阶段得到了不少同事的帮助，同时也得感谢公司的大数据平台的简单易用让大数据这种比较有技术含量的东西可以轻易的被工程师使用。总的来说，2013后半年进入到数据领域，开始各种数据开发尝试。这一切看上去还挺不错的，但其实麻烦在于业务，业务发展过于变动和快速，导致工程师做东西都是填补型甚至是一次性产品，比如前后端开发成了copy&amp;paste，数据开发沦为了copy&amp;paste型的ETL，结构层次不清晰，毫无架构可言。在短时间内开发高质量产品本来是个悖论，又经历长期的加班和强制性的公司政策，这是在束缚创造力和打压创新精神&#8230;&#8230;</p> <p>&nbsp;&nbsp;&nbsp;&nbsp; 于是，作为一个ASE，我们可能热衷于一切可能改变世界的技术，但是产品落地一定依托于某些业务，而业务往往是关键点，所以，真正的循环悖论是我们在不断的重复失败的业务，而技术的轮子由成功的业务驱动，于是周而复始，眼见别人的成功，而无能为力改变自己，这应该算是某类工程师的悲哀吧，我们可以轻易的实现各种算法，可以写大量的Java来实现控制业务逻辑，迅速的组织页面html+css+js来可视化，可以熟练的写成MR或者hive sql在大数据平台下查找数据，甚至可以轻松的把这一切全部一肩扛起，但是~~~我们改变不了产品失败的命运&#8230;&#8230;</p> <p>&nbsp;&nbsp;&nbsp; In my opinion，我们不应该仅仅是为了公司的股票和工资在做事，不能只是因为一次涨薪、一次红包、一次配股而努力，既然选择了，那么这是一份事业&#8212;&#8212;a career not only a job。3年前我放弃导师的博士学位邀约，进入大公司成为了一名普通工程师，3年后，是否要放弃大公司的庸碌而重拾自我？忙碌过后、重新思考，如果这仅仅是工作，那么趁着还不老，追寻自己的梦想吧。</p> <p>&nbsp;&nbsp;&nbsp; 就写这么多吧，总结这东西写起来总没个关注点，洋洋洒洒的，哦对了，最近流行的文体是北上广深究竟给了你什么？好吧，我不在以上四地，但是就杭州来说，我这3年，没想清楚杭州究竟给了我什么。但是我心中有个答案，你不在这些地方存在过，你永远不知道答案。</p><img src ="http://www.blogjava.net/changedi/aggbug/409578.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2014-02-07 15:35 <a href="http://www.blogjava.net/changedi/archive/2014/02/07/409578.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>User-Agent(UA)的二三事</title><link>http://www.blogjava.net/changedi/archive/2012/03/13/USER_AGENT.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Tue, 13 Mar 2012 10:27:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2012/03/13/USER_AGENT.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/371820.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2012/03/13/USER_AGENT.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/371820.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/371820.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: &nbsp;&nbsp;<a href='http://www.blogjava.net/changedi/archive/2012/03/13/USER_AGENT.html'>阅读全文</a><img src ="http://www.blogjava.net/changedi/aggbug/371820.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2012-03-13 18:27 <a href="http://www.blogjava.net/changedi/archive/2012/03/13/USER_AGENT.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>2011的过去和2012的到来~</title><link>http://www.blogjava.net/changedi/archive/2012/01/17/368630.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Tue, 17 Jan 2012 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2012/01/17/368630.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/368630.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2012/01/17/368630.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/368630.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/368630.html</trackback:ping><description><![CDATA[农历年底，公历年初，各种总结展望的时候。然而，在异乡工作的总结刚做出，再回家才发现各种不适。<br />家里似乎是能发生天翻地覆的变化的地方。结婚生子，可能是下一步最重要的事情了。年底总结，列出了很多在技术上2012想要做的事情，想要积累的东西。这一切希望都能实现，当然对应付出的就是自己双倍的努力。<br /><br />过去~~<br />以为隐瞒是是世界上最难的事情，因为，这表明说的和想的，或者是做的和想的不一样，这是一种被迫的&#8220;表里不一&#8221;。<br />回家的第一天，就见到了最熟悉的兄弟们，聊起来，大家总结2011是不顺心的一年，发生了很多事情，大家各种不顺，一个兄弟离婚了，一个兄弟失业了。当然有两个喜得贵子，算是好事。生活就是这样，人可能会意外生病，不好的信息可能会突然到来，5年前的一句话可能到现在才会带来伤害~~等等等等。当我们遇到挫折时，需要什么？困境的最大威力不是困境本身，而是它所散发出的那种悲哀和伤感，这些负面的东西会让一个人失去信心逐渐绝望。而我们要战胜它最重要的事情就是保持斗志并充满信心。<br />胡言乱语一通，我也不知道自己在说什么~~可能是一些休息的不适带来了一些伤感。<br />乱~~<br />一点光~~<br />展望2012吧，在农历春节后，就要继续奋斗了。2012，我要做几件事：<br />1，工作加倍努力，把总结中写到的都实现。<br />2，结婚生子，这是最重要的一件私事了。<br />3，为父母，为家人做更多。<br />4，多一些时间思考。<img src ="http://www.blogjava.net/changedi/aggbug/368630.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2012-01-17 09:13 <a href="http://www.blogjava.net/changedi/archive/2012/01/17/368630.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作半年的心得总结</title><link>http://www.blogjava.net/changedi/archive/2011/08/20/356924.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Fri, 19 Aug 2011 23:46:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2011/08/20/356924.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/356924.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2011/08/20/356924.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/356924.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/356924.html</trackback:ping><description><![CDATA[
 
当然这里列出的全部是一些技术上的点，其他的全部略过~<br /><br />1. 日常开发<br />作为互联网技术从业人员，日常开发就是我们的本职工作。在熟悉了一个公司的开发流程和使用的开发技术后，就开始进入一个貌似是死循环的开发过程。其实从态度上来讲，在完成了3-5个日常项目流程后，可能觉得一些枯燥。像一个也算是新人的同事和我抱怨，现在的开发好无聊。其实怎么讲呢，萌生这样的心态是很正常的。每次都做一样的事，重复劳动是程序员的大忌。然而我们真的是在做重复的事情么？世界上有两件事是最美的，一是创造，一是欣赏。基本每个大公司都有自己的框架，自己的技术体系，学会使用只是一个皮毛，了解原理深入源码会发现艺术感的美妙。为什么设计成这样给我们带来了思考，不要抱怨一个框架的好坏，觉得好用，哪里好用，找出来，总结好；觉得烂，OK，哪里烂，从作者的角度去考虑，他这样设计在权衡了哪些优缺点后才这样设计。我们看各种书和文章，知道了jee开发框架的各种优缺点，知道了设计模式的各种指标和应用。但是为什么这样设计？有人讲设计模式根本不算发明，只是日常思维的总结。是，那为什么我们总结不出来？GOF就可以呢？日常开发，分两个角度看，你的态度决定一切，只是一味的做，那必然无趣，不断的去挖掘开发用到的技术的内涵，你会觉得，让日常来的更猛烈些吧~<br />谈完了态度，谈谈纯技术上的点。就web开发框架来说，最初掌握的一定是其基本框架，就像spring的管理bean的IOC容器，AOP，对ORM及service的支持等等。会用这些东西后，就开始考虑流程用到的各个部分为什么这样设计。比如就拿spring的IOC讲，bean的加载，注册，及整个的管理机制，熟悉，源码阅读，这都是必备的工作。像我们使用webx，与spring类似，那么它的各套流程是什么？我们开始加载配置，那么好吧，service是什么时候来的，都是哪些service，在哪里配置。加载pipeline的时候，每一个valve的invoke方法都做了什么。模板加载时候的具体定位怎么样~~等等这些流程都要清楚明白并且知道源码。为什么干这些，一是你知道的越多，你似乎越牛逼，其实关键是你知道了原理，在问题发生的时候，定位问题的时间就越短，解决问题就越快。<br />2.测试<br />不是写好单元测试就OK的~~做过开发自测的同学都知道测试的辛苦，前些日子做一个功能日常的自测，我光测试账号就领了11个，账号之间关系复杂，各种好友、关注等等。时不时还需要在纸上以网络示意图的形式记录账号之间的关系。测试是很辛苦的，关键是为了覆盖的全，我们必须有重复劳动和大规模覆盖的决心和耐心。可能更多的是耐心吧~<br />自测不是所有人都做的，更多的是开发完成后交给测试人员，别的公司我不清楚，我公司的测试有时候有些兼职产品的感觉，会提出各种功能上的改进。其实这也对，本着让产品更好的原则，每一个人的每一个建设性建议，我们都要接受。于是开发人员在这时就到了考验耐心的时候。虚心听别人的建议，然后决定是否改进，测试的时候就像考试时做检查，做题的感觉和检查题目的感觉是不一样的。耐心是坚韧的表现，去提高自己这一块的能力。<br />3.优化<br />工作虽然没多久，但总结的优化有两种，一种叫性能上优化，那是坚定了产品路线后，不断的完善。另一种叫推翻重做（鄙视）。<br />性能优化书籍一大把，我的优化经验也少的可怜，目前只是做了代码重构，通过减少服务调用和优化存储数据结构来提升了大概20-50%的性能。还有一个补充就算是界面优化，当然这多数是交给前端开发人员做的事情了，但经过一段前端打杂后，发现一个了解前端技术的开发是多么的游刃有余（有点自大了）<br /><br />先就总结这么多吧。半年来还是有不少浪费时间的情况存在，下半年努力~~fighting<br /><img src ="http://www.blogjava.net/changedi/aggbug/356924.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2011-08-20 07:46 <a href="http://www.blogjava.net/changedi/archive/2011/08/20/356924.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>手机wap页面前端的一点体会</title><link>http://www.blogjava.net/changedi/archive/2011/06/07/351837.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Tue, 07 Jun 2011 01:03:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2011/06/07/351837.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/351837.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2011/06/07/351837.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/351837.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/351837.html</trackback:ping><description><![CDATA[<p>手机端的html页面就像回到了最早的纯文本时代~~</p> <p>没有JS，只有单纯的div+css~容易上手，但是也有很多限制。不在技术上，更多的是一些适合手机屏幕的适配~</p> <p>移动平台有多种，iOS, Android, WP7, Sybian &#8230;</p> <p>移动浏览器就更多，我的Android手机中装了10款浏览器，分别是：原生google的，qq，UC，海豚，firefox，opera，天天，go，skyfire和x浏览器GL。</p> <p>那么我们需要的适配多少呢？答案是 平台数去乘以平台版本号再乘以浏览器种类再乘以浏览器版本号~~无穷无尽啊</p> <p>一些建议：仅限中低端适配</p> <p>1. 尽量采用div+css结构，因为有些浏览器在有些平台上的显示是不支持table的。</p> <p>2. css不要用float，不要用过多的伪类和absolute之类的position相关的东西。</p> <p>3. form表单不要使用type为file的input。</p> <p>4. 每行设计的时候最好数数pixel的个数（很容易计算的）</p> <p>5. 被迫使用表格的话，那么请记住不要用rowspan或是colspan，部分android和sybian系统不支持。</p> <p>6. 看一些已有的大型站点的手机wap站前端，去学习他们的标签设计，毕竟小团队或者个人开发资源有限，无法统计和适配多种手机。</p> <p>7. 别搞wap啦，做好webapp和native，改行html5 + css3吧~~</p> <p>另外对于触摸屏的出现，在head中的meta多了很多的设定，比如viewport等。</p> <p>下面贴一些html和css的小tip，希望有用。</p> <p>1. 浏览器是忽视所有文档中的tab，回车和空格的。 <p>2. ..在&lt;a&gt;的路径中代表上级目录 <p>3. 所有的路径分隔符都是/ <p>4. Block型元素前后都有换行，inline型元素则没有，block型有&lt;h1-h6&gt;，&lt;p&gt;, &lt;blockquote&gt;，inline型有&lt;a&gt;,&lt;em&gt;,&lt;img&gt;,&lt;q&gt;等 <p>5. Css的最近原则就是如果有多条css属性匹配，那么按顺序执行渲染，所有的conflict都被最后的规则解决。 <p>6. Css的字体大小font-size指的是字体的高度，就是从最下端到最上端的距离。如果单位不是px而是%，那么指的是相比其他字体的大小倍数。如果父标签是10px，那么子标签应用了%或者em的就是父标签的倍数关系。 <p>7. Line-height其实是行间距 <p>8. Html中每个元素可以被理解为一个box，而padding就是指元素内容与box的边界之间的内间距。 <p>9. 一个图理解这些间距问题： <p><a href="http://www.blogjava.net/images/blogjava_net/changedi/Windows-Live-Writer/wap_7257/clip_image001_2.jpg"><img style="border: 0px currentColor; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline;background-image: none;" title="clip_image001" border="0" alt="clip_image001" src="http://www.blogjava.net/images/blogjava_net/changedi/Windows-Live-Writer/wap_7257/clip_image001_thumb.jpg" width="244" height="234" /></a> <p>10. Id属性是用来定义严格的单一元素的。你可以有很多个元素有相同的class属性，但是id只能有一个。 <p>11. Width属性只声明内容区域的宽度。Width的默认是auto。 <p>12. 默认的padding是0px <p>13. 用空格分开的css表示的是父子关系，比如div h2{}就表示div下的h2如何如何。这种父子关系是相对的，不是直接关系，只要h2嵌套在div中就可以。直接的父子关系需要div &gt; h2{}来指定。 <p>14. Padding和margin的省略写法：padding: a b c d是按照上右下左的顺时针顺序设定的。 <p>15. Css优先级使用三位数排列法：000，是否有id，有则在第一位加1，是否有class或者伪类，有则在第二个数加类或伪类的个数，是否有元素名，有则在第三位加元素数。 <p>16. 在flow中需要注意的一点是：水平的两个元素的margin是二者之和，而垂直的情况则是二者中大的margin作为间隔。换句话说，inline元素之间的margin是二者之和，而block元素之间的margin是二者中的较大者。 <p>17. Float会将元素剥离出页面的flow，页面其他block元素会在它之下，但是inline元素会自动和float元素的边界分离。 <p>18. 表格单元格之间的距离叫做border-spacing。  
</p> <img src ="http://www.blogjava.net/changedi/aggbug/351837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2011-06-07 09:03 <a href="http://www.blogjava.net/changedi/archive/2011/06/07/351837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作3个月小结</title><link>http://www.blogjava.net/changedi/archive/2011/05/14/350238.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Sat, 14 May 2011 06:01:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2011/05/14/350238.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/350238.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2011/05/14/350238.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/350238.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/350238.html</trackback:ping><description><![CDATA[<p>又一段时间没有写日志了。工作也3个月了，随着杭州的天气进入初夏的&#8220;微热&#8221;，工作也开展的有声有色了。学习不断深入，对于工作中遇到的问题也有了自己的理解，感觉有学习不完的东西~~</p> <p>首先说说工作的流程，对于新手上路，莫名的技术轰炸我觉得不可怕，掌握公司整个产品开发流程，知道去哪里找资源，这个更重要一些。刚到这里，会感觉有很多东西要学，于是也制定了一些计划，开始学习这，学习那。但是实际工作过程中，发现根本没有时间，或者没有那么系统和完整的时间供你系统学习。时间都被打散成了碎片，要懂得利用碎片时间。这是另一个话题，但我的感觉就是一定要首先对流程掌握清楚，知道一件事分几步，每一步在干什么。也就是说，在你知道具体怎么做之前，一定要知道是做什么，怎么个流程。</p> <p>清楚流程后，那么开始实际上手吧，没时间去等你全学会了，掌握了，&#8220;考试通过了&#8221;才能去开发~~这没有止境，而且不靠谱。合理的安排就是在过程中学习，利用时间片段去学习。我们现在浮在技术的海洋上，各种新鲜的东西层出不穷，若是想一一学尽，那么毫无意义，更是毫无可能。那么怎么学？一个工作流程中会遇到很多技术，这些技术都隶属于自己技术领域或者技术层面的一个特定点。那么好吧，在看着前人的结果去依葫芦画瓢的时候，去理解和思考这些技术细节所属的技术层面。然后去阅读，去查找，去弄明白这一个技术层面的概况。不需要去抠细节，这个阶段还不够。只是了解，知其然，足够了，因为罗马不是一天建成的。</p> <p>清楚流程，又清楚了各个技术层面的总体概况后，那就可以有多种选择了，根据自己的业务需求去关注一两个技术点，或者是像之前一样，再遍历一遍流程中的各个技术层面，然后深挖每一个~~很多大牛都介绍自己的学习经历的时候提到过&#8220;先深后广&#8221;的路子。这个是非常好的一个方法，在一两个点上逐渐深入，慢慢成为专家的时候，再跳出来涉足别的领域，那就发现其实道是互通的~~</p> <p>最后总结一下，也算是对现有流程的一个回顾：首先是产品经理设计一个产品出来，功能和外观原型展示和描述出来，我称之为模型。在这个模型出来后，要做一番评审，流程中各个可能参加的人来提出建议和意见，尤其是要和开发人员交流，讨论技术可行性。其次就是交个前端设计师去根据外观原型设计具体的外观样式和demo，产品原型像一个框架，先把地框住，外观demo像图纸，得弄清楚要做成什么样子。当然外观demo的设计也要评审，主要是产品和前端人员进行沟通，看是否符合原型设计。接下来就是开发人员开发，在已有的框架和图纸下，一步步添砖加瓦，将其实现。然后测试人员进入进行检查，就像是验收一样，我们现在都叫QA，这点确实非常符合。在保证了质量后，最后交付。整个流程每一轮都要评审，有人觉得评审是浪费时间，但是，如果没有评审机制，你就会发现生活越来越乱~~</p> <p>一个产品的生产过程，就像盖一所房子，这也是软件工程和建筑工程各个环节都非常相似的一点。不同的地方就在于软件产品在开发过程中的技术细节繁杂多变，各式各样。虽然我不懂建筑，但是想必建筑应该不如软件的复杂吧~</p> <p>那么对于开发的技术来说。还是前面提到的思路，先深后广，但是这个深和广的意义和界限没那么严格。不能一味的深钻一个而完全不管其他，也不能全方位覆盖而一个都不深入。具体的度就由自己把握了。</p> <p>这段时间比较忙，难得一个周末的下午有空能写写文字总结。</p> <p>下面就是自己前阶段做的工作的一个回顾了~</p> <p>1，刚来的新人，不断学习（这是必须一直持续的事情，无所谓新旧老少）</p> <p>2，理解流程，认识同事，交流培训~~</p> <p>3，项目前端页面在各个浏览器上体验不一样，寻找原因并解决之</p> <p>4，加入小项目，开始实战（小项目主要是改善用户体验，修改现有代码）</p> <p>5，小项目2期，继续优化</p> <p>6，研究型项目，后续可能应用，属于探索创新</p> <p>7，前端页面设计及编码</p> <p>8，友情项目帮助，主要是后台开发</p> <p>&nbsp;</p> <p>其中的4和5是同一个项目，但是明显在做4的时候，只是知其然，完成功能就OK，到5的时候，新的任务，同样的代码，但是才意识到自己在之前项目中的各种不熟悉和不深入，重新深入理解，加深了不少认识，学到了很多东西。研究型的东西自己比较擅长，在时间比较充裕的情况下，很顺利的搞出demo。前端设计是自己很感兴趣的东西，也在很短时间完成了任务，同时也体验了一把项目前端工程师的感觉。友情项目说实话干着很轻松，感觉也能学习新的东西。</p> <img src ="http://www.blogjava.net/changedi/aggbug/350238.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2011-05-14 14:01 <a href="http://www.blogjava.net/changedi/archive/2011/05/14/350238.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>新的开始——纪念入职一周</title><link>http://www.blogjava.net/changedi/archive/2011/02/20/344689.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Sun, 20 Feb 2011 06:45:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2011/02/20/344689.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/344689.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2011/02/20/344689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/344689.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/344689.html</trackback:ping><description><![CDATA[<p>忙碌的一周还有半天就结束了，孤独的我坐在空荡的公司大厅写完这一篇纪念博客~~<br />
<br />
2011年2月14日，迎来了纪念意义的一天，我开始了人生的第一份工作——淘宝（中国）软件有限公司-Java开发工程师。原想的那份紧张和忐忑，在进入公司大楼的那一刻，比我到杭州的那一刻还来的放松，一切都放下了，一切又都重新拿起，我，加入这家公司了。<br />
<br />
随着新人手续的一点点的落实，我很快进入了自己的角色，也不知道是刚开始工作的热情不减，还是我已经习惯了研究生期间的那份勤勉。周六日也都到了公司加班，对于第一周刚工作的应届生来说，我想这是一个好的开始。<br />
<br />
刚工作，对什么都有兴趣，但是却没那么多时间让我去发现，去探索，去问~~因为大多数时间我都用来学习技术。公司的很多制度、文化包括所谓的社会经验，我都没有时间去了解，刚来的第一周，就完全泡到了技术的温泉中不能自拔。也许还不够资格感叹什么，但是对于不追求那些浮华的自己，我感觉，这个offer的选择，没有做错。<br />
<br />
很不习惯叫自己身边的人是同事，但是我想我还是很快的进入角色的那一类吧。我不想证明什么，也不是要玩命的干什么。只是觉得人生的意义必须是不断的学习和奋斗。而我，也在不断的努力的做到这一点~~~<br />
<br />
刚来一周，真的还不足以嗅出什么气味，但是初到的那份新鲜还一直萦绕在身边不退~~~高开低走不是我的风格，写篇纪念性的文字就是为了鞭策自己不断的进步。<br />
<br />
就像在微博上写过的，第一次的小组会议，让我很是兴奋，仿佛找了好久又找到了熟悉的感觉一样，产品创新和技术革新，是每个团队不断需要做到的。作为新人的我，更要加倍努力迅速融入团队，为团队贡献力量的新人才是合格的新人~~~<br />
<br />
再来说说生活，一个人的生活，总是缺点什么，一直以为独立的自己，发现在生活的品味上却着实是个门外汉，基本上没有女朋友在身边，所有的东西我都是以温饱来衡量，可能这日子更像一个贫困潦倒的穷学生吧（摆脱不了自己的学生身份了）<br />
<br />
杭州的吃喝还是挺好的，来这里，至少这些天的感觉让我并不后悔，说明杭州还是蛮有粘性的嘛。唯独适应不了的阴冷的冬天终于快过去了，一个新的春天，希望公司和我，都能迎来更高发展的2011年。<br />
<br />
着眼于短期目标，下周的规划就是要做好一周的学习任务（毕竟新人要不断学习），并把已经发现的问题解决掉，更多的去了解公司（在闲暇时间和同事聊天中进行）&#8230;&#8230;<br />
<br />
当然还发现一个小小的问题就是，公司没有培训~~~（不知道为什么，难道需要我自己去报名？）第一周的时间大多数花在自己的&#8220;望闻问切&#8221;了。好吧，没关系，自学也是咱擅长的事情~~keep moving<br />
<br />
劳逸结合，张弛有度。周末需要休息，新人也不例外，学习了两天后，就拿这最后的半天用来消遣自己，享受生活吧。<br />
<br />
<br />
于2011年2月20日，公司记</p>
<img src ="http://www.blogjava.net/changedi/aggbug/344689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2011-02-20 14:45 <a href="http://www.blogjava.net/changedi/archive/2011/02/20/344689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>bye~~2010</title><link>http://www.blogjava.net/changedi/archive/2011/01/02/342166.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Sun, 02 Jan 2011 09:51:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2011/01/02/342166.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/342166.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2011/01/02/342166.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/342166.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/342166.html</trackback:ping><description><![CDATA[年底写总结，年初写展望。<br />
现在是2011年1月2日，算年初，不过我写的是2010的总结。<br />
<br />
2010伊始~~~<br />
1-6月&#8212;&#8212;<br />
过程：课题如火如荼的展开，深深的沉浸在图像检索和视觉设计的乱七八糟杂文之中。搞搞课题，写写报告，读读代码，做做题目。就这样，学校里最后的半年过去了。<br />
收获：硕士毕业的主要问题解决了，实验做的差不多了，新的idea搞出来了，paper心里有数了。<br />
<br />
7-8月&#8212;&#8212;<br />
过程：最后的一个暑假，研究生的暑假，比较假，老师接了个项目，帮导师干了些完全不擅长的事情，嵌入式，DSP，PSD&#8230;&#8230;好在我做算法，休假回来的火车上就接到了boss的电话~~~感慨学生的日子也不好过。<br />
收获：干活的过程中还是学到些东西，又把C好好拿起来搞了搞，有空的时候准备了一些技术基础知识，准备9月份开始的找工作大潮~~~<br />
<br />
9月&#8212;&#8212;<br />
过程：好像很空虚的度过了，每天必须上求实、北邮人和水木，搞搞job info，看看campus招聘信息。读读各种笔经面经，感慨北邮的同学们已经去了自己心仪的公司，一些羡慕，一些期盼。<br />
收获：暂无，可能算是那种期盼吧，还有一些找工作的初体验，比如简历就被某公司刷掉？（据说是随机）虽然曾经在该公司举办的编程挑战赛上取得过一点点成绩~~~笑了<br />
<br />
10月&#8212;&#8212;（面经简版）<br />
过程：找工作最忙碌的一个月，这个月里，基本就是奔波，笔试面试，还有各种和同学们的聊天，还有隐隐的对自己的规划。拿到了非常心仪的一个offer，虽然待遇不是特别有竞争力，但是期权和那种小团队的挑战让我非常心动。H公司的offer不出意外的收到，也是非常看好，虽然累，但是肯定能学到东西。在有这两个offer后，找工作就轻松了一些了，已经不再海投，而是有选择的参加。<br />
月底迎来了自己最心仪的T公司，B公司和TB。突然想到，半年前跟家里人说，自己要去杭州发展，可能真的能实现了。<br />
这三个公司的顺序是这样的：先是T公司的笔试，网投了，却没有成功，当时好像浏览器有问题，于是决定去霸王笔。TJ地区400人左右的笔试名单，最后46人进入一面，我侥幸入围。一面后46-&gt;8，8人进入2面，我又侥幸入围。当时以为，可以去深圳了。结果最后发现，这8个人中好像也没有幸存（或者至多2人吧）。总之这么大的淘汰率，觉得还是不太可以接受。T公司的缘分就止步于此了。在面T的时候，B的面试也如火如荼，1、2、3面都轻松的搞定，最后进入等offer阶段。不得不说，3次面试都非常开心，都有技术，都有探讨，和谐而不失争辩，讨论而不失礼貌。我对B的感觉很好~~~~<br />
TB的笔试面试可以不说了。总之，我们的缘分从这一刻开始了~~~（有时间写面经详细版本吧）<br />
收获：最后果断的签约了TB，虽然待遇不如B~~但是也算达成了我的心愿~<br />
<br />
11月&#8212;&#8212;<br />
过程：签了TB我就没再找工作了，几个当初也认可的公司发来面试通知，都婉拒了~~~正式进入论文写作阶段，因为年底就毕业了。这个过程是很顺利的，因为工作都是自己两年来一点点积累的，全部过程和内容都很熟悉，只是一些文案工作了~~修改格式，审阅内容，等待答辩。这个月过的匆匆又完整。<br />
收获：毕业论文一篇~~<br />
<br />
12月&#8212;&#8212;<br />
过程：答辩，交接工作，一些小聚，收拾东西，然后准备离开待了6.5年的学校~~~<br />
收获：还是很怀念的~~TJU，让我成熟的地方。<br />
<br />
<br />
bye了，TJU<br />
bye了，2010<br />
<br />
懒惰的我先写到这里，师弟们叫吃饭了~~呵呵，散伙送行，一切都要结束，一切也都要开始。<br />
<br />
<img src ="http://www.blogjava.net/changedi/aggbug/342166.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2011-01-02 17:51 <a href="http://www.blogjava.net/changedi/archive/2011/01/02/342166.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>无辜的世界杯月~~~</title><link>http://www.blogjava.net/changedi/archive/2010/06/28/324659.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Mon, 28 Jun 2010 04:19:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2010/06/28/324659.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/324659.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2010/06/28/324659.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/324659.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/324659.html</trackback:ping><description><![CDATA[每逢这个四年一届的节日，基本就是放下了手头重要的工作，去看世界杯了，随着昨天夜里两次经典误判~~~墨西哥和英格兰出局了，当然这是我想看到的结果，因为我是阿迷，希望八强阿根廷能复仇德国。但是这样的胜利不是我想要的！<br />
墨西哥人是无辜的，阿根廷人也是无辜的，一方无辜的受伤，一方无辜的获利，一切取决于裁判&#8230;&#8230;<br />
当裁判都不公正的时候，哇，这一刻，我想那些总是抱怨社会不公正的人，大概可以歇息一会了。<br />
<br />
世界杯的间隙搞搞课题，整整想法，写写代码，画画图。<br />
翻转~科研的间隙，看看世界杯，聊聊足球八卦，追追球员动态。<br />
<br />
太久不写C++代码，现在的手生，估计只限于读懂而写起来费劲的阶段了。<br />
<br />
<br />
btw，最近看了Martin Fowler的《重构》和Brian Kernighan与Rob Pike的《程序设计实践》，获益匪浅，都是些经验的总结。<br />
我发现计算机相关的书籍，不应该只写what to do和how to do，而是多写写how to do better。介绍技术的书，我总是看对应的doc或者guide，而真正花时间读的书，应该是那些经典的名著~~~<br />
<br />
看完不公平比赛，而喜爱球队获胜的碎念。
<img src ="http://www.blogjava.net/changedi/aggbug/324659.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2010-06-28 12:19 <a href="http://www.blogjava.net/changedi/archive/2010/06/28/324659.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>从形式上写优秀代码</title><link>http://www.blogjava.net/changedi/archive/2010/04/19/318713.html</link><dc:creator>changedi</dc:creator><author>changedi</author><pubDate>Mon, 19 Apr 2010 02:35:00 GMT</pubDate><guid>http://www.blogjava.net/changedi/archive/2010/04/19/318713.html</guid><wfw:comment>http://www.blogjava.net/changedi/comments/318713.html</wfw:comment><comments>http://www.blogjava.net/changedi/archive/2010/04/19/318713.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/changedi/comments/commentRss/318713.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/changedi/services/trackbacks/318713.html</trackback:ping><description><![CDATA[&nbsp;
<h1 style="margin-left: 18pt; text-indent: -18pt">1.<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp; </span><span style="font-family: 宋体">优秀代码</span></h1>
<p style="text-indent: 21pt"><span style="font-family: 宋体">什么样的代码是优秀的代码？这个概念目前还没有人能确切的定义。然而广大的程序设计人员普遍都认可的一系列标准基本上从各个层面提出了对优秀代码的要求。最近在读《编程匠艺》，觉得文章都写的很出色，相比之前读《卓有成效的程序员》，该作从代码本身讲述了编程&#8220;那些事&#8221;。深受启发，写写读后总结。</span></p>
<p style="text-indent: 21pt"><a href="http://gxgonline.bokee.com/679308.html">http://gxgonline.bokee.com/679308.html</a> <span style="font-family: 宋体">这里有一段&#8220;优秀代码标准&#8221;，具体限于篇幅不再赘述。只是从自己这个编程菜鸟的角度，去谈谈对编写优秀代码的理解。正如每个人心中都有一个衡量标准一样，我对优秀代码也有一个衡量的标准：结果正确的，形式优美的，性能高效的，易重用和健壮。当然结果的正确性和程序本身的性能取决于算法设计，这是另一回事，不是本文所讨论的问题，本文只讨论与代码的形式和结构有关的问题。</span></p>
<h1>2. <span style="font-family: 宋体">编写优秀代码</span></h1>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">优秀的代码首先具有优美的样式，我想这点是所有编程人员所共识的。没有人愿意读晦涩难懂的代码，相反，如果放在你面前的代码结构清晰，样式优美，那么读程序的人想必也读的心旷神怡了。要记住一点，代码写出来并不是永远给自己看的，而且就算给自己看，也不是一直都能看的懂的。那么如何写出形式优美的代码呢？第一点应该注意的就是代码样式，什么是好的样式：一致，传统，简洁。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">一致的代码主要指程序中代码缩进要一致，括号的位置要一致&#8230;&#8230;其实不用细数，所有的一切关于代码的东西，都要一致。正像那些大师们说的，&#8220;挑选一种适合你的风格，然后坚持下去&#8221;，这就是一致。那么好了，有哪些好的风格呢，经典的括号位置有</span>K&amp;R<span style="font-family: 宋体">风格和悬挂式风格，具体是什么样的，见下表：</span></p>
<p style="text-indent: 21pt; text-align: center" align="center"><span style="font-size: 9pt; font-family: 宋体">表</span><span style="font-size: 9pt">1. </span><span style="font-size: 9pt; font-family: 宋体">括号风格</span></p>
<table style="border-right: medium none; border-top: medium none; border-left: medium none; width: 1177px; border-bottom: medium none; border-collapse: collapse; height: 192px" cellspacing="0" cellpadding="0" border="1">
    <tbody>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 111.75pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="149">
            <p><span style="font-size: 9pt">K&amp;R</span><span style="font-size: 9pt; font-family: 宋体">风格</span></p>
            </td>
            <td style="border-right: medium none; padding-right: 5.4pt; border-top: windowtext 1pt solid; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 367.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="489">
            <p><span style="font-size: 9pt"></p>
            <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img id="Codehighlighter1_11_35_Open_Image" onclick="this.style.display='none'; Codehighlighter1_11_35_Open_Text.style.display='none'; Codehighlighter1_11_35_Closed_Image.style.display='inline'; Codehighlighter1_11_35_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_11_35_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_11_35_Closed_Text.style.display='none'; Codehighlighter1_11_35_Open_Image.style.display='inline'; Codehighlighter1_11_35_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;<span lang="EN-US" style="font-size: 9pt; font-family: 'Times New Roman','serif'; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-fareast-language: ZH-CN; mso-ansi-language: EN-US; mso-bidi-language: AR-SA">k_r_style</span>()&nbsp;</span><span id="Codehighlighter1_11_35_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_11_35_Open_Text"><span style="color: #000000">{<img style="width: 11px; height: 16px" height="16" alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" width="11" align="top" /><br />
            <img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Do&nbsp;something</span><span style="color: #000000"><br />
            <img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="color: #000000"><br />
            <img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
            <p></span>&nbsp;</p>
            </td>
        </tr>
        <tr>
            <td style="border-right: windowtext 1pt solid; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 111.75pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="149">
            <p><span style="font-size: 9pt; font-family: 宋体">悬挂式风格</span></p>
            </td>
            <td style="border-right: medium none; padding-right: 5.4pt; border-top: medium none; padding-left: 5.4pt; padding-bottom: 0cm; border-left: medium none; width: 367.05pt; padding-top: 0cm; border-bottom: windowtext 1pt solid" valign="top" width="489">
            <p>&nbsp;</p>
            <div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #0000ff">void</span><span style="color: #000000">&nbsp;exdented()<br />
            <img id="Codehighlighter1_11_33_Open_Image" onclick="this.style.display='none'; Codehighlighter1_11_33_Open_Text.style.display='none'; Codehighlighter1_11_33_Closed_Image.style.display='inline'; Codehighlighter1_11_33_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_11_33_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_11_33_Closed_Text.style.display='none'; Codehighlighter1_11_33_Open_Image.style.display='inline'; Codehighlighter1_11_33_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_11_33_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_11_33_Open_Text"><span style="color: #000000">{<br />
            <img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Do&nbsp;something</span><span style="color: #008000"><br />
            <img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #000000">}</span></span><span style="color: #000000"><br />
            <img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
            <p>&nbsp;</p>
            </td>
        </tr>
    </tbody>
</table>
<p style="text-indent: 21pt"><span style="font-family: 宋体">另外一个要一致的东西就是命名了，就像文章由断落、章句和字词组成一样，代码也由变量、函数、类型等等构成。合理一致的命名对于代码的样式同样重要。&#8220;恰当地命名的关键是准确理解你所命名的对象。只有这样你才能给它起一个有意义的名称。如果你不能为某个对象起一个号名字，那么你就不会真的知道这个对象是什么或者这个对象真的有必要存在吗？&#8221;</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">接下来说说名字，名字首先得是描述性的，单纯的字母命名是我们编程最常用的，为什么如此，我把它归结为我们初学编程时那一点点的懒惰，随便的定义</span>int a, int b<span style="font-family: 宋体">这样的变量，完成着短小的程序。但是当程序渐渐的大起来，文件渐渐的多起来，这样的变量名字显得那么的渺小和苍白而最终毫无意义。所以如果无法描述一个对象，就不要为它起名字。第二，技术上是正确的，关于这点，由于现在的编程工作大多是在</span>IDE<span style="font-family: 宋体">下进行，因此这部分的检查工作我们程序员都交给了</span>IDE<span style="font-family: 宋体">，当然如果命名满足了第一条——具有描述性——那么也基本不会违反技术规范了。第三，恰当的，恰当的命名体现在长度和格调上，也许你为一个变量起了一个具有描述性的名字并且也是技术上正确的（且符合语言习惯），但是它却长达</span>30<span style="font-family: 宋体">个字符</span>(theNumberOfImagesInMyComputer)<span style="font-family: 宋体">或者只有</span>1<span style="font-family: 宋体">个字符</span>(a,b<span style="font-family: 宋体">等等</span>)<span style="font-family: 宋体">，这样的做法是不好的。对于命名格调的理解，我想这是一个文化背景的问题，有的人很喜欢用</span>foo<span style="font-family: 宋体">或</span>bar<span style="font-family: 宋体">这样的诡异名字，这样做其实违反了&#8220;传统&#8221;原则，这个稍后会提到。关键需要记住的&#8220;了解你的语言的命名规则。但更重要的是看，了解这种语言的习惯用法。公共命名约定是什么？应用这些语言习惯和约定。&#8221;</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">编码要符合标准，这样就会与别人的一致，同样也会与自己过去写的代码一致。这种纵向横向的一致往往从一个编程标准开始。当然编程标准的制定也应该是尽量符合传统，这就说到第二个问题了。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">不要去新鲜的创造样式，而应该去遵循传统。这样可以确保别人读懂你的代码，同时不会让未来的自己和其他人犯晕。我理解的传统更像是一种大众化，就像上面讲到命名时说的，不要用诡异的名字，</span>foo<span style="font-family: 宋体">和</span>bar<span style="font-family: 宋体">不是什么好的选择。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">简洁讲的更多是一种补充。假设你自己订立一个标准的话，你遵循了传统，也一直坚持使用它，但是由于你的天才你把编程标准弄的过于复杂，这样可是苦了其他的程序员了。所以，能简洁是尽量简洁，不要追求华而不实的代码样式。记得自己以前写代码，总写一些类似于&#8220;</span>a[index++] = some();<span style="font-family: 宋体">&#8221;这样的代码。现在想想，还是改成&#8220;</span>a[index] = some(); index++;<span style="font-family: 宋体">&#8221;这样更简洁。简洁不意味着代码行数少，而是让人看着舒服。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">我认为，程序员写代码就像作家写文章一样，清新的结构，行云流水的成文往往能令读者身临其境。而我们作为读者读代码的过程中，也无不希望代码优美，就像是在看优美的散文一样。其实说了这么多，无论是缩进或者括号位置更甚者是命名，这都是在增强我们代码的可读性。当你读代码像读文章一样，那时你就是一个专业程序员了，当你写代码能像写文章时，那时你就是一个优秀程序员了。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">当然代码的可读性离不开注释，注释本身不是代码，但是确是优秀代码所必不可少的东西。&#8220;注释的目标读者是人，而不是计算机。&#8221;注释是一种内部的文档化机制。什么时候写注释呢？这个问题其实很好回答：当你需要解释代码为什么时，去写注释。那么如何写呢？记住几条法则，确保遵循这些法则，那么你也能写出美妙的注释。第一，不要描述代码，&#8220;一个事实——一个源头，不要在注释中重复代码。&#8221;因为本身你是在解释为什么而写代码，这是一种目的解释，而不是过程描述。所以如果你有解释代码的注释习惯，那么，摒弃它吧（当然个别难以理解的算法除外）。第二，不要取代代码，&#8220;当你发现自己在编写密密麻麻的注释来解释你的代码时，赶快停下来。&#8221;注释的字数不会太多，大量的注释看着也让人头痛。第三，确保注释有用，&#8220;想一想你在注释中写些什么，不要不动脑筋就输入。写完之后要在代码的上下文中回顾一遍这些注释。它们是否包含了正确的信息？&#8221;确保注释是有价值的，是真的，是容易理解和清晰明了的，不要用一些含混不清的俚语或个人幽默。最后，避免分心。注释中不应该包含那些陈年旧事，也不应该用各种</span>ASCII<span style="font-family: 宋体">图形来美化，因为字体宽度变化的多种编辑器可能让你这种美化丑陋不堪。同时我也不是很支持在代码块的结尾用&#8220;</span>//end if(a&lt;1)<span style="font-family: 宋体">&#8221;这样的注释来解释。清晰的缩进和括号已经可以解释一切了。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">说到底，清晰代码结构，良好的编码风格和注释，都是在提高我们代码的可读性。而我们写这样代码的目标就是代码的自文档化。我们总会在写完代码的时候，花费大量的时间去写文档，这其实从架构层面来讲，增大了耦合，谁的耦合？代码和文档的。代码一经改变，文档相应也要改变。这样的复杂关联总是耗费了编程人员大量的精力，那么为什么不去在代码本身的形式上花些功夫呢？如果我们都能编写可以阅读的代码，人性化，简单易懂，那么文档还需要吗？就像我们看书籍作品，很少见哪本小说还配着一部说明文档的。</span></p>
<p style="text-indent: 21pt"><span style="font-family: 宋体">最后，再说一说代码的易用性和健壮性。除了美观可读这些外部特性外，编写代码还应该具有易用性和健壮性。《</span>Code Craft<span style="font-family: 宋体">》里提倡使用防御性编程，并给出了防御性编程的一些技巧。当然我并不是防御性编程的</span>fans<span style="font-family: 宋体">，也不是契约式编程的死忠。只是从健壮性的角度看，防御性编程是必须的。然而过多的防御降低了代码的效率，有时候甚至是美观，这样的代码也许使问题复杂了。不管怎么说，代码的易用和健壮是经验积累的体现，怎样写出这样的代码？好吧，没有捷径，大量的编写代码并阅读其他人写的优秀的代码。渐渐的，你会发现，你的代码也可以同样的优秀。</span></p>
<h1>3. <span style="font-family: 宋体">小结</span></h1>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="font-family: 宋体">本文主要从代码的形式上讲述了编写优秀代码应该注意的一些细节。当然，代码的核心——算法没有涉及。最后的一些关于代码健壮性的认识也是拙劣有余。作为一个编写代码爱好者，写出优秀的代码是我们追求的目标。培养良好的编程习惯，掌握更多的编程技巧，不断的编写和阅读&#8230;&#8230;一点心得，一点总结。</span></p>
<h1>4. <span style="font-family: 宋体">参考文献及推荐阅读</span></h1>
<p>[1]http://gxgonline.bokee.com/679308.html </p>
<p>[2]<span style="font-family: 宋体">编程匠艺</span>, Pete. Goodliffe<span style="font-family: 宋体">著，韩江、陈玉译</span></p>
<p>[3]<span style="font-family: 宋体">如何编写优秀代码，</span>http://hi.baidu.com/08027/blog/item/bc30cefe78e1bf305d6008ef.html</p>
<img src ="http://www.blogjava.net/changedi/aggbug/318713.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/changedi/" target="_blank">changedi</a> 2010-04-19 10:35 <a href="http://www.blogjava.net/changedi/archive/2010/04/19/318713.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>