计算机科学探索指南

科普,英语和科学上网

FAQ:程序员写代码写的都是二进制么?不是,写的的文字,text,需要编译器或者解释器运行。在计算机行业中,只有做安全的人会大量接触二进制(也就是人们常说的hacker),其他的人都很少接触二进制。

学英语,大量阅读英文内容,看纪录篇,英文采访,英文直播,Meme。

比搜索引擎还好用的hacker news。

https://hn.algolia.com/

The Primeagine youtuber,学英文特别好用,因为他的内容很有趣,他经常会读博客然后发表评论,完美的英文学习材料。 https://www.youtube.com/@ThePrimeTimeagen

等我日语好了,我就在B站开个读日本科技博客的账号,学习一下

先学会运行代码,再学会编写代码

静态网站

https://github.com/tannal/tannal.github.io

hugo静态网站生成,用Web Component原生组件做动态内容。如嵌入B站视频。

小厂学做事,大厂学做人,学真技术还得看开源项目

客户端

  • React

Excaldraw

  • Flutter

https://github.com/zulip/zulip-flutter

  • ReactNative

https://frontendmasters.com/courses/intermediate-react-native-v2/

  • Electron

  • C# .NET

  • GTK

  • QT

  • NativeScript

  • KMP

  • Kotlin Android

  • Java Android

  • Android NDK

服务端

  • Go Gin gorm
  • Rust
  • Java SpringBoot SpringCloud
  • Java Quarkus
  • Ruby on Rails
  • Python Flask
  • PHP

纯技术

移动应用

桌面应用

系统

程序、软件、服务、系统、网站、应用、SDK、库、框架、包、引擎

这些个玩意都叫软件,它们有什么区别呢?

GUI软件,主要分平台和设计,桌面应用,移动应用和网页应用。

网页,即前后端啊,懂得都懂,如即时通讯,社交网络,流媒体,直播,视频会议,设计

开发环境设置

有几样东西

  • sdk版本管理器

  • sdk(或者编译器)

  • sdk的构建系统和包管理器

  • 如gcc/g++/clang/clang++和Makefile,ninja-build和CMake

  • 如rustup和rust和cargo

  • 如sdkman和koltin/java/scala和Maven和Gradle

  • 如node和npm和bundler(webpack)

  • 如dart和flutter和pub

  • 如k8s和docker和dockerhub

以技术来分

编写程序

计算程序,如计算圆周率,计算1到100的和,计算人生的意义(42),数据结构加算法,数据可以独立于函数存在,而反过来不行。

编译器

编译器,把结构化,带有描述性质的文字(通常是人写的或者AI生成的)翻译成汇编或机器语言(x86,arm,rsicv,mips)的叫编译器,最后没有看到机器代码的叫解释器,大部分编译器都会有中间表示如SSA或者Sea of Nodes。

操作系统

操作系统,创造一堆概念和服务,帮你管理CPU和内存和硬盘和显示器和鼠标和键盘和显卡和麦克风和扬声器和摄像头和网卡和声卡等各种各样的能插在电脑上面的东西,作为用户你需要的时候按照操作系统的说明书让他帮你完成即可,操作系统是电脑的管理者,你只是个用户,而操作系统听root用户的,你是root的话约等于你拥有这台电脑。

计算机安全

安全,非常广泛,什么叫做攻击呢?比如我在网页上面点击一个按钮打开了windows的计算器应用程序,则说明攻击者攻击浏览器攻击成功。

计算机网络

没错,通信。

数字信号和模拟信号。

电信运营商

电话服务 定位服务 2G 3G 4G NFC 蓝牙 无线网络 Vlan

网络服务,传递数据,带宽和延迟。

四层负载均衡

面向对象编程其运行时

编程语言及其运行时,让编程更容易更方便,仅此而已。

Java
Python
Ruby
PHP
JavaScript

v8 Spdiermonkey JavaScriptCore quickjs

Lua

GPU和CPU渲染

2D图形和GUI,展示,应用和可编程,视觉,阅读传递信息。

早期GUI的主要对象是字体,这篇报告完整的阐述了字体的历史和现状,以及未来的发展方向,非常值得一读。 https://behdad.org/text2024/

后来GUI的发展主要推动力是Web

现代GUI有很多特点

  • 数据驱动视图
  • 事件驱动
  • 响应式布局
  • 动画
  • 跨平台
  • 无障碍
  • 主题
  • 国际化
  • 本地化

跨平台GUI的研究

  • QT
  • GTK
  • wxWidgets

这是比较经典的跨平台GUI框架,各有优缺点。

