社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 银行

  • 216847阅读
  • 1107回复

软件编程杂谈文章汇总

级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 39楼 发表于: 2010-12-03
让 Web 开发者们深感意外的事

作为 Web 开发者,对自己的行业前景,人人都有自己的看法,然而,任何行业都有出人意料的地方。著名的 Web 开发设计博客 Nope.com 曾向他们的读者做了一个调查,请他们列举 Web 开发领域那些让他们感到意外的事情,收到了各种各样的反馈,本文就是这次调查的结果与分析。
一个真正的符合 Web 标准的 IE 

这个消息让我们振奋,在经过 9 个版本更替后,我们终于看到了(或者说即将看到)一个真正符合 Web 标准的 IE 浏览器。在 Web 开发设计界,人们对 IE 的忍耐到达了极限,最终,很多人宣布不再支持 IE 的某些版本,IE9 的出现将改变这一现状,我们从这件事可以学到的东西是,施以压力与时间,任何顽固的东西都会改变。

移动 Web 的爆发 

移动 Web 为开发与设计界带来了变革,成为一种时尚与不可逆转的趋势。曾几何时,Web 开发设计者们认为,随着网络带宽的增加以及显示器的变大,我们的 Web 画面会越来越大,那些传统的 960 网格已经显得局促,然而事实却往相反的方向发展,Web 开始被放进那些狭窄的小屏幕,人们喜欢这种变化,随时随地用掌上设备访问 Web 站点。

我们从中学到的东西是,相对于展示效果,人们更看重方便性。

社会网络主导一切 

关于社会网络,曾经的那些质疑声还萦绕在耳,一个140个字符的博客平台有什么出息?社会网络管我什么事?我开的是公司,不是学校。然而,似乎一夜间,社会媒体网络遍地开花并迅速主导一切,老网民热烈拥抱,新网民也一拥而上。我们从中可以学到的是,当网络将人们连接在一起的时候,它所爆发的力量是惊人的。

Web 开发与设计已经成为成熟的市场 
帮人设计网站曾经是你赚外快的业余职业,是吧,如今,Web 开发与设计已经成为非常稳定且成熟的市场,专业的开发设计有大量的需求。

从 XHTML 到 HTML5 
拥有严格语法和代码规范的 XHTML 曾被认为是 Web 的未来,然而不是,Web 的未来是 HTML5。当然,导致 HTML5 受宠的不是它松散的语法(XHTML 严格的代码规范仍然是一种很好的习惯),而是它强大的原生功能,原生的媒体播放能力,本地数据库,画布等等。当 Web 从单纯的文档向应用转变的时候,丰富的原生功能是非常必要的。

苹果与 Flash 之争 
Flash 曾是众多 Web 开发与设计者的最爱,当然,它也惹恼了同样多的人。突然有一天,苹果站出来向 Adobe 发难,乔布斯在众多场合指责 Flash 不稳定,不实用,iPhone 和 iPad 均不支持 Flash,当苹果在移动 Web 领域凭借 HTML5 主宰市场的时候,Adobe 风光不再。我们从中得到的教训是,没有任何技术会成为永远的明星。

JavaScript 重放异彩 
曾经,JavaScript 是用来让一些画面在网页上飘来飘去的,如今,JavaScript 成了 Web 开发与设计中不可或缺的东西,现在的 Web 开发者甚至不再考虑用户是否禁用了 JavaScript 这样的问题。当 Web 逐渐成为一个应用平台的时候,JavaScript 成了这个平台中最强大的工具。

jQuery 成为真正的明星 
JavaScript 虽然强大,但很难用,至少在 2006 年之前是这样的,接着,一个叫 jQuery 的 JavaScript 框架面世,这个开源的,跨浏览器兼容的 JavaScript 框架拥有强大的功能与简单的语法,迅速风靡 Web 开发与设计界,并成为真正的明星。如今,运行 jQuery 的著名站点多不胜数。

CSS 动画 
CSS 是网页式样语言,动画,那不是 JavaScript 的事吗?然而,从 2007 年开始,Webkit 开始尝试 CSS 动画,并最终将这一梦想变成现实。
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 40楼 发表于: 2010-12-06
敏捷软件开发

词源

敏捷一词来源于2001年初美国犹他州雪鸟滑雪圣地的一次敏捷方法发起者和实践者(他们发起组成了敏捷联盟)的聚会。

[编辑]价值观

雪鸟会议共同起草了敏捷软件开发宣言。其中最重要的部分就是对一些与会者一致同意的软件开发价值观的表述:

  • 人和交互重于过程和工具。
  • 可以工作的软件重于求全责备的文档。
  • 客户协作重于合同谈判。
  • 随时应对变化重于循规蹈矩。

其中位于右边的内容虽然也有其价值,但是左边的内容最为重要。

[编辑]原则

宣言中还包括以下原则:

  • 对我们而言,最重要的是通过尽早和不断交付有价值的软件满足客户需要。
  • 我们欢迎需求的变化,即使在开发后期。敏捷过程能够驾驭变化,保持客户的竞争优势。
  • 经常交付可以工作的软件,从几星期到几个月,时间尺度越短越好。
  • 业务人员和开发者应该在整个项目过程中始终朝夕在一起工作。
  • 围绕斗志高昂的人进行软件开发,给开发者提供适宜的环境,满足他们的需要,并相信他们能够完成任务。
  • 在开发小组中最有效率也最有效果的信息传达方式是面对面的交谈。
  • 可以工作的软件是进度的主要度量标准。
  • 敏捷过程提倡可持续开发。出资人、开发人员和用户应该总是维持不变的节奏。
  • 对卓越技术与良好设计的不断追求将有助于提高敏捷性。
  • 简单——尽可能减少工作量的艺术至关重要。
  • 最好的架构、需求和设计都源自自我组织的团队。
  • 每隔一定时间,团队都要总结如何更有效率,然后相应地调整自己的行为。

[编辑]对比其他的方法

敏捷方法有时候被误认为是无计划性和纪律性的方法,实际上更确切的说法是敏捷方法强调适应性而非预见性。

适应性的方法集中在快速适应现实的变化。当项目的需求起了变化,团队应该迅速适应。这个团队可能很难确切描述未来将会如何变化.

[编辑]对比迭代方法

相比迭代式开发两者都强调在较短的开发周期提交软件,敏捷方法的周期可能更短,并且更加强调队伍中的高度协作。

[编辑]对比瀑布式开发

两者没有很多的共同点,瀑布模型式是最典型的预见性的方法,严格遵循预先计划的需求、分析、设计、编码、测试的步骤顺序进行。步骤成果作为衡量进度的方法,例如需求规格,设计文档,测试计划和代码审阅等等。

瀑布式的主要的问题是它的严格分级导致的自由度降低,项目早期即作出承诺导致对后期需求的变化难以调整,代价高昂。瀑布式方法在需求不明并且在项目进行过程中可能变化的情况下基本是不可行的。

