色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

入行 14 年,我還是覺得編程很難:給大項目寫代碼沒意思還危險

innswaiter ? 來源:van ? 作者:van ? 2023-02-23 14:34 ? 次閱讀

1寫代碼很簡單,但寫好代碼很難

編程曾經是一項門檻很高的專業技能。從前,一個普通人想學編程,最常見的做法就是通過教材和書本學習。不過大部分編程專業書,十分艱深晦澀,對于初學者來說很不友好。因此不少人在嘗到編程的樂趣前,就早早地半途而廢。

但如今,學編程正在變得越來越容易。學習不再像以前那樣,只能硬啃書本,而是多了許多新途徑。觀看教學視頻、參加 Codecademy 的交互式課程,甚至直接在 CodeCombat 通過玩游戲來學編程,每個人都能找到適合自己的學習方式。

poYBAGP3COCAdUCvAAn4Dz_b0VI747.jpg

“媽,我真沒在玩游戲,我在學編程呢!你看屏幕右邊!”

此外,編程語言也在變得越來越易用。經典的 C 和 Java 不再是大多數初學者的首選,許多更簡單、更易上手的動態類型語言如今大受歡迎,與之相關的 IDE 等工具也變得越來越完善。這些因素進一步降低了編程的學習門檻。

總而言之,編程早已褪去了它的神秘面紗,從只有少數人才能掌握的神秘技能,變成了一門人人皆可學習的普通手藝。

但更低的學習門檻、更友好的編程語言,并不意味著人人都能寫出一手好代碼。如果你已經工作,參與過一些項目,那我很想問你一個問題:”你日常接觸的這些項目的代碼質量如何?是好代碼多,還是爛代碼多?”

不知你會怎么回答,我先來說說我的答案。

好代碼還是很少

2010 年,我跳槽到了一家總部位于北京五道口的大型互聯網公司

加入這家公司前,我只在十人規模的小公司待過,因此,我對新公司在各方面都有著很高的期待,尤其是軟件質量方面。當時,我心里想的大概是這樣:“這可是支撐了有著千萬用戶量的產品的‘大’項目,代碼質量跟之前那些比,肯定有質的飛躍吧!”

等到在新公司工作了一周后,我才發現自己實在是錯得離譜。所謂“大”項目的代碼質量同我的預期相去甚遠。打開 IDE,數百行的函數和神秘的數字字面量比比皆是,開發任何一個小需求都難如登天。

后來,在待過更多公司,接觸了更多軟件項目后,我總結出一個道理:不論公司多大、項目多牛,在實際工作中遇見好代碼,仍然是小概率事件。

好代碼有哪些要素?

話說回來,到底怎樣的代碼才算是好代碼?在這方面,Martin Fowler 有一句話常被大家引用:

“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”

“任何傻瓜都能寫出計算機能理解的代碼。優秀程序員寫人類能理解的代碼。”

我認為它可以作為評價好代碼的原點:好代碼一定是可讀、易讀,且容易理解的。寫出好代碼的第一原則,就是把人類讀者放在第一位。

除了可讀性以外,評價代碼好壞還有許多其他維度:

貼合編程語言:是否使用了當前編程語言的推薦寫法?語言特性和語法糖,使用程度是否恰到好處?

貼合編程語言:是否使用了當前編程語言的推薦寫法?語言特性和語法糖,使用程度是否恰到好處?

易于修改:代碼設計是否考慮了未來的需求變更,當變化發生時,代碼是否容易隨之修改?

API 設計合理:API 設計是否合理,易于使用?好的 API 在簡單場景下使用方便,在高級場景下又可以隨需求擴展。

性能夠用:代碼性能是否滿足當前業務需求,同時為未來保留了一定提升空間?

避免過度設計:代碼是否存在過度設計、過早優化的毛病?

總而言之,對于任何層級的程序員來說,好代碼都不是什么唾手可得的東西。要寫出好代碼,需要在許多維度上反復權衡、精心設計,最后再加以持續打磨。

既然如此,假如想盡快掌握寫代碼這門手藝,有捷徑嗎?

寫好代碼的捷徑

在許多層面上,我認為編程和寫作非常相似。二者都是使用文本和符號來表達思想,只是方式略有不同。

談到寫作,我想問一個關于作家的問題:“你聽說過不讀書的作家嗎?你有沒有聽到過某位作家說,他從來不讀其他人的作品,只讀自己的東西?”。我猜答案應該是否定的吧。

