今天朋友给我微博留言,说我的《大话设计模式》被拍砖了。果不其然,确实是在《放过设计模式吧》的评论第8条中有。还好博主并没有在博文中点名我的书,还算是留了点客气。不过如此轰动的一篇博文(博客园编辑首页推荐),但却传达了一些让初学者困惑的信息——我们初学者在不知道对错的情况下到底还要不要写设计模式的心得文章?针对此我写了一篇吐槽的博文,说说我的想法。

我对《放过设计模式吧》文中所说的技术内容绝大部分认同,这点需要事先明确。作者谈了很多他对设计模式的理解和现在网上很多初学者误用设计模式的现象,这些都是可取的。比如将GoF的《设计模式:可复用面向对象软件的基础》应该翻译为《面向对象设计23招》这样的趣解,比如说策略模式和桥接模式的根本不应该因为UML图的类似而就认为他们容易混淆,他们根本就是讲了两回事等。作者对设计模式理解的高度应该是足够了。

但阅读完毕后,作为一个读者,特别是站在一个初学者的角度,这篇文章却让我感觉很压抑,有一种“他对设计模式理解得这么深,让我都不敢再去讨论设计模式了,真心怕挨骂呀!”的感觉。我不知道别的读者是否是这样,不过对于阅读本文的那些非擅长设计模式的读者来说,应该有类似的想法。

我一直有一个观点:“好的技术文章应该让读者更自信而不是更自卑”。自信是指读者读完之后,感觉很有收获,心情愉悦,有兴趣可以试着照做。自卑是指读完之后,甚为不爽,这个看不懂,那个不理解,有些观点与作者不同,作者解释不能说服自己,感觉看着没劲,学着费力。

这篇文章没有明确的给出最终应该怎么做的建议,给人的感觉可能是:“如果你没有彻底研究明白GoF的《设计模式》之前,最好不要写文章来献丑,那真是很罪恶的。”(希望作者能够声明你其实不是这样的想法,我愿意为这个推论道歉)。难道因为知识理解可能有错误,所以就不要写博客和发表评论了?我觉得不应该是这样的。

虚构一个在小学手工课上给小朋友讲课的场景:今天我们来学习一个新的工具——锤子。锤子是敲打物体使其移动或变形的工具。最常用来敲钉子,矫正或是将物件敲开(锤子的百度百科定义)。……等老师介绍完锤子的作用后,让小朋友练习。面对错误使用锤子的小朋友,老师的可能会有两种态度。

第一种:现在你们手头都有一把锤子,你们只可以用它来敲钉子。锤子就是用来敲钉子的,不允许敲别的东西,那样是不对的。……怎么搞的,你怎么可以用它来敲桌子呢,锤子是用来敲钉子的,你太笨了!……有部分违规的小朋友在挨了批评后失去了使用锤子的信心,不玩它了。还有部分小朋友依然用锤子做着违规的事情,他的眼里所有的物品都成了“钉子”,甚至是用来敲人(鄙视肖传国雇人用锤子伤人),这样的小朋友被老师严厉地批评。整节课下来,大部分小朋友都学会了正确使用锤子,但还是有一些小朋友有些郁闷和叛逆,反正就是——讨厌锤子只能敲钉子。

第二种:小明,你为什么要用锤子敲桌子呢,这样敲后,桌面就会有凹洞,不就不好看了吗?……你为什么要用锤子打人呢?如果是打在自己身上,会不会很疼?……你能不能不用锤子就把钉子钉进木板?不能是吧,用了锤子感觉如何?是不是很容易了?……同样一堂课下来,同样有部分小朋友在使用锤子的目的上犯了错误,同样结束后还是有部分小朋友会用锤子去敲打不该敲击的东西,但是每个小朋友都没有失去学习的兴趣,都在成长过程中。

好了,我虚构的场景介绍完了,这个场景的原型是源自“当你手中有一把锤子,什么问题看起来都像是钉子”的格言。当一个初学者学习设计模式的时候,通常阅读GoF的《设计模式》是效果不好的,一般会打击学习的兴趣,不排除有少部分直接阅读就能理解的初学者,而更多可能是阅读像《Head First设计模式》、《Java与模式》以及我本人写作的《大话设计模式》等等这样的通俗读物来初步了解设计模式。

