【对一些实例的看法】
- “我写了二叉树的遍历算法实现,在这里,二叉树是数据结构,遍历的实现细节是算法。C程序就是结果。但是这个程序有什么实际用处呢?在Java和其他一些语言中,似乎没有指针,那我可以不必了解二叉树么?”——数据结构是组织数据的方式,虽然不同的语言在实现这些方式时有所差异,但是核心的理论却不会变。这也启示我们:CS的知识多而复杂,而且更新速度快,想要高效的迭代自己的知识体系就要学会比较众多知识之间的区别与联系。比如在C和Java里面,单引号表示字符,双引号表示字符串,但是在Python里,单引号和双引号都表示字符串,因为在Python里将字符看成是长度为1的字符串,换言之,Python中没有字符这种数据类型,而是统一用字符串来表示。
- “我成了一名职业程序员,但是我发现所有的算法别人都已经实现了,我只要调用就可以。似乎我们公司的软件与数据结构、算法的关系都不大。那我当初辛辛苦苦学习的数据结构和算法有用么?如何区分一个好的程序员和不好的程序员呢?”——人们常说不要造重复的轮子,软件工程其实也有着类似的道理,具体来讲,身为程序员,会使用他人造的轮子算是基本功,比如他们已经将基本功能写好封装成中高层API,那么我们直接调用这些API进行编程可以大大提高我们的研发速度(比如Tensorflow的LinearRegression类,可以很方便的实现对大数据的线性拟合),但是,光会用轮子还不够,还需要能够读懂轮子,只有这样,才能够在前人的基础上进行优化。而读懂轮子的这个流程中就需要你掌握数据结构等知识了。所以一个好的程序员不仅会使用他人造的轮子,更能够理解和再创造轮子。
- “我上班后,发现以前同事写的程序真是垃圾,根本看不懂,无法维护。我要推翻重写!后来一个老员工笑嘻嘻地告诉我,我们现在看到的程序,就是去年的新员工愤怒地推翻重写之后的结果,大家反映还没有以前的版本好用呢。”——这个实例说的是代码的可读性问题。在进行团队合作的时候,我们经常需要进行代码交流,那么如何让他人快速读懂你的程序呢?这个时候,注释就显得尤为重要了。除了注释,版本控制也非常重要,因为更改后的程序不一定比原来的程序性能更优或者功能更加完善,那么进行版本控制的话有利于防止系统功能回退的情况。
【软件的特殊性】
- 软件具有复杂性,不可见性,易变性,服从性,非连续性。因此软件不像硬件那样,以大致每两年提高一倍的速度发展。
【对“中文编程”是解决中国程序员编程效率的银弹的看法】
- 银弹被比喻为具有极端有效性的解决方法,作为杀手锏 、最强杀招、王牌等的代称。但是目前而言,中文编程还有许多的难题没有解决,比如中文编程无法做到与英文编程同等,或比之更快的识别速度;中文编程中,对于非常用字体,古文字体,繁体字等应该如何将其显示都还有问题;中文编程发展时间和速度远不如英文编程那么普遍,所以在实现程序交互,融合的过程中,很有可能出现问题;中文编程与英文编程相比,并没有出现什么特别的优势和特点,不像java语言,在发展过程中的不断衍变,成为主流