Java程序员修炼之道

2024-05-08

Java程序员修炼之道(通用7篇)

篇1:Java程序员修炼之道

从2002开始接触Java学会HelloWorld这么经典的程序到如今不知不觉已经十年啦,十年中

亲耳听到过不少大牛的演讲,见到过项目中的神人在键盘上运指如飞的编程速度,当时就

被震撼了。当编程越来越成体力活,我们还能有自己的思想,还能修炼为Java系统级别的

程序员嘛?学习与修炼以下知识与技能,帮你早日达成愿望。

一:Java语言学习

对线程(thread),串行化,反射,网络编程,JNI技术,容器(Map,List, Iterator), 类加载器

(ClassLoader),输入输出流,垃圾回收机制,有比较深入的了解,最起码做过项目应用。有

过Java项目的性能优化经验,最起码掌握一种性能监视工具的使用,熟悉JVM参数,最起

码知道可以在JVM启动时指定不同垃圾回收机制,以及不同垃圾回收机制之间的

差别,熟悉JVM参数优化。

二:J2EE方面

最好知道JDBC规范是怎么回事情,面对Oracle数据库如果告诉你JDBC驱动不能用了,你

还知道有OCI驱动可以。掌握常见的SQL语句,熟悉JMS,JNDI等组件,掌握一套web开

发模式,从前台到后台,有能力整合好这样的框架。理解并掌握MVC思想,像SSH已经实

现了MVC的分层,几乎不需要你自己再实现,假设你开发一个简单的Swing程序,你能MVC

就说明你真的掌握了MVC的精髓。有能力在J2EE前端开发中构建自己的MVC模式,知道

什么是WEB2.0,知道什么是SOA,SaaS,SaaP等含义

三:理解并能合理运用设计模式,UML建模

知道并理解设计模式中蕴含的几种基本原则如:里氏替换原则,开闭原则,合成复用原则,依赖倒置原则有很好的理解,并能举例说明。对常用的设计模式如工厂模式,单例模式,观

察者模式,责任链模式,桥接模式等知道灵活运用,明白什么是回调(Callback)。最后用一位

高人话来总结设计模式,它是为了让软件更容易被别人读懂,更容易维护而产生,设计模

式本质是程序员之间的交流,如果A用工厂模式设计一个模块B来接替,A只要说该模块是

工厂模式实现,B维护起来应该容易得多,所以设计模式是关于交流,不关于代码。切忌滥

用设计模式。学会使用UML建模工具至少熟悉一种URL建模工具。

四:注重用户体验,掌握KISS原则,知道欧卡姆剃刀原则

顾客就是上帝这个口号我们已经喊了N年了,程序员的劳动成果最终也需要转换为服务提

供给客户,用户体验至关重要,常常看到的场景是功能实现了,软件很难使用,程序员有个

很充足的理由我不是美工,其实注重用户体验跟美工八杆子也打不到一起,FoxMail的成功

在很大程度是用户体验的成功,友好,清晰的用户提示,强的容错与纠错设计是获得好的

用户体验的不二法门。傻瓜相机顾名思义傻子都会使用,这个就著名的KISS原则(Keep it

simple and stupid)意思是UI设计要简单明了,傻子一看就知道怎么用,想想我们做出来的

东西,对照说明书都不知道怎么用。另外一个就是最著名的例子IPhone手机外观设计,是 典型的欧卡姆剃刀设计原则来完成人机交互。

五:自动测试与软件配置管理(SCM)实现

知道什么是软件配置管理,知道Hudson微机原理闹危机,汇编语言不会变,实变函数学

十遍。计算机基础知识被大家普遍忽视。从今天开始好好学习吧……

十一:Java代码反编译与代码保护

Java编译产生字节码,因而可以被轻松的逆向工程(反编译),微软的C#生产的DLL也一样可

以被轻松反编译。正式由于这个原因产生了许多Java开源的代码保护工具,而Proguard是

其中佼佼者,已经被google集成在android之中用于Java代码保护,访问这里了解更多:

http://proguard.sourceforge.net/

十二:努力成为某个行业或者领域骨干

面对漫长的职业生涯,要想不被淘汰,必须具备一招鲜吃遍天下的能力,选择自己感兴趣的

方向,努力而深入的研究,计算机技术发展到今天已经细分很细,努力研究一种Java开源

框架或者开源HTTP服务器源码或者研究过网络爬虫源码或者WEBKIT内核,不愁没有人要

你。如果你是非常了解金融,企业ERP,证券,保险,移动应用行业的应用开发业务的人,一样不用愁工作。这些知识不随语言而改变,努力做一个有核心竞争力的Java程序员。

十三:提高语言与书面表达能力,掌握基础的项目管理知识

文档与语言表达能力是最好的向外界展现自己能力的方式,很多程序员编程能力很高,表达

能力一般,Linux能够成功,除了归功于网络社区的力量之外,也得益于Linux作者本人给各

大基金会写信,宣传推广,试想如果没有良好的书面语言表达能力,即使Linux系统再优秀,却无法被准确表达,失去各大基金会的支持,Linux还会像今天这么好的局面嘛。所以重视

文档,重视提升沟通与表达能力,才有可能成为Java系统程序员。掌握基本的2/8原则,学

会将模块细化分配给不同的人,预见并控制项目风险,把握项目进度,优化流程,合理的时

间管理,了解TDD,熟悉敏捷开发模式,常规软件开发模式。

十四:掌握英语,良好的读写能力

英语是计算机的母语,掌握好英语对于阅读英文资料学习新技术大有帮助,我的建议是尽量

读英文原版书,如果是算法方面的可能会困难一点,但是其它像设计模式,软件工程,OO

编程思想等尽量读原版,提高自己的英文水平,多多访问开发者,code project,程序员天堂,Pc-magazine等英文IT网站。英语绝对是你必须修炼与提高的技能。此外英语好在外资企业

尤其重要,只有外语足够好才可能在外资企业中突破职业瓶颈,向上发展。

篇2:Java程序员修炼之道

——动力节点java 一:Java语言学习

对线程(thread),串行化,反射,网络编程,JNI技术,容器(Map,List, Iterator), 类加载器(ClassLoader),输入输出流,垃圾回收机制,有比较深入的了解,最起码做过项目应用。有过Java项目的性能优化经验,最起码掌握一种性能监视工具的使用,熟悉JVM参数,最起码知道可以在JVM启动时指定不同垃圾回收机制,以及不同垃圾回收机制之间的差别,熟悉JVM参数优化。二:J2EE方面

最好知道JDBC规范是怎么回事情,面对Oracle数据库如果告诉你JDBC驱动不能用了,你还知道有OCI驱动可以。掌握常见的SQL语句,熟悉JMS,JNDI等组件,掌握一套web开发模式,从前台到后台,有能力整合好这样的框架。理解并掌握MVC思想,像SSH已经实现了MVC的分层,几乎不需要你自己再实现,假设你开发一个简单的Swing程序,你能MVC就说明你真的掌握了MVC的精髓。有能力在J2EE前端开发中构建自己的MVC模式,知道什么是WEB2.0,知道什么是SOA,SaaS,SaaP等含义 三:理解并能合理运用设计模式,UML建模

知道并理解设计模式中蕴含的几种基本原则如:里氏替换原则,开闭原则,合成复用原则,依赖倒置原则有很好的理解,并能举例说明。对常用的设计模式如工厂模式,单例模式,观察者模式,责任链模式,桥接模式等知道灵活运用,明白什么是回调(Callback)。最后用一位高人话来总结设计模式,它是为了让软件更容易被别人读懂,更容易维护而产生,设计模式本质是程序员之间的交流,如果A用工厂模式设计一个模块B来接替,A只要说该模块是工厂模式实现,B维护起来应该容易得多,所以设计模式是关于交流,不关于代码。切忌滥用设计模式。学会使用UML建模工具至少熟悉一种URL建模工具。四:注重用户体验,掌握KISS原则,知道欧卡姆剃刀原则