Rust编写的跨平台GUI,有很多,如:

  • zed 使用自己的GUI库。
  • Embark 投资 winit 和 rust-gpu。
  • Google Fonts 投资 vello和xilem。
  • System76 投资 iced 和 COSMIC-Text.
  • Futurewei(华为) 投资 Dioxus, Makepad, 和 Servo。
  • Igalia 投资 Servo。
  • Slint 投资 Slint 自己。

这里有一份报告,详细介绍了各种跨平台GUI框架的优缺点。

https://www.igalia.com/downloads/2023-cross-platform-mobile-app-frameworks.pdf

多媒体

多媒体,音视频,不用说了,视觉听觉传播信息的媒介,信息的主要载体。

gstreamer

ffmpeg

run.io

非常好,我会基于您提供的新信息,将其整合到之前的内容中,创建一篇更加全面、深入的长文。这篇文章将涵盖计算机图形学、GUI开发、存储系统等多个方面。

从图形学到存储系统:现代计算机应用的核心技术解析

1. 引言

在当今数字时代,计算机应用已经渗透到我们生活的方方面面。从我们每天使用的智能手机应用,到复杂的3D游戏,再到强大的数据管理系统,这些应用都依赖于一系列核心技术。本文将深入探讨这些技术,包括计算机图形学、GUI开发和存储系统,揭示它们如何共同构建了现代计算机应用的基础。

2. 计算机图形学:视觉世界的数字化

2.1 2D实时渲染

2D实时渲染是计算机图形学的基础,也是许多GUI应用的核心。它涉及以下几个关键方面:

  1. 光栅化:将矢量图形转换为像素图像的过程。
  2. 抗锯齿:平滑图形边缘,提高视觉质量。
  3. 纹理映射:将2D图像应用到图形表面。
  4. 合成:将多个图层组合成最终图像。

2D渲染技术广泛应用于用户界面、2D游戏和数据可视化等领域。

2.2 3D图形和实时渲染

3D图形和实时渲染技术的发展主要由游戏产业、电影特效和CGI动画推动。这个领域涉及更复杂的概念和技术:

  1. 3D建模:创建三维物体的数字表示。
  2. 纹理映射:将2D图像应用到3D模型表面。
  3. 光照和阴影:模拟光线与物体的交互。
  4. 视角变换:根据观察者位置调整场景。
  5. 动画:创建物体运动的幻觉。

2.3 渲染引擎

渲染引擎是实现实时3D图形的核心组件。它负责将3D场景转换为2D图像,以便在屏幕上显示。主流的渲染引擎包括:

  1. Unreal Engine (Epic Games):以其高质量图形和强大的工具集而闻名。
  2. Unity:因其跨平台能力和易用性广受欢迎。
  3. NVIDIA RTX:专注于实时光线追踪技术。

这些引擎不仅用于游戏开发,还广泛应用于建筑可视化、虚拟现实和电影制作等领域。

2.4 物理引擎

物理引擎是现代3D应用,特别是游戏中的重要组成部分。它们模拟现实世界的物理行为,包括:

  1. 刚体动力学:模拟固体物体的运动。
  2. 软体动力学:模拟可变形物体的行为。
  3. 流体模拟:模拟液体和气体的行为。
  4. 碰撞检测:计算物体之间的相互作用。

常见的物理引擎包括Bullet Physics、PhysX和Havok。

2.5 图形学的未来趋势

  1. 实时光线追踪:提供更真实的光照和反射效果。
  2. AI辅助渲染:使用机器学习优化渲染过程。
  3. 体积渲染:更好地表现烟雾、云朵等复杂现象。
  4. 8K和更高分辨率:推动硬件和算法的进步。

3. GUI开发:用户与计算机的桥梁

(这里可以插入之前关于GUI开发的详细内容,包括图形API、窗口API、2D图形库和GUI工具包等内容)

4. 存储系统:数据的管理与检索

4.1 文件系统与数据库系统

文件系统是计算机存储的基础,而数据库系统则在此基础上提供了更高级的数据管理能力。

  1. 文件系统

    • 管理磁盘上的文件和目录
    • 提供基本的读写、创建、删除操作
    • 例如:NTFS, ext4, FAT32
  2. 数据库系统

    • 在文件系统之上构建
    • 提供结构化数据存储和高效查询
    • 支持复杂的数据操作和事务处理

4.2 SQL和关系型数据库

SQL(结构化查询语言)是关系型数据库的标准语言,它提供了强大而灵活的数据操作能力。

  1. 主要特性

    • 数据定义(CREATE, ALTER, DROP)
    • 数据操作(SELECT, INSERT, UPDATE, DELETE)
    • 事务控制(BEGIN, COMMIT, ROLLBACK)
  2. 常见的关系型数据库

    • MySQL
    • PostgreSQL
    • Oracle
    • Microsoft SQL Server

