不知道是不是学太少导致的错觉:感觉 Web 开发比原生开发体验更好?

247 天前
 pocarisweat

尝试过学习和使用 SwiftUI/UIKit/AppKit 开发一些苹果生态里的小 App ,虽然能使用的 API 比 Web 更广泛,但要考虑的东西也多了,而且即使是 SwiftUI 这种 MVVM 的框架,写起来感觉也不如 Web 一样简洁明快(即使不用 Vue/React 这类框架)。也在 Copilot 和 ChatGPT 的帮助下非常浅薄地体验了一下写 Android Demo ,感觉和 iOS 差不多。

工具链层面差距可能更大了。iOS 开发就一个说不上哪里不好但用着仿佛隔靴搔痒的 Xcode ,AppCode 都停止维护了。而前端因为体系是开放的,不管 VS Code 、WebStorm 还是 Emacs 之类的写起来都很顺畅。

之前还有过一个想法,就是像 TypeScript 这样的语言应该能编译到真正的 native 代码,这样就可以在此基础上用 FFI 绑定到各平台的原生 API ( Cocoa/WinRT/GTK...),再因为我们有 TSX ,所以能够实现用 Web 语言的方式写原生接口的应用的目的。不过这样……可能只是发明了又一个 React Native ?

5707 次点击
所在节点    随想
69 条回复
darkengine
247 天前
可惜用户要的是使用体验, 不关心开发体验
adoal
247 天前
浏览器引擎的开发商给你抹平了太多原生 UI 的细节。
binfreeze
247 天前
我没写过 web 。写程序的 API 只用操作系统的 win32 和 C++ 标准库的。其他全都造轮子。
个人感觉,你写代码时候,抽象层次越高,也就是下面一层又一层叠起来的框架越多。。你肯定写着越爽。因为你离硬件和操作系统的工作原理,越来越远了。
这里有个问题,你这样写程序,掌握的好多知识,随着时间很容易贬值。
虽然你的生产力提高了,老板高兴,你拿到钱也很爽。但你自己的工程能力呢,解决问题的能力呢,或者基础知识之类的。一些隐式的能力因为得不到足够的锻炼会很薄弱。然后 10 年以后,你看人家造框架的人干的事情,就像魔法一样。回顾自己的职业生涯,可能就觉得当时选 web 是个错误的决定了。
binfreeze
247 天前
可以看看 Mike Acton 的演讲视频,有个 C++ 的,还有个讲游戏引擎工程师需要什么样的能力。都有点偏向于传授内功心法,编程哲学的。。即便是你不写 C++ 也会有启发。或者 John Carmack 讲解决 Fackbook VR 设备延迟问题的演讲,看看他解决问题的思路。再思考一下自己现在的这些问题,你可能会是不一样的看法。
如果你对技术的视线充满好奇心,我估计没多久,你自己也受不了太高抽象层次的编程了,会转变职业路线。如果你只是为了赚钱,或者觉得不了解细节和无所谓,编程不就是个拿工资的工作而已嘛,那他们说的跟你也没关系了。毕竟不同抽象层次的工作,都要有人干,也没什么到底谁对谁错,个人选择罢了。
binfreeze
247 天前
刚打了几个错别字,自己脑补一下吧。。总结来说,你这个哪个爽的问题。本质上就是编程的抽象层次问题。
bluedawn
247 天前
@binfreeze 您讲的是事实,我以前用 win32 写过图形界面。冗长的代码确实能实现精细控制,但是代价是用三小时写了别人用 MFC 三分钟写完的东西。确实 MFC 作为上层建筑过时很久了,但是这并不能让我重拾 win32 的兴趣。所以我觉得这么底层的东西打基础练习可以,但是用它来做点什么实在困难。
binfreeze
247 天前
有个写编译器, 游戏引擎, 3D 游戏的大佬 jonathan blow, 看待 Web, 写 UI 代码的. 都不认为他们是程序员. 当然有点极端了. 他自己直播过写一些原生程序的界面. OpenGL, Truetype 字体解析, 就够了. UI 框架是什么, 不需要的. 你就算用 Typescript 写得再爽, 也没办法获得他那种成就感. 这个写的爽, 和知道一切原理的爽, 到底哪个更爽呢.
binfreeze
247 天前
@bluedawn win32 还相对简单一些, 用图形 API 调用 GPU 画界面更麻烦. 但你可以自己去封装这些, 让以后写这种程序, 也几分钟就结束. 类似 imgui 那样, 但规模更小一些. 程序员的职业生涯很长, 如果现在 25 岁, 那到 60 岁还有 35 年呢. 每个月抽出来点时间维护的自己的这个画界面的小工具, 可以用一辈子.. 也不是很难的一件事. 还能学到不少东西. 如果底层的都不接触, 等到退休那天, 发现好多地方自己看过去就像是黑盒一样, 不会感觉有些遗憾么. 我的意思是, 如果你有兴趣, 那么花时间进去是值得的, 麻烦一些也值得. 如果没兴趣, 愿意把人生的时间花在自己认为更有意义的其他方面, 那确实也没必要非要折腾自己了.
binfreeze
247 天前
@bluedawn 这调用操作系统的 API 其实也是个黑盒. 毕竟看不到后面的源代码. 但写应用程序只能到这个程度, 毕竟是在人家微软的系统上跑. 图形 API 也没有完全反应显卡的工作原理.. 但至少解开了一些谜团.
说个跑题的, 我觉得编程里面有好多地方, 会让人意识到, 所做的事情仅仅是因为某个人制定了一个规则, 哪怕这个规则的很糟糕, 也不得不忍受. 而有些地方, 比如一些算法什么的, 可能会更接近 "宇宙本质" 的一些东西, 更像是数学物理之类的. 我估计绝大多数人, 都不喜欢被别人的规则牵着走, 而更希望触及一些本质, 永恒不变的东西.
zzzkkk
247 天前
再底层是驱动