顾客就是上帝这个口号我们已经喊了N年了,程序员的劳动成果最终也需要转换为服务提供给客户,用户体验至关重要,常常看到的场景是功能实现了,软件很难使用,程序员有个很充足的理由我不是美工,其实注重用户体验跟美工八杆子也打不到一起,FoxMail的成功在很大程度是用户体验的成功,友好,清晰的用户提示,强的容错与纠错设计是获得好的用户体验的不二法门。傻瓜相机顾名思义傻子都会使用,这个就著名的KISS原则(Keep itsimple and stupid)意思是UI设计要简单明了,傻子一看就知道怎么用,想想我们做出来的东西,对照说明书都不知道怎么用。另外一个就是最著名的例子IPhone手机外观设计,是典型的欧卡姆剃刀设计原则来完成人机交互。五:自动测试与软件配置管理(SCM)实现

知道什么是软件配置管理,知道Hudson运用该工具SCM,知道怎么获取测试代码覆盖率,Java有效代码行数(NCSS),完成firebug,JDepend等工具集成ant/maven。熟悉并注重在开发过程中使用JUnit单元测试,理解白盒测试规范。六:熟悉常见的网络通信协议

对HTTP协议,知道POST, GET的区别是什么,阅读过HTTP相关的RFC文档。学会使用sniffer工具查看数据包,帮助查找与调试程序,知道TCP与UDP的区别,知道并理解E-Mail发送与接受的协议如SMTP,POP3,IMAP等协议,了解MIME与Base64编码。知道组播是怎么回事情。

七:面向市场,永远对新技术保持渴望

计算机技术的发展日新月异,做为IT行业的软件开发人员要不断的给自己充电,更新自己的技术与时代保持同步,同时还要面向市场,华为总裁任正非说过-“华为的技术革新必须面向市场”,作为程序员同样要有市场意识,很多人都后悔没有在android刚出来的时候加以关注学习。那些很早关注android开发技术的很多程序员因此获得丰厚回报。如今HTML5得到越来越多的浏览器厂家支持,你是否已经跟上脚步,开始学习。八:保持谦虚,三人行必有我师

乔帮主说他要保持初心,努力学习,我等更应该保持谦虚,IT技术发展日新月异,在你眼中不可能实现的技术,也许别人早已经有思路。保持谦虚就有机会吸取别人身上的长处,古人有云:满招损,谦受益。一个得道的高人更是说出了”下下人,上上智”的禅语。永远不要拒绝帮助你周围的人解决难题,解决难题是进步最快途径。不要放弃任何一次可以提升自己技术与能力的机会。

九:养成总结的习惯,不断反思

上学的时候老师常让写小结,也没总结出来所以然,以至于工作以后再也不提这档子事情,建议每个项目做完以后对自己都有个小结,总结自己在项目里面学到了什么,反问自己能不能完成在不需要别人帮助的情况下自己完成这样的系统搭建,是否熟悉与掌握项目中所用到的技术,即使有些东西不是你负责完成的但是什么也不能阻挡一颗求知的心,总结要尽量详细记录你遇到那些难题是怎么一个一个的解决的,下次再遇到你是否可以很快解决或者避免这样的问题。有总结才有提高,孔子曰:学而不思则罔,如果我们只是coding到吐血,不思考,不总结提高,永远不可能有能有本质提高,秦相李斯有云:“泰山不让土壤,故能成其大,河海不择细流,故能就其深”,点滴积累不断总结方能量变导致质变。十:数学功底与算法知识 用任何编程语言开发应用,都离不开核心算法支持,很多国外的软件单单从UI上看,恐怕写几年程序的人都可以模仿,但是UI之下的那些真实深浅不一,相信不是你想模仿就可以模仿的,为什么我们越来越山寨,因为我们没有核心竞争力,对于程序员来说算法与数学显然是他最重要的核心竞争力之一。《算法导论》,《编程珠玑》等书绝对值得读十遍。微软亚洲研究院视觉计算组负责人在一次演讲中说到他们招人的标准是“三好学生– 数学好,编程好,态度好”。可是现实的普遍情况却是-微机原理闹危机,汇编语言不会变,实变函数学十遍。计算机基础知识被大家普遍忽视。从今天开始好好学习吧…… 十一:Java代码反编译与代码保护

Java编译产生字节码,因而可以被轻松的逆向工程(反编译),微软的C#生产的DLL也一样可以被轻松反编译。正式由于这个原因产生了许多Java开源的代码保护工具,而Proguar是其中佼佼者,已经被google集成在android之中用于Java代码保护 十二:努力成为某个行业或者领域骨干

面对漫长的职业生涯,要想不被淘汰,必须具备一招鲜吃遍天下的能力,选择自己感兴趣的方向,努力而深入的研究,计算机技术发展到今天已经细分很细,努力研究一种Java开源框架或者开源HTTP服务器源码或者研究过网络爬虫源码或者WEBKIT内核,不愁没有人要你。如果你是非常了解金融,企业ERP,证券,保险,移动应用行业的应用开发业务的人,一样不用愁工作。这些知识不随语言而改变,努力做一个有核心竞争力的Java程序员。十三:提高语言与书面表达能力,掌握基础的项目管理知识

篇3:高级营销人才的修炼之道

什么样性格的人适合做营销工作?营销人员需要具备怎样的素质?他们的晋升渠道有哪些?资深营销专家穆兆曦先生将与您共同探讨高级营销人才的修炼之道。

主持人:企业是以利润为目的和生命线的, 企业利润需要通过一定的营销手段来实现, 所以营销人才往往显得格外重要。不过, 因为企业的性质不同, 企业所处的行业和发展阶段不一样, 企业对营销的重视程度也有所差别。那么哪些是最典型的营销导向型行业?哪些企业的营销部门让你印象深刻?

穆兆曦:越是竞争激烈的行业, 营销导向越明显。比如食品、饮料、日化、手机、电器等行业。竞争的结果就是, 营销能力差的, 经营理念落后的, 就逐渐淡出了市场。就我的经验来讲, 消费品企业的营销水平往往在非消费品企业之上。像可口可乐、玛氏、诺基亚、李宁等知名品牌, 营销部门的水平都非常不错。

主持人:这些企业的人才晋升通路通常是什么?做一个顶尖的营销人员, 去什么样的公司什么样的职位才能锻炼得更好?

穆兆曦:在企业里面营销会分为两种部门:Marketing和Sales, 这两种部门的员工职业生涯和工作内容都是不同的。Sales是1对1, Marketing是1对多。如果是Sales, 需要从销售员——销售主管——销售经理——大区经理——销售总监, 一步一个脚印做上去;如果是Marketing, 则要从职员——主管——品牌经理——市场总监, 一路做上去。这两种不同的路径, 都可以做到非常优秀乃至卓越的水平。要想成为一名顶尖的营销人员, 有机会能到知名公司去系统地接受理论的指导, 然后再到中小型、成长型公司身体力行地实践, 是比较不错的选择。

主持人:高级营销人才通常需要具备什么样的知识结构、性格特质以及技能准备?

穆兆曦:高级营销人才, 对行业格局和发展趋势、消费者消费行为、品牌管理、渠道管理、团队管理甚至财务知识都要非常精通, 也就是说知识面要非常全面和完整, 另外自己在其中的一个或几个领域要有非常深的造诣。相对来讲, 热情一点、外向一点、善于沟通的, 更适合做营销工作。但性格并不是绝对, 勤于思考、勤于实践、乐于与人相处, 是做好营销工作的关键。技能要求就更多了, 总体来讲是四大类:决策技能、领导技能、管理技能和专业营销技能。

