最近在读阮一峰译的Paul Graham的书——《黑客与画家》。阮一峰的翻译非常好,读起来非常通畅,没有大多数翻译作品中的那种别扭的英文句式的感觉。

《黑客与画家》主要是讲:优秀的程序员,创业,编程语言的选择,还有一些思维方式等等这些话题。这里想谈谈编程语言的选择这个话题。

Paul认为,选择一个先进的高级语言非常重要,会大大缩短你的开发时间。程序的行数越少越好。他介绍了一种lisp语言,据说“非常伟大”“非同凡响”。虽然我没有用过lisp,但是我绝对赞同尽可能选择高级语言进行开发。这也是为什么我们不想用Verilog开发FPGA,不想用汇编语言去开发DSP,我们希望用C/C++甚至python在普通CPU上开发SDR。可是当SDR系统对效率有高要求的时候,我们又不得不妥协,钻到底层代码里去做代码优化。例如在GNU Radio中,你如果想开发一个速度特别高的系统,你可能不得不先抛弃python,用C/C++写大部分的代码,然后某些关键部分,再不得不钻到汇编代码中去抠那些细节,最终的汇编程序恐怕第二人再无法看懂。这是一件多么矛盾的事情呀!

听说Intel开发的LTE系统,为了提高效率,代码写得像天书一样。很多循环被“故意”展开,使得执行效率更高。可是这样做的话,与DSP比还有优势吗?微软SORA的代码倒是显得非常高级,完全是面向对象的架构,我没有深入研究过它的效率问题。

我经常用到matlab,这是我最喜欢的一种语言。用它来写程序就像用草稿纸一样。当我们要解决一个问题的时候,通常只需要拿着matlab这张草稿纸演算一段时间,中间会不断的修改算法,直到它能够解决问题为止,此时这个程序也就写完了。最后才是写文档。而不像C语言,你可能需要先把一个设计文档做好,然后再来一步一步的把文档翻译为程序。

还有一个浮点和定点的问题。如果我们能够完全用浮点数进行SDR开发,那是一件多么幸福的事情啊。你可以少做很多什么溢出啊,量化范围啊之类的事情。这也是为什么GNU Radio主要基于浮点型的原因吧。大家都是懒人,能少打几个字就少几个。

哦,所以我一想到,过一段时间可能要进入定点和汇编的世界,我就头疼啊~