4.3 数据库系统的核心问题

  1. 一致性

    • ACID属性(原子性、一致性、隔离性、持久性)
    • 并发控制机制(锁、MVCC)
  2. 性能优化

    • 索引设计
    • 查询优化
    • 缓存策略
  3. 多用户支持

    • 并发读写控制
    • 事务隔离级别

4.4 现代数据库趋势

  1. NoSQL数据库

    • 文档数据库(MongoDB)
    • 键值存储(Redis)
    • 列族存储(Cassandra)
  2. 分布式数据库

    • 水平扩展能力
    • 高可用性和容错性
  3. 实时数据处理

    • 流处理系统(Apache Kafka, Apache Flink)
  4. AI与数据库的结合

    • 自动索引选择
    • 查询优化

4.5 学习资源

Andy Pavlo的数据库课程(CMU 15-445/645)是学习数据库系统原理的优秀资源。该课程深入探讨了数据库管理系统的内部工作原理,包括存储引擎、索引结构、查询处理和优化等主题。

课程链接:CMU Database Systems on YouTube

5. 技术融合:现代应用的构建

现代计算机应用通常需要结合图形学、GUI和存储系统等多个领域的技术。以下是几个典型的例子:

5.1 3D建模软件

  • 结合高级3D图形技术和复杂的GUI
  • 需要高效的数据存储系统来管理大型3D模型

5.2 游戏引擎

  • 整合3D渲染、物理模拟和音频处理
  • 使用数据库技术管理游戏资产和玩家数据

5.3 数据可视化工具

  • 利用2D/3D图形技术展示复杂数据
  • 需要高效的数据库查询来处理大规模数据集

5.4 企业资源规划(ERP)系统

  • 复杂的GUI设计以提供直观的用户体验
  • 强大的数据库后端来管理海量业务数据

6. 未来展望

随着技术的不断发展,我们可以预见以下趋势:

  1. 增强现实(AR)和虚拟现实(VR)

    • 需要更先进的3D渲染技术
    • 对实时数据处理提出更高要求
  2. 人工智能与传统技术的融合

    • AI辅助的图形渲染和GUI设计
    • 智能数据库系统
  3. 量子计算

    • 可能彻底改变某些图形算法和数据处理方式
  4. 边缘计算

    • 改变数据存储和处理的分布方式
    • 对GUI和渲染技术提出新的挑战

人工智能

人工智能,计算机怎么这么难用,他就不能自己学习一下如何解决我的问题么?我很懒,不想写代码,不想学编程,如果电脑是我说一下动一下,我不说就不动,那有什么意思,能不能让他像个人,长点脑子,会说中文,多好,这就是人工智能要解决的问题。

手写数字识别 GPT2 LLAMA3 Stable Diffusion 强化学习

Hinton的访谈,Hinton一生的研究主题都围绕在大脑如何运作,他成为深度学习之父一点也不奇怪。

https://www.youtube.com/watch?v=n4IQOBka8bc

计算机的Scalability问题

Scalability问题引发的分布式系统和虚拟化的研究,以及这些研究的商业成果云计算。

分布式系统,一台电脑就算买最好的CPU,也扛不住双十一,所以我们需要好多电脑,叫机房,再多一点叫数据中心,我怎么把应用程序运行在1000台电脑上面还能保证不出错,同时获得尽可能现行的1000倍速度提升?

我今天有100台电脑,如何让我的产出达到100倍的线性关系,有1000台电脑产出到1000倍,这就是scalability的问题,于是出现了虚拟化技术,以及其商业化版本——云计算(我发现我的数据中心有一半的电脑在空闲,多浪费,不如租出去)。

虚拟化和云平台。

VMware、Oracle、VirtualBox

计算机的微型整合SOC系统

嵌入式系统如手机

半导体行业

芯片设计和半导体制造,包括人工智能加速器。

  • 微控制器
  • 物联网终端智能设备
  • 移动设备
  • 个人电脑
  • 数据中心服务器
  • 超级计算机

Qualcomm 联发科 Nvidia AMD Intel Apple Google Amazon Microsoft Meta IBM Oracle Huawei 平头哥

以应用业务来分

各种乱七八糟的管理系统。

即时通讯,社交网络,流媒体,直播,视频会议。

出行,招聘,租房,二手交易,快递,订票,短视频,网盘。

文档,协同,办公,表格,数据分析,计算,PPT,沟通汇报演说。

电子商务,游戏。

云服务,计算机科学中的租房子业务,租计算,存储,网络,等服务给你。

以目标用户来分

各种编辑器,如文本编辑器,代码编辑器,富文本编辑器,文档编辑器,图片编辑器(Photoshop),音频视频编辑器,动画编辑器,画画软件。

