凡事就怕问为什么(认识的升级)系列一

2020-12-17 15:24:55 +08:00
 Braisdom

首先,V 站是个很好的平台,活跃度很高,同时能听到各种不同的声音,修正自身的认知。这个系列是我一直都想整理的,它是我以前在面试时经常会问的问题,很多同事希望我能把比较准确的答案整理出来,大家互相学习。借着这段空闲的时光,认真整理一下,共勉。

很多时候,我们学习一门知识或科学,在编程领域学习一门编程语言或第三方框架,体系化的知识总是能很快掌握,但背后隐藏的规律和原理却不容易被发现。本质上,那些原理和规律是我们已经知道我们不知道的东西,其背后还有很多我们不知道我们不知道的东西,这就需要我们学会不断的问为什么?以 Java 编程和 OO 为基础:

还有很多,甚至会问为什么会出现 Java 语言?设计模式的作用是什么?为什么它会流行等等,不断的问自己为什么,其实就是一种认知的提升。这种哲学式的思辨,也能树立自身的理论,而不是只会认为:它本来就这样,大家都这么用,我也这么用了。现有的所谓系统化的理论,只是教给你知识,却很少告诉你为什么?很多知识只是告诉你创新的结果,却很少告诉你创新的过程和原始的动力,“凡事就怕问为什么” 系列,我以我的认知水平描述一系列“为什么”背后的规律和初衷,欢迎讨论和批评。

系列一:为什么要定义一个 Method

Java 中的 Method 是传统数学的过程化的概念,它的定义和表现形式不再详述,只是从最原始的角度分析?在我们编程的过程中,定义一个 Method 的场景有哪些,寻找其背后的规律,从而形成自身的理解。

面向对象中,Method 被定义为对象的“行为”,是沿用传统过程化编程的概念,将复杂问题逐步分解的一种编程方式,起到描述业务实现逻辑的作用,既然是描述业务特性,其命名就应以业务概念为基础,相互协作的方式也应遵循业务领域中的逻辑特征。当然,业务逻辑的代码实现过程中,也会存在纯粹的程序化的概念,或者交织的概念,这些概念所产生的 Method 没有固定的标准,其实也就是对纯粹程序化概念的英文命名的习惯而已,可以参考 JDK 的代码或者 Apache 项目的代码。

经过上面三种方式的定义,我们基本可以理解为什么要定义一个方法,以及常见的定义方法的必要性,通俗点讲,就是将问题不断分解,使得每个过程都能清晰描述业务实现。我按我的理解, 再补充几点容易识别的必要性:

总得来说,代码不仅是写给机器执行的,更多的是写给人看了。代码是活着的业务文档,注释是补充说明,更多的是需要可运行的代码说明。上述只是我个人的见解,欢迎补充和挑战。

本人最近在找工作,有合适岗位的可以联系我:微信:braisdom

我的开源项目: https://github.com/braisdom/ObjectiveSql

该文档的确存在推广的嫌疑,但请理解。作为一个开源的作者,总希望更多人知道,我在不断推广的同时,也能体现项目的价值和我对项目的期待,如果项目对大都数人都没有任何意义,相信我也会很快放弃。

6594 次点击
所在节点    程序员
70 条回复
Kaiv2
2020-12-17 20:54:44 +08:00
楼主的开源项目很不错,如果 java 原生提供操作符的重载就更好了, 像实现了 Closeable 接口,就可使用 try 来自动 close,比如提供一个 java.lang.Add<T> 接口,实现 Add 接口 add 方法即可重载 + 操作符。这种使用接口标识,让编译器来处的方式更好。
koujyungenn
2020-12-17 21:01:34 +08:00
支持一哈
Braisdom
2020-12-17 21:53:53 +08:00
@l00t @yule111222 @haosamax

我来回复一下,但这只是我的理解,大家可以观摩:

1 )面向对象中,有一个比较基础的概念,所有依赖都是抽象的,这也就是说所有需要外部类协调完成的工作都是接口,这也就 Spring 的概念,依赖都是通过接口形式注入,保证业务逻辑的动态性,Server, Mapper 等都是接口(当然有些是没有必要的)。

2 )约束:每个子模块对外部的输入都是有一定性约束的,Java Interface 起到约束行为注入的约束,在 ObjectiveSQL 中 ModelDescriptor 就是很好的体现,子模块需要的信息通过 Descriptor 的形式进行注入。

3 )规范定义:Java Servlet, JMS 是最好的示例,针对一组特性完整的定义,其实是一组接口,接口定义的只是概念,而不关心具体的实现。

在我们实际的工作中,Java Interface 的定义更多的是依赖的定义,重要的是我们对职责的分离,这是面向对象设计的基础,我先简单描述,大家有不想法可以挑战。
Braisdom
2020-12-17 21:54:48 +08:00
@yukong 细聊
Braisdom
2020-12-17 22:04:45 +08:00
@Kaiv2 你的想法很好,我给 Oracle 发了邮件,但那帮人比较传统,更多是尊重传统,Java 应该不太会支持,只能通过其它方式了。
Braisdom
2020-12-17 22:14:06 +08:00
@l00t

