编程感悟

最近在看sicp,有些感想。

我们通过编程解决问题一般分两步,首先靠人抽象出问题模型,然后编程。

这里可以看看函数式编程同主流的命令式OO编程的区别。

前者直接把问题变换成各种计算过程的组合,写出来的程序接近于“计算”的本质。

而后者只是简单的把问题翻译成对应的“对象”,就开始写程序,写出来的程序大部分是“分派”而不是“计算”,偏离了计算机的基本能力。

这两者的本质区别在于,要不要靠人脑把问题模型塑造得接近于计算机模型?

对于大部分专业素养不够,只学了c++就出来蹦跶的从业人员来说,抽象出对象模型已经很不错了,其余就交给计算机做吧,殊不知计算机根本不喜欢他们的“自然语言”模型,即对象模型。

作为真正的编程人员,应该去“宠”计算机,靠自己抽象出计算机喜欢的模型,程序自然跑得更好更有效率。

结论,函数式编程的确是最适合计算机的编程模型,递归才是计算机擅长的嘛。

 

另外就是关于编程语言了。

编程语言都有自己适用的领域。c语言就应该做系统级别的,底层的编程,写效率模块,写算法模块。

而java,c#这样带有完备类型系统,垃圾收集等的高级语言,适合复杂的业务逻辑,处理大量对象之间的关系。

c++呢,就是编程语言发展早期的一种妥协方案。现在看来,往下走,比c多出来的特性在系统级别毫无用处。

往上走,由于缺乏元语言,垃圾收集等底层支持,处理起复杂的业务逻辑以及对象生命期管理时,丑陋到无加以复的地步。

各种各样的智能指针,设计模式,大量的类,我们到底是编写逻辑呢,还是在和计算机斗争呢?

这里又要批判一下从业人员的素质了,大部分人只学了一种编程语言,比如c++吧。工作以后也不愿意学新东西,开拓视野。

一天到晚耕耘自己的一亩三分地,这样的后果是啥呢,就是看到什么问题都往所谓的OO上去套(先不讨论模板啥啥的)。

只有一把锤子,只好把所有的东西看成钉子了。问题这样还不是最糟的,人家还是有追求的,自以为专家嘛,为了设计得更灵活健壮,

就开始捣鼓智能指针啊,设计模式啊,结果搞出来一坨屎,人家还自鸣得意,多么高深啊。。

而我们应该怎么做呢,就是开拓视野,多接触这个世界上其他东西。一个问题可以分层,各个层次用最适合的工具去搞定。

砍树用斧头,刨平用刨子,钉钉子还是用锤子,刷油漆用刷子,这样才又好又有效率嘛。都用锤子好像也行,锤倒一棵树不知道要多久。。

但是肯定是又慢又丑。

 

 

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页