计算机编程基础:
在一切开始之前,有一些基本功需要娴熟掌握,比如如何查资料,提取关键词,横向搜索,以及当下最热门的生成式搜索。
编程的第一课,应该是从翻墙开始,抛弃百度,CSDN,博客园的第一优先级,如何花钱来访问google,如何配置系统代理,让后面下载依赖库的时候顺风顺水。如何去github 找到自己可以clone运行的项目。
编程的第二课,应该从环境变量开始,什么是环境变量,如何配置环境变量,如何给环境变量起名,一个dll的运行,需要多少dll作为依赖项,为什么有些软件很小就能成功运行,有些语言跑一个hello world 都要1个G,C++ 的环境变量是如何,python 又是如何找到自己的依赖的,windows预装的net 是什么,开发环境和运行环境的区别。编译的dll是如何通过命令行,让ui和编译程序关联在一起的。
编程的第三课,应该从安装软件开始。安装Visual Studio,不同版本之间的差异,为什么有些人就要用2017甚至是更低的开发,如何让高版本兼容低版本,C# NET 4.8 和NET6.0的差异。python 不同的安装版本应该选择安装什么。pip 在下载库的时候,要怎么通过翻墙去下,不翻墙要怎么换国内的源。pycharm的统一配置以及Conda 以及pipven , npm,cargo 的依赖环境设计.java spring框架之类的。
编程的第四课,应该从创建 一个hello world 开始。比如 C++ 里 从main 里创建到执行。从运行逻辑开始讲述程序是如何从启动到执行输出的。接着就是尝试使用自带的库,比如python 里面的math 函数,基本的语法差异,使用习惯,形成肌肉记忆。调用三种下载的的依赖库,比如c++ 配置 opencv的使用,python 配置requets,c# 配置一个Newtonsoft.Json ,并利用这些第三方写一个简单的函数。
编程的第五课,编译运行工程框架,比如 C++ 的QT,生成导出dll ,比如 C# 的WPF,Winform ,比如 python 的 flask ,qt5,java的spring, 安装配置到运行。
编程的第六课,应该从语言的发展史,演变史开始,构建一个拓扑网络,了解程序之间的依存关系。 系统的构建层是什么,对外暴漏的接口有哪些,如何显示一个messagebox,如何创建一个窗口,C++ 是如何导出的dll, python ,C# ,java ,以及C++ 本身又是如何调用这些其他语言写出的dll, 他们又是如何调度自身的环境。
如何通过命令行交互,强行拼接不同的语言执行,python 又是如何调度 cuda 这些的原理。
编程的第七课。应该讲述在历史发展史中,数据的传递流。从socket到tcp IP, 到http, 协议是什么,拿到流之后是如何拿到里面的值做校验的,校验位和数据的传递的不可靠性是如何展现的,又是如何确立的。在http 之上的超文本协议,以及最重要的json 和xml 是如何成为数据交互的基础的。在不同的系统之间,数据流走来走去,在经由显示层显示。最后到 内存和硬盘之间的映射关系,以及 ini 格式,mysql ,系统的存储层等等数据最终保存在什么地方,一读一取是如何完成的,在不同的语言之间,实现的如何实现这个过程,哪些非常常用的第三方库,又或者是本身的环境中自带解析。比如 js.
编程的第八课,从游戏开始,计算机的变迁史,GDI,opengl,DirectX,vulkan开始,数据如何显示在桌面上的,渲染流程是什么,高性能计算为什么最后由 NV 家cuda的作为基础库,苹果自家的显卡在高性能计算上的应用,pytorch torch 在这些不同系统之间构建的接口。在不同的语言之间应该如何调用模型执行比如 文字识别,人脸识别,缺陷检测等等。
编程的第九课,从实体工程开始,讲述非必要但常见实际的工程经验,配置,svn,git的开发环境,配置github,配置生成的工具链,发布的证书, C++ 的项目结构,C# 的项目结构,python的运行执行。如何从github clone 项目运行起来,缺失的部分如何下载,遇到代码bug后应该如何快速排查,遇到程序,pdb文件如何dump,如何通过反编译,观察对方程序的指令逻辑。如何打日志甩掉自己的锅,如何配合对接快速获取,或者是让对方了解自己的意图。
编程的第十课,从编程的基础原理开始读,补充自己快速开发半吊子的水平。向自己感兴趣的方向多看看。比如偏向图形学,还是机器学习,还是UI,还是底层,还是某项具体的功能比如音频开发,sql,黑客,前端,后端,安卓等等。