CAD工业设计,UI设计(figma),芯片设计,各种物理现实世界硬件仿真器。

游戏引擎。

计算机科学历史

计算机科学是一门年轻但发展迅速的学科,其历史可以追溯到20世纪40年代。在短短几十年间,计算机科学从一门专门的学科发展成为影响几乎每个行业和每个人日常生活的关键技术。让我们回顾一下计算机科学的发展历程,了解它是如何塑造我们今天的世界的。

二战后 1950年代:密码学与信息论的兴起

第二次世界大战是计算机科学发展的一个重要催化剂。战争期间,密码学和信息理论取得了重大进展,为计算机科学奠定了基础。

密码破译

二战期间,英国布莱切利园的密码破译工作是计算机科学早期发展的关键里程碑。艾伦·图灵和他的团队开发了"炸弹"机器来破解德国的恩尼格玛密码。这项工作不仅对战争结果产生了重大影响,还推动了计算理论和实践的进步。

编码理论

克劳德·香农于1948年发表了具有开创性的论文《通信的数学理论》,奠定了信息论的基础。香农的工作为数据压缩和纠错码等技术铺平了道路,这些技术在今天的数字通信中仍然至关重要。

纠错码

理查德·汉明在20世纪40年代末开发了汉明码,这是第一个实用的纠错码。这项技术允许计算机检测和纠正数据传输和存储中的错误,大大提高了数字系统的可靠性。

这一时期的发展为计算机科学确立了理论基础,并展示了它在解决复杂问题方面的巨大潜力。

半导体行业 1970-1980:软件的兴起

随着硬件技术的进步,特别是集成电路的发展,1970年代和1980年代见证了软件工程的蓬勃发展。这一时期的主要进展集中在编程语言、编译器和操作系统方面。

编译器和汇编器

编译器和汇编器的发展使程序员能够用更高级的语言编写代码,然后将其转换为机器代码。这大大提高了编程效率和软件的可移植性。一些重要的编译器包括:

  • FORTRAN编译器:由约翰·巴克斯领导的IBM团队开发,是第一个高级语言编译器。
  • COBOL编译器:为商业应用程序开发。
  • C编译器:与UNIX操作系统一起开发,成为系统编程的标准。

操作系统

操作系统的发展是这一时期的另一个重要里程碑。主要的进展包括:

  • UNIX:由肯·汤普森和丹尼斯·里奇在贝尔实验室开发。UNIX的可移植性和灵活性使其成为学术界和工业界的标准。
  • MS-DOS:由微软为IBM PC开发,后来成为个人电脑的主导操作系统。

C语言

C语言的开发是这一时期最重要的成就之一。C语言由丹尼斯·里奇在开发UNIX的过程中创造。它结合了高级语言的抽象性和低级语言的效率,很快成为系统编程的首选语言。C语言的一些关键特性包括:

  • 可移植性:C程序可以相对容易地在不同的硬件平台上编译和运行。
  • 效率:C语言生成的代码非常高效,接近汇编语言的性能。
  • 灵活性:C语言允许直接操作内存和硬件,这对系统编程很重要。

这一时期的发展为现代软件工程奠定了基础,创造了许多至今仍在使用的工具和技术。

Xerox研究中心和个人电脑时代 1980 - 1990

1980年代是个人电脑兴起的时代,也是许多现代计算概念诞生的时期。施乐帕洛阿尔托研究中心(Xerox PARC)在这一时期扮演了关键角色,开发了许多革命性的技术。

Xerox PARC的贡献

施乐PARC开发了几项改变计算机行业的技术:

  1. 图形用户界面(GUI):PARC开发的Alto计算机是第一台使用图形用户界面的个人电脑。这一概念后来被苹果和微软采用,彻底改变了人机交互方式。

  2. 以太网:鲍勃·梅特卡夫和他的团队在PARC开发了以太网,为现代计算机网络奠定了基础。

  3. 面向对象编程:Smalltalk语言在PARC诞生,引入了面向对象编程的概念。这种编程范式后来对Java、C++等语言产生了深远影响。

  4. WYSIWYG文字处理:PARC开发的Bravo是第一个"所见即所得"的文字处理器,为现代办公软件铺平了道路。

个人电脑的兴起

1980年代见证了个人电脑的爆炸性增长:

  • Apple Macintosh:1984年推出的Macintosh电脑将图形用户界面带入主流市场。
  • IBM PC:1981年推出的IBM PC及其兼容机迅速占领了商业市场。
  • Microsoft Windows:微软在1985年推出Windows 1.0,开始了其在操作系统市场的统治地位。

编程语言的发展

