`
izuoyan
  • 浏览: 9223625 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论
阅读更多

"我自己知道,近几年也一直在用,但就是说不出来,直到最近几天才能够表达"--叫作Think in Code,也就是用代码思考,同时也把代码当成自己思想表达的方式。正如哲学家用文字设计、诠释思想,程序员'说话'用的是代码,这就是一个程序员的境界,也只有代码是无歧义的"。


  --究竟要怎样的努力才能做到像你一样?

  --就是时间,我觉得任何人写十几年的程序,估计都能和我差不多。做程序员,很多人会觉得是吃青春饭的,但我要说,如果大家能静下心来做到三十几岁,一定会发觉这是十分惬意的一件事情。

  袁红岗话不多,和其他同事站在一起,穿着简直可以用随便来形容。不经介绍,你一定不会想到面前这个"老袁"就是中国Java及J2EE核心技术领域公认的技术权威,金蝶中间件的首席科学家。

  "那些都只是虚名而已",老袁平静地说。

  36岁的老袁其实并不老,但十几年的程序员生涯却足够资深。他的"作品"包括:行业内最早基于Windows平台的财务软件;国内最早的基于三层结构技术的应用软件系统;国内首家拥有完全自主知识产权并通过国际J2EE认证的应用服务器……

  "编而优则不仕",老袁的想法仍是程序员本色:"回过头来看,所做产品卖了很多,说明中国有那么多人在用我们写的程序,这才是最有成就感的。如果我做管理工作,那就默默无闻了,就算做到比较高的管理位置又能怎样?"

  "那究竟要怎样的努力才能做到像你一样?""就是时间,我觉得任何人写十几年的程序,估计都能和我差不多。做程序员,很多人会觉得是吃青春饭的,但我要说,如果大家能静下心来做到三十几岁,一定会发觉这是十分惬意的一件事情"。

  没有捷径,但有方法

  做一个程序员,老袁不爱谈技术,而以讲究方法著称。几年前,老袁曾在网上发了个贴子,谈《做程序员的基本原则》,结果短时间内的访问量居然达到了数十万次之多,成为名副其实的精华贴。方法对于程序员的重要性,用那里头的一句话来说,就是"世界上并没有成为高手的捷径,但一些基本原则是可以遵循的"。

  最近见到老袁,他最得意的却是自己才总结出来的"编程思想"---"我自己知道,近几年也一直在用,但就是说不出来,直到最近几天才能够表达"---叫作Think in Code。

  所谓的Think in Code,也就是用代码思考,同时也把代码当成自己思想表达的方式。在老袁看来,正如哲学家用文字设计、诠释思想,程序员"说话"用的是代码,这就是一个程序员的境界。"也只有代码是无歧义的"。

  如今的老袁写起程序,一来"在设计的时候,不需要任何其他的开发工具,只需要代码,对象设计、功能设计都可以直接定义,用代码方式表达出来",二来"写到后来不再需要另外的文档了,写的东西已经表达了我的思想"。设计或是编码,可以自顶向下,自底向上,或者两者融合,都可以自由选择。很有点随心所欲的境界。

  如果选择了自顶向下的设计路径,老袁就会把最高层的这些接口设计好,下面的细节就暂时放着,留待日后细化,反之亦然。等程序的代码结构有了,再将这尚不可交付的代码结构做一个测试、重构,找出里面的缺陷,优化里头的细节,使代码更加合理简洁,变成一个可交付的版本。每天大家都下班后,老袁启动一个自动编译和测试的程序,第二天一来,就知道自己前一天的工作里面有没有什么错误。

  同样,老袁也对一些标准化的软件开发模型很不感冒,比如CMM认证之类。在老袁看来,过于规划化的流程把软件开发变成了一种很不自然的事情。老袁更喜欢一种循环开发的模式,写程序的时候,软件的设计、编码、测试都融合在一起进行,而不是像传统的软件工程方法那样分阶段,一定要概要设计→详细设计→编码→测试,完全完成前一阶段才能进行下一个阶段。"设计、编码、测试,不是阶段,而是过程,设计的时候也可以编码,编码完了就可以测试,为什么一定要所有编码完了才能测试或是所有设计完成才可以编码呢?"

  找到合适自己的方法

  同事说,"老袁在创新上一直是我们追赶的对象,程序员是很讲究创新的,很多程序员一开始是跟着人家走,学一些工具并满足于此,但是老袁能自创一派。"

  老袁说,"其实我以前也学过很多的方法,比如UMT,CMM学了很久,但是始终用不起来,感觉这些方法还是不适合我,所以每个人都应该找到自己适合的方法。"

  那怎么来找自己的方法?"不要轻易相信别人的方法。经常说如何好,我就怀疑,是不是真的用了这套东西之后开发能力就提高了呢?"

  说起来轻松,但真正的寻找过程注定充满了艰辛。找到了,成为"开宗立派"的大师,找不到,则只能在模仿小空间里绕圈子。

  老袁在学校里就开始编程了,"那已经是真正的项目"。这也让老袁早早地在同龄人中间开始拔尖。从那之后到1994年,在老袁看来是自己学习、摸索,模仿的阶段,看了很多书,读了很多程序,自己也写,"但现在看起来确实是非常粗浅的"。

  1994年,优秀程序员老袁进入金蝶公司,推出了不少大名鼎鼎的"作品",比如金蝶财务软件等。"在外人看来,这是一个非常辉煌的时代"。但是老袁却开始越来越郁闷---不是因为别的原因,"东西在别人看来写得非常好,但是自己却总是觉得再也无法提高了"。

  曾经有一年多的时间,老袁说自己一点东西也写不出来,就是感觉跨不过去了。"当时也动过这样的念头:算了,不写程序了,不写程序就搞搞管理,日子也会很好过。"

  那段时间,老袁率领当时的金蝶中央研究院开始了J2EE架构的核心---J2EE应用服务器的研究和开发,成功开发出了国内首家拥有完全自主知识产权、通过国际J2EE认证的应用服务器,并成为国际JCP组织中国代表。2000年,金蝶中间件公司成立,发布了金蝶Apusic应用服务器1.0版本,2001年,老袁又把所有的架构体系推倒重来了一遍,这就是2001发布的2.0版。

  这个2.0版的重构成了老袁程序员生涯的一个重要转折,可谓从优秀到卓越。"这个时候就开始意识到做软件是要有思想的,要有思想来指导你。之前之所以遇到很大障碍,就是没有一套思想、方法论。凭借着对技术的掌握自己还是写了一些软件,但是技术掌握得再多,没有好的方法,你仍然没法写出好的程序。"

  就象是捅破了一层窗户纸。从那时候起,老袁的编程工作就有了游刃有余的感觉。去年老袁在美国遇到一位敏捷编程方法的倡导者,被外界称为“软件开发教父”的Martin .Fowler,几句一聊,让老袁立刻有了知己之感。"这才发现世界上还有这么多程序员有和我一样的想法"。

  这让老袁有了进一步总结自己的编程理念的想法。"我的编程思想和敏捷编程很像,但又不完全是敏捷编程"。老袁希望自己在40岁之前,把Thinking in code说得更清楚些,更具可操作性,比如:如何用代码而不是用建模工具来设计,如何在设计的时候让代码来表现流程。如今老袁平时也带学生,但是只教方法,不教技术,"有很多技术,他们比我还懂得多"。

  名词解释

  敏捷编程

  一种以人为核心、迭代、循序渐进的开发方法。在敏捷开发中,软件项目的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。简言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。

<!--Here is the bottom-->
分享到:
评论

相关推荐

    think in java source code

    《Think in Java》是Bruce Eckel的经典编程教材,它深入浅出地讲解了Java语言的基础概念和高级特性。源码整理则为读者提供了实践和学习的机会,帮助理解书中的示例和理论。以下是对《Think in Java》源码中一些重要...

    Think in java第三版代码

    "Think in Java第三版代码"则提供了书中习题和示例的源代码,便于读者理解和实践。 在提供的压缩包文件中,我们可以看到以下文件: 1. `tij.jcsc`:这可能是《Think in Java》书中某个章节或习题的Java类文件,...

    think in c++ 英文加源代码

    《Think in C++》中的源代码示例是学习和理解这些概念的实用工具。通过实际操作,读者可以更好地领会理论知识,并将其应用于实际编程场景中。这两部分资源——Vol-one和Vol-two,分别对应书中的第一卷和第二卷,涵盖...

    think in java4源代码

    《Think in Java 4》是Java编程领域的一部经典之作,由Bruce Eckel撰写,它以其深入浅出的讲解方式和丰富的示例代码深受程序员喜爱。这个压缩包包含的就是这本书的全部源代码,旨在帮助读者更好地理解和实践书中所...

    think in java 习题、代码

    这个文件包含了《Think in Java》第四版的所有源代码示例。通过研究这些代码,你可以: 1. 观察实际编程实践:代码示例展示了如何将理论知识应用于实际编程中,帮助你更好地理解Java语法和编程技巧。 2. 学习良好的...

    Think in c#.

    总的来说,《Think in C#》这本书全面覆盖了C#编程语言的关键知识点,不仅讲解了语言基础,还涉及了.NET框架的使用和现代C#特性,是学习和掌握C#不可多得的资源。通过阅读和实践书中的例子,读者可以逐步建立起扎实...

    Think in Tkinter示例代码

    本篇文章将围绕"Think in Tkinter"这本书中的一些示例代码进行解析和探讨,帮助读者深入理解Tkinter的使用方法和核心概念。 1. **基本窗口与控件** 示例代码如`thinking.py`展示了如何创建一个基础的Tkinter窗口,...

    think in C++ 文字pdf

    《Think in C++》是一本深受程序员喜爱的C++学习书籍,由世界级编程大师Bruce Eckel撰写。这本书以其深入浅出、易于理解的讲解方式,为读者提供了全面掌握C++语言的基础和进阶知识。高清的文字版PDF使得阅读更加舒适...

    Think in C++第二版(内含中文,英文版)

    《Think in C++》是C++编程领域的一部经典教程,由知名程序员Bruce Eckel编写。这本书分为两卷,第一卷主要介绍C++的基础知识,包括语法、控制结构、类和对象等;第二卷则深入探讨了C++的高级特性,如模板、异常处理...

    Think in c++编程详解

    此外,《Think in C++》还会涵盖异常处理,这是C++中处理错误和异常情况的一种机制,有助于编写健壮的代码。同时,书中也会讲解预处理器、链接器和编译器的基本原理,帮助读者更好地理解程序的构建过程。 总之,...

    Think in C++ C++编程思想 英文原版 HTML格式

    《Think in C++》将深入讲解STL的使用,让读者能高效地处理数据。 5. **异常处理**:C++提供了异常处理机制,使得程序在遇到错误时可以优雅地恢复。书中会介绍try、catch、throw的用法以及自定义异常。 6. **命名...

    think in C++

    通过学习《Think in C++》,读者可以掌握如何定义和使用类来组织代码,以及如何利用继承来实现代码复用和多态性来增强程序的灵活性。 2. **模板**:C++中的模板是泛型编程的关键工具,允许开发者编写可处理不同类型...

    Think in C sharp

    《Think in C#》是一本深入探讨C#编程语言的书籍,旨在帮助程序员建立起对C#的深刻理解和熟练运用。C#(读作"C sharp")是由微软公司开发的一种面向对象的编程语言,广泛应用于Windows平台上的软件开发,尤其是与...

    Think in C++

    这本书的主要目标是帮助读者深入理解C++语言,掌握其核心概念,并培养出用C++思考问题的能力。"Thinking in C++"是书中的一个关键章节,它可能涵盖了从基础语法到高级特性的全面讲解。 在C++编程中,首先,你需要...

    think in java 4 源码 eclipse工程版

    think in java 第四版 源码以及作业 eclipse版本 包含jar包 可以直接导入eclipse

    Think in python中英文对照pdf文件

    在Python的世界里,"Think"并不仅仅是编写代码,更是思考如何用Python的方式来解决问题。Python语言以其简洁、易读性闻名,其设计哲学强调代码的可读性和简洁的语法,使得程序能够更快速地被理解和实现。Python的...

    think in c sharp

    think in c# 《用c#思考》英文版 The author owns the copyright of this book.chinazk.com and 911 Do not assume any copyright issues。Be sure to delete it within 24 hours after downloaded.Welcome to ...

    think in c++(书-中文+源码)

    在《Think in C++》中,作者详细讲解了C++的基础知识,包括基本语法、控制结构(如if语句、switch语句、循环)、函数的使用、数组和指针的深入理解、动态内存管理以及对象和类的概念。书中还涵盖了模板的使用,这是...

    think in C#

    "C# in think"这个标签则强调了通过思考来学习C#的重要性,鼓励读者不仅学习语法,更要理解其背后的逻辑和设计哲学。 C#是由微软公司为.NET框架开发的一种面向对象的编程语言,它的设计目标是提供一种类型安全、跨...

    think in java 练习

    《Think in Java》是 Bruce Eckel 的经典著作,它深入浅出地讲解了Java编程语言的核心概念和技术。这本书强调理解编程思想,而不仅仅是学习语法。练习题是学习过程中的重要部分,它们帮助我们巩固理论知识,提升实际...

Global site tag (gtag.js) - Google Analytics