谈谈我自己

大家好,我是轩先生,是一个刚入行的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. 【Linux】指令学习

    Linux学习记录 生命不息,写作不止 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 1.虚拟机网卡配置 服务器重启完成之后,我们可以通过linux的指令 ip addr ...

  2. .Net 7 C#11 原始字符串

    .Net7 的到来的同时,也带来了 C# 11,而令我最期待的就是 C# 11 的 原始字符串了,当我知道这个的时候,简直比过年还要开心. 非原始字符串 首先我们看看现在写字符串的方式 var str ...

  3. 【面试题】Vue2动态添加路由 router.addRoute()

    Vue2动态添加路由 点击打开视频讲解更加详细 场景: 一般结合VueX和localstorage一起使用 router.addRoutes vue-router4后 已废弃:使用 router.ad ...

  4. MES系统与ERP系统信息集成有哪些原则?

    首先,MES和ERP应该是两个独立的系统,简单的说,ERP与MES有点像公司总部与分厂的关系,ERP向MES发指令,MES向ERP做汇报,所以可以按照这个思维来考虑或类比来处理.从企业的管理来说,ER ...

  5. Docker安装MongoDB并使用Navicat连接

    MongoDB简介: MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案.是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库 ...

  6. Kubeadm部署高可用K8S集群

    一 基础环境 1.1 资源 节点名称 ip地址 VIP 192.168.12.150 master01 192.168.12.48 master02 192.168.12.242 master03 1 ...

  7. Windows10 + Eclipse C/C++开发环境配置极简教程

    下载安装Eclipse 访问下载Eclipse IDE for C/C++ Developers https://www.eclipse.org/downloads/packages/ 将下载下来的压 ...

  8. windows下 安装docker

    一.Docker 1.什么是docker 对比 特性 容器 虚拟机 启动 秒级 分钟级 磁盘使用 一般为MB 一般为GB 性能 接近原生 弱于 系统支持量 单机支持上千个容器 一般几十个 2. 使用d ...

  9. 华为开发者大会2022:HMS Core 3D建模服务再升级,万物皆可驱动

    11月4日,HDC2022华为开发者大会在东莞松山湖举办.在本次大会的HMS Core创新图形能力分论坛中,HMS Core重点介绍了其在3D技术领域的创新应用方向,其中3D建模服务展示了创新的自动骨 ...

  10. C# 获取打开的EXCEL中某列的行数

    背景 在通过C#操作EXCEL时 获取行数 int iRowCount = worksheet.get_Range("A65535", oMissing).get_End(MExc ...