全部学习汇总: GitHub - GreyZhang/The_Mythical_Man_Month: My reading notes of The Mythical Man-Month.
继续前面没有结束的没有银弹的章节的学习笔记整理,前面一半抛出来了一系列的问题,而这一半则是一些对应的方法性的讨论。
高级语言可能是解决一系列问题的一种超级武器,这个的确也是如此。但是,就我现在了解到的信息看,这个还是有一定的局限性。为什么呢?因为,相应的高级语言的出现解决的通常来说是一个特殊的领域或者专用的领域的问题,对于整个大的软件开发环境来说没有大的变化。
这里提到Ada语言,其实C语言应该是跟Ada类似的一种开发语言。
面向对象编程的技术让整个软件开发模式也有了一些改观,很遗憾的是这个也是有一定的局限性。其实,在控制领域,面向过程的C语言开发还是主流方式。当然,我发现现在的嵌入式控制软件开发有一部分也在吸收面向对象编程的一些理念。
这里提到了人工智能,并且提出了一些怀疑点。但是,现在显卡以及矩阵运算的发展已经完全打破了作者曾经的眼界局限了。
图形化编程其实也有,而且很多种。scratch其实是一种,PLC的梯形图也是,simulink的模型也算。
代码阶段的测试方式也逐渐成熟,比如高级语言的静态代码分析就是其中很好的一个例子。
曾经的工作站怕是还比不上现在的个人计算机,而现在个人计算机也有很多人倾向于使用工作站了。
这里有点让我觉得好奇,其实在作者写这个书的时候,看起来unix以及C语言早就已经出现。那么,作者为什么不讲这部分呢?其实,C语言以及unix的组合已经可以解决很多作者曾经面临过得窘境。
关于设计的共享,GNU的出现极大的推进了这方面的发展。不得不说,我们现在很多产品或者日常生活中的服务都从GNU的成果中获益,只是很多人没有察觉。
能够帮助客户弄明白他自己需要什么,这也算是高级的软件工程师的一种职业素质吧!
为什么现在的很多软件开发没法进行简单的堆叠?其实很大的程度在于实现本身,实现并不是对已有东西的简单拼接集成还是需要一定的创造性设计。
软件开发是一个成长的过程,从很多优秀的软件产品中我们能够感受到其中的成长性。比如说,不断在发展壮大的linux,让我们看到他从一个玩具逐渐成为了unix的继承者。而高级语言本身,有时候也是不断成长的。比如python、Go等高级编程语言,自己实现的过程中,采用自己再次重塑自己,结果得到了更加高效的演化版本。这都是软件开发本身就是一种成长的典型例子。
我自己hack的时候,也喜欢先让最简单的系统运行起来,之后在这个基础上不断滚雪球发展其功能。这是一个从0到1的过程,通常在这一步做到之前,我会在原地徘徊很久。
一切设计的源头其实还得追溯到人,很多时候,一个功能会因为一个人的思想而发生重大的改进。很多产品,其实就是在一个或者少数几个人思维模型中诞生的。当然,这里举例提到的unix,我觉得就是一个非常典型的例子。
有时候,技术高手对于一个公司的重要度会胜过管理。而从描述看,其实国外大部分的公司或许也是重管理轻技术的。我想,微软可能会是一个例外,从各种介绍中我听到过微软这方面的不同。
对于一个团队来说,人才的培养是一个永恒的主题。好的团队应该有一个好的人才成长环境,也得有好的人才成长条件。我再次想到了微软,虽然我没有去体验过,但是从网络上的各种信息来看,至少我看到的信息描述了一个我非常欣赏的成长氛围。