fkjava

BlogJava 首页 新随笔 联系 聚合 管理
  49 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

#

从程序员到技术领导者

入行

你为什么要当程序员?每当我问起很多人入行的人,回答各不相同。

有很多人是因为喜欢。谁说过:热爱是最好的老师。当然,关键是热爱是否能支撑自己把爱好做成一份职业。但不论做多久,因为热爱或曾经热爱,这个理由就足够了。你不能希望撒一粒种子,都变成参天大树。所以,对进来和离开的人,我们都应该鼓励。

新入行的人,建议他们用1-2年来适应、评估程序员的生活状态。不论满怀希望还是充满失落,这些时间都不会浪费。在如今信息时代,曾经的经历,都会使有这方面经历的人拥有独特的眼光,很容易在其他领域内,引入新的思考。

进入软件行业,还是其他行业,其实,对一个新人来说,最重要的东西不是行业本身。而是,你自己得明白:你是什么样的人?你喜欢做什么?你希望做什么?你希望成为什么?你希望现在如何?你希望几年后又是怎么样?最关键的还有:你现在能做什么?

当然,你不可能凭空乱想,如果你自己都觉得目标遥远,那就仔细倾听内心的感受。你随时得问自己:我到底要什么?

有一定的方向感,就可以上路了,不必患得患失。

技能

作为立身之本,绝大多数的程序员首先关注的是编程知识、技能。他们大多容易忽视自己在从小到大的学习中,已经发展出来的能力:学习的能力、沟通的能力。这些能力虽然并不能马上换来高薪,但是,却对一个人后来的发展,有长远的影响。

程序员的工作,编码只是一个技能的部分,这种把知识转化为成果的技能非常重要。一个优秀的程序员所产生的绩效,是一般的程序员的几倍和几十倍。对一个软件公司而言,好的程序员仍然是公司的核心资产。

新入行的程序员都应该首先把精力都集中在技能的提高上。随着技能的提高,工作能力的增强,自信也会提高。

但是,不要光埋头干活,不抬头看路。如果你在一个不太正规的公司,你所做的东西和接触到东西,不太规范、有效的话,你可能在这个行业做了很多年,都算不上入行,就是说专业的起点太低。即使你有足够的时间学习,但是由于没有实践的平台,你要走的弯路就太多了。这样,你需要仔细的评估自己的选择了。

程序员普遍都有一种激情:希望自己做的产品,能为成千上万的用户使用。这种职业的自豪感,激励着每一个程序员的创造力和想象力。

即使程序员的工作能为你带来很好的收入,但你对自己所做的东西,毫无成就感,或者跟你的价值取向冲突的话,我想,你也应该考虑重新选择自己的职业生涯。

我认为,程序员的自律性都是比较高的。他们大多数人都热爱自己的工作,自己学习专业知识,努力提高工作技能。

除了对专业知识的把握以外,程序员还应该拓展自己的视野,程序员要学习关注自己的生存环境,随时审视未来的发展空间,选择自己的发展道路。仍然要问:我要什么?我要到哪里去?

总的说来,程序员生存的空间比较直接、单纯。程序员普遍不喜欢工作时受人打扰,这一切都在情理之中。

技术管理者

技术管理者和程序员,他们服务的对象和工作方式完全不同。

程序员是大我,主要是完成任务,所有的事情主要靠自己完成,目标就是完成技术思考和转化。

技术管理者是小我,服务的对象是团队,目标是组织和连接流程。用俗话说,就是要当“万金油”。

技术管理者,不论是项目经理,还是技术总监,首先要会选人和用人。要完成什么样的任务,选什么样的人,是领导的基本功。

技术管理者跟程序员最大的不同在于知道在有限资源的情况下,如何做出最合理的选择,不一定是最好的选择。领导者知道,用人用其长,而不会去苛求每个人都达到完美。

程序员可以谈论品味,像艺术家一样看待工作;而技术管理者谈论效果,是现实主义者。好的技术管理者,能在长期的理想和现实的结果中找到一个好的平衡。

技术管理者,关心的是外部目标、内部人员绩效和激励、质量控制、产品服务等一系列的活动,监督、评估并推进项目或产品的流程,直到产生一个可以交付的外部结果。

技术管理者的工作重心在人,在团队。他的绩效是通过组织和团队的绩效体现出来的。

从程序员到技术管理者

