编程感悟
最近一段时间团队里新加入了一些小伙伴,我一直希望大家在参与具体项目功能开发之前,先好好熟悉框架熟悉代码熟悉流程,在开始某个模块开发之前,先好好熟悉产品文档,先构思一翻。奈何有的同学似乎还是按照他原本的工作套路做事,无奈。
今天主要说说代码里的搜索功能(主要是指微软的IDE神奇VS里的代码搜索功能)
Visual Studio里的代码搜索功能非常丰富,常用的有:
0x00. Ctrl+F 主要是当前源代码文件里的搜索或者替换
0x01. Ctrl+Shift+F 主要是当前项目或者当前解决方案全局的搜索或者替换
0x02. Ctrl+;(冒号) 搜索解决方案资源管理器,主要是搜索当前解决方案ListBox里的源文件名字
0x03. Visual Assits 中的Shift+Alt+O 快速打开源文件,其中每输入一个字符 可根据当前字符定位最接近的源文件
0x04. Visual Assits 中的Shift+Alt+S 和 Shift+Alt+F 等
注意 Visual Assits 是一款最常用的VS插件,本人是烂番茄的深度中毒者。。近几年还购买了正版,略贵但是却物超所值的一个插件。
使用上述的几个功能,极大的提升了开发效率,而且我也几乎每天都需要使用它们。但是,针对新加入项目的同事,或者对项目组成一点不熟悉对代码基本结构毫不了解的同学我真的严重不推荐使用。
代码搜索功能在一个程序员熟悉一套框架或者一个完整项目的时候起的作用往往是负面的 — 你太快的找到它以至于你不想知道它原本在哪里,为什么在哪里,而不是在这里。虽然我们推崇优雅的编码,性能无暇的模块实现,但是代码结构,源文件结构更加是应该注重的地方。地基都没牢固你房子装修的天花乱坠有何用?
搜索真是一个双刃剑,我发现很多同事都很喜欢用它来搜索定位,这本身并没有错,但是大家有没发现当你过分依赖它之后,大多数人已经忘记了整个项目的代码结构了,甚至说你写代码都无法好好组织源代码文件结构了?个人认为代码量少于10W的项目就没必要使用它了吧。在熟悉代码阶段 如果需要使用快速搜索功能,在找到之后可否停下几秒钟了解一下它的真正位置所在?
过度依赖搜索使得有些人忽略了项目核心原本具有的功能,从而一些通用的功能原本已经被实现过一次,他在自己的模块里又造了一个一模一样的轮子,造成严重的DRY。一个让我吃惊的事实就是,我目前项目的核心代码不足3W行,可是我随意说出一个小模块,都有同事不知道它的存在或者在不通过搜索的情况下无法找到它的位置。当我建议大家放弃搜索代码而多使用眼力查找的时候 大家的理由总是非常充分:“我有那么好的功能为什么不用?我能快速的找到为什么要费眼力去找?”,如果我去跟他争辩,争辩的最后对方的理由往往都会变成:“我能实现功能就完了,你要求那么多做什么?”,目前为止我并没有很好的理由去说服这一部分人。在薪酬上 他们不比其他人少,在能力上 他们也不都处于弱势,我还真的找不出他们的毛病。只是觉得很多事情不应该从这种角度去思考和行动。
过度依赖搜索使得有些人在开发过程中忽略了基本的代码组织结构,我发现团队里一些同学的代码一个类越写越多,越写越长,堆积的功能越来越多,一个小类负责了整个模块的80%的工作,这个类在最后甚至到连他自己都无法维护。以至于针对这个类的维护都需要借助搜索功能了 — 太多行的代码集中在一个代码文件里,用眼球已经无法解析定位他们了。有时候出现隐藏BUG向我寻求助,我初略扫了一眼,给出的意见不是如何找到这个BUG或者如何修复这个BUG,而是先停下来重构使得这个模块的代码足够清晰。道理很简单 — 在浑浊的水里摸鱼和在清澈见底的水里抓鱼 那个更快抓到鱼?
毫不关注代码结构的同学难以接手代码结构严谨的模块,一个事实是:一个毫不关注代码结构的人在看一个代码结构严谨的人的代码的时候,往往觉得晕头转向,“为什么跳来跳去?”,“跳得我都晕了”.
有时候你不需要搜索代码
我每天都在使用代码搜索功能,但是对于某些同学我真的严重不建议使用 或者建议少用这个神奇的功能。它会使你懒惰,它会使你不再关注原本基础的东西。它会使你感觉到世界一开始就是这个样子,而一开始其实我们并没有搜索。
最后,我看似在吐槽搜索功能,其实是在鞭笞自己,不要成为找不出毛病的那一部分人。
PS 终于又可以继续我的项目开发笔记了,经过大半年的沉淀,我分别捣鼓了很多东西,大多数都应该整理笔记记录下来。
-EOF-
我已经放弃VS了……除了C#项目之外。IntelliJ Idea太好用了……CLion很值得期待。
“他在自己的模块里又造了一个一模一样的轮子,造成严重的DRY”
DRY = Don’t Repeat Yourself. 这里博主想说的是 WET吧?
“违反DRY原则的解决方案通常被称为WET,指代“write everything twice”。”
https://zh.wikipedia.org/wiki/%E4%B8%80%E6%AC%A1%E4%B8%94%E4%BB%85%E4%B8%80%E6%AC%A1
got it~