`
guiven
  • 浏览: 27772 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

编程目标:开发人员如何提高能力

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

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

  从第一步到第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

  原文:Jason Rudolph  翻译:敏捷翻译 - 唐小娟
分享到:
评论

相关推荐

    Visual Studio 面向软件开发人员和 Teams 的 IDE 和代码.zip

    这些教程适用于面试准备阶段,帮助候选人复习和巩固Visual Studio知识,提高解决实际编程问题的能力。目标是帮助面试者更好地应对技术面试中可能遇到的Visual Studio相关问题,提升面试成功率。 **其他说明:** 虽然...

    mysql connector java(mysql数据库JDBC驱动) v5.1.7Jar安装包.rar

    通过使用该驱动,开发人员可以轻松地连接MySQL数据库,并进行数据的读取、写入、更新和删除等操作,从而提高开发效率和数据处理能力。 其他说明:该驱动具有高性能、稳定性和安全性,可以帮助开发人员轻松地连接...

    ProjectDeployer:开发人员的项目部署

    这样,您最终得到一个简单易懂的配置,以及一个描述应该执行的操作的groovy脚本(或Java程序),该脚本可以极大地提高可读性和调试能力。 假设以下配置文件: <!-- Deployment example for an application ...

    Excel_VBA_编程教程(完整版)

    Visual Basic 的应用程序版(VBA)是Microsoft 公司长期追求的目标,使可编程应用软件得到完美的...有了VBA 以后,多种应用程序共用一种宏语言,节省了程序人员的学习时间,提高了不同应用软件间的相互开发和调用能力。

    PIC单片机编程助手

    本书结合作者的开发应用试验,介绍了美国Microchip公司的PIC系列单片机的开发应用概况及其源程序的建立和汇编过程,并以PIC16系列产品为例介绍了目标程序的软件模拟仿真调试技术及其一些开发应用的演示试验和开发...

    verilog的150个经典设计实例

    这些设计实例旨在帮助Verilog编程者深入理解数字电路设计的基本原理和Verilog语言的应用,提高其设计能力和开发水平。 适用人群:适用于具有一定Verilog语言基础和数字电路设计经验的硬件工程师、电子工程师、学生...

    C#范例开发大全 刘丽霞 源代码

    实例教学:以应用为目标,用实例的方式讲解,提高动手能力 视频教学:每个实例都对应一个多媒体教学视频,高效、直观 应用广泛:涵盖C#窗体开发、数据库应用、网络开发和其他高级技术 步骤详细:每一个实例均给出了...

    新版Android开发教程.rar

    � 源代码完全开放,便于开发人员更清楚的把握实现细节,便于提高开发人员的技术水平,有利于开发 出 更具差异性的应用。 � 采用了对有限内存、电池和 CPU 优化过的虚拟机 Dalvik , Android 的运行速度比想象的要...

    基于Javamail的邮件收发系统(系统+lw+开题报告+任务书+外文翻译+文献综述+答辩PPT)

    项目旨在培养学生的技术开发能力和学术写作能力,同时增强他们对邮件通信技术的理解和应用。 4. 其他说明: - 通过系统开发,参与者将掌握Javamail技术和系统设计的能力,为未来邮件系统开发和相关领域工作打下基础...

    2024 Visual Studio 的基本使用教程

    这些教程适用于面试准备阶段,帮助候选人复习和巩固Visual Studio知识,提高解决实际编程问题的能力。目标是帮助面试者更好地应对技术面试中可能遇到的Visual Studio相关问题,提升面试成功率。 **其他说明:** 虽然...

    互联网公司Java面试题及核心知识点

    适用人群:本资源适合具备一定Java编程基础的程序员和软件开发者,尤其是那些需要处理并发问题或开发高并发应用的开发人员。无论你是初学者还是有一定经验的开发者,本资源都能帮助你系统地学习和掌握Java并发编程的...

    基于python的-22-疫情防控下医院人员调动系统--LW-源码.zip

    在学习阶段,你可以通过运行和分析源码,深入理解Python语言的特性和编程思想,提升编程实践能力。在项目开发中,你可以借鉴源码中的优秀设计模式和实现技巧,提高代码质量和开发效率。此外,这些源码还可以作为教学...

    C#潮流计算和Visio二次开发画电气接线图

    人力方面只需开发人员本人经过几个月的时间进行分析设计与实现,而在软硬件方面只需一台计算机和相关的软件即可。在整个开发过程中充分考虑了各个模块之间的独立性和可维护性,开发成本和运行成本以及维护成本都比较...

    软件设计师中级软考全套官方参考资料及辅导书

    正在从事软件开发和设计的人员,用于提高自己的技术水平和专业能力; 高校计算机科学、软件工程等相关专业的师生,用于学习和了解软件设计师中级考试的相关内容。 本套资料的目标是帮助考生全面掌握软件设计师中级...

    Access+2000中文版高级编程

    Access2000中文版高级编程 目录 第一部分 编程基础 1 第1章 宏与代码 3 1.1 何时使用代码代替宏 4 1.1.1 何时用宏 4 1.1.2 何时用代码 4 1.2 宏到代码的转换 5 1.2.1 使用DoCmd对象 5 1.2.2 与宏...

    深入PHP与jQuery开发 pdf格式

    本章会向你介绍常用的JavaScript库和它们的设计目标,以及为什么大多数Web开发人员选择使用jQuery。你也将学到jQuery的基本工作原理,包括它如何在项目中应用,以及它的内核(强大的选择器引擎)如何工作。 1.1 为...

    PIC单片机实用教程——提高篇 pdg 李学海

    本书结合作者的开发应用试验,介绍了美国Microchip公司的PIC系列单片机的开发应用概况及其源程序的建立和汇编过程,并以PIC16系列产品为例介绍了目标程序的软件模拟仿真调试技术及其一些开发应用的演示试验和开发...

    水文资料数据库管理系统开发及应用(1).doc

    这就要求当前的开发人员在实际工 作中,能够开发出一个接口程序,使其专门管理整编计算机程序的输入输出文件。从当 前我国水文资料管理的实际状况出现,其数据库的开发应用,该系统的应用需求主要体 现在以下几个...

Global site tag (gtag.js) - Google Analytics