有网友问:C++需要学到什么程度再开始学 qt 比较合理?
南老师回答如下。
在我看来,这确实是一个好问题,但我的回答,大概很难成为一个好回答。
但我还是想回答,所以诚恳谢妖!
如果有人问我,你会 Visual Studio C++ 吗?我会直觉回答:不会,因为太少用了——尽管我在 VC 1.5 的时候,就曾经安装并完成一些工作,但一直很讨厌这个IDE,就能不用就不用,于是越发不会用。
如果有人问我,你会 Qt 吗? 这下连直觉都不用了,肯定得老实回答:不会。
但不妨碍我,在疫期的某一年,我大胆接了一个来自医院的单,是一个别人赚了一手了,撒手不做的二手单,必须用到 Qt ,并且原项目用的是Visaul C++ Studio (不是 VSCode)。
年纪大了以后的我接单有两个原则,第一个是报价一定相对贵,能接受你就给钱,不能我就不做;相反,我很少考虑技术栈是不是和自己擅长,是否有延续笥——若还问,我就装B:基本都不会,但都多少会一点。
所以,本来这是一个三年维护费不到五万的项目,但甲方和天下所有甲方一样,把不少重要新功能开发或原功能改进,全当成 “维护”工作量了——大聪明原作者在维护一年后就选责消极怠工,然后由甲方愤而主动断掉——我得感谢原作者,然后我先无偿帮他们分析了下。
注意,当我在做这些分析工作时,我抢先到甲方会场,坐在会议室长桌正中间,时间一到,医院甲方相关领导只好坐我左手侧,医院还有三四个配合其他软件厂商的代表,坐右手侧。我很认真的讲了现有项目的问题根源所在以及这些根源极大可能会造成大家的痛苦,大概就是这类表达:
——“是不是觉得喉咙有一直有异物?咳又咳不出,吞东西还痛?”
——“是不是经常发现尿液混浊不清?几次放回裤子后又突然滴出一串?”
——“是不是感觉力不从心?可是领导又逼得很紧?”
然后我投影出我的密密麻麻的报价单——非常详细,但肯定不会有 “熟悉环境 ”, “了解现有项目”,“准备开发环境” 这种不专业的做法……
总时间3个月,费用税后15W。如果觉得贵,可有两个选择:一是从报价单上砍掉部分内容,二是某些特定功能,适当延长时间(因为在延长的时间内,我可以去赚别的钱)。
左边的没说什么意见,只是表情凝重。右边那些“联合国”的杂牌军抛出一连串问题,我一个个回答,其间对一些典型的“笨蛋”问题,给了适当的 PUA 训斥法(原谅我,其实我非常好相处,但在关键场合,总会有些人问你一些类似 “你怎么证明永动机发明不出来?” 这种破问题……
会后对方从报价单里划掉几项,砍了3万。我接受了。因为拖延症,最后一个月才开始开发。第一天时间,全在安装 VS 和 Qt …第二天,有点担心 Qt 的版权 ,发现前面的团队已经和甲方处理好此事了,于是我提出在合同的某些条款里改了些表达,对方同意。
我完成了他们要的功能。年底钱到手。
现在回答你的问题:
C++需要学到什么程度再开始学 Qt 比较合理?
这个问题,把 “Qt” 换成别的,比如 “wxWidgets”,我的回答会大相径庭。
Qt 是一个定向性高,职业(找工作)相关性高,因而必然要学习的东西更系统,更庞大,更深入(不深入你面试时就输了竞争对手)的库。
很多人有一个我认为是错误的理解,他们觉得,学习应该尽快往 “能找到工作” 的某个方向去找。
比如,学什么编程语言好? 简单,上几大招聘网站搜索统计下,看哪个语言的岗位多,我就学它。
这是完全错误的。越和工作强挂勾的技术,往往就越 “细分” + “深入” + “系统化”。也就意味着,你已经迅速进入一个狭窄赛道了。
如果我采访一个 14 岁的女生,长大以后,想嫁给什么样的男人?小姑娘回答我什么,我都可以接受,但如果她回答是:男方最好没有父母了,但有留下房子两套以上,男方的工作最好是公务员……如此的具体而实际时。我会吓坏,并且内心开始担心这个社会是不是出了什么问题?
就爱情与婚姻来讲,你可以认为当前社会确实是有些不太好的风气,但若是和程序员就业这事相比,它们都正常了。现在至少在计算机专业这一块的“学习风气”,真是有类似在幼儿园中班开始自学《万字长文让你一篇掌握避孕套的十七种使用方法》的现象……
回到 Qt —— 当然,它只是引子,实际想说的是,这类专业化、系统化、职业化,赛道化的框架,你什么时候学它?
答:
第一、就是喜欢!太棒了!
第一、你学习它一阵,然后发现就是喜欢它。(这太好了!)深入学习吧,并且努力让它成为自己的工作。工作真的和婚姻有相似性。所以哪怕是在工作前三年,能拥有婚姻和爱情完全重合的时光,值得努力,值得珍惜。——于是,我唯一的建议是:如果你只是学了Qt,然后发自己喜欢它,这可能是不可靠的,你最好再试着学习学别的东西,也许发现自己就是个学什么爱什么“海王”而已……
第二、就是要用来找工作,学吧!
第二、不管你喜欢不喜欢,反正你已经明确要用它来找工作(甚至,你都已经找到了),那就去努力地,深入的学习吧。唯一的建议就是:C++ 有差不多的基础就行了(以我的 《白话C++ 练功篇》为标准,学完它的 800 页即可,更厚的《练武》篇可以不学)。 (不要觉得 800 太厚,对 C++ 这门语言来说,光光语法,程序设计 ,800页真的称得上 “极简”)。
第三、没有特别喜欢(甚至就没试过),没有明确的就业方向 ,不要学它
第三、如果你没有找工作压力,那先不要学Qt
没有工作压力(两种情况:已经找到,或者暂时不用找,比如你才大一大二),我不建议你学习 Qt, 我会建议你学习更接近基础,且更有学习性质的附加价值: Win32 的原生编程,或者,更轻量的,更方便你概览全貌,做也成果的 GUI 库,比如前述的 wxWidgets)。新近刚好我录了一节 wxWidgets 工具栏 的小课,我花了很大时间在讲 为什么 “当一个人学GUI窗体设计学完菜单和工具栏后,就是这个人这一生最合适开始 理解 MVC 这个经典模式 ” 的话题,有兴趣的人可以去听听。在这里:
GUI07-学工具栏,懂 MVC
是的,通过学习一个更小的库——这个库可能实用的人并不多,甚至 ,它干脆就是个 “教学库”,真是再好不过了,因为它能让我们获得更好的学习成效——能让你拥有更强的综合能力,达成未来敢相对轻松地接下各类技术栈的状态。
不知道我有没表达清楚:就学习而言,不是学那种对找工作越有帮助的知识,就成效越大的。以 Java 语言为例。Java 是一门好语言,只是,因为太多人学它时目标非常明确(“功利”)用它换一份工资还行的工作吧……于是,太多 Java 学习过程和结果,都变味了……
说得更直白一些:如果你直接非常有针对性地,非常深入地学一门专项技术,确实在短时间内,更容易找到工作;但反过来说,若是脱离这个细分领域 ,你会发现自己更不好找工作了……理想的状态就是:能相对轻松地做到因工作而定我“会的技术,而不是因为我只会某个技术,然后去定工作……
如果你做到一些,就可以有第四点:
第四、你已经能随时“学”一学它,然后足够的钱就在眼前……
当然学啊,自打读计算机专业,我就曾经烦 VS Studio 二十多年——有人说,你烦就不用它啊,为什么会烦这么久?举另外一个例子吧:自打读计算专业,我烦别人叫我组装计算,杀毒,恢复误删除文件这些事有十多年……就是我不用,但它很流行,总有人以为我都读计算机业又从事编程工作并且用的还是 C++ 居多,所以你必须会 VC 啊……
我真的有 “会过” 几阵子,一个是二十年前写Office软件时,一个就是前几年为了赚那十来万时。
Qt也是,一边看代码,一边夺 该项目的 “前夫哥” 花样还挺多嘛……一边自己查查资料 (甚至都不用跨出 CSDN 这个我平常也不是太喜欢的站……)。
因为有钱赚,什么都可以变成眉清目秀。
结论
没有迫在眉睫的工作逼着,没有唾手可得的钱引诱着,真不要太早投入这种方向性极强的知识领域的学习。就像找女朋友,如果你18岁那年就打定主意,将来一定只找富婆,我会很想走近你,给你一个抱抱。问一句 “一定要这样子吗?”
那不学Qt,要学什么?多广泛涉猎吧——事实上这就完全不用我来列举了,这么卷的大风气下,哪有想学还不知道学什么的?但我想唯一给你的提供多一个建议就是:任何一个领域 ,起如学习时,请先学会挑选轻量的(如前所述,哪怕是教学式)的知识学习,因为仅就学习成效(而非找工作)而言,这才是高性价比啊。
顺便 提一下 “我学什么计算机语言好?” 。。什么语言都可以。但如果是 Java ,那是要多注意一下,因为你很可能会就此从一而终。用谈恋爱相比,“年纪” 轻轻学Java,差不多就是遇上第一个姑娘,谈了七天之后,她就问你:“这周末我想去见你父母”
好吧,应该是我错了。其实,初恋即终恋,一生只有一个女人……才是幸福人生,本文只是南老师结合自己情况的一家之言。