程序员,高级程序员,系统构架师 似乎已经成为一个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. 于大家共勉。
分享到:
相关推荐
8. GUI编程:Linux通常基于GTK+或Qt,而Symbian有自己的UI框架,如WINS和Qt for Symbian。 在“sample code”中,我们可以看到具体的代码变化,例如,对文件操作、线程管理和内存分配的修改,以及可能存在的适配...
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...
本压缩包中的源码code是针对Symbian OS C++ Mobile V3的开发实例,对于想要学习或深入理解该平台开发的人来说,是一份宝贵的学习资源。以下将详细介绍Symbian OS C++开发中的一些关键知识点: 1. **线程与并发**:...
5. **错误处理**:Symbian有独特的错误处理机制,包括异常(exception)和返回码(return code),学习如何正确地处理错误和异常。 通过对这些知识点的深入研究和实践,你将能够理解和开发出更复杂的Symbian应用...
2. **CodeWarrior**:对于使用CodeWarrior的开发者来说,虽然工具集不同,但也可以采用类似的调试技巧和工作流程来解决问题。 #### 结论 消除Symbian OS C++项目中的内存泄漏是一项复杂但必要的任务。通过充分利用...
4. WINS(Windows Internet Name Service)是一种应用层协议,用于在Microsoft Windows网络中提供名称解析服务(选项D)。 四、网络设备类型 1. 集线器、middle repeater、交换机、路由器、网桥、服务器都是OSI...
PLAYING, BLACK_WINS, WHITE_WINS, DRAW; } ``` 8. 枚举的枚举常量注解: 可以使用注解来为枚举常量提供元数据,如文档、校验规则等。例如: ```java @Retention(RetentionPolicy.RUNTIME) @interface Color...
例如,路径为`C:\Symbian\7.0s\Series60_v21_C\Epoc32\Release\WinS\Udeb\Epoc.exe`。 4. **调试与验证**: - 通过VC6或其他IDE打开项目文件,并使用快捷键(如F7)进行编译,然后通过Ctrl+F5运行程序以验证是否...
使用`abld build wins udeb`(Visual C++)、`abld build winsb udeb`(Borland C++)或`abld build winscw udeb`(CodeWarrior)命令将项目编译为适用于Series 60模拟器的调试版本。 其次,可以通过IDE来构建程序...
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 ...
- 使用Ctrl+F5或感叹号图标运行程序,输入模拟器的完整路径,例如`<sdk_directory>\epoc32\release\wins\udeb\EPOC.EXE`。 - 在模拟器的功能表中找到名为“HW”的项目,选择“Hello”,即可看到运行结果。 #### ...
例如,`Team`类可能包含`name`、`points`、`wins`等属性,以及`add_point`、`update_ranking`等方法。 此外,可能还涉及到数据库操作,如使用`sqlite3`或`SQLAlchemy`等库来持久化数据。这样,即使程序关闭,玩家的...
- **224.0.1.24**:WINS服务器组地址。 ### 二、使用Socket API进行组播通信 #### 2.1 Socket编程基础 Socket是一种双向通信的编程接口,可用于不同计算机之间或者同一计算机上不同进程之间的通信。在Windows平台...
print(player['person']['fullName'], player['person']['primaryPosition']['code']) ``` 四、数据处理与分析 获取到数据后,开发者可以根据需要进行清洗、转换和分析。Python的Pandas库非常适合处理结构化的数据...
### American Standard Code for Information Interchange (ASCII) ASCII是一种字符编码标准,最初设计为7位二进制编码,可以表示128种不同的字符,包括数字、英文字母和一些控制字符。尽管已被Unicode取代,但在...
// 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 ...