编程是技能导向的,不是知识导向的

正交分解 / 2024-02-29 / 原文

第一节,编程入门。

回顾我掌握编程技能的过程,大部分时候,真正掌握实战技能的时候,都是在解决实际工作需要的问题中发生的。

早期在学校的时候,我学习编程也硬着骨头啃过一些书,但是那些更像是把一些要诀和口诀硬记忆在脑子里作为线索,在以后用到的时候能想到这些线索再去查。

所以,我的感觉是编程并需要像数学一样,从小学1年级开始,体系化的逐级爬格子学习。这更多是体系化知识的学习需要的。

而编程,更多的是一种技能。什么是技能?技能就像学自行车一样,你一辈子只需要学会一次骑自行车就学会了,以后过多久你都会知道如何让身体保持平衡。当然,如果你要练习骑自行车的杂技,那是需要进一步练习。正如编程里面刷 Leetcode 一样。

回到解决问题这个主题。编程大部分时候是面向机器解决问题的过程。这也意味着解决问题不只是面向机器这一面。很多时候,当涉及到多人协作,解决问题就涉及到如何有效协作解决问题。在公司里面,解决问题又和公司的组织架构有关系,例如你要找其他组的人协调解决问题是否需要先让你的上司找他的上司打个招呼。

操作系统、算法、数据库,网络,云计算,以及GPT式AI。计算机提供了一层又一层的抽象,这些抽象都是我们解决问题的工具。面向机器解决问题,总是不断重复着如何把资源虚拟化,包括存储资源、计算资源、以及其他各种可虚拟化为单位格子的资源,虚拟化之后,有个调度器(例如操作系统就是硬件虚拟化后调度器,K8S就是云资源容器化后的调度器)。在这个基础上,就有了服务的能力,服务就是背后的调度器+一组超买的虚拟化资源提供的API。API将资源的能力数字化成可无限切割的编程接口。

第二节,does make money is a programable problem?

即然编程是解决问题。make money 算是一个问题么?如果这是一个问题,也在 problem solve 的范围内。但是 make money 是否是可编程解决的问题呢?curios

典型的编程解决问题。proram = data structure + algorithm。 对于 make money, data structure 是什么? algorithm 是什么。
程序需要有一个 CPU/GPU 来反复运行编写好的指令。make money 的过程中,我们设计了可以反复被执行的程序了么?例如上班-获得工资,是一组O(N),N=996的一种算法。其他时候我们似乎没有遵循这样的问题解决方案。