如果你去查閱相關資料,你會發現許多職業作家的日常生活,就是閱讀和寫作兩件事在不斷循環。他們每天會花大量時間閱讀各類文字,然后再寫作。

同樣是“文字工作者”,程序員們就很少重視閱讀。但要想快速提升編程能力,閱讀正是不可或缺的重要一環。除了日常工作接觸到的項目以外,我們應該更多地閱讀那些經典軟件項目,從中學習 API 設計、模塊架構和代碼編寫的技巧。

不光代碼和技術文檔,最好再定期讀一些計算機方面的專業書,保持閱讀書籍的習慣。在這方面,我認為 Jeff Atwood 在 15 年前寫的文章 "Programmers Don't Read Books -- But You Should(都說程序員不讀書——但你應該讀)",如今讀來仍不過時。

提升編程能力的捷徑,就藏在“閱讀 <-> 編程”這個無盡循環里。

pYYBAGP3COCABS1bAAKFHuxPAXY696.jpg

“一個好的程序員應該做什么?”

2編程的精髓是“創造”

在程序員的日常工作中,有很多事情會讓人充滿成就感,甚至情不自禁地感嘆“編程真美好”。比方說,修復了一個極難定位的 Bug,用新算法將代碼性能提升了一倍,等等。但在所有的這類事情當中,沒有任何一件,能和“親手創造出一件東西”相比。

當你在編程時,創造新事物的機會實際上隨處可見。因為并非只有發布一個新軟件,才稱得上是“創造”。寫一個可復用的工具函數、設計一套清晰的數據模型,全都可以歸入“創造”的范疇。

身為程序員,保持對“創造”的熱情至關重要。因為它可以幫我們:

更高效地學習:學習一門新技術,最高效的方式就是用它開發一個真實項目,在創造的過程中學習,效果最好。

有機會邂逅了不起的東西:許多改變世界的開源軟件,最初都是作者純粹出于興趣所創造,比如 Linus Torvalds 和 Linux,Guido van Rossum 和 Python

pYYBAGP3COGAQ0yTAApfX6lPdkk783.jpg

1989 年的圣誕假期,荷蘭人 Guido van Rossum 敲下了 Python 語言的最初幾行代碼,Python 最初僅被期望作為 ABC 語言的繼承者,但后來“吞噬”了全世界

雖然“創造”好處多多,程序員們也有大把機會去做,但許多人常常缺少一種身為“創造者”的覺悟。就像那個廣為流傳的小故事所說:一位哲學家詢問正在砌磚的工人,有人清楚地知道自己是在建造一座大教堂,有人卻認為自己只是在砌磚。很多程序員正是“只見磚塊,不見教堂”。

將自己定位成創造者后,看待事物的方式就會發生天翻地覆的變化。舉個例子,同樣是給 API 增加報錯提示文字,創造者們就能跳出“快速完成需求就好”的思維陷阱,向前一步,追問自己一些更重要的問題:“我想為用戶創造什么樣的產品體驗?怎樣的報錯文字,更能幫助我達成該目標?”

就像任何一個有用的編程模式一樣,“創造者思維”也能成為你的職業生涯的一道巨大推進力。因此,現在就試著問自己一個問題吧——“我的下一份創造會是什么?”

3打造高效試錯的環境至關重要

我曾參與開發過一個互聯網產品,它設計精美、功能豐富,每天都有大量用戶使用。

但就是這么一個從市場角度看頗為成功的產品,工程質量卻非常糟糕。如果你打開它的后端項目,把所有目錄翻個底朝天,都找不到任何一行單元測試代碼,其他自動化測試流程也是無從談起。而業務邏輯偏偏又十分復雜,最后,項目代碼間的意料耦合多如牛毛,開發一個新特性很容易把舊功能給搞掛。

poYBAGP3COGAYkHiAAFCPWqDTqs852.jpg

“在忙啥呢?” “試著修復我之前修一個問題時搞出來的問題,那問題是我之前解決另一個問題搞出來的,而那個問題又是我……”

因此,項目每次發布時,開發和產品同學全都得嚴陣以待,氛圍十分緊張。整個發布過程也很刺激,緊急回滾時有發生。一個人在這樣的環境中工作,技術成長拋開不談,心理素質肯定能得到極大鍛煉。

編程原本是一件充滿樂趣的工作,但為這樣的項目編程,樂趣根本無從談起。究竟是什么奪走了編程的樂趣?

理想的編程體驗≈“刷題”

