三一重工的網(wǎng)站是哪家做的全自動引流推廣軟件
在前段時間我們舉辦的“TDengine Open Day”第一季技術(shù)沙龍中,TDengine 應(yīng)用研發(fā)高級工程師譚雪峰進(jìn)行的“開源之路:程序員的成長與探索”主題分享獲得了眾多參會者的好評。譚雪峰從自身獨(dú)特的職業(yè)發(fā)展經(jīng)歷出發(fā),分享了自己在開源領(lǐng)域的種種收獲以及在進(jìn)行職業(yè)轉(zhuǎn)換過程中面臨的挑戰(zhàn)及應(yīng)對。本篇文章基于此次演講整理而成,給到有需要的開發(fā)者參考。
從土木工程到軟件開發(fā),開源是我的“老師”
我并不是科班出身,大學(xué)學(xué)的是土木工程專業(yè),最后轉(zhuǎn)來轉(zhuǎn)去,就成為了一名開發(fā)者,過程中所有的編程知識我都是自學(xué)的。從土木工程到軟件開發(fā),這一轉(zhuǎn)變幾句話可能就概括完了,但我在其中付出的精力和努力不是能簡單用文字概括的,現(xiàn)在想想,幸好堅(jiān)持了下來,最終也結(jié)出了一個不錯的成果。
最開始就是因?yàn)閷τ螒虻臒釔?#xff0c;引發(fā)了我對游戲逆向工程的興趣。我開始使用工具如金山游俠、Cheat Engine(CE)、OllyDbg(OD)、IDA 等,來探索游戲的內(nèi)部工作原理。這一過程讓我熟悉了匯編語言和偽 C 代碼,進(jìn)而激發(fā)了我對底層編程的興趣。通過參與 Capture The Flag(CTF)比賽,我進(jìn)一步鍛煉了我的技術(shù)能力,并在解決復(fù)雜問題中找到了樂趣。
之后,我從逆向工程轉(zhuǎn)向了更廣泛的編程領(lǐng)域,開始自學(xué) JavaScript、Python、PHP、Lua 和 Go 等語言。在剛開始工作時由于編程知識的基礎(chǔ)不足,工作上還是非常困難的,我就邊實(shí)踐邊學(xué)習(xí)。這一路上,我的知識幾乎都是通過網(wǎng)絡(luò)學(xué)習(xí)來的——通過百度和谷歌,我能夠搜索到幾乎任何我需要的學(xué)習(xí)資源;同時,技術(shù)社區(qū)如 CSDN 和 Stack Overflow 成為了我解決編程難題和學(xué)習(xí)新技能的寶貴平臺。這些資源對我?guī)椭薮?#xff0c;讓我能在編程的世界里越走越遠(yuǎn)。
還有一個很重要的學(xué)習(xí)途徑就是參與開源項(xiàng)目。剛開始我就是在 GitHub 上學(xué)習(xí)別人寫的開源代碼,等有了成長之后就不單是學(xué)習(xí)了,我自己也開始貢獻(xiàn)代碼,成為了一名 Contributor。我參與的第一個開源項(xiàng)目是關(guān)于尋路算法的優(yōu)化,在從 ActionScript 到 TypeScript 的轉(zhuǎn)換過程中,我發(fā)現(xiàn)了一些算法的 Bug,并開始嘗試修復(fù),最終成功修正了源算法的狄洛尼三角網(wǎng)生成錯誤以及包圍盒調(diào)用錯誤。這是我第一次向開源社區(qū)貢獻(xiàn)代碼,感覺自己真的是從使用工具到改進(jìn)工具的一個轉(zhuǎn)變。
之后我印象比較深刻的一個項(xiàng)目是關(guān)于 H265 視頻流。在某次工作中,我在一個項(xiàng)目中需要處理 H265 格式的視頻流,要優(yōu)化延遲時間。我花了一些時間進(jìn)行改進(jìn),后端取到 H265 裸流進(jìn)行處理之后用 Websocket 實(shí)時推送 Web 端,然后在 Web 端我將 ffmpeg 編譯成 webassembly,之后在瀏覽器里用 Worker 實(shí)現(xiàn)多線程軟解,最終通過 Canvas 進(jìn)行實(shí)時監(jiān)控,并成功實(shí)現(xiàn)了毫秒級延遲。這個項(xiàng)目讓我學(xué)到了很多關(guān)于視頻處理和瀏覽器性能優(yōu)化的知識。后來,我把這個前端解決方案開源了,希望能幫助到其他面臨相同挑戰(zhàn)的開發(fā)者。
最具戲劇化的一次開源經(jīng)歷就是參與 TDengine HiveMQ 挑戰(zhàn)賽,這次經(jīng)歷也讓我與 TDengine 真正連接在了一起。在這場比賽中,我最終以第一名的成績獲得了“優(yōu)勝獎”,結(jié)果還是很不錯的。這也是我第一次參與開源社區(qū)活動,感覺能展示自己還能回饋社區(qū),這正是我想做的事情。接著我就收到了濤思數(shù)據(jù)拋出的“橄欖枝”,最后很幸運(yùn)地成為其中一員,目前我主要負(fù)責(zé) TDengine 的應(yīng)用研發(fā)和一些周邊生態(tài)建設(shè)。
其實(shí)在這之前我就在研究 TDengine 了,我之前所在領(lǐng)域是工業(yè)物聯(lián)網(wǎng),對各種時序數(shù)據(jù)庫都需要了解一些,國產(chǎn)的時序數(shù)據(jù)庫數(shù)量比較少,其中開源的就更少了,在這些開源數(shù)據(jù)庫里面 TDengine 性能又是其中非常高的,當(dāng)時要將TDengine 引入到平臺里面,就認(rèn)識了濤思數(shù)據(jù)的人。后來因?yàn)橐恍╅_發(fā)任務(wù)我開始研究 TDengine 的源碼,為了能在 Windows 上應(yīng)用便用 GCC 編譯做了一些修改,這也是我首次參與大型開源項(xiàng)目。
通過這些經(jīng)歷,我從一個簡單使用工具的程序員,變成了能夠自己“造輪子”的開發(fā)者?,F(xiàn)在,我不僅能解決問題,還能創(chuàng)造工具幫助他人解決問題。這就是開源給我的最大禮物—成長和自由。
開源讓用戶、項(xiàng)目、開發(fā)者多方共贏
發(fā)展至今,開源社區(qū)已經(jīng)演變?yōu)橐粋€日益壯大的全球性多元化舞臺,開發(fā)者可以在社區(qū)中分享經(jīng)驗(yàn)、解決問題、合作開發(fā),共同推動項(xiàng)目的發(fā)展。越來越多的企業(yè)意識到開源的重要性,積極支持開源項(xiàng)目,并且在自己的產(chǎn)品和服務(wù)中采用開源技術(shù)。許多大型企業(yè)也積極參與到開源項(xiàng)目中,貢獻(xiàn)代碼、資源和經(jīng)驗(yàn),推動了開源社區(qū)的發(fā)展和創(chuàng)新。
上圖是 GitHub 2023 年年度報告,從其中我們可以看到,2023 全年一共有 4.2 億個項(xiàng)目、2.84 億個公共倉庫、6.5 萬個公開的生成式 AI 項(xiàng)目、總共做出了 45 億次貢獻(xiàn)??梢婇_源項(xiàng)目數(shù)量不斷增長,涵蓋了各個領(lǐng)域,包括操作系統(tǒng)、編程語言、框架、工具、應(yīng)用程序等。
開源產(chǎn)品無疑是當(dāng)今技術(shù)發(fā)展的一大趨勢。通過開源,產(chǎn)品可以吸收來自不同使用者的廣泛反饋,不合理之處可以通過提交問題(issue)來指出,而社區(qū)的開發(fā)者則能貢獻(xiàn)自己的代碼改進(jìn)。這種模式促使使用者、開發(fā)團(tuán)隊(duì)和社區(qū)三者之間形成協(xié)作,共同豐富和完善項(xiàng)目內(nèi)容,確保了項(xiàng)目的持續(xù)健康發(fā)展,而不是閉門造車式地過早終結(jié)。
以 TDengine 為例,不同于許多時序數(shù)據(jù)庫采用的是單機(jī)版免費(fèi)而集群版收費(fèi)的模式,TDengine 提供的集群版同樣是開源的。這不僅使得開發(fā)者能夠深入學(xué)習(xí)數(shù)據(jù)庫集群的解決方案,還為使用者提供了更優(yōu)質(zhì)的集群版時序數(shù)據(jù)庫選擇,實(shí)現(xiàn)了多方共贏的局面。
當(dāng)下的“開源盛景”無疑也為每個開發(fā)者提供了很大的機(jī)會。開源讓開發(fā)者展現(xiàn)自己的同時還能幫助到其他人,分享越多得到的就越多,你可能覺得自己掌握的知識很簡單,但也有很多人還不懂,他們得到了你的幫助也會誠心的去感謝你。以我自身參與開源的經(jīng)歷來說,我認(rèn)為通過開源項(xiàng)目主要能讓我們獲得以下四個維度的能力提升:
-
提升代碼質(zhì)量
我們可以選擇一些優(yōu)質(zhì)的開源項(xiàng)目,多看多學(xué)習(xí)這些開源代碼。但想要成長還需要多寫,不光要寫代碼還要把優(yōu)化的過程寫出來,最簡單的辦法就是寫完一段代碼之后半個月再去看,如果覺得當(dāng)時的寫的非常 low 那就說明有成長了。最好就是自己寫東西開源出來,幫助別人的同時與開源項(xiàng)目一起成長。
而且開源代碼還會促使開發(fā)者保持高標(biāo)準(zhǔn),因?yàn)橹雷约旱拇a將被公開展示,我們便會更加注重代碼的整潔和清晰。Linus's Law 曾說過一句經(jīng)典名言“Given enough eyeballs, all bugs are shallow”,這句話的意思是如果有足夠多的人檢查代碼,那么所有的 Bug 都將無處藏身。
-
獲得實(shí)戰(zhàn)項(xiàng)目經(jīng)驗(yàn)
參與開源項(xiàng)目為程序員提供了接觸和探索各種規(guī)模代碼庫的機(jī)會,這些代碼庫的規(guī)模從幾十行的小型腳本到多達(dá)數(shù)百萬行的復(fù)雜系統(tǒng)不等。通過研究和實(shí)踐這些現(xiàn)有的代碼,程序員不僅可以學(xué)習(xí)到如何構(gòu)建簡潔、高效且易于維護(hù)的代碼結(jié)構(gòu),還能深入理解多種設(shè)計(jì)模式和算法的實(shí)際應(yīng)用。此外,參與這些項(xiàng)目還可以幫助他們在實(shí)際開發(fā)中更好地理解代碼的性能優(yōu)化、錯誤處理和用戶體驗(yàn)改進(jìn)等關(guān)鍵方面。
-
技術(shù)視野拓展
當(dāng)一項(xiàng)新技術(shù)開始引起關(guān)注時,開源項(xiàng)目往往是最早采用和實(shí)驗(yàn)這些技術(shù)的平臺之一。參與這些項(xiàng)目不僅可以使程序員在早期階段就接觸并掌握這些前沿技術(shù),還能深入了解其背后的原理和實(shí)際應(yīng)用場景。這種直接的實(shí)踐經(jīng)驗(yàn)不僅能夠提升個人的技術(shù)能力,還有助于幫助我們形成對未來技術(shù)趨勢的敏銳洞察,在不斷變化的職業(yè)市場中保持競爭優(yōu)勢。
-
建立個人品牌
隨著開源技術(shù)的深入和廣泛應(yīng)用,開源社區(qū)的影響力日益增強(qiáng),越來越多的企業(yè)開始認(rèn)識到開源項(xiàng)目中隱藏的人才價值。企業(yè)不僅在技術(shù)創(chuàng)新上依賴這些開源解決方案,同時也傾向于招募那些在開源社區(qū)中積極貢獻(xiàn)的程序員。那些在開源社區(qū)中有所貢獻(xiàn)的程序員,往往更容易獲得企業(yè)的青睞,從而獲得更好的職業(yè)發(fā)展機(jī)會。
但相應(yīng)的,擁有“Contributor”的頭銜不僅是一種榮譽(yù),更是一種責(zé)任。作為開源社區(qū)的一員,我們需要從內(nèi)心深處發(fā)揮回饋社區(qū)的責(zé)任感。開源項(xiàng)目的成功不僅僅依賴于代碼的質(zhì)量,更重要的是依賴于社區(qū)成員的積極參與和持續(xù)貢獻(xiàn)。這包括對項(xiàng)目的負(fù)責(zé),關(guān)注并推動項(xiàng)目的長期發(fā)展,維護(hù)社區(qū)的健康生態(tài),以及確保軟件的高質(zhì)量和穩(wěn)定性,為用戶提供卓越的使用體驗(yàn)。通過這種全面的投入,我們不僅提升個人技術(shù)水平,還為整個開源生態(tài)系統(tǒng)的繁榮做出貢獻(xiàn)。
程序員與工程師
在軟件開發(fā)中,程序員和工程師雖共同致力于軟件的創(chuàng)建與完善,但他們的角色和職責(zé)各有側(cè)重。程序員主要專注于編寫、測試和維護(hù)代碼,解決特定的技術(shù)問題。他們是代碼實(shí)現(xiàn)和邏輯的專家,通過精確的編程確保軟件功能的實(shí)現(xiàn)。
而軟件工程師的職責(zé)更為廣泛,不僅包括編程,還涵蓋項(xiàng)目的整體規(guī)劃、設(shè)計(jì)、測試、部署與維護(hù)。工程師需要在整個軟件開發(fā)周期中進(jìn)行綜合考慮和資源協(xié)調(diào),以確保項(xiàng)目的順利執(zhí)行和質(zhì)量標(biāo)準(zhǔn)的達(dá)成。因此,每位工程師都應(yīng)具備扎實(shí)的編程能力,而成為一名合格的程序員僅是邁向全面軟件工程師之路的起點(diǎn)。通過積極參與開源,程序員可以逐步擴(kuò)展自身的技術(shù)和管理視野,最終成長為能夠在更廣泛領(lǐng)域內(nèi)作出影響的軟件工程師。
?