程序员技术自主的重要性和前置条件

不变的底层技术

  1. X86架构:【内功修炼程序员内功修炼

    • X86架构是当前大多数计算机系统的基础,包括PC、服务器等。X86架构提供了稳定的指令集,这是所有上层软件能够运行的基础。
  2. 操作系统:

    • Windows、Linux以及macOS等主流操作系统的核心部分通常使用C/C++编写,有时也会使用汇编语言进行性能优化。
  3. 编译器和解释器:【C++实现一门计算机编程语言到手撸虚拟机实战

    • GCC、G++、Clang/LLVM等编译器,以及JavaScript引擎如V8(用于Chrome浏览器)、SpiderMonkey(用于Firefox浏览器)等,都是用C/C++实现的。这些工具确保了各种编程语言的代码能够被编译或解释成机器码,并在不同的平台上运行。
  4. 数据库和中间件:

    • MySQL、Redis、MongoDB等数据库管理系统,以及Nginx等Web服务器软件,同样是由C/C++编写而成,这些软件为Web应用提供了必要的后台支持。
  5. 固件和驱动:

    • UEFI固件、BIOS等底层固件通常使用C/C++和汇编语言编写,确保硬件设备能够正常启动和运行。【大部分国内的视频教程讲OS开发的都是传统的BIOS DEMO级教程,很少有讲UEFI开发的】

变化的应用层技术

  1. 前端技术:

    • JavaScript、Vue、React等前端技术栈提供了丰富的用户界面体验,这些技术的发展速度较快,经常会有新的框架和库出现。

    • 虽然前端技术栈不断发展,但最终它们都是通过JavaScript引擎(如V8)来解释执行的,而这些引擎本身是由C/C++编写的。

  2. AI框架:

    1. TensorFlow 和 PyTorch 等深度学习框架确实是西方国家主导开发的,这些框架的核心部分通常使用C++编写,以保证性能。Python接口则提供了高级抽象,使得开发者能够更容易地构建模型。

    2. CUDA 是 NVIDIA 开发的一套并行计算平台和API模型,主要用于GPU编程,同样也是基于C/C++。

  3. 后端各种编程语言和框架

国内外差异

  1. 国内程序员的角色:

    • 很多国内程序员的主要工作是开发业务逻辑,如实现CRUD(创建、读取、更新、删除)操作,这通常涉及到上层应用层的技术。

    • 这种现象很容易导致一部分程序员缺乏对底层技术的深入了解,进而产生误解,认为底层技术如C/C++和汇编语言不再重要。

  2. 西方程序员的角色:

    • 相比之下,很多西方程序员会参与到底层技术的开发和维护中,比如维护MySQL、Redis、Linux内核、Windows操作系统、GCC/G++编译器、LLVM,AI底层,IDE,工业软件,核心技术等项目,这些工作通常需要深厚的C/C++和汇编语言知识。

底层与应用层的关系

  • 底层技术:底层技术X86架构、Linux系统调用等,提供了稳定的基础,确保了程序在不同场景下的正确执行。这些技术是多年来的结晶,具有很高的成熟度和稳定性。

  • 应用层编程语言:不同的编程语言提供了不同的抽象层次和语法风格,使开发者能够更方便地构建复杂的应用程序。尽管表面上看起来各不相同,但它们最终都要通过底层技术来实现。

  • 中间件和服务:MySQL、Redis、MongoDB、Nginx、Lua,解释器如JS,PHP,NODE,PYTHON,编译器如JVM,GCC,G++等服务和中间件,通常是用C或C++编写的,因为这些语言能够提供更高的性能和更直接的硬件访问能力。

总结:

无论使用哪种编程语言,最终都会归结到不变的底层技术上来。对于希望成为高水平程序员的人来说,学习和理解底层技术是非常重要的。这不仅能帮助他们更好地应对日常工作中遇到的问题,还能在未来面对新技术时保持开放的心态和适应能力。通过深入了解这些不变的底层原理,程序员能够更好地驾驭变化多端的应用层,从而在技术发展的道路上走得更远,无论上层技术如何变化,底层技术始终是不变的基石,也是技术自主,实现技术探索和技术吸收能力的重要前置知识【程序员内功修炼 C++实现一门计算机编程语言到手撸虚拟机实战

  1. 多样化学习:

    • 程序员不仅仅局限于一种编程语言或框架,而是学习多种不同的技术和工具,这样可以拓宽视野,提高解决问题的能力。
  2. 深入底层技术:

    • 程序员学习底层技术,如操作系统原理、编译原理、网络协议等,这样可以更好地理解高层技术的实现原理。
  3. 通过多样化的学习和实践,程序员可以避免陷入固定的思维模式,保持思维的活跃性和创新性

