`
laorer
  • 浏览: 435650 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

[转]专家看台:程序员的成长从开窍开始

阅读更多

http://news.csdn.net/n/20071228/112244.htm
最近,有两位Google Maps API的初学者向我请教他们按照最简单例子写的程序为什么不能正常的运行。

其中一位用GTalk跟我交流,我仔细了看了他的代码,没看出问题,把代码保存在本地,打开Firefox的错误控制台,用Firefox打开他的页面。出错的那一行被清晰的显示出来,我再仔细端详那句话,原来有两个应该是英文逗号的地方,写上了中文逗号。

另一位,在我的论坛跟我交流他的Google Maps API中遇到的问题,我看他代码的时候也没有马上发现问题。然而,同样在用Firefox打开后,问题很明显的找到了,原来是一个方法openInfoWindow被他写成OpenInfoWindow了。

在我帮助别人解决的程序调试问题中,这是非常常见的。人人都可能打出中文逗号,人人都可能把大小写写错。但是在我帮助他们解决问题以后,他们总是感慨的说,谢谢我解决了这个问题,这个问题困扰了他们几个小时,甚至是几天。

这其实并不是只有初学者才会遇到的问题,我还帮助过些有非常丰富经验的工程师解决问题,有时候问题仅仅出自某个参数没有传递进来,或者是拼接字符串的时候少些了一个冒号,或者是拼接地址的时候漏掉了http:。我甚至帮助一些人调试一些我根本不懂的语言的程序,因为多半出现的问题,都和语言特性无关,不是程序员写错了字符,就是写错了逻辑,或者是错误理解了一个函数。

出问题是正常的,写程序是一个复杂的边思考边打字的过程,笔误和一时糊涂都是难以避免的。程序员一般把这种问题叫做低级问题,因为这类问题跟你的智商完全无关,任何人都可能犯。

但是,问题在于,有时候即使是很优秀的程序员,也会被一个低级错误困扰,可能会几天都解决不了。所以,关键在于,如何找到问题。

遇到问题的时候:

1,不要怨天怨地。出了问题,当然有可能是系统的bug,API的问题,但是那些几率往往比你犯低级错误的几率要低多了,先从自己身上找原因,是不是自己写错了。


2,要掌握工具。最低限度你要会写Log,最好是Log和调试器结合。好 的工具可以大大的提高效率。以前有人跟我说,Dll不能调试,我发现可以;有人说多线程不能调试,我发现可以;有人说COM不能调试,我发现可以;有人说 IE插件不能调试,我发现可以;有人说OE插件不能调试,我发现也可以。当然,你确实会遇到不能调试的时候,当年我们做东芝芯片的嵌入程序,一个组都没有 一个仿真器和调试器,但是至少可以用Log嘛,无非是麻烦点。

3,分析问题要有逻辑。遇到问题可以先把所有的可能性都列出来,然后一个一个分析,肯定能找到原因的。


4,要学会隔离问题。问题涉及到的代码越多,越难以理解,问题越难以解决。遇到这样的情况,可以利用Log或者调试器,一行代码一行代码的给它们洗清嫌疑,这样很快你就可以找到出问题的地方。如果代码特别长,程序特别复杂,可以用二分法来做,效率很高。

5,千万不要懒惰,不要事事求别人。一次复杂的调试过程就像一部侦探剧,如果你有非常好的逻辑性,那这部剧的主角就是福尔摩斯,剧情一定非常精彩。我说这个是有巨大风险的,说真的我帮人调东西挺上瘾的,很有意思。但是我还是要告诉大家,一次高难度的调试之后,你的满足感绝对不亚于写了一个伟大的程序。

要想不遇到问题,写代码的时候:

1,要对写出来的代码负责。我很佩服那些写代码写100行都不执行一次的 高手,如果他们最后不被低级错误困扰的话我就更加的佩服了。我写程序几乎是写一行两行就要执行一次,每句话我都要确保执行效果跟我的预期一致。没错这样写的时候 可能慢一些,但是调试的时候很轻松,我可以很简单的确定哪些代码绝对没有问题。所以我写代码整体速度比一般人高。很多人学习新东西的时候喜欢把例子抄一遍,运行一下,改改,再运行。我喜欢一句一句的抄例子,抄一句两句执行一次,这样可以把例子透彻的理解,而且很难会遇到出现了问题找不到原因的时候。


2,函数体功能块不要过长。我认为我的智商并不高,我很难接受一个程序的一个函数体或者一个功能块超越3屏(当然逻辑真的有那么复杂除外,你会发现越是简单的逻辑越是容易被人写的冗长)。很多人对面向对象耳熟能详,对封装继承看起来驾轻就熟。但是动不动就写出来个函数体超长的程序。这就像写本书从头到尾不点句号一样,会累死读者的。自己看的时候,估计也会被累的喘不过来气。这是我对基础教育的微词所在,他们连教会学生写函数都没教会,虽然表面上他们连面向对象这么高深的东西都教。


3,缩进要对。这点很重要,虽然大部分语言不是像Python那样用缩进来决定逻辑块的位置,但是人看到缩进的时候,总是会以为这些缩进位置跟逻辑相关。尤其是在有大量的ifelse或者for循环等等的嵌套逻辑的时候,如果缩进错了,可能会直接让人把程序的逻辑读错。所以我拿到别人的代码,第一件事情就是整理缩进。我见过一些比较优秀的页面工程师,他们会在div结束的位置用注释写上这个div的id,这样层级关系就一目了然了。


4,不断重构。随着程序的不断修改,有些部分会不断的增长,原来看着清晰的架构可能因为问题的复杂而慢慢模糊,也可能被修正bug的权宜之计弄的面目全非。不信你找一个经过多次修改的程序看看,是不是满目疮痍,是不是都很难认出是你自己的作品了。这在多人参与的项目中更加严重,每个人有不同的代码风格,经过多次杂交后,你肯定认不出你的代码是骡子是马,还是四不像了。随着程序的慢慢成长,原来有些函数体会慢慢膨胀,需要拆分;有些原来简单的功能块四处都需要,应该被提炼成函数或者方法,等等。现在不重构,未来等到代码复杂到无法控制的时候,重构的工作就会变得更加困难。我见过最强的案例是,一个几千行的电子辞典配套联机软件,经过无数次的改版,变成了一个几乎无法维护的主窗体的cpp有1万8千行的怪物。最后经过复杂的重构,才变成一个出新版本只需要新增一个驱动程序的可以维护的几千行的程序。

郝培强:银杏技术咨询创始合伙人,网名Tinyfool,技术方向是全文检索,搜索引擎优化,网站架构设计等。 银杏技术咨询的主要业务是帮助客户的网站改进技术,提高网站性能和反应速度,解决门槛性技术问题,从而提高用户满意度。
l
分享到:
评论

相关推荐

    专家看台:女性优势无法比拟选好拐点迎来事业机会

    火龙果软件工程技术中心 自第一台计算机问世以来,软件行业随之诞生。虽然软件行业一直以惊人的高速在发展着,飞速地经过了婴幼儿期不断完善着自己,然而60年对一个行业来说仍然有些年轻,分工不够细化也造成了这个...

    北京奥体中心体育场看台聚脲防水工程施工方案tyc.doc

    - 钢结构看台:防水层自下至上包括钢看台、20mm厚聚合物防水砂浆找平层、防水专用底漆以及厚聚脲弹性体防水材料。对于栏板,高度不超过500mm的防水直接施工到顶部,超过500mm的则施工至300mm高。 - 混凝土看台:...

    操场看台SU模型

    用户通常从创建基础形状开始,如矩形、线和圆,然后通过推拉工具形成三维形状。 2. **几何体操作**:SketchUp支持多种几何体操作,如移动、旋转、缩放、偏移、剪切、复制和镜像等,这些操作能帮助精确地构建看台...

    运动场看台基础

    运动场看台基础

    3、弧形悬挑看台施工工法.doc

    工法详细介绍了从看台的平面定位及标高控制,到模板及支撑体系的安装,再到钢筋布置和混凝土浇筑等一系列关键步骤。 工法特点: 1. 弧形定位精确:利用CAD制图技术,根据图纸上的弧形圆心和弧度,重新建模确定圆心...

    青岛小学看台

    青岛小学看台

    建筑施工组织2021-北京奥体中心体育场看台聚脲防水工程施工方案tyc.doc

    - 在C(C1)轴线内,从卫生间墙体边缘开始,对二层、五层看台所有出入口地面增做1.5mm厚聚脲弹性体防水涂料,立面高度为300mm。 4. **施工部署与准备**: - 工程规模较大,项目部将根据现场进度组织专业防水队伍...

    北京奥体中心体育场看台聚脲防水工程施工方案tyc.pdf

    该文档是关于北京奥体中心体育场看台聚脲防水工程的施工方案,主要涉及钢结构和混凝土看台的防水处理,以及看台出入口通道的防水措施。以下是详细的知识点解析: 1. **编制依据**: - 工程的设计图纸(建施图、结...

    赛车场赛道看台场景创建插件:Race Track Generator v1.3.8

    赛车场赛道看台场景创建插件

    看台膜结构施工.pdf

    在建筑领域,膜结构施工是一种应用广泛的技术,尤其在看台等公共设施建设中,膜结构不仅提供美观的设计,也确保了使用的耐久性和安全性。由于提供的文件内容部分是OCR扫描文本,存在一些字词识别错误或遗漏。这要求...

    电信设备-可伸缩移动看台装置.zip

    在电信行业中,可伸缩移动看台装置是一种特殊的应用设备,主要用于大型活动、体育赛事或者音乐会等场合,提供临时或可调节的观众座位。这种装置的设计理念是灵活性和效率,能够在短时间内快速部署或收起,适应不同的...

    房地产数据库课程设计java+hibernate+mysql

    里面有所有的项目所需要的文件,包括实验报告 e-r图等,主要包括1) 公司简介 2) 查询广场:向用户提供查询界面。如输入房产类型(两室一厅)、阳台...3) 房产看台:楼盘介绍、预定情况 4) 公司管理:楼盘登记、户型登记

    电信设备-可伸缩移动看台装置的设计方法.zip

    在电信行业中,可伸缩移动看台装置的设计方法是一个重要的技术领域,它涉及到大型公共活动场所,如体育场馆、剧院等的设施管理与优化。这种装置的创新设计旨在提高空间利用效率,满足不同活动对观众容量的需求变化。...

    电信设备-可升降可收缩可移动活动看台.zip

    【电信设备-可升降可收缩可移动活动看台】 在现代通信行业中,高效灵活的设备部署是关键。可升降、可收缩、可移动的活动看台是为满足这种需求而设计的一种创新解决方案。这种设备主要用于大型公共场合,如体育场馆...

    看台施工方案.pdf

    从提供的文件内容来看,我们得到的是一份关于看台施工方案的详细描述,其中包含大量的尺寸、型号和代码信息。尽管文档的具体施工细节并不完整,但从中可以提炼出与施工方案相关的一些基本知识点和潜在的技术要求。 ...

    运动场看台建筑

    运动场看台建筑

    schwebedraht:看台游戏

    除了不应该碰到的(较大)部分之外,还有(较小)奖励部分,这些奖励部分为您提供的积分根据从上一个分段开始需要多少时间而有所不同。 奖励段接触的组合可提供更多积分。 每次触摸片段时,React都会以视频,动画和...

    土建看台施工组织方案.doc

    本文将详细解读土建看台施工组织方案,从施工内容到施工程序,从施工调度到施工方法和工艺,进而探讨如何通过科学严谨的施工方案实现安全、高效和高质量的建筑目标。 首先,施工内容是整个方案的基础。在土建看台的...

    行业文档-设计装置-一种用于活动看台的防滑平台前沿.zip

    标题中的“设计装置”指的是对特定设备或结构进行创新设计的过程,而“活动看台”是一种常见于体育场馆、剧院等公共场所的可移动或可折叠的观众座位设施。结合描述和压缩包内的文件名,我们可以推测这个文档主要讨论...

Global site tag (gtag.js) - Google Analytics