相对来讲,敏捷方法则在几周或者几个月的时间内完成相对较小的功能,强调的是能将尽早将尽量小的可用的功能交付使用,并在整个项目周期中持续改善和增强。

有人可能在这样小规模的范围内的每次迭代中使用瀑布式方法,另外的人可能将选择各种工作并行进行,例如极限编程

[编辑]敏捷方法的适用性

在敏捷方法其独特之处以外,他和其他的方法也有很多共同之处,比如迭代开发,关注互动沟通,减少中介过程的无谓资源消耗。通常可以在以下方面衡量敏捷方法的适用性:从产品角度看,敏捷方法适用于需求萌动并且快速改变的情况,如系统有比较高的关键性、可靠性、安全性方面的要求,则可能不完全适合;从组织结构的角度看,组织结构的文化、人员、沟通则决定了敏捷方法是否适用。跟这些相关联的关键成功因素有:

  • 组织文化必须支持谈判
  • 人员彼此信任
  • 人少但是精干
  • 开发人员所作决定得到认可
  • 环境设施满足成员间快速沟通之需要

最重要的因素恐怕是项目的规模。规模增长,面对面的沟通就愈加困难,因此敏捷方法更适用于较小的队伍,20、40人或者更少。大规模的敏捷软件开发尚处于积极研究的领域。

另外的问题是项目初期的大量假定或者快速收集需求可能导致项目走入误区,特别是客户对其自身需要毫无概念的情况下。与之类似,人之天性很容易造成某个人成为主导并将项目目标和设计引入错误方向的境况。开发者经常能把不恰当的方案授予客户,并且直到最后发现问题前都能获得客户认同。虽然理论上快速交互的过程可以限制这些错误的发生,但前提是有效的负反馈,否则错误会迅速膨胀。

[编辑]用于敏捷开发团队的项目管理工具

已经有一些项目管理工具用于敏捷开发,可以用它们来帮助规划,跟踪,分析和整合工作。 这些工具在敏捷开发中扮演的重要的角色,也是知识管理的一种方法。

通常包括:版本控制整合,进度跟踪,工作分配,集成发布和迭代规划,论坛和软件缺陷的报告和跟踪。

[编辑]方法列表

目前列入敏捷方法的有:

  • 软件开发节奏,Software Development Rhythms
  • 敏捷数据库技术,AD/Agile Database Techniques
  • 敏捷建模,AM/Agile Modeling
  • 自适应软件开发,ASD/Adaptive Software Development
  • 水晶方法,Crystal
  • 特性驱动开发,FDD/Feature Driven Development
  • 动态系统开发方法,DSDM/Dynamic Systems Development Method
  • 精益软件开发,Lean Software Development
  • Scrum
  • XBreed
  • 极限编程XP Extreme Programming
  • 探索性测试

[编辑]敏捷技术

QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 41楼 发表于: 2010-12-06
程序员:你的代码为谁而写

几周前,布莱斯在网上发帖,漫谈自己对编程工作的看法。在Reddit上引起了广泛讨论。讨论的焦点集中在程序员的等级——“优秀”、“良好”、“糟 糕”和“极差”。我发现,讨论中一些用语十分不妥。"好"与"坏"都是道德评价,评价之后似乎便给人贴上了永久不变的标签。


  

 
  可以肯定的说,我曾被另一个程序员称作是 “极差”的程序员。我也承认,我确实写过一些极差的代码;但我也自认为曾写过相当多的“好”代码。

  要评判很久以前写出的代码是优是劣很不容易,因为现在已经不知道当时为什么编写这些代码,也不知道为谁编写了这些代码。

  问问自己,现在正为谁编写代码?


  为了按时交付任务

  也许最常见的原因就是为了按时交付任务。走走捷径,宁可复制粘贴删掉几行代码也不愿意重构代码,然后匆匆交工。我们都这么做过,也都知道这是不妥的。


  为了突出的考核结果 

  当管理者本身不懂代码,却有一套程序员“好坏”评价标准时,会出现什么情况?程序员要理清这套标准并不困难,因为他们的特长就是解决难题,然后他们会努力完善自己,从而迎合评价标准。代码行数、已解决Bug数量、注释的密度、代码深度等都可能是衡量编码人员的指标,但这些又都是相对标准,而不是绝对标准。也有些新颖的衡量手段(比如“已删除代码的行数”)。


  为计算机编写

  从某种意义上来说,所有的程序都是为计算机编写的,但计算机应当程序员最后才考虑的。计算机只注重语法,不注重注释和变量名称。大多数程序语言也不注 重间 距与代码格式化。当然,你还是要选择正确的算法,但不要想着通过微小的优化来加速算法。在for循环中,使用i++还是++i并不重要,编译器和JITs 会解决这些问题。在考虑优化算法之前,还是应该先把代码写的清晰易懂。要知道编码在使用通用模式时,计算机和编译器运行的更快。


  为了自己

  虽然学习一门新的程序语言很有趣,不过如果你将整个公司架构都建立兴趣之上是不切实际的。Hacker News上曾有一则相关故事,Lambda the Ultimate网站上还有更糟糕的案例。如果你是为自己写代码,你可以不加注释,可以随意使用糟糕的变量名,甚至使用其他“怪癖”,但这样写出来的怪异 代码别人很难看明白。不过没关系,因为每个人都会时不时想在某些事上找点漏洞出来。


  为后来者编程

  编程是把抽象观念转换成计算机可以理解的形式。即使是细微的抽象观念,转换成代码也是很不简单。因此很多软件项目都衍生出了成千上万甚至是上百万行的代码,相当于一本代码书。通过有限的语法与其他人交流这些概念,大多数时候都注定失败。

  我所写的最出色代码就是我愿意花时间来添加注释、列出代码流、甚至附上一些ASCII文字图的代码。编写过程专注于如何把自己抽象概念,与今后将有可 能读到这些程序的、不幸的程序员进行传递和交流。我认为专注于这种交流,代码会变得越来越好,因为你会更深入地思考抽象概念以及如何对正在做的事情分层, 而不是一味的编写代码和转到下一个程序块。

  注释使代码变得更好理解。每当你再次做某事的时候,总会比上一次更好。当你在编写代码和注释时,就是将抽象概念向读者解释了两遍。这会迫使你思考更 多。很多次我写完一个代码以后都会对它写一个注释。然后从头修订代码,甚至改变了一些小地方,例如选择更好的变量名称,来更好的交流想法。


  评价代码/程序员

  综合前文所述,可以看出,编程人员孰优孰劣确实难以定夺。因为难以明确他们编写代码目的。你可以考评代码,但你无法得知代码编写者当时的心理状况。或 许那天是星期五,他急着要赶去维加斯度周末;也许是程序出了问题,他不得不采取紧急补救措施,但这些补救措施一用就是5年;也可能他原本就是个不合格的程 序员。


  也许编程真是一门艺术?

  我不知道如何公正地考核编程人员,我想也没几个公司能做到。看看程序员的面试流程就清楚了,他们只不过坐在桌前被问几个问题而已;根本没有什么标准测试能让计算机科学专业的学生证明自己已经掌握了必要的技能。


  编程工作带有太多艺术色彩,所以不可能通过测试手段或者固定的考核标准来评价。

  你知道还有哪个领域也是通过视觉媒介将抽象的概念传达给其他人?美术和绘画作品。今天,我们或许会说梵高是个大人物(其画作闻名于世),但是仍然有人不喜欢他的作品。类似表达抽象概念的事物不应该用“好”或“坏”来评价。

  程序员可以做到的就是时刻提醒自己,编程的目的要正确。不能仅仅要求编译器能识别就行,不能为了迎合某种考核标准,也不能为了按时交工而编程。相反,应该适时注解或写文档,解释或记录代码功能。只要用心,你就能编写出优秀代码。
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 42楼 发表于: 2010-12-07
如何使用搜索技巧来成为一名高效的程序员