LeetCode 是一個著名的編程學習網站,上面提供了許多覆蓋各個難度的編程題,大部分與算法相關。用戶可以選擇自己感興趣的題目,直接在瀏覽器上編寫代碼(支持十幾種編程語言)并執行。如果通過了全部的測試用例,則算作解答成功。

pYYBAGP3COGAQHcCAAI9shPzEEQ988.jpg

在 LeetCode 上做題

在 LeetCode 刷題很像在玩游戲,富有挑戰性,同時也很有趣。整個做題過程,實際完美展現了一種理想化的編程體驗:

關注點分離:每道題目都是一個獨立個體,同一時間內,開發者可以完全沉浸在一道題目中;

快速獲得精準反饋:開發者每次調整代碼后,能通過自動化測試快速獲得結果反饋;

零成本試錯:寫出的代碼語法有錯誤、邏輯有問題,沒有任何不良后果,心理負擔小。

不過,屏幕前的你很可能覺得我在說些廢話。

“不然呢?解算法題、寫小腳本,不就是這樣的體驗嗎?有啥特別值得說的?”你很可能會繼續補充道,“你知道我們公司的項目有多復雜嗎?規模超大,模塊巨多,你懂我意思嗎?每天服務 ××× 萬人,光數據庫就好幾套,消息隊列都有三種,開發起來當然要麻煩一點咯!”

確實,全世界的軟件千差萬別,開發起來不可能都像在 LeetCode 上刷題一樣輕松愉快。但這并不意味著,我們不應該努力改善自己身處的編程環境,哪怕只有一點點。

要通過改善環境來提升編程體驗,可用的理念和工具包括:

模塊化思想:妥善設計項目中的每一個模塊,降低耦合,提升正交性

設計原則:微觀層面上,應用那些經典的設計原則和模式,比如“SOLID”原則

自動化測試:編寫規范的單元測試,必要時使用 Mock 技術,用自動化測試覆蓋業務關鍵路徑

縮短反饋回路:切換編譯速度更快的工具,優化單測性能,竭盡全力縮短從“改完代碼”到“獲得反饋”的等待時間

微服務架構:必要時,將大單體拆分為多個職責各異的微服務,分散復雜度

……

關注編程環境,刻意創造出允許高效試錯的“代碼樂園”,讓工作像刷題一樣輕松愉快。是經驗豐富的程序員能為自身團隊做出的最好貢獻之一。

4避開代碼完美主義陷阱

在代碼質量上精益求精是好事,但也要注意別掉進完美主義的陷阱。因為編程不是藝術創作,不鼓勵人們無限度地追求極致。作家大可花上數年打磨一本傳世之作,但程序員在代碼上鉆牛角尖就很有問題。

世間沒有完美的代碼。大多數時候,你的代碼只要能滿足當前需求,又為未來擴展留了一些空間就夠了。有那么幾次,我在簡歷上看到候選人給自己打著“代碼強迫癥”標簽。隔著屏幕,我雖能感受到 TA 對代碼質量的那份重視,但在我心底,其實更期望 TA 早已將完美主義陷阱遠遠甩在了后頭。

5技術很重要,但“人”也許更重要

在軟件開發領域,“單一職責原則”(全稱為 Single responsibility principle,后簡稱為 SRP)是一條非常著名的設計原則。它的定義很簡單,一句話就可以概括:“每個軟件模塊應該只有一個被修改的理由”。

poYBAGP3COKAQaHhAAS5kCkPhtE317.jpg

單一職責原則:能做到,并不意味著你就該這么做

要掌握 SRP 原則,關鍵在于搞清楚“被修改的理由”為何物。很顯然,程序是沒有生命的,它自身不能也不需要主動去改變。任何修改程序的理由,都來自與之相關的人,人是導致修改的“罪魁禍首”。

舉個簡單的例子。看看下面這兩個類,其中哪一個違反了 SRP 原則?

一個字典數據類,支持兩類操作:存數據、取數據;

一個員工資料類,支持兩類操作:更新個人信息、渲染一張用戶資料卡片圖。

在大多數人眼里,第一個例子沒問題,但第二個例子卻明顯違反了 SRP 原則。要得出該結論,好像無需任何嚴格的分析和證明,運用一丁點直覺即可。但假如做一些正經分析,第二個例子的可疑之處,在于能為其輕松找出兩個不同的修改理由:

管理員認為資料中的“個人電話”字段不能有非法號碼,需增加簡單的校驗邏輯;

某員工認為資料卡片圖上的“名字”部分太小,希望加大字體。

