谈谈我自己

大家好,我是轩先生,是一个刚入行的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):当我们说到桌面端开发时,我们在谈论什么?的更多相关文章

  1. 浅谈Android移动开发程序员的职业发展之路

    现在几乎每个it公司都在开发移动产品,我最早知道Android还是在09年成都某学院上大学的时候,从新闻上知道有这么一家公司,创始人安迪·鲁宾很有名,但安卓到底是做什么的,我并没有关注. 到2010年 ...

  2. 程序员带你十天快速入门Python,玩转电脑软件开发(四)

    本系列文章立志于从一个已经习得一门编程语言的基础之上,全面介绍Python的相关开发过程和相关经验总结.本篇文章主要是基于上一篇的程序员带你十天快速入门Python,玩转电脑软件开发(三)的基础之上, ...

  3. 程序员带你十天快速入门Python,玩转电脑软件开发(三)

    声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群5 ...

  4. 对ios、android开发程序员的14条忠告

    ————————本文摘自千锋教育(http://www.mobiletrain.org/)对ios\android开发程序员的14条忠告————————— 1.不要害怕在工作中学习. 只要有电脑,就可 ...

  5. PHP开发程序员的学习路线

    PHP开发程序员的学习路线 兄弟连PHP培训,简单为大家梳理了每个阶段PHP程序员的技术要求,来帮助很多PHP程序做对照设定学习成长目标. 第一阶段:基础阶段(基础PHP程序员) 重点:把LNMP搞熟 ...

  6. Java技术开发程序员如果在2019年立足

    2019年的互联网环境相对以往来说要更复杂一些,互联网领域也正在经历从消费互联网向产业互联网转型的阵痛期.其实不少公司从2018年开始已经在陆续进行结构化调整,这些调整中的重要内容就是岗位调整,而岗位 ...

  7. 程序员带你十天快速入门Python,玩转电脑软件开发(二)

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

  8. 程序员带你十天快速入门Python,玩转电脑软件开发(一)

    关注今日头条-做全栈攻城狮,学代码也要读书,爱全栈,更爱生活.提供程序员技术及生活指导干货. 如果你真想学习,请评论学过的每篇文章,记录学习的痕迹. 请把所有教程文章中所提及的代码,最少敲写三遍,达到 ...

  9. Python逐块读取大文件行数的代码 - 为程序员服务

    Python逐块读取大文件行数的代码 - 为程序员服务 python数文件行数最简单的方法是使用enumerate方法,但是如果文件很大的话,这个方法就有点慢了,我们可以逐块的读取文件的内容,然后按块 ...

  10. 最全的WEB前端开发程序员学习清单

    史上最全的WEB前端开发程序员学习清单! 今天为什么要给大家分享这篇文章呢,我发现最近来学前端的特别多,群里面整天都有人问:前端好找工作吗?前端要怎么学啊?前端工资怎么样?前端XX,前端XXX,虽然我 ...

随机推荐

  1. ATT&CK系列一 知识点总结

    一.环境搭建1.环境搭建测试2.信息收集二.漏洞利用3.漏洞搜索与利用4.后台Getshell上传技巧5.系统信息收集6.主机密码收集三.内网搜集7.内网--继续信息收集8.内网攻击姿势--信息泄露9 ...

  2. 如何使用netlify部署vue应用程序

    什么是Netlify? Netlify是一个现代网站自动化系统,其JAM架构代表了现代网站的发展趋势.所谓JAM,就是指基于客户端JavaScript.可重用API和预构建Markup标记语言的三者结 ...

  3. python-数据描述与分析(1)

    数据描述与分析 在进行数据分析之前,我们需要做的事情是对数据有初步的了解,这个了解就涉及对行业的了解和对数据本身的敏感程度,通俗来说就是对数据的分布有大概的理解,此时我们需要工具进行数据的描述,观测数 ...

  4. 齐博x1小程序集群必须带上固定的标志

    小程序集群的也类似登录接口一样,需要带上特殊的标志.建议是在所有请求的头部header 加上 wxappid 如下图所示,跟登录标志 token 并列在一起. 如果不方便修改头部header 请求的时 ...

  5. 学习Java AES加解密字符串和文件方法,然后写个简单工具类

    Reference Core Java Volume Ⅱ 10th Edition 1 对称加密 "Java密码扩展"包含了一个Cipher,它是所有密码算法的超类.通过getIn ...

  6. fastjson反序列化漏洞历史CVE学习整理

    fastjson 1.2.24反序列化漏洞复现 先写一个正常的使用 fastjson的web服务 我们使用 springboot创建 主要是pom.xml 里面要添加fastjson fastjson ...

  7. 一键部署haproxy脚本

    HAPROXY_VERSION=2.6.6 HAPROXY_FILE=haproxy-${HAPROXY_VERSION}.tar.gz #HAPROXY_FILE=haproxy-2.2.12.ta ...

  8. 使用kubeadm方式搭建K8S集群

    使用kubeadm方式搭建K8S集群 kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具. 这个工具能通过两条指令完成一个kubernetes集群的部署: # 创建一个 Ma ...

  9. maple软件安装教程

    Maple2022适用于Win7/10/11(64位)系统,亲测可用! Maple2022 WIN10 64位安装步骤:1.先使用"百度网盘"下载MPE22_CN_x64安装包到电 ...

  10. .NET 7 的 AOT 到底能不能扛反编译?

    一:背景 1.讲故事 在B站,公众号上发了一篇 AOT 的文章后,没想到反响还是挺大的,都称赞这个东西能抗反编译,可以让破解难度极大提高,可能有很多朋友对逆向不了解,以为用 ILSpy,Reflect ...