`
jnn
  • 浏览: 288311 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

程序员,高级程序员,系统构架师 似乎已经成为一个IT从业人员的技术发展线路图了。

这里我要问一下 我们的架构师有多少时间在写代码,有多少时间在读代码。当然你的技术职位越高你所需要关心的细节问题就越少,但是如果你没有基本的代码阅读能力或者说压根都不关心细节,哪你所设计出来的构架又有多少说服力呢?如何能于程序员进行交流?如何能将这些设计落实到具体的代码上呢?

我心目中的构架师是既能统观全局,又能细致入微的领军人物。对于系统构架,他已烂熟于胸,简单几句话就能引领你直达问题关键。有时候我们读大师写的文章,就会有这样的感觉,他会把事件的来龙去脉向你细细道来,如同一盏明灯照亮问题的每个角落。

软件构架师是如何修炼出来的呢?哪些设计模式,设计思路是如何成为他思考的元素的呢?其实写代码就和写文章一样,如果想写得顺畅,一个是多读别人的文章吸取营养,一个就是多写文章,训练自己的文字表达。

我很喜欢我现在的职业程序员(Coder),我就是喜欢写代码。也许你会说写代码很枯燥,没有拿着PPT给客户做介绍或者做设计潇洒。我可以给你说一个例子来说明技术人员的交流,代码是最有效的手段。哦,在这里有个前提就是交流的双方都有很强的代码阅读能力。如果你在要写程序,你了解的细节越多,你处理问题的能力越强,如果只是把细节都封装在黑盒中,哪你只能把问题转发到厂商哪里的。而这是玩Open Source Hacker的大忌。他们想得既然我能看到代码,我就能弄清楚细节,我就能修改它。

Dan Diephouse 去年到北京和我们交流有关CXF设计的时候,他没有PPT,他的讲解工具就是Eclipse和一堆CXF的代码。当时他给我的感觉就是对代码超熟悉(因为RunTime的大部分代码是他写的),基本上我们要问的问题,他都能给我们指出对应的代码出处。 这不由使我想到了以前流传在英语考研班的一句神话,朱泰祺教授把整个牛津词典都背下来了。

在Dan Diephouse在北京的哪几天,我老是在想一个问题,他20几岁,化学工程专业毕业,为什么就能具备开发Xfire 或者说是具备 Service Framework的构架能力,是什么帮助他走到这一步呢?通过几天时间的接触,我似乎发现了一些线索。

一个是勤奋,他说他一个礼拜大概要工作60个小时(基本上是在家工作,省去很多路上奔波的时间)。

一个就是广泛涉猎OpenSource项目,阅读他们的code。在他向我们演示代码的时候,我看到他经常要开好几个项目,有axis,有Xfire,也有CXF。

再一个就是参加了很多技术会议 ,近年来的Java  One,  Apache  Conn ,  Eclipse Conn ...... 都有他的身影。

现在Dan Diephouse 除了经营自己的咨询公司以外,他已经是Mule的架构师,我相信他会走的更好。

另一个例子就是我最近的一项工作就是将CXF和Camel进行集成,虽然我对CXF有所了解,但是在开始的几天时间里,我对Camel几乎是从零开始,当时我无法给出具体的系统需求分析,更不要提给出相关的设计方案。于是我只能硬着头皮看文档,看代码,问问题,写测试。当我把一个个Demo测试调通了,当我仔细阅读并跟踪过Process的各项测。一个个系统需求开始明晰了,设计思路也有了,没多久code也出来了。

这时我突然明白了一个道理,我的设计不是从文档里跳出来的,是从不断的code reading,code tracing,code writing and refactoring中出来的,虽然开始的几天很痛苦,一旦你把思路理清,你就会有一种醍醐灌顶的感觉。 Coder是一个实践性很强的职业,你需要把具体的客户需求转换成为具体的代码,你需要不断测试优化你的代码。你整天和代码打交道,只有你多读多写,才能驾轻就熟,才能烂熟于胸。

我很喜欢IONA的一条口号 Code Wins. 于大家共勉。

分享到:
评论

相关推荐

    Porting_from_Linux_sample_code.zip

    8. GUI编程:Linux通常基于GTK+或Qt,而Symbian有自己的UI框架,如WINS和Qt for Symbian。 在“sample code”中,我们可以看到具体的代码变化,例如,对文件操作、线程管理和内存分配的修改,以及可能存在的适配...

    TCP/IP详解

    7.6 集成WINS和DNS名字解析服务 67 7.7 DHCP服务WINS选项 67 7.8 通过LMHOSTS进行NetBIOS名字 解析 68 7.9 小结 69 第8章 地址发现协议(BOOTP和DHCP) 71 8.1 “引导”协议(BOOTP) 71 8.2 动态主机配置协议(DHCP) 72...

    symbian os c++ mobile v3 配套源码code

    本压缩包中的源码code是针对Symbian OS C++ Mobile V3的开发实例,对于想要学习或深入理解该平台开发的人来说,是一份宝贵的学习资源。以下将详细介绍Symbian OS C++开发中的一些关键知识点: 1. **线程与并发**:...

    symbian源代码

    5. **错误处理**:Symbian有独特的错误处理机制,包括异常(exception)和返回码(return code),学习如何正确地处理错误和异常。 通过对这些知识点的深入研究和实践,你将能够理解和开发出更复杂的Symbian应用...

    Eliminating Memory Leaks in Symbian OS C++ Projects

    2. **CodeWarrior**:对于使用CodeWarrior的开发者来说,虽然工具集不同,但也可以采用类似的调试技巧和工作流程来解决问题。 #### 结论 消除Symbian OS C++项目中的内存泄漏是一项复杂但必要的任务。通过充分利用...

    2021年锐捷测试两套.pdf

    4. WINS(Windows Internet Name Service)是一种应用层协议,用于在Microsoft Windows网络中提供名称解析服务(选项D)。 四、网络设备类型 1. 集线器、middle repeater、交换机、路由器、网桥、服务器都是OSI...

    enums-examples:Java 中枚举的高级使用示例

    PLAYING, BLACK_WINS, WHITE_WINS, DRAW; } ``` 8. 枚举的枚举常量注解: 可以使用注解来为枚举常量提供元数据,如文档、校验规则等。例如: ```java @Retention(RetentionPolicy.RUNTIME) @interface Color...

    Symbian开发环境搭建

    例如,路径为`C:\Symbian\7.0s\Series60_v21_C\Epoc32\Release\WinS\Udeb\Epoc.exe`。 4. **调试与验证**: - 通过VC6或其他IDE打开项目文件,并使用快捷键(如F7)进行编译,然后通过Ctrl+F5运行程序以验证是否...

    C++ SDK+Symbian开发入门之应用程序.docx

    使用`abld build wins udeb`(Visual C++)、`abld build winsb udeb`(Borland C++)或`abld build winscw udeb`(CodeWarrior)命令将项目编译为适用于Series 60模拟器的调试版本。 其次,可以通过IDE来构建程序...

    农村信用社考试计算机历年试卷一.pdf

    1. ASCII编码:ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是一种用于电子通讯的字符编码标准,用于显示现代英语和其他西欧语言。ASCII编码中,字符'A'对应的十进制数是65...

    宿舍管理系统 系统分析

    Develop the database program already an important domain, nowadays, all sorts of databases appear incessantly, and Visual Basic wins with its perfect interface, convenient operation, and powerful ...

    Symbian开发环境的安装配置 测试OK 080605PM.doc

    - 使用Ctrl+F5或感叹号图标运行程序,输入模拟器的完整路径,例如`<sdk_directory>\epoc32\release\wins\udeb\EPOC.EXE`。 - 在模拟器的功能表中找到名为“HW”的项目,选择“Hello”,即可看到运行结果。 #### ...

    sportmonks-api-calls:私人德甲经理人游戏对sportmonks API的各种调用

    例如,`Team`类可能包含`name`、`points`、`wins`等属性,以及`add_point`、`update_ranking`等方法。 此外,可能还涉及到数据库操作,如使用`sqlite3`或`SQLAlchemy`等库来持久化数据。这样,即使程序关闭,玩家的...

    vc udp通信 socket setsockopt 组播广播

    - **224.0.1.24**:WINS服务器组地址。 ### 二、使用Socket API进行组播通信 #### 2.1 Socket编程基础 Socket是一种双向通信的编程接口,可用于不同计算机之间或者同一计算机上不同进程之间的通信。在Windows平台...

    nhl-api:与免费和开放的NHL API交互的Python函数

    print(player['person']['fullName'], player['person']['primaryPosition']['code']) ``` 四、数据处理与分析 获取到数据后,开发者可以根据需要进行清洗、转换和分析。Python的Pandas库非常适合处理结构化的数据...

    计算机用语中常见英文缩写和词组

    ### American Standard Code for Information Interchange (ASCII) ASCII是一种字符编码标准,最初设计为7位二进制编码,可以表示128种不同的字符,包括数字、英文字母和一些控制字符。尽管已被Unicode取代,但在...

    用户名密码查询findpass

    // This code is licensed under the terms of the GPL (gnu public license). // // Usage: FindPass DomainName UserName PID-of-WinLogon // // you can get the three params from pulist output in target ...

Global site tag (gtag.js) - Google Analytics