浅谈入行Qt桌面端开发程序员-从毕业到上岗(1):当我们说到桌面端开发时,我们在谈论什么?
谈谈我自己
大家好,我是轩先生,是一个刚入行的Qt桌面端开发程序员。我的本科是双非一本的数学专业,22年毕业,只是部分课程与计算机之间有所交叉,其实在我毕业的时候并没有想过会成为一名程序员,也没有想过会成为一名桌面端开发的程序员。我记得大学的时候我最想去做的事是做一名记者,大学呢也在学校校报的通讯社做了三年的记者兼版面编辑,后来还当了副社长,当然了记者的工资和程序员的工资肯定是没法比哈,而且我的本科专业也比较偏理科,投了几家报社和几家软件公司,拿到offer比较了一下之后就来到了现在这家公司哈。所以可以说我目前的工作是我之前完全没有准备过的。
我来到这个部门的时候正好遇到整个项目要从c#到Qt转型,所以我是先学了C#,再学的Qt,这两个语言之间花了一段时间去转换,也从中了解到很多不同语言之间的异同,之后有空我会简单聊聊C#和Qt。
这篇文章我想简单谈谈关于应届生想做Qt桌面端的一些就业问题,以及就业之后如何从实习到转正,算是记录一点我的心路历程,将来如果有新同事想了解一下学习路线,我也会把这篇文章或者将来会拍一期视频,给他们看看。
一、关于就业
就业问题想必是大部分看到这篇博客的同学会关注到的。前几年是什么情况我不太清楚,就目前来说岗位少人多貌似已经是常态了,但不同的是C++仍然招人比较困难。我听说的是Java岗很多都投爆了,但是我们组现在还招不到C++的...
其实我对就业是没有什么建议的,网上有很多什么背八股文、刷算法试题的攻略了,但是我现在作为一个从业人员的建议是:C++面试这块,不要太过于纠结于八股文和算法,因为技术面不一定会问,即使你过了一面,二面也不好过。但不是要你完全不去了解,而是在了解的基础上,更多的是去实践,因为开发不是做题,不是你题做的好,代码就写得好的。
就我主管这个月面的一些人来说,八股文一个背的比一个溜,结果一些实际场景问起来,连最基础的进程间通信和跨线程同步这样的问题都完全答不上来,或者最简单的如何判断char类型的字符是英文、是数字、是中文,都不说具体方法了,连提供思路也提供不了。这是非常糟糕的,说明你一点基础的开发经验都没有,而现在就业市场作为买方市场,企业或者主管更多的愿意去招一些不用培训就可以上岗的新人,退而求其次才会去看别的。你算法玩的再溜,也不是所有的企业的所有位置需要你那么懂算法,甚至比起算法,你懂怎么跨进程通信甚至都更重要。
四大件,四大件,四大件。数据结构与算法,计算机网络,操作系统,计算机组成原理,这四大件才是最重要的,如果你想要进一步提升,还有一个设计模式也是非常重要的。
我这里可以列一个我主管面试硕士的面试题,你可以看一下自己能答出多少,反正当时面了三四个硕士,有的人支支吾吾地一个都没答出来。题目其实很简单,但是如果你只是停留在算法层面,不借助百度,当场能流利地答出来,那也算不错了。
注:以下题目都是在纯c++语境下进行的,记得很模糊,不一定就是对的,我也是边摸边记的
1.怎么判断字符串是汉字还是英文?退而求其次,怎么判断字符串是不是数字?
2.bmp文件的头信息是什么样的?不用说全,说个大概就行(背景是面试的人说自己有图像处理的研究经历)
3.如何判断线程的同步状态?如何使不同线程同步执行?
4.一个线程如何获取另一个线程的数据?假设有一个监听数据的线程,我现在希望这个数据能显示在界面上,我该如何跨线程保证数据的显示安全呢?
5.了解过GDI吗?界面绘制这一块了解过吗?怎么通过GDI+在界面上画一条线?
6.有一个txt格式的文件,我该如何得知这个文件是什么编码格式?
7.知道什么是Unicode什么是UTF8什么是GBK格式吗?他们有什么区别?为什么要这么多编码格式,是为了解决什么问题有了解过吗?
8.Windows消息机制了解过吗?知道有哪些进程间通信的类型?
9.搭建过webrtc的项目吗?(背景是对方说自己有音视频处理的科研经历),跑得起来吗?音频数据有了解过结构吗?搭建过流媒体服务器吗?
10.nodejs怎么调试?比如写了一些脚本,用什么工具来调试nodejs?vscode了解过吗?
11.数据库了解过吗?怎么创建一个存储过程?
...
还有很多问题,这里就不一一写上了。总之我说这么多,是希望找工作的同学们知道一点:公司看重的是工程应用的能力,不是你做题的能力。
另外我要提一点,如果你是科班出身,就不要写计算机二级证书了,真的有点掉价。
二、桌面端开发具体是做什么?要学习什么?
其实桌面端开发,我个人觉得和前后端没什么区别,甚至和前端没什么区别,特别是在qt中,你甚至还可以用qml去实现界面。但是也有不同,就你在做桌面端开发的时候,更多的时候其实是像一个全栈:又要管前面又要管后面。虽然大部分时间后端的功能都是通过提供的第三方库实现,但是还是有很多功能和数据都是你自己内部去处理的。或者作为刚入门的开发者,你可以这么理解,Qt只是一个界面库,至于那么多乱七八糟的类库只是为了让你更好地连接你的c++后台和他的界面。
我们要学习什么:
1.界面:
首先我们开发一个桌面端程序,最重要的肯定是界面。界面上而言,最重要的肯定是用什么写。Qt其实提供了很多比起MFC那种把窗体当成一个个指针更好的方法(其实我没用过MFC...),比如QSS,QML,开发界面省事这两个肯定是要学的。
除此之外还有就是如何自己开发自定义组件,除了Qt自带的组件,怎么把一些组件拼在一起成为一个新的组件供你差遣?比如我一个列表
中间这个内容肯定是经常增减的,所以不可能每次都单独写,肯定是一个独立的控件,这样的自定义控件该如何开发?
2.进程间通信
作为一个新人,你开发的程序大概率是一个独立的进程,而且是一个大进程的一个小模块。那么Windows的几个基本的进程间通信的模型得搞搞清楚。比较常见的是Windows的消息机制,当然也可能有COM组件形式,DBUS模式,内存共享形式等等都有可能,这个不同项目组形式不同,但是一般情况下都是Windows消息机制用的最多,稍微要了解一下。
3.线程同步相关
当你稍微进阶了一点之后,可能就要开始调用第三方的exe或者dll,这个时候就会可能要调用dll提供的回调函数了,这个回调函数中传来的事件极大可能就是跨线程的。跨线程带来的问题有很多,Qt中跨线程控制ui是有可能导致崩溃的,要怎么处理这个跨线程的信号量。有时候可能你自己要把一些费时操作丢到别的线程,这些事情该怎么操作?这也是一个问题。
4.网络通信相关
你开发的软件产品面对的用户群体不同,可能就要接触不同的网络协议。如果你是局域网内通信(比如我),那一些本地常用的TCP,UDP通信至少要懂,还有一些不同应用场景的,比如可靠的广播协议UDT,Quic这类的协议,也要稍微了解一下。不一定要知道原理,知道怎么工程应用就行。
5.学会看官方文档。
Qt在国内的资料和讨论并不多(其实国外也不能算多...)但是比较好的一点是Qt的官方文档是写的比较简单好懂的,去翻一下就能知道这个类是怎么用的,有哪些方法、参数、依赖等等。最好看英文的,貌似有个Qt的中文文档,但是内容比较有限,而且很久没有人维护了。
6.学会用VS+Qt
VS,世界上最好的编译器,不接受反驳
7.有一个好的代码习惯
C++ 风格指南 - 内容目录 其实我觉得这个才应该放在第一个...但是作为学习阶段嘛,可以先把重要的工作任务摆在前面。
一个好的代码规范不仅可以让你的代码的可读性 提升好几个档次,还能让你能更好地写出流畅的代码。我觉得这篇文章真的每一个程序员都要看,特别是那种老的MFC c++命名规范,我真的看一眼我就要死了。
8.学会没事就按ctrl + s保存
这个血的教训,我反正没事就按一下,代码不像剪辑,保存一下不会卡的。
9.善用ctrl+c ctrl+f ctrl+v连招
很帅好吗!
浅谈入行Qt桌面端开发程序员-从毕业到上岗(1):当我们说到桌面端开发时,我们在谈论什么?的更多相关文章
- 浅谈Android移动开发程序员的职业发展之路
现在几乎每个it公司都在开发移动产品,我最早知道Android还是在09年成都某学院上大学的时候,从新闻上知道有这么一家公司,创始人安迪·鲁宾很有名,但安卓到底是做什么的,我并没有关注. 到2010年 ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(四)
本系列文章立志于从一个已经习得一门编程语言的基础之上,全面介绍Python的相关开发过程和相关经验总结.本篇文章主要是基于上一篇的程序员带你十天快速入门Python,玩转电脑软件开发(三)的基础之上, ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(三)
声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群5 ...
- 对ios、android开发程序员的14条忠告
————————本文摘自千锋教育(http://www.mobiletrain.org/)对ios\android开发程序员的14条忠告————————— 1.不要害怕在工作中学习. 只要有电脑,就可 ...
- PHP开发程序员的学习路线
PHP开发程序员的学习路线 兄弟连PHP培训,简单为大家梳理了每个阶段PHP程序员的技术要求,来帮助很多PHP程序做对照设定学习成长目标. 第一阶段:基础阶段(基础PHP程序员) 重点:把LNMP搞熟 ...
- Java技术开发程序员如果在2019年立足
2019年的互联网环境相对以往来说要更复杂一些,互联网领域也正在经历从消费互联网向产业互联网转型的阵痛期.其实不少公司从2018年开始已经在陆续进行结构化调整,这些调整中的重要内容就是岗位调整,而岗位 ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(二)
关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(一)
关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...
- Python逐块读取大文件行数的代码 - 为程序员服务
Python逐块读取大文件行数的代码 - 为程序员服务 python数文件行数最简单的方法是使用enumerate方法,但是如果文件很大的话,这个方法就有点慢了,我们可以逐块的读取文件的内容,然后按块 ...
- 最全的WEB前端开发程序员学习清单
史上最全的WEB前端开发程序员学习清单! 今天为什么要给大家分享这篇文章呢,我发现最近来学前端的特别多,群里面整天都有人问:前端好找工作吗?前端要怎么学啊?前端工资怎么样?前端XX,前端XXX,虽然我 ...
随机推荐
- Docker方式安装Jenkins并且插件更改国内源
参考网站:https://www.jenkins.io/zh/doc/book/installing/#在docker中下载并运行jenkins 建议使用的Docker映像是jenkinsci/blu ...
- [题解] Atcoder ARC 142 E Pairing Wizards 最小割
题目 建图很妙,不会. 考虑每一对要求合法的巫师(x,y),他们两个的\(a\)必须都大于\(min(b_x,b_y)\).所以在输入的时候,如果\(a_x\)或者\(a_y\)小于\(min(b_x ...
- 220726 T3 最优化问题 (树状数组)
题目描述 在同学们的努力下, 高匀感受到了 alb 的快乐. 高勺意犹未尽,找来了一个长度为 nn 的序列 a_1,a_2,-.,a_na1,a2,-.,an . 她想要删除这个序列中的 kk ...
- Oh My Life~
作者:HChan 链接:https://zhuanlan.zhihu.com/p/47084162 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. Part 1 那年 ...
- 规则引擎深度对比,LiteFlow vs Drools!
前言 Drools是一款老牌的java规则引擎框架,早在十几年前,我刚工作的时候,曾在一家第三方支付企业工作.在核心的支付路由层面我记得就是用Drools来做的. 难能可贵的是,Drools这个项目在 ...
- 我的Vue之旅 06 超详细、仿 itch.io 主页设计(Mobile)
第二期 · 使用 Vue 3.1 + TypeScript + Router + Tailwind.css 仿 itch.io 平台主页. 我的主题 HapiGames 是仿 itch.io 的 in ...
- 开源数字基础设施 项目 -- Speckle
[Speckle](https://speckle.systems/)是用于 3D 设计的任何东西的开源数字基础设施.处理软件孤岛.实时协作.数据管理.版本控制和自动化之间的互操作性.致力于构建一个开 ...
- 驱动开发:Win10内核枚举SSDT表基址
三年前面朝黄土背朝天的我,写了一篇如何在Windows 7系统下枚举内核SSDT表的文章<驱动开发:内核读取SSDT表基址>三年过去了我还是个单身狗,开个玩笑,微软的Windows 10系 ...
- 后端框架学习-----mybatis(使用mybatis框架遇到的问题)
1.配置文件没有注册(解决:在核心配置文件中注册mapper,注册有三种形式.资源路径用斜杆,包和类用点) <mappers> <!--每一个mapper.xml文件都需要在myba ...
- 齐博x1文本代码标签的使用
文本标签虽然简单,但是使用的地方确实非常多的. {qb:tag name="XXXX" type="text"}推荐新闻{/qb:tag} 类似这种使用的频率是 ...