主持人:能不能就高级营销人才的典型一天做个简介, 比如工作内容、联系部门、工作状态、沟通方式等?

穆兆曦:高级营销人才, 通常一天工作超过10个小时。如果在办公室里, 则接收和处理邮件、阅读市场销售数据、参加跨部门工作会议、参加专项工作会议、给各地的销售经理打电话处理一些紧急事务等等。工作的联系部门, 市场部、销售部 (包括销售部下属的大区、省区等) 、研发部、财务部、物流部, 是最多的。工作状态, 紧张而忙碌, 经常头脑要从一个问题迅速切换到另外一个问题。沟通方式有:邮件、电话、会议、MSN等。

主持人:对有志于从事营销行业的大学毕业生, 您最想说什么?

穆兆曦:任何一个行业, 都是一个围城。营销也是如此。不要觉得别人成功了, 就认为这项工作好做;也不要认为别人失败了, 就觉得这项工作困难异常。总之, 决策之前要冷静思考, 不要凭一时心血来潮就感性地决策。是否适合做营销, 可以从几个方面来看自己:首先从兴趣上, 看自己是否对营销的理论, 以及企业的实践真正感兴趣。所谓真正感兴趣, 就是愿意苦读那些营销大部头, 愿意关注和研究那些市场上厂家的举动。其次从性格上, 看自己是否热情、乐观。做营销工作, 非常不容易。充满了巨大的精神压力和经常性的挫败感, 尤其是刚刚进入这个领域缺乏经验的时候, 几乎每天都要在失败中煎熬。要想做好它, 你必须要善于自己给自己鼓劲, 乐观地看待挫折和失败。最后一点, 也是在实际工作中最重要的, 就是看自己是否真的喜欢跟人打交道!喜欢独来独往的, 不喜欢与人协作的, 肯定是不适合做营销。

主持人:营销行业对专业的要求高不高?如果求职者学的是冷门专业, 但想从事这个行业, 应该做哪些准备?

穆兆曦:营销行业对专业的要求相对来讲不是很高。要做好营销工作, 确实要做很多准备!多读书, 建议多读国外的营销理论书。比如菲利普·科特勒的《营销管理》是一定要看的。另外, 在实际工作中最重要的是与各类形形色色的人沟通、协作的能力。营销工作, 归根结底, 就是人和人之间的沟通。因此, 特别建议打算从事营销工作的学生多直接或者间接地参与到真实的营销圈子里, 去体验, 观察和感悟。总之, 读万卷书, 行万里路, 识万般人。

主持人:面对同样的销售任务, 为什么别的销售经理能轻轻松松的完成, 而有的人任劳任怨, 却总是难以完成呢?还有的人每次在与经销商或零售客户沟通的时候, 总是被对方牵着鼻子走, 问题总是得不到很好的解决。甚至有时候感觉到团队的员工缺乏工作热情, 应付工作。销售经理应该具备哪些职业技能呢?

穆兆曦:这个问题非常具有普遍性, 作为销售经理, 需要具备的技能包括有:领导技能、沟通技能、协作技能、学习能力、主动性与坚持不懈、思考与解决问题的能力、设定优先权、改革和创新的能力, 就拿“设定优先权”来说, 您必需学会“紧急性和重要性分析”, 能遵循工作中设定优先权的标准, 这些都会对您的销售和管理工作产生积极影响。

主持人:据我所知, 在知名的跨国企业中都有完善的内训制度, 比如入职培训、技术培训、岗位培训、海外培训等培训内容, 而且管理人员还会接受领导艺术培训等等。企业内训, 能基本达到基层和中层员工的营销技能提升目的。但在国内, 能提供优质内训的企业少之又少, 而这些企业负责培训的管理人员 (大部分是高级营销人才) 又能从哪里获得必要的培训和提高呢?

穆兆曦:这确实是客观存在的事实。往往优秀的品牌非常强大, 同时更重视对各级员工的培训, 因此企业的品牌可以持续地成长、再成长。而很多企业, 本身实力和规模都不大, 各方面跟强势品牌比, 都处于劣势。但可惜的, 硬是跟强势品牌硬碰硬, 比广告、比促销, 就是不愿意在员工身上好好下功夫。其实, 没有好的员工, 就不会有好的客户, 就不可能有好的生意结果。如果您所在的企业内训较少, 管理人员如果希望得到必要的培训和提高, 可以参加一些优秀优质的公开课, 或者利用业余时间进修MBA或者是营销总监班, 多结识一些营销届的同行, 有机会多交流和切磋。总之, 如果自己想学习, 办法总是有的。

链接

篇4:中庸之道的修炼

《中庸》开宗明义就说“天命之谓性,率性之谓道,修道之谓教”,性者理也,理来自于天命,任天理而行就是道,这正是道法自然的思想。接着又说“喜怒哀乐之未发,谓之中;发而皆中节,谓之和。中也者,天下之大本也,和也者,天下之达道也。致中和,天地位焉,万物育焉”。人的七情六欲未发之时就无所偏倚,谓之中,是道之本,人情发出去时又不离天理,谓之和,是道之用,能把中和推于极致,则天地万物各安其份,生生不息。

这样一套思维形成了治理上的“无为主义”,也就是小政府或不干涉人民生活的一套思想,诚如《中庸》的结尾语:“<诗>曰‘不显惟德,百辟其刑之’,是故君子笃恭而天下平。<诗>云‘子怀明德,不大声以色’。子曰‘声色之于以化民,末也’……‘上天之载,无声无臭’,至矣!”所以中庸之道主张,上善的领导是“不显”、“不大声以色”的,甚至是“无声无臭”的。这样的思想主张限制着权力由上而下的扩张,让人民自我组织,自我成长,自我协调,各安其位,生生不息,并相信这些自我组织会协调出社会秩序。

换成今天的管理来说,中庸之道在权力来源上主张不是由上而下的,而是权力由下而上;所以自然而然形成的结构就是网络式组织,由基层的人自组织成各个团体,再让团体相互连结成为网络;这种自组织为主的组织中最强大的激励措施不再是加薪、福利及分红,而是自组织的机会,给人一片空间,完全授权,任其发挥,自我组织。中国人是最会自组织的民族,这就是为什么中国总是“跑马圈地、诸侯经济”特别发达的原因;中国民营经济中也总是充满了创业、中小企业、外包网络以及商帮、地区产业集聚,组织之内则总是有承包、挂靠、子公司、子集团等现象。而中国人的管理智慧以为上善的领导是懂得“放”的领导,给人空间,才能激发出中国人无穷的生命力与创意。

一流的领导要懂得用人物,能用经营一方的大将,放之千里之外,也能打下一片天下。二流的领导善于用人才,组成坚实的团队,攻城略地,无往不利。好的经理人则善于使用规章、流程、命令系统以组织人员,可以有一个如军队般严谨的组织。但很不幸,却有很多领导,一点小小的成功,或掌握了一点权力,就开始养一些小人一样的人渣,以歌功颂德,要人前呼后拥,好自鸣得意。

中国人往往“一放就活”,但也往往“一放就乱”。如何放而不乱?中庸之道以为在于诚。

中庸的天道观下,治理天下要作的是九经:“天下国家有九经,曰‘修身也,尊贤也,亲亲也,敬大臣也,体群臣也,子庶民也,来百工也,柔远人也,怀诸侯也’。”所以治理之本在于修身,前几项都是针对政府组织的治理,讲的却是一套对不同的人的关系处理之道,而不谈组织层级、命令、规章、工作流程的设计等等。后几项虽不是治理组织之道,却是治理人民之道,讲究的是要仁爱、要怀柔,使百工安居乐业。而修身之本在于诚,所以说“唯天下至诚,为能尽其性;能尽其性,则能尽人之性;能尽人之性,则能尽物之性,能尽物之性,则可以赞天地之化育;可以赞天地之化育,则可以与天地参矣”。换言之,领导人以至诚之心开始,可以让天下之人和谐,最后使天地万物各安其份,生生不息。