中国有句古话:劳心者治人,劳力者治于人。很多时候容易理解为:程序员劳力,技术管理者劳心。这种想法最容易造成程序员内心的不平衡。我想,现在的知识社会,大多既要劳心,又要劳力。只劳心,不劳力的人,有知识,没有执行和转换能力,这样的人,很难驾驭和管理真正的技术团队;只劳力,不劳心的人,不会提高自己的竞争力,自己也不会满意。

做程序员,还是技术管理者,这只是分工不同,并没有高低贵贱之分。可以看见,由于程序员和技术管理者定位和服务对象的不同,他们的知识结构的要求也有所不同。程序员看起来更技术化,便于评估,比较深入,技术管理者看起来更行政化,似乎表面,宽泛化,但都需要专业的素养和才干。

程序员也可以成为好的技术管理者,但需要积累和调整自己的知识结构和心态:要能勇敢地获取外部的力量。因为管理者的目标并不意味着他有多大的能力,而是他的团队有没有能力,有没有成效。那种认为管理者不劳而获的想法,是一种偏见。大家职责不同,责任不同。

一个优秀的技术人才,一定要选择一个优秀的团队。一个好的技术管理者,也要充分发挥技术人才的优势,这样,只有团队的力量,才可以把自己的才能成百上千地放大。

从外部来看待成长

从程序员到技术管理者,是一个众说纷纭的话题。但是,这不应该是一个非此即彼,孰优孰劣的问题。我更愿意看成是一个组织环境中,不同环节上不同的位置和选择,跟定位和特长有关。站在组织的观点来看,在一个团队的内部,是没有绩效可言的。只有团队,对外产生了价值,个人才有价值。

或许并不是所有的人都能接受这一点。

所以,当你问自己得到了什么的时候?你也应该问自己奉献了什么?什么是应该体现你的报酬?你的报酬是否体现了你的责任和承担的风险?

很多时候,不是你是否值多少钱的问题,而是在一个商业的环境中,没有贡献,就没有价值。

一个人要客观地看待自己,不论是程序员还是管理者,都不要不可一世或忘自菲薄。天生我才必有用。一个人的成长,应该从外部的趋势和影响,来学习、选择和发展。把更多时间和精力,放在建立自己的核心竞争力,找到自己事业的伙伴上。

请勇往直前,不要患得患失,不要怨天尤人,命运就掌握在自己的手中!

幸福和健康

没有任何正当的理由,让人用幸福和健康来交换所谓的前途。永远牢记:身体是革命的本钱。
转自疯狂软件

posted @ 2012-05-04 11:57 疯狂软件 阅读(139) | 评论 (0)编辑 收藏

Java程序员应该遵循的十条戒律

