從週五黑客到發布:對創建和發布開源專案的思考
從週五補丁破解到發布:對創建和發布開源專案的思考
這是針對初學者和中級開發人員的系列的一部分,透過將他們的想法作為開源專案發布或引起興趣。
這些想法是有偏見的和個人的。計劃發布更多文章。透過分享一些想法,我希望能夠激勵您做自己的專案
- 反思(此)
- 作為 Java 開發人員學習 Go 語言 (TODO)
- 開源健康與社區文件 (TODO)
- 開源安全 (TODO)
需求
這一切都始於幾年前。我時不時地需要一些似乎總是涉及到由我或其他人重新創建相同的舊 Bash 腳本的東西。
整體要求很簡單,因為它們通常都很高。
我們開發人員主要做的事情實際上只是將資訊從 A 點轉移到 B 點,對嗎?
這裡的目標是在 CLI 應用程式中將一堆 Git 儲存庫鏡像到另一個 Git 提供者、磁碟、存檔格式。
我私下和工作都需要這個。我見過人們很掙扎,投入大量時間手動完成這些事情,這讓我很困擾。
然而,它似乎始終是一個簡單的 Bash 腳本。很快就完成了,但一旦需要添加任何額外的東西 - 特殊情況、錯誤處理、模組化、打包等 - Bash 腳本無法支援更大的工具,正如我們大多數人所同意的那樣。
所以我決定為其建立一個完整的 CLI 應用程式。
需要做出的預先決定
這樣的工具已經存在嗎?
首先要做的就是不要重新發明輪子。
有一些開源工具可以解決這個問題。至少有一個用 Go 寫的腳本,有些 Bash 腳本,如果算上 Gitea 中的導入函數的話。
我嘗試了它們,但找不到任何能完全按照我想要的方式工作的東西。由於我對這個專案有其他想法,所以我決定不深入研究
開始對現有專案套用補丁。
也存在一些商業工具,但我覺得這個小工具也應該以開源形式存在。
結論:這個 CLI 工具在這個世界上有一席之地。
在工作黑客日或私人空閒時間進行黑客攻擊?
我們在衝刺結束時和其他場合都有駭客時間。一種方法是在這些情況下隨著時間的推移對其進行破解,將其製作成有用的東西。
我很快就決定在私人業餘時間完全完成這件事,原因如下:
- 工作中的駭客機會應該用於短期的學習和創造力,而不是長期雕刻一個完整的專案。
- 該解決方案不適合核心組織的業務 - 如果是這樣,它總是很奇怪。
- 將它與工作聯繫起來會讓我感覺更多的工作 - 我這樣做是為了樂趣和學習 Go 等 - 這會給我帶來壓力。
- 在工作日做這件事會花費很長時間。幾個小時,持續數週。
結論:我應該在閒暇時為了好玩而做。
技術棧的選擇
這些年來我的大部分時間都花在了 Java/Kotlin 世界中,也參與了一些 JS/TS、Python/Ruby 項目,並且像每個高級開發人員一樣,有時也會涉足其他領域。
但很長一段時間以來,我一直想真正學習 Go 和/或 Rust。所以這將是一個獲得學習新語言動力的機會
我選擇 Go 的原因是開源 DevOps 世界中相當多的 CLI 應用程式都是用 Go 編寫的,而且我希望能夠不時向第三方專案提交修補程式。此外,用 Go 編寫意味著一個二進位檔案具有多個目標架構。
我可以用 Java 來完成此操作,例如使用 Pico CLI 和 GraalVM,自從之前的嘗試以來,我對它們印像很好,但我決定我真的想學習 Go。
結論:我應該用 Go 來做並從中學習。
其他學習目標
有了這個,我還想更深入地研究交付一個包裝精美的開源專案的主題,遵循大多數安全實踐 - 記分卡、SLSA、
並使用 GoRelease 等工具來創建各種類型的構建。
結論:抓住機會學習並深入研究您選擇的主題。
保持範圍
由於我計劃進行很多實驗,而且我對 Go 完全陌生,所以我知道我會做很多非結構化工作。
在這裡設定範圍很重要 - 什麼時候對於 alpha 版本來說足夠好?
我很早就決定了它應該具有什麼功能,儘管坐下來進一步完善和擴展它是很誘人的,但這很好。
我可以坐這個很久。
結論:當你同樣感到尷尬和自豪時,將項目發佈為 alpha。
估計——有多難?
學習新語言只是學習語言本身的一小部分,但更多的是學習其生態系統及其習語。
使用了哪些函式庫,如何使用它們,這樣做或那樣做的慣用方法是什麼?
在這個專案中我必須花費大量的時間來學習和研究,也許50%的時間我都會
我只用我熟悉的語言和生態系統來編碼。
結論:在學習新的核心堆疊並進行實驗時,將您的時間估計乘以三。語言語法將是小事。
創作過程
初始提交
基本實作在一天內完成 - 它沒有建置、錯誤處理、文件、邊緣情況、可維護性等。
這就是大多數週五黑客行為的結局,而且大多數都不會再進一步。
但正如所有高級開發人員所知,讓某些東西發揮作用距離發布產品還有很長的路要走。
很快就完成了,嗯?不是真的。
尋找時間
有時真的很難找到時間來完成這個項目,尤其是因為我在春天工作得筋疲力盡。
您不是每天晚上都想花 2 小時閱讀一本有關特定內容的書,或學習一項新技術。
或花時間編寫文檔。我有孩子和房子,我不能讓私人項目比其他愛好消耗更多的精力。
但總是要付出一些代價 - 我最終觀看的系列劇減少了,並且在此期間幾乎不存在任何遊戲。
話雖如此,雖然我希望我能在這個專案上花更多的時間,但它幾乎總是能激勵我——我有幾個晚上睡得很少,編碼或學習,
因為我很興奮能走得更遠。另外,當某件事有趣時,它就是有趣的,無論是舉重、寫書、開發等等。
我忘記的事
長期以來我已經習慣了團隊合作。對於一個單獨的項目,你必須管理更多的帽子,並且在每個部分都非常出色,但通常不是技術性的。
我花了很多時間來研究良好的 CLI 設計和慣用的選擇。另一個領域是發布過程和為不同平台建立二進位檔案。
遵循 SLSA 和其他開源標準也需要時間。我們想要良好的測試覆蓋率,對吧?
在團隊中工作,希望別人能做你想要的標誌,需要寫的文件。
獨自工作,只有你一個人,否則就不會發生。
編寫程式碼甚至還不到交付專案的 50%。剩下的就是了。
冒充者症候群來襲
冒名頂替症候群在我們以知識為基礎的開發者世界中很常見。每個人都有不同的技能,在任何特定的時間,總是會有人比你懂得更多。
在一個團隊中,你有人可以討論事情。
一個人,沒那麼多。
但是,這一切都在於接受人們有時會在程式碼中做一些愚蠢的事情。
而且,開源並不意味著完美。這是關於學習、解決和發布可能對其他人有用的東西。
磨礪
好吧,我能說什麼——該做的就做完了。
有幾個深夜的調試、重構,但也有無數心流和多巴胺的時刻。
對我來說,當我覺得專案中的整體架構不會發生根本性的變化時,發佈時間就到了——我已經確定了接口,並且覺得它是可擴展的。
程式碼庫沒問題。
大多數基本功能都已具備,雖然一切都有待改進,但它仍然是一個基礎。
後果和經驗教訓
儘早設定範圍:決定在哪裡停止。儘早設定專案結構、文件、版本、管道和社群指南。未來的你會感謝過去的你。
不要有壓力,享受學習過程:完成了就完成了。
堅持不懈:開源是一場馬拉松,而不是短跑。不要燒壞。這是一種嗜好,而不是你的生活。不過一定要堅持。每天做一件小事。
學習,學習,學習:將一切視為學習和改進的機會,而不是問題。
編碼是最簡單的部分:主要程式碼是花費你最少時間的部分;其他一切,例如文件、測驗等,都是花費時間的地方。
做額外的事情:它們和編碼一樣有趣。是的,即使是文件也可以節省您解釋和重新解釋的時間。如果讓你感到無聊,那就讓它變得有趣。文件即代碼、vim-pong 等
休息一下:倦怠是真實的。當你需要的時候退後一步。就像其他創意學習過程一樣,分批進行。
使用系統:儘早在實踐和現實世界中使用你自己的狗糧。更好的是,找到一個人/社區來提供回饋。
享受旅程:創作真是太棒了。
完成它:這個世界上有無數個半成品的專案。完成它。
使用人工智慧作為幫助:我透過委派一些額外的工作來節省時間,例如要求程式碼改進、程式碼審查、文件結構、總結等。但是,不要永遠盲目地相信它。回顧並批評答案。
好了,駭客快樂,現在去想想你下一步想要做什麼! !
連結
專案:Git Provider Sync
以上是從週五黑客到發布:對創建和發布開源專案的思考的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Go語言在構建高效且可擴展的系統中表現出色,其優勢包括:1.高性能:編譯成機器碼,運行速度快;2.並發編程:通過goroutines和channels簡化多任務處理;3.簡潔性:語法簡潔,降低學習和維護成本;4.跨平台:支持跨平台編譯,方便部署。