”It is people who request changes. And you don’t want to confuse those people, or yourself, by mixing together the code that many different people care about for different reasons.” ——“The Single Responsibility Principle”

“是人在要求軟件變更。你絕不想把那些不同人出于不同原因所關心的代碼混在一起,這樣只會把他們和你自己搞糊涂。”——“單一職責原則”

理解 SRP 原則的關鍵,在于先理解人以及人在軟件開發中所扮演的角色。

再舉一個例子。微服務架構是近些年很火的一個技術話題。但許多人在討論它時,往往只關注技術本身,卻忽視了微服務架構與人之間的關系。

將微服務架構風格與其他東西區分開的關鍵,在于將大單體拆分為獨立的微服務后,不同模塊間的邊界可以變得更清晰。跟數百人的團隊一同維護著一個大單體比起來,許多小組織各自維護著獨立的微服務,明顯擁有更高的運作效率。

如果缺少了特定的組織規模(也就是“人”)作為前提,空談微服務的各種技術優勢和那些花活,純屬本末倒置。

技術當然很重要。身為技術人員,那一張張瑰麗的架構圖和獨具匠心的代碼細節,天然吸引著我們的注意力。但是,也請千萬不要對軟件開發里的另一個重要因素“人”視而不見。必要時,轉換一下看事情的角度(從“技術”轉向“人”),那樣對你大有裨益。

6求知若渴是好事,但也要注意方法

如今人人都在說“終身學習”,而程序員是一個尤其需要終身學習的職業。因為計算機技術的迭代更新非常快,某個三年前流行的框架或編程語言,很可能一個月前已經過時。

pYYBAGP3COKAQq5jAATF4fum3p0532.jpg