刚学完一个模式后,等于初学者手里拿了一把“锤子”,此时他是否会希望能在自己的编程项目或者练习中使用到这把“锤子”?当然是希望的。于是他们开始尝试使用,如果用得不好自然就得继续修炼,可也有感觉用得不错的人存在。此时他很希望分享一下自己使用这个设计模式的心得,于是一篇博客就新鲜出炉了。他写得好吗?或许应该这样问,对于一个初学设计模式的人来说,他写的心得可能会很好吗?显然大部分情况是不好的,但是为什么他会愿意写呢?因为他在学习时找到了兴趣,建立了自信,于是他开始写了,并且认为是对的。对于这样的博客,如果当一位专家级的人物在评论中写道:“你写得什么垃圾,这个模式不是这样理解的,你还是回去好好读读设计模式的语义吧。”你知道这样的评论对于博客主打击有多大吗?也许他再也不会去写设计模式的心得了。反之,另一位读者在下面评论道:“你写得不错,但是有理解错误的地方,比如(1)(2)(3)等。”于是他们讨论了关于技术的细节,最终这博客主又写了一篇关于这个设计模式的文章,此时他写得比以前好了,赢得了普遍的赞誉。后来,他写了很多篇这样的文章,给读者带来了知识上的分享和收获。

有读者一定会说,你这不就是在写自己吗?哈哈,我想所有写博客人的想法都是一样的。这既是我的感受,也是所有写了博客人的感受,大家写作的目的都是分享心得,并希望得到赞誉或者中肯的批评,而不是被打击和辱骂。

我始终都认为,在没有一定积累之前,对设计模式的理解大都可能是片面,甚至是错误的(包括我自己),但这不等于不应该鼓励去把自己的想法写下来。事实证明,大部分很牛的人写出来的技术文章是不好读的。因为所谓牛人,已经在学习过程中跨越了N个技术门槛才达到某个高度,此时他已经无法理解初学者的困惑的原因了。就像我在教我儿子认字时,我开始根本无法理解,他怎么会区分不开“右”、“石”和“万”,“左”和“在”等字,甚至把“车”和“在”字搞混.。但这些就是小朋友的学习难点,你必须得理解他们,耐心教导他们。

一般说我的书是垃圾的读者,通常都是牛人,原因就是他们已经跨越了初学者的障碍,因此没有去认真读我的书,就给出了极端情绪化的否定,说大话纯粹是扯淡。因此对于两本书都持否定态度,这样的批评我一般可以忽略。而前几天有个读者在微博中说“相比《大话设计模式》,《大话数据结构》真是本垃圾书。”我略感惊讶。说一本不错,而另一本是垃圾,这比较少见。我于是和他在微博中讨论了一下。最终原因找到了,因为他看GoF的书没看懂,所以觉得《大话设计模式》不错,而他之前学过严蔚敏的数据结构,至少是已经非初学数据结构的人了,因此再读我的《大话数据结构》会认为差别不大(唉,那也不至于垃圾呀)。明白了吗?这就是关键。造成被读者极端肯定或否定的原因就在于他之前有没有好好学过它,使得阅读体验结果是愉悦还是失望。事实上,两本书都是我写的,在准备写作《大话数据结构》的时候,我就考虑到了之前一些《大话设计模式》的读者觉得大话过多的意见,而改为少一些白话,多一些讲解的方式,但毕竟两个技术差异太大,你不能指望全都是同样的趣味体验。由于在写作前是购买和阅读了市面上绝大多数有名的数据结构图书才开始写作,除了头两次印刷有不少细节错误是不可原谅以外,整本书对数据结构的讲解是不错的。我个人认为《大数》要比《大设》更好一些。

有点跑题了,回过头来说《放过设计模式吧》这篇博文,我觉得值得阅读,里面作者对设计模式的分析很有学习借鉴的意义,可以帮助读者更好的理解设计模式。但是我依然鼓励所有学习设计模式(也包括其他所有技术)的朋友把自己的学习心得体会写下来,哪怕是不够好的,哪怕是有错的。人都是从小长到大的,谁TM没幼稚过。错了,改就行!对于什么才叫好的技术文章,标准可能有很多条,但我觉得是能让读者阅读愉快,更加自信而不是更加自卑就是其中很重要的一条。生来世间,多少总得留下点有价值的东西,写比不写强,多写写自然就好了,不是吗?加油!

吐槽完毕,继续休假式治疗,再见!

好的技术文章应该让读者更自信而不是更自卑相关推荐

  1. WideNet:让网络更宽而不是更深

    这是新加坡国立大学在2022 aaai发布的一篇论文.WideNet是一种参数有效的框架,它的方向是更宽而不是更深.通过混合专家(MoE)代替前馈网络(FFN),使模型沿宽度缩放.使用单独LN用于转换 ...

  2. 关于技术文章“标题党”一事我想说两句

    阅读本文大概需要 1.8 分钟. 前天发表的一篇文章,标题是:"面试官:你刚说你喜欢研究新技术,那么请说说你对 Blazor 的了解".确实,这篇文章有标题党的味道,如果因此给部分 ...

  3. 程序员写好技术文章的几点小技巧

    简介:其我本身并不喜欢写字,之前写的几篇文章,涉及的话题自带流量,所以阅读量多了一些,谈不上有多擅长.不过我还是分享一下我自己写文章时用到的一些小技巧吧,希望对大家有帮助. 作者 | 门柳 来源 | ...

  4. 不想升级,iOS系统自动更新可彻底关闭! 2016-05-23 16:38 更新/自动/on 昨天笔者发布了一篇关于iOS系统总提醒更新,到底要不要升级的文章,不少读者在微信上留言给笔者, iPhon

    转自:http://www.sohu.com/a/76743973_426094 不想升级,iOS系统自动更新可彻底关闭! 2016-05-23 16:38 更新/自动/on 昨天笔者发布了一篇关于i ...

  5. 程序员怎样才能写出一篇好的技术文章

    来源:http://droidyue.com/blog/2016/06/19/how-to-write-an-awesome-post/ 首先,这算是一篇回答知乎问题 程序员怎样才能写出一篇好的博客或 ...

  6. 2007最受欢迎的十大Ajax技术文章

    DeveloperWorks 中国网站 Ajax 技术资源中心在 2007 年上半年里发表了很多和 Ajax 相关的技术文章.教程.多媒体课堂和专栏.我们特地整理出 2007 上半年最受读者欢迎的内容 ...

  7. 2016,你最不应该错过的热门技术文章

    本文首发在"美团技术团队"微信公众号,内容已覆盖截止至2017年1月23日最新的技术文章. 1955年3月15日,爱因斯坦给刚去世的密友Michele Besso家人的信中说: & ...

  8. 写一篇好的技术文章有多难?

    就我而言,一年里我也没写出几篇让自己满意的文章.因为写一篇好的技术文章真的很难. 对于一篇好的文章来说,它有这么一些要求: 构建文章所需的理论体系 实践及代码验证 公正又有所偏爱的观点 又要注意这么一 ...

  9. 【收藏】ASP.NET英文技术文章推荐[11/4 - 11/11]

    [1] An Introduction to Simple Object Access Protocol(SOAP简单介绍) 这是一片言简意赅的介绍SOAP(Simple Object Access ...

最新文章

  1. 企业一般会用哪些软件来提高员工的工作效率?
  2. Java四种输出语句
  3. java竖线分割_Java String类的Split以竖线作为分隔符
  4. 在jsp页面下, 让eclipse完全支持HTML/JS/CSS智能提示
  5. php java openssl ras_php基于openssl的rsa加密解密示例
  6. oracle11g关闭库,Oracle11g中SYS连接阻止关闭数据库
  7. intel wifi 5100agn linux驱动,intel5100agn网卡驱动下载
  8. 华为、腾讯、百度等大厂投入,汇医慧影奔赴海外  AI+CT新业态起飞
  9. excel表格自动填充为汉字拼音首字母
  10. HTML将广告关闭的JS代码,JS实现可点击展开与关闭的左侧广告代码,js代码
  11. F22.YOLO深入理解(V1-V3)个人感觉非常详细
  12. python read()读取图片_可以python sitk.ReadImage读取列表/系列图像吗?
  13. 机械制造作业考研题目答案分享——金属切削规律3
  14. Python正面硬刚C语言,结果会怎样?
  15. mongoBooster里使用mongo的foreach方法示例
  16. bugku-web-source
  17. 深圳的山人送给大家的中秋祝福
  18. 《全民攻城》开心周末,好礼相赠
  19. CSRF(跨站请求伪造)原理
  20. 武汉交通规划9号线九号线

热门文章

  1. Java同步组件之CountDownLatch,Semaphore
  2. PC端稳定性测试探索
  3. php数组的几个函数和超全局变量
  4. MegaCli查看RIAD相关信息
  5. Suowei的ajax
  6. python应用举例_python基础举例应用
  7. 【论文写作】学生信息管理系统总体设计如何写
  8. python矩阵转置_Python 矩阵转置的几种方法小结
  9. 我对象说陪我过七夕,象说没时间,我一怒给女神做了一个某音上很火的3D旋转相册
  10. Java多线程详解(如何创建线程)