`
lettoo
  • 浏览: 35092 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
博客专栏
58ccff5b-5ca6-387a-9c99-a277f31a9e51
我和Java数据库操作的那...
浏览量:9466
社区版块
存档分类
最新评论

[转载]编程目标:开发人员如何提高能力

阅读更多

  英文原文:Programming Achievements: How to Level Up as a Developer

  一个优秀的程序员如何能练就成一个卓越的程序员?

  先等等,暂时不谈卓越,先谈谈如何成为一个优秀的程序员。

  从第一步到第N步并没有明确的路线图。事实上,第N步到底是什么还不确定。就像逻辑型思维的开发者一样,缺乏明确的目标会让从入门到精通的道路变得异常崎岖。

  过去的几年中,我花了不少时间来思索这个问题。我该如何从一名能力尚可的程序员修炼成一个真正优秀的程序员呢?

  成功是什么?

  当我对成功有清晰的目标、量化的标准的时候,我就能发挥我的最大潜力。比如,我想实现5分钟跑完一英里这个目标。好吧。这个路程很容易测量,成 功的界限分明。我很容易知道跑一英里需要多久,网上也到处都是提高跑步速度的建议和训练计划。我可以选择一个计划并付诸努力,我深信我最终能够实现目标。 这是一个神奇的可量化的计划,因此,每个星期我都可以检测到距离我的终极目标还有多远。

  但是如何界定你是否成为了“足够优秀的程序员”呢?一言蔽之,难以界定。这个目标从一开始就太主观,太模糊,太简单,无法量化。那么我们能找到能量化的东西吗?

  我们都有过一些提高我们技能的经验。我们可能曾经学过一门开启我们思路的新语言。我们也可能曾经有过一套完美的设计方案,但直到最终投入生产时 才发现它漏洞百出,但我们因此而成长。有一些经验增长你的技能,有一些让你遇见反模式(注:反模式是指软件开发中经常被用到的但效率不高的模式。),并让 你认知它们为什么是反模式。正是这些经验给你上了课,影响了你的思维模式,改变了你解决问题的方法,最终改善了你的设计。而你是否获得了某种经验,这是显 而易见的。把经验当做是我们的收获或许很有趣。

  所以,虽然这需要付出时间,但我现在学会了适应成为“一个真正优秀的程序员”这一目标的不可量化性。如果一个程序员依靠经验取得了某些进展,那么我们就能有一个清晰的路线图来实现“成为真正优秀的程序员”这一终极目标。我想这个路线图应该是这样的:

  • 1. 确定哪些技能能够帮助程序员进步
  • 2. 着重积累某一个技能的经验
  • 3. 直到这个技能完全掌握(成功攻关!)
  • 4. 反复思考这个技能,直到融会贯通[A]
  • 5. 重新回到第二步,选择一项新的技能

  如何更好的开始第一步呢?下面列出了一些编程目标,我粗略的分了一下类。[B]我会在本文的结尾和你一起讨论下想法。

  编程目标

 

  学习不同的编程语言范例

  • 用汇编语言写一个应用
  • 用函数式语言写一个应用
  • 用面向对象语言写一个应用
  • 用基于原型的语言写一个应用
  • 用逻辑编程语言写一个应用
  • 用Actor模型写一个应用
  • 用Forth语言写一个应用[C]

  扩宽对我们开发时使用的基本组件的了解:

  • 写一个网络客户端(如HTTP, FTP客户端)
  • 写一个设备驱动程序
  • 写一个B叉树数据库
  • 改进一个现有的库包,来获得更好的用户体验
  • 写一个提供插件模型的应用或框架
  • 写一个测试框架
  • 写一个程序语言

  更上一层楼:不断的练习,积累

  • 完成五个code katas (Kata是来自日本武术的概念,通过不断的重复和练习来提高技艺)
  • Koan 编程来学习一种你想学的语言
  • 参加编程进修课程
  • 阅读SICP ,完成所有的练习

  编写程序并开源:

  • 为开源项目贡献力量
  • 让别人接受你的补丁
  • 获得一个重要的开源项目的提交权限
  • 发布一个开源项目
  • 优化一个开源项目的代码,详细记录并分享出来。

  通过教导别人来提高自己[D]

  • 做一个绘声绘色的演讲
  • 在一个本地用户组面前演讲
  • 在一个会议上演讲
  • 开设一个训练课程
  • 发布一个教程
  • 发布一个开源项目的有建设性代码审核
  • 写一本有关编程的书

  关于这些目标

  现在让我们来多说一点。注意这些目标都是可量化的。每一个都有个布尔值:你要么完成了,要么没有。例如,虽然很难界定你是否掌握了一门函数式语 言,但是非常容易确定你是否用函数式语言写了一个应用。后者是可观测的,可量化的,布尔值。以上所有的目标都具有这一特性──可量化性。

  无可否认,这个可量化性并非无懈可击。就拿在一个会议上进行演讲来说,你当然可以做一个很烂的演讲,然后还可以拍拍胸脯说你实现了这个目标。不 过既然你是我这篇博客的读者,我假设你想成为一个优秀的程序员,你是一个对自身要求很高的人,不会是仅仅完成了某个任务就沾沾自喜的人。

  既然我们在讨论改善,那么你对这份列表有什么改进意见呢?

  这个列表作为GitHub的有效依据,你们可以随意fork并添加更多的成绩。(确保它们是可量化的。)

  或者fork之后,你可以划分出你已经取得的成绩。你还可以为你正在努力的目标做上标记。(可以参考Justin Blake, Pierre Chapuis, Yann Esposito的分支)

  你也可以写评论,什么经验让你变得更为优秀,以及你希望下一步实现什么目标。

  注释

  [A]不得不强调下第四步。想要更出色的实现目标,你必须在你进行下一步之前停下来回想一下,问问自己到底学到了什么。花些时间写下些想法,更好的做法是,和他人分享,与其他完成同样任务的人作个对比,看看你的学习效果。
  [B]在coderwall.com这个网站,你可以更详细了解以目标为驱动的学习方法。
  [C]Forth本身就是一个语言范例。
  [D]我想起Paulo Freire 的一句名言:“传授知识本身就是在学习传授知识的艺术...”

  -------------------------------------------------------------------
  译文出处:伯乐 在线- 职场 博客 - 程序员
  译文链接:http://www.jobbole.com/entry.php/1420

分享到:
评论

相关推荐

    下一代数据编程:服务数据编程

    SDO的开发并非源于对底层数据访问技术的替代需求,而是针对现有数据编程技术分散且难以统一的问题提出的解决方案。Java平台和J2EE虽然提供了丰富的数据编程模型和API,但它们往往特定于某种数据源类型,如关系数据库...

    unix 编程应用问答中文版

    ### Unix编程应用问答知识点概述 #### 1. Unix/C编程文化背景 - **Unix与C语言的历史**: Unix操作系统和C语言是由Dennis Ritchie和Ken Thompson等人在20世纪70年代开发出来的。这一时期的创新不仅推动了计算机科学...

    网络转载matlab格式 羊了个羊.rar

    通过Matlab实现"羊了个羊"游戏,不仅展示了Matlab强大的图形处理能力,也为编程爱好者和学生提供了一个有趣的学习平台,让他们能够在开发和玩耍中掌握编程逻辑、数据结构以及图形用户界面设计等重要概念。...

    转载:cglib动态代理介绍(一)

    - **AOP(面向切面编程)**:在Spring框架中,CGlib常用来实现类级别的AOP代理,当目标类没有实现接口时,Spring会自动选择CGlib来生成代理。 - **性能优化**:对于那些不支持接口或者性能要求较高的场景,CGlib比...

    ArcEngine开发

    6. GIS桌面应用程序开发: 教程的目标是帮助学习者掌握如何使用ArcEngine开发GIS桌面应用程序,包括但不限于地图显示、图层管理、属性查询等。学习者通过本教程的学习,能够理解ArcEngine的体系结构,学会使用Arc...

    OAKS16-MINI FuLLKit

    - **远程调试器 (KD30)**:允许用户通过网络连接到目标设备上进行调试,提高开发效率。 - **闪存编程软件 (flashstert)**:用于将代码写入目标设备的内嵌闪存中。 ##### 4.2 硬件组件 - **OAKS16-MINI M30262F8GP...

    VC socket传送文件的例子(转载)

    在IT行业中,网络通信是至关重要的部分,而Socket编程则是实现这一目标的关键技术。本文将深入探讨基于VC++的Socket编程,特别是在文件传输中的应用。标题"VC socket传送文件的例子(转载)"揭示了我们将讨论如何...

    FIBOCOM G500 OpenCPU 编程应用设计说明_V1.0.1.pdf

    - GCC是GNU Compiler Collection的缩写,这是一套编译器工具集,能够支持多种编程语言编译成目标机器的可执行代码。 - 在开发过程中,需要创建和编译用户程序源代码,之后下载到模块的FLASH中独立分配的区域。 - ...

    arthas命令总结(转载)

    【Arthas命令总结】 ...总结,Arthas作为强大的Java诊断工具,其丰富的命令集和高级特性为开发者提供了便捷的问题定位和优化手段,提高了开发效率。通过熟练掌握Arthas,开发者能够在面对复杂系统时更加游刃有余。

    A20蜂鸟开发系统使用说明

    美睿视讯A20蜂鸟开发系统是一款针对A20平台设计的综合性开发工具,它允许开发者搭建开发环境、下载和编译代码、制作固件以及进行系统定制。本使用说明手册旨在提供A20蜂鸟开发系统的完整操作指南,包括但不限于环境...

    转载:ARM裸奔程序如何使用C库

    在嵌入式Linux系统开发中,ARM架构的处理器被广泛使用。"ARM裸奔程序"是指没有操作系统支持,直接在硬件层面上运行的程序。这种程序通常用于开发底层驱动、实时系统或者微控制器应用。在裸奔程序中,开发者需要直接...

    supermap 2000 开发教程

    根据给定的文件信息,以下是对“supermap 2000 开发教程”相关知识点的详细解析: ### 一、SuperMap2000概述 - **定义**:SuperMap2000是由北京超图地理信息技术有限公司研发的一款开放式地理信息系统(GIS)基础...

    Learning Node.js Development

    它基于Chrome V8 JavaScript引擎,使得开发人员能够在服务器端使用JavaScript进行编程。 - **Node.js特性**: - **异步非阻塞IO模型**:Node.js的设计充分利用了事件驱动的非阻塞IO模型,非常适合构建高性能、可...

    暑假做网站项目的实践报告范文.doc

    同时,与非技术人员的沟通能力也是开发者必备的软技能。 10. **学习与自我提升**:报告中提到快速自学新知识,如在短时间内掌握新技能,反映了自主学习能力和适应能力对于IT从业者的重要性。 通过这次实践,学生...

Global site tag (gtag.js) - Google Analytics