Re: [討論] 寫程式的追求?
※ 引述《del680202 (HANA)》之銘言:
: ※ 引述《neo5277 (I am an agent of chaos)》之銘言:
: : 純粹對工作上來說
: : 好抽換,好接手(易閱讀),好維護(包含升級,測試
: 好接手,易閱讀…
: 我想到一個故事
看到你的故事,讓我想起好多當年犯過的錯誤
: 幾年前有個同事,號稱國中時期就開始接案寫代碼
: clean code,DDD滾瓜爛熟,對coding極度潔癖
: 印象比較深的是入職時說了句:我看到不規範的代碼會非常生氣
我年輕的時候也這樣,但做久了慢慢可以理解凡事都是 trade-off
寫得很漂亮,卻沒商業價值的 code,根本沒人在用,
對比寫得很亂,卻實際有大量使用者的 code,很難說哪個是比較好的。
剛進業界第一份工作,很認真的幫每個 function 寫滿註解跟 API doc,
努力遵循各種 best practice,幾個月後專案取消了,這 code 從來沒上 production
對比那些可怕的 legacy code,每天都好好的運行著賺錢的服務。
後來開始懂得要考量 business 的需求,有時候犧牲一點品質,搶占先機是必要之惡
: 上工第一案子,設計一個工具網站,拆了七個GitHub repo
這我當年剛學 git/github 也做過,把個巨大專案拆了十幾個 repo,
原先要解決的問題是,希望每個元件可以降低耦合,容易獨立使用,分開 deploy。
隨著時間,逐漸發現各個元件需要共用的東西越來越多,互相 dependency 逐漸變多
這時候各個元件之間需要正確的版本,才能互相搭配,管理起來卻成了噩夢
有些直接 include 就能用的東西,拆在兩個 repo 掛 submodule 變得很難維護
build rules / makefile 也因此複雜了起來,最後有點後悔一開始把他們拆開。
體驗過就能理解為何很多大公司最後走向 monorepo 架構,全公司專案都在一個 repo
其中一個經典案例就是 google,幾乎全公司所有 code 在一個巨無霸 repo 內。
不同程式互相引用,就少有版本管理問題,開發的複雜度降低很多。
: Micro services, grpc當年流行的工具全套了一輪
: 說是將低耦合,高內聚做到極致
剛進業界的時候,我也是剛學了 microservice,很開心地把手上系統全拆了
拆分得很乾淨,每個服務都可以分開擴展,一開始還覺得這是 best practice
後來學到血淚教訓。因為業務的改變,需求大幅度改變了。原先的拆分並不合適
反而讓開發、測試、跟部署變得複雜,印證了 "monolith first" 的建議!
在早期需求還不明朗的時候,全部塞在一起,其實不是壞事,延遲到真正出現擴展需求
再來拆分,會比過早拆分要好。這跟不要 premature optimization 感覺很像。
就跟一開始學 OOP 都狂寫 interface,後來才發現根本沒有其他 implementation
白白多了一堆無謂的繼承,最後又發現需要不同的行為,於是換了 interface
本來定義的抽象化不但沒用到,還因為要保持相容,造成日後擴充的阻礙。
後來就學到 "concrete first",不要起手式就急著開 abstract interface,
可以延後到真的有需要再來做,有時候反而會更合適。
做久了慢慢對這些東西有不同的感受,best practice 通常要放在特定情境下才是 best如果很清楚自己做了什麼 trade-off,違反它們不見得是錯誤的。
: 其中一個repo 甚至只放了一個utils
: 後來來了另一個人接手
: 改個功能要先看懂七個repo之間關聯,跟找大秘寶似的
: 在review code階段,還埋個彩蛋,發現了隱藏的第八個repo
: 新來的同事說改不動了,就算加個menu都很麻煩
: 心一橫,提案該網站功能也不複雜,全部打掉重做
: 就自己埋頭花了兩週重做了那個網站加遷移
兩個禮拜是不是沒算到寫 test 跟重作 QA 的時間 XD
寫 code 相對快,大部分開發時間本就都花在其他地方
這種大霹靂式的重寫,通常是很危險的 XD
: 工程師追求的很簡單,(自己)好閱讀,(自己)好維護就行了
: -----
: Sent from JPTT on my iPhone
--
Sent from PCMan on PCMan's PC
--
簡單一句話: 不要過早完美化。技術服務業務,隨服務演進
PCMAN大神
只能推
on demand做 而refactor的時候需要test避免你改錯
That's why unit tests are important
確實
感謝大大分享
寫不寫的漂亮與市場反應是兩件事情 這與公司經營和高
層思想才有關係 寫的好不代表一定花時間
但為了不讓資本囂張 我讚同有時可以這麼做
我認為 一個專案的基礎架構 開發藍圖 工時 要能準確估算跟
執行真的都需要高度經驗
工作而言 重要的事是怎麼在日期限制內交出及格的作品
什麼要取捨 什麼一定要做到
有時也不一定是資本囂張 是高層囂張
推這篇,句句是實務
至少你走過來了,辛苦了
推大神
上古神獸推推
推,雖然層級有差但魯蛇做久了感想完全一樣
感謝分享 看完覺得茅塞頓開
最近也有這種感覺,會開始要求自己做到best practice
,但老實說這是必經之路吧,經歷過凡事都要求完美的路
,才會知道哪些可以放棄不用
大神推推 都是血和淚的教訓
推
best 根本就不存在,完全是商業手法的誤導,欺騙初
學者以為只要看到 best 學就對,自己就會變成 best
這個世界只有 suitable practice ,最合適的,沒有
最好的
很多都這樣 一開始能動最重要,真的有閒穩定下來後才是
重構的部分
interface真的是說到點了,可能補習班教吧 一堆人都照著
一個service都做一個interface然後就只有自己實作
神獸來了快拜一下~~~
interface 還是看語言跟框架用啊
推這篇,這幾年工作下來的經驗也是如此,尤其碰到專案需求
變動快速的時候,這篇的經驗會更實用
interface 跟 DDD 就是互相成就
遵從到後來都魔怔了,一堆過度設計的場景
先存活下來再想著如何變好
但活太久改不動就又是另外一回事了QQ
推這篇~很有同感+1
推
32
首Po寫程式不知不覺也一年半了 看著公司龐大的老舊程式 前人寫的實在雜亂 造成了維護上有一定難度 最近有心想要嘗試從簡單的地方開始試著重構4
程式人最重要的追求 應該是創造良好就業環境 本來一個人的工作 變成三個人做 三個人的工作要一個部門做![Re: [討論] 寫程式的追求? Re: [討論] 寫程式的追求?](https://i.imgur.com/JAcuIOSb.jpeg)
這幾年AI流行 只要你訂好條件,清楚流程,然後約束修改窗口──你清楚你在做什麼 AI幾乎能產出100%正確的程式碼 並且功能清晰,命名合理,還加上一堆註釋 工作流程幾乎就是讓AI生成程式碼,閱讀程式碼,對一些細節做修改4
: : 這幾年AI流行 : 只要你訂好條件,清楚流程,然後約束修改窗口──你清楚你在做什麼 : AI幾乎能產出100%正確的程式碼 : 並且功能清晰,命名合理,還加上一堆註釋11
OK,你說得很有道理,AI 會產測試。 假設你要實作的邏輯不複雜,不罕見, 因此 AI 可以讓你用少少的口語產出字數更多的程式碼及測試好了, 那我就想問,是什麼樣的測試程式? 姑且不論常常被忽略的非用途面驗證好了,光是用途面的驗證就有很多種。3
你會這樣想只有幾種可能 1.過太爽 2.年輕人認為可以學的到東西 3.單身 基本上重構對公司是沒產值的 不知道你有沒有看過一張圖3
純粹對工作上來說 好抽換,好接手(易閱讀),好維護(包含升級,測試) 工作,這樣就很夠了阿,大家一起輕輕鬆鬆,工作之餘聚餐風花雪月。 回家,陪老婆,陪女兒不好嗎? 工作又不是人生的全部![Re: [討論] 寫程式的追求? Re: [討論] 寫程式的追求?](https://i.imgur.com/KDk3kmpb.jpeg)
4
嗯,這三點很因人、因時、因事、因心情而異。 就像李白好還是杜甫好? 金庸好還是古龍好? Chaos 好? --39
好接手,易閱讀… 我想到一個故事 幾年前有個同事,號稱國中時期就開始接案寫代碼 clean code,DDD滾瓜爛熟,對coding極度潔癖 印象比較深的是入職時說了句:我看到不規範的代碼會非常生氣6
我應該也算軟體工程師吧 在電子廠專門用LabVIEW幫實驗室寫自動測試程式。連續寫了十六年。 體驗所謂人生三階段。 看山是山,看山不是山,看山還是山。 第一階段,只追程式會動,能用就好。就算有問題,硬解。遇到什麼不會,就去學什麼。
爆
Re: [爆卦] 國中科展天才呂同學,就是唐鳳2.0無誤!嗨我剛剛把影片看完了 簡單來說他這段演講在介紹他學習ML的過程 他會看model的架構並理解 然後自己寫出code放到開源的github上 還很貼心的付了github repo給大家![Re: [爆卦] 國中科展天才呂同學,就是唐鳳2.0無誤! Re: [爆卦] 國中科展天才呂同學,就是唐鳳2.0無誤!](https://img.youtube.com/vi/VGEf08Bzhc4/mqdefault.jpg)
27
Re: [討論] 怎麼跟自以為是的同事相處提供一點不一樣的看法 ※ 引述《leo5916267 (封膜獵人)》之銘言: : 也許在軟體也蠻容易遇到類似個性的同事 : 我們是新創公司,我進去前已就有一個前端工程師,他從0建構了整個產品A 代表他能力不算差16
[討論] Unit test 的撰寫請益先說我對 Unit test 的看法:測試單元(可能是 function)的邏輯是否正確 好,進入正題 小弟最近剛工作,稍微讀了一下負責的 project 的程式碼後, 要開始開發 Unit test。 現況是,各個 file (.c) dependency 很重,9
Re: [請益] 大型Git版本庫的備份或替代方案: : 用法跟 git 很類似,但是就是拿來備份大的檔案。 : 更精確的說是 snapshot 檔案,每個版本類似 git 的 commit : : 有支援,可以參考![Re: [請益] 大型Git版本庫的備份或替代方案 Re: [請益] 大型Git版本庫的備份或替代方案](https://git-lfs.github.com/images/facebook-promo.png)
8
Re: [討論] 同一個程式碼段落超過一人以上在修改不一定,可能合理可能很 suck 要看規模、工作流程、有沒有人控場、默契 自己的經驗是分工做得好的地方通常會定義 ownership 「這塊 code 是拎北/拎母的,要改要先問」 積極的 owner 會對 code 要長成怎樣有明確的想法並前進7
Re: [討論]有可能不學coding就可以取得前後端工作?先不用談那些面試會遇到的問題,因為基本上目前的LLM能夠作到的能力是boosting 跟teaching而boosting的基礎使用者要會寫code,而teaching的的結果是使用者會 寫code 不可能無中生有,因為這違反了目前LLM的基本邏輯:文字接龍。所謂的文字接龍 ,前半段提示詞的好壞,決定後半段生成內容的品質,當用戶連怎麼正確描述自己5
Re: [問卦] 寫程式真的很容易寫到自己看不懂嗎?本魯還在CS小大一程式設計時候教授說一個冷笑話 剛學寫程式一個月 你的程式大家都看得懂 再過一個月 認識你的人才看得懂6
Re: [討論] 工作上寫單元測試的比例底下這是比較「野性」」的作法,算是實務專案的經驗: 其實我覺得你到一個完全沒有測試的專案,要分兩個策略: 1. 補重要主線的 integration test 反正哪邊常被報修就補哪邊。 如果一開始補不上去就先做下一點,理論上常被報修的地方會一直出現在下一點, 累積多了就可以變成1了。3
Re: [心得]以策略模式重構switch case或if (影片)因為有朋友想要 Python 的版本, 簡單的 legacy code 也可以讓他們玩玩 team build 練練手, 所以我就順手整理了 Python 的版本了。 - GitHub Repo & commit history: - 用 PyCharm 重構的影片,YouTube:![Re: [心得]以策略模式重構switch case或if (影片) Re: [心得]以策略模式重構switch case或if (影片)](https://img.youtube.com/vi/IMV-lL_2jUw/mqdefault.jpg)