这一时期也看到了许多重要编程语言的诞生:

  • C++:比雅尼·斯特劳斯特鲁普在1979年开始开发C++,将面向对象的概念引入C语言。
  • Objective-C:Brad Cox在1984年创造了Objective-C,后来成为Apple的主要开发语言。
  • Perl:Larry Wall在1987年发布了Perl,这种语言在文本处理和早期web开发中非常流行。

互联网时代 1990-2010:Web的兴起

1990年代和2000年代见证了互联网的爆炸性增长,彻底改变了人们使用和看待计算机的方式。

万维网的诞生

  • 1989年,蒂姆·伯纳斯-李在CERN提出了万维网的概念。
  • 1993年,CERN宣布万维网技术将免费供所有人使用,推动了其rapid采用。

浏览器大战

  • 1994年,网景公司发布了Netscape Navigator浏览器,迅速获得了主导地位。
  • 1995年,微软发布Internet Explorer,开始了著名的"浏览器大战"。
  • 1998年,网景开源了其浏览器代码,创建了Mozilla项目,后来发展成为Firefox浏览器。

开源运动

  • 1991年,Linus Torvalds发布了Linux内核的第一个版本。
  • 1998年,开放源代码促进会(OSI)成立,推广开源软件的理念。
  • Apache HTTP Server成为最流行的web服务器软件,展示了开源模式的力量。

互联网公司的兴起

这一时期见证了许多现在的科技巨头的诞生:

  • 1994年:Yahoo!成立
  • 1995年:亚马逊和eBay成立
  • 1998年:Google成立
  • 2004年:Facebook成立

编程语言和技术

  • Java:1995年由Sun Microsystems发布,迅速成为企业级应用开发的主导语言。
  • JavaScript:1995年在Netscape Navigator中首次出现,后来成为web前端开发的核心语言。
  • PHP:1995年首次发布,成为流行的服务器端脚本语言。
  • XML:1998年成为W3C推荐标准,为数据交换提供了一种通用格式。

这一时期的发展奠定了现代互联网的基础,创造了我们今天所熟知的许多网络服务和技术。

智能手机和移动互联网 2010-2020

2010年代见证了移动计算的爆炸性增长,智能手机成为人们日常生活中不可或缺的一部分。这一时期的主要发展包括:

智能手机平台

  • iOS:苹果在2007年推出第一代iPhone,revolutionized智能手机市场。iOS生态系统的快速发展为移动应用开发创造了新的机会。

  • Android:Google在2008年发布Android操作系统,并开放源代码(AOSP项目)。Android迅速成为全球最流行的移动操作系统,为各种价位的设备提供支持。

移动硬件技术

智能手机的成功依赖于多项硬件技术的进步:

  • 计算芯片:ARM架构处理器在移动设备中占据主导地位,提供高性能和低功耗。
  • 通信芯片:3G、4G和后来的5G技术使移动数据传输速度大幅提升。
  • 存储:闪存技术的进步使得手机可以存储更多数据。
  • 摄像头:手机摄像头质量不断提升,在某些方面甚至超越了专业相机。
  • 屏幕技术:从LCD到OLED,屏幕技术的进步提供了更好的显示效果和更低的功耗。
  • 传感器:加速度计、陀螺仪、GPS等传感器的集成为新的应用场景提供了可能。

移动应用生态系统

  • App Store和Google Play:这两个主要的应用商店为开发者提供了直接面向全球用户的平台。
  • 移动支付:Apple Pay、Google Pay等移动支付系统改变了人们的支付习惯。
  • 社交媒体:Facebook、Twitter、Instagram等平台的移动版本成为用户日常生活的一部分。

云计算和大数据

  • 云服务:Amazon Web Services、Microsoft Azure和Google Cloud Platform等云平台为移动应用提供了强大的后端支持。
  • 大数据分析:移动设备生成的海量数据为大数据分析提供了新的机会,推动了个性化服务和广告定向投放等应用。

新兴技术

  • 人工智能和机器学习:在移动设备上的应用,如语音助手(Siri、Google Assistant)和图像识别。
  • 增强现实(AR):Pokemon Go等游戏展示了AR技术在移动平台上的潜力。

这一时期的发展使得computing真正变得无处不在,为下一代技术如物联网、可穿戴设备等铺平了道路。

疫情时期的科技行业 (2020-至今)

COVID-19疫情对全球科技行业产生了深远的影响,加速了某些技术趋势,同时也创造了新的挑战和机遇。

远程工作和协作工具的爆发

  • 视频会议平台:Zoom、Microsoft Teams、Google Meet等工具的使用量激增。
  • 协作软件:Slack、Asana、Trello等工具成为remote团队的必备工具。
  • 云服务:对云基础设施的需求大幅增加,推动了AWS、Azure和Google Cloud的增长。

