先思再行 閉著眼睛編程

摘要:解決問題最重要的習慣不是一直盯著屏幕和編寫修改代碼,某些時候,阻止你成功的東西恰恰會是過于努力。這時候你需要暫停一下,平緩你的思緒,換一種方法或許能帶給你不一樣的效果。

你會花多少時間思考如何編寫代碼?

乍看這是一個引人思考的深層次問題,在編程專業中常有這樣的誤解,軟件開發就是寫代碼。軟件開發實為一門藝術,而代碼僅僅是通往藝術之門的工具。好比燃料和畫布是畫家的工具一樣,代碼的目的是實現某種策略和思路。對程序員來說,他的目標是開發出完整的軟件系統,按照需求完成各個功能模塊或許是某種無形的思路、特性。比如一個深思熟慮的架構、明確的內部組織和代碼質量,最后將這些進行整合。畫家每隔一小段時間會停下來重新評估進展和繪畫,看看是否達到自己的要求,程序員也一樣,必須定期審查代碼、查看進展、檢查思路是否實現。

那么你平時是如何工作的呢?是否確定工作區后就埋頭苦干?什么都無法阻止你的前進呢?如果這個描述很適合你,那么你做的一切都有可能是錯的。

所有好的軟件都有共同之處——他們都設計精良。同樣,大多數失敗的案例也會有相同之處——缺乏結構和視覺上的盛宴,最終導致崩潰。軟件開發是一項智力活動,這一切都歸結于實現的結構和在混亂中找到開發軟件的最佳理念。

我做過一個非常有趣的觀察。在我第一年的編程生涯中,我設法在規定的時間里開發出大量的代碼。結果大多數代碼都需要重新開發、設計甚至是丟棄。速度提高了,而效率卻明顯下降了,欲速則不達。隨著的時間推移,我學會一小步一小步前進,在開發前進行仔細分析思考,然后再開始開發編碼。結果發現代碼生成速度下降了好幾倍,而成功率幾乎達到100%,是不是有點戲劇性。我越來越多采用這種策略進行編程,我沒有堅持把時間直接轉換成代碼量。事實上,我經常每天只寫幾行代碼甚至有些時候會再刪除幾行。反而讓我的代碼從整體上更加簡潔、效率更高。

許多程序員都體驗過這種黑暗感覺,當你看到許多大大小小的缺陷都摻雜在一起的那種混亂,當走到這一步再回頭重新修改設計代碼,你會意識到為時已晚并且是毫無意義的,因為你繼續下去的工作本質上已經是被丟棄的。

對此,你還能做什么?

事實上,你可以!學會把更多的時間用來思考并且減少代碼輸入。我發現長時間的盯著屏幕并不會幫助你找到解決問題的方式。當思緒被卡住的時候,我會放棄繼續工作,離開電腦和所思考的問題。當我漫步在公園和一些安靜的場所時,常常會想到一些非常棒的思路和理念。實際上你可以試著閉著眼睛編程,燈光和周圍的一切都不會影響到你,片刻的休息會給你帶來轟動的、突破性的思路。 我最喜歡的地方是浴室,它可以讓人放松和平靜下來,聽到照亮內心的那些非常安靜的想法和靈感。

解決問題最重要的習慣不是一直盯著屏幕和編寫修改代碼,某些時候,阻止你成功的東西恰恰會是過于努力。這時候你需要暫停一下,平緩你的思緒,換一種方法或許能帶給你不一樣的效果。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450346.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450346.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450346.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

javaScript復習

ES6字符串方法: //console.log(String.prototype);var str "abcdefabc";//console.log(str.includes("a"));//結果true//console.log(str.includes("abf"));//結果false//console.log(str.startsWith("d"));//false//cons…

STS的安裝教程-鵬鵬

STS全稱Spring Tools Suite。 簡介:Spring Tools Suite (STS)其實就是一個被包裝過的Eclipse,主要用于快速的開發Spring項目,我們不用再去編輯繁瑣的xml配置文件,而是由工具自動生成。STS有兩種安裝方式,一種是直接在E…

final的用法

final 根據程序上下文環境,Java關鍵字final有“這是無法改變的”或者“終態的”含義,它可以修飾非抽象類、非抽象類成員方法和變量。你可能出于兩種理解而需要阻止改變:設計或效率。 final類不能被繼承,沒有子類,f…

愛恨交織的編程語言 是什么吸引了你

摘要:每門編程語言都有自身獨特的地方,那么為什么有些語言會一直存活在我們周圍,而有些語言卻逐漸被人淡忘,是什么吸引你? 每名程序員至少知道兩門以上的編程語言,有些甚至不是所謂的編程語言(比…

Unable to parse the date: 2017-12-30 日期格式轉化失敗

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 報錯如題, 日期格式轉化失敗。 原因:參數是2017-09-23 這種格式,代碼卻是寫的轉為: &qu…

linux邏輯卷管理

2019獨角獸企業重金招聘Python工程師標準>>> 摘要: Linux用戶安裝Linux操作系統時遇到的一個最常見的難以決定的問題就是如何正確地給評估各分區大小,以分配合適的硬盤空間。而遇到出現某個分區空間耗盡時,解決的方法通常是使用符…

[LeedCode]921. 使括號有效的最少添加

題目描述: 給定一個由 ( 和 ) 括號組成的字符串 S,我們需要添加最少的括號( ( 或是 ),可以在任何位置),以使得到的括號字符串有效。從形式上講,只有滿足下面幾點之一,括號字符串才是…

abstract的一些用法

abstract(抽象)修飾符,可以修飾類和方法 1,abstract修飾類,會使這個類成為一個抽象類,這個類將不能生成對象實例,但可以做為對象變量聲明的類型,也就是編譯…

github 如何設置項目的語言顯示

github 會根據一個項目文件最多的那個種類的文件顯示為對應的語言項目 如果想讓整個項目顯示為 HTML 項目, 需要進行以下步驟的設置 1.在根目錄下創建一個文件 .gitattributescreate .gitattributes2.在 .gitattributes 內編輯以下內容: *.js linguist-languageHTML…

C++提高進階,你知道多少?

C從零開始 ——何謂編程 引言 曾經有些人問我問題,問得都是一些很基礎的問題,但這些人卻已經能使用VC編一個對話框界面來進行必要的操作或者是文檔/視界面來實時接收端口數據并動態顯示曲線(還使用了多線程技術),卻連…

POJ 3352 Road Construction ; POJ 3177 Redundant Paths (雙聯通)

這兩題好像是一樣的,就是3177要去掉重邊。 但是為什么要去重邊呢??????我認為如果有重邊的話,應該也要考慮在內才是。 這兩題我用了求割邊,在去掉割邊,用DFS縮…

postman界面變成了左右結構怎么辦

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 在左上角 file -- settongs中設置一下:

面向對象階段個人總結

面向對象階段的個人總結 我個人對面相對向的總結。我想到了我認為比較好的方法,就是對照每次學習一個大模塊的前的章節目錄進行回顧總結,比如我們這階段學習是面向對象的課程,下面我就來按照章節 目錄進行一個系統…

1.springboot:入門程序

一、Spring Boot 簡介 官網英文: Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can “just run”. We take an opinionated view of the Spring platform and third-party libraries so you can get st…

2018.12.18運算符,分支結構(循環),異常處理,函數

1復習 <!DOCTYPE html><html><head> <meta charset"UTF-8"> <title>復習預習</title> <style> .b { /* 作用域: {}產生的, {作用域開始的標識, }作用域結束的標識 */ /*出現在作用域中的所有內…

javax.ws.rs.NotSupportedException: Cannot consume content type

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 報錯如題&#xff1a;javax.ws.rs.NotSupportedException: Cannot consume content type 解決&#xff1a;使用postman發送 post 請求訪…

java異常預習

java中的異常捕獲結構有try&#xff0c;catch&#xff0c;finally三部分組成。其中&#xff0c;try語句塊存放的是可能發生異常的java語句&#xff1b;catch程序塊在try語句塊之后&#xff0c;用來激發被捕獲的異常&#xff1b;finally語句塊是異常處理結構的最后執行部分&…

【親測有效】Kali Linux無法安裝網易云音樂的解決方案

問題描述 由于 Kali Linux 的內核是基于 Debian 的&#xff0c;我們在安裝網易云音樂的時候更偏向于選擇安裝網易云音樂 v1.1.0 deepin15&#xff08;64位&#xff09; 的包&#xff0c;可是我發現在安裝過程中&#xff0c;無法定位 libqcef1 軟件包&#xff0c;對于很多鐘愛網…

C/C++函數名修飾約定

函數名字修飾&#xff08;Decorated Name&#xff09;方式 函數的名字修飾&#xff08;Decorated Name&#xff09;就是編譯器在編譯期間創建的一個字符串&#xff0c;用來指明函數的定義或原型。 正在裝載數據…… LINK程序或其他工具有時需要指定函數的名字修飾來定位函數的…

設計模式中類之間的關系

設計模式 個人感覺設計模式是程序員的核心技能 &#xff0c;然后看了一些設計模式的書&#xff0c;都是講設計模式的一些理論&#xff0c;放在實現上都有點模糊&#xff0c;后來圖書館看到一本《設計模式的藝術》&#xff0c;感覺很不錯&#xff0c;有一些比較具體且容易理解的…