Java程序员有许多应遵循的守则或最佳实践方式。本文概述了每个开发者最应该遵循的10条守则或戒律,如果不遵循它们,将会导致灾难性后果。

  1:为代码添加注释。每个人都知道这一点,但不是每个人都会这么做。你有多少次“忘记”添加注释了?确实,注释不会为你的程序增加任何函数功能。但是,有多少次,看到2周前写的代码,你都记不起它是干什么的?你很幸运,那些未注释的代码是你自己写的,你脑海中还会有残存的印象。非常不幸,大多时候,代码是别人写的,并且那个人很可能已经离开公司了。有句谚语说的好:“有来有往,互惠互利”,因此程序员应该体谅彼此(还有你自己),给你的代码加上注释。

  2:不要把简单事情复杂化。我曾经这么做过,我相信你也一样。开发者都倾向于采用复杂方式解决简单问题。我们在一个只有5个用户的系统中引入EJB,为一个并不需要框架的应用实现一套框架,采用属性文件、采用面向对象解决方案、使用线程,而这些根本用不着。为什么会这么做?一些人可能不知道有更好的解决方案,但另一些人可能故意这样做来学习新知识,或仅仅是因为有趣。对那些不知道更好解决方案的人,要多听有经验程序员的建议。对于那些纯粹出于个人目的而将设计复杂化的人,我建议你要更加专业一点。

  3:记住“越少越好”并非总是如此。高效率的代码是件好事,但很多情况下,并非代码行数越少效率就越高。

  4:不要“硬编码"。由于时间紧迫,开发者总是会忘记或故意忽略这一条。然而另一种可能是,遵循这条戒律,我们就不会陷入“时间紧迫”的困境。定义一个static final 变量,增加一行代码,又能花多长时间呢?

  5:不要发明你自己的框架。不夸张地讲,已经有几千个框架存在了,大多数还是开源的。很多框架都是极完美的解决方案,并已被用到成千的系统中。我们只要关注最新的流行的框架,至少表面上要熟悉一下。一个最成功的、也是被广泛使用的例子是Struts框架,这个开源的web框架是建立web系统的极佳选择,不要试图构造你自己的Struts版本,会累死的。但你必须记住第2条(译注:原文是“第3条”,显然不对)戒律 —— 不要把简单事情复杂化。如果你要开发的系统只有3个界面,就不要用Struts:对于这样一个系统,没有足够的需要被“控制”的东西(Struts将界面做MVC划分,Ccontroller,所以作者说there isn't much "controlling" required)。

  6:对Print行或字符串说不。我知道为了调试方便,程序员喜欢到处用System.out.println ,然后对自己说过一会就删掉。但我们常常忘记删掉这些行或不愿删掉,我们用System.out.println 做测试,为什么测完后还要去改代码?这很可能导致误删一行我们需要的代码。不要低估System.out.println 的危害。

  7:注意图形用户界面。无论听上去多荒谬,但有一点我注意过多次了:图形用户界面(GUI)对于商业用户而言与程序功能及执行效率一样重要。GUI对于应用程序的成功至关重要。 IT管理者(这里是指程序开发方的IT management)常常忽略GUI的重要性,很多公司为了省钱而不雇佣web设计人员,而这些设计人员有足够的经验来设计“用户友好”的应用软件。 Java程序员不得不依赖他们有限的HMTL知识。我见过非常多对“计算机友好”而非对“用户友好”的应用程序,同时精通软件开发和用户界面开发的开发者非常少见。 如果你是一位不幸被指派做界面开发的Java程序员,你要遵循下面3条规则:

  1)不要重新发明轮子。去看那些类似应用系统的界面。

  2)首先建立一个原型。这一步非常关键。客户喜欢提前看到他们要用的东西。同样你可以得到他们的反馈,而不是你辛辛苦苦做出来一个客户不喜欢的东西。

  3)试戴用户的帽子。换句话说,站在用户的角度查看需求。譬如,一个统计的界面可以分页,也可以不分页。作为开发者,很可能会忽略分页,因为这会减少很多麻烦;而站在客户角度,这就不是一个好的方案,因为数据可能多达几百行。

  8:提前准备需求文档。每项业务需求都记入文档。这在童话故事中可能实现,而现实中很难做到。无论时间多么紧迫,无论截止日期如何迫近,你必须确保业务需求被记录下来。(这条明显悖于敏捷开发的观念,大家要独立思考,甄别是非)

  9:单元测试,单元测试,单元测试。我不准备讨论如何单元测试的细节,我只是想说这必须要做。这是编程中最基本的规则了,尤其不能忽略。如果你同事能为你的代码创建一个测试计划,那就再好不过了;如果不能,那就要自己做。做单元测试计划时,遵循下面原则:

1)编码前就写单元测试

2)保留单元测试的注释

3)对任何“有趣的”公共方法都要做单元测试(“有趣的”是指除了像最常见的getter/setter这类方法外的方法,但包含有自己内容的getter/setter 方法)

10:记住:质量,而非数量。不要待的太晚(除非有必要)。有时因为产品问题,截止期限或其他突发事件,不能按时下班。但经理不会因为你为一般问题待的太晚而感激或奖励你;他们会为有质量的工作而感激你。如果你遵循上面的列的原则,你就会写更健壮的、少bug的程序。这才是你最应该做的。(翻译文章)

转自:疯狂软件

posted @ 2012-05-03 15:40 疯狂软件 阅读(253) | 评论 (0)编辑 收藏

Java初学者的忠告

