LeetCode 與 SWE 工作的問題

這是一篇關於軟體工程面試和 LeetCode 的怒罵。 🗯️ 序言 2024 年,全球數十萬人都在努力學習 LeetCode,目標是在高薪的吸引下打入科技產業。 🤔 What does LeetCode actually bring? LeetCode 提供的好處不外乎這些: 演算法 練習與 資料結構 知識 在壓力下編碼(為什麼呢? 我們現在是在戰區嗎?) 通過編碼面試 然而,完成 LeetCode 並不能證明您是一位優秀的軟體工程師。 它只顯示您可以編寫基本演算法和解決程式設計難題。 它並不能測試基本技能,例如協作、溝通、文件、設計模式、系統架構、低階程式設計或核心電腦科學知識。 如果LeetCode只測試這些基本技能,那麼雇主要聘請的是什麼?入門級的程式設計師? 這就像雇用一名醫生,但只測試他們的基本化學知識 - 而這些知識在現實世界的情況下很少會用到。 ⁉️ 真正的問題是什麼? LeetCode練習與學習無關。您不會獲得對電腦科學或系統設計的深入瞭解;相反地,您只會學習如何通過編碼面試。 如果問題還不太明顯,我們可以從另一個角度來看:這就像在學校裡,學習並不是重點,通過考試並取得好成績才是重點。 這種心態也許可以解釋,為什麼有些人儘管被標籤為「受過教育」,但行為或想法仍然不佳。 現在,我們在科技面試中也在做同樣的事情。 LeetCode 不是軟體工程。 😕 💡 有哪些更好的解決方案? 有許多更有成效的事情可以做。 貢獻 Nix/NixOS、改善 Emacs 的生態系統、強化 Java 套件管理、研究 C 與 CMake 工作流程、改善 Godot Assets 商店,或是練習撰寫解析器與語言伺服器。 有這麼多東西仍未完善,但人們卻在 LeetCode 上浪費時間。 😢 研究其他人的程式碼、與他們交談、學習他們如何解決現實世界中的程式設計問題,才是更好的方法。 這個產業之所以受苦,就是因為我們採取了懶惰的方式,只使用軟體來篩選候選人,而不評估真正的人才。 😞 😤 我並不孤單 只要在 Google 上快速搜尋,就會發現無數的怒罵:...

September 7, 2024 · 1 分鐘 · 86 字 · Jen-Chieh Shen

在第一份工作中成為 10x 的工程師

前幾天在 LinkedIn 看到一則標題聳動的貼文 “我想我遇到了 10x 工程師”; 不過貼文內容卻讓我覺得匪夷所思. 貼文內容是這樣的, 一位工程師 (他的同事) 能夠在短時間內解決很多深度的 bug, 讓他覺得非常驚艷! 🤔 真的是這樣嗎? 這讓我想到我曾經被當作 10x 工程師的經驗過往經驗, 這事情發生在我的第一份工作上! 🗯️ 前言 這份工作是在 imi technology (應該已經倒閉) 擔任 Unity 軟體工程師. 主要工作為開發棋牌遊戲 (就是博弈). 當初選擇這間公司單純是因為離家很近, 薪水可以接受, 也就沒有想太多了. 有些人可能會對博弈的工作感到反感或有興趣. 但這次的主題跟這個產業沒有掛鉤, 只單純講軟體業的一些親身經歷. 🤔 ✏️ 概況 這個團隊總共為 8 人團隊, 有 5 名超過 10 年經驗的資深工程師, 1 名初級, 剩下 2 名入門級. 我們的分工為下: 3 名資深 + 1 名初級使用 Java 開發服務端 1 名資深使用 Phaser 開發 Web 遊戲客戶端 1 名資深 + 1 名入門級 (我) 開發 Unity 遊戲客戶端 1 名入門級學習 (不太知道他是做什麼的) 如上所示, 我負責的和另一名資深的工程師共同開發 Unity 遊戲客戶端....

September 6, 2024 · 1 分鐘 · 139 字 · Jen-Chieh Shen

Elisp 語言服務器