一分鐘之內會發生什么事情?Netflix 觀看時間增長 70,000 小時;Snapchat 上有三百萬視頻被觀看;Google 新增兩百四十萬次搜索;一個 JS 新框架被發明(這條不是真的


審核編輯黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編程
    +關注

    關注

    88

    文章

    3637

    瀏覽量

    93914
  • 代碼
    +關注

    關注

    30

    文章

    4823

    瀏覽量

    68904
收藏 人收藏

    評論

    相關推薦

    2025山東、江蘇重大半導體項目公布

    來源:全球半導體觀察 近期,山東與江蘇兩地公布2025大項目名單。 山東公布2025省重大項目名單,共包含項目600個,其中省重大實施
    的頭像 發表于 01-15 11:04 ?132次閱讀
    2025山東、江蘇重大半導體<b class='flag-5'>項目</b>公布

    江蘇重大項目清單發布!無錫華虹、華進半導體等項目上榜

    據無錫高新區在線消息,近日,2025江蘇省重大項目清單正式發布。無錫高新區(新吳區)實施項目再創新高。華虹集成電路晶圓制造、無錫阿斯利康小分子藥物新工廠、日聯科技工業射線智能檢測設備等10個產業
    的頭像 發表于 01-07 17:29 ?287次閱讀

    通富先進封測基地兩個子項目迎新進展

    南通市北高新區近日迎來重大喜訊,通富通達先進封測基地項目盛大開工,標志著這一百億級重大項目正式拉開建設序幕。作為2024省級重點工程,通富先進封裝測試生產基地項目由通富通達與通富通科
    的頭像 發表于 09-24 14:12 ?462次閱讀

    如何提升代碼質量與效率的秘訣

    提高編程能力其實沒有捷徑,最佳方式就是多代碼。 不過,除了大量代碼,提升編程能力還
    的頭像 發表于 04-28 14:53 ?433次閱讀
    如何提升<b class='flag-5'>代碼</b>質量與效率的秘訣

    用IARSTM8編程的每次下載完之后要給它加密,可以在程序里面一段代碼加密嗎?

    用IARSTM8編程的,每次下載完之后要給它加密。有點麻煩,想問一下哪位大神有沒有試過在程序里面一段代碼加密的?
    發表于 04-18 06:11

    蘋果解雇數百名加州員工,涉及汽車與熒幕項目

    自2 月底以來,蘋果逐漸停止實施這兩大項目。蘋果汽車項目因高層決策左右不定導致被迫終止;而熒幕項目的暫停,源于工程技術、供應商選擇以及成本壓力等多重因素的交織。
    的頭像 發表于 04-08 09:44 ?292次閱讀

    阿里云內部全面推行AI代碼

    阿里云正在內部全面推行 AI 編程,使用通義靈碼輔助程序員代碼、讀代碼、查 BUG、優化代碼等。
    的頭像 發表于 04-07 09:22 ?587次閱讀

    嘉興高新區首季重大項目簽約盛況

    3月27日,浙江省嘉興市高新區舉行了新一季度重大項目簽約儀式。據報道,此次共有兩筆總額超過50億元人民幣的投資,包括瓷新半導體材料總部項目以及摩珂達SiC功率器件及電子產品制造項目
    的頭像 發表于 03-29 16:51 ?1404次閱讀

    欣旺達簽署400MW/800MWh共享儲能、光儲充檢智慧驛站兩個重大項目

    近日,欣旺達旗下深圳市欣旺達智慧能源有限責任公司與山東棗莊高新區簽署400MW/800MWh共享儲能、光儲充(換)檢智慧驛站兩個重大項目
    的頭像 發表于 03-12 16:20 ?842次閱讀

    超40億!這個年產值70億的大項目正式開建

    近日,艾斯譜光電先進顯示產品生產基地暨隆昌光電科技產業園項目在隆昌市開工。
    的頭像 發表于 03-05 14:42 ?638次閱讀

    6000噸廢舊磷酸鐵鋰電池修復產線項目開工

    據當地媒體消息,2月28日,在懷化市2024一季度重大項目集中開工儀式中,共有65個項目同步開工,其中包含一項廢磷酸鐵鋰電池綜合利用項目
    的頭像 發表于 03-01 14:48 ?889次閱讀

    欣旺達10萬噸鋰電池回收利用及新型儲能智造項目開工!

    2月26日,山東省1007個重大項目集中開工建設,其中包含欣旺達10萬噸鋰電池回收利用及新型儲能智造項目
    的頭像 發表于 02-28 14:47 ?1152次閱讀

    天睿半導體項目將新建8英寸碳化硅SiC和氮化鎵GaN晶圓廠

    2月20日,福州市可持續發展暨企業家大會召開,大會進行了重大項目集中簽約儀式,長樂區簽約落地16個重大項目,其中之一為天睿半導體項目
    的頭像 發表于 02-23 10:44 ?2408次閱讀

    重慶公布SiC重大項目 三安2個工廠即將點亮投產

    昨天,“行家說三代半”報道了三安在重慶的2個碳化硅項目進展(.點這里.),今天,三安又公布了最新的項目消息
    的頭像 發表于 02-21 09:51 ?4128次閱讀
    重慶公布SiC重<b class='flag-5'>大項目</b> 三安2個工廠即將點亮投產

    上海發布基礎設施重大項目建設及投資機會清單

    此投資清單不僅提供了三類項目合作需求,即采購、協作、融資,而且具體內容各不相同。以采購需求為例,該部分主要向政府出資類項目開放,如公共算力擴容、政務區塊鏈等項目
    的頭像 發表于 02-02 15:23 ?543次閱讀
    主站蜘蛛池模板: 99久久国产露脸精品竹菊传煤 | 精品精品国产自在现拍 | 久久精品中文字幕免费 | 色欲AV精品人妻一区二区麻豆 | 久见久热 这里只有精品 | 曼谷av女郎| 秋霞电影网午夜免费鲁丝片 | 狂野欧美性猛XXXX乱大交 | 亚洲伊人久久一次 | 亚洲视频在线观 | 久久婷婷色一区二区三区 | 亚洲精品久久久久久偷窥 | 哒哒哒影院在线观看免费高清 | 三级黄视频 | 国产精品一区二区激情 | 久久久精品国产免费A片胖妇女 | 日日碰狠狠躁久久躁77777 | 日韩精品亚洲专区在线电影不卡 | 国产成人免费手机在线观看视频 | 玩弄人妻少妇500系列网址 | adc影院欢迎您大驾光临入口 | 久久热r在线视频精品 | XXX国产麻豆HD真实乱 | 国产欧美另类久久久品 | 欧美乱码卡一卡二卡四卡免费 | 三男强一女90分钟在线观看 | 美女逼逼毛茸茸 | 久久99AV无色码人妻蜜柚 | 116美女写真成人午夜视频 | 九九色精品国偷自产视频 | 色综合久久天天影视网 | 97色伦久久视频在观看 | 色婷婷狠狠97成为人免费 | 午夜伦理一yy4480影院 | 亚洲国产精品线在线观看 | 性生大片免费看 | 性啪啪chinese东北女人 | 日本电影免费久久精品 | a国产成人免费视频 | 美娇妻的性奴史1一4 | 内射白浆一区二区在线观看 |