没有人是完全独立的孤岛,每个人都是整体的一部分。——约翰·多恩
对于缺乏编程知识的人来说,完全有可能编写一个网页或小程序。如果在用Google搜索相关示例时幸运的话,可以搜到现成的代码。即使是经验丰富的程序员,通常也会为了节省时间和精力而在网上搜索解决方案。


如果不借助搜索技术、网络及集体智慧,现代化高效编程是难以想象的。因此,搜索技巧对高效程序员变得愈发重要。

现在,我们不需要了解和记住如何解决众多的编程问题,可以采用搜索技术。我们正变得更加高效、高生产力,并能够解决更多的问题。但这是否意味着在构建软件时,拥有好的搜索技巧就足够了呢?本文将讨论,搜索技巧在程序员知识的形成过程中的作用,以及如何高效使用搜索技巧。

知识的类型及它在程序员大脑中如何成长。



有三类知识:

概念知识(为什么、是什么、如果—— 语义上的)——理解软件系统构建过程中的概念、原理、关系及主要方法。根据这类知识,能够找出体系结构或代码必须按特定方式设计的原因,以及从中选择最佳设计方案的备选方案和逻辑是什么。概念知识,不是指用特定编程语言解决特定问题,而是对问题的长远看法和理解。

    用途:对复杂的开放式问题寻找新的解决方案,并创建稳健的软件系统。收获:学习计算机科学、体系结构以及编程概念,在实际实现和经验的基础上,构建自己的理论。

实践性知识(如何做 —— 过程中的)—— 关于如何解决特定编程问题的知识。这类知识不需要深入理解实现方法选择过程中隐含的概念及基本原理。搜索技术在这里最重要,因为对有限的编程语言问题所采取的特定解决方案,搜索能相对容易的加以共享并说明。
    用途:用已证实的和已知的解决方案快速解决问题,而不是每次都重新发明一种新的方法。收获:搜索现有的解决方案,通过例子学习或提出自己的解决方案并以后对其重利用。

隐性知识(专业知识、经验及直觉)——基于软件系统实现过程中所积累的个人经验,在大脑中形成的内在知识。通过强大的大脑功能,隐性知识可以综合并协调其他两种知识。这类知识很难传授,因为它的大部分都存储在我们的潜意识中。在特定环境下,它和直觉一同发挥作用,能够在经验、对概念性和实践性知识的反馈和评估的基础上,制定最佳决策。
    用途:利用自己的专长、经验及直觉来实现最佳解决方案。收获:构建软件并从结果中学习知识。



设计模式(还有架构、领域及其他)是不同类型知识相结合的有趣的例子:“如何做”的例子,这些例子中隐含的概念及实现过程中积累的经验。这种知识的表现方式是模式成功及广泛应用的原因之一。

随着越来越多的可供使用的实践性解决方案和示例出现在网络上,人们大脑中的实践性知识的价值越来越小。我们不需要记住实践性知识。现在我们能够处理软件构建过程中几乎所有可能遇到的常见编程问题。然而,除能够解决问题的示例或从哪搜索这些示例以外,一名大师级的程序员还知道更多的知识。他能够提出自己的解决方案,制定大部分最佳决策,并采用最好的方式应用它们。此外,很难在网上找到新的、复杂的、领域性的及特定环境下的问题的解决方案。而且,对所有重要的软件工程,在制定优秀解决方案的过程中,都需要高水平的软件开发理论、这些理论的应用经验、对系统的深入了解、问题空间及环境等相关知识。

因此,在软件开发过程中,概念知识和隐性知识仍然是非常重要的。在使用搜索技术时,我们应当努力扩充各种知识,而不是仅仅解决特定问题。随着解决更高级问题的能力的提高,你会取得成功,成为更高效的程序员。



可解决实际问题的高效搜索

A. 查找
    1. 定义——弄清楚要解决什么问题,并以要查找的内容为焦点。网络上有如此多的有趣的材料,以至于搜索过程能轻易地占掉你全部的工作时间(和个人时间)。2. 检索(使用标准的Google、代码搜索或其他的检索引擎)—有很多关于如何高效的使用检索引擎的建议。3. 浏览结果(内容的质量、可信度及专业技术的水平;如果资料的可信度过低,无须再看)-> 阅读 -> 评估(人力物力、所需工具及函数库)
B. 使用
    1. 复制代码 – 单独复制(针对这一目的,带有长钉技术的显式单元测试最适合)2. 清除代码 – 仅保留最小限度、相关性代码,清除解决方案中的其它代码。3. 在系统中应用代码。
C. 学习
    1. 理解——你做了什么及你为什么那样做——从代码和实现中学习。2. 扩充知识——a. 实践性知识:解决问题的特定方法、技巧及风格;b. 概念知识:学习新概念、提炼现有的并构建自己的概念;c. 隐性知识:明智地使用并学习搜索到的解决方案,经验会自然而然地得到增长。3. 收集(链接、意见、参考文献、阅读清单)—任何对你今后搜索、发现及学习有用的有趣信息。为这些目标积累知识。
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 43楼 发表于: 2010-12-13
重构代码程序员的20种死法

