??xml version="1.0" encoding="utf-8" standalone="yes"?>
苦逼用来Ş容自己,是稍昑ց颇了Q?/span>2014虽然l历了两?/span>996的洗C|q初和年末)Q但是技术成长确实没有想象的多,工作四年来,两年旉用来?/span>web的后端开发,?/span>spring?/span>webx的源码,到慢慢深入到一些数据库中间件的使用ibatis?/span>tddlQ淘宝内部)、消息中间gmetaqQ淘宝内部)、服务框?/span>HSF和其他的整个后端相关的内容,大概理解了一遍所?/span>backend后,团队~前端的状况逼的自己开始做frontendQ?/span>jquery?/span>kissyQ?/span>brixQ,使用bootstrapQ开发自qZraphaeljs?/span>vnix数据l图框架{等Q对前端的正怸务开发也基本熟练。回?/span>2013q的ȝQ发现自己去q就开始有些负面情l了Q虽然接触了storm开发,正常旉?/span>hive?/span>odps?/span>sqlQ开发数据报表,但是q些工作对于技术的直接提升q不明显。在无线反作弊领域做两年了,整个反作弊的设计架构也从最开始的l计分析发展到机器学习后来又逐渐变ؓ混合模式Q也经历了三代的演变。乐观的审视自己q?/span>4q的蜕变Q技术上的提升最大还是在2-3q的时候,现在的很多认知提升,都慢慢的转到了架构设计和团队理Q慢慢的自己开始不断挑ZQ我一直不理解我这U变化的原因I竟是什么,开始不满团队的理模式Q经常设惛_果自己来qԌ哪些地方该优化该改进Q开始不满品的技术架构;开始不满团队成员的“不够优秀”?/span>
回家q了个年Q胡吃v喝后Q自己开始熟悉原来n边的环境Q也开始能看到自己内心M。你要做成功一个事情,q是之前在阿里巴巴的一个承诺。其实这是很隄Q不仅是阉KQ你在哪家大公司都很难。那么发泄不满是最低效最没有品位的做法,你只能让w边的h知道你不满,但这重要吗?The thing is to acitvate them。一个卓的人,首先要能包容自己对n边的不满Q我们不乱发泄,我们沟通,我们。要做成一件成功的事,不是要和一个完的团队配合Q而是要能配合Z个完的团队。能容别人所不能容,能帮助别人成别人?/span>
2014整个一q我自己ȝ是懒惰的一q_q一q_我没怎么读过书,没怎么xq新技术,没怎么写过有趣的代码,反而还l常玩手游,跟h诉苦_传播负能量。h生苦短,在即?/span>30岁的时候,我却开始纠l一些芝ȝ豆的事情Q工资高低啦Q晋升啦Q?/span>These all shit。新的一q_自己要有q大的目标,我一定要做成一个事情,而ؓ了这个目标,要持l学习、读书。记得小时候,每到寒暑假,都会把整个假期及未来学期的计划写清楚Q虽焉时很q稚Q计划L什么几点睡觉,几点起床Q读哪几本书之类Q但是这U习惯,在我们长大后却逐渐褪去了,我们成了没有目标的日子的子。想?/span>Fenng之前的一文章,讲大公司的子,q真别说Q大公司最多的是混子?/span>
不要拘惔于要成ؓ什么样的hQ只要知道你要做成什么事够了,因ؓ只要你努力ؓq个目标奋斗Q你׃成ؓ一个能做成q个目标的h?/span>That's enough?/span>
Z么会q样Q我惌个和我最q痴qh榄球NFL有关Q怎么q个句式特别像广告呢Q。年初的全场录像把榄球运动拉入了我的视野Q随着2014-2015NFL新赛季的开始,我也开始关注NFLQ美式橄榄球是项非常的q动Qؓ什么这么说Q运动本w有几个特点非常吸引人:1Q高强度w体Ҏ——无疑这是一男人的q动Q比赛中最常见的就是n体接触?Q规则和体系非常合理Q橄榄球的进攻防守规则是非常合理的,q攻l司职攻城略圎ͼ而防守组负责守卫家园Q这个对于原始的战争游戏模拟的非常到位?Q策略和战术要求极高Q橄榄球q攻和防守战术非常多样化Q进ȝ可以采用地面冲球和传球,传球的话又可以分q距R中距离和近距离传球Q传球的对象Q也可以是外接或者跑卫,外接的跑动\U쀦…说不完啊?Q数据拟合准,当然q是让我最痴迷NFL的原因,式榄球把数据q用C极致Q对于球员的指标衡量非常的准Ş象?/p>
比v招_那样的攻M防MQ它昑־安全了很多;比v|球、乒乓球q样的球c运动,q当的刺激荷尔蒙;比v球和篮球这L行q动Q橄榄球的规则和完整的体pM及无可出其右的策略性,是最吸引人的。当然球的力在于团队配合可以打得非常_ֽQ同时个雄的出现也可以拯救世界,但是球里衡量运动员l合素质的指标体pd在是不够好。我个h认ؓ像橄榄球和棒球(NFL和MLBQ是最好的数据决策q动体系Q好W的是这都是国Zؓ之疯狂的q动Q而在世界上其他国家却知之甚少?/p>
l合榄球运动和数据体系构徏Q确实给了数据从业h员很大灵感,玩NFL Fantasy的玩安知道每周的Pick’Em可以来预比赛,要知道一?5场比赛完全猜对的人非帔R常多Qؓ什么?因ؓ数据ȝ形象且透明Q也是_我们做预,不在于算法有多牛|而在于指标是否够好Q模型是否够清晰的能刻M务本w。这是我一直在做数据挖掘强调的Q但是仍然有太多太多的hU结在算法中不能自拔……NFL有一套自qrating法来评估球员的素质Q当然这在FM游戏里也有,但是我个为NFL的计更合理Q因为橄榄球q动目标性非常强Q没有像球那样q多的回传和l织Q橄榄球单箭头的向前是最好的U束条gQ这为数据可操作性提供了基本保障Q我个h是这么认为的。另外NFL联盟的运作也cM一个数据体p,联盟U定工资帽,不会出现q分的强弱队之分Q一个队伍都是明星大牌,工资帽不允许啊,所以NFL?2支球队,大体水^相当Q当然有弱队和强队,q里说的大体相当是指在一场NFL比赛预测中,没有那么明显的胜负趋势,优势微弱=属性连l、分布完)。另外不同的战术相生相克Q在Z随时可以通过暂停来及时调_q是步快跑实时q算的等h喻,球比赛一开场就臛_t?5分钟Q这是典型的批处理,教练有个意图都是大声喊,也不见得球员遵@Q但是橄榄球完全不同,每次d基本都是战术的完整体现。说h_因ؓ球球是连l比赛,而棒球和榄球则是分档进攻,q其中的区别体现在数据的可分析性以及一ơ操作的影响性分析上Q其实是很明昄。球的q箋比赛Q导致我们在分析一ơ进ȝ成功因素Ӟ需要考虑的变量非常的多,因ؓ旉H口太大—?5分钟Q而橄榄球是阶D|的Q一ơ成功的推进Q一定是l历一个开?传球或跑球这L程Q这明显是规格化的物,谁告诉你球q球一定要是本方守门员大脚开球到前锋门呢?所以对于橄榄球q种阶段性运动,一ơ分析可以根据本w的q攻和防守阶D被拆成很多的细片,在细片上完成分析Q这也符合分析的规律——样本干净且完整。这有点像分布式计算Q橄榄球天生分布式,而球只能一把搞到内存里做完全分析…?/p>
胡ؕ扯了一通NFL的东西,式榄球运动是Ҏ度体现智慧的q动Q结合数据去玩FantasyQ更觉得其乐无穷?/p>
回头有空Q再详细举例NFL的数据故事。没准也q聊聊手游和数据的事?/p>
2013已经成了历史的一个数字,在各U数据ȝ、趋势图表、红包鞭炮、酒席宴请I漫的后春节状态下Q终于回到公司,坐在清冷的办公室Q冲一杯咖啡,键盘和聊天声中,开始静静的回忆q去的一q?/p>
3q一个坎儿,也许不假Q?013是我最频繁惌vx、{行、辞职的一q_Z么?我把它归|于3q这个坎ѝ工?q整了,在一家公司,一个部门,做着很多cM的事情,有这些想?#8230;…正常。先插一D|事,从年前到家到q后的各c聚会,ȝh比上班还累,天天吃肉喝酒Q处处谈论着本不感兴却不得不谈的现实,开始总跟人抱怨在外地工作辛苦Q天天加班拼命,上班路堵不方便,生活成本高,周六日没休息{等。后来所见所惻I看着各有各的辛苦Q各有各的烦|明白抱怨解决不了问题,抱怨只会让大家知道你在外面L很苦而已……徒劳的。回到正题,ȝ2013Q先谈积极的Q生zMQ孩子健h长,父母健康q_Q房子按期装修,一切都正常q{按部qQ只是花钱如水Q年底?的开始,不过q是很欣慎ͼ一切蛮利的。ȝL谈工作更多,那我也就更多的说说工作?/p>
工作好像不那么顺利了Q进入了一个很奇怪的循环Q也许别Z觉得Q但是我自己把现在的状态称作一U尴的境地。这一q_在互联网技术这个圈子里Q我试?U岗位,2013之前Q我是一个专职的Java开发工E师Q我x的是服务端应用的架构设计、代码质量、ƈ发和可扩展,但是?013q底Q我感觉自己成了一个时下流行的ASE——全栈工程师(All Stack EngineerQ,q种转变是因为团队缺?#8220;资源”而被逼出来的Q年初品改版,全站大换血Q没前端资源Q没办法Q在借了个前端做?周demo和组件的前提下,我带着一个开发兄?#8220;成ؓ”了前端,写jsQ写cssQ后来css变成了lessQjs也需要自己做前端lgQ?个月后,我们真的成ؓ了前端,q时候的我,开始关注数据可视化lgQ了解d3和raphaelQ,前端模块化(seajsQ,前端开发模?前端OOP)和架构等Q看两遍犀牛书已经满不了我的需求,更多的js书籍q入了我的reading list。项目在快速的q代后进入稳定,新的需求也可以快速的被完成(因ؓ我们俩已l算是前端熟手了Q,而后开发h员补充一倍,机器扩容Q一切看上去都开始正常。这时一个新的数据项目v步,再次面“资源”紧张Q不q这ơ缺的不是software engineerQ而是data algorithm engineer。于是我也重复了q次紧张Q进入到数据开发的角色中。数据开发其实是个有意思的角色Q关注点主要是写sqlQ但是在大数据背景下Qhadoop要非常熟悉,要理解整个生态,数据开发不是单U的ETLQ写写hive或者pig的qlQ而是在结合业务的前提下设计出的数据架构,数据架构看上d虚,但是其作用不亚于软g开发中的架构设计。从某种角度Ԍ在大数据背景下,好的数据架构起到的作用更大,直观上讲能节省大量的成本。本来数据这块角色可以分很细的,但是同样׃“资源”的问题,我承担了全部的工作,当然学习h阶段得到了不同事的帮助Q同时也得感谢公司的大数据^台的单易用让大数据这U比较有技术含量的东西可以L的被工程师用。ȝ来说Q?013后半q进入到数据领域Q开始各U数据开发尝试。这一切看上去q挺不错的,但其实麻烦在于业务,业务发展q于变动和快速,D工程师做东西都是填补型甚x一ơ性品,比如前后端开发成了copy&pasteQ数据开发Zcopy&paste型的ETLQ结构层ơ不清晰Q毫无架构可a。在短时间内开发高质量产品本来是个悖论Q又l历长期的加班和强制性的公司政策Q这是在束缚创造力和打压创新精?#8230;…
于是Q作Z个ASEQ我们可能热衷于一切可能改变世界的技术,但是产品落地一定依托于某些业务Q而业务往往是关键点Q所以,真正的@环悖论是我们在不断的重复p|的业务,而技术的轮子由成功的业务驱动Q于是周而复始,D别h的成功,而无能ؓ力改变自己,q应该算是某cdE师的悲哀吧,我们可以L的实现各U算法,可以写大量的Java来实现控制业务逻辑Q迅速的l织面html+css+js来可视化Q可以熟l的写成MR或者hive sql在大数据q_下查找数据,甚至可以L的把q一切全部一肩扛P但是~~~我们改变不了产品p|的命q?#8230;…
In my opinionQ我们不应该仅仅是ؓ了公司的股票和工资在做事Q不能只是因Zơ涨薪、一ơ红包、一ơ配股而努力,既然选择了,那么q是一份事?#8212;—a career not only a job?q前我放弃导师的博士学位邀U,q入大公司成Z一名普通工E师Q?q后Q是否要攑ּ大公司的庸碌而重拾自我?忙碌q后、重新思考,如果q仅仅是工作Q那么趁着q不老,q寻自己的梦惛_?/p>
写q么多吧Qȝq东西写hL个关注点Q洋z洒z的Q哦对了Q最q流行的文体是北上广q竟给了你什么?好吧Q我不在以上四地Q但是就杭州来说Q我q?q_没想清楚杭州I竟l了我什么。但是我心中有个{案Q你不在q些地方存在q,你永q不知道{案?/p>
没有JSQ只有单U的div+css~Ҏ上手Q但是也有很多限制。不在技术上Q更多的是一些适合手机屏幕的适配~
Udq_有多U,iOS, Android, WP7, Sybian …
Ud览器就更多Q我的Android手机中装?0ƾ浏览器Q分别是Q原生google的,qqQUCQv豚,firefoxQoperaQ天天,goQskyfire和x览器GL?/p>
那么我们需要的适配多少呢?{案?q_数去乘以q_版本号再乘以览器种cd乘以览器版本号~~无穷无尽?/p>
一些徏议:仅限中低端适配
1. 量采用div+cssl构Q因为有些浏览器在有些^C的显C是不支持table的?/p>
2. css不要用floatQ不要用q多的伪cdabsolute之类的position相关的东ѝ?/p>
3. form表单不要使用type为file的input?/p>
4. 每行设计的时候最好数数pixel的个敎ͼ很容易计的Q?/p>
5. 被迫使用表格的话Q那么请C不要用rowspan或是colspanQ部分android和sybianpȝ不支持?/p>
6. 看一些已有的大型站点的手机wap站前端,d习他们的标签设计Q毕竟小团队或者个人开发资源有限,无法l计和适配多种手机?/p>
7. 别搞wap啦,做好webapp和nativeQ改行html5 + css3吧~~
另外对于触摸屏的出现Q在head中的meta多了很多的设定,比如viewport{?/p>
下面贴一些html和css的小tipQ希望有用?/p>
1. 览器是忽视所有文档中的tabQ回车和I格的?
2. ..?lt;a>的\径中代表上目录
3. 所有的路径分隔W都?
4. Block型元素前后都有换行,inline型元素则没有Qblock型有<h1-h6>Q?lt;p>, <blockquote>Qinline型有<a>,<em>,<img>,<q>{?
5. Css的最q原则就是如果有多条css属性匹配,那么按顺序执行渲染,所有的conflict都被最后的规则解决?
6. Css的字体大font-size指的是字体的高度Q就是从最下端到最上端的距R如果单位不是px而是%Q那么指的是相比其他字体的大倍数。如果父标签?0pxQ那么子标签应用?或者em的就是父标签的倍数关系?
7. Line-height其实是行间距
8. Html中每个元素可以被理解Z个boxQ而padding是指元素内容与box的边界之间的内间距?
9. 一个图理解q些间距问题Q?
10. Id属性是用来定义严格的单一元素的。你可以有很多个元素有相同的class属性,但是id只能有一个?
11. Width属性只声明内容区域的宽度。Width的默认是auto?
12. 默认的padding?px
13. 用空格分开的css表示的是父子关系Q比如div h2{}pCdiv下的h2如何如何。这U父子关pL相对的,不是直接关系Q只要h2嵌套在div中就可以。直接的父子关系需要div > h2{}来指定?
14. Padding和margin的省略写法:padding: a b c d是按照上右下左的时针顺序设定的?
15. Css优先U用三位数排列法:000Q是否有idQ有则在W一位加1Q是否有class或者伪c,有则在第二个数加cL伪类的个敎ͼ是否有元素名Q有则在W三位加元素数?
16. 在flow中需要注意的一ҎQ水q的两个元素的margin是二者之和,而垂直的情况则是二者中大的margin作ؓ间隔。换句话_inline元素之间的margin是二者之和,而block元素之间的margin是二者中的较大者?
17. Float会将元素剥离出页面的flowQ页面其他block元素会在它之下,但是inline元素会自动和float元素的边界分R?
18. 表格单元g间的距离叫做border-spacing?
首先说说工作的流E,对于新手上\Q莫名的技术蘪炸我觉得不可怕,掌握公司整个产品开发流E,知道d里找资源Q这个更重要一些。刚到这里,会感觉有很多东西要学Q于是也制定了一些计划,开始学习这Q学习那。但是实际工作过E中Q发现根本没有时_或者没有那么系l和完整的时间供你系l学习。时间都被打散成了碎片,要懂得利用碎片时间。这是另一个话题,但我的感觉就是一定要首先ҎE掌握清楚,知道一件事分几步,每一步在q什么。也是_在你知道具体怎么做之前,一定要知道是做什么,怎么个流E?/p>
清楚程后,那么开始实际上手吧Q没旉ȝ你全学会了,掌握了,“考试通过?#8221;才能d发~~q没有止境,而且不靠谱。合理的安排是在过E中学习Q利用时间片D去学习。我们现在Q在技术的h上,各种新鲜的东西层ZIP若是想一一学尽Q那么毫无意义,更是毫无可能。那么怎么学?一个工作流E中会遇到很多技术,q些技术都隶属于自己技术领域或者技术层面的一个特定点。那么好吧,在看着前h的结果去依葫芦画瓢的时候,ȝ解和思考这些技术细节所属的技术层面。然后去阅读Q去查找Q去弄明白这一个技术层面的概况。不需要去抠细节,q个阶段q不够。只是了解,知其Ӟ_了,因ؓ|马不是一天徏成的?/p>
清楚程Q又清楚了各个技术层面的M概况后,那就可以有多U选择了,Ҏ自己的业务需求去x一两个技术点Q或者是像之前一P再遍历一遍流E中的各个技术层面,然后深挖每一个~~很多大牛都介l自q学习l历的时候提到过“先深后广”的\子。这个是非常好的一个方法,在一两个点上逐渐深入Q慢慢成Z家的时候,再蟩出来涉别的领域Q那发现其实道是互通的~~
最后ȝ一下,也算是对现有程的一个回:首先是品经理设计一个品出来,功能和外观原型展C和描述出来Q我UC为模型。在q个模型出来后,要做一番评审,程中各个可能参加的人来提出和意见,其是要和开发h员交,讨论技术可行性。其ơ就是交个前端设计师L据外观原型设计具体的外观样式和demoQ品原型像一个框Ӟ先把地框住,外观demo像图U,得弄清楚要做成什么样子。当然外观demo的设计也要评审,主要是品和前端人员q行沟通,看是否符合原型设计。接下来是开发h员开发,在已有的框架和图U怸Q一步步ȝ加瓦Q将其实现。然后测试h员进入进行检查,像是验收一P我们现在都叫QAQ这点确实非常符合。在保证了质量后Q最后交付。整个流E每一轮都要评审,有h觉得评审是浪Ҏ_但是Q如果没有评审机Ӟ你就会发现生z越来越乱~~
一个品的生q程Q就像盖一所房子Q这也是软g工程和徏{工E各个环节都非常怼的一炏V不同的地方在于Y件品在开发过E中的技术细节繁杂多变,各式各样。虽然我不懂建筑Q但是想必徏{应该不如Y件的复杂吧~
那么对于开发的技术来说。还是前面提到的思\Q先深后q,但是q个深和q的意义和界限没那么严格。不能一味的深钻一个而完全不其他,也不能全方位覆盖而一个都不深入。具体的度就p己把握了?/p>
q段旉比较忙,隑־一个周末的下午有空能写写文字ȝ?/p>
下面是自己前阶D做的工作的一个回了~
1Q刚来的ChQ不断学习(q是必须一直持l的事情Q无所谓新旧老少Q?/p>
2Q理解流E,认识同事Q交培训~~
3Q项目前端页面在各个览器上体验不一PL原因q解决之
4Q加入小目Q开始实战(项目主要是改善用户体验Q修改现有代码)
5Q小目2期,l箋优化
6Q研I型目Q后l可能应用,属于探烦创新
7Q前端页面设计及~码
8Q友情项目帮助,主要是后台开?/p>
其中??是同一个项目,但是明显在做4的时候,只是知其Ӟ完成功能OKQ到5的时候,新的dQ同L代码Q但是才意识到自己在之前目中的各种不熟悉和不深入,重新深入理解Q加׃不少认识Q学C很多东西。研I型的东西自己比较擅长,在时间比较充裕的情况下,很顺利的搞出demo。前端设计是自己很感兴趣的东西,也在很短旉完成了Q务,同时也体验了一把项目前端工E师的感觉。友情项目说实话q着很轻松,感觉也能学习新的东西?/p>
什么样的代码是优秀的代码?q个概念目前q没有h能确切的定义。然而广大的E序设计人员普遍都认可的一pd标准基本上从各个层面提出了对优秀代码的要求。最q在诅R编E匠艺》,觉得文章都写的很Q相比之前读《卓有成效的E序员》,该作从代码本w讲qC~程“那些?#8221;。深受启发,写写dȝ?/span>
http://gxgonline.bokee.com/679308.html q里有一D?#8220;优秀代码标准”Q具体限于篇q不再赘q。只是从自己q个~程菜鸟的角度,去谈谈对~写优秀代码的理解。正如每个h心中都有一个衡量标准一P我对优秀代码也有一个衡量的标准Q结果正的QŞ式优的Q性能高效的,易重用和健壮。当然结果的正确性和E序本n的性能取决于算法设计,q是另一回事Q不是本文所讨论的问题,本文只讨Z代码的Ş式和l构有关的问题?/span>
优秀的代码首先具有优的样式Q我惌Ҏ所有编Eh员所p的。没有h愿意L涩难懂的代码Q相反,如果攑֜你面前的代码l构清晰Q样式优,那么ȝ序的人想必也ȝ心旷怡了。要C一点,代码写出来ƈ不是永远l自q的,而且ql自qQ也不是一直都能看的懂的。那么如何写出Ş式优的代码呢?W一点应该注意的是代码样式Q什么是好的样式Q一_传统Q简z?/span>
一致的代码主要指程序中代码~进要一_括号的位|要一?#8230;…其实不用l数Q所有的一切关于代码的东西Q都要一致。正像那些大师们说的Q?#8220;挑选一U适合你的风格Q然后坚持下?#8221;Q这是一致。那么好了,有哪些好的风格呢Q经典的括号位置?/span>K&R风格和悬挂式风格Q具体是什么样的,见下表:
?/span>1. 括号风格
K&R风格 |
![]() ![]() ![]() ![]() ![]()
|
悬挂式风?/span> |
![]() ![]() ![]() ![]() ![]()
|
另外一个要一致的东西是命名了,像文章由断落、章句和字词l成一P代码也由变量、函数、类型等{构成。合理一致的命名对于代码的样式同样重要?#8220;恰当地命名的关键是准理解你所命名的对象。只有这样你才能l它起一个有意义的名U。如果你不能为某个对象v一个号名字Q那么你׃会真的知道这个对象是什么或者这个对象真的有必要存在吗?”
接下来说说名字,名字首先得是描述性的Q单U的字母命名是我们编E最常用的,Z么如此,我把它归lؓ我们初学~程旉一点点的懒惎ͼ随便的定?/span>int a, int bq样的变量,完成着短小的程序。但是当E序渐渐的大hQ文件渐渐的多v来,q样的变量名字显得那么的渺小和苍白而最l毫无意义。所以如果无法描qC个对象,׃要ؓ它v名字。第二,技术上是正的Q关于这点,׃现在的编E工作大多是?/span>IDE下进行,因此q部分的查工作我们程序员都交l了IDEQ当然如果命名满了W一条——具有描q性——那么也基本不会q反技术规范了。第三,恰当的,恰当的命名体现在长度和格调上Q也怽Z个变量v了一个具有描q性的名字q且也是技术上正确的(且符合语a习惯Q,但是它却长达30个字W?/span>(theNumberOfImagesInMyComputer)或者只?/span>1个字W?/span>(a,b{等)Q这L做法是不好的。对于命名格调的理解Q我惌是一个文化背景的问题Q有的h很喜Ƣ用foo?/span>barq样的诡异名字,q样做其实违反了“传统”原则Q这个稍后会提到。关键需要记住的“了解你的语言的命名规则。但更重要的是看Q了解这U语a的习惯用法。公共命名约定是什么?应用q些语言习惯和约定?#8221;
~码要符合标准,q样׃与别人的一_同样也会与自pd的代码一致。这U纵向横向的一致往往从一个编E标准开始。当然编E标准的制定也应该是量W合传统Q这p到第二个问题了?/span>
不要L鲜的创造样式,而应该去遵@传统。这样可以确保别懂你的代码,同时不会让未来的自己和其他h犯晕。我理解的传l更像是一U大众化Q就像上面讲到命名时说的Q不要用诡异的名字,foo?/span>bar不是什么好的选择?/span>
z讲的更多是一U补充。假设你自己订立一个标准的话,你遵循了传统Q也一直坚持用它Q但是由于你的天才你把编E标准弄的过于复杂,q样可是苦了其他的程序员了。所以,能简z是量z,不要q求华而不实的代码样式。记得自׃前写代码Qd一些类g“a[index++] = some();”q样的代码。现在想惻Iq是Ҏ“a[index] = some(); index++;”q样更简z。简z不意味着代码行数,而是让h看着舒服?/span>
我认为,E序员写代码像作家写文章一P清新的结构,行云水的成文往往能o读者n临其境。而我们作者读代码的过E中Q也无不希望代码优美Q就像是在看优美的散文一栗其实说了这么多Q无论是~进或者括号位|更甚者是命名Q这都是在增强我们代码的可读性。当你读代码像读文章一P那时你就是一个专业程序员了,当你写代码能像写文章Ӟ那时你就是一个优UE序员了?/span>
当然代码的可L离不开注释Q注释本w不是代码,但是是优秀代码所必不可少的东ѝ?#8220;注释的目标读者是人,而不是计机?#8221;注释是一U内部的文档化机制。什么时候写注释呢?q个问题其实很好回答Q当你需要解释代码ؓ什么时Q去写注释。那么如何写呢?C几条法则Q确保遵循这些法则,那么你也能写出美妙的注释。第一Q不要描qC码,“一个事实——一个源_不要在注释中重复代码?#8221;因ؓ本n你是在解释ؓ什么而写代码Q这是一U目的解释,而不是过E描q。所以如果你有解释代码的注释习惯Q那么,摒弃它吧Q当然个别难以理解的法除外Q。第二,不要取代代码Q?#8220;当你发现自己在编写密密麻ȝ注释来解释你的代码时Q赶快停下来?#8221;注释的字C会太多,大量的注释看着也让人头痛。第三,保注释有用Q?#8220;想一想你在注释中写些什么,不要不动脑筋p入。写完之后要在代码的上下文中回顾一遍这些注释。它们是否包含了正确的信息?”保注释是有价值的Q是真的Q是Ҏ理解和清晰明了的Q不要用一些含混不清的俚语或个人幽默。最后,避免分心。注释中不应该包含那些陈q旧事,也不应该用各U?/span>ASCII囑Ş来美化,因ؓ字体宽度变化的多U编辑器可能让你q种化丑陋不堪。同时我也不是很支持在代码块的结“//end if(a<1)”q样的注释来解释。清晰的~进和括号已l可以解释一切了?/span>
说到底,清晰代码l构Q良好的~码风格和注释,都是在提高我们代码的可读性。而我们写q样代码的目标就是代码的自文档化。我们M在写完代码的时候,p大量的时间去写文档,q其实从架构层面来讲Q增大了耦合Q谁的耦合Q代码和文档的。代码一l改变,文档相应也要改变。这L复杂兌L耗费了编Eh员大量的_֊Q那么ؓ什么不d代码本n的Ş式上׃功夫呢?如果我们都能~写可以阅读的代码,人性化Q简单易懂,那么文档q需要吗Q就像我们看书籍作品Q很见哪本说q配着一部说明文档的?/span>
最后,再说一说代码的易用性和健壮性。除了美观可读这些外部特性外Q编写代码还应该h易用性和健壮性。?/span>Code Craft》里提倡用防御性编E,q给Z防M性编E的一些技巧。当然我q不是防御性编E的fansQ也不是契约式编E的d。只是从健壮性的角度看,防M性编E是必须的。然而过多的防M降低了代码的效率Q有时候甚x观Q这L代码也许佉K题复杂了。不怎么_代码的易用和健壮是经验积累的体现Q怎样写出q样的代码?好吧Q没有捷径,大量的编写代码ƈ阅读其他人写的优U的代码。渐渐的Q你会发玎ͼ你的代码也可以同L优秀?/span>
本文主要从代码的形式上讲qC~写优秀代码应该注意的一些细节。当Ӟ代码的核心——算法没有涉及。最后的一些关于代码健壮性的认识也是拙劣有余。作Z个编写代码爱好者,写出优秀的代码是我们q求的目标。培养良好的~程习惯Q掌握更多的~程技巧,不断的编写和阅读……一点心得,一Ҏȝ?/span>
[1]http://gxgonline.bokee.com/679308.html
[2]~程匠艺, Pete. Goodliffe著,韩江、陈玉译
[3]如何~写优秀代码Q?/span>http://hi.baidu.com/08027/blog/item/bc30cefe78e1bf305d6008ef.html