学习底层的重要性

  • 理解本质:深入学习底层技术能够帮助开发者更好地理解计算机系统的工作原理,从而在设计和实现应用程序时做出更合理的决策。

  • 优化性能:了解底层技术可以使开发者更好地优化程序性能,减少不必要的开销,提高资源利用率。

  • 解决问题:当遇到难以解决的问题时,对底层技术的理解可以提供更深入的洞察,帮助找到根本原因并提出解决方案。

  • 改变吸收国内资源【文章,教程,社区】形成的知识体系转向吸收全球牛逼老外云集的github社区,前提要有吸收的前置条件【内功和编译器】

"以无限为有限"

  1. 无限的可能性:

    • 这句话强调了无限的可能性和变化。在武术中,这意味着不要拘泥于固定的招式或套路,而是要能够灵活应对各种不同的攻击和防御情形。
  2. 有限的框架:

    • "以无限为有限"意味着要在无限的变化中找到规律和框架。换句话说,就是要在变化莫测的环境中找到一种稳定的指导原则或方法。
  3. 适应性和创造性:

    • 这种思想鼓励人们保持开放的心态,随时准备接受新事物,并在必要时创造出新的解决方案。

"以无法为有法"

  1. 摆脱束缚:

    • "无法"指的是没有固定的方法或规则。这句话鼓励人们摆脱传统观念的束缚,敢于突破常规。
  2. 创造性的解决问题:

    • "有法"指的是创造性的方法。当面临未知或未解决的问题时,需要寻找新的解决方案,而不是盲目地遵循旧有的规则。
  3. 自由与灵活:

    • 这种思想强调了自由和灵活性的重要性,意味着在面对复杂多变的情况时,要有足够的应变能力和创造力。

在不同领域的应用

  1. 武术:

    • 在武术中,"以无限为有限"意味着要学会在变化中寻找规律,而"以无法为有法"则是指在没有固定套路的情况下,能够随机应变,创造出有效的应对策略。
  2. 学习与工作:

    • 在学习和工作中,这句话提醒我们要灵活应对不同的挑战,勇于尝试新的方法,而不是固守旧有的知识和经验。
  3. 生活态度:

    • 在生活中,这句话鼓励我们保持开放的心态,面对生活的不确定性时,能够积极寻找解决方案,而不是被困难所束缚。

总结

"以无限为有限,以无法为有法"是一种倡导灵活变通和创新的思想。它鼓励我们在面对无限变化的世界时,能够找到稳定的原则来指导行动;在没有明确路径时,能够勇敢地探索和创造新的方法。这种思想不仅适用于武术领域,还可以广泛应用于个人成长、职业发展乃至整个社会的进步之中。通过不断学习和实践,我们可以更好地理解和应用这一哲学思想,从而在生活中取得更多的成就

相关推荐
2401_858286113 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
jiao000014 小时前
数据结构——队列
c语言·数据结构·算法
铁匠匠匠4 小时前
从零开始学数据结构系列之第六章《排序简介》
c语言·数据结构·经验分享·笔记·学习·开源·课程设计
C-SDN花园GGbond4 小时前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
罗政5 小时前
[附源码]超简洁个人博客网站搭建+SpringBoot+Vue前后端分离
vue.js·spring boot·后端
迷迭所归处5 小时前
C++ —— 关于vector
开发语言·c++·算法
CV工程师小林6 小时前
【算法】BFS 系列之边权为 1 的最短路问题
数据结构·c++·算法·leetcode·宽度优先
Navigator_Z6 小时前
数据结构C //线性表(链表)ADT结构及相关函数
c语言·数据结构·算法·链表
2401_858286116 小时前
汇编实现从1加到1000(《X86汇编语言 从实模式到保护模式(第2版》) 第135页第2题解答)
汇编·nasm·汇编语言·x86·virtualbox·8086·virtual box
拾光师7 小时前
spring获取当前request
java·后端·spring