我在这里,就列举一下Refactorman的种种死法,以警后人:
一、一边重构,一边要完成日常任务……
1. 疲于奔命,过劳而死。
2. 吃领导给的鸭梨太大被噎死。
3. 满脑子都是代码,在上班路上不留神被撞死。
4. 冷落了女友,受失恋打击跳楼而死。
5. 无暇社交,不懂人情世故,失意而死。
6. 为了说服领导和同事,心力交瘁而死。
二、重构过程中……
7. 被以前的混账代码气死。
8. 被以前的混账代码搞崩溃,神智错乱而死。
9. 终于明白问题只是冰山一角,力有未逮,忧愤而死。
10. 泥足深陷,举步维艰,进退维谷被活活困死。
11. 自己昏天黑地,看其他同事却吊儿朗当,逍遥快活,心理不平衡致忧郁而死。
12. 重构过程中,踩中前任留下的地雷,被炸得体无完肤而死。
13. 一日偶遇以前代码的作者,怒不可遏,将其一通乱砍,再鞭尸三百,然后切腹而死。
三、千辛万苦,大功告成……
14. 系统重构后性能提高了?漏洞消除了?对不起,领导们没兴趣,失落而死。
15. 系统重构后出现了新Bug,多半会小题大作,被批斗而死。
16. 马上接到通知系统功能要大升级,吐血而死。
17. 同事依旧我行我素,继续在系统中倒垃圾代码,痛心疾首而死。
18. 重构将系统中的阴暗面曝光,被同事记恨,领导排挤而死。
19. 过了不多久,发现系统又乱成了一团,比以前好不到哪儿去,悲愤下一头撞死。
20. 离职后偶遇前公司的新任维护者,被其乱刀砍死再鞭尸。
各种死法中,最后一种,我们比窦娥还冤枉。所以强烈推荐大家还要练一门武功以防身。什么武功,就是:“心惊肉跳、杞人忧天、无中生有、力不从心、行尸走肉、庸人自扰、倒行逆施、废寝忘食、孤形只影、想入非非、呆若木鸡……”。这门传说中的黯然销魂掌,其中一招一式,正是我们最好的写照。
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 44楼 发表于: 2010-12-14
2011年需要关注的9大编程语言

本文作者Rob Diana是国外知名技术博客Regular Geek的创始人,曾写有大量关于编程语言以及语言职位需求趋势的文章。这篇博文中,Diana将通过对Tiobe编程榜和编程语言职位需求方面的数据分 析,展望编程语言未来一年的发展。下面就让我们一起来看看,2011年需要关注的9大编程语言。

我没有对那些语言进行分类——例如,分成传统语言和脚本语言等,因为我想把它们放在一起,对它们的各个方面进行综合分析。由于存在大量来自于其他行 业的干扰,所以一些就业方面的数据很难包括在图表中。尤其是Go和R,它们受到的干扰最大,所以它们并没有包括在图表中。但是,由于它们的出身 (Google)和用途(数据分析),它们应该被包括在这篇文章里。首先,让我们看一看这些语言在Tiobe排行榜中的排名(其中包括了Tiobe排名和 RWW的Dataist等级):
◆Go (Tiobe排名: 21 , RWW的Dataist等级: 4)
◆R (Tiobe排名: 26, RWW的Dataist等级:3)
◆Lua (Tiobe排名: 27, RWW的Dataist等级:3)
◆Scheme (Tiobe排名: 29, RWW的Dataist等级:3)
◆ActionScript (Tiobe排名: 37, RWW的Dataist等级:2)
◆Erlang (Tiobe排名: 49, RWW的Dataist等级:3)
◆Groovy (Tiobe排名: 50-100, RWW的Dataist等级: 3)
◆Scala (Tiobe排名: 50-100, RWW的Dataist等级:2)
◆Clojure (Tiobe排名: 100+, RWW的Dataist等级:3)
有趣的是,Tiobe排名和Dataist等级似乎没有什么相关性。如果有的话,也是逆向的相关性,但是,现在我会忽略这种相关性。那么,和排行数据比起来,职位需求的情况如何呢?
首先,让我们看一看来自于Indeed.com的职位需求趋势图
相对增长趋势图是我喜欢的趋势图,因为它可以显示出明显的变化。对于我们来说,通过这种图,可以看出哪种语言已经为实现突破性的一年做好准备了。两 个最明显的趋势是Lua的增长势头强劲,以及在过去18个月中,Clojure呈现出爆炸性的增长趋势。其他值得关注的趋势是Erlang, Groovy 和 Scala的增长。在这里,Scheme 和 ActionScript相对持平。
现在,虽然我已经呈现了大量的数据,但是我还没有做具体的说明。在明年,所有这9门语言都应该被关注,因为在某个领域或其他的领域中,它们都比较活 跃。从某种程度上来说,Google搜索,GitHub项目,StackOverflow的问题和职位需求趋势都存在缺陷,但是,如果你把它们放在一起来 看的话,那么它们会为你会勾勒出一幅有趣图景,这副图景可以展示出哪些语言更加活跃,接受程度更高。不再啰嗦了,这是明年需要关注哪些编程语言的排行榜:
1,Lua
在GitHub和StackOverflow上,这门语言比较活跃。它在Tiobe上的排名也比较稳定,但是,更加重要的是,Lua的职位越来越多了。对于Lua来说,这个相对的趋势表明Lua将会成为主流的编程语言。
2,R
数据分析和大数据处理逐渐成为每个Web站点不可分割的一部分,处理这些数据群的语言也逐渐流行起来了。和R语言有关的职位需求数据也是相当有趣的。
3,Clojure
虽然在Tiobe的目录中,Clojure并不是很流行,但是,在某些编程领域中,它是很流行的。它的职位需求趋势的增长表明,在明年,它的接受程度会大大增加。
4,Go
只有Tiobe把它当成一门流行的语言。在Dataist Tier中,它的排名并不好,而且职位需求趋势也不是十分可靠。但是,对于它的“娘家”Google来说,它可能不需要存粹的,系统化的增长。
5,Erlang
这门语言已经诞生好几年了,在各个领域发展的都不错。随着像XMPP(确切地说应该是eJabberd),PubSubHubbub那样的实时技术的持续增长,2011年,它的排名可能仅次于Python。
6,Scala
这是最有趣的趋势之一。在Dataist Tier中,Scala表现的很好,但是它没有排到Tiobe的目录中。Scala的职位需求正在稳步地增长,采用者(例如:Twitter)也在日渐增多,在明年,Scala的接受程度可能会得到极大地提高。
7,Groovy
无论如何,我认为Groovy已经错失良机了。它是一门坚实的脚本语言,它的职位需求的增长情况也不错,但是它如何把它自己和Ruby, Python, Erlang 和 Scala区分开来呢?
8,Scheme
无论出于什么原因,这门语言都不肯“离去”,实际上,它已经引起大家一些兴趣了。它的职位需求的增长情况不容乐观,在它第一次“大爆发”以后已经至少过去30年了,明年,我们可能也不会看到它的第二次“大爆发”。
9,ActionScript
ActionScript之所以包含在这个列表里是因为它在Tiobe 和 Dataist Tier的排名都很高。但是,这门语言的就业趋势并不好。可能它的“热度”正在退去,所以在明年,你也应该留意一下这门语言。
我知道大家会有很多的评论,而我也正在寻找可能会流行起来的其他语言。在你的评论中,让我知道我错过了哪些编程语言。

QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 45楼 发表于: 2010-12-16
程序员阿士顿的故事