1)适合自己的图书才是最好的,最好的书并不一定适合你,看自己的情况。(如果你是一个Java初学者一上手就捧一本Thinking in Java在手里,我想你的日子是不会好过的,那样的书给有一定基础的人看的,当工具书使用的,当然有一定基础后,可以跟着上边流程学,如果你能学下来,那么你的基础就不用说了)

    2)看书要用心,多动脑,实践很重要,要抱着怀疑的态度看书。(再好的书也可能会出现错误,人非圣人吗!多练这个很重要,如果你光看不练,我想你连过几天会就会忘的差不多了!)

     3)遇到问题多查帮助文档,还可以上网站进行搜索。(现如今的搜索引擎功能十分强大,只要你能用得到就能搜到的,还担心什么,不要碰到一点什么问题,都去烦别人,这样别人会小瞧你的!可以加一些Java交流群,对于初学者可能会有一些作用,如果你已经是高手了,我认为这样的群对你的提高不会很大)。

    4)忌讳急功近利,越急就越容易走弯路。(不要急,基础虽然很简单,一个月或半年,甚至是一年,这都很正常。但出来的成效绝对是不一样的,相信你的时间不会白白浪费。)

    5)我们要精而非全,语言都是相同的。学精一门语言再转其它语言也会容易的多。基础很重要,不要贪高。(这个就不用说了,如果你精通C++,改学Java还不简单,思想你已经掌握,你要学的就是一点语法,还不容易?)

    6)欣赏他人的代码:初学者不要看,因为理解别人的思路远比自己写要困难的多。认为自己的基础到了一定的程度,可以看看一些开源的软件,因为那都是一些优秀的杰作,会对提高你的水平有很大帮助。注意方法:(先找主线——>从界面入手——>在纸上画出结构图——>然后再分步分析)

    7)在实践中提高自己的能力:边学边练,别给自己找借口。(买一些带实例的书,可以试着做一些日常生活中常用到的小程序,只有在实践中你才会发现更多的问题)。

    8)培养自己发现、思考、解决问题的能力。(能自己想办法解决,不求别人!对于初学者很重要。)

    9)心态要平衡,不要总觉得高人一等。一个事物的存在总有它的合理性。(你的技术比别人牛,这没什么,或许你是学的早,也或许你比别人反应快一点,永远不要自大,计算机是技术更新很快的行业,你不会永远都站在别人的前头的。心态平衡,不断学习,这才是王道!)

    10)可以下载视频,买书,借书,在线观看。(如果你是大学生,那么不要浪费资源,一头扎头图书馆里吧。现在网络资源,网上的视频和电子书极多,还愁找不到资源吗?)

    11)认证的价值不大,在一些企业还不是特殊认可,没必要花费大的精力去考。(个人没有去学过认证,认为价值不大,但如果你根本不缺那几个钱,又有能力的话,可以考,多少还是会有一定作用的。如果你的经济情况不怎么样,照我说,就先算了。)在职学习比较困难,比较忙,压力大,时间紧

    12)找工作,基础扎实,有一年开发经验,不用担心。你可能会有3K左右的工资了。

    13)做开发不一定要数学好,只不过你不适合做算法方面的工作。(能当程序员的,谁都不白痴,呵呵!)
  
14)没有什么捷径,如果有的话,价值也就不大了。(别梦想一步登天,给自己作一个学习过程计划,先学什么,后学什么,合理一点。如果非要说有什么捷径的话,我认为培训不错,条件允许的话,这可以省掉你很多的宝贵时间,当然选择培训机构的时候一定要慎重。因为那不只是Money的问题。)

转载:广州java培训http://www.fkjava.org

posted @ 2012-05-03 15:36 疯狂软件 阅读(136) | 评论 (0)编辑 收藏

成功开发人员须记住的8件事

1、保持学习

一个非常重要的观点是:如果你停留在一个地方不前,并不代表你能一直呆在那里,而是代表你正在落后(不进则退)。往前进并不意味着你是就能进步——这至少你不会沦落到最后(付出就会有收获) 。程序员为了保持向前发展,就需要不断学习 ,我们需要的不是慢慢的往前走,而是我们要奔跑起来!下面列出这方面的几个观点:

1)读书

2)订阅RSS和阅读一些杂志

3)参加一些研讨会,自己准备一些简报

4)学习一切可以帮助你的东西

5)教其他人其实也是教自己

2、给自己确定目标

如果不知道向什么方向发展,是很难有成就的。这一点关键是自己要有一个清晰地目标。这个应该是个长期的目标,然后要有一个目标的愿景。首先要把这个目标分 成一些小的任务,建立实现这些目标的路线图。你可以创建每月或每年你必须完成的一个任务列表,然后根据这个任务列表去实现。

3、生活中的每一个挑战都是一个机遇

在日常工作时,总是会遇到各种各样的问题。你可能会遇到一些程序的bug;项目经理分配的新任务;你同事请你帮助;你请别人帮助。这些都是一个一个的挑战。问题是:你如何去解决这些挑战?我的一个答案是:你必需调动你所有的激情去应对这些挑战,因为每个挑战就是一个机遇。

4、抱有积极态度

对待每一件事情都应抱着积极的态度。如果发现你犯了一个错误,请不要在意,因为没有人是不会犯错误的。你可以想象一下,有谁喜欢那种一遇到问题就抱怨的人 呢?如果你说“好吧,伙计们,我能做到的,请给我一分钟,我就会解决这个问题。”,然后笑着转过身就修改自己的错误,这样在别人眼里又是如何看待你呢?当你解决这个问题之后,你会感觉到异常的高兴。

