总结一下,其实你在这时需要的是对自己掌握新开发环境的能力的自信,而不是一遍遍地重复来证明自己。第二个大挑战就是你明白了只掌握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都有),我为你鼓掌!你不必往下看了,我有点不好意思啦――班门弄斧,你快滚蛋吧!另一类是把以前和当前你工作中你不满意的程序推倒重新设计一遍,这非常重要,省时省力,因为你熟悉需求,技术上也没问题,目的就是改进程序的逻辑结构,很划算哦,唯一要克服的就是:你对推翻以前工作中那点小小成就的心理障碍,如果你真想优秀,说句粗话:这点心理障碍算个屁,一遍遍反复地推倒已有的成果只能使自己快速进步,放手干吧,没什么好可惜的,马恩早就在《共。产。党宣言》里说过了:在这个过程中,你失去的只有锁链(禁锢你思想的锁链). 让我们来总结一下,经过自我否定后,再生的你尽管对过去的业绩还有一些眷恋,但已是一个初步具备职业水准的程序员了,掌握了相应的技术和技巧,具备了较高的抽象逻辑思维能力,最主要的特征是:能自觉地自我否定,不断地追求更高水平的逻辑能力。 在这个过程中,如果你能注意以下一些小的方面,你前进的步伐也许会快一些。 从编译原理的角度来理解你工作中使用的高级语言,如果你做到这一点,至少有两个好处,第一个好处是避免一大堆低水平重复出现的编译错误。一名优秀的Coder平均在一个工作日中应该完成200行以上的源码,其编译错误应该控制在5个以下,要知道这200行源码不是一次完成的,所以大多数情况下你都要追求一次编译通过,而一名职业水准的程序员,应该进一步做到即使用purify这类的工具来检查源码,也不会存在严重的内存泄露。第二个好处是可以提高源码的可读性和效率。规范地编写你的代码使你自己的逻辑清晰,因为你明白多加几个括号和空行、多换行对齐、多注释,编译器是会自动识别的,不影响程序执行的效率,反过来,控制好递归调用和循环内的if语句才是提高程序效率的关键,要全力避免递归,但要深刻理解递归,能通过自己建立堆栈来把递归程序转换成非递归程序,要求还是较高的哦! 避免思维陷阱,只要你是人就一定有自己的思维惯性,这一定又会表现在你的程序逻辑中,有时你就是从这个惯性中跳不出来(谁都有这个时候),但要心里有数才行,所以你需要帮助,如果你有几个水平相若或更高的职业伙伴,太好了,当遇到花30分钟还打不下的bug时,就别浪费时间了,找他们吧,最要紧的是能思路清晰明确地表述你的问题,通常你自己在这个过程中或者伙伴中就有人把问题解决了,又快又好。另外,有几个可以良性竞争的职业伙伴是人生的一件幸事,1+12,大家各有所长,你最好做到及时公开你的成果,技不压身嘛,IT发展的这么快,你再优秀,那点东东也没有什么值得隐藏的,所以你可以技术或水平不够高,但千万不可以让真正具有职业水准的选手鄙视你的职业品质和行为。ZC530.cOm
延伸阅读
修炼一名程序员的职业水准[4]
四、天生神力:成为系统分析员 本来就论述如何成为一名职业程序员而言,本文已基本完成任务了,但《菜根谭》有言:竭世机枢,似一滴投于巨壑,穷诸玄辩,若一毫置于太虚。既已乘兴到此,何妨多置一毫于太虚呢,作者不才,干脆尽兴写算了。 你要是运气好,直接进入了一个严格规范生产的软件企业就业,刚开始就应该是按别人做好的软件设计来实现编程,你可以有机会直接学习软件设计,当你积累的足够多了,能够对其中的一些设计提出好的改进建议,而且干得又快又好,就会渐渐地展露头角,我相信你终有一天成为一名软件设计人员(注意,不是软件产品设计人员),步入系统分析员的行列,但这还需其它的一些条件和自我修炼。如果你在一个不规范的软件企业工作,那也不错,你很可能直接就有机会进行软件设计,然后开发、测试,甚至还不得不自己定义需求,把软件开发过程的各个环节走一个遍,当然这样对你的要求更高,而且你也不容易得到及时有益的指点,在正态分布的情况下,你应该是成长的很慢。但不管就业的单位如何,如果你决心要成为顶尖软件职业选手,通常什么客观困难都阻挡不了你,然而你个人的因素可能会阻止你的前进。下面提出的观点纯属一己之见,伤人自尊之处作者在此提前道歉,并建议你除非对本文有强烈的兴趣,否则就请直接看第五节或放下别看了。丑话已说在前头了,在各种软件开发组织的发展过程中的事实也证明,只有少数程序员能成为系统分析员,我想这一点不是我杜撰的吧,因此你要是在看接下来的部分时感到气愤难当,那也实在没着,纯属活该,因为作者只是在说明自己的观点而已,你最多可以呲之以鼻,表示一下你的轻蔑好了,但没有任何理由可以骂人! 作者自己没有到微软面试过,但身处软件行业,关于微软的许多东东当然还是有耳闻的,据说微软招聘一名程序员要过五个已经成为微软程序员的面试关,而且是一票否决制,又据说大多数面试题并非编程,而是一些有关逻辑和智力的题,作者私下也做过许多流传的微软面试题,并对此做法深以为然。程序的本质就是逻辑,所以几十年前就有人提出编程是一门艺术,而艺术是要靠天份的,这一点少有人反对。一个人的逻辑能力可以不断提高,但其能到达的终极逻辑能力的层次必定为其天生智力所限制,这一点就让人不易接受了。好笑啊!人们可以公开承认自己没有某种或全部的艺术天份,但要说自己逻辑天份不够,换句话说承认自己笨、IQ不够高,往往是要怒发冲冠的,其实这又有什么区别呢?话都说到这儿了,再次建议你如果不够自信,就跳过这一节吧,直接看第五节,好吗? 好了,把话题说回来,你已经成为一门合格的职业程序员了,如果要想成为从事软件系统设计的职业系统分析员,第一件事就是悄悄找一个标准智商测试的网站或其它渠道,严格认真的测一测自己的智商,如果IQ低于130 (正常智商是110),就请别费劲了,打消掉成为系统分析员的念头吧!好!好!先请你冷静一下,好好想想,其实微软面试时就是在测你的智商和逻辑数学素质呢,这就是本节的标题为天生神力的原因,因为设计就是从无到有地进行创造,无论是软件还是其它行业都一样,可以有借鉴的,没有现成的,设计就是创造!如果你IQ在130以上,又决心要当一名职业软件系统分析员,其实你不过是要准备好吃更大的苦而已,有什么好虚荣的呢? 修炼还是从基本功开始的,过程和成为一名职业程序员差不多。必须使用设计工具这一点是不用多说的。在工作中,你基本上遇到的是两类方式的设计,一个是结构化设计,另一个是面向对象设计,就个人经验而言,面向对象的设计更好。如果你工作中不得不采用结构化的设计,你必须熟练地掌握数据流图和控制流图的分析和设计,一般来讲,如果你把一个软件中用到的数据模型设计好了,针对功能化的流程,不难设计出数据流图,但下一步设计控制流图才是挑战,如果你按照需求走不通设计好的控制流图,那么你或别人在按照这个设计编程实现时,必定也走不通,没有奇迹会发生,还是在设计阶段严格要求吧,又有一点需要牢记:返工是最慢的。当你在进行控制流图的设计时,也不要妄想得到需求人员提供给你明确的指点,通常他们要是能够把需求的功能和操作次序写完整的话,你应该就感恩戴德了,从需求中整理出功能、操作的拓扑次序和条件是你作为系统分析员的职责。看看,要是没有一点图论的基础和拓扑学的入门知识,你是当不好一个职业系统分析员的,即使你天赋不错,必要的数学和逻辑素质仍然不可或缺。也不用气馁,永远没有最好的设计,只有更好的设计,反复地进行设计迭代,勇于推翻旧的设计,你将快速进步。如果你在工作中是采用面向对象进行设计的,那就更有利了,有关面向对象设计的书太多了,不用作者在此多费口舌,建议精读一本经典的书,比如北大邵维忠等编译的《面向对象的分析》,有些方法和技巧可能过时,但其逻辑的基本原理是非常正确的,其本质是,你在逻辑上是如何认识这个世界的,你就是如何设计软件体系结构的,然后读读其它书,触类旁通,自己创造机会多实践,成功自然会到来的,总之,不管是结构化设计还是面向对象设计,评价一下自己的软件系统设计方案吧,有好多指标呢,比如是否均匀和平衡?局部独立性强不强?有没有歧异的结构?有没有层次太多或太少?有没有某个层次太大、太广?是不是逻辑结构先复杂了再化简的?还是只会设计简单的,复杂不起来(这一点是笨哦,如果出现多次,请你不要意气用事,转行吧)?最重要的一点,是否容易理解、实现和改进?你自己会得出评价的。如果有机会看到别人的设计,一定不要错过学习的机会,自己推导一遍,认真比较比较,获益会较多。 走到这一步,你就应该关注设计模式了,首先还是学习,这方面的好书有的是,但一般在工作中用到的设计模式较为单一,应该多尝试一下其它的设计模式。其次必须要明白设计模式不是设计思路,也不能代替设计思路,比方你要从A到B修一条路,设计模式只是让你选择,是修水泥的还是柏油的?是高架路还是普通的,但线路必须你自己定,而线路就是设计思路,模式对思路是有影响,但不能代替,所以如果你的智商高达250,我相信你直接用汇编语言也能写出面向对象的程序来。第三在此有一个陷阱,很多系统分析员生搬硬套设计模式,全然不懂如何融会贯通,在你的一项具体工作中,往往是以一种设计模式为主,其它模式为辅的,思维不拘泥于形式才是关键,而且也为你到达更高的软件设计的境界做好准备。 唉!都不知该怎么向下写好了,因为已达到作者水平的极限了,我胡乱说一点,你凑合看吧。软件设计最终的层次是:以无法为有法、以无限为有限,这句话是李小龙说的,不是我说的。再拾人牙慧一把,类比一个故事吧,金大侠在《倚天屠龙记》里讲到张无忌初学太极,学会的标志是把刚学的招数全忘了,记住的是太极的道理和精神,和李小龙有些相似喔,软件设计也一样,忘记所有的设计模式,随心所欲进行设计才是至高境界,所以你能到达多高的软件设计的境界最终将取决于你的哲学素质,这一点实在是不好写啊,你自己领悟吧!作者只有祝福了!
五、职业人的终极目标:全面修炼,成为Leader 这一节更不好写,涉及到太多其它非技术方面的因素,特别是个人人生观和世界观的修炼,如果本帖的点击率超过作者私下期望的一个数值,那我就争取尽力厚着脸皮再补上吧。我只说一句,虽然大家都知道软件开发是一个团队性的工作,但追求参与一个大型软件系统的成功开发,是一名软件人员的本能,就像拿破仑说的不想当元帅的士兵不是好士兵,所以不追求实现大系统的软件人员,也不是一个好的职业软件人员,但你只有成为Leader,领导一个优秀的软件开发团队,才有机会实现这个终极职业目标,对不对? 好吧,不管你现在的感受如何,我都谢谢你能读到这里!我不习惯假歉虚,就不说什么作者水平有限,本文抛砖引玉,欢迎大家批评斧正之类的客套话了,虽然作者水平确实有限。所以我认为你尽管有权砸砖,但实在没必要搞回帖、或回骂、或顶之类的玩意儿,我只是尽兴写一点多年从事软件开发工作的体验,因此接下来我就高挂免战牌,不回复任何回帖了。再次谢谢你能有耐心读到这里!希望本文对你有所裨益,祝你成功!再见!
修炼一名程序员的职业水准[3]
有自己debug的特点,下面的说法作者不敢太肯定,只是经验之谈。即使在VC这种高度完善的开放环境下,你仍然应该要求自己仅凭打印语句就能debug.这也有两点好处,第一个好处是,遇到bug你会认真想问题所在,而不是用debug工具一步步简单地追踪卡在哪儿了,你定位bug范围的方式是从大到小、从粗到精,这是一种自顶向下的思维方式,而用工具追踪,容易形成自底向上的思维方式,这不算好,你应该先看到森林,再看到树木。我反复提及:程序就是逻辑过程,大多数程序从main函数开始,是由数据结构和功能子程序组成的一个树形结构的逻辑过程(要认清即使是面向对象的程序语言也是一样的),它的执行过程是深度优先的,但你定位bug应该是广度优先的,好好想想这一点,嗯?第二个好处是强迫你思考并记住而不是用工具看到调用过程,你大脑的抽象逻辑思维能力和胳膊上肌肉的力量一样,都是练出来的,如果你的bug是程序结构上的逻辑错误引起的,这一点就非常重要了,顺便说一句,最难打的bug就是程序逻辑结构错误导致的bug.你要是真正明明白白地认识到这儿了,那我就没什么东西可以告诉你了。总之,程序员的职业水准:生产效率和程序质量,主要是取决于源码中bug的数量和debug的速度,而不是取决于编写源码的速度。给你一个我自己定义的考查一个职业程序员的指标:一个合格水准的职业程序员,编程的时间如果算一份的话,其累计debug的时间不能超过一份,真正职业高手累计debug的时间应该控制在0.5份以下,如何?你关上门悄悄问问自己,你花费在编程和debug上的时间比例是多少?如果你把程序员作为自己一生的职业,那么就永远都要牢记一点:追求做一个0 bug的优秀程序员!这是任何一个想成为职业程序员的人的理想,请相信:坚忍不拔地追求实现这个理想将让你出类拔萃! 做好程序的单元测试,这是另一项考查你是否是一名具有合格职业水准的程序员的一个必要指标。其实在你拿到需求的时候就要准备单元测试用例了,并且这些用例将直接影响你的详细设计(有关软件设计本来是该放在第四节讲的).我们还是打比方吧,当你拿到一个需求时,除了分析它静态的功能外,还应明确它动态的操作/执行过程,把这个动态过程明确地用流程图画出来,比如分为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!,用周星星的话说:是高手之高高手,因为别人看不出你高在哪儿,没见你有什么高招或特拚命干,但反正你就是干得又快又好、又省力。关于进行单元测试还有很多复杂的方法,在此本文只提到了最基本的一点,目的是让你在工作上考虑周全、安排有序,其它的自己琢磨吧,没有人能替你吃饱饭! 如果你是用C++编程,我再简单谈谈有关内层释放的一个小技巧,就是对所有你编写的类,在构造和析构函数中加打印语句,统计每个类在运行程序时构造和析构的地方,如果是配对的,那么起码没有对象类一级的内层在程序运行结束时没有释放,然后你就可以把打印语句删掉了,招数虽土,但管用! 还有其它一些好习惯,在这里我随笔写一些,你要是有不同看法也请一笑过之吧。编程时应该对齐缩进,一个缩进用一个tab键,一般是4个空格,严格遵守开发团队的编程规范也是非常重要的。一个子程序不应超过30行(不算空行),其内多重循环不应超过3层,否则都应该分裂成两个子程序,个别算法程序可以长一些,但也不宜超过200行。通常一个类的所有成员函数总和不宜超过1500行,多了就应该考虑分解成两个类(这个工作最好在设计时就完成).每完成一小段程序,比如15~30行,就立即编译运行,不要假装高手,先敲它一大堆程序,再编译运行,妄想一次成功,体验一种假爽的、虚荣的快感,或炫耀给别人看,这么做只能证明自己是一个不折不扣的傻瓜,装酷而已。因为只要有一次不成功,你就会花费大量的时间来调程序,别人的进度在这时就远远地超过你了,平常心是道,还是修炼真功夫吧!孙子兵法里关于这一点有明确的阐述,我就不引用了,但建议你真的不要这么干,除非你确实就是这样总是一次就成功的天才,那你还看这篇文章干什么呢?我又不是写给你们这些天才们看的。再就是有学会买好书、读好书,关于计算机和软件方面的书太多了,时间有限,比如有一个叫侯捷的家伙,几乎写的每本书都不错,张国峰的C++编程也不错,这只是我的个人意见啊,好书多着呢,列出来比这篇文章长好多倍,我就不多说了。还有一招,要是你运气好,能搞到一些著名软件系统的源码,好好读读吧,在此我只能告诉你,Linux操作系统的一些源码不错,是开放的,你可以合法地搞到,其它的不要说是我建议你侵犯知识版权啊!
修炼程序员职场内功心法[2]
职业规划就是对职业生涯乃至人生进行持续的系统的计划的过程。一个完整的职业规划由职业定位、目标设定和通道设计三个要素构成。
而您有没有想过问题真正的原因?
对于动不动就因为与人相处的问题而换工作的朋友,我认为很不值得(当然纯就工作性质而言,其他如感情、隐私等不在话下).因为A公司的甲君,也不过就是换成B公司的乙君罢了,没有认清楚自己心中的魔,到哪里,它,都会跟着你。
人家会排挤你,打压你,那是因为你对他造成威胁(或觉得你会对他造成威胁).这是很现实的,因为位置就只有这么几个,一个萝卜一个坑,想要到这个坑,势必要把占住坑的萝卜拔掉,而谁又想被拔掉呢?这就是竞争。但是我不喜欢竞争这两个字,我想提的是竞合.竞争是一种零和游戏,非生即死,弱肉强食。竞合是除了竞争的必要性之外(或说竞赛,不保持高度竞争力,还是会被淘汰),还需要合作;藉由合作的力量,让大家同步的提升。(你觉得你的主管阻碍你的升迁?想办法让你的主管 Promote 上去,你去接替他留下来的位置,这也是一种方法。当然,现实层面还是有很多需考虑的)
能够做一份自己心中理想的工作,说真的,是运气。能够在一份理想的工作待下来,除了运气,更重要的是努力与实力。方向掌握住,目标清楚,就按照您的步伐前进,职场上的形形色色,恩恩怨怨,都不过是人生中的点缀。主管跟您一样也是个人(当然很多人会不同意或者有很多主管不是XD),不用对他有太多的期许,因为他也是完成指令的人,只不过跟你接收指令的来源不同而已。主管的好与坏,都有我们可以学习的地方;好的见贤思齐,坏的当做借镜,时时警惕,期许自己将来会做的跟他不一样。
放下抱怨,虚心学习,将那些时间,拿来充实自己,准备好了,机会自然来临。不多说了,说多了难免老生常谈,最终是希望大家都能走出属于自己的一条大路。
优秀ASP.NET程序员修炼之路
初级的程序员或经验不足的程序员往往只意识到自己的程序是写给计算机的,而不会在意程序其实也是写给人的,或在意得不够、不全面。
写给机器的程序,往往追求的是运行正确、执行效率能满足要求。但程序员的任务仅仅就是把业务逻辑转成机器能编译的计算机语言吗?
其实,程序首先(注意,是首先)是写给人的。第一,程序是写给看代码的人的。第二,程序是写给用程序的人的。了解这一点,才能理解写程序为什么要有代码规范,为什么要有各种文档,为什么写子程序时要命好名,为什么要分层,为什么要学设计模式,为什么要写测试用例,为什么要推敲按钮的摆放,为什么要按XHTML标准写Web界面,为什么要用AJAX 理解了这一点,才能更好的做好上面种种事情。
谁都在说细节决定成败,谁都知道要注意细节。为什么大家都在讲细节,有的人能通过细节打败对手,有的人连细节在哪一方都不知道,这就是水平的高低所在。我们要有心理准备:细节不是喊一声就会出现在你面前的。感知到细节,这是一个需要不断学习和实践,甚至有人指导的过程。这个过程有长有短,要看个人的学习能力,领悟能力。但最起码,我们首先要有一个方向。找程序的细节,方向就是为人写程序,在你做设计,写代码,摆弄界面的时候,心里时刻记住这一点,几个项目下来,你自然能看到很多细节了。
内外兼修
武侠电影里的高手,往往都是通过奇门心法,内力陡增而成为高手的。但我们做程序的,要成为高手,内外兼修才能事半功倍。内,指的是需求把握,设计思想,设计模式等。外,指的是写代码时的规范,做界面时的严谨等。
看武侠看多了的我们,偏内轻外的特点是很明显的。看看书店里写设计模式主题的书籍和指导代码规范的书籍的数量和销量对比就是一个很好的证明。但是就算设计模式一套一套,但写的类却给人看半天也看不出思路的话,一两年之后,你仍将陷入一个个泥潭中。
再举个例子,有的人自称ASP.NET程序员,而且他写出来的后台代码也层次清晰,条理清楚,但是做出来的界面,结构与表现混杂,一大堆IDE自动生成的垃圾代码充斥其中,该用单选框的用文本框,按钮放在谁都想不到的地方,不该用户操作的要用户操作,一步可操作完的搞成几步也不能完成操作很显然,他不可能做出成功的产品。也许他也知道界面要合理,但是就是因为他不修外功,认为我是搞。NET这种先进技术的,去补习什么HTML、JavaScript、CSS不是自贬身价吗?其实,认真研究过HTML、JavaScript这些技术的人都会体味到,运用这些技术比流行的。NET、Java更有挑战性,而且你获得直接操作用户界面元素的能力后,以前那种做界面效果、接口功能时有心无力的情形将一去不返,这是很痛决的!
如何学习ASP.NET
要成为一个优秀的ASP.NET程序员,不仅要掌握。NET框架,理解ASP.NET的原理,而且要对DHTML架轻就熟,甚至对各种浏览器之间的差异也要有所了解,所以做ASP.NET程序员是一件很有挑战的工作。那么如何学习ASP.NET,并最终成为优秀的ASP.NET程序员呢?
我认为可以分为两个步骤来走:首先,熟悉ASP.NET各种标准控件的用法,了解ASP.NET工作原理。接着,朝内和外两个方向扩展自己的知识和技能。
在Visual Studio .NET这样优秀的IDE帮助下,我们使用各种ASP.NET控件,掌握ASP.NET基本的工作原理应该是比较容易的。如能辅以几个简单的项目练习一下比较复杂的DataGrid、DataList等数据绑定控件的话,基本掌握ASP.NET是应该没有多大问题的。
之后,我们就可以朝两个进阶方向前进了。修内的话,深刻理解面向对象的编程思想是必修的,然后是各种的B/S框架的模式(比如MVC)的理解,最后是设计模式等等软件工程的概念和技术。修外则更重实践。首先,做项目时注意把一些可以实现在客户端的逻辑用DHTML在客户端实现出来,以此掌握结合服务端、客户端技术的方法,加深对HTML的DOM对象的理解,熟练常用的JavaScript技巧,进而练习对Web界面的结构、数据、表现三者进行分离的规划、设计与实现。
如此看来,学习ASP.NET也并不是一件很难的事情,注意为人写程序,内外兼修,自然就能做出合格的应用程序。
修炼程序员职场内功心法[1]
职业规划是对职业生涯乃至人生计划的过程,职业生涯规划的好坏可能将影响整个生命历程。感谢您阅读《修炼程序员职场内功心法[1]》内容,职场资讯网小编向您推荐一些职业规划知识,欢迎参考,希望能帮到你。
程序设计在任何时间点都是一个起点,而没有终点的一条路。
写程序,是用计算机来解决某些特定的问题,而程序设计的理论与方法,则是为了解决写程序的人的问题。就像管理一样,我们必须要订定管理的准则与规范,让业务的运作得以流畅,达成预期的目标。管理的理论则是帮助我们制定规范,并避免掉可能发生的问题,与带来实质的效益。(当然多少有些理想化)理论建构的再完整,但执行的还是人,实施的对象,也是人.人的特质,就是我们不得不考虑与正视的因素了。
当然,这是管理的议题。而管理所需花费的最小成本,就是自我管理,也是最有效的管理,我们管理好自己的工作态度,管理好时间的分配,管理好自己负责的范围,在既定原则与方向指引下,朝一致性的目标前进。
除了专业知识与专业技能是我们职场上必须具备的之外,常常被忽略的两件事情,就是专业的服务与信任度.
信任度往往是最后您能不能把事情做好的关键要素。客户或老板对你不信任,那么他对于你做出的成果也不会抱以高度的期望,就不会给你充分的支持,以及帮你排除可能遇到的障碍与问题。而专业的服务则是帮助您取得信任的好方法。服务的对象,从客户、老板到公司的同事、Team 里面的同仁端看您的工作性质而定,最主要的是心态.
您有没有把事情做好的决心?您有没有让客户百分之百满意的企图心?除了把事情做完之外,您还可以再多提供些什么?什么是您还没有想到的?如果你是客户,你会有什么样的期待?在什么情况底下,您才会觉得满意?(想一下您自身使用过的产品的经验)
举个之前看过的一个买螃蟹的例子。老板交付的同样一件事情,两个同事,一个把老板交代的事情做完把螃蟹买回来了,一个做到了市场调查、分析,提供给老板建议,让老板做决策,这相较之下就很明显了。(管理的案例,并不是要你真的照着做,而是在于你能不能从中得到的启发)
在职场上,做到 100 分,只是基本要件(就像考试考 100 分,那只是代表你学习的基本功夫,没有 100 分表示你学习的不透澈,还有努力的空间),更要思考的是如何超越 100 分。衡量自身的能力,不足的地方,想办法补足。(当然这也是我自己必须努力的目标)
在工作上,我们也常常会对一些事情发牢骚,或对同事的某些行为或态度不满。但是,在发牢骚或批判之余之余,是否曾认真想过,为什么人家可以只出一张嘴落得轻松?为什么人家总是得到老板的称赞而你总是老板口中的笨蛋?为什么升等加薪的人永远不是我?
程序员修炼之道 你的知识资产
我们喜欢把程序员所知道的关于计算技术和他们所工作的应用领域的全部事实、以及他们的所有经验视为他们的知识资产(Knowledge Portfolios)。管理知识资产与管理金融资产非常相似:
1. 严肃的投资者定期投资——作为习惯。
2. 多元化是长期成功的关键。
3. 聪明的投资者在保守的投资和高风险、高回报的投资之间平衡他们的资产。
4. 投资者设法低买高卖,以获取最大回报。
5. 应周期性地重新评估和平衡资产。
要在职业生涯中获得成功,你必须运用同样的指导方针管理你的知识资产。
经营你的资产
l 定期投资。就像金融投资一样,你必须定期为你的知识资产投资。即使投资量很小,习惯自身也和总量一样重要。在下一节中将列出一些示范目标。
2 多元化。你知道的不同的事情越多,你就越有价值。作为底线,你需要知道你目前所用的特定技术的各种特性。但不要就此止步。计算技术的面貌变化很快——今天的热门技术明天就可能变得近乎无用(或至少是不再抢手)。你掌握的技术越多,你就越能更好地进行调整,赶上变化。
3 管理风险。从高风险、可能有高回报,到低风险、低回报,技术存在于这样一条谱带上。把你所有的金钱都投入可能突然崩的高风险股票并不是一个好主意;你也不应太保守,错过可能的机会。不要把你所有的技术鸡蛋放在一个篮子里。
4 低买高卖。在新兴的技术流行之前学习它可能就和找到被低估的股票一样困难,但所得到的就和那样的股票带来的收益一样。在Java刚出现时学习它可能有风险,但对于现在已步入该领域的顶尖行列的早期采用者,这样做得到了非常大的回报。
5 重新评估和平衡。这是一个非常动荡的行业。你上个月开始研究的热门技术现在也许已像石头一样冰冷。也许你需要重温你有一阵子没有使用的数据库技术。又或许,如果你之前试用过另一种语言,你就会更有可能获得那个新职位……
在所有这些指导方针中,最重要的也是最简单的:
提示8
定期为你的知识资产投资
目标
关于何时以及增加什么到你的知识资产中,现在你已经拥有了一些指导方针,那么什么是获得智力资本、从而为你的资产提供资金的最佳方式呢?这里有一些建议。
l 每年至少学习一种新语言。不同语言以不同方式解决相同的问题。通过学习若干不同的方法,可以帮助你拓宽你的思维,并避免墨守成规。此外,现在学习许多语言已容易了许多,感谢可从网上自由获取的软件财富(参见267页)。
2 每季度阅读一本技术书籍。书店里摆满了许多书籍,讨论与你当前的项目有关的有趣话题。一旦你养成习惯,就一个月读一本书。在你掌握了你正在使用的技术之后,扩宽范围,阅读一些与你的项目无关的书籍。
3 也要阅读非技术书籍。记住计算机是由人——你在设法满足其需要的人——使用的,这十分重要。不要忘了等式中人这一边。
4 上课。在本地的学院或大学、或是将要来临的下一次会展上寻找有趣的课程。
5 参加本地用户组织。不要只是去听讲,而要主动参与。与世隔绝对你的职业生涯来说可能是致命的;打听一下你们公司以外的人都在做什么。
6 试验不同的环境。如果你只在Windows上工作,就在家玩一玩Unix(可自由获取的Linux就正好)。如果你只用过makefile和编辑器,就试一试IDE,反之亦然。
7 跟上潮流。订阅商务杂志和其他期刊(参见262页的推荐刊物)。选择所涵盖的技术与你当前的项目不同的刊物。
8 上网。想要了解某种新语言或其他技术的各种特性?要了解其他人的相关经验,了解他们使用的特定行话,等等,新闻组是一种很好的方式。上网冲浪,查找论文、商业站点,以及其他任何你可以找到的信息来源。
持续投入十分重要。一旦你熟悉了某种新语言或新技术,继续前进。学习另一种。
是否在某个项目中使用这些技术,或者是否把它们放入你的简历,这并不重要。学习的过程将扩展你的思维,使你向着新的可能性和新的做事方式拓展。思想的“异花授粉”(cross-pollination)十分重要;设法把你学到的东西应用到你当前的项目中。即使你的项目没有使用该技术,你或许也能借鉴一些想法。例如,熟悉了面向对象,你就会用不同的方式编写纯C程序。
学习的机会
于是你狼吞虎咽地阅读,在你的领域,你站在了所有突破性进展的前沿(这不是容易的事情)。有人向你请教一个问题,答案是什么?你连最起码的想法都没有。你坦白地承认了这一点。
不要就此止步,把找到答案视为对你个人的挑战。去请教古鲁(如果在你们的办公室里没有,你应该能在Internet上找到:参见下一页上的方框)。上网搜索。去图书馆。
如果你自己找不到答案,就去找出能找到答案的人。不要把问题搁在那里。与他人交谈可以帮助你建立人际网络,而因为在这个过程中找到了其他不相关问题的解决方案,你也许还会让自己大吃一惊。旧有的资产也在不断增长……
所有阅读和研究都需要时间,而时间已经很短缺。所以你需要预先规划。让自己在空闲的片刻时间里总有东西可读。花在等医生上的时间是抓紧阅读的好机会——但一定要带上你自己的杂志,否则,你也许会发现自己在翻阅1973年的一篇卷角的关于巴布亚新几内亚的文章。
批判的思考
最后一个要点是,批判地思考你读到的和听到的。你需要确保你的资产中的知识是准确的,并且没有受到供应商或媒体炒作的影响。警惕声称他们的信条提供了惟一答案的狂热者——那或许适用、或许不适用于你和你的项目。
不要低估商业主义的力量。Web搜索引擎把某个页面列在最前面,并不意味着那就是最佳选择;内容供应商可以付钱让自己排在前面。书店在显著位置展示某一本书,也并不意味着那就是一本好书,甚至也不说明那是一本受欢迎的书;它们可能是付了钱才放在那里的。
提示9
批判地分析你读到的和听到的
遗憾的是,几乎再没有简单的答案了。但拥有大量知识资产,并把批判的分析应用于你将要阅读的技术出版物的洪流,你将能够理解复杂的答案。
与古鲁打交道的礼节与教养
随着Internet在全球普及,古鲁们突然变得像你的Enter键一样贴近。那么,你怎样才能找到一个古鲁,怎样才能找一个古鲁和你交谈呢?
我们找到了一些简单的诀窍。
l 确切地知道你想要问什么,并尽量明确具体。
2 小心而得体地组织你的问题。记住你是在请求帮助;不要显得好像是在要求对方回答。
3 组织好问题之后,停下来,再找找答案。选出一些关键字,搜索Web。查找适当的FAQ(常见问题的解答列表)。
4 决定你是想公开提问还是私下提问。Usenet新闻组是与专家会面的美妙场所,在那里可以讨论几乎任何问题,但有些人对这些新闻组的公共性质有顾虑。你总是可以用另外的方法:直接发电子邮件给古鲁。不管怎样,要使用有意义的主题(“需要帮助!!!”无益于事)。
5 坐回椅子上,耐心等候。人们很忙,也许需要几天才能得到明确的答案。
最后,请一定要感谢任何回应你的人。如果你看到有人提出你能够解答的问题,尽你的一份力,参与解答。
如何才能成为一名真正的Web程序员[2]
3. 组件技术
我想是现在的Web应用推动了组件技术的发展。以前,从老式的静态库、动态库(dll),到现在的COM/DCOM,再到正在兴起中的Web Service;从单机调用,到基于内部网的分布式调用,到现在基于Internet的分布式计算。现在的应用都是基于组件的n层结构,最明显的就是COM和JavaBean。
这些东西体现了软件架构的发展,以前是基于单机的应用,然后是C/S结构,到现在的B/S结构。我记得李维曾经说过,程序员一定要注意软件技术的发展趋势,只有这样,才不至于被淹没在技术的洪流中。我想,作为Web程序员,一定要明白COM的原理,如何实现这种调用、如何进行分布式调用。说实话,我觉得COM还是比较复杂的,否则微软为什么要提供ATL和VB呢,要搞明白,应该学学C ,因为VC中提供的ATL库可以很明显的说明COM的内部运行机制。
4. 网络技术
这可以说是Web程序员最应该懂得东西。起码,应该知道Web服务器的机制,要明白Http协议。就拿IIS来说,要懂得web应用程序运行的进程安全和IIS的关系,懂得ISApi的作用。
如果有时间,就看看TCP/IP,看看winsock,这些都是底层的网络的东西。
我所说的这些都是基于微软技术下的东西,其他的像Java方面的东西都可以对照参考,就不多说了,这也是我这几年来的一些心得。总之,学海无涯,每当接触一些新的东西,就会发现自己的不足,同时也就觉得基础知识的重要。说实话,像我们做应用开发,用别人的东西,在现在这种情况下,新的技术层出不穷,稍不注意就会被甩开,这也是没有办法的事情。
程序员你真的只是程序员吗[2]
或许上面写的比较偏激,但真的是很普遍,我想告诉你们,你们虽然只是负责一个模块,但无论如何,请要知道你的项目到底是什么,如何运转,哪些地方好,哪些地方不好,因为这是对你自己的一个提升,也是对公司的一个负责。说到负责,我不得不说责任感,很多人就是缺少了责任感,以为完成了任务就可以了,但你要知道,你的公司或许等的不是你的完成呢?
请您拿到项目需求的时候,分析一下您要做的东西,用你敏捷的思维想一下,该如何去做,还请您多想想下一步,如果扩展了,我要改哪些地方,最重要的是,请您想想,这个任务对公司是否有利,或许你会说你只是个程序员,我没有权利去改变任务,没有错,你是个程序员,首先请你完成你的任务,在完成任务的同时,想想任务的完成对公司的运营是否起到反作用,因为有时你会比你的老板更了解项目对公司的利弊。如果你真的觉得不太好,不要怕,提出你的观点,但一定要想好你观点的描述,尽可能的表达清楚,让你的老板知道你的意思,因为老板他不一定懂技术,所以一定要白话一点。如果你的观点是正确的,你们老板也听明白你的意思了,那样你们老板会更加的器重你,而不会不可理喻的让你完成他所要的东西了。毕竟这是对他好的建议,也是对公司发展好的建议,如果你的观点不好,那样老板也会给你一定的提点,何乐而不为呢?
下班后,请你抽空想想公司的发展吧,因为你是公司中的一员,公司发展前景好也代表着你的发展前景好,如果你的想法给公司带来了好的前景,那也是对你能力的一种肯定。
最后说说面试,我也经历过很多面试,同样也面试过很多人,刚开始也会为工作着急,到处找面经,但最好的面经是无法从其他地方找来的,因为面试是一个展示自己的机会,而不是一再的ctrl+v 。刚开始我也会紧张,但马上,我调整了自己,每次面试就当自己一种磨练,一种交流、沟通、展示的机会,随后的几次面试都比较成功,再随后的几年,我回到了老公司进行面试,显然他们对我的能力已经是一个肯定了,最后我还是没有选择他们,因为我回去面试只是为了看看公司的发展进行的如何了,因为这一切也有着自己的一份努力。最好玩的是一次邮件面试,对方给了很多题目,大多是网上都有的,我也没有baidu,用自己的想法回答了所有的问题,并提出了很多意见,没想到对方回错了邮件,把他给人事的邮件发给了我,貌似是说面试还可以,就是工资高了点之类的话,我也懒得继续往下看,回信给对方,发错邮件了。过后不久收到对方的面试通知,更确切的说是offer,不过在他电话中我直接给回绝了,因为我已经在一家自己喜欢的地方就职了。
我爱我的公司,我爱我的程序,我也爱我的老婆和家人,因为他们给了我快乐,也给了我支持,让我能更全身心的去投入到代码之美中,我更相信公司能异军突起,成为IT界的领军人物,因为我看到了一群为公司孜孜不倦,辛苦能力的同事,我很爱这种氛围,我相信我们的努力一定会给自己带来收获,就算没有收获,我也没有任何怨言,因为我沉醉了,因为我快乐,因为我是个快乐的程序员。
IT人如何修炼编程的内功[2]
ok了,这我们是不是可以理解到,计算机编程,其实首先是人的工作,当我们遇到一个服务需求,我们人来做一次,嗯,获得一个比较满意的结果,然后我们觉得这个动作可以重复,下次遇到类似的问题,照做就好了。于是,我们就安排计算机来做这件事了。是不是这样?
这是不是说明,程序,其实是在讲一件事应该怎么做,这个做的过程,以及这个过程的含义,其实是人定义出来的,然后通过编程,教给计算机来做而已。
我以前经常有种感觉,计算机编程,是两层意思,一层,是程序本身的含义,就是怎么做事,另一层,是隐含在程序下面的逻辑含义,就是做事的意义,程序只是字面上的意思,而逻辑,是程序段落组合起来,共同表述的一层意思。现在想想,其实就是这个道理。
嗯,既然我们知道,编程,就是把做一件事情的步骤,分拆开来,教计算机去做,但,分拆到什么粒度呢?这个很重要。如果分拆的粒度太细,白白浪费程序员的时间和精力,这些都是成本。而分拆得太粗,计算机还是弄不明白,做事不对,就是bug了。
这说明,编程有个很重要的概念,就是粒度,也就是我们对问题描述的精细程度。
最开始的计算机是最笨的,学过计算机组成原理的同学大概知道,只要有个累加器,其实已经可以算一台计算机了,只会做加法计算。因为从数学上,我们可以知道,任何计算,最终都可以演化成加法计算,事实上,现在的CPU,在最底层核心的部分,也还是这个加法逻辑。
这样做当然没什么不好,不过,有个小小的问题,就是粒度太细了。如果每件事情,都要程序员去拆解成很细的加法计算,这个工作就几乎不是人干的事情了。难道就无解了吗?
呵呵,前面我们说过,计算机的特点是什么?无限重复,大家就发现,一个事情,比如7*24,这是乘法计算,但是,我们最终要拆解为加法计算去实现,但是,不是说我们每次都要这么拆解,乘法计算也是一个工作,有规律的,因此,当我们拆解一次之后,我们当然可以把这次拆解过程本身,编订为程序,下次遇到类似问题,让计算机把这个程序再跑一遍就ok了。呵呵,大家以为Intel的CPU里面的乘法计算指令是怎么实现的?大家又以为AMD的CPU内部的微代码体系是怎么实现的?
就是这么一个思维,解决了所有的问题,遇到需求,首先拆分,然后不断检索我们以前是不是以前拆分过了,遇到能套用的程序段落,就直接用,不用每次都拆分那么细,减少工作量,当然,遇到新问题,还是需要自己拆解的,不过,拆解后,最好把拆解本身,也写成程序,下次重用。
大家玩各种语言,一般都提供基本库,这个基本库,其实就是前人已经拆解过的结果,软件公司觉得有代表性,可以满足大多数应用场合,就编订到基本库里面,以后程序员直接用,不用自己重复了,大家说是不是这样?
现在,大家知道怎么看待C的stdio.h,stdlib.h这些基本库了吧?C++的iostream是什么含义,知道了不?MFC知道了不?Java的运行时库是什么意思,也知道了吧?
不过呢,这个世界的需求总是很多的,并且,计算机的能力也是不断在进步,以前不适合计算机做的事情,现在也慢慢变得适合了。因此,大家总能遇到一些新问题,需要自己重新拆解,基本库中没有提供,这就是程序员这个职业存在的真实含义。帮助用户不断拆解新需求,解决新问题。当然,库本身也在进步,不断把已经被证明拆解成功的问题,修补到库中,避免以后的程序员做重复工作。就这么简单。
一个平庸程序员的自白[2]
职业规划怎么写,相信很多朋友们对这个问题很感兴趣,下面给大家介绍一下。第一部分,前言即总论;第二部分,自我分析,包括业余爱好、性格、价值观、专业技能等;
我的生存之道
尽管我的编程技能不尽如人意,我仍然是一个非常成功的开发人员。这里有一些我多年来学到的诀窍,以及如何我作为一个平庸程序员,发挥出最佳平均编码技能水平的生存之道:
▲ 明确要求--我会预先得到完整、精确的系统要求清单。如果你直接开始编码就意味着你没有针对系统设计的要求来进行。
▲ 分析和设计--我获得了分析和设计权。一名普通程序员获得了分析和设计权,就拥有了一个超越一名伟大的程序员的优势。
▲ 项目计划--坦白来说,我早期职业生涯中没有用过正式的项目计划,一直到我加入了CSC,不得不使用更多的正式文档编制技术,从而开始使用项目计划。由此我充分认识到使用经过慎重考虑后的项目计划也是平庸程序员的一个优势。
▲ 经常翻阅手册、指南--我总是备有手册、指南以供不时之需。我也研究了其它的参考材料。
▲ 拷贝-粘贴程序员--我不介意承认自己是一名拷贝-粘贴程序员。多年来,我写了许多可以在新项目中重复使用的代码。因为我至少花时间写了一次代码,所以我对这些代码如何工作略知一二。在工作中我从不拷贝其他人写的代码,并且我从不使用我在其他公司写的代码。黄金规则和版权法都适用于知识产权:您不得复制和使用别人的代码,除非明确允许,或者你可以得到特别的许可。
▲ 毅力--我永不放弃,我一直相信自己能完成任何编程任务。
▲ 工具--当我需要一台更快的电脑但这又不在预算之列时,我发现了一个经理愿意用他们的一部分预算资金为我购买。你可以通过乞求、借用,或交易来获取所需工具,从而完成自己的任务,要经常向你的经理提出自己的要求;只这些要求是合理的,一个优秀的经理会尽最大努力找到一种方式来获得软件,硬件,手册,或者你所需要的帮助。
▲ 手气好(Serendipity)--也被称为代码一写就好策略。有几次我像一个初级程序员那样写了代码,而这些代码运行得很好。我把它比作是国际象棋,你在下棋的过程中突然发现,自己走两步就有将死的机会。这不是编程应有的方法,但由于我在检讨自己的职业中的罪过,我不得不纳入此项。
底线
我要做一个最终坦白:我不喜欢被看作是次等的团队成员。我见识卓越,而幼稚的程序员却真的相信:不能写出先进代码的人对团队和公司来说毫无价值。这些精英认为平庸的程序员能力有限,不足以生产高品质的代码,几乎总是犯错,令人不快。有个观念令我感觉既可笑又惊讶:如果你不能 ________(填空),就不是优秀的程序员。
你不必成为一个出色的程序员或伟大的开发者,特别是正在开发商用系统的时候。没错,我是一个平庸的程序员,其主要原因是我从来不需要成为一个伟大的程序员。
我不是纵容平庸。不论做什么,都要尽力做好--包括编程。最好的代码可能难以确定,但越高效的代码可能也越难维护。可以说,任何可以完成工作的代码就是好的代码。代码是像索玛立方体(Soma cube),有240种途径可以解决索玛难题,同样,也有许多代码编写方法可以用来完成任务。底线就是尽可能做好工作--这是任何一个平庸的程序员都可以做到的。
职场智慧之程序员的职业规划[2]
做自己喜欢与最擅长的工作
既然必须做出选择,如何选择就是关键。总不能写几个纸条,靠抓阄来决定自己以后的命运。从众多成功者的经历来看,成功的一个关键因素就是做自己感兴趣的和最擅长的事情。如果没有兴趣,就没有百分之百的激情与动力,如果不擅长,就不可能把一件事情做到最好。
刘翔是短跑冠军,王励勤是乒乓球冠军,乔丹是飞人,巴菲特是股神他们之所以成为英雄,正在于他们都是在做自己最擅长的事情,都是在拿自己的长处和别人的短处较量。他们本来是普通的常人,但因为在某一点上超过了所有的人,因而获得了成功。
职业规划的目的,不是要你变成另外一个人,而是要你变成最好的自己。搞清楚自己的优势在什么地方。做自己喜欢和最擅长的工作。不要羡慕别人的长处,不要绞尽脑汁地琢磨怎样才能像别人那样擅长某方面,不要幻想成为别人--做最好的自己!
成为行业专家
通常说到程序员的发展前景,一般是指如项目经理、软件架构师之类的,这种规划主要是在IT行业内就业发展的规划,更像一个职位的规划。所以,无论是就职资源还是职业前景都包含一定的局限性。随着IT行业的竞争加剧和其他传统行业的信息化进程,如今的程序员职业规划发展目标应该超越本职业概念的行业专家,这里所指的行业,并不是指编程的语言,而是比如电信、互联网、银行、电子商务之类的行业,成为一个领域在行业中应用的专家。而在现实招聘的需求中也大量地体现了这方面的要求,具有某一行业多年从业经验的开发人员一直是众多企业苦苦追寻的香饽饽。
坚持到底
除了选择,最终要想获得成功,唯一的办法就是专注.技术是层出不穷的,而人的精力却是有限的,怎样把有限的精力用到刀口上去,那就得认准了某个领域和某个行业坚持不懈地做下去,不但要成为这个领域的技术专家,还要成为这些行业的业务专家,你能熟知这个领域的点点滴滴,并能在这个领域的行业应用上发展创新,这样的人才,我想才是目前最需要的人才。我的一个同学,毕业的时候被公认为是编程水平最高的,但3年来他换了6次工作,他总是对这个感兴趣,对那个感兴趣,做过很多,每换一个工作几乎都是做的全新的东西,总在抱怨工作不如意,其实他换来换去,却始终是在起点上转。而另一个非常坚持的朋友,10年只跳了三次槽,第一个是程序员,第二个是部门经理,第三个是技术总监,不为什么,就因为他是专家,10年来他只做一个行业。用10年来做一件事情,不成功都难。
世界上没有完美的公司,重要的是,你要有自己的目标。知道你自己要的是什么。有些人习惯不满意就跳槽,跳槽可能会增加你的收入,但这种个人收入的增长,与一家企业由小到大而给员工带来的成长是无法相提并论的。职业规划就是要搞清楚自己的优势在什么地方,自己最适合做什么。当有了自己坚定的目标和定位,打工就不再是为别人卖命,而是为了自己的目标在奋斗!用这样的标准来衡量自己的成长和进步,那样的人生也会变得轻松而快乐。
程序员对经验的一点思考[2]
那么,个体应该怎样对待经验呢?
我个人觉得,可以从经验的形成和使用这两个角度来思考一下如何对待经验的问题。
1、经验的形成
在经验形成的过程中,不能仅仅满足于经验的获得,还要对产出经验的前因后果进行深入系统地思考,确保经验能够有机,系统地融入到自己已有的知识体系中。很多时候,我们解决问题的经验方法,思考过程,是以一种非显意识的,灵光一现的方式得出的,我们的大脑会以一种近似于直觉的形式从记忆深处跳跃性地抓取一些线索,得出问题的解决方案。这种背景下形成的经验,如果不对其加以整理,回顾,不将经验背后的东西从潜意识翻到显意识的话,不去将经验涉及到的知识点和相关事物进行整理联系的话,这种经验很容易就会淡化,甚至随着时间的推移发生扭曲。即便是没有发生扭曲和淡忘,但是因为对得出经验的前因后果不甚了解,往往在个体真正需要借鉴经验的时候很难建立出来一个有效的参考系统。在经验形成的过程中,要透过经验,去观察经验背后的本质规律,通过具体的经验接触乃至掌握了主导经验的本质规律,才能够让自己在以后遇到问题的时候有效运用经验。
2、经验的使用
在获得经验的同时,要警惕经验成为自我意识的一部分,以减弱因为人潜在的维护自我完整性的心理倾向所导致的对经验的过度使用。
保持一颗鲜活的大脑,对不符合经验的东西,对经验不能解释的东西要保持一种敏锐的觉知能力和思考的自由度。而作到这一点的关键是要确保内心的纯净,安静。在我看来,只有一颗不带欲望,不带喜好,不带情绪,不带偏见,不带过多自我意识的心,才能够在运用经验和创造经验之间获得完美的平衡。把文章发给了一位朋友,他的回复我觉得很精要,附在下面作为对自己的思考的补充吧:
关键的是要能够透过具体的经验,看到背后的规律,所谓透过现象看本质。有的人,事情只做一次,就能成为专家;有的人会不停地在类似的事情上失误,这就是对本质看法的能力不同所致。 能够看到本质的人,一定不会滥用经验。