前几天有人在 Stack Exchange 上提了一个问题 How can a new programmer impress the software engineer (boss)?(作为新手程序员如何给软件工程师出身的老板留下好印象?),Joel Spolsky(Joel on Software 的主人,《软件随想录》的作者) 看到了这个问题,他没有正面回答,而是在下面讲了悲催的程序员阿士顿的故事。我很喜欢这个故事,于是就大概翻译过来分享一下。翻译得很仓促,错误难免,见谅。故事的意思大家自己解读吧,每个人应该都有不同的理解。
我告诉过你有关阿士顿的事情吗?

阿士顿是一个典型的吃玉米长大的农场男孩,他的父母曾经是嬉皮士,从来没有真正地同心协力过,直到有一天他的妈妈继承了密歇根农村的15亩地。然后 他全家搬到了那里,买了一对奶山羊,靠在农贸市场把有机山羊奶酪卖给雅皮士们谋生。

那个时候阿士顿才10岁,他需要每天早晨4点起床给那些该死的山羊挤奶,这活非常累。阿士顿很喜欢上学,因为上学就意味着不需要跪在羊粪里工作了。整个高 中他都异常努力,希望可以拿到一所名牌大学的奖学金,然后他就可以离开农场了。在大学里,他发现大学生活比农场的生活轻松多了,所以搞不明白为什么每个人 不能像他那样每科都拿到A。他选择了软件工程作为自己的专业,因为他深信一个工程师绝对不需要早晨4点就起床。

阿士顿就这样从学校毕业了,他对软件产业并没有很多了解,所以他去了招聘会,申请了3份工作,并且都拿到了 offer 。然后他挑了一个给钱最多的offer:年薪高达 32,000美元,这是一家位于密歇根西南部的大家具公司,为全世界的企业生产办公小隔间(cubicle farm)。入职之后,因为阿士顿再也不想回到农场了,所以他决定给他的老板查理谢尔曼留下一个好印象。

“这个可不简单”,坐在他隔壁的同事杰夫说:“她在这里也算是个传奇人物了。”

“你的意思是?” 他说。

“嗯,你还记得几年前吗?那个时候到处都是关于千年虫的话题。”

阿士顿可能是太年轻了。“千年虫?”

“是这样的,没有人预料到在60年代写的程序在2000年还会继续运行,所以当时给年份只留了2个数字的存储空间,也就是说 1999 被存储为 99 。所以当 2000 年到来的时候,计算机系统就会崩溃,因为它会试图将 100 存储成2个数字。”

“真的?我还以为那只是个传说,” 阿士顿说。

“世界上所有其它的公司都没有发生什么事故,” 杰夫说。“因为它们花了数十亿美元去检查每一行代码。但是在我们公司,当然了,因为他们是狗娘养的混蛋,所以他们不愿意做任何测试。”

“完全没有做吗?”

“几乎没有。零测试。所以你瞧,当人们在2000年1月2号开始工作的时候,发现所有东西都不能工作了。他们不能打印生产计划,甚至不能打开半个装 配生产线。没有人知道如何进行工作,工厂差不多停滞了。”

“你在开玩笑。” 阿士顿说。

“绝对没有。工厂整个都停止运转了。这个时候查理出现了。她那个时候还是个新人,曾经在微软,可能是NASA,也可能是其它机构工作过……没有人清 楚为什么像她那样的牛人会到我们这种地方工作。然而她坐了下来,然后开始写代码。然后写代码。继续写代码。

查理整整写了九天代码,这九天她没有睡觉,没有吃东西,有些人说她甚至没有去过洗手间。她检查了一个又一个系统并且逐个修复了它们。那真是一件壮观 的事情,老天,那些需要被修复的可是 COBOL(一种非常古老的编程语言)系统。在整个工厂处于停滞状态的时候,查理派人去大学图书馆找来了古老的 COBOL 手册。装配线上的工人站着直哆嗦,因为连恒温器也有千年虫问题。而查理则一杯接一杯地喝咖啡,像一个疯婆子一样不断敲击键盘。”

“哇。她没有去过洗手间?”

“呃,那个部分可能有稍微那么一点点的夸张成分,但是她的确连续9天工作24小时。总之,在1月11号的时候, 就在开工前一天的5分钟,她走出了她的隔间,来到了打印机面前,按下了一个按钮,然后,奇迹出现了!生产计划打印出来了,团队计划也打印出来了。一切都是 完美的,经过了完美的格式化,使用了一个稍微较小的字体把 ‘2000’放到了原来写‘99’的地方,她甚至还写了一个新的优先级优化系统,可以帮助工人在不得罪那么多客户的情况下赶上过去9天的生产进度。所有的 装配线都开始工作,好像从来没有出现过错误一样,供暖也恢复了,打印出来的发票的年份由‘19100’变成了‘2000′。而且,之后谁也没有找到过一个 bug.”

“得了吧!” 阿士顿说。“谁也写不出没有bug的代码。”

“她做到了。我亲眼看到的。这是他们第一天无间断地生产了相当于以往两天生产的小隔间。”

阿士顿目瞪口呆。“这简直是史诗阿。我怎么才能做到那样?”

“你做不到,伙计,没人能做到” 杰夫边说边回到了自己的电脑前面,继续玩已经玩了4个多月的斯波克和蝙蝠侠之间的在线战争游戏。

阿士顿不是一个轻言放弃的人,他发誓某一天他也会做一些富有传奇色彩的事情。但现实情况是,再也没有出现另外一个千年虫问题。而且在密歇根的那个地 方,没有人可以提供一丁点儿关于如何写好程序的信息。事实上几乎没有什么事情需要程序员去做。分配给阿士顿去做的都是一些无聊的小项目……有一次他花了三 个星期来处理这样一个事情:由于两个不同的销售税区域使用了相同邮政编码,导致在某个县的销售税是错误的。有趣的是,这个县位于纽约一个人烟稀少的地方, 那里没有人买过办公小隔间,公司在那里也从来没有一个客户,所以他写的代码永远都不会运行。

日子就这样过去了。

两年来阿士顿一直带着热情和兴奋投入工作,迫不及待地想有所作为,想做一些了不起的事情。与此同时,他的同事却在上网冲浪,给朋友发短信,连续几个 小时地玩电脑纸牌。

坐在他旁边的那个同事杰夫,只有一个工作内容:每周更新一个“显示本周有多少人在工作中受伤”的 Excel 电子表格。从来没有人受过伤。每周杰夫都打开那个电子表格,然后移动到页面的底部,在那里输入日期和一个数字0,点击保存,然后就完成了工作。

阿士顿甚至帮杰夫写了一个宏来自动化他的工作。杰夫不想被逮到,所以他拒绝安装这个宏。从那之后他们的关系就变僵了,真是尴尬。

在阿士顿工作两周年的那天早晨,他和以往一样开车去工作,然后忽然意识到了一些事情。