相信自己的方法是正确的,自己正在快速进步。千万不要老是认为自己无法达到自己的目标。

5、给自己寻找一个导师

这并不是说你需要一个人来帮助你来完成你的工作。导师可能就是比你职别高的职员。而且他的职位是你想要去争取的。如果他的职位你争取到了,你可以再选择另外一个更高的。但是你必需一直都需要有这么一个人。也可以能督促你和支持你的朋友、亲人、恋人等等.

6、让自己公众化

如何让别人知道你呢?一个最简单的办法是写博客、提问题、帮别人解决问题。起码要google知道你吧。学会在团队和项目中分享自己的知识。如果你学了新的知识,就把它分享出来!如果你没有分享,下次再用的时候,你可能就忘记了。

7、时不时的审查一下自己,确保自己的方式正确

时不时的,你需要检查你做的方法是否全正确。检查一下是否完成即将完成的目标。如果没有,赶快找原因,加紧去完成。寻找你的薄弱环节,加强它们。这听起来 很滑稽:我认识一个技术很强的开发人员,但他的打字速度却是很慢。为什么?因为他对键盘不熟悉,又不想花10-20小时进行键盘训练。兄弟,如果你会读到 此,请务必要求自己克服此类的问题。

8、保持健康身体

这个有点像磨刀不误砍柴工。有一个故事,两个樵夫打赌砍树,一个比较强壮,另外一个比较瘦弱。强壮的人相信他会赢得,因为他没有休息,持续砍了8小时。瘦小的那位,每隔一个小时就休息15分钟。最后瘦小的那位樵夫却赢了。他赢的秘密在于休息的时候将刀磨锋利了。你的健康就像是斧头,如果斧头钝了,你将无法为自己人生道路劈荆斩刺。

来自:疯狂软件

posted @ 2012-05-03 15:29 疯狂软件 阅读(105) | 评论 (0)编辑 收藏

考虑云计算安全的几个方面

当云计算涉及到通过软件服务交付时,必要的保护措施是独立的软件提供商首要关心的事情,他们应该从所有接入点、用户以及各个角度保护他们的SaaS基础设施。

  但需要注意的是并非所有的云计算都是安全的。在大众市场上,可能会有相对廉价的云存储或者云计算服务,但都缺乏较高的企业级安全措施。

  对安全的需求度

  如果你的客户需要部署严密的安全措施,相同的控制必须在云中进行复制。如果你的数据或者声誉因为安全而受到损害,那么通过SaaS交付节约的成本对企业来说并没有太多的价值。

  当你接受提供商的云服务时,您所要考虑的不仅仅是云本身的安全保护,还要考虑网络和物理设施安全。

  云安全

  当你想把云基础设施进行外包时,你将会希望找到一个在网络、操作系统以及最佳实践等方面都有丰富经验的服务提供商。加密和VPNVirtualPrivateNetwork)服务也是必须要考虑的。卖房应提供相应的咨询服务,无论是自己提供还是通过合作伙伴,都应该提供安全风险评估、入侵测试、威胁管理服务和补救措施。

  似乎被忽视的领域是web应用防火墙服务。这些服务可以帮助拒绝无效的请求和保护应用程序。

  开发商和建筑师都说他们的网络是安全的,因为他们使用了加密技术。当优势试图偷听时加密保护了你应用程序的数据,但他并不能阻值不必要的请求。应用防火墙可以为你的应用程序创建一个“护城河”,可以阻止正在处理的无效或者是不适当的应用程序请求,从而节省了CUP资源和记忆周期,更重要的是防止了数据泄漏。

  最后,你应该了解你的服务供应商如何相应恶意攻击。你的供应商是否有一个安全的数据中心。

  网络安全

  网络安全应该保护你的SaaS环境中所有的虚拟接入点,您的供应商应该有察觉新出现的威胁和应对攻击的能力,在它们成为真正的威胁之前编写程序和指定策略,严格杜绝危险出现。

  一些供应商同时监测在互联网上的多个客户,所以他们经常能够看到并迅速接触威胁。这对独立软件开发商来说可能是一个重要的协议,很可能几天都看不到攻击,因为它可能不是直接目标。如果外部发生威胁时,厂商可以积极相应、编写规则以防止它的出现。

  物理安全

  目前,虚拟化迅速扩张让很多人不在考虑物理设施的安全。但是不管你是托管方、托管服务商或是云服务提供商,最重要的是保证你存储数据的物理设施是安全的。

  服务提供者应确保其物理设施的接入点是被保护的,利用找值班的看守、安全摄像机、全身扫描和其他的措施以防止违规行为的发生。

  在考虑物理安全的同时,还要考虑服务提供商的灾难恢复解决方案。您的数据存储安全么?存储在什么地方?会不会被加密保护,如果将您现有的数据转移到磁带,磁带是否备份加密?

