淺談入行Qt桌面端開發程式設計師-從畢業到上崗(1):當我們說到桌面端開發時,我們在談論什麼?

軒先生。發表於2022-12-18

談談我自己

大家好,我是軒先生,是一個剛入行的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自帶的元件,怎麼把一些元件拼在一起成為一個新的元件供你差遣?比如我一個列表
image
中間這個內容肯定是經常增減的,所以不可能每次都單獨寫,肯定是一個獨立的控制元件,這樣的自定義控制元件該如何開發?

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連招
很帥好嗎!

相關文章