关于Flutter、Qt for python 以及一些技术、开源、商用问题
为什么写这篇文章?
首先我自认为我是一个非常喜欢极简主义 、一次编译处处运行 这些概念的人。当然,这也是我选择学习跨平台 技术(Qt for pyhon与Flutter)的原因。
首先我先叠一层甲,下边的都是我的一些个人观点,不喜勿喷。
极简
Flutter是真正免费的全栈语言,可以开发 前端、后端、移动应用和桌面应用,对于掌握Java和js的上手难度较低,可能会存在难以解决的Bug。
Qt for Python LGPL 支持商用免费,基于Qt适合桌面应用程序以及掌握Python语法的人,可学习项目少(需要自己踩坑)。
关于Flutter全栈
我是在64位 的 Linux环境上开发,只是看过基础部分语法,运行过一些demo。demo链接
关于Flutter的语法:
首先,我认为语法角度 Python要比Dart简洁的多(当然部分小语法还是比较简洁的比如判空等)。Dart的语法门槛对于学习Java以及JS的人来说应该要比较简单。
关于技术问题
Flutter的野心特别大,要把桌面应用(Windows、Linux、MacOS)、移动应用(android、iso)、网页(Chrome、Edge引擎等)。首先,不得不佩服google不愧是大公司,财大气粗才会想着实现大一统(要是一些小企业想着就是先上桌喝口汤);其次,要兼容这么多平台,光想想就觉得工程量非常大。这就注定是一个漫长的维护周期,且必定有一些技术问题长期无法得到解决(这部分我是去知乎了解的,看的太多不一一列举了);最后,毕竟是google维护的大项目,要是持续更新维护就存在更好或完全兼容的可能性(可能国外会有一些大佬先有解决方案)。
结论 : 跨平台开发可以,我在
Linux上测试web、android、Linux均可。这里分享下我的避坑文章
关于Qt for python桌面GUI程序开发
这部分我觉得还是有一定话语权,毕竟写了这么多博客!
技术问题
我觉得学习一个技术要知道这个技术:能做什么,不能做人么(什么是强项,什么是弱项),这也是比较耽误时间的(有些技术噱头太大,又没有人分享踩坑经验,只能"先干为敬"),Qt for python背靠的是Qt这颗大树,得益于Qt给Python提供的各种接口,使得Python开发桌面应用程序(Windows、Linux、MacOS)成为可能。但是Qt的学习曲线就陡、Python只是开发效率高了,该了解的还是得了解(像什么QSS、QML以及各种控件)。
结论:Qt for Python桌面程序开发(Windows、Linux、MacOS)可以,移动应用就是噱头(C++ Qt应该可以,不过笔者没搞过)
语法
Qt的框架足够大,大到什么程度?你几乎可以将Qt抽象为一门语言。主要就是类多、轮子多。但是,Qt for Python主要还是Python语法。
文档相关
我在一个Qt for Python的技术群里看到有人这样评价flutter的文档是一堆shit(大致意思,原话记不清了),我作为一个初学者也是这样的感受。与之相比Qt for Python或者Qt(文档更全)的文档就比较人性化了,但是就我使用下来也没有特别人性化。比如: 一些冷门的部件、一些特殊的属性等,而且免费分享踩坑经验的人 少之又少,遂只能看看相关类与父类的属性、方法、信号、槽等。
结论: Qt for Python的官方文档相比Flutter的要好太多,但是一些冷门的还是需要自己踩坑。
其他
首选,Qt for Python可以学习的项目,我觉得比较少(主要是一些辅助开发项目以及一些入门教程),这部分书籍也是基础篇多(可视化爬虫和游戏以及数据分析相关,就算不错的项目了;PyQt5的项目可能更多 像什么串口连接工具)。也有可能是搞Qt的大部分不是嵌入式、就是什么音视频处理。
注意 : 有些真的是噱头,就是无脑显示一个好看的界面骗点赞、关注以及马内 (有不少但我不敢说)。
学习建议
PyQt5-6 PySide5-6的书和项目都看看(最好有精力再学学C++,读者精力有限遂放弃)。买书其实也是避免重复造轮子,很少有人纯为爱发电(纯开源)。当然你也可以理解为主题阅读,更容易构建完善的知识体系。
商用
Qt for Python
社区版本是支持GPL和LGPL俩种模式的,前者享受自由就必须分享自由 ,后者商用可不开源
Flutter免费商用
Qt for Python或Qt 与 Flutter怎么选?
这里首先要保持正确的态度,框架的性能确实是有瓶颈的!但是以我们能打60的及格分显然想要触及到还是比较难的! 学习优化也是重要的一环。
先说说桌面应用程序,知乎上好多人说Flutter不重视桌面应用程序的维护(具体看的帖子太多,记不清了)相
比,Qt或Qt for Python就比较靠谱点了;安卓的话就从知乎的评论来看应该内存 是主要的瓶颈,Qt的话没有搞过(拿Qt for Python还是别搞了 太折腾)。
"小孩子才做选择,大人:我全都要" 这也许就是Flutter吧,抱着这个想法你应该选择野心勃勃的Flutter了。
关于各种平台运行和部署
运行的话都没什么问题!
Flutter部署
windows好像需要什么VSS和go环境Linuxsnap官网提供,flathub一些github提供了解决方案安卓:可行,不过一个demo70个M认真的吗?- 其他: 条件有限,未测试。
是否要坚持当前的技术栈或学习新技术
这个问题的本质就是看兴趣和工作内容,如果需要和感兴趣那当然要学。
干一行爱一行还是干一行恨一行?
越新的技术代表有更多可能性(不过还是依赖于社区和开发者等的长期维护),旧的技术由于功能相对健全、bug维护更及时。这样看就不难理解为什么会爱和恨:
a. 爱是因为刚入门或者享受到了技术带来的乐趣。
b. 很就是到了技术栈的顶端(当然你要是一直没有补全技术债,那当我没说)
打个比方:学一门科目,刚开始考60其实是比较简单那80呢?90呢?100呢?
当能打一个80左右我觉得大部分 需求都能解决了!剩下时间可以留着了解其他技术栈。
想入行或者兴趣爱好 怎么坚持?
这里笔者不得不吐槽了,对于我们00后 什么IT技术红利也没赶上(倒是非典、新冠赶上了),与90后比工作经验我们没有,70/80后比人脉资源我们没有。我们有什么?那就是年轻,接受新鲜事物或信息能力强。其实我觉得IT也是比较吃经验的,有很多Java的大佬,什么安卓开发、后端、前端等 都是手拿把恰。也许是机构的后期服务,不过我觉得更多是直接或间接内化或形成了处理Bug与学习新技术的逻辑。
怎么坚持?我觉得还是培养成一种兴趣、爱好,做好短时间内看不到成果如马内的心理建设。
在短视频的熏陶下,我们渐渐丧失了,做成一件事情的耐心,开始变得基于求成。慢下来,坚持下来,技术会慢慢精进。
开源是一场骗局?
开源也是有好的,看是不是纯开源,不过国内外环境不一样。以下为个人观点:
国外大公司不缺钱: 先把蛋糕做大。
国内小公司缺钱: 先能吃个小蛋糕就吃个小蛋糕。
关于一些项目开源后又增加商用模式?这是一种常见的开源收益模式(比如Qt和Anconda),还有Donate捐赠或者由开源基金会支持。还有的会半开源,一部分可以免费,但是高级的需要付费(不难理解,确实是需要长期维护,是需要耗费脑力和人力的)。
这里我吐槽几句,好产品不如好营销。奔着技术去就好好擦亮眼睛,看看是不是噱头!(给你装个B,让你觉得牛13 ,但一点实用性都没有这种就f**k off)
这里我还想扯个咸蛋,有些人或者公司真的很无良,互相利用噱头来哄骗无知的人群(我觉得他们是搞营销的,不是搞技术的!)。这种感觉就像这么一句话:"左脚踩右脚上天!"。你装腔作态,他虚张声势,结果把搞技术的的和不搞技术的人都唬住了。我真的希望这些人善良,不要把环境给弄脏了!