就总体而言,无论你的SaaS应用程序的数据存储在数据中心、网络中、或者是云中,安全都是最重要的。IT决策者要提高警惕,对任何事物都不能过度信任。
转载于:疯狂软件

posted @ 2012-05-02 14:48 疯狂软件 阅读(150) | 评论 (0)编辑 收藏

20个数据库设计最佳实践

数据库设计是整个程序的重点之一,为了支持相关程序运行,最佳的数据库设计往往不可能一蹴而就,只能反复探寻并逐步求精,这是一个复杂的过程,也是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程。下面给出了20个数据库设计最佳实践,当然,所谓最佳,还是要看它是否适合你的程序。一起来了解了解吧。

使用明确、统一的标明和列名,例如 School, SchoolCourse, CourceID

数据表名使用单数而不是复数,例如 StudentCourse,而不是StudentCourses

数据表名不要使用空格。

数据表名不要使用不必要的前缀或者后缀,例如使用School,而不是TblSchool,或者SchoolTable等等。

数据库中的密码要加密,到应用中再解密。 (其实就是散列存储、单向加密)

使用整数作为ID字段,也许现在没有这个必要,但是将来需要,例如关联表,索引等等。

使用整数字段做索引,否则会带来很大的性能问题

使用 bit 作为布尔字段,使用整数或者varcha是浪费。同时,这类字段应该以“Is”开头。

要经过认证才能访问数据库,不要给每一个用户管理员权限。

尽量避免使用“select *”,而使用“select [required_column_list]”以获得更好的性能。

假如程序代码比较复杂,使用ORM框架,例如hibernateiBatisORM框架的性能问题可以通过详细的配置去解决。

分割不常使用的数据表到不同的物理存储以获得更好的性能。

对于关键数据库,使用安全备份系统,例如集群,同步等等。

使用外键,非空等限制来保证数据的完整性,不要把所有的东西都扔给程序。

缺乏数据库文档是致命的。你应该为你的数据库设计写文档,包括触发器、存储过程和其他脚本。

对于经常使用的查询和大型数据表,要使用索引。数据分析工具可以帮助你决定如何建立索引。

数据库服务器和网页服务器应该放在不同的机器上。这回提高安全性,并减轻CPU压力。

Imageblob字段不应该定义在常用的数据表中,否则会影响性能。

范式(Normalization)要按照要求使用以提高性能。Normalization做的不够会导致数据冗余,而过度Normalization 会导致太多的join和数据表,这两种情况都会影响性能。

多花点时间在数据库设计上,否则你将来会付出加倍的时间来偿还。
原文发表于:疯狂软件

posted @ 2012-05-02 14:47 疯狂软件 阅读(187) | 评论 (0)编辑 收藏

 

程序员的八种级别

一名软件开发人员的职业生涯会是怎样的呢?我们干着一行是因为我们热爱编程,并且在这一点上,我们非常幸运。但是,当你50岁的时候,你还会坐在电脑前编程吗?当你60岁时呢?对于那些渴望成为程序员的程序员来说,最好的职业生涯出路是什么呢? 开个玩笑,如果我告诉你,程序员可分为八种级别,你会怎么想呢?

1、不朽的程序员:这是最高层次。你写的代码并没有随你而去,而是保留了下来(万古流芳)。你会在计算机领域永垂不朽。其他程序员会研究你的成果和著作。你可能获得了图灵奖,发表过有巨大影响力的文章,或者发明了一项或多项为众人所知的基础性技术,已经影响了编程事业的发展。

介绍你的并不只是个维基百科词条——很多网站致力于研究你的生平和成就。只有很少的程序员达到这种高度。

2、成功的程序员:这些程序员既声名远扬又借助自己的编码创立完整业务,甚至整个行业。他们给自己创造了真正的自由:自己决定从事什么工作的自由。并且跟自己的同事分享这种自由。

这是大部分程序员都渴望的一种高度。能否达到这种高度往往更多的取决于业务技巧而不是编程能力。

3、著名的程序员:这也是一个不错的层次,但是美中不足是出名不能当饭吃。在编程这个圈子里,你非常有名。但是,有名气并不一定就意味着你会藉此获利来养活自己。出名很好,但成功更佳。你可能为一家著名的大公司或者有影响力的小公司工作,也可能是一个普通创业团队的一员。其他程序员对你都有所耳闻,你正对这个领域产生积极影响。

