编程语言和框架:为什么你应该深入研究其中之一

📖 7min read

公司不给我选择

“我听说Python最近很流行。我们也应该使用Python吗?”新进公司的开发人员能说出这样的话吗?这是不可能的。

在找工作之前,我可以选择我要使用的语言。对于编码测试,我使用Python,因为它很有优势;对于Web开发,我深入研究Java,因为我听说Java很适合找工作。然而,进入就业市场的小团队的现实却有所不同。

公司的技术堆栈已经确定。遗留代码在 Java (Spring Boot) 中运行,屏幕是在 JavaScript (Vue.js) 中绘制的,突然间我不再需要维护 Android 应用程序,而不得不处理 XML 和另一个 Java。

我从来没有选择过。只是环境(框架)把这种语言强加给了我。起初,我害怕受到这种陌生的语言和语法的轰炸。然而,当我随机阅读和编写代码时,我意识到一件重要的事情。

“嗯?这和你之前学的Java概念是一样的吗?”

一旦您很好地理解了一种语言,打开另一种语言的大门只是时间问题。

语法可能不同,但本质是一样的(概念迁移)

在学生时代,我浅学了C语言,深入研究了Java。然后,当求职季节到来时,我在社区中听说“Python 在编码测试方面是个坏家伙”,所以我第一次打开了一本 Python 书。

一开始我对语法很陌生,但令人惊讶的是,我在短短几天内就习惯了。这并不是因为 Python 很简单。这是因为我已经通过Java了解了‘编程的本质’。

我所做的并不是从零开始学习一门新语言。任务是把一个“叫Python的地名”叠加到我脑子里的“叫Java的地图”上。这在教育术语中称为“学习迁移”。您对一种语言的研究越深入,您理解其他语言的速度就越快。

UI 最终是一个树形结构

这段经历还在一个完全不同的领域大放异彩。当我在学校的时候,我使用HTML和CSS来更新学校网站以赚取零用钱。当时我没想到这会对我的职业生涯发展有帮助。

然而,加入公司后,我突然要修改Android应用程序的UI。 Android 使用一种称为 XML 的标记语言来构建 UI。这是我第一次开发移动应用,所以很紧张,但是当我看到代码时我笑了。

<!-- Android XML -->
<LinearLayout orientation="vertical">
    <TextView text="Hello World" />
    <Button text="Click Me" />
</LinearLayout>

<!-- HTML -->
<div style="display: flex; flex-direction: column;">
    <span>Hello World</span>
    <button>Click Me</button>
</div>

只是标签名称不同,但“将子元素插入父元素并用属性塑造它”的结构与 HTML 完全相同。由于我了解 DOM 树结构和盒模型,我能够快速创建自己的 Android 布局。

即使平台发生变化,“层次结构”的本质也不会改变。

框架,他们没有在学校教它

事实上,比语言更让我困惑的是“框架”的存在。

在学校,只教授C语言语法、数据结构、算法、语言理论等“基本体能”。当然,您并不是没有听说过“React”或“Spring”这些名字。在听到社区说“React 是当今最好的”后,我去了一家书店买了一本 React 书。

但我还没读完一半就合上了书。因为我不明白为什么代码一定要这样写。 “不,你可以创建一个函数并调用它。为什么我必须继承 Component 并将其放入 render 函数中?为什么我没有控制权?”

我当时并不知道。 “库”和“框架”之间的关键区别。

如果你在学校学到的是如何自由地锤击,那么实际的框架就像一个巨大的工厂,迫使你说:“我们来锤击,所以你只要把钉子放在洞里就行了。”由于我不知道“控制反转”的概念,所以无论我读多少本书,都感觉像是一门外星语言。

如果您了解该语言,则可以查看框架

然而,当我投入实际工作并强迫自己使用该框架时,我发现了一个矛盾的事实。无论 Spring Boot 的魔力有多么复杂,它最终都是由“Java 代码”组成的。

@Autowired之类的注解神奇地注入了依赖,但仔细一看,它最终还是Java反射技术的应用。 Vue.js 的响应式系统最终也利用了 JavaScript 的对象和属性监控功能。

“语言(基础)强了,框架(应用)的运行原理就看得见。”当我刚加入公司时,我不知道 Spring 的 MVC 结构是什么,但因为我了解 Java,所以我能够很快适应,心想:“哦,框架运行我的代码,我只需按照这些规则抛出对象即可。”

如果我在阅读 React 这本书时我的“JavaScript 基础知识”更加扎实,我就能理解为什么 React 会变成这样。

[提示]给有决策困难的学生的处方

“我应该学习哪种语言?”这是社区中最常见的问题之一。无论是一门语言还是一个框架,你不一定要一辈子只钻研一件事。然而,吊诡的是,要想做好几件事,就必须先“把一件事卖清楚”。

如果你是一名正在找不到学习方向的学生,请合上书本,立即打开‘招聘网站’。

“这家公司用Spring,那家公司用Node,我该怎么办?”没关系。不管是什么,你只需要正确地学习它。正如我之前所说,编程的本质是沟通。掌握了 Spring 的人即使进公司后要求使用 Node.js 也能很快适应。然而,任何尝试过这个或那个的人最终都会再次徘徊,无论向他们抛出什么框架。

当你有时间思考时,选择一项“市场(招聘公告)想要的技能”并深入挖掘。这是最快的方法。

【代码验证】语言可能不同,但内存是一样的

让我们检查一下代码,尽管语言不同,但计算机内部发生的事情最终是相同的。 Java的ArrayList和Python的list语法不同,但是增加内存(动态数组)的方法是一样的。

Java:

// Java:滿了就擴大 1.5 倍然後搬家。
ArrayList<Integer> list = new ArrayList<>();
list.add(1); 
// 內部:建立陣列 -> 新增資料 -> 空間不足時建立更大陣列後複製

Python:

# Python:滿了就擴大約 1.125 倍 + @ 然後搬家。
my_list = []
my_list.append(1)
# 內部運作原理與 Java 幾乎相同(使用 C 語言的陣列重新分配邏輯)

无论我们使用什么语言,数字分发中心(计算机)的工作方式都不会改变。这是因为使用worker(CPU)和storage(内存)的规则是通用的。

结束语:好奇心代替恐惧

作为一名开发人员,不可避免地会有这样的时刻:您必须使用您不想要的语言和框架。你是否每次都会说“我是 Java 开发人员,所以我不喜欢 Python”,然后逃跑?

语言是一种“工具”,而不是宗教。该框架是使用这些工具的“车间”。拥有丰富学习语言(母语)经验的人很快就能学会如何使用新工具,即使给他们提供了新工具。

因此,即使您的公司现在强迫您使用不熟悉的技术堆栈,也不要害怕。只是外壳不同,但里面的物质和你已经知道的一样。

现在我们已经摆脱了对语言的恐惧,从下一篇开始,让我们进入“内存”的深处,即代码所在的真实世界。一旦你知道你编写的代码存储在 RAM 中的位置以及它如何运行,语言障碍就会降低。

發佈留言