Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Code Review 怎麼做?新手工程師如何提升「程式碼品質」

Code Review 怎麼做?新手工程師如何提升「程式碼品質」

作者头像
Cell
发布于 2022-02-25 09:31:19
发布于 2022-02-25 09:31:19
2K0
举报
文章被收录于专栏:Cell的前端专栏Cell的前端专栏

程式碼的持續優化

對一個入門的工程師來說,掌握程式語法與模仿範例實作是基本的能力。那有了這樣的基本能之後,要如何寫出更好的程式呢?怎樣才能夠成為一個「優秀」的新手工程師呢?事實上,寫出會動的程式不難,但想寫出好的程式其實是需要刻意練習的。大部分的人會建議要「多練習、多實作」,但我認為在大量練習之外,適時的「優化程式」也是提升「程式碼品質」重要的關鍵。而在「優化程式」可以分成兩個角度:

  1. 程式執行效能更好
  2. 程式碼結構更精簡

程式執行效能就是從速度跟空間來思考,執行時間越短、變數佔用空間越小。而程式碼結構則會從可讀性和精簡來衡量,例如:變數的命名有沒有意義、程式碼有沒有冗余、繁瑣的部分等等。只不過新手很容易停留在寫出程式的喜悅以及受到固有的解題思考,而忽略優化的過程。

透過「Code Review」是推薦新手的方法,經由反饋與討論來找出程式中可優化的空間。

Code Review 的關注點

以我自己的經驗來說,Review 一份專案的時候會關注:

  1. 程式能不能正常操作,有没有什么明显的错误?(低標)
  2. 程式碼當中有沒有奇怪的地方?(優化)

第一個關注點是程式碼的低標,結果正確與可正常運行一定是最重要的。如果程式無法運行動或存在很明顯的問題,那再多的優化都沒有意義。除了確保執行之外,同時也會檢查一下是否有低級的邏輯失誤或是安全性的疑慮,像是資料庫沒有正確關閉或密碼明碼沒有加密之類的問題。

第二個關注點是「程式碼品質提升」的部分,我會把它定義成程式運作上沒有問題,但看起來很不舒服或執行效率很差的部分。大致上可以從以下幾點下手:

  1. 命名有沒有意義/不一致
  2. 資料庫的正規化情況
  3. 是否存在特別複雜的程式片段(例如多次的資料庫查詢、多層的迴圈使用)
  4. 重複的程式碼有沒有定義成 function
  5. 冗長的程式碼能不能拆分成 function

不過一次的 Code Review 建議著重在 3 - 5 個優化地方,比較容易聚焦在優化的品質。根據時程的壓力,決定 Code Review 迭代的次數。

從架構的規劃到細節的優化

在拿到一份程式碼時,通常會先掃過一眼程式的檔案結構,是否有不該上傳的檔案或缺漏。

以這個例子來說,第一眼會覺得檔案配置蠻結構化的。但再多看一點會發現存在幾個冗餘的檔案,例如:-filesqqqqdiff,甚至 /icon 資料夾也不該放在最上層。

進入程式的第一步先從 package.json 檔案開始,確認一下專案的基本資訊是否完整、使用到的套件與版本,以及程式的進入點是什麼。然後打開進入點的檔案(通常會命名成 appmain),通常有幾個點需要注意:「套件的載入順序」會建議從第三方套件 → 自定義的模組 → 程式內的變數這樣順序定義;「善用 MVC 的架構」將非主程式的部分依照功能拆分模組,避免檔案資訊量太雜亂。接著就會從 RouterControllerServiceView 的流程一個一個功能,以下分享一些存在優化空間的程式碼:

  1. 善用工具,已有的工具,不用自己手刻
  2. 變數名稱不建議用大寫開頭(通常是用在 Class 的命名)
  3. 保持優化的空間與彈性

「優化其實是一種取捨」,不需要也不應該追求一步到位。開發往往都是在品質跟產出做取捨,初期可以把開發目標放在「先求可以動,再求持續優化」的節奏上。新手需要在意的點有幾下兩點:

  1. 很容易把重點全部放在程式碼的產出上而忽略的程式碼的品質。
  2. 停留在做出成果的喜悅,而停滯了優化的步調。