4、能干的程序员:作为一名软件开发人员,你事业有成。公司需要你的技术,找份好工作对你来说永远不是件难事。你的同事尊重你。你工作过的每家公司都在你从事的方面取得了长足的进展。但是,仅此而已,别无他长?

5、普通程序员:处在这个水平,你有自知之明,知道自己不是一个伟大的程序员——可能你永远都不会是。天赋跟成功鲜有关联。如果你拥有生意头脑和人际技巧,你会非常成功。 如果你是一名平庸的程序员,但是能够以此谋生,那么可以说你是很有天赋的,但不一定在编程方面。别低估这份自知之明,因为有自知之明的人比你想要的要少。 有没有天赋无关紧要,只要你能发现自己的强项并且持之以恒。

6、业余程序员:一名业余程序员热爱编程,这说明:他可能是一名很有前途的学生或实习生,他们正在为开源项目做贡献,或者在业余时间开发有趣的“仅供娱乐”应用程序或网 站。他们的想法以及代码表明他们充满热情并且很有前途。成为一名业余程序员是一件很不错的事情,从这个阶段可以很快成为一名有作为的程序员。

7、不知名的程序员:这是众所周知的典型的一种程序员:无名氏。他们有能力(通常会有)但不出色,可能为一家不知名的大公司工作,但那只是一份工作不是生活的全部。不过,那也没有什么问题。

8、糟糕的程序员:那些没有一点技术或能力但不知怎么就成了程序员的人。他们接触的每件事情都会成为同事们的苦难——这些员工更糟糕,他们甚至不知道在和别人合作工作。

这些糟糕的程序员有什么共同特征呢?按理说他们跟写什么样的代码无关——但不管怎样确实有关。

这种划分并不是非常严格。并不是每一名程序员都渴望在自己的职业生涯里只做同一件事。但是一名程序员在十年、二十年、三十年或者终其一生能够达到一个什么样的高度?这值得我们思考。你最敬佩哪位著名程序员?他们取得了怎样的成就赢得了你的尊敬?

简而言之,你想怎样度过此生呢?欢迎你在微博中和大家分享。
原文发表于:疯狂软件

posted @ 2012-05-02 14:46 疯狂软件 阅读(197) | 评论 (0)编辑 收藏

     摘要:   阅读全文
posted @ 2012-04-29 10:21 疯狂软件 阅读(272) | 评论 (0)编辑 收藏

我所积累的20条编程经验

1、估算解决问题所需要的时间。不要怕,承认吧!我曾见过一些程序员为了解决一个特殊问题而坐在显示器前面8小时。为自己定一个时间限制吧,1小时、30分钟或甚至15分钟。如果在这期间你不能解决问题,那就去寻求帮助,或到网上找答案,而不是尝试去做“超级堆码员”。

2、编程语言是一种语言,只是一种语言。随着时光推移,只要你理解了一种语言的原理,你会发现各种语言之间的相似之处。你所选择的语言,你应该觉得“舒服”,并且能够写出有效(而且简洁)的代码。最重要的,让语言去适应项目,反之亦然。

3、不要过于注重程序的“设计模式”。有时候,写一个简单的算法,要比引入某种模式更容易。在多数情况下,程序代码应是简单易懂,甚至清洁工也能看懂。

4、经常备份代码。在我年轻时,我就有过因硬盘故障而丢了大量代码的经历,这经历很恐怖的。只要你一次没有备份,就应当像有着严格的期限,客户明天就需要。此时就该源码/版本控制软件大显身手了。

5、承认自己并不是最顶尖的程序员 - 知不足。我常想,我对编程了解已足够多,但是总有其他人比你优秀。正所谓,“一山总比一山高”。所以,向他们看齐吧!

6、学习再学习。正如第5点所说,我经常会在手里拿一本计算机或编程相关的杂志或书(不信,可以问我的朋友)。诚然,总有很多你不知道的技术,你可以从中学习以保持不落后。如果你有一种灵巧的方式来获取你需要的新技术,那你每天都应该坚持学习。

7、永恒的变化。你对待技术/编程知识,就应像你对待股票一样:多样化。不要在某一特定技术上自我感觉良好。如果那种技术或语言已经没有足够支持,那你还不如现在就开始更新你的简历,并启动培训新计划。我能保持前行的主要原则是什么呢?至少了解两到三种语言,所以,如果某种语言过时了,你在学习新技术的时候还可以依靠另一种语言。