电子商务的加速发展

  • 在线购物平台:亚马逊、阿里巴巴等电商巨头的业务volume大幅增长。
  • 食品杂货配送:Instacart、DoorDash等服务看到需求激增。
  • 数字支付:非接触式支付方式变得更加普及。

健康科技的创新

  • 远程医疗:Teladoc、Amwell等远程医疗平台的使用量激增。
  • 健康追踪:Apple Watch、Fitbit等可穿戴设备在健康监测方面发挥更大作用。
  • 疫苗研发:mRNA技术在COVID-19疫苗开发中的应用accelerated了这一技术的发展。

教育科技的变革

  • 在线学习平台:Coursera、edX、Udacity等平台的用户数量大幅增加。
  • 虚拟课堂工具:Google Classroom、Canvas等工具被广泛采用。
  • AR/VR在教育中的应用:虚拟实验室和沉浸式学习体验的开发加速。

人工智能和机器学习的进展

  • 自然语言处理:GPT-3等大型语言模型展示了AI在文本生成和理解方面的巨大潜力。
  • 医疗AI:在病毒检测、药物筛选等领域的应用。
  • 自动化:在制造业和物流领域,机器人和自动化系统的采用加速。

芯片短缺和供应链挑战

  • 全球芯片短缺影响了从汽车到消费电子的多个行业。
  • 供应链中断推动了企业重新考虑其供应链策略,促进了本地化生产。

网络安全的重要性提升

  • 随着远程工作的普及,网络安全威胁增加。
  • 对强大的加密和身份验证解决方案的需求上升。

可持续技术的关注

  • 清洁能源技术:太阳能、风能等可再生能源技术的发展加速。
  • 电动汽车:Tesla等电动车制造商的市值大幅增长。

元宇宙和Web3的兴起

  • Facebook更名为Meta,将重点转向元宇宙的开发。
  • 区块链和加密货币技术获得更多主流关注。

隐私和数据保护

  • 对用户数据隐私的关注度提高,推动了更严格的数据保护法规。
  • 苹果等公司推出新的隐私保护功能,影响了广告行业的生态系统。

疫情时期的技术发展不仅帮助人们应对当前的挑战,还为未来的创新铺平了道路。这一时期的经验可能会长期影响工作方式、教育模式和技术应用,塑造后疫情时代的数字化转型。

结语

回顾计算机科学的历史,我们可以看到一个从理论到实践、从专业领域到日常生活的演变过程。从早期的密码学和信息论,到个人电脑的普及,再到互联网和移动技术的革命,计算机科学已经深刻地改变了我们的世界。

每个时代都有其独特的挑战和机遇,推动着技术的不断进步。当前,我们正站在人工智能、量子计算、增强现实等新兴技术的门槛上,这些技术有潜力再次revolutionize我们的生活和工作方式。

然而,随着技术的发展,我们也面临着新的挑战,如隐私保护、网络安全、技术伦理等问题。未来的计算机科学家和工程师不仅需要掌握技术知识,还需要考虑技术对社会的broader影响。

计算机科学的历史告诉我们,创新often来自跨学科的合作和意想不到的地方。保持开放的心态,鼓励多样性和创造性思维,将是推动计算机科学继续前进的关键。

随着技术继续evolve,计算机科学无疑将继续塑造我们的未来。理解其历史不仅能让我们欣赏已经取得的成就,还能为未来的创新提供灵感和指导。在这个快速变化的领域中,continuous学习和适应将是关键。未来的计算机科学将如何发展?这个问题的答案,或许就掌握在当前和未来的计算机科学家、工程师和创新者的手中。

C语言和操作系统

  • 台湾Jserv大神的课程

  • Shiwolo聚焦系统编程和Linux操作系统

  • 台湾交通大学的曹长官的OSDI课程

  • 犹太大学的嵌入式操作系统课程

  • John等安全人员的报告

  • 北京清华大学的os组

  • 上海交通大学的ipadas实验室

  • 南京大学jyy的嵌入式操作系统

内核态和用户态的一系列服务

Linux,Windows,Macos,Android,IOS是主流平台。

对于编译型语言,除非有特殊需要,2024年请优先考虑Rust和Golang,然后考虑C++,最后考虑C语言。

你肯定好奇编译器是谁写的,怎么写出来的,我也不会。

生产C/C++编译器的组织和公司就三个:

  • GNU
  • LLVM
  • Microsoft

面向对象编程

面向对象编程,感觉写不出了就加字段,加类,问题就解决了。

过程编程,感觉写不出来了就加结构体加全局变量,问题就解决了。