代碼庫連結: https://github.com/jcs090218/ellsp 我最近為 Emacs Lisp 創建了一個語言伺服器。這很有趣,因為人們認為 Emacs Lisp 的語言伺服器不會提供任何價值。這個說法是正確的,我也是如此。Emacs Lisp 僅在 Emacs 編輯器內使用,Emacs 本身是一個 Emacs Lisp 解釋器。因此,Emacs Lisp 的語言伺服器很難為 Emacs 用戶帶來任何好處。 但想像一下您可以在 Emacs 之外編寫 elisp(Emacs Lisp 的縮寫)。聽起來很有趣,對吧? 🤔 🔰 重頭開始建立 好吧,我並不是完全從頭開始。我確實使用了一些庫來幫助我更快地設定東西。以下是重要的一點: lsp-mode elsa - 我用過他們的一些程式碼 我從頭開始的是 stdio 解決方案。令人難以置信的是,stdio 在 Emacs 的 batch 模式中是如此簡單。 💫 問題 1: read-from-minibuffer 和 \r/\n read-from-minibuffer 函數是在 Emacs batch 模式下接收標準輸入的一種方法。 這種方法有一個問題。它不會接收輸入,直到末尾有 \r 或 \n 字元。 這很煩人,因為語言伺服器永遠不會收到完整的資料包。這是我從語言客戶端收到的內容: Content-Length: 8203\r\n \r\n {json} 而,這是我希望看到的: Content-Length: 8203\r\n \r\n {json}\r\n 我花了幾個小時尋找解決方案。不幸的是,我找不到一個。然後,我決定使用 node....

November 19, 2023 · 1 分鐘 · 127 字 · Jen-Chieh Shen

如何使用 Eask 構建自己的 ELPA?

ELPA 是 Emacs Lisp Package Archive 的縮寫。它供 Emacs 用戶下載軟件包, 也是 Emacs Lisp 開發人員託管軟件包的地方。以下是著名 ELPA 的列表,請訪問他們的網站了解更多信息! GNU Elpa (official) NonGNU Elpa (official) MELPA ❓ 為什麼? 那麼我們為什麼要舉辦自己的 ELPA?這些 ELPA 還不夠嗎? 是的,一般來說,您不需要自己託管 ELPA,因為您需要的大多數軟件包都可以在這些 ELPA 之一中獲得(軟件包可以在 ELPA 之間共存)。 以下是您可能想要構建自己的 ELPA 的幾個原因: 您喜歡的包(尚未)出現在任何 ELPA 上 ELPA 的包裹審核需要幾天或幾個月的時間來審核(MELPA 可能是最快的) 不再維護的軟件包,您可以鏈接到新維護的分支 類似於第 3 點、你喜歡的包有bug,你可以創建一個新的fork來替換它! 用於 elisp 包開發目的。有時構建工具就是不夠用。 📝 事前準備 關於 Emacs Lisp 的一些知識 安裝 Eask CLI 🔍 步驟1.創建 ELPA 項目 使用 Eask 輕鬆構建您自己的 ELPA。您只需要幾個命令,它就會運行。 首先,我們需要創建 ELPA 項目:...

September 15, 2023 · 2 分鐘 · 354 字 · Jen-Chieh Shen

我的第一個 VSCode 插件

代碼庫連結: https://github.com/shader-ls/vscode-shader 2023 年 8 月 23 日。我創建了我的第一個 VSCode 插件 – vscode-shader。 我的意圖很簡單:在 VSCode 中為我幾個月前創建的 shader-language-server 創建一個語言服務器客戶端。🤔 🔰 簡單且良好的用戶體驗 首先,開發一個 VSCode 插件非常簡單。特別是為 VSCode 開發語言服務器的客戶端。 他們的網站上有許多示例和良好的文檔,使開發人員非常容易。我使用 uniteai 和 grammarly-language-server 作為參考。 📦 發布到 VSCode Marketplace 發佈到 VSCode 可能是最具挑戰性的步驟,因為您需要導航到 Azure DevOps, 這似乎與 VSCode Marketplace 完全無關! 🤔 然後獲取 Personal Access Token, 以便將您的包發佈到市場。它仍然很簡單,但在 Azure DevOps 部分卻相當令人困惑。 然後你只需要 npm install -g @vscode/vsce、vsce package 和 vsce publish。 發佈時,系統會要求您輸入 PAT! 您可以訪問 VSCode 的 Publishing Extensions 網站了解更多信息! 🎖️ 成就 創建了語言服務器的客戶端, vscode-shader。 我的第一個發布的 VSCode 插件包,請參閱 https://marketplace....

August 24, 2023 · 1 分鐘 · 76 字 · Jen-Chieh Shen

Shader 语言服务器