换成今日的管理来说,就是以诚相交才能收服中国的人物或人才的心。以史为鉴,马援是东汉开国名臣,也是中国开疆拓土的一代名将,以“马革裹尸”而知名于史。马援年轻时家里很穷,便到边疆进行屯垦畜牧。发了大财后散尽家财周济亲友,然后在天下大乱之中,听说隗嚣礼贤下士便前往投靠,很得隗嚣敬重。

当时隗嚣占据今天陕西西部、甘肃南部之地,未称帝,只自称西州大将军。而刘秀占据河南之地,荡平河北,也击跨了占据长安的赤眉军,称了帝。公孙述占据巴蜀之地,也称了帝。隗嚣派马援去观察两位皇帝,寻找结盟的对象。

马援与公孙述是同乡,自小相好,所以到了成都,以为两人会不拘形式地闲话家常,叙叙旧,追忆儿时,充满离情。没想到,公孙述却表演了一场“飞黄腾达秀”给老朋友看——高坐金銮宝殿之上、武士林立、一派威仪,马援参拜皇帝之后,再换以旧友相见之礼,让马援更换新衣,再在皇家祭庙中与文武百官接驾,特设旧友之位,并封马援侯爵与大司马的高位。全城一片静肃,百官阵容极为盛大,对马援则是恩宠鼎盛。

更没想到,马援拒绝留下,拒绝了高位,出来说“天下大乱,胜负未分,鹿死谁手尚未可知。公孙述不知一饭三吐哺地迫切奔走礼聘天下人才,却在繁文褥节上展现威仪,不过是个玩偶型人物而已”。

然后马援再来洛阳见刘秀。等了很久,才被引入宫中,刘秀穿着平民服装,在走廊上笑脸相迎。坐定之后,马援说:“公孙述和我自幼相识,却严密戒备才传我上金銮宝殿。现在我远道而来,陛下怎么知道我不是刺客,竟如此简单地与我见面?”刘秀大笑说:“你不是刺客,但你是说客。”马援为之拜服,说:“天下大乱,称王称帝者不知凡几,只有陛下气度恢宏,好像高祖,才知道帝王自有成功的条件。”

马援想看到的其实很简单,“诚”而已。一个不加虚饰可以款款而谈的刘秀就收服了一个一方人物的心,比起几十年的交情加上高官厚禄的引诱还要有效。

创业者第一个要问的就是,你是真诚的吗?会不离不弃生死与共地投入在你发现的商机中吗?你会不会只是创业狂潮泡沫中随波逐流的一员?甚至只是弄一个商业计划“骗”投资者的钱来玩玩、来试试而已?少了那份真的相信商机,真的愿意付出的真诚,别人是感受不到你的热情的。管理者第一个要问的就是,你真的相信你的商业模式是优良的吗?你所鼓吹塑造的企业文化能以身作则吗?你所传讲的公司愿景是真的人生信仰,还只是公司的一份宣言而已?

当然,要想放而不乱,制度设计与治理机制也很重要,但中国人的管理智慧却以为,只有制度是不够的,领导者的诚意是不可或缺的。领导者个人的诚意会感动别人,会变成组织文化,会形成组织愿景,“道不同不相为谋”,志同道合才能聚群成事。个人的“道”会传染、会聚众,从而成为一群人的“道”,可以放“大将”于千里之外而不离经叛道。

篇5:《程序员修炼之道》读后感

看似朴素的道理,实际是若干经验的总结,就像这本书的自序所讲的,这是一本包含有许多朴素的经验,写给注重实效的程序员的一本“演员的自我修养”。

简单和朋友们分享几点:

怎样提出你的问题

1:确切地知道你想要问什么,并尽量明确具体;

2:小心而得体地组织你的问题,记住你是在请求帮助;

3:发邮件时请使用有意义的主题;

4:坐回椅子上,耐心等候

破窗

团队不能容忍破窗(产品的不完善的地方),需要指定人修复,不能一直放着不管。当你看到糟糕的设计、错误的决策和糟糕的代码时,修正它们。在工作中,很容易对源源不断的bug不耐烦,或许被自己说服侥幸绕过,以后就会有更多的直至难以修复。破窗户讲的故事是一个小区的一扇窗户没有及时维修导致整个小区陷入被更多破坏的现实,人们再想起维修时,代价巨大,治安特别好的地区也对破窗严格治理。

不要恐慌

做一次深呼吸,思考什么可能是bug的原因。记得刚入团队时,我时常会对难以捉摸,尤其是不能复现的bug感到恐惧,但细细寻找,你还是能看到蛛丝马迹。

温水煮青蛙

个人和团队假如一直在一个假设的环境或者需求或者条件下继续下去,就很可能像那只可怜的青蛙一样,或者定时的检测下环境或条件或需求是否变化,或者团队里面专门有人来检测

重复的危害

不要在系统各处对知识进行重复。作为程序员,我们收集、组织、维护和利用知识。我们在规范中记载知识、在运行的代码中使其活跃起来并将其用于提供测试过程中所需的检查。遗憾的是,知识并不稳定。所有这些不稳定都意味着我们要把很大一部分时间花在维护上,重新组织和表达我们的系统中的知识。程序员须持续不断地维护。我们的理解逐日变化,当我们设计或编码时,出现了新的需求。环境或许变了。不管原因是什么,维护都不是时有时无的活动,而是整个开发过程中的例行事务。可靠地开发软件、并让我们的开发更易于理解和维护的惟一途径,是遵循我们称之为DRY的原则:系统中的每一项知识都必须具有单一、无歧义、权威的表示。

正交性

不要把任何一项知识分散在多个系统组件中。在计算技术中,该术语用于表示某种不相依赖性或是解耦性。如果两个或更多事物中的一个发生变化,不会影响其他事物,这些事物就是正交的。非正交的例子:直升机驾驶操作的各个控制器之间就是相互影响的,不是正交的。

正交的好处就是为了可以局部修正(local fix)。

何时使用异常

将异常用于异常的问题。例如:文件读写,例程返回值,各种状态异常检测,服务器超时等异常情况,都需要使用异常,通常为异常分等级,可以抛出异常,或者将异常写入日志。

交流

我们不是活在真空世界,需要花大量时间与人交流。只有当你是在传达信息时,你才是在交流。

有效交流的几种方法:知道你想要说什么,了解你的听众,选择时机,选择风格,让文档美观,让听众参与,做倾听者,回复他人。

定期为你的知识资产投资

让学习成为习惯。编程语言、技术日新月异,小伙伴们都感受至深,幸运的是我们的知识获得比任何行业都更加容易和方便,大量的社区,教程和热心的作者。书中也给程序员提了几点建议,每年学习一门新的语言,每个季度阅读一本技术书籍等。

让复用变得容易

如果复用很容易,人们就会去复用。创造一个支持复用的环境。将相同的功能抽离出来,可能会大量用到的方法使用静态关键字。

在你的作品上签名

过去时代的会陷入自我欣赏中,他其实还有一个作用,我对代码负责,我测试过并确保他的良手艺人为能在他们的作品上签名而自豪。你也应该如此。坦白的说,签名之后再看这段代码会非常愉悦,有时还好运行,也是一种自我监督吧。

“我的源码让猫吃了”,想想作为程序员的我们,是不是经常会帮自己解脱,向领导,测试,客户推卸责任,其实对于他们仿佛也就好比听“我的源码让猫吃了”这句话,是不是很讽刺?不管我们某个人基础再扎实,解决问题的能力再强,如果缺失了对自己的软件的责任,一定不会有好的工作成果。

很多很多,这些不是做过一次两次就说明已经掌握了,需要一个持续的过程去注意,实践,直到他们成为你的习惯,这样,你才能成为一个“专家程序员”。