他写过的任何一行代码都没有运行过。

过去两年内他做的任何一件事情都没有对世界产生过什么影响。

而且在密歇根州的这个地方气温他妈的有24度,天空是灰色的,弥漫着臭味。他开的本田车也是一坨垃圾,在这个小镇上他没有任何朋友,他自己也什么都 不是。

当他开车到林肯大街的时候,他看到了左边他所在的那个家具公司。在公司园区前面飘扬着三面旗帜:美国国旗,伟大的密歇根州的州旗以及一面有公司标识 的红白相间的旗帜。他开车进入了转弯车道等待左转,他的前面有一长排车,在高峰期的时候需要等四到五个红绿灯才可以左转,所以阿士顿有足够的时间来回想他 写过的代码有没有哪怕一行是被别人使用过的。

没有。他怔怔地留下了眼泪。

然后他没有左转,直接往前开了出去,这差点酿成了一起交通事故。阿士顿忘记了自己已经打了转向灯,而打了转向灯就意味着你不能直接往前开。

他沿着林肯大道开了下去,然后上了高速公路,他只是不停地往前开,一直来到了机场。他把他的垃圾本田扔在了航站楼的前面,心里非常清楚它会被拖走。 他甚至没有去关车门就径直走到了柜台前面买了下一趟飞往旧金山的航班的机票,20分钟内起飞。然后他上了飞机,永远地离开了密歇根。

英文原文

有人在这篇文章下面开玩笑说:“The story continues: He went to work for Google, where he worked on Wave. And again, noone was using his code.” (故事继续:他去了Google编写 Google Wave. 所以,还是没有人使用他的代码。:D )
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 46楼 发表于: 2010-12-22
我的丈夫是个程序员
我在11年前认识了的我丈夫。当时是南缅因州大学新生入校的日子,我带着吉他去宿舍。他饶有兴趣的盯着我的吉他。之后他敲响了我的房门,自我介绍道:“嗨,我叫Adam,我就住在走廊的对面。我是个计算机程序员!”
他做了一很勇敢的决定。 10年前当程序员并不像今天这么“火”,这个行业并不被社会重视,他似乎也根本不在意这些。不管怎样,我们相爱了。我当时并不懂编程,但却被他那义无反顾 的精神和毫不在意被人当作怪人的态度打动。是发现了他也弹吉他使我们走到了一起。如果仅是他住在走廊我的对面,命运也不会做出这样的安排。


在随后的一周周,一月月,一年年,他慢慢的吸引了我的注意力,他会对着他的游戏机的硬件清单大发雷霆,他能在虚拟世界里的游戏竞赛中为我独尊,他在ColdFusion平台上制作了他的毕业论文项目,他会用长篇大论来解释他的编程理论。我会安静的坐着,惊奇的看他把一台PC机拆成零碎。我听他讲编程上的问题,看他开发网站。与此同时,我还只是朦胧的感觉到我未来的职业应该是跟科技和英语有关,但我着实对Adam的生活发生了兴趣。


几年以后,我很自然的就知道了,“Ruby”并不是指的七月的生日石,而“Ruby on Rails”也不是邻区的新潮人在火车轨道上举行的敬拜珍贵宝石的奇怪活动。几年时间里,我事实上也培养出了他的同样的兴趣。2005年末他深深的喜欢上了Ruby,我全力支持他,而且也知道Ruby的不可思议之处。几年后,当我决定了开始学习Ruby,我在博客上写了一篇关于Ruby社区的文章。很多人都很奇怪为什么一个像我这样的Ruby新手会对Ruby社区有如此的了解。答案是,我在决定学习Ruby编程之前已经关注这个社区很久了。在我曾经打开TextMate编辑器、保存第一个.rb文件之前,我就知道了这个社区里有那些大人物,Ruby的发展趋势,和历史事件。


当你的伴侣开始跟你讲编程的问题时,或讲最新的测试框架时,你的眼神里是否显露出一种呆滞和恍惚?事情并不是你想象的单调乏味。问他问题,尝试着去理解!如今当我遇到女人们时,我并不回避给她们谈我的工作,谈我喜欢的电脑游戏,谈我着迷于 D&D 游戏以及其它这样的荒诞事情。通常我得到的回复是这样的几句:“编程?我想我丈夫做的好像也是这方面的。”对于此,我总是问道:“哦,真的吗?他用的是什么编程语言?”她们的回答每次都一样:”语言?哼,我可不知道。不止一种吗?我并不真正知道他在干什么。我对这些东西没兴趣。“


这每次都让我感慨万分。你嫁给了一个人,可是你对这个人花去将近40-50%的时间去做的事情一无所知——除了工作名称。我们是否可以把今天的高离婚率和他们对配偶的生活缺乏兴趣之间画一条危险的关联线呢?当两个人第一次相遇时,一个人很容易根据自己的”看法“而坠入爱河。但我认为如果配偶不能够对对方的爱好和生活工作有真正的了解,那么这两个人将很难经受的住生命的各种起起伏伏,艰难和考验,要知道,生活中每天都有挑战。如果你对配偶的每周40小时的工作内容没有一个基本的理解,你们就不能成为一体。


我并不是在建议当你遇到钟情的对象时要放弃自己个性和个人兴趣。而是要你睁大眼睛,用你的伴侣的视野去体验这个世界。我承认,有时Adam会在某天晚上对元数据编程谩骂个没完没了,此时我也就跟他的思想走不到一起了。但通常情况下我会投入到他的兴趣当中。而且为什么不呢?我爱他,这就要求我去了解他。而了解一个人就是要你们去相互讨论和理解对方的兴趣。 Adam会花数百小时艰难的听


Ani Difranco, Dar Williams, 和 Iron & Wine 唱片,我会在一旁神经质的给他解释所有的歌词。在我的鼓励下他学会了打网球,尽管现在不得不忍受每次被他打败的结果。在大学里他看过我的芭蕾舞表演,他甚至都知道了不少其中的姿势的叫法了。下面的照片是我和Adam在徒步翻越缅因州Tumbledown山时拍的。它见证了Adam自愿从计算机旁走开,参加到我喜欢的户外运动中的事情。他很顽强。






徒步旅行 hiking up Tumbledown Mountain in Maine


参与到你的伴侣的兴趣中并不是一件难事。如果你觉得很难,那你也许要思考一下自己是不是太自我了。即使朋友之间,我也努力的聆听和理解他们的兴趣和爱好。我经常会听到一些新奇的东西,经常我会为自己找到了一些新爱好。


就我来说,如果当Adam在奇怪的跟计算机大喊大叫时,我只是发呆,那我就不会有今天的生活。