知识分两类,一种是别人传授的知识,另一种是自身体会的知识。随着时代的进步,有很多人传授你知识,如何分辨真伪,要靠自身的判断。我是一个分享知识的人,也是我切身的体会,你的挑战很合理,触碰到你知识的边缘,勇于挑战,是学习的动力,我们共勉...
Braisdom
2020-12-17 22:19:49 +08:00
@fewok ORM 是一种编程模型,所有语言都适用,是用一种视角去理解编程的方式,go 强不强大,是在它处理关系数据库计算时的能力,能不能适应复杂多种的应用场景。有兴趣加我微信,我们细聊
Braisdom
2020-12-17 22:24:11 +08:00
BTW: 这只是我的第一个系列,觉得有所收获的,请回复认可,我的分享也需要动力,如果总是不受待见,我也没有积极性了。


@koujyungenn
@Kaiv2
@haosamax
@l00t
@yukong
@wysnylc
@gyh
@zhazi
@IrisFrankie
@DeepDarkVan
@darling19961030
taka8rie
2020-12-17 22:29:24 +08:00
很高兴能看到楼主写的这些。☺️长期关注。
Kaiv2
2020-12-17 22:30:03 +08:00
认可,希望能给到你动力
raaaaaar
2020-12-17 22:30:13 +08:00
@zhazi #5 数据结构算法这些基础知识,和楼主说的语言的深入理解,并不冲突啊,最多个人精力有限,看怎么分配时间而已。

我认搞技术勤思考,多问为什么,多有求之问底的精神是很好的,这种性格会让自己接触到更深的东西。
lzlee
2020-12-17 23:10:01 +08:00
以前也觉得会用就行了
但是知道了一些为什么后, 很多原来生硬的东西变得自然了
而且一个领域的思路, 经常可能复刻到另一个领域
虽然说不上来具体的, 但是感觉对我很有帮助

不过现在还有些地方我控制不好

首先是 为什么 不知道怎么问
有的问题看似简单, 但是实际上很大很深
有的问题看似很大, 一上来能把人劝退, 但实际上却可以通过之前学过的东西组合, 演进
再或者多个问题, 如果按特定的顺序来处理, 会好理解很多
不知道有多难, 不知道先解决哪个
再配合一些轻重缓急, 很多问题只能记下来, 有空再去看
我目前只能优先解决反复出现的问题...

其次就是 不太会寻找答案
我感觉很多比较好的答案, 其实都是我之前积累的问题, 然后在看那种大书(比如 机械工业的那些黑皮书)的过程中找到的
自己平常搜索的博客, 质量层次不齐, 而且很多都没有上下文, 看似很顺畅, 但是要么比较片面, 要么藏了些坑
但是啃大书实在又太慢了, 还得做笔记...

不知道高手有没有类似的困扰, 还是说我太菜了
echowuhao
2020-12-17 23:14:40 +08:00
@lzlee 其实就是要学习历史。计算机也是有历史的,知道事情的来龙去脉才知道为何现在这样。

另外赞 lz 分享。分享夹杂软广,也是喜闻乐见。V 站确实不错,我发现 v 站后,就不上知乎了。
echowuhao
2020-12-17 23:23:59 +08:00
lz 说的都是有点。说一个 method 的缺点。一旦有复杂的继承关系,看 method 是个头疼的事情。
Kirsk
2020-12-17 23:39:04 +08:00
@lzlee 当你需要深入 你就得啃书没有得办法 有大佬带最好了
lzlee
2020-12-17 23:54:27 +08:00
@echowuhao
好的谢谢
lzlee
2020-12-17 23:55:26 +08:00
@Kirsk

之前有大佬在身边的时候, 不懂得珍惜, 不会学习
现在学会了, 稍微入了点门, 发现年纪也大了, 大佬也没了, 哈哈哈
wangyuescr
2020-12-17 23:55:37 +08:00
是不是又要我们教两百学费,号称自己多年开发经验,带徒弟
laminux29
2020-12-18 00:47:44 +08:00
如果你是正规计算机专业出来的,并且认真听课了,就不会有这些问题。

建议把 985 计算机本科的技能树,按课程设置依次点开,从高数与物理开始逐级向上,贯穿整个计算机与科学发展史,你才能彻底弄清这些问题。因为很多问题是历史发展的问题,没经历过整个历史阶段,很多问题你单独拿出来思考,是想不出啥结果的。
Kasumi20
2020-12-18 00:56:22 +08:00
@laminux29 又吹牛逼了, 哪个学校的老师教得这么细, 你不思考只听课, 估计只有请神仙来给你灌

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/736407

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX