书摘几则
IT革命歌曲 - 我有一把新锤子。
http://yishan.cc/blogs/xin/archive/2006/04/28/473.aspx
中速,豪迈地,RAP
(四川话中,‘锤子’好像不是褒义词,当然,
这并不能妨碍我们豪迈的情绪)
我有一把新锤子,问题当成钉子看。
我刚学了屠龙术,猫狗当成龙来宰。
Socket 已经过时了
要用就要用Web Service
当我学会了OO,所有的不OO代码都要重写,因为它们看起来不够OO,
没有对象,创造对象,也要OO。
当我学会了“存储过程”,所有SQL的访问都要重写,
不管原来是怎么实现的,因为“存储过程”可能会快一点。
虽然我们只有200 个用户,但是我要为200万个用户设计。
当我又听说了强类型的数据集,所有SQL 访问当然要重写,
包括“存储过程”,因为它们不够酷,
至于用户的需求,系统的稳定性都可以暂时不管,因为我的类型是最强的!
我有一把新锤子,问题当成钉子看。
我刚学了屠龙术,猫狗当成龙来宰。
【从头反复】
这首歌是《移山之道》的作者邹欣老师在2006年写的,其中某一段写的是我。那会儿学了点新技术,总想在哪儿都能用上,OO、设计模式、强类型数据集,莫
不如此。工作了一年,回想起当时的我,真是汗颜无地。现在人慢慢地冷静下来,对面向对象和设计模式也有了一些反思,这里先录几段书摘,了解一下别人的想
法。
《Better, Faster, Lighter Java》by Justin Gehtland and Bruce A. Tate
2.1.1.2 Design patterns
Treat design patterns like a framework that you purchase. Each one has
a cost and a benefit. Like a purchases framework, each design pattern
must pay its own way. If you want to embrace simplicity, you can't
build in each and every design pattern from the famous Gang of Four
book, Design Patterns, by Erich Gamma, Richard Helm, et al.
(Addison-Wesley).
True, many design patterns allow for contingencies. That's good. Many
Java gurus get in trouble when they try to predict what the future
might hold. That's bad.
The best rule of thumb is to use design patterns when you've physically established a need, today.
You need expertise on your team that can recognize when a given
situation is crying out for a particular pattern. Too often, developers
buy the Gang of Four book, or one like it, crack it open to a random
page, and apply a pattern that has no problem. Instead, it's better to
find a difficult problem, and then apply the right pattern in response.
You need experts on a team to apply any technology. Design patterns are
no exception. In other words, don't impose design patterns. Let them
emerge.
2.2.2.4 Design patterns
There's an inside joke among many Java consultants. You can often tell
which books inexperienced developers are reading by reading their code.
Sometimes, it's the reader's fault. When you read about a technique,
you're anxious to try it out. But don't just start coloring on the
walls. Use a coloring book first—like a sample application.
Sometimes, the problem lies with authors, who often oversell ideas or
solutions. Other times, the problem lies with frameworks. If you want
to know what I mean, pick up a book that deals with EJB design
patterns. Now, count the number of design patterns that do nothing more
than work around EJB features that stink. Or look to the seminal
Gang of Four patterns; they
are workarounds for problems with C++.
For this reason alone, many influential consultants abhor design
patterns. I'm not in that camp. But let the need for a design pattern
emerge before you work it into an application. In other words,
wait until you have a problem before you look for a solution.
《走出软件作坊》by 阿朱
这是一本靠谱的书。
p. 60,走钢索的人——架构师
有一部分所谓的架构师,技术超深厚,框架堪比Spring之类,但自己一个人闷头写框架不断优化,力竭使用最先进的技术思想,希望
把最豪华的设计模式融进去,希望把OSGi融进去,希望把AOP融进去,全无视那些想利用框架减轻自己工作量提高自己工作效率的应用功能开发同事。这是在用公司工资玩技术呢,还是在满足个人技术幻想呢,还是在实验呢?到底在干吗?价值在哪里?
…………
我手底下有个框架开发员。他的技术渴望很强烈,为了技术难题攻克,可以不吃不睡。并且技术敏感度很强,学习也快。所以当时我感觉他是个程序员的料,就把他拉到我的手下。
但是有个问题,他写出的框架代码,在平时开发业务功能的时候挺麻烦。大家可能需要的是一把铁锹,但是他却给大家N根不同长度不同粗细不同材质的木棍,N个
不同形状不同用途的铁锹头。大家会有N种组合。不仅导致他写代码老超任务期,而且也让使用人感觉没多大帮助。使用起来复杂,而且还得配置这个配置哪个,需
要注意的地方太多。业务开发组的同事就不愿意用,
还不如把代码自己直接写死了得了。【陈硕:先写死往往比预留扩展接口更加实用】
超期还会影响业务功能开发组的使用。本来人家是为了想加快自己的工作效率。你答应好这个星期给业务开发组提供一个功能,但你没有拿出来。就耽误人家进度。你多次拿不出来,人家业务开发组还不如自己开发一个呢,求人不如求己。
我最后警告他:
OO、设计模式、接口?!和客户一点都没关系!那客户为什么要给我们钱?老板为什么要给开发部钱?开发部存在的意义在哪里?难道是翻译成代码?就这点意义,还要?凭什么?你的价值在哪里?如果你认为自己技术够牛,那么你必须证明你能很快做出来。
如果你认为自己技术够牛,最好能牛到,只提供一个函数就解决了他们的问题。别这个代理类,那个聚合类,这个唯一实例类。最好连参数也没有,大家调用一下写一句代码就OK。【陈硕:函数才是最佳的复用单元】
p. 149~150,代码那些事儿——代码编写规范
……大多数刚出道一两年,还有不少在校学生,希望认识并聊聊,要和我聊设计模式、OO、SOA,还有人建议我去看看OO和UML的书籍。
我确实没有阅读过OO的书籍,我不是一个死钻牛角尖的人。我只是有什么问题,就去找解决问题的方法,能解决我的问题就OK,而不在乎我用的正不正宗,也不
在乎我用的是不是OO。可能它是OO的外壳,但是它实质上可能是伪OO,我也不想去深究和区分什么是正宗OO,什么是伪OO。反正能解决我的问题就行。
…………
这样,一个样子像OO的类产生了。
它可能只遵守了OO所提了封装,它却没有实现OO所提的继承和多态。所以它可能是个伪OO,但它确实解决了我们的问题。【陈硕:Object-Based多好啊】
…………
我过去领导过架构组。架构组的人在2002年的时候,疯狂迷上了UML和设计模式,人手一本《COM本质论》和《设计模式》。我手下有一个新手,
就处处是类,处处是抽象,处处是封装,处处是分离,尽量使代码高内聚低耦合。但是这样的的代码太麻烦,他花费了大量的时间,他看自己的代码赏心悦目,别人看他的代码云里雾里,不阅读懂《设计模式》就按照常规理解业务的思路去阅读他的代码根本阅读不懂,不知道他为什么这样写代码,怪异的很。
本来,这位想达到可维护性,可阅读性,却真正的失去了可维护性、可阅读性。这和我前几天看我的朋友周爱民写的《大道至简》中写到:有人希望拿UML去统一用户和软件设计者。殊不知UML有多难理解,而UML设计者却认为UML可以描述一切。就这个道理,要理解你的代码还要去读懂《设计模式》,这要求太高了吧。
所幸这位新手自己都每次写的累,慢慢的也就懒了,觉得确实需要分离的时候就分离,觉得没什么必要的就懒得做了。用他自嘲的话说就是:被磨平了。其实,依我看,他现在这个代码状态才是刚刚好,即照顾了设计扩展,又照顾了实用。
真正的纯OO,纯设计模式,可能只存在于教学和科学,而不在于我们的商业软件开发。我们作为商业开发,强调的是叫座的基础上叫好,所以折中方案是必须的,客户和我们自己两相宜就OK,是否符合正宗,就不在我们的商业开发管理范畴了。
《实现模式》by Kent Beck
【陈硕:这是另外一本靠谱的书,此处转摘据李剑等人的译本。“设计模式”与“实现模式”不同之处在于,前者关注类与类的关系,后者的关注范围限于一个类,即如何写好类的数据成员和成员函数。】
p.23, 第四章 动机
一旦代码以未预期的方式发生变化,人们所曾做出的任何预见都不再是万全之策。人们可能会为了防备将来发生的变化而过早考虑代码的通用性,但如果出现了没有预料到而又势在必行的变化,先前的做法往往就会与现实发生冲突。
p.32, 第五章 类
每层接口都有成本:……并不是接口数量越多软件成本就会越少,只有需要接口带来的灵活性时才值得为它付出成本。所以,既然很多时候并不能提前知道是否需要
接口带来的灵活性,出于降低成本的考虑,在仔细考虑“哪些地方需要接口”的同时,最好是在真正需要这种灵活性时再引入接口。
【陈硕:现在的IDE很容易帮我们做到这一点,所以让“面向接口编程”见鬼去吧,一开始就用具体类才是王道。真正需要抽象出接口的时候重构一把就行了。】
尽管我们成天都在抱怨软件不够灵活,但很多时候系统根本不需要变得更灵活。
需求和技术都在以不可预测的方式变化。通过预先思考来弄清软件将来的样子,其效果是相当有限的。
所有这些因素——对灵活性的需要、灵活性的成本、“何处需要灵活性”的不可预测——加在一起让我相信:应该在确定无疑地需要灵活性时,才引入这种灵活性。
【陈硕总结:一开始就上OO、模式,等于找死。】
分享到:
相关推荐
【标题】:“初中语文文摘文苑微书摘”与我们探讨的是人生哲理与科学思考,虽然表面上看似与IT技术无关,但其中蕴含的思维方式和观察问题的角度对IT从业者同样具有启示作用。 【描述】:“初中语文文摘文摘”暗示了...
对于书籍爱好者,它则是一款理想的书摘记录工具,方便回顾书中亮点,分享阅读心得。 总结,BookSnippets结合了Python、Tkinter和Pmw的力量,打造出一个实用的书摘管理应用,其开源特性更是鼓励了用户参与开发,共同...
而《初中语文文摘文苑微言与书摘》正是一本为青少年精心挑选的文章集合,它不仅涵盖了生活的方方面面,也反映出作者们对世界深刻的洞察和感悟。通过阅读这些文摘,初中生能够对人生的多样性和复杂性有一个初步的理解...
主观性被视为理解人类心理的重要途径,而治疗师的投情能力则是建立有效治疗关系的关键。分析师需要设身处地地理解患者的感受,通过共情来深入探究患者的心理世界。 书中进一步讨论了治疗技术和患者个体化的关系,...
样式标准则是CSS,它允许开发者独立地定义页面元素的外观和布局,使页面设计更加灵活和统一。行为标准涵盖DOM(文档对象模型)和ECMAScript(JavaScript的标准版本),它们处理网页的交互和动态功能。 书中提到了...
4. 书摘与笔记:允许用户添加书摘和笔记,方便回顾和分享。 三、技术选型 1. 开发工具:使用Android Studio作为主要开发环境,利用其丰富的调试工具和集成开发环境。 2. 开源库:引入如Android Jetpack组件库,提升...
首页可以展示热门书籍、新书推荐和用户动态,分类页则根据图书类型进行细分,搜索功能需强大,支持按书名、作者、出版社等条件查找。此外,个人中心应包含用户的阅读记录、收藏、评论和好友列表等信息。 图书信息...
文档部分可能包括读书笔记、书摘以及对书中关键概念的深入解析,这些资料有助于学员巩固学习成果。同时,文档中可能还会涉及对当年技术趋势的预测,如云计算的早期发展、移动计算的兴起等,展示微软对未来技术的洞察...
从文件中可以提取出以下几个重要知识点: 1. Tapestry框架的历史和特点: Tapestry是一个开源的Java Web应用程序框架,它的设计理念和开发方法与众不同。根据文件中作者的描述,Tapestry框架在2001年时已经吸引了...
随着技术的发展,现代阅读器不仅满足基本的阅读需求,还提供了更多个性化服务,如云同步、书摘分享等,进一步提升了阅读体验。无论你是epub的忠实粉丝还是PDF的拥趸,都可通过合适的阅读软件找到属于自己的数字阅读...
在MATLAB中,命令是执行操作的基础,它们可以分为基本命令、函数命令和内置函数等几大类。基本命令包括变量赋值、数据类型转换等;函数命令则是通过调用函数来完成特定任务,如绘图、统计分析;内置函数则涵盖各种...
多看阅读系统提供了丰富的自定义选项,如字体、排版、背景色等,还有书摘、注释等功能,提升了阅读体验。同时,多看阅读商店提供了大量免费和付费的电子书资源,可满足不同用户的阅读需求。 总的来说,通过降级Kpw1...
2. 多看功能:多看系统支持EPUB、PDF等多种格式,提供批注、高亮、书摘等高级阅读功能,并且可以自定义界面主题。 五、内容管理 1. 无线同步:开启Wi-Fi,Kindle3会自动同步你的阅读进度,确保在任何设备上都能...
“请替换文字内容”是需要填充具体内容的地方,可以根据不同的主题和需要,插入相关的数据、案例分析、书摘或是个人阅读体验。例如,在介绍书籍影响力时,可以插入读者评论、专家评价,或是书籍销售数据等。 此外,...
其他国家如韩国、法国、日本也有较高的阅读量,相比之下,中国的阅读量则较低。 图书宣传的创意与策划分为三个境界,首先是发布书讯、书评和书摘,然后是打造品牌图书,提升出版社形象,最后是以出版社的品牌带动...
作者Joan Magretta通过书摘分享了对管理学的深刻见解,强调了管理在21世纪组织成功中的关键角色。 1. **管理的核心** - 管理不仅仅是对组织的控制,而是一种通过有效决策和策略来满足客户需求、创造价值的过程。 ...
《没事别随便思考人生》是一本引导读者反思生活节奏与态度的书籍,其读书笔记PPT模板则为读者提供了一种记录与分享阅读感悟的工具。在这个快节奏的时代,我们常常被信息洪流裹挟,忙碌于追求物质与成就,却忽视了...
用户可以在阅读过程中随时做笔记,高亮重要段落,甚至创建书摘,方便日后查阅。而云同步功能则让这些笔记和进度能够在不同设备间无缝衔接。 对于PDF和文档类阅读,软件可能具备强大的解析能力,能自动适应不同页面...
而内容预加载则是在用户当前阅读位置前后预先加载部分内容,减少等待时间,提供无缝的阅读体验。 其次,电子书阅读功能的设备不仅限于软件,还包括硬件设备如电子阅读器、平板电脑或智能手机。这些设备需要有良好的...
例如,多看系统支持字体调整、排版优化、PDF阅读增强、书摘记录以及语音朗读等功能,极大地丰富了用户的阅读体验。 当我们谈论“KT and KP(xTouch_2015-05-15.36515.rtm).zip”这个文件时,这实际上是Kindle Touch...