8、提携新人。协助并且培养初级/入门的开发人员学习优秀的编程方法和技巧。也许你还不知道,在帮助他们向更高一层前进时,你自己也在向更高一层提升,你会更加自信。

9、简化算法。代码如恶魔,在你完成编码后,应回头并且优化它。从长远来看,这里或那里一些的改进,会让后来的支持人员更加轻松。

10、编写文档。无论是Web服务的API,还是一个简单的类,你尽量编写相应文档。我曾经引以为豪的代码注释,因过度注释而有人指责。给三行代码加一行注释,只需要你几秒时间。如果那是一个比较难以理解的技术,千万别担心过多注释。如果你能很好做好自己的工作,大多数架构师、后备程序员、支持组都会感激你。

11、测试、测试再测试。我是一名黑盒测试粉丝。当你完成编码后,你“被认可”的时候就开始了。如果你们公司有QA部门,如果你的代码中有错误,那你得到的评论,会比项目经理还多。如果你不彻底测试自己的代码,那恐怕你开发的就不只是代码,可能还会声名狼藉。

12、庆祝每一次成功。我见过很多程序员在解决编程技术难题后,会和同伴握手、击掌或甚至手舞足蹈。每个人在生命中都会碰到“顿悟”。如果一个程序员高兴地跑来叫你去看他的非凡代码,也许你已经看过这样的代码100遍了,但你也应该为了这个家伙而庆祝第101次。

13、经常检查代码。在公司,你的代码要经常检查(包括自查和其他同事检查)。不要把别人的检查,看成是对代码风格的苛求。应该把它们看作是有建设性的批评。对个人来说,经常检查你的代码并且自问,“我怎样才能写得更好呢?” 这会加速你的成长,让你成为一个更优秀的程序员。

14、回顾你的代码。在看到自己以前的代码时,通常会有两种方式:“难以至信,这代码是我写的”和“难以至信,这代码是我写的”。第一种往往是厌恶的语气,并在想如何改进它。你也许会惊叹,旧代码也能复活成为一种更好的程序,甚至是一个完整的产品。第二种通常带着惊奇和成就感。开发人员应该一到两个自己完成的项目成果,能让众人不禁而立并注目而观的项目。同样,基于你优越的编程能力,你可以把过去的程序或项目拿出来,把它们更新为更加优秀的产品或想法。

15、幽默是不可缺的。在我20年的开发生涯中,我还没有碰到哪位程序员是没有幽默感的。实际上,干我们这行,幽默是一项必备品。

16、谨防那些无所不知的程序员,不愿分享的程序员,还有经验不足的程序员。当你遇到这几种程序员时,你自己要谦虚。无所不知的程序员,更想当一个英雄而不是团队成员;保守的程序员则是在编写着他们独享的代码;而经验不足的程序员则会每十分钟就来问你一下,当代码完成后,代码已经是你的,而不是他们。

17、任何项目都不会那么简单。朋友、家人和同事曾请求我仓促做一些事情,仓促做一个程序或者网站。对于这样的事,应该从双方做计划,才能做出令两方都会满意的东西。如果某人起初只是需要一个使用Microsoft Access的、只有有3个页面的网站,但来就很可能变成一个有15个页面的网站,并使用SQL Server,有一个论坛,还有一个定制的CMS(内容管理系统)。

18、任何时候不要想当然。假如你承接一个简单的项目,你可能会认为某个部分可以轻松完成。千万别这样想!除非你有一个类、组件、或者一段已经写好的代码,并且在现有的项目已经测试通过。不要认为这将是很容易的。

19、没有已经完成的软件。曾经有一位程序员告诉我,没有软件是已经完成的,它只是“暂时完成了”。这是明智的忠告。如果客户还在使用你写的程序,并经受了时间的考验。如果有机会,你仍在更新它,这并不是什么坏事,这让你不断地前行。

20、耐心是一种美德。当客户、朋友或家庭成员用电脑的时候,他们也许会受挫,进而想砸电脑,或气冲冲地离开。我一直在告诉他们,“是你掌控电脑,不是电脑掌控你。”对于用作编程的电脑,你要有一定的耐心。一旦程序员知道问题所在后,他们就会站在电脑的角度看问题,并且说“哦,这就是为什么它是这样做。”

摘自:疯狂软件

posted @ 2012-04-29 10:18 疯狂软件 阅读(179) | 评论 (0)编辑 收藏

仅列出标题
共5页: 上一页 1 2 3 4 5