Golang在並發性上優於C ,而C 在原始速度上優於Golang。 1)Golang通過goroutine和channel實現高效並發,適合處理大量並發任務。 2)C 通過編譯器優化和標準庫,提供接近硬件的高性能,適合需要極致優化的應用。

Golang和Python各有优势:Golang适合高性能和并发编程,Python适用于数据科学和Web开发。Golang以其并发模型和高效性能著称,Python则以简洁语法和丰富库生态系统著称。

Golang在性能和可擴展性方面優於Python。 1)Golang的編譯型特性和高效並發模型使其在高並發場景下表現出色。 2)Python作為解釋型語言,執行速度較慢,但通過工具如Cython可優化性能。

Golang和C 在性能競賽中的表現各有優勢:1)Golang適合高並發和快速開發,2)C 提供更高性能和細粒度控制。選擇應基於項目需求和團隊技術棧。

goimpactsdevelopmentpositationality throughspeed,效率和模擬性。 1)速度:gocompilesquicklyandrunseff,IdealforlargeProjects.2)效率:效率:ITScomprehenSevestAndardArdardArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdArdEcceSteral Depentencies,增強的Depleflovelmentimency.3)簡單性。

C 更適合需要直接控制硬件資源和高性能優化的場景,而Golang更適合需要快速開發和高並發處理的場景。 1.C 的優勢在於其接近硬件的特性和高度的優化能力,適合遊戲開發等高性能需求。 2.Golang的優勢在於其簡潔的語法和天然的並發支持,適合高並發服務開發。

Golang和C 在性能上的差異主要體現在內存管理、編譯優化和運行時效率等方面。 1)Golang的垃圾回收機制方便但可能影響性能,2)C 的手動內存管理和編譯器優化在遞歸計算中表現更為高效。