篇6:区域经理修炼之道

一、用亮点照亮区域

一个区域市场的成功,需要有亮点市场。通过亮点市场可以造势、借势和顺势,通过以点带面,迅速启动整个区域。另外,区域经理可以将本区域的亮点总结成可复制的模式和操作办法,提供给公司更高的管理者,以带动公司其他区域的发展。

这里的亮点是指,除了销售业绩和市场表现之外,还包括团队建设、沟通、产品和服务、月总结和销售例会等方面凸显本区域的亮点,区域经理在用亮点照亮区域的同时,也照亮了自己。

二、不做软销量,只做硬销量

不少区域经理,非常注重厂家出货量与终端出货量之分,在操作上也充分掌握软销量与硬销量之分,市场操作有思路。

1)以石击卵,用硬销量去打击竞争对手的软销量,进攻竞争对手的薄弱市场;

2)激流漂石,当竞争对手的销量也是石头时,需要整合资源,投入3倍以上的人财物,让自己的产品像瀑布一样铺向市场,实现流速和流量的顶峰,

三、把握营销建设的几个阶段

一个企业在发展过程中,营销要经历根据地建设、热点到热区建设、热区到战略性区域建设、战略性区域到全国品牌建设等阶段。

对经理来讲,就是要建设战略性区域。因为战略性区域不仅可以给公司带来稳定的销量、巨额的利润、不可动摇的市场地位,更重要的是战略性区域的营销模式,可以给其他区域的发展提供借鉴和复制,推动企业从区域市场走向全国市场。

四、会哭会笑会总结

区域经理一定要会哭,申请一个一个打,让上司感到值得把资源向你的区域进行倾斜。而且把市场情况,目的,效果评估等做得像模像样,哭得有理有据,绘声绘色。笑就是要通过具体事项的总结,让上司看到对你的支持所产生的效果,只有通过工作成效与沟通,才能让上司对你发出满意的微笑。

五、让自己的人马成为团队

经理在市场一线,带着自己的队伍与竞品作战。要打造自己的团队,必须做到两点:一是造圈,二是听从。

团队的团,其外形像一个圈,圈住的是人才,这个圈代表的是目标、文化、制度和激励,这个圈需要经历率领全体成员去打造和维护。团队的队,像耳朵竖立,听从一个人指挥。这个人就是经理,是团队的核心人物。要步调一致才能得胜利。

篇7:程序员修炼 收藏

程序就是一系列按步骤进行的操作序列,它有好多种级别,比如最低级的微程序、次低级的汇编程序、高级的各种编程语言程序、最高级的脚本语言程序,也许我列的不对,但没关系,我要说的是不管是那个级别的程序,其本质都是操作的逻辑序列。大多数系统和应用程序都是建立在高级编程语言上的,比如C、C++、C#、FORTRAN、BISIC、JAVA等等,就让我们只关注这一级的编程能力吧。因此如果一个程序员的逻辑能力不高,他永远都不能成为一名具有合格职业水准的程序员,我们在下面的讨论有关编程能力的方方面面,最终都是为了最大程度地提高和实现一名程序员的逻辑能力。

一、掌握基础知识:十六年寒窗的持续积累

