V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lawfun
V2EX  ›  程序员

请推荐书籍 - 描述 GUI 开发的原理与思想的书

  •  
  •   lawfun · 2021-10-21 20:19:20 +08:00 · 3102 次点击
    这是一个创建于 889 天前的主题,其中的信息可能已经有所发展或是发生改变。

    学过 Android 、Flutter 、Web,发现有些共性,都是需要 先测量,布局再绘制。 而且 GUI 程序肯定也有异步处理,不然 耗时任务会卡住 GUI 。

    后来想 GUI 开发也发展了很多年,从老早前的 windows 软件、QT 、J2ME 、诺基亚,很多语言都有自己的 GUI 开发库,比如 Python 有 Tkinter 、Kivy 、PySide 、wxPython 等等。

    所以, 想请教下有没有 这样一本书,描述了 GUI 开发的共性、原理的,能让人能一通百通的。

    第 1 条附言  ·  2021-10-21 23:29:26 +08:00
    举个例子

    面向对象的语言有 C++、Java,也有书讲面向对象《深入浅出面向对象分析与设计》
    后端有 Springboot 、Flask,也有书描述通用的服务器技能 《性能之巅》、《大型网站技术架构:核心原理与案例分析》
    23 条回复    2023-09-16 23:09:42 +08:00
    zjsxwc
        1
    zjsxwc  
       2021-10-21 20:43:26 +08:00 via Android   ❤️ 1
    从 jquery 到 backbone 到 vue 到 react ?
    AoEiuV020
        2
    AoEiuV020  
       2021-10-21 20:44:46 +08:00 via Android   ❤️ 1
    但凡口碑好点的书都会有这种"一通百通"的内容,
    但书要讲解经验总得有案例有 demo,就必须针对某个具体的平台具体的语言具体的框架,
    不可能干巴巴讲解的,这简直是假设读者已经懂了以上所有具体 gui 正在上升哲学层面,卖不了几本的,
    shawnsh
        3
    shawnsh  
       2021-10-21 20:55:58 +08:00 via Android   ❤️ 1
    确实没有这种书,因为好的资深前端都转后台开发了🐶。我之前也在找这种书籍,不过没有。如果有指导思想的话,学习起来会很快。期待大神写个这样的书
    agagega
        4
    agagega  
       2021-10-21 21:00:01 +08:00 via iPhone   ❤️ 1
    确实没遇到这种书。不过可以学点底层图形学的知识,可以更好理解上层 API 的设计逻辑
    makelove
        5
    makelove  
       2021-10-21 21:05:34 +08:00   ❤️ 1
    现在的 Web 那套模式才是 GUI 开发发展的最佳模式,以前那套传统桌面 GUI 开发模式有点落后了,开发效率不行,代码还乱
    learnshare
        6
    learnshare  
       2021-10-21 21:20:12 +08:00   ❤️ 1
    数学 -> 计算机图形学 -> 2D/3D 图形渲染
    MakHoCheung
        7
    MakHoCheung  
       2021-10-21 21:28:38 +08:00   ❤️ 1
    @makelove Web 的那套模式是什么模式,jsx 还是 mvvm 呢,现在的 MAUI 、Compose for desktop 和 SwiftUI 又如何
    Bromine0x23
        8
    Bromine0x23  
       2021-10-21 21:55:58 +08:00   ❤️ 1
    找到本《用户界面设计》
    Mutoo
        9
    Mutoo  
       2021-10-21 22:05:57 +08:00 via iPhone   ❤️ 1
    分享一下自己前些年的系列笔记:浅析事件驱动的 GUI 原理,共三篇
    https://blog.mutoo.im/2017/08/understanding-event-driven-gui/
    lawfun
        11
    lawfun  
    OP
       2021-10-21 22:21:55 +08:00
    @makelove 看到 最佳 还想 辩论几句,后来一想“最”字也是个语气助词吧。
    Flutter 的模式 也很优秀。
    现在 Flutter React 小程序 都是 数据驱动的方式去 修改展示数据,Android 中虽然也有,但是很多实践中都不用。
    lawfun
        12
    lawfun  
    OP
       2021-10-21 22:28:59 +08:00
    @learnshare
    数学中的几何比较常用,有时做动画需要套些简单的数学公式。
    矩阵在 图形变换时有用。
    渲染属于比较深的知识了,OpenGl 看了几天没看懂,相机中加滤镜可能需要,一般 APP 估计用不太多。
    dandycheung
        13
    dandycheung  
       2021-10-22 00:48:28 +08:00 via Android
    简而言之,GUI 就是树状矩形的层次化管理,理解起来并不难。它之所以复杂,古早时期是因为对象数量可能较多,导致要进行大量内存组织利用的优化工作;晚近时期则是由于半透明和及时更新导致的多层内容组合重绘问题。色位宽、面积大,导致像素数据量巨大,数据的运算和传输上 CPU 要重度依赖 GPU 的接口和规范。事件(含用户输入)模型又跟系统的进程线程调度勾连。这些相关的各个方面都了解后就没那么困惑了。
    binux
        14
    binux  
       2021-10-22 01:06:00 +08:00 via Android
    GUI 开发不是重度依赖操作系统给你提供的接口和库吗,怎么实现,最佳实现是什么已经给你定好了,你还能有思想?
    holulu
        15
    holulu  
       2021-10-22 07:37:59 +08:00
    一直在找 GUI 最佳实践类的书,但没找到。感觉方向不太对,最近在找游戏 UI 的书。
    encro
        16
    encro  
       2021-10-22 09:08:15 +08:00
    gui 思想:从最开始手动操作界面,到 mvc,到数据绑定(mvvm)。
    encro
        17
    encro  
       2021-10-22 09:10:05 +08:00
    @holulu

    当前最佳实践应该就是数据绑定:在 MVC 的基础上,将数据和界面再分离出来------只需要操作数据,界面自动变化。
    ychost
        18
    ychost  
       2021-10-22 09:52:32 +08:00
    WPF 那套模式蛮优秀的,后面的前端框架多多少少用到了里面的一些 DataBinding 等思想
    2i2Re2PLMaDnghL
        19
    2i2Re2PLMaDnghL  
       2021-10-22 09:57:08 +08:00   ❤️ 1
    GUI 分为三个部分,一个是 G,一个是 UI,一个是如何用 G 去做 UI
    UI 设计是有专门的书籍的,甚至还专门细化出用户体验设计(简称 UE 或者 UX )
    G 的部分,计算机图形学。
    至于如何用 G 去做 UI,哲学思想都一直在变,MVC 到 MVVM 中间经历了不少,我们能确保 MVVM 是最终形态了吗?

    @binux 操作系统之上建立了 HTML+DOM+CSS 的方式,在这之上又建立了 MVVM 的数据流线。接口和库永远是可以封装的。
    bg7lgb
        20
    bg7lgb  
       2021-10-22 10:31:36 +08:00
    有本书,比较老,讲 X window 的,从光栅到字元绘制,从最基础的讲起。忘记书的名字了。
    thtznet
        21
    thtznet  
       2021-10-22 14:41:34 +08:00
    如果领域只是停留在 GUI 的设计、交互层面,那么这是 UX 的领域,这方面的书应该是有的,但更多的是设计领域,和计算机其实没太多关系。如果 GUI 的面需要向下扩展到数据的组织层面,那么这部分的开发并不是楼主说的有共性,这几年的前端可以时时再变,数据驱动原理每家都不一样,目前属于百花齐放阶段,还没有万剑归宗然后出一个集大成版,静待吧。
    secondwtq
        22
    secondwtq  
       2021-10-23 01:46:32 +08:00   ❤️ 1
    再推 Raph Levien 的 Towards a unified theory of reactive UI https://raphlinus.github.io/ui/druid/2019/11/22/reactive-ui.html
    这老哥后来写了个后续,不过我暂时没太看得懂 https://raphlinus.github.io/rust/druid/2020/09/25/principled-reactive-ui.html

    GUI 这种书难找的原因我猜是不存在一个绝对主流的 pattern 和主流场景,印象中你说的那些“通用”的书,如果是主要面向工程实践的,就必然会受到应用中主流 pattern 和主流场景的影响。受影响较小的“原理和思想”的书基本都是纯理论性的,典型的一个大类是讲算法的书(包括通用算法,密码学算法,图形学算法,视觉算法,AI 算法等 ...),我看了下我的书单,除此之外其他的满足条件的书难找( OS 、数据库和网络大部分书我认为是受到主流 pattern 影响很大的)。

    比如你说的“深入浅出面向对象分析与设计”这个书,我大概查了下,感觉主要面向的还是“Java 外包开发”,对其他“非主流”场景不一定适用(就不谈他这个“面向对象”的定义问题了 ...)。实际上像 MVC 、MVVM 这些设计模式已经是一种“通用原理”,但是这些也远远不够“通用”到 cover 整个“主流” GUI 世界的程度,因为 GUI 就不存在“主流”。

    GUI 只能在各路通用 pattern 中找出代表性的框架,再针对框架找代表性的书。比如传统 Retained mode GUI 比较典型的 Win32,以及在此基础上的 MFC 、VCL 。加入了更多设计模式的 Cocoa 和 WPF 。Immediate mode 的 Dear ImGui 。最新的是 Raph Levien 所谓“Reactive UI”即 React 、Elm 、Flutter 、SwiftUI 这一代(这个还有很多 open problem )。上面每一组都是完全不同的模式,最多只能做到你学了典型框架 VCL 就大概了解了传统 Retained mode GUI,就好像看了“深入浅出面向对象分析与设计”就大概了解了 Java 的面向对象设计。
    luamer
        23
    luamer  
       193 天前
    看来只能从源码学了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3310 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:46 · PVG 21:46 · LAX 06:46 · JFK 09:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.