zoukankan      html  css  js  c++  java
  • 阅读作业

    这是现代软件工程课程阅读作业(题目原始要求非公开可见故不链接)。

    有人负责,才有质量:写给在集市中迷失的一代

    我一直觉得集市只是个美好的幻想而已,然而没有仔细想过整个事情,这篇文章正合我意。我最初对这个话题的观点来自于 Unix 痛恨者手册(实在抱歉,我只能找到这一个内容较完整的链接,但这个页面的排版太差了。如果你知道更好的链接可以评论告知)。以下随便引用两段:

    UNIX的发明人有个伟大的想法: 把命令解析器作为一个用户程序实现。如果用户不喜欢缺省的命令解析器,他可以自己写一个。更重要的是,shell能够进化,这样shell将不断进步,变得越来越强大,灵活和易用,至少理论上是这样。这真是个伟大的想法,不过弄巧成拙了。功能的逐渐增加带来的是一团糟。因为这些功能没有经过设计,只是在不断演化。和所有编程语言所遭到过的诅咒一样,那些利用这些功能的既存shell脚本成为了shell的最大敌人。只要有新的功能加入shell,就会有人在自己的脚本中使用它,这样这个功能就从此长生不老了。坏主意和臭功能往往怎么也死不掉。

    五金商店里的螺丝刀和锯子,尽管可能来自3、4个不同的厂商,但操作方法都差不多。典型的UNIX在/bin或/usr/bin下存了成百个程序,它们来自众多自以为是的程序员,有着自己的语法、操作范例、使用规则(这一个可以当成管道,而那一个则操作临时文件),不同的命令行参数习惯,以及不同的限制。拿grep和它的变种fgrep, egrep来说,哪一个是最快的?为什么它们接受的参数都不一样,甚至对正则表达式的理解也不尽相同?为什么不能有一个程序提供所有功能?负责的家伙在哪儿啊?

    没人负责,当然就没有质量了。没有经过充分和精心的设计就做出的产品,就会有各种行为不一致和功能考虑不周,面对需求变更时捉襟见肘,只能打一个又一个补丁、套一层又一层黑盒来用(a.k.a. 封装)(a.k.a. 容器),而这正是这篇文章中描绘的景象。

    最近我对这个话题的思考还有一部分来自于 PyPI。作为科大镜像站现任(整天划水的)CTO,我这段时间一直在主张停止为 PyPI 提供镜像服务,因为我认为这是个没有经过设计的混乱的东西,在用大量低劣代码占满我们服务器的磁盘空间(它已经是我们服务的最大的镜像了!):

    • 它没有门槛,任何人都可以把自己随便写的东西放进来占用名字空间中的一个名字
    • 它只进不出,没有移除垃圾的方法
    • 它不保护任何名字,优秀的、著名的软件包和许多名字极其相似的垃圾软件包放在一起,很容易装错
    • 除了极少数广为人知的软件包,它里面的其他代码真的令人不忍卒读(其实那些广为人知的软件包里面问题也不少,但今天暂且不提这个)。我很多次尝试在 PyPI 中找轮子失败后决定再也不直接在 PyPI 中找轮子了,只考虑使用网上广为人知的轮子,如果没有就自己写,这比找来一个垃圾轮子坑自己要高效得多。

    PyPI 是真正的集市,比一般发行版的包管理器中的包形成的“集市”要自由、散漫得多。我个人总是用 Debian,它对软件包就有严格的准入门槛和负责机制,负责人不干活的话我就可以要求撤换乃至移除相应软件包,与 PyPI 相比,这是大教堂了,但结果呢?Debian 的软件包质量是真的令我放心,整个系统用起来体验极好,PyPI 既没用又浪费更多资源。再举一个例子:安卓和苹果对待应用的态度,前者自由随意,后者有严格的标准,没人负责就下架,结果是安卓市场充斥着自以为是的开发者胡乱搞出的应用,苹果应用的体验则一致、规范、流畅。

    人件

    Why don't you realize, Vienna waits for you?

    When will you realize, Vienna waits for you?

    人件中我喜欢的/想谈的东西太多了,难以一一说清。这首歌、“不要支撑着尸体”、以及巨人霍尔加的故事是令我印象最深的三个画面,但它们都很简单,不展开说了。

    关于顺流状态(我曾经看的第二版译本翻译为此,我也较喜欢这个译法)和 E 因子度量,我和不少朋友都意识到了每天真正用于集中精力工作的时间少之又少,也一直在想办法提高自己的 E 因子(时间利用效率)。大三暑假来实习时,我采用的办法是每天留出固定 90 分钟作为认真工作的时间,此时不回应任何外部事件,专心思考复杂的问题.(一天才顺流工作 90 分钟?这已经很多了!在我这么做之前每天的顺流工作时间几乎是 0,而且这么做之后除了这 90 分钟以外也确实难再挤出别的时间了。)一年之后的现在,我进一步尝试了更精细的策略:通过一个小工具按泊松过程随机抽查我“现在是否在顺流状态”,来收集 E 因子数据。正如人件中所说,刚开始收集数据时,我确实为数据总在 0 附近徘徊而感到懊恼,但终于慢慢有了好转。通过这些数据我还得到了一个体会,就是要学会正确估计每件事情自己需要多少小时完成,并在此基础上 set and meet deadlines,以避免没有 deadline 的事情“坑越挖越大”,无限吞噬时间。

    关于招聘试演,我和一些朋友一直意见相左,让我对这个话题很感兴趣,真希望能有机会参与、观察、收集更多数据来进一步思考。我总是认为招聘试演是个非常好的主意,思路清晰的人和什么都说不清的人之间差距是很大的,上台 5 分钟便知。另外,一个人在 5 分钟内体现出的说话、做事的风格,也在很大程度上预示了将来和大家合作是否会融洽。我觉得不一定要上台讲什么来试演,只要组织团队一起和新成员坐下来聊聊工作中的事情,大家就能做出“这个人可以招”或者“这个人招不得”的决定了。不过我的一些朋友反对我关于“不同的人差距很大,聊 5 分钟便知”的观点,在一个例子中,我的一个朋友说他的一个室友就是典型的比较菜但很会说的人,只靠说话来面试的话会以为这位室友什么都很厉害。我没见过他的这位室友,实在是不清楚情况,只好说我尚不相信有这样的人,我认为好的面试官一定能很容易看出来的。

    关于“昔日的杀手级应用”,我总自认为是一个很保守传统的人,坚持使用诸如 RSS、电子邮件等技术,讲究正确使用 Git 和 GitHub 等工具(比如不往里面放不该放的文件),排斥如今的微博和即时通信系统。可是如今和我同级的科大同学已经有很多不会使用这些东西了,更低年级的同学或者其他学校的同学情况更是不妙,至于社会上……我有一次想给一个社会上的老师发送一个超过 10MB 的 PDF,可真是煞费苦心,首先没有我和他都在用的能发这种文件的工具,其次他被各种国产软件中的商业壁垒拦住了,最后他还没有合适的工具能浏览这个文件。我常常担心将来我该如何与现代人一起工作——是我老了、不合群了吗?这个问题一直困扰着我,可惜我没什么答案。

  • 相关阅读:
    slenium截屏
    效率提升
    R语言网页爬虫
    高性能计算
    数据操作
    数据库操作
    面向对象编程
    元编程
    R 的内部机制
    数据处理
  • 原文地址:https://www.cnblogs.com/SmartHypercube/p/reading.html
Copyright © 2011-2022 走看看