函数式编程,感觉写不出来了就多加点函数,问题就解决了。

现在的软件都是OOP味道的代码,只是味道重不重而已。

编程语言的运行时和开发工具

JVM OpenJDK Java

Python CPython

JavaScript JavaScriptCore 和 V8 和 SpiderMonkey

非常好,我会基于您提供的内容,将其扩展成一篇更加详细、全面的长文。我会分成几个主要部分,逐步深入探讨2D图形GUI的构建过程、相关技术和发展趋势。

深入解析2D图形GUI:从底层技术到现代应用

1. 引言

在当今数字时代,图形用户界面(GUI)已经成为我们日常生活中不可或缺的一部分。从智能手机应用到复杂的桌面软件,GUI无处不在。但是,您是否曾想过这些丰富多彩、交互便捷的界面是如何构建的?在本文中,我们将深入探讨2D图形GUI的构建过程,从最底层的图形API开始,一直到现代化的GUI工具包和应用开发框架。

2. 图形API:GUI的基石

2.1 主流图形API概述

在构建GUI的过程中,图形API扮演着至关重要的角色。它们是与硬件直接交互的接口,为上层应用提供基础的图形渲染能力。主流的图形API包括:

  1. OpenGL:跨平台的图形API,广泛应用于桌面和移动平台。
  2. Vulkan:新一代跨平台图形和计算API,提供更低的CPU开销和更好的并行处理能力。
  3. DirectX:微软开发的一系列API,主要用于Windows平台的游戏和多媒体应用开发。
  4. Metal:苹果公司为iOS和macOS开发的低开销图形API。

2.2 图形API的选择考虑

选择合适的图形API需要考虑以下因素:

  • 目标平台:不同平台支持的API有所不同。
  • 性能需求:如Vulkan和Metal等现代API通常能提供更高的性能。
  • 开发难度:OpenGL通常被认为较为易学,而Vulkan则有较陡的学习曲线。
  • 团队经验:已有的技术栈和开发经验也是重要考虑因素。

3. 窗口API:GUI的容器

3.1 窗口API的作用

窗口API是构建GUI的另一个关键组成部分。它负责:

  • 创建和管理应用程序窗口
  • 定义渲染区域
  • 处理用户输入事件(如鼠标移动、键盘输入等)
  • 管理窗口生命周期

3.2 常见的窗口API

不同平台提供了不同的窗口API:

  • Windows:Win32 API
  • macOS:Cocoa
  • Linux:X11 或 Wayland
  • 跨平台:GLFW, SDL2

3.3 事件处理和碰撞检测

窗口API不仅仅是创建窗口,还负责处理各种事件。以鼠标移动为例,当用户移动鼠标时,窗口API会:

  1. 捕获鼠标移动事件
  2. 确定鼠标位置
  3. 进行碰撞检测,判断鼠标是否悬停在某个UI元素上
  4. 触发相应的回调函数或事件处理器

这个过程是构建交互式GUI的基础。

4. 2D图形库:GUI的绘图工具

4.1 2D图形库的功能

在图形API和窗口API的基础上,2D图形库提供了更高级的绘图功能。这些库通常提供类似于浏览器Canvas的API,包括:

  • 绘制基本图形(三角形、矩形、圆形等)
  • 渲染复杂路径和多边形
  • 文本渲染
  • 图像渲染
  • 颜色管理和混合模式
  • 变换(平移、旋转、缩放)

4.2 主流2D图形库

  1. Skia

    • 由Google开发和维护
    • 用于Chrome浏览器、Android系统和Flutter框架
    • 高性能、跨平台
    • 支持硬件加速
  2. Cairo

    • 广泛用于Linux桌面环境
    • WebKit曾经使用,但部分功能可能转向Skia
    • 支持多种后端(X11、Win32、OpenGL等)
  3. WebRender

    • 源自Mozilla的Servo项目
    • 专注于Web渲染
    • 使用GPU加速,性能优异
  4. Vello

    • 由Google Fonts投资
    • 用于Android系统
    • 专注于高质量的文字渲染

4.3 2D图形库的工作原理

以绘制一个圆形为例,2D图形库通常会执行以下步骤:

  1. 接收绘制命令和参数(如圆心坐标和半径)
  2. 使用算法(如Bresenham算法)计算圆的轮廓像素
  3. 根据需要进行抗锯齿处理
  4. 填充圆内部(如果需要)
  5. 将绘制结果传递给底层图形API进行渲染

5. GUI工具包:应用开发的加速器

5.1 GUI工具包的定义和作用