那是无数的小时的一起玩视频游戏,一起深夜编写手册,一起为新应用做头脑风暴式的讨论,一起野营旅行,一起听乡村音乐才铸就了我们之间的关系。即使你跟你的伴侣在事业上并不是相似的道路,通过对他工作和喜好的了解,你也可以使他为你打开他的心扉。这能扩大你的视野,帮助你减少生活中的不愉快。你们应成为一起工作的一体。我并不是像Adam那样做职业编程的;我也没有向那方面发展。我懂编程,但不幸的是,自小就没人给我积木做训练,在学校和家里也从来没人鼓励我学数学。工程学和解决问题的才能从来就没有培养出来。所以,当我想对编程感兴趣时,这对我的难度看起来比其他人大。但我的强项是写作,编程方面和技术方面的题材对我是个巨大的兴趣


– 所以,能得到Intridea社区管理员的工作让我的世界真正的兴奋起来。我关注着我喜爱的世界,我能感受到它的脉搏,我所做的一直给我带来回报,给我快乐。


所以,如果你和新朋友们在一起,想办法培养自己对他们爱说的事情的兴趣。如果你和老朋友在一起,通过询问他们的工作、倾听他们的回复来再次发掘你的生活爱好。不要假装爱好。不要做那种连她丈夫使用什么编程语言都不知的女孩子。你要做那种让你的丈夫的朋友吃惊于你还知道Java时什么的酷妻子,不做那种在讨论Ruby社区里的自由派时说出“亲爱的,我不知道你原来还是个珠宝商哪!”的妻子。
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 47楼 发表于: 2010-12-31
成为更优秀的开发人员必要一步-定位你的核心竞争力
原文作者罗布·沃林(RobWalling)从事 Web应用开发10年之久,担任过业内顾问、自由开发人员和全球最大的信用卡预付公司City of Pasadena的开发经理。现居住于加州中部城市弗雷斯诺(Fresno)。关注并指导IT创业,著有《开发人员创业指南 / ADeveloper’s Guide to Launching a Startup》一书。以下是此系列的第二篇。


多年来,商业顾问一直指导企业要“知道你的核心竞争力。”也就是说,要“了解自己的优势,并坚持下去。”。例如:哈雷戴维森的摩托车世界闻名。 但在香水行业,他们可能就不那么优秀了。世界上最好的六发式左轮手枪有一部分出自史密斯威森公司,但是我却不认为他们的自行车也能如此成功。麦当劳嘛…好 吧,我不会说他们很会做食物,但是他们却非常擅长卖出大量的食物。但是他们绝不会,我的意思是永远不会把它兑换成现金,然后到拉斯维加斯赌场去做龙虾三明 治。


知道自己的核心竞争力可以帮助开发人员远离麻烦。在我的职业生涯中,我大多是在编写web应用程序,并且自认为很擅长这个工作。但是也有一些我 从未做过,也不会马上做好的事情:编写编译器、创建一个超高速搜索应用程序和实现一些我想到的加密算法。这使我想起了一个故事…


我当时在合作维护一个很成功的电子商务网站,我们在思考一个加密密码的方法,这样它们就不用以纯文本形式储存了。网站是用Java写的,我大约 6个月之前用过Java,但即便是6个月过去了,无论如何我还是不能在Sun公司提供的文档中查到任何信息(有人知道如何高效地使用搜索工具么?)。(编 注:推荐阅读《如何使用搜索技巧来成为一名高效的程序员》。)


对文档进行了几个小时的彻底搜查之后,我放弃了,打算编写一个快速简单的加密算法对密码进行散列处理。取每个字符的ASCII值,加点什么数,除以点什么数…不管怎样,始终都是数字,对吧?


我最终实现了。然后我们发布了这个应用程序。不出所料,几天之内人们一直抱怨无法登录。最初我想这肯定是某种诡异的巧合;十个人同时忘记他们的 密码。我已经准备好调用文件了,直到大约调查了20分钟以后,我发现,当字符串中有两个字符是可见的ASCII码范围的边缘字符时,我的加密算法并不能真 正地起作用。它确实处理了那些值,可是加密结果却是不可见字符,也被称为“控制”字符。


控制字符每跨越一个边界,不管是从数据库到应用程序、还是从应用程序到浏览器,都可能会因为层与层之间错误的编码而产生意外变化,所以这给我增添了许多困难。果然,一些错误的ASCII解码导致了一大批人无法登录。


这个案例让我学到了坚持自己优势的重要性。多次成功之后,我们经历了第一次挫折。好在我们没费多大力气就修复了它。


坚持自己的优势绝不表示你不该涉及新事物。恰恰相反,你必须不断学习来加固自己的核心竞争力,否则就可能落伍。当然,在这点上一定要明智。(编 者注:Rob文中蕴含的意思可能是:要有选择性地学习新事物。例如:核心竞争力是Web开发,那么,应该选择和Web开发相关的新事物学习,而不是转而钻 研加密。)


从web应用程序到桌面应用程序的跨渡并不是很大。从web应用程序转到编译器,(虽然有可能)这是很困难,远非看一两个教程就可以搞定的事 情。当然,还要远离加密那个更繁琐的东西!对于那些完全超出你知识范围的任务,你先要花大量的时间做调查、渐渐熟悉这个主题、然后要慢慢学习,而不是复制 粘贴你第一眼看见的示例代码。
QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
级别: 管理员
发帖
8532
金币
2762
威望
3231
贡献值
0
元宝
0
只看该作者 48楼 发表于: 2011-01-04
程序员的三个境界1
1 引子

都说海阔凭鱼跃,又有多少鱼能跃出大海?都说天高任鸟飞,但真正能一飞冲天的,也不过是寥寥数鹰而已;在IT圈里流浪的程序员,当青春逝去、渐至而立之年时,又有多少人黯然退出?30岁,似乎宣告了程序人生的终结。
从学会写第一个Basic程序起,已过去了15年,我也曾为30岁烦恼过。近日《神雕》热播,杨过在独孤剑圣的剑冢中发现宝剑若干,见证了独孤剑圣在人生不同阶段对剑道的领悟。忽有所感,联想起古圣今贤的论述,结合自已这些年来的经历,不禁豁然开朗。
程序之道,在于悟,悟透表象后面的真相。程序人生,大致可分为三个阶段:
n 编码阶段:凌厉刚猛,无坚不摧,弱冠前以之与河朔群雄争锋

n 设计阶段:重剑无锋,大巧不工,四十岁前恃之横行天下

n 思想阶段:四十岁后,不滞于物,草木竹石均可为剑。自此精修,渐进于无剑胜有剑之境

本文针对普通程序员的实际情况,对这三个阶段进行解说,并给出了“升级”的秘笈。所述观点,不适合IT狂人和天才——因为我不是。
2 编码,技巧作先锋
2.1   阶段释义