从7岁读小学起,经过16年的学习,你从软件专业本科毕业后,必须完成以下几门专业课程的学习:计算机组成、操作系统原理、汇编语言、数据结构、编译原理、数据库原理、软件工程、结构性设计语言(PASCAL、C)、面向对象设计语言(C++、C#)、计算机网络等,你最好还懂一些算法分析、分布式系统、计算机图形学、形式逻辑、人工智能原理、软件设计模式、软件构架/框架等研究生的课程,16年来,你积累的除了知识,更重要的是形成最适合自己的学习方法和工作方法。这些是你具备程序员职业水准的基础能力,不要受什么计算机软件怪杰之类传奇的影响,那不过是小概率事件,而且这些怪杰们就算没有读过软件本科和研究生,也往往自学了大多数专业课程,很可能比在校学习的学生对这些课程的精髓部分理解的更好,还有他们的工作方法和思维方式是特别而高效的,但普遍性差,可以借鉴,不宜模仿。好,所以现在你只需要问问自己,那些课程和知识都学会并掌握了吗?如果是,那就准备好进行实践了。

二、在实践中提高:成为一名高水平的Coder

好了,你毕业了,在校功课都不错,也找了一个专业对口的工作,你想大展鸿图了,可是别急,你的翅膀还不够硬,不信我们说来看看。

通常,你在工作中都会用到某一种单位/公司固定的操作系统和编程语言开发环境,比如Windows、UNIX、LINUX等操作系统,又比如用VC、VB、PB、Delph、JAVA、Motif/XWindow、QT、OpenGL、OpenInventor等编程语言和开发环境,我们在后面把它们合称为开发环境。就在校学习的有关开发环境的知识而言,大概你距工作需要的差距是不小的,当某个操作系统和编程语言环境成为你的饭碗时,就不应也不能用通过课程/认证考试之类的眼光和要求来评价你的能力,即使你能考100分。你需要深入地学习该操作系统和编程语言环境的各类开发手册的所有内容,你会说大多数你都用不上,其实你既对又不对,对的是单从使用的角度而言,你确实用不上开发手册的大多数内容,比如庞大的VC开发类库和复杂的开发环境,你在实际工作中能用到的不到总数的1/10或1/5,不对的地方在于,你用到的部分不是孤立存在的,它们是整个体系中的一部分,只有对整个体系有了一个较完整的了解,才能得心应手、随心所欲地用好你用到的部分,你才算初步具备在这种开发环境下进行Coding的职业水准(还远不够程序员的职业水准呢),而这只是刚开始。如何才能真正掌握一种开发环境的全面的知识呢,最原始的办法就是读开发指南/教程、参考手册,一般来讲,学习开发指南/教程时,你如果是一个认真的人,都会完成5/10~7/10左右内容的学习和练习,如果你想成为职业选手,就应该完成9/10以上内容的学习和练习。参考手册不同,大多数所谓的“程序员”们只是用到了才翻翻,这差的太远了,你应该象读开发指南/教程一样,每个环节都要读,比如VC,参考手册中的每个类,类的每个函数,都要读上几遍,它们往往是一小伙一小伙地纠缠在一起使用的,开始时读得你毫无头绪、心烦意乱,不要紧,还有一手呢,如果你开发环境安装的全面,它们往往都有开发商做的demo例子可看,你就进入另一个境界了,开始时你关注demo中的具体技术,后来你发现这些demo的程序写的都还算不错,结构简单但合理,如果你真的用心,就一定能发现一些个别的demo是极品,它所展现的程序逻辑结构是你设计不出来的,你现在有点更关心它的程序设计构架,甚于对你原始目的(某种相关的技术/技巧)的关注,这时的你,开始了从一名Coder向一名Programmer的转变,你会忍不住要看看开发商提供的源程序,比如.h和.cpp,通常你会找到include路径下所有的.h程序,你才知道,哇!好多好多东东在参考手册中都没提到,你要学的太多了,没时间顾及其它的业余爱好了,现在知道为什么程序员是年轻人的职业了吧,你要有足够多的时间才行,即使你的智商有160。如果你走到这一步,在你工作的团队中,已经是经常有人向你请教技术问题,经常有人请求你帮忙debug,你已是公认的“高手”了,别得意,因为你仍然是个Coder,为什么这么说呢,你想想,你已深入了解了这个开发环境中的各种技能,知道一名Coder如何用好这些东西,可是你能设计的出提供给Coder们用的东西吗?唔„„,你想了想,可能还不太行。对了,就是这样,你还是一名小我境界的程序员呢,本质是个Coder,当然已是一名高水平的Coder了,然而你需要进一步登堂入室才能成为一名真正的程序员。

让我们继续吧,通常你都是从精通一种编程环境开始的,假设你已经较为精通在Windows下用VC开发软件了,这时在技术和技巧方面你将面临一小一大两个挑战,第一个小挑战是如果公司/单位改换了开发环境,比如用LINUX下的QT交互语言工具进行开发,你不过是把前面掌握VC的过程再来一遍,由于在主观上经历了VC工具的学习过程,在客观上各种开发环境都有太多相似的方面,这回你掌握的应该较快。要小心,在这时第一次诱惑之门打开了,因为你感觉良好,看!这回这么快,我就这么好地掌握了新的开发环境,你开始关注其它暂时还用不到的同类环境,比如VB、Delph、JAVA,如饥似渴地掌握各种开发工具,证明自己的学习能力和价值,但你忘了一点,你仍然是个Coder,只不过是一个在好多开发环境下都能编程的Coder,就像你生活在中国,因而精通了汉语,工作需要你又掌握了英语,然后你就来了劲,把俄语、日语、阿拉伯语、拉丁语,等等等等,都学习个遍,我只能说,有点BT。你忘了自己是个职业人,同一类的东西工作中用得到才需学习,太多太多的Coder们喜欢在一起比较和炫耀自己会掌握了几种开发工具,不信你看看招聘时的求职书就知道了,sigh!他们中绝大多数人永远都只能停留在这个层次上,心浮气躁,一生都再也当不成真正的程序员了。总结一下,其实你在这时需要的是对自己掌握新开发环境的能力的自信,而不是一遍遍地重复来证明自己。第二个大挑战就是你明白了只掌握VC是不够的,你发现自己有点浅薄,有很多东东你会用但你不太懂,很多方面支持VC编程的知识你都没掌握,比如操作系统的源码、网络协议知识、Windows 的注册表、进程和线程的基础知识、硬件驱动方面的知识、ActiveX、Windows 庞大的 API,又是一个等等等等,这些基础知识的学习和掌握可是要花费大量时间的,你再一次深切地感到时间太不够用了,因为这时的你大概有许多俗务缠身了,所以有点沮丧,还不用提IT业每天不知有多少新东西在发布,KAO,永远都跟不上,越拉越远了。哎!别气馁,振作一点,你还是忘记了自己是个职业人,既然好多东东在工作中你永远都没机会用,那么干嘛要学呢?用什么才学什么,最多预测到马上要用什么,先一步学什么好了,要知道没有人是真正的、无所不精的全科大夫,除非你是神,但如果你还在耐着性子看这篇文章,你肯定是个人嘛。

OK,一般工作后三五年,你经历了上述过程,经受了诱惑和考验,终于明白了一个道理:你要的是强劲的学习知识的能力,是对某种软件知识/技能的有深度的精通,一种摸到它的根的深度,而不是已掌握的技能的种类和数量。这时无论谁用他掌握了多少种你不会的技能来吓唬你都没用,你对他的层次只有蔑视。通过几年的学习和工作,要记住最重要的一点,永远最重要:对自己学习IT知识能力的自信,一个程序员一生都要不停地进行高强度的学习,用心问问自己,有没有这个自信?别用虚荣心来骗自己哦,如果没有的话,那就不必花费你宝贵的时间向下看了,作者在此感谢你有耐心看到这里,现在建议你关闭这篇文章,趁着年轻,当机立断转行吧!

三、注重逻辑:成为一名职业程序员

好,再前进一点点,你就要成为一名职业程序员了,让我们继续来完成这个任务吧!我们在前一节提到过,“你发现一些个别的demo是极品,它所展现的程序逻辑结构是你设计不出来的,你现在有点更关心它的程序设计构架,甚于对你原始目的(某种相关的技术/技巧)的关注”,其实你是在关注这个demo程序作者的思维逻辑,所有程序的本质就是逻辑。技术你已经较好地掌握了,但只有完成逻辑能力的提高,你才能成为一名职业程序员。打一个比方吧,你会十八般武艺,刀枪棍棒都很精通,但就是力气不够,所以永远都上不了战场,这个力气对程序员而言就是逻辑能力(其本质是一个人的数学修养,注意,不是数学知识)。逻辑能力也是逐步提高的,开始时你一定是用直观的逻辑能力来编程的,怎么想就怎么编,不对就再改,在改进中提高自己的逻辑能力,从直观逻辑能力提高到抽象逻辑能力,这是很正常的。提前说一句吧,到达逻辑能力的至高境界,其表现是用数学语言来描述问题和问题的解决办法,高度抽象!好,说回来吧,你要提高逻辑能力,最快的办法就是读别人写的结构优秀的程序。优秀的代码是百读不厌的(这句话是我抄来的),暂时放放对其中某种技术和技巧的关注吧,你要推导和学习的是这些好程序的逻辑结构,它们是被精心设计出来的。你可以先捂住这个demo程序,自己设计一个功能相同的程序结构,然后比较一下demo的程序结构,如果差距较大,那你就不应简单地改进一下,而是要把demo作者设计的过程在心里复原一遍,做到这一点也许有点困难,但这种事干的多了,你就会越干越快,越来越得心应手,你的逻辑能力飞速提升,你能看得上的逻辑结构优秀的程序开始不多了,下一步就是练习。从工作中开始吧,如果你有空闲,你需要做至少两类练习,一类是算法练习,所有的经典算法都是经典的逻辑,题目有的是,像个好学生一样吧,每年的国内国际编程竞赛都有逻辑要求非常高的题,你可以只选一两道难题来做做。当你可以把复杂的单递归程序(只有A调A)变成非递归程序时,已经不错了,如果你能看得懂双递归程序(A调A、A调B、B调A、B调B都有),我为你鼓掌!你不必往下看了,我有点不好意思啦――班门弄斧,你快滚蛋吧!另一类是把以前和当前你工作中你不满意的程序推倒重新设计一遍,这非常重要,省时省力,因为你熟悉需求,技术上也没问题,目的就是改进程序的逻辑结构,很划算哦,唯一要克服的就是:你对推翻以前工作中那点小小成就的心理障碍,如果你真想优秀,说句粗话:这点心理障碍算个屁,一遍遍反复地推倒已有的成果只能使自己快速进步,放手干吧,没什么好可惜的,马恩早就在《共.产.党宣言》里说过了:在这个过程中,你失去的只有锁链(禁锢你思想的锁链)。

让我们来总结一下,经过自我否定后,再生的你尽管对过去的“业绩”还有一些眷恋,但已是一个初步具备职业水准的程序员了,掌握了相应的技术和技巧,具备了较高的抽象逻辑思维能力,最主要的特征是:能自觉地自我否定,不断地追求更高水平的逻辑能力。

在这个过程中,如果你能注意以下一些小的方面,你前进的步伐也许会快一些。

l 从编译原理的角度来理解你工作中使用的高级语言,如果你做到这一点,至少有两个好处,第一个好处是避免一大堆低水平重复出现的编译错误。一名优秀的Coder平均在一个工作日中应该完成200行以上的源码,其编译错误应该控制在5个以下,要知道这200行源码不是一次完成的,所以大多数情况下你都要追求一次编译通过,而一名职业水准的程序员,应该进一步做到即使用purify这类的工具来检查源码,也不会存在严重的内存泄露。第二个好处是可以提高源码的可读性和效率。规范地编写你的代码使你自己的逻辑清晰,因为你明白多加几个括号和空行、多换行对齐、多注释,编译器是会自动识别的,不影响程序执行的效率,反过来,控制好递归调用和循环内的if语句才是提高程序效率的关键,要全力避免递归,但要深刻理解递归,能通过自己建立堆栈来把递归程序转换成非递归程序,要求还是较高的哦!

l 避免思维陷阱,只要你是人就一定有自己的思维惯性,这一定又会表现在你的程序逻辑中,有时你就是从这个惯性中跳不出来(谁都有这个时候),但要心里有数才行,所以你需要帮助,如果你有几个水平相若或更高的职业伙伴,太好了,当遇到花30分钟还打不下的bug时,就别浪费时间了,找他们吧,最要紧的是能思路清晰明确地表述你的问题,通常你自己在这个过程中或者伙伴中就有人把问题解决了,又快又好。另外,有几个可以良性竞争的职业伙伴是人生的一件幸事,1+1>2,大家各有所长,你最好做到及时公开你的成果,技不压身嘛,IT发展的这么快,你再优秀,那点东东也没有什么值得隐藏的,所以你可以技术或水平不够高,但千万不可以让真正具有职业水准的选手鄙视你的职业品质和行为。

l 有自己debug的特点,下面的说法作者不敢太肯定,只是经验之谈。即使在VC这种高度完善的开放环境下,你仍然应该要求自己仅凭打印语句就能debug。这也有两点好处,第一个好处是,遇到bug你会认真想问题所在,而不是用debug工具一步步简单地追踪卡在哪儿了,你定位bug范围的方式是从大到小、从粗到精,这是一种自顶向下的思维方式,而用工具追踪,容易形成自底向上的思维方式,这不算好,你应该先看到森林,再看到树木。我反复提及:程序就是逻辑过程,大多数程序从main函数开始,是由数据结构和功能子程序组成的一个树形结构的逻辑过程(要认清即使是面向对象的程序语言也是一样的),它的执行过程是深度优先的,但你定位bug应该是广度优先的,好好想想这一点,嗯?第二个好处是强迫你思考并记住而不是用工具看到调用过程,你大脑的抽象逻辑思维能力和胳膊上肌肉的力量一样,都是练出来的,如果你的bug是程序结构上的逻辑错误引起的,这一点就非常重要了,顺便说一句,最难打的bug就是程序逻辑结构错误导致的bug。你要是真正明明白白地认识到这儿了,那我就没什么东西可以告诉你了。总之,程序员的职业水准:生产效率和程序质量,主要是取决于源码中bug的数量和debug的速度,而不是取决于编写源码的速度。给你一个我自己定义的考查一个职业程序员的指标:一个合格水准的职业程序员,编程的时间如果算一份的话,其累计debug的时间不能超过一份,真正职业高手累计debug的时间应该控制在0.5份以下,如何?你关上门悄悄问问自己,你花费在编程和debug上的时间比例是多少?如果你把程序员作为自己一生的职业,那么就永远都要牢记一点:追求做一个0 bug的优秀程序员!这是任何一个想成为职业程序员的人的理想,请相信:坚忍不拔地追求实现这个理想将让你出类拔萃!

l 做好程序的单元测试,这是另一项考查你是否是一名具有合格职业水准的程序员的一个必要指标。其实在你拿到需求的时候就要准备单元测试用例了,并且这些用例将直接影响你的详细设计(有关软件设计本来是该放在第四节讲的)。我们还是打比方吧,当你拿到一个需求时,除了分析它静态的功能外,还应明确它动态的操作/执行过程,把这个动态过程明确地用流程图画出来,比如分为A~Z的26步,其中A又可以进一步分解为A1~A5的5步,直到不能再分解为止。又比如说A3步不可分解了,那么你应该把A3步的正常操作和所有五花八门的异常操作都列出来,确保正常的操作肯定正确,异常的操作起码程序不退出才行。这样你就要写好多好多的测试用例,说句老实话,我也从来不写!但我一般会列一个提纲,比如A3步有正常的操作a、b、c、d、e共5项,异常的操作有f、g、h、i、j、k、l、m、n共9项,你在进行单元测试时都应该跑一遍,这样的程序都还不敢说质量如何好,但起码可以说较稳定吧!如果要想在进行单元测试时干得快、效率高,那么在进行详细设计时,你就应该把A3步中对所有正常操作和异常操作的判断都设计好,在编程实现A3步时,使得程序的结构合理高效,对不对?所以,如果你在工作中是割裂地看待软件工程中从需求、分析、设计、编程、测试等各个环节,恐怕水平很有限喔!但如果你在分析需求时就能看到测试的问题,并改进设计和实现,为此做好相应的准备工作,嘿嘿,整个软件开发过程你的效率会高很多,通常你在一个开发团队中就会高度自信的,你已越过当一名偏颇、露骨的高手的境界,成为一个平静的高手,这可是The best in the best!,用周星星的话说:是高手之高高手,因为别人看不出你高在哪儿,没见你有什么高招或特拚命干,但反正你就是干得又快又好、又省力。关于进行单元测试还有很多复杂的方法,在此本文只提到了最基本的一点,目的是让你在工作上考虑周全、安排有序,其它的自己琢磨吧,没有人能替你吃饱饭!

l 如果你是用C++编程,我再简单谈谈有关内层释放的一个小技巧,就是对所有你编写的类,在构造和析构函数中加打印语句,统计每个类在运行程序时构造和析构的地方,如果是配对的,那么起码没有对象类一级的内层在程序运行结束时没有释放,然后你就可以把打印语句删掉了,招数虽土,但管用!

l 还有其它一些好习惯,在这里我随笔写一些,你要是有不同看法也请一笑过之吧。编程时应该对齐缩进,一个缩进用一个tab键,一般是4个空格,严格遵守开发团队的编程规范也是非常重要的。一个子程序不应超过30行(不算空行),其内多重循环不应超过3层,否则都应该分裂成两个子程序,个别算法程序可以长一些,但也不宜超过200行。通常一个类的所有成员函数总和不宜超过1500行,多了就应该考虑分解成两个类(这个工作最好在设计时就完成)。每完成一小段程序,比如15~30行,就立即编译运行,不要假装高手,先敲它一大堆程序,再编译运行,妄想一次成功,体验一种假爽的、虚荣的快感,或炫耀给别人看,这么做只能证明自己是一个不折不扣的傻瓜,装酷而已。因为只要有一次不成功,你就会花费大量的时间来调程序,别人的进度在这时就远远地超过你了,平常心是道,还是修炼真功夫吧!孙子兵法里关于这一点有明确的阐述,我就不引用了,但建议你真的不要这么干,除非你确实就是这样总是一次就成功的天才,那你还看这篇文章干什么呢?我又不是写给你们这些天才们看的。再就是有学会买好书、读好书,关于计算机和软件方面的书太多了,时间有限,比如有一个叫侯捷的家伙,几乎写的每本书都不错,张国峰的C++编程也不错,这只是我的个人意见啊,好书多着呢,列出来比这篇文章长好多倍,我就不多说了。还有一招,要是你运气好,能搞到一些著名软件系统的源码,好好读读吧,在此我只能告诉你,Linux操作系统的一些源码不错,是开放的,你可以合法地搞到,其它的不要说是我建议你侵犯知识版权啊!

四、天生神力:成为系统分析员

本来就论述如何成为一名职业程序员而言,本文已基本完成任务了,但《菜根谭》有言:竭世机枢,似一滴投于巨壑,穷诸玄辩,若一毫置于太虚。既已乘兴到此,何妨多置一毫于太虚呢,作者不才,干脆尽兴写算了。

你要是运气好,直接进入了一个严格规范生产的软件企业就业,刚开始就应该是按别人做好的软件设计来实现编程,你可以有机会直接学习软件设计,当你积累的足够多了,能够对其中的一些设计提出好的改进建议,而且干得又快又好,就会渐渐地展露头角,我相信你终有一天成为一名软件设计人员(注意,不是软件产品设计人员),步入系统分析员的行列,但这还需其它的一些条件和自我修炼。如果你在一个不规范的软件企业工作,那也不错,你很可能直接就有机会进行软件设计,然后开发、测试,甚至还不得不自己定义需求,把软件开发过程的各个环节走一个遍,当然这样对你的要求更高,而且你也不容易得到及时有益的指点,在正态分布的情况下,你应该是成长的很慢。但不管就业的单位如何,如果你决心要成为顶尖软件职业选手,通常什么客观困难都阻挡不了你,然而你个人的因素可能会阻止你的前进。下面提出的观点纯属一己之见,伤人自尊之处作者在此提前道歉,并建议你除非对本文有强烈的兴趣,否则就请直接看第五节或放下别看了。丑话已说在前头了,在各种软件开发组织的发展过程中的事实也证明,只有少数程序员能成为系统分析员,我想这一点不是我杜撰的吧,因此你要是在看接下来的部分时感到气愤难当,那也实在没着,纯属活该,因为作者只是在说明自己的观点而已,你最多可以呲之以鼻,表示一下你的轻蔑好了,但没有任何理由可以骂人!

作者自己没有到微软面试过,但身处软件行业,关于微软的许多东东当然还是有耳闻的,据说微软招聘一名程序员要过五个已经成为微软程序员的面试关,而且是一票否决制,又据说大多数面试题并非编程,而是一些有关逻辑和智力的题,作者私下也做过许多流传的微软面试题,并对此做法深以为然。程序的本质就是逻辑,所以几十年前就有人提出编程是一门艺术,而艺术是要靠天份的,这一点少有人反对。一个人的逻辑能力可以不断提高,但其能到达的终极逻辑能力的层次必定为其天生智力所限制,这一点就让人不易接受了。好笑啊!人们可以公开承认自己没有某种或全部的艺术天份,但要说自己逻辑天份不够,换句话说承认自己笨、IQ不够高,往往是要怒发冲冠的,其实这又有什么区别呢?话都说到这儿了,再次建议你如果不够自信,就跳过这一节吧,直接看第五节,好吗?

好了,把话题说回来,你已经成为一门合格的职业程序员了,如果要想成为从事软件系统设计的职业系统分析员,第一件事就是悄悄找一个标准智商测试的网站或其它渠道,严格认真的测一测自己的智商,如果IQ低于130(正常智商是110),就请别费劲了,打消掉成为系统分析员的念头吧!好!好!先请你冷静一下,好好想想,其实微软面试时就是在测你的智商和逻辑数学素质呢,这就是本节的标题为“天生神力”的原因,因为设计就是从无到有地进行创造,无论是软件还是其它行业都一样,可以有借鉴的,没有现成的,设计就是创造!如果你IQ在130以上,又决心要当一名职业软件系统分析员,其实你不过是要准备好吃更大的苦而已,有什么好虚荣的呢?

修炼还是从基本功开始的,过程和成为一名职业程序员差不多。必须使用设计工具这一点是不用多说的。在工作中,你基本上遇到的是两类方式的设计,一个是结构化设计,另一个是面向对象设计,就个人经验而言,面向对象的设计更好。如果你工作中不得不采用结构化的设计,你必须熟练地掌握数据流图和控制流图的分析和设计,一般来讲,如果你把一个软件中用到的数据模型设计好了,针对功能化的流程,不难设计出数据流图,但下一步设计控制流图才是挑战,如果你按照需求走不通设计好的控制流图,那么你或别人在按照这个设计编程实现时,必定也走不通,没有奇迹会发生,还是在设计阶段严格要求吧,又有一点需要牢记:返工是最慢的。当你在进行控制流图的设计时,也不要妄想得到需求人员提供给你明确的指点,通常他们要是能够把需求的功能和操作次序写完整的话,你应该就感恩戴德了,从需求中整理出功能、操作的拓扑次序和条件是你作为系统分析员的职责。看看,要是没有一点图论的基础和拓扑学的入门知识,你是当不好一个职业系统分析员的,即使你天赋不错,必要的数学和逻辑素质仍然不可或缺。也不用气馁,永远没有最好的设计,只有更好的设计,反复地进行设计迭代,勇于推翻旧的设计,你将快速进步。如果你在工作中是采用面向对象进行设计的,那就更有利了,有关面向对象设计的书太多了,不用作者在此多费口舌,建议精读一本经典的书,比如北大邵维忠等编译的《面向对象的分析》,有些方法和技巧可能过时,但其逻辑的基本原理是非常正确的,其本质是,你在逻辑上是如何认识这个世界的,你就是如何设计软件体系结构的,然后读读其它书,触类旁通,自己创造机会多实践,成功自然会到来的,总之,不管是结构化设计还是面向对象设计,评价一下自己的软件系统设计方案吧,有好多指标呢,比如是否均匀和平衡?局部独立性强不强?有没有歧异的结构?有没有层次太多或太少?有没有某个层次太大、太广?是不是逻辑结构先复杂了再化简的?还是只会设计简单的,复杂不起来(这一点是笨哦,如果出现多次,请你不要意气用事,转行吧)?最重要的一点,是否容易理解、实现和改进?你自己会得出评价的。如果有机会看到别人的设计,一定不要错过学习的机会,自己推导一遍,认真比较比较,获益会较多。

走到这一步,你就应该关注设计模式了,首先还是学习,这方面的好书有的是,但一般在工作中用到的设计模式较为单一,应该多尝试一下其它的设计模式。其次必须要明白设计模式不是设计思路,也不能代替设计思路,比方你要从A到B修一条路,设计模式只是让你选择,是修水泥的还是柏油的?是高架路还是普通的,但线路必须你自己定,而线路就是设计思路,模式对思路是有影响,但不能代替,所以如果你的智商高达250,我相信你直接用汇编语言也能写出面向对象的程序来。第三在此有一个陷阱,很多系统分析员生搬硬套设计模式,全然不懂如何融会贯通,在你的一项具体工作中,往往是以一种设计模式为主,其它模式为辅的,思维不拘泥于形式才是关键,而且也为你到达更高的软件设计的境界做好准备。

唉!都不知该怎么向下写好了,因为已达到作者水平的极限了,我胡乱说一点,你凑合看吧。软件设计最终的层次是:以无法为有法、以无限为有限,这句话是李小龙说的,不是我说的。再拾人牙慧一把,类比一个故事吧,金大侠在《倚天屠龙记》里讲到张无忌初学太极,学会的标志是把刚学的招数全忘了,记住的是太极的道理和精神,和李小龙有些相似喔,软件设计也一样,忘记所有的设计模式,随心所欲进行设计才是至高境界,所以你能到达多高的软件设计的境界最终将取决于你的哲学素质,这一点实在是不好写啊,你自己领悟吧!作者只有祝福了!

五、职业人的终极目标:全面修炼,成为Leader

这一节更不好写,涉及到太多其它非技术方面的因素,特别是个人人生观和世界观的修炼,如果本帖的点击率超过作者私下期望的一个数值,那我就争取尽力厚着脸皮再补上吧。我只说一句,虽然大家都知道软件开发是一个团队性的工作,但追求参与一个大型软件系统的成功开发,是一名软件人员的本能,就像拿破仑说的不想当元帅的士兵不是好士兵,所以不追求实现大系统的软件人员,也不是一个好的职业软件人员,但你只有成为Leader,领导一个优秀的软件开发团队,才有机会实现这个终极职业目标,对不对? 好吧,不管你现在的感受如何,我都谢谢你能读到这里!我不习惯假谦虚,就不说什么作者水平有限,本文抛砖引玉,欢迎大家批评斧正之类的客套话了,虽然作者水平确实有限。所以我认为你尽管有权砸砖,但实在没必要搞回帖、或回骂、或顶之类的玩意儿,我只是尽兴写一点多年从事软件开发工作的体验,因此接下来我就高挂免战牌,不回复任何回帖了。再次谢谢你能有耐心读到这里!希望本文对你有所裨益,祝你成功!再见!

上一篇:2008年11月国家职业秘书三级考试真题试卷及答案下一篇:跳远跳高加油稿20字