`
helloyesyes
  • 浏览: 1303995 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论
阅读更多
IDE综合症
莫华枫

前些日子猛然间接到开发POS机的任务。没有完整的IDE,索性就学着用vim,也算是技能锻炼吧。没几天,就看到了两位大牛在blog里展示无鼠标的魅力(这个这个这个,和这个这个这个这个)。特别是风云,直接告诉我们不依赖于IDE的方法和好处。令人震撼。从另一个角度来看,不依赖于IDE带来的不光是方便、简洁,以及geeky。更重要的,它将使得我们打下更扎实的基础。而那些离了IDE就活不成的人,总存在着一些缺陷。
在开发POS机之前,我正在做web的项目。既然是web,用javascript更加合适。由于行事仓促,没来得及找一个合适的javascript IDE,所以就直接借用vs的编辑器编写js代码。vs IDE的intellisence做的颇为出色。但是这仅限于C#、VB、C++等主要语言。对于javascript(ms叫它JScript),几乎 没有任何auto-complete功能。我还比较适应,因为过去在vc5以前没有这类功能。即便vc6,auto-complete也时有时无,至今 vc9依然如此。(拜C++那non-lalr语法所赐,似乎没有希望得到完全的auto-complete了)。但是,我身边的几个程序员则不停地向我 抱怨,没有auto-complete太不方便了。一开始,他们甚至有些手足无措。
于是,我告诉他们,不要太依赖IDE,特别是auto-complete功能,要学会多看文档...。说完这些话,我开始留意身边程序员的行为。结果发 现,他们拥有强烈的,用IDE替代文档的倾向。每当他们需要一个功能,又不知道该用什么函数的时候,便找到相应的对象或类(C#),在后面打上个“.”, 然后等着。等到成员函数列表显示出来,便在里面搜索,看看有没有符合要求的函数或属性。如果找到一个名字看上去像的,就选中它,看看 intellisence列出的说明。如果有函数的参数不知道,就打上括号,看提示。根据参数类型和参数名猜测参数的含义。
这种做法本身并没有什么太大的问题,我自己也经常这么做。但是,根本的差别在于,我一般都用过这些函数或属性,只是时间长了忘记了函数名或参数。 auto-complete起的是助记和辅助的作用。auto-complete原本也应该是这个作用。对于从未用过的,或者不清楚功能的函数或属性,我 基本上还是先看文档,了解函数或属性的具体含义和用法后,再使用。但很多在先进的IDE里泡大的程序员们,却并非如此。他们把auto-complete 功能当成了百科全书,反倒是很少看文档。
有人会说,既然auto-complete提供了函数的介绍,参数的类型和介绍,对于编程而言已经足够了,没有必要再浪费时间看文档了。但是,这种想法是 绝对错误的、危险的,甚至会要命的。对于一个类型、函数、属性、参数而言,文档并非仅仅提供了名称和大致含义。而是提供了完整的说明、注意事项、参数/返 回值的详细说明和规约,以及更加重要的异常特性和线程安全性。所有这些都是无法容纳在auto-complete的狭小说明空间里。
有经验的程序员,往往非常关注参数/返回值的规约(契约)、异常特性和线程安全性。这些地方往往是藏污纳垢的地方。对于参数/返回值处理不当,往往引发意 想不到的错误。比如一个参数不允许null指针。在通常情况下传入的实参都有效,但在很偶然的情况下,一个null传了进来,于是引发了程序崩溃。如果程 序员提前对null作出处理,便可以避免这类问题。有些函数对与null字符串和空字符串的处理是不一样的。比如.net framework中IXPathNavigate的GetAttribute()方法,第二个参数是namespace,如果用null字符串,则不会 得到所需的结果;如果用空字符串,则能够得到正确的结果。在复杂程序中这种错误往往非常隐蔽,是最佳bug候选人。
异常特性决定了一个函数对于非正常情况的处理方式。很多新手往往忽视异常。实际上,一个函数的异常有时是正常的,比如一个文件不存在的异常抛出时我们可能 不认为它是错误,而是一个提示,我们可以据此创建一个文件;而另一些情况下,异常却是错误,比如参数无效。更有甚者,一个异常有时是错误,有时则是正常流 程的一部分。这些东西往往需要细心处理,以免在客户面前出洋相。
至于并发特性,毋庸置疑是绝对不可忽视的。可以想象,几个线程在一个线程不安全的函数里能制造出多大的混乱。更何况这些混乱很难调试。
过度依赖IDE也造成了程序员的“营养不良”。对于程序的调试,他们只知道使用debuger,甚至不知道log也可以用于调试,而且应用范围更广。我曾 经问一个C#使用多年的老程序员,.net上有没有log库。他告诉我一个.net内置的,我一看,这不是调试用的log库,而是访问windows系统 log的几个类。他根本就不明白log库是什么东西。
至于其他的方面,IDE综合症还有很多症状,我就不多说了。如果细心观察,我们都会发现很多这样的现象,也能发现其中的弊病。
客观地讲,IDE是个好东西。但是对于程序员,特别是新手,过度依赖IDE会造成不良的后果。我们永远应该把IDE看作一个辅助的工具,而不是唯一的编程 编程平台。而对于一个新手,应当尽可能地减少IDE的使用量。特别在练习的时候,更应当放弃IDE,而更多地锻炼编程时的自主控制能力。
分享到:
评论

相关推荐

    CCICalculator:简单的 Charlson 合并症指数计算器

    什么是 CCI 计算器查尔森合并症指数 (CCI) 是用于估计透析患者预后的指数。 该程序是一种用于计算受试者在任何时间点所承受的疾病负担量的工具。 我们的 CCICalculator 程序是一个 java 实现,具有以下功能: 交互...

    最佳黑色背景的 Visual Studio 2005 配置-尤其适合开发人员使用

    长时间盯着白色背景的屏幕工作可能会导致眼睛疲劳,甚至可能引发所谓的“计算机视觉综合症”(Computer Vision Syndrome, CVS)。黑色背景可以显著降低这种视觉压力,因为低对比度的颜色组合对人眼更为柔和。此外,...

    基于乐联网平台的智能家居系统的设计.doc

    11. **室内空气品质监测**:针对室内空气品质问题,系统提供预警监测,有助于改善居住环境,预防建筑物综合症等相关健康问题。 12. **系统硬件设计**:包括主控模块(Arduino UNO扩展以太网模块)、传感器模块、继...

    melb-apps-for-autism:在 2015 年墨尔本冬季黑客大会上开发的自闭症移动应用程序

    2. **Java编程**:开发者使用Java语言,这意味着他们可能使用了Android Studio等集成开发环境(IDE),并掌握了Java的基本语法、类库和框架,如Android SDK。 3. **自闭症支持技术**:应用程序可能包括各种功能,如...

    成为编程高手的二十二条军规

    这样可以增强综合分析问题的能力。 #### 17. 抓住大学提供的每一个实习机会 实习经历不仅可以帮助你获得实践经验,还可以为你建立职业网络。充分利用这些机会,对未来的职业发展非常有益。 #### 18. 利用图书馆...

    北京主治医师(公共卫生)中级主管技师职称试题.pdf

    1. 心脏疾病:题干描述了一个5岁女孩的症状,包括啼哭时唇面青紫、蹲踞、心悸、气促和发绀,这可能是先天性心脏病的表现,如选项D所示,法洛四联症是一种常见的复杂先天性心脏缺陷。 2. 精神疾病:躁狂患者最常见的...

    own-Model-Loadeown-.zip_Windows编程_Visual_C++_

    至于编程对健康的影响,长时间编程可能导致视力下降、颈部和背部疼痛,甚至可能导致腕管综合症。因此,定时休息,进行眼部运动,保持良好的坐姿,以及定期进行轻度的身体活动至关重要。此外,合理的饮食和充足的睡眠...

    IBM 数据和人工智能.pdf

    - **医疗领域应用**:IBM提到,人工智能可以帮助更准确地预测脓毒症患者的治疗效果,这对于提高医疗质量和患者生存率有着重要意义。 #### 四、数据挑战与解决方案 - **数据问题**:虽然人工智能算法本身相对成熟,...

    VR开发大纲资料.txt

    虚拟现实(VR)开发是一项涉及多个学科和技能的综合性技术领域。随着硬件和软件技术的发展,VR技术已应用于游戏、教育、医疗、设计等多个行业。以下是对给定文件中提及的VR开发大纲资料的内容知识点的详细说明: 1....

    嵌入式系统/ARM技术中的研扬SBC-400在紧凑型过敏诊断系统中的应用

    其明星产品UniCAP100是一款高效的全自动综合诊断仪器,能够快速准确地检测和诊断过敏症,如哮喘。该系统可在短短三小时内完成对500种过敏原的检测,同时处理48个诊断,并自动生成报告,极大地提高了医疗服务的效率。...

    Android 指南针程序

    开发者需要熟悉Android Studio IDE,这是SDK的一部分,用于编写、测试和优化代码。 2. **Sensor API**:指南针功能主要依赖于设备的磁力传感器(Magnetic Sensor),这属于Android的Sensor API。通过注册监听器...

    tp02JavaFront:Java的Trabalho desenvolvido para disciplina

    "Java椎间盘突出症"这部分描述可能是一个比喻,暗示这个项目与Java编程中的一些复杂或困难部分有关,或者是对项目难度的一种幽默表达。 【标签】"JavaScript" 指出,除了Java之外,项目还涉及到JavaScript语言。这...

    ITK-5.2编译好,可使用

    5. **Visual Studio 2019**: 这是Microsoft开发的一款集成开发环境(IDE),广泛用于C++编程。VS2019提供了一个完整的开发环境,包括代码编辑、调试、版本控制集成等工具。这个资源表明ITK库已编译为能在Visual ...

Global site tag (gtag.js) - Google Analytics