因此,會建議在開發當下就「多想」兩秒鐘,感覺可優化但來不及的部分先在旁邊加個註解提醒自己。另外也養成一段時間回頭看之前的程式碼的習慣,試著刻意找出可以優化改進的部分。專案的提交可能會有期限,但程式碼的優化沒有盡頭。面對相同的專案與程式碼,唯有透過不停的迭代優化才能打造更好的程式,同時也見證了你和程式一起變得更好的過程。所以建立逐步優化的空間,養成持續提升程式碼品質的習慣,才是一個新手工程師需要修煉的心法。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-03-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
計算機程序設計:7大編程原則
編程的工作同石匠的工作相類似,即是技術活,也是體力活,而編寫優秀的軟件,算是一件比較難的事。編程大牛們並不是直接上手編寫,而是根據需求進行設計,不但將代碼中 Bug 出現的機率降到最低,還要讓代碼具有高可讀性,高安全性等等。
一个会写诗的程序员
2020/09/01
6180
【Rust日报】 2019-09-09:glint 用Rust編寫的commit 提示工具
然後再用 Linux perf 跑看看,發現分析結果與 cargo-profiler 相同
MikeLoveRust
2019/09/11
4210
【Rust日报】 2019-09-09:glint 用Rust編寫的commit 提示工具
RESTful
HTTP 状态码(HTTP Status Code)是用以表示网页服务器 HTTP 响应状态的 3 位数字代码。所有状态码的第一个数字代表了响应的五种状态之一。 除非另有说明,状态码是 HTTP / 1.1 标准(RFC 7231)的一部分。
Cell
2022/02/25
8690
从数据到AI
信息是一個客觀存在物體的自然表現,比如說“I am a local villain.”,無論你用什麼語言、什麼方式表示他都是客觀存在的,而信息即是承載這些客觀實體的概念載體。雖然香濃知道20世紀中才提出了信息輪,但是信息自古就有,與算機系統的出現無關,比如遠古結繩記事、早期文明的甲骨文、中世紀文明的簡牘等等,但是直道現代才理論化。
随风溜达的向日葵
2019/11/21
5790
从数据到AI
[ISUX譯]Touch bar 設計指南
導語:日前蘋果發布會上,最大的亮點之一當屬替代一欄功能鍵的Touch bar。本文包括有5個小節,詳細介紹了Touch bar設計原則、新特性和基本元素 ,一起來學習。 Touch bar概述 Touch Bar是位於新一代MacBook Pro鍵盤上方的一條 Retina 顯示屏,同時也是與主屏幕內容交互提供動態操作界面的輸入設備。基於當前語境,Touch Bar的這些控件能對系統或應用的功能進行快速訪問。 例如,當用戶在編輯文檔時,Touch Bar可提供調整字體類型和大小的控件。 當用戶查看地圖時,T
腾讯ISUX
2018/06/29
8990
Using Automake and Autoconf「建议收藏」
Murray Cumming <murrayc@usa.net> Chen Chih-Chia <pigfoot@CDPA.nsysu.edu.tw>
全栈程序员站长
2022/07/25
4510
主动学习与被动学习
美國學者艾德格‧戴爾(Edgar Dale)提出了「學習金字塔」(Cone of Learning)的理論:在初次學習兩個星期後,透過閱讀學習能夠記住內容的10%;透過聽講學習能夠記住內容的20%;透過圖片學習能夠記住內容的30%;透過影像、展覽、示範、現場觀摩來學習能夠記住50%;參與討論、提問、發言來學習能夠記住70%;做報告、教學、模擬體驗、實際操作能夠記住90%。美國緬因州國家訓練實驗室(National Training Laboratories)做過類似的研究,結論跟戴爾差不多。由此可知,閱讀是最沒用的學習方式,而模擬、體驗與實作才是最好的學習方式。是嗎?
超蛋lhy
2018/08/31
1.8K0
主动学习与被动学习
C#-笔记-面向对象-第一章
我們把這些具有相同屬性和相同的方法的對象進一步的封裝,抽象出來類這個概念,類就是模子,確定了對象應該具有的屬性和方法。 對象是根據類創建出來的。
用户9857551
2022/06/28
3330
C#-笔记-面向对象-第一章
催生超低功耗邊緣AI應用 tinyML賦予MCU產業新契機
物聯網(IoT)相關技術不斷向前演進,加上節能減碳意識抬頭,使得人工智慧(AI)也從雲端走向邊緣端,僅需mW等級的超低功耗就能進行機器學習(Machine Learning,ML)的「微型機器學習」(tinyML)概念應運而生,近年相關技術發展飛快,擠身熱門前瞻技術之列。運用微控制器(MCU)為邊緣裝置(Edge Device)裝上大腦,將有機會讓電子貨架標籤、感測器等邊緣裝置上,也能增添智慧應用。
用户6026865
2022/09/02
7400
催生超低功耗邊緣AI應用 tinyML賦予MCU產業新契機
解密特斯拉自動駕駛晶片背後的一號人物
源自:虎嗅網 作者:國仁 在自動駕駛領域,AI晶片其實並非新奇玩意。Mobileye的EyeQ系列晶片,就是較早應用於自動駕駛的AI晶片之一。 而在這個月早些時候,矽谷鋼鐵俠馬斯克,還宣佈了特斯拉正在研發用於自動駕駛的AI晶片,回顧馬斯克對自動駕駛晶片的各種動作,我們發現近來各種跳票“不靠譜”的他,其實對技術發展的趨勢,遠比看上去更理解。 馬斯克對特斯拉自行研發自動駕駛晶片的佈局,從兩年前就開始了。 一、從Mobileye到英偉達 特斯拉的自動駕駛焦慮症 2014年,特斯拉找上Mobileye,用上了它
企鹅号小编
2018/01/25
9740
ios苹果app上架流程
什麼都是假的,只有 App 上架 Store 才是真的。千辛萬苦完成 App 後,下一步、也是最重要的一步,就是把 App 送審上架!為了讓新手都能一次就送審成
iOS程序应用
2023/02/10
1.4K0
ios苹果app上架流程
淺談晶片實體設計-競爭力(Competitiveness)
题记:本文是 funBroad 系列文章的第一篇,中心思想还是,在头部企业可以吃更多『设计余量』红利时,老二老三老四老五跟老小们怎么跟随,怎么提高自身竞争力——最后一段标红部分可细读。
老秃胖驴
2020/05/22
7730
【Rust日报】 2019-12-20 Serverless - Rust 使用 WASM 加 Cloudflare
#[non_exhaustive] structs, enums, and variants
MikeLoveRust
2019/12/25
8050
linux 信号sigabrt,關於Linux中的SIGABRT信號
SIGABRT是中止一個程序,它可以被捕捉,但不能被阻塞。處理函數返回后,所有打開的文件描述符將會被關閉,流也會被flush。程序會結束,有可能的話還會core dump。 當程序調用abort(3)時,該進程會向自己發送SIGABRT信號。所以,SIGABRT一般用於信號中一些關鍵的處理,assert失敗時也會使用它。你不應該去捕捉SIGSEGV和SIGABRT信號,如果收到這種信號,說明進程處於一個不確定的狀態,很可能會直接掛起。
全栈程序员站长
2022/07/23
3K0
RN之回調函數-百步九折縈巖巒
函數可以稱得上是編程語言的靈魂所在之處,它就像是一個個工廠,總能創造出開發者需要的效果。本文就將介紹RN中回調函數的四種寫法。 方法一:使用箭頭函數指向回調。這種寫法就不需要bind函數來綁定。{(newText)this.updateNum=>this.updateNum(newText)}這句代碼的意思是在花括號中有一個箭頭符號定義的函數,它將收到的字符串為參數調用本類組件的updateNum函數,并將該函數的返回值返回。 //構造函數 constructor(props) { super(p
谦谦君子修罗刀
2018/05/02
6640
【Rust日报】 2019-10-25 例子學習:基於Autoref的穩定特化
然後再將其上傳到數據庫,並且要在/opt/docs-rs-prefix/documentations目錄中進行。
MikeLoveRust
2019/10/31
4360
【ES三周年】基于ELK的日志分析服务
本專題作品開發一套基於ELK的日誌分析服務,提供多種日誌類型解析及對應的可視化功能。目前提供的日誌類型分別為系統日誌(syslog)、網功能變數名稱稱系統日誌(dnslog)及網頁伺服器日誌(nginxlog),可視化功能包含圖表呈現和文字說明等。
sh1mwww
2023/02/15
1.3K0
機器學習算法起航系列一·支持向量機
本文介绍了支持向量机(SVM)算法的基本原理、应用场景和实现方法。首先介绍了SVM处理线性可分和非线性可分的原理,然后通过一个歌曲分类的实例展示了如何使用SVM进行建模和分类。最后,总结了使用SVM进行文本分类的流程。
企鹅号小编
2017/12/27
8460
機器學習算法起航系列一·支持向量機
【Rust日报】 2020-01-31 Rust編譯模型災難
文章作者Brian Anderson是Rust編程語言 及其姊妹項目Servo Web瀏覽器的共同創始人之一。
MikeLoveRust
2020/02/20
4720
Express.js 4.0 有加入一個新的 Router 功能
Express.js 4.0 有加入一個新的 Router 功能,它就像一個迷你的應用程式,可以讓應用程式內部的路由撰寫更方便、更有彈性。 Express.js 在 4.0 版中有許多新的功能,其中一項主要的功能就是 Router,以下我們介紹如何使用 Router 功能來撰寫應用程式。 基本應用程式 首先建立一個 package.json 檔案,定義套件的相依資訊: { "name": "express-router-experiments", "main": "server.js",
前朝楚水
2018/04/03
1.1K0
Express.js 4.0 有加入一個新的 Router 功能
相关推荐
計算機程序設計:7大編程原則
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档