任何底层 api 都是对驱动 api 的调用

底层就直接是电路 人家硬件更看不起软件呢
binfreeze
247 天前
@bluedawn 我觉得 CPU, 内存, 各种硬件. 就像是计算机内部的这个虚拟世界的物理规则. 我们虽然没有办法去直接触碰现实世界的物理规则. 但也可以在这个虚拟世界中, 用第一性原理一样的方式, 去解决一些问题, 也让自己爽一爽. 所以我觉得 Mike Acton 说的那些很有道理. 你在这个虚拟世界的内部爽够了, 也可以让你的这个小世界去触碰外部的世界, 比如各种机器人什么的, 那这就更爽一些了.
binfreeze
247 天前
@zzzkkk 问题是, 程序员没必要非要把自己限制在一个层级内就不往下探索啊. 一个人可以工作用框架完成业务, 为了赚钱. 但他也可以满足好奇心, 一口气写到驱动, 甚至到电路上. 如果仅仅是弄个玩具一样的, 难道也是一个遥不可及的事情吗.
binfreeze
247 天前
@zzzkkk 他甚至可以一边当程序员, 自己回家看看物理书呢. 没人规定他不能做这个事情.
binfreeze
247 天前
借着你这个帖子, 我继续扯远点.
200 年后的程序员, 他还是写这种 APP 吗.
如果脑机接口可以往自己脑子里面输入信息了, 你是愿意直接操作硬件输入这个数据, 还是依赖于第三方的什么库完成这个事情呢, 在编码自己大脑的过程中, 你能信任微软吗.
你有梦到过自己家里的家政机器人, 忽然变得不受控制, 开始攻击自己吗.
你有好奇, 未来真正的人工智能到底是如何编写出来的吗, 他内部到底是怎么工作的, 为什么会产生意识, 或者是不是永远都不会产生意识?
这个抽象层次的问题, 不仅仅是到底用不用框架, 哪个更爽这么简单. 它暴露的是更深层次的一些问题, 编程到底是什么呢. 自己作为控制机器的这个人, 当有了更多的可能以后, 愿意做什么呢.
binfreeze
247 天前
我觉得对系统的完全控制, 可以是一种追求. 即便是完成这个事情很难, 不是一个人能做到. 但有这种向往, 去实现一部分, 也是一件值得做的事情. 至少对于我这个科幻迷是这样的.
darkengine
247 天前
@binfreeze 我觉得能用快捷的方案 (web, native app) 实现自己的一个想法, 满足自己的用户也是一件很有成就感的事情. 当然如果在工作中用 web/app 做一些自己都不认同的产品, 那肯定相当痛苦.
binfreeze
247 天前
最后说一个睡觉了. 我这种玩论坛的方式应该是错的.. 把你这里当作自己抒发想法的地方了.. 你有想过, 高德纳的 TACOP 为什么是设计了一个虚拟的 CPU, 然后用这个讲算法吗. 这个方式合理吗?
binfreeze
247 天前
SICP 的作者给惠普培训的时候, (具体哪个公司我也忘了), 他说天文学不是研究显微镜. 那研究硬件的工作原理, 是不是就像研究显微镜, 很没意义呢? 我对编程有很多疑惑, 内心也有很多声音在碰撞着. 我觉得很多答案需要用一生来探寻.
binfreeze
247 天前
@darkengine 对啊. 实现业务也是一件有成就感的事情. 每个人都有自己认为有意义的事情. 或者说, 有没有意义, 只取决于你自己的意识. 跟这个世界上其他人的看法是没关系的.
binfreeze
247 天前
回到话题本身. 这个 "爽" 如何去定义呢. 我觉得 "到底哪种方式更爽", 取决于说这个话的人, 他自己的灵魂.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/970912

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX