zoukankan      html  css  js  c++  java
  • 从谭浩强的《C语言程序设计》到《电容应用分析精粹》

    不记得具体从什么时候开始(反正很多年前的事了)的,不少人都陆续批评过谭浩强的《C语言程序设计》,各方面都有扒过。例如,与实践脱节,很多例子在不同编译器上运行是错误的,代码风格糟糕等等方面。这里首先给出本人对《C语言程序设计》的看法:

    在国产C语言相关的教材中,《C语言程序设计》应该算是少有的、还算不错的教材

    有些人就会想:你是不是收钱了?给《C语言程序设计》打广告吗?错!《C语言程序设计》出版了这么多年,还用着我这个无名之辈去宣传吗?咱又不是比尔盖茨或求伯君!我只是想站在一名图书作者的角度去评价它。当然,我觉得有一点点资格评价它的原因,并不仅仅是因为我写过书,也略懂写书,更是因为《C语言程序设计》曾经是我的大学教材,因为咱不对自己未精读过的书做评价。

    与实践脱节?这个批评是错误的吗?严格来讲并不算,但是《C语言程序设计》本身就是一本学校教材,它的定位就是初学者与理论,用与实践相关程度来评价是否有欠妥当?会这样评价的人可以说根本没有用心去看这本书。想要实践方面的书?图书馆里不是有大把吗?现在花点钱可以买到很多书,英文水平不错也能直接看国外原版,从网络下载电子书甚至连都省了。为什么同一个班级毕业的学生,有些人的编程能力差得离谱,而另外少数人却已经达到专业编程员水平?真正的原因不在教材,而在人本身!

    有些例程在不同编译器上会出现不同结果?这个批评是错误的吗?严格来讲也并不算,但还是那句话,《C语言程序设计》主要是讲理论的,它只是传达一种学习与思考方法,这才是大学教材应该做的事,而《C语言程序设计》在这方面做得很好。如果在其它编译器上的运行结果不尽相同,你能分析出原因吗?我可以负责地说:认真学过《C语言程序设计》的读者肯定做得到

    代码风格也被人批评得体无完肤。举个例子,《C语言程序设计》中很多例程会直接使用多个“常数”(也称为“魔数”),有人批评应该使用#define将它们定义为宏,这样可读性更强。这个说法错了吗?严格来讲也不算!但是如果每写一个仅有几行的代码就使用#define定义为宏,我身为一个作者就坚决不赞同这么做,因为代码少时使用常数没什么问题,不然就会显得冗余(写书灌水),关键要理解代码说明什么

    在进行图书撰写时,为了方便读者理解某个知识点,作者会适当编写一些配套代码进行说明,你却关注这段代码是不是用#define或函数,这就不是一个真正用心看书的人该做的正事。相似地,有些人批评《C语言程序设计》中很多例子都是main函数一路写到底,还是那句话:关键要理解代码说明什么。几十行的代码还要弄个函数调用,费不费劲呐?说不定老谭到时采用了函数,又会有一波人说:这么短的代码都用函数,明显是灌水!

    我在《显示器件应用分析精粹》中也有一些代码(是C51,不是标准C,但两者相通),但为了使代码更紧凑(不想凑篇幅),比较短的代码也会直接写常数,你觉得这种风格不好?某一段代码如下

    图片

    我也可以尝试批判一下自己写的代码:delay_us与delay_ms函数竟然写成一行,老龙你是不是吃SHI了?翻阅古今中外的编程书,这样写代码的只有你一家,赶紧自杀谢罪得了!虾米?竟然使用1000这样的“魔数”,你是怎么搞的?不会用#define定义一个宏吗?这么点常识都不知道,还写书!我是绝对不买的!大家也不要买!水平太渣了!本来我是不想说的,但是……虾米?变量i是干什么的?不会取一个有意义的名称吗?左花括号另起并占据一行不行吗?有病呀!虾米?注释用双斜杠,这是什么骚操作?没看到很多嵌入式编程都用/**/……(以下省略吐槽一万字)

    片面地批评谁不会呀?这是一种最低级的操作,即使是Linux之父写的代码,要批判总是可以找到攻击点。语言只是工具,真正卓越的编程员不会如此片面地批评《C语言程序设计》,因为TA懂得每本书都会有其定位与局限性,懂得从书本中找到自己真正需要的东西(去“糟粕”留“精华”),懂得从书中提炼出学习方法,懂得使用思辨的方式看待所发现的问题这对于所有行业中有着卓越成就的人都是适用的),而不是简单地从边边角角去批判,这也是一种不理性不成熟的行为。

    如果一个人执意要从边边角角找出图书的错误,总是可以成功的,无论是霍金的《时间简史》还是拉扎维的《射频微电子学》,为什么这么说呢?咱们可以放开思路讨论:假设一只仅有二维空间概念的动物,它是其所在空间的一名物理学家,并且也提出了很多真理或定律。但是在我们看来,这些所谓的真理或定律并不一定是正确的,因为所在的维度不一样。同样我们这个维度提出的理论,在更高位面也并不一定是正确的,你同意吗?我想表达的是:每一本书都有其定位与局限性!在某个设定框架内可以做到基本正确,但跳出这个设定却不然,这是无法避免的。如果你决定用心阅读某本书,首先就得接受其定位与局限性,否则你会觉得到处都是错误。

    同样,《电容应用分析精粹》中的某些内容,从某些角度来看也许并不严谨,但它只是通过一种使读者更容易理解的方式其定位的读者阐述本不太容易理解的知识点,从这个角度来讲,《电容应用分析精粹》做得很好!具体来讲,在阐述同一个知识点时,《电容应用分析精粹》中会采用某种形象的方式,但在《三极管应用分析精粹》可能就会采用另一种方式,如果要写一本针对在校大学生的教材,同一个知识点的阐述方式又会有所不同。

    图书撰写需要站在不同角度去实际操作,当你的读者定位不同时,描述方式或严谨程度是不同的,但重点在于把想要表达的意思清晰地展示出来。记得初中化学老师曾对我们说过一句话:等你们学习高中化学的时候,就会知道现在学到的很多内容是错误的!那我们可以去批判初中化学吗?肯定不妥嘛!因为教育有它自身的客观规律,初中阶段有其自身广度与深度的局限性,要不咱们初中、高中、大学全部一套教材不就完事了?换句话说,会花费宝贵的时间一味地片面找图书问题的人(这种行为就是我们所说的“找茬”,字面意思),本身就存在一些问题,因为TA缺乏最起码的写作意识,也不具备最基本的思辨能力

    人这一辈子几十年看似很长,但在整个宇宙中也只不过是一粒尘埃而已,我们应该用有限的生命去做一些有意义的事情,如果非要用一句话来具体概括,我的选择是:态度决定一切

    关注《电子制作站》微信公众号dzzzzcn,更多精彩技术文章与视频等着你~~
  • 相关阅读:
    ASP.NET MVC学习笔记-----ActionInvoker
    quartz启动报错
    THUSC 2021 游记
    C++下随机数的生成
    友链
    memset一些技巧
    CodeForces Round #705 总结&题解
    php计算两坐标距离
    vue中使用keepAlive组件缓存遇到的坑
    vue 中 keepAlive
  • 原文地址:https://www.cnblogs.com/sunshine-jackie/p/14632140.html
Copyright © 2011-2022 走看看