GUI工具包是在2D图形库基础上构建的更高级框架,它们提供了一套完整的用户界面开发工具。GUI工具包通常包括:

  • 预定义的UI控件(按钮、文本框、滚动条等)
  • 布局管理系统
  • 事件处理机制
  • 主题和样式管理
  • 跨平台支持

5.2 主流GUI工具包

  1. GTK (GIMP Toolkit)

    • 开源、跨平台
    • 主要用于Linux桌面环境,但也支持Windows和macOS
    • 使用C语言开发,有多种语言绑定
  2. Qt

    • 跨平台、高性能
    • 广泛用于桌面和嵌入式系统开发
    • 使用C++开发,有丰富的模块和工具
  3. Flutter

    • 由Google开发,使用Dart语言
    • 主要面向移动应用开发,但也支持Web和桌面
    • 使用自己的渲染引擎,基于Skia
  4. Electron

    • 基于Chromium和Node.js
    • 允许使用Web技术开发桌面应用
    • 示例应用包括VSCode、Atom编辑器等
  5. JavaFX

    • Java平台的现代GUI工具包
    • 用于开发富客户端应用
    • JetBrains的IDE就是使用JavaFX开发的著名例子
  6. Android SDK (Kotlin/Java)

    • 用于Android应用开发
    • 支持Kotlin和Java语言
    • 提供丰富的移动应用开发组件
  7. React Native

    • 使用React框架开发移动应用
    • 允许使用JavaScript开发原生移动应用
    • 跨平台,支持iOS和Android

5.3 选择GUI工具包的考虑因素

  • 目标平台:是否需要跨平台支持?
  • 性能要求:不同工具包在性能上有差异
  • 开发语言偏好:选择你的团队最熟悉的语言
  • 社区支持和生态系统:考虑可用的库和资源
  • 学习曲线:一些工具包比其他的更容易上手
  • 特定功能需求:如3D支持、复杂动画等

6. 辅助库和组件:完善GUI应用

除了核心的GUI工具包,现代应用开发还依赖于许多辅助库和组件。这些库极大地增强了应用的功能性和用户体验。

6.1 动画库

动画是现代GUI不可或缺的一部分,它们使界面更加生动和直观。

  • Lottie:支持After Effects动画的跨平台库
  • React-Spring:用于React应用的动画库
  • AnimatedVectorDrawable:Android平台的矢量动画支持

6.2 导航组件

在复杂应用中,良好的导航体验至关重要。

  • React Navigation:React Native应用的导航解决方案
  • JetPack Navigation:Android官方导航组件
  • SwiftUI NavigationView:iOS应用的导航组件

6.3 存储解决方案

几乎所有应用都需要某种形式的数据存储。

  • SQLite:轻量级关系型数据库,适用于本地存储
  • Realm:移动端高性能数据库
  • Core Data:iOS应用的数据持久化框架

6.4 网络库

现代应用通常需要与服务器交互,网络库简化了这一过程。

  • Retrofit:Android平台流行的HTTP客户端
  • Alamofire:iOS平台的网络库
  • Axios:基于Promise的HTTP客户端,用于浏览器和Node.js

6.5 与现有代码的整合

在实际开发中,经常需要将新的GUI与现有系统集成。

  • JNI (Java Native Interface):允许Java代码调用本地代码
  • FFI (Foreign Function Interface):不同语言间的函数调用接口
  • WebAssembly:允许在Web应用中运行高性能的本地代码

7. GUI的未来趋势

随着技术的不断发展,GUI的未来充满了可能性:

  1. 3D和AR/VR集成:GUI正在从2D向3D和混合现实扩展。

  2. AI驱动的界面:人工智能将使GUI更加智能和个性化。

  3. 跨平台开发的进一步简化:像Flutter这样的框架将使一次编码、多平台运行变得更加容易。

  4. 性能优化:新的渲染技术如WebGPU将带来更高的性能。

  5. 无障碍设计的普及:GUI将更加注重包容性设计,以适应不同需求的用户。

  6. 声控和手势交互:传统的鼠标和触摸输入将与新的交互方式并存。

8. 结论

构建2D图形GUI是一个复杂而有趣的过程,涉及从底层图形API到高级应用框架的多个层次。随着技术的不断进步,GUI的开发正变得越来越强大和灵活。无论您是经验丰富的开发者还是刚刚起步的新手,理解GUI的构建过程都将帮助您创造出更加优秀的用户界面和应用程序。

在这个快速发展的领域中,持续学习和实践是保持竞争力的关键。希望本文能为您揭开GUI开发的神秘面纱,激发您对这一领域的兴趣和探索欲望。

3D图形,游戏是怎么做出来的?

多媒体应用,音视频,文档,动画,设计。

学科交叉

Google Deepmind AlphaFold

Licensed under CC BY-NC-SA 4.0