老张:小王,昨天讨论的那个EJB接口,已经实现了吗?
小王:我已经实现了,现在客户端可以通过EJB与服务器进行通信了。
上述对话,取自于某项目组的会议纪录,老张是这个小组的开发经理。小王毕业一年,在项目组中主要从事代码编写工作。每天上班,老张会给小王分配当天的工作,告诉小王有哪些Java接口,需要写多少个Java类,具体有什么要求等等。小王按照要求,写完这些类后,交给老张,一天的工作就完成了。衡量小王的能力的标准是,看他是不是能做好具体的事,即“我能做(I can do it)”。
小王是典型的第一阶段中人。该阶段中人,通常是入门三年内的,初窥门径,斗志昂扬。在网上常看到的“VB好还是DELPHI好”“.Net好还是J2EE好”等贴子,多数都是由这个阶段的人提出,人气值剧旺(这是合理的,符合人才的金字塔结构),往往争吵得头破血流也不罢休。笔者也曾因此与同班一MM大吵出口,如今回想,深感当年之可爱。独孤剑圣弱冠前,手持无名利剑,凌厉刚猛,与河朔群雄争锋。程序员也一样,手持“编程语言”利剑,以“面向对象”为招式,东征西战,编出代码无数。
2.2   应该做的事
找一家有正经事干的公司,打一枪换个地方的不要。这是重中之重。“蓬生麻中,不扶自直,白沙在涅,与之俱黑”,现阶段的程序员,是无力改变现状的。如果你所在的团队不能按正规方式进行较大型软件产品的开发,那你所能学到的东西就会少许多。如果是正规开发团队,而且有前辈愿意尽心尽力地教你,那就是捡到宝了,不给钱都行。
从技术角度,这个阶段的人,关注细节是必修课,追求的是技巧这个层次。“如何才能用最少的语句实现表达式求值”“i++++i有何区别”等是最关心的问题。当技巧的积累达到一定程度时,应付日常工作将比较轻松,此时信心爆棚,最喜欢的口头禅是“天底下没有编不出来的程序”,技术特点是对某种编程语言(如JavaC#)非常熟悉,甚至达到“回字有四种写法”的境界。凡事必追根究底,有股子“语不惊人死不休”的蛮劲。
笔者没有任何贬义,相反,是褒义,因为这是必须经历的。佛云:“既未入迷,何言解脱?”如果你是工作三年内的同行,那么应以“入迷”为荣。上学时,老师常教导我们“先把书读厚,再把书读薄”,只有“深入”,才能“浅出”,也是这个道理。
2.3   不应该做的事
年少气盛,固然可爱,但若因此而鼻孔朝天,则是大大的不妥了。你的许多同事,API没有你熟悉,编程也没有你快,但他们能为企业创造的价值却可能比你大(为什么?看下文)。时下流行“态度决定一切”,此时的你,应以低姿态为主,傲气会让你短视。
“技术代表一切”可能是你的信仰。但你的老板可能对技术根本不感兴趣,老板关心的是你能为公司创造多大的价值。许多黑客甚至养不活自己,因为单纯的自我陶醉式的攻击、骚扰、破坏并不能创造价值,通常都是在改行后(例如当安全顾问),他们的技术才能用于创造价值,才能使自己过上好日子。许多黑客则干脆是双重身份,平时从事着另一份职业。所以,如果想挣更多的钱,那你就不能迷信技术(屠龙之技有何用?),而是要审视你所做出的贡献。许多牛人觉得自己水平很高,为什么老板就是不给加薪?反思一下,自己给公司挣了多少钱吧。
2.4   局限性
1、锋芒有余,韧劲不足。该阶段的人,锐气太盛,遇到挫折后容易气馁,轻言成败往往是他们的缺点。(什么?没有锐气?是谁,是谁把你招进公司来的?)
人不可有傲气,但不可无傲骨,傲骨体现在面对困难上。要勇于用抽茧剥丝的精神,去磨,去啃,相信吧,只要你的困难不是想发明质能方程,最终一定会被你搞定的。事实上,你遇上的问题,大多数都可以通过Google、百度搜出答案来。
2、与具体的语言或编程工具绑定得比较紧,受语言的限制较大。
3、需要良好的体力。人到中年,体力上往往拼不过刚毕业的学生,这就是所谓的“程序员30岁问题”的原因。我有一些朋友,已过而立之年,却还在苦苦寻找编码的职位。虽然我很同情,但爱莫能助,如果这种情况继续下去,“寻寻觅觅,冷冷清清,凄凄惨惨戚戚”将是必然的结果。
朋友,赶快升级吧。
2.5   进阶指南
1、多记多写。好记性不如烂笔头,把各种想法写下来,把经典的代码摘录下来(最好用源码工具来管理,推荐VSS),有价值的东西,还可以发表在博客中(俺们那个时候苦啊,网络不发达,呕心沥血之佳作,却只能孤芳自赏),这些就是你的财富,在关键时刻拿来就能用;
2、别忘了挖井。不知是否听说过两个和尚的故事,原文不在此粘贴了,大意是一个和尚天天挑水,另一个除了挑水外,还在寺庙附近挖井。若干天后,第一个和尚还在挑水,第二个和尚已经挖好井,不用再挑水了。编码好比挑水,作为本职工作,自然是要卖力地挑,好争胜的,不妨跟人比比谁挑得多。但在业余时间,可以多看看《软件工程》、《设计模式》、《人月神话》、《极限编程》、《UML》……
3、由外而内,勤修内功。什么编程啦,什么算法啦,统统都是外功。外功练好了,内功也能跟着长进。内功是什么?很多。现阶段最需要的是:灵活的头脑、关注细节的态度以及与人为善的处世技巧。
灵活的头脑,使你能快速学习新东西,这是最基本的。
关注细节的态度让你能“象福特一样捡起地上的纸片”(如果不知道福特的故事,上Google搜去吧),工程实施现场出现的问题,多数都是由于编码人员的疏忽;经典错误“空指针”和“数组越界”,你检查了吗?几十年了,“缓冲区溢出”仍然是黑客的最爱。
与人为善的处世技巧,使你有良好的人缘,前辈愿意帮助你,晚辈愿意投靠你,领导愿意提拔你,哇,好处多多,实惠多多……能否进阶,就靠这了。
(常云:先做人,后做事。无论是程序员还是艺术家,这个道理都是普遍适用的,贯穿人生的各个阶段——而这恰恰又是刚参加工作、涉世未深的新人们容易忽略的。所以在此提出,下文就不再赘述了。)
2.6   阶段小结
适用人群:工作三年内

    入:设计好的类、接口和算法

    责:按要求编写类和接口的具体实现代码

    出:具体的代码

阶段目标:我能——I can do it

技术特点:注重技巧,对具体的编程语言非常熟悉

胜任职位:软件工程师、开发工程师

升级秘笈:多学习软件工程、设计模式等与具体编程语言无关的知识

参考薪水:6000以下(仅供参考)

QQ: 378890364 微信:wwtree(省短信费) 紧急事宜发短信到0061432027638  本站微博:http://t.qq.com/wwtree QQ群:122538123
描述
快速回复

您目前还是游客,请 登录注册
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容