diff --git a/.vscode/launch.json b/.vscode/launch.json
new file mode 100644
index 0000000..2ba986f
--- /dev/null
+++ b/.vscode/launch.json
@@ -0,0 +1,15 @@
+{
+    // Use IntelliSense to learn about possible attributes.
+    // Hover to view descriptions of existing attributes.
+    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+    "version": "0.2.0",
+    "configurations": [
+        {
+            "type": "chrome",
+            "request": "launch",
+            "name": "Launch Chrome against localhost",
+            "url": "http://localhost:8080",
+            "webRoot": "${workspaceFolder}"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/data/blog/programming-tutorial-for-freshman/introduction.mdx b/data/blog/programming-tutorial-for-freshman/introduction.mdx
index 6b90819..118a709 100644
--- a/data/blog/programming-tutorial-for-freshman/introduction.mdx
+++ b/data/blog/programming-tutorial-for-freshman/introduction.mdx
@@ -11,7 +11,7 @@ import Divider from '@/components/ui/divider'
 
 # Welcome Board, Captain! 🛳️
 
-嗨,WKU 2028 级的各位同学,欢迎来到温肯科技科研协会为你们精心打造的暑期编程入门指南。在这个暑假,我们会为大家带来一系列的编程入门和算法教程。无论你是 CPS 专业的同学,
+嗨,WKU 2024 级的各位同学,欢迎来到温肯科技科研协会为你们精心打造的暑期编程入门指南。在这个暑假,我们会为大家带来一系列的编程入门和算法教程。无论你是 CPS 专业的同学,
 还是其他专业有志于使用 [Python](https://python.org) 等编程语言进行科研的同学,相信本系列教程均能对你有所帮助,让你**快速掌握一门编程语言**,**并提升解决问题的能力**。
 如果教程标注了 _only for CPS students_,则表示这些内容是专为 CPS 专业以及其他希望深入了解计算机科学相关知识的同学所准备的。
 
diff --git a/data/blog/programming-tutorial-for-freshman/programming-language.mdx b/data/blog/programming-tutorial-for-freshman/programming-language.mdx
index 300a4e9..ddfb17f 100644
--- a/data/blog/programming-tutorial-for-freshman/programming-language.mdx
+++ b/data/blog/programming-tutorial-for-freshman/programming-language.mdx
@@ -78,7 +78,7 @@ Fireship 的视频已经很详细地介绍了各种编程语言的特性和应
 
 <div>
   `int` `double`, `boolean` 是 `primitive data type`(初始数据类型),
-  字如其意,他们就是用来限定一些类型的,限制变量的行为,减少因类型不同而产生的错误,
+  字如其意,它们用于限定变量的行为并减少因类型不匹配而产生的错误。
   不同类型之间会有区别,而每个类型的实现方式也不同,具体内容将在之后的教程中涉及,当然,也有动态类型,比如python,移步到下面代码,你会发现python的属性没有任何修饰
 </div>
 
diff --git a/data/blog/programming-tutorial-for-freshman/python-functions.mdx b/data/blog/programming-tutorial-for-freshman/python-functions.mdx
index 95e1018..f6d65ab 100644
--- a/data/blog/programming-tutorial-for-freshman/python-functions.mdx
+++ b/data/blog/programming-tutorial-for-freshman/python-functions.mdx
@@ -124,7 +124,7 @@ Python 代码由表达式和语句组成。广义上讲,计算机程序包括
   }
 />
 
-表达式,你可以把他看成是编程语言中的基本的原子 ⚛️,它是一个计算结果的代码片段。表达式可以是一个值 (1,2,3 “4”,boolean)、一个变量(x)、一个函数调用`max(1,2)`等。在编程中,我们通常使用表达式来计算数值、判断条件、执行循环等。
+表达式, 你可以把他看成是编程语言中的基本的原子 ⚛️,它是一个计算结果的代码片段。表达式可以是一个值 (1,2,3 “4”,boolean)、一个变量(x)、一个函数调用`max(1,2)`等。在编程中,我们通常使用表达式来计算数值、判断条件、执行循环等。
 
 <Quote
   quote={{
@@ -279,7 +279,7 @@ print(z)
 
 需要应用这个评估过程四次。如果我们绘制我们评估的每个表达式,我们可以可视化这个过程的层次结构。
 
-这个插图被称为表达式树。在计算机科学中,树通常从上向下生长。树中每个点的对象被称为节点;在这种情况下,它们是与其值配对的表达式。
+这个插图被称为表达式树。在计算机科学中,树通常从上向下生长,树中每个点的对象被称为节点;在这种情况下,它们是与其值配对的表达式。
 
 评估其根,即顶部的完整表达式,需要首先评估其子表达式的分支。叶子表达式(即,没有分支从它们延伸出来的节点)表示函数或数字。内部节点有两部分:我们应用评估规则的调用表达式,以及该表达式的结果。以树的角度来看待评估,我们可以想象操作数的值从终端节点开始向上渗透,然后在越来越高的层次上结合。
 
@@ -331,7 +331,7 @@ def live_in_wku():
     # 打豆豆
 ```
 
-函数封装了用于操作数据的逻辑。我们生活在wku,每天有着各自各样的事情(unit),每个事情内部又是各种复杂的逻辑。于是我们把例如吃饭,睡觉,打豆豆的这些操作封装到一个函数中,我们便没有必要去
+函数封装了用于操作数据的逻辑。我们生活在WKU,每天有着各自各样的事情(unit),每个事情内部又是各种复杂的逻辑。于是我们把例如吃饭,睡觉,打豆豆的这些操作封装到一个函数中,我们便没有必要去
 关心函数内部发生了什么,他对于我们来说就是个黑箱,作为程序员,学会调用别人写好的函数就行了,而作为程序要考虑的就很多了 😎。
 
 # 导入库函数