饭后无事,正好公司的TL有兴趣,闲聊聊
COP community of practice

我先吐槽了上午一个培训老师的内容:
根据需求抽象出一个领域模型(形式化),然后根据这些领域符号(无个CRUD),再写一个解释器/编译器(自动化),开发人员使用领域语言开发,这些领域符号通过解释器/编译器,得到可以执行的指令(可以是C代码,也可以是二进制),到这,有没有代码生成器的感脚

吐槽的点:
(1)领域模型的正确性及扩展性,谁来保证
(2)解释器/编译器的健壮性和正确性,谁来保证(编译器是使用Erlang来开发。正常的开发语言使用的是C)
(3)好用的文档,谁来提供,会不会需要很大的工作量
(4)编译器使用Erlang来开发,为了自动化又搞了一门语言,学习成本和试错成本
理由:纵观计算机语言的发展史,除了语言本身优秀,有好用的文档,能解决问题,只有满足上面3点,才可能被推广起来

一个需求,自己搞一个编译器,编译器还可能使用小众的语言(Erlang),如果编译器报错,谁来解决(开发人员可能不懂,因为用的是C,这怎么搞,为了提高工作效率,结果又整了一门语言),
如果没有好的文档和重新培养起来的Erlang团队,这种用新的编译器来解释领域语言的做法,不推荐,但从培养写编译器的人才的话,可以做一下

TL提出新的吐槽的点:
(1)没有好的IDE来自动完成。使用记事本来写业务逻辑,效率低下。写错一个字母,一个关键,一个符号,只能编译时才会发现
(2)报错不好排查,导致效率低下。语言方面的原因;不同部门间的代码不公开,问题会堆在编译器开发团队,结果仍然是效率低下

结论:按照领域化的标准设计API。

这个TL属于研究型的。喜欢研究语言,在聊的过程中梳理了面向对象编程和函数式编程的理解:
面向是指价值观,是信仰,就是把什么作为堆彻代码,和判断代码写的好坏的依据。
面向对象:分解行为,和对象间的协作和交互
函数式编程:着眼点是状态的变化。也就是函数的概念,函数就是如果输入A得到B,A到B的映射或让A生成B的逻辑就是函数

变量根据作用域的不同,可以分为类变量,实例变量,属性,局部变量
类变量是JVM级别的,整个应用需要共享的数据要放在类变量中,譬如static级别的synchronize,class级别的锁
实例变量,就是根据class模板new出来的一个实例,线程级别共享的可以存放在实例中。实例也是面向对象数据交互的基本单位
属性:一个实例中需要共享的数据,存放在属性,也就是class的字段中。
局部变量:一个方法中共享中的数据,存放在局部变量中。
块变量:块变量是局部变量的另一种表达形式。block可以存在方法中,也可以在方向之外,与字段平级。即在一个块中有效。

关于属性的一些补充:
面向对象中,属性一般设置为私有的,因为面向对象数据交互的方式是行为,数据是交互的产物,在需要获取这个数据时,提供一个get方法,或在一个行为的结果返回就可以了。
譬如,一个妹子电脑坏了,肯定是有人把电脑修改这个行为,在修的过程使用什么工具,使用什么命令行。妹子不会太关注,不关注的数据,应该是对象私有的。


上面的一些描述,会不会让大家产生了,是按照是否共享数据来决定一些class应该包括哪些方法
这个问题可以反过来想一下,一个对象肯定具备一些行为,行为大多会处理数据,如果一个对象具备的行为,肯定会有些共有的东西,
因此,是因为这些行为都是一个对象具备的,所以这些行为会共享一些数据^_^^_^
譬如,人的各个器管都共享了血液循环


TL的确是面向编程语言的,对编程语言的痴迷到了执着的程度,他学习语言的目的不是来完成业务,而是来确定语言的
C语言是效率型,可以独自管理内存
C++ 在C的基础上增加了面向对象的特性,即解决了C只能面向过程的问题,引进template增加了开发效率
java解决C、C++容易出现内存泄露的问题,并且顺应网络编程的大势,为网络通信提供好的解决方案,又解决了跨平台的需求。经过这么多看的发展,各种面向应用的框架遍地开花,不仅满足了每个程序员的框架梦,也让java解决方案不能缺席的语言

内存管理、继承、面向对象还是面向过程,这些特性在一门语言设计初期,设计都会进行利弊权衡。
内存管理:开发者自己管理时,会对开发人员要求比较高,内存泄露又是产品的硬伤。因此java,c#出现了
继承:继承的层次多了,肯定也会问题多多,代码可读性,功能的正确性都不容易保障。因此java的单继承就出现了,当然也开了少口子了,譬如内部类
面向对象:Easy to say。面向对象不是简单的创建class了。初学都虽然不容易理解到这个层面,但容易推广,面向对象,不就是创建class嘛

 

其中一位老师,讲了A mouse is a database(Stream&Reactive Program),和数据库操作相比,不是pull,而是要push,理论好像是听懂了,但代码好像是C语言(看到了指针的标识)吧,木有看懂,老师也没有把代码和刚才讲的内容结合起来,懵懵懂懂吧

主要是这些了。其它也不是很懂,没有听明白


一个文章中讲到,业余时间多参加一些培训,认识一些志同道合的人,思想碰撞中,也会得到一些启发,在批判一些自己认为不好的时候,自己也会多想一些

就这样吧