代碼庫連結: https://github.com/shader-ls/shader-language-server 2023 年 4 月 30 日。我創建了我的第一個語言服務器,它對某人確實有用。 我不久前嘗試過一個語言服務器,但它只是一個示例服務器,所以它不是很有用, 而且僅用於教育目的。 我選擇編寫的目標語言是 ShaderLab 語言。 ShaderLab 用於 Unity 引擎, 因此您可以編寫自定義著色器來風格化您的遊戲。與常規編程語言不同,ShaderLab 分析起來要簡單得多,因此語言服務器可以響應客戶端。 ❓ 為什麼選擇C#作為實現語言? 由於 Unity Engine 最受歡迎的腳本語言是 C#,因此我認為選擇 C# 是最佳選擇。 💀 C# Language Server Protocal 地獄 在開始用 C# 編寫語言服務器之前,我就已經有一種不好的預感,因為我對作者 Omnisharp 的插件一直沒有好印象。我在 VSCode Marketplace 上嘗試過他們的官方 C# 插件,但說實話, 我不會說我喜歡它。以下是一些原因: 很慢 不斷的突破性變化。下次更新就沒啥作用了! 維護者不是很活躍(但社區很友好) 儘管如此,我還是堅持嘗試一下 csharp-language-server-protocol,因為沒有其他合理的選擇。 經過幾天的挖掘,我面臨以下問題: 官方存儲庫中的示例要么損壞,要么不完整(有點無用) 過時或缺乏文檔 他們並不真正關心其他編輯。 (許多編輯器兼容問題和 PR 尚未解決) 幸運的是,我找到了 @gulbanana 創建的 thousand 語言服務器和 @tgjones 創建的 HlslTools。因此,我能夠通過看到他們的實現來完成這個項目! 😅😇 *附註: 我花了很長時間才弄清楚事情!!!*💀 ⚙️ 插入 ShaderlabVS 另一個挑戰是語言服務器的引擎。什麼解析文本文檔並向客戶提供合理的響應?然後我找到了一個已 經為我做到這一點的項目—— ShaderlabVS。這是一個理想的解決方案,因為也是用 C# 實現的。 感謝作者 @wudixiaop 這個令人驚嘆的項目! ❤️...

August 23, 2023 · 1 分鐘 · 133 字 · Jen-Chieh Shen

Emacs 的漫長旅程

⚠️這篇文章的目的是提醒自己為什麼 Emacs 不再值得我花時間了。 我從 2015 年開始使用 Emacs。我已經開發了 150 多個 elisp 包,並維護了 200 多個包(包括我的包)。 留在 Emacs 社區是一段漫長的旅程,我認為放慢自己的腳步,退一步思考這些年來我所取得的成就對我來說是有好處的。 💫 我是如何進入 Emacs 的? 很多人問我這個問題,所以我決定在這裡回答一下。 我第一次看到 Emacs 是在 2015 年,當時看到的是 Casey Muratori 的 Handmade Hero 系列。 他在 Emacs 中編碼的速度讓我震驚。他如何跳到其他窗口並且永遠不離開鍵盤對我來說都是新的。 但現在看他的配置,其實並不是那麼好。他不使用任何第三方軟件包,因此他在自己的配置文件(~/.emacs 文件) 中定義了所有內容。如果不使用那些第三方軟件包,配置仍然可以很好,但它只會限制你並重新製作可能其他人已經為你完成的輪子。 除此之外,Casey 仍然是我一生所認識的頂級程序員。 ❤️ 💫 我在 Emacs 上投入了多少時間? 就像我上面提到的,相信我。我投入了大量時間來完成我為 Emacs 社區所做的事情。如果你搜索我所有的包裹, 我在 MELPA 擁有最多的包裹。這次我已經證明了我有多喜歡 Emacs,但也證明了我對 Emacs 有多麼失望。 😥 💫 為什麼 Emacs 不再值得我花時間了? 首先,Emacs的開發沒有任何問題。他們在保持 Emacs 的活力方面做得非常出色,我喜歡他們的心態和大部分技術決策。 對我來說,問題在於 Elisp 開發生態系統(而不是 Emacs 社區本身;考慮 Elisp 開發生態系統是 Emacs 社區的子集)。 我很欣賞那些願意為 Emacs 做出貢獻的人,但我討厭他們不考慮他們的軟件包的跨平台功能。是的,我是 Windows 用戶;實際上, 我使用所有最常用的系統(Linux、macOS 和 Windows)。我討厭當我嘗試一個軟件包時,它只適用於特定係統(不包括僅 依賴於某些系統的軟件包),但它應該適用於所有系統。我感到可怕和沮喪,因為大多數 Elisp 開發人員不關心或不夠關心少數用戶 (Windows 用戶)。甚至一些著名的軟件包在 Windows 上也不能很好地工作,magit 很慢,straight....

July 8, 2023 · 1 分鐘 · 145 字 · Jen-Chieh Shen

Emacs Eask 101 - 建構工具

我開發了 50 多個 Emacs 插件, 並且維護了將近 100 多個. 對初學者來說, 開發 Emacs 插件是一件不容易的事情, 特別是對那些想把自己的插件發行到其他的 ELPA 的人來說更不容易. 哪些 ELPA? (GNU Elpa, NonGNU Elpa, MELPA, 等等.) 這是為什麼我使用 Eask 來幫助我完成這些插件的開發和維護的工作. 所以我將 在這則文章教大家如何使用這個工具來幫助你完成插件的開發! 🗨️ 善用 --help 現今的 Eask 已經有超過 50 種以上的指令集 (包含隱藏的). 這個工具已經是個有 點複雜, 所以當你遇到問題的時候請善用 --help 這個旗幟. $ eask --help 📦 建構插件 我們這裡直接切入正題, 我會默認你已經會初始化 Eask 專案, 並且只想知道如何 有效的使用這工具! 為了方便展示, 我直接使用了自己現存已開發完成的專案 [openal.el][openal]. # Clone 專案 $ git clone https://github.com/emacs-openai/openai.git # 進入到專案裡面 cd sideline # (非必要) 印出專案結構 tree /f 我們的專案結構是長這樣的:...

April 10, 2023 · 2 分鐘 · 292 字 · Jen-Chieh Shen

最快的 ELPA

所以什麼是最快的 ELPA? 讓我們來定義一下! ELPA 最能跑? 不對, 這一點都不合邏 輯. ELPA 最快服務你? 或許, 但我不知道! 在這裡我們定義"最快的 ELPA"為建構插件的速度. 也就是多久以後我們的插件會 被更新在服務器上. 就算更新了我們的插件, 也不用等上一段時間. 你可能會想說 “怎麼可能?” 還有 “怎麼做到的?”, 讓我一一解釋! 一般的 ELPA, 像是 MELPA, 他們會從 recipes 資料夾裡取得需要建構的插件目標. 這裡的時間為 O(n), 越多插件則會花越多時間. 通常簡單的解決方法就是直接提升 硬體硬件, 來促使減少建構時間. 這裡 JCS-ELPA 使用了不同的策略. 這個 ELPA 使用了一個插件 github-elpa 來使其建構我們的插件然後上傳到 GitHub Pages. 所以到底為什麼會是最快? 主要有兩個因素: 微軟擁有 GitHub. 技術上來說, 我們的 ELPA 是直接跑在微軟的服務器上 我們使用 GitHub Actions 建構插件, 定且使用了多個 jobs (如果你不熟悉 GHA, 就想說有很多台電腦在幫你做事即可) JCS-ELPA 使用這技術來達成很多 worker 幫你同時建構插件. 公式如下: 新的建構總時長 = 原本建構總時長 / 工作者 如果工作者為 1, 建構時長則保持不變 (建構時長沒有任何改善)....

April 10, 2023 · 1 分鐘 · 156 字 · Jen-Chieh Shen

💔 偏袒與被谝坦

這是一篇又來記錄我生活上問到難題的文章. 不想接收負能量請離開! 事件 前幾天我跟我姊發生了一些爭執, 姊弟吵架很正常, 但這次吵得很兇, 我們彼此都哭了. 此事情 將以我的個人為出發點去敘述始末! 衝突的開端 那天2023, 美國舊金山時間1月10號晚上, 我們剛抵達舊金山, 抵達當地的飯店後, 一起出去買晚餐, 這之前 我不知道發生什麼事情, 我姊佳欣貌似與我媽相處的並不愉快, 並抱有不滿. 屆時, 我並不知道發生什麼事. 只知道到了外帶去(我們去買晚餐), 姐姐佳欣不願意幫忙拿自己的晚餐餐盒 (共三人份). 當下我很不滿, 我和我媽的手已經沒有手付帳, 她沒有選擇幫忙. 回到飯店後, 我撈刀並出言說她是"CryBaby". 沒過一會兒, 她暴怒吼叫並出手攻擊推擠我. 我當下反應不及, 差點把他的晚餐打翻 (對, 我拿他的晚餐). 她吼道: 我脖子痛,部能夠體諒我嗎? 不要以為你是躁鬱症, 大家都要忍讓你 這飯店是我訂的, 你不要住! 滾出去! 諸如此類的發言. 當下我是驚訝的, 我沒想到一句"CryBaby"會到她如此憤怒. 我認為"自己的便當自己拿, 不是寶寶是什麼?" 感受 理性陳述事實後, 我想感性表達我的感覺, 當下我也很生氣, 我也試圖攻擊她. 但當然沒有成功, 因為她還躲在 她媽媽的保護傘下. 反倒是我被我媽抓傷, 腳也受了傷. 明明我是被攻擊者,卻被我媽說"因為我是男生"這種 性別歧視的話給制止! 我是生氣的, 我是男生難道被女生打就不還手嗎? 男生都該死嗎? 我很生氣, 當下我直接打我自己兩巴掌 (很響亮的那種) 並吼道 “那我去死好了?” 蹦痛哭覺得受委屈, 出發點為: 希望姊姊佳欣能幫忙拿晚餐 覺得自己是她弟弟, 時常拿自己憂鬱為理由, 卻不管有躁鬱症的弟弟?...

January 13, 2023 · 2 分鐘 · 278 字 · Jen-Chieh Shen