打字速度對編程的影響大嗎?
本人打字極慢,程序員,指法很差,可能是小時候計算機接觸晚造成的。但感覺自己編程還行,編程的時候感覺也沒有那麼必要像聊天那麼快,因為要考慮很多東西,命名,設計模式等。由於擔心工作之後的工作環境非常「艱難」,最近想用vim。問題:現在再練指法提升打字速度,必要嗎?
無數所謂的「大牛」已經深刻地討論過這個問題了。。總結起來就是打字慢的人不能稱之為程序員。。I was trying to figure out which is the most important computer science course a CS student could ever take, and eventually realized it"s Typing 101.
- Steve Yegge
慢指的是打字速度低於60wpm(每分鐘60「詞」),當然這個標準有待商榷啦。。
至於打字快了有什麼好處,你想像一下「人肉」 交互解釋器(REPL)就知道了。。節省了無數在思考代碼與實現代碼之間的時間。。當然也不能矯枉過正,追求無腦的快感,除非你是 Perl 程序員。。安利一個練 typing 的鏈接:https://typing.io/既然題主提到了vim,那麼就說點可能離題的東西。
離題之前先簡單答下題,打字速度對編程影響不大。就算不論「打字速度」和「思考速度」的比較以及「大牛憋三分鐘寫十行代碼好過新手狂敲十分鐘」這些因人而異的東西,在IDE環境中,如果你追求最高輸入效率,其實應該是充分利用代碼補全和重構功能,你連續輸入大段文本的機會根本就不多。況且為了準確性,就算我打字速度足夠快,我也會優先選擇複製粘貼或代碼補全,減少輸入錯誤。
======================
下面離題說說vim,既然題主提到想跳vim的坑,作為vimer自然是歡迎的。但首先,vim,並不會提高你的打字速度,它充其量是提高你修改文本的速度而已(個人感覺對比普通的文本編輯器慣用方式至少提高50%以上)。
此外,我跳vim坑的最主要原因,根本不是打字速度,而是vim的操作方式是一套經過時間證明足夠有效率且已移值到眾多IDE和編輯器的通用操作方案。熟識了vim的操作,基本上能在
1. Linux伺服器命令行環境
2. Intellij (及Jetbrain系所有IDE)3. Eclipse4. Netbeans5. Visual Studio6. Sublime Text7. ranger / vifm ( 命令行狀態下的文件管理工具)中流利進行所有基本操作了。此外vim方便的文本對象,宏定義,正則查找替換,多重剪貼板(vim里叫register)都是普通文本編輯器沒法比的,只能說誰用誰知道。至於說提高操作速度對編程的影響,最大好處是減少不必要的精神消耗,比如說之前我選中個字元串,要把游標移動到字元串起點引號之前,ctrl+shift+右箭頭數下,後面的引號在不同的編輯器下還可能不會被選中,需要根據情況再敲一下shift+右箭頭。整個過程至少有三個關注點(不同的IDE可能對選中語法結構有特殊支持,但跨編輯器的通用的方案只此一種)。而在vim操作方式下 va「 三鍵搞定,省心。此外,雖然未必常見,但開發中總會有進入巔峰狀態的機會。比如說你憋著屎又想在去蹲坑之前幹完點什麼,有時就會進入巔峰狀態,思路突然異常清晰,胸有成竹就差敲進去了。這時操作流暢就能讓你保持思路活躍,成功實現目標,這時就特別有滿足感。老實說偶爾遇到一次這種狀態是開發中一種很大的樂趣,而熟練的操作手法能讓你抓住每一次這樣的機會。我有一同事,頭髮都白了,打字只用一個手指頭。他拿著這邊的高薪。
某公司雇了一個編程大牛,但是因為腕管綜合症什麼的,此人不能長期打字,於是該公司又給他雇了個打字員,於是大牛一切程序靠口述。比較悲催的是該打字員不懂編程,於是寫個簡單的循環,大牛得說上一大串「for 左括弧 int x = 0 分號 x 小於 10 分號 x++ 右括弧……」
這個效率題主可以自己想像一下,反正我聽到的時候簡直醉了。
當然,人家做的程序十分高大上,如其他答主所說,花在思考上的時間遠大於打字的時間,90%的思考夠效率,那剩下10%把思路轉換為代碼的工作,老闆不在乎他慢一點。
題主自己要是有那個水準,打字平平也就罷了。
最怕編程思維水平也不夠,雇你來寫點簡單的小程序,大失誤是不可能有的,要的就是你吃苦耐勞還廉價。如果是那樣的話,題主還是多練練打字吧。練打字沒有「年齡太大」一說,現在開始不晚,真的。
總結就是質量和速度至少得有一樣,當然兩者兼備是最好的。自己適合做哪種人我相信題主自己心裡清楚。加油。建議不要本末倒置。
寫一段代碼的時候,優秀的程序會考慮清楚這段代碼的意義,要做什麼,與其他模塊的關係,是否安全,是否需要銷毀對象,是否還能更優化一些,寫之前基本上大腦里已經運行了一遍了,這種情況下,是不可能突然沒了思路的。
優秀的程序員乾的是腦力活,而不是體力活。科幻電影中的程序員與現實中的程序員之區別—在線播放—優酷網,視頻高清在線觀看視頻
有影響。編程需要很多特殊字元。如果不專門練習一下,這個可能會打斷思路。總之不會很爽。建議用指法神器TypingMaster專門練習幾個小時。問題就解決了。有問題。就解決。不要拖著。解決這個問題很簡單,根本不會花太多時間。==========網上搜索Typing Master有相應的PC端軟體下載
什麼時候你覺得自己: 「這個習慣多少年了,要改起來肯定改不掉。」
或者:「這個東西這麼難,我雖然喜歡肯定是學不會的。」而放棄改善自己,我覺得是非常危險的。就我自己來說,曾經我的指法也並不標準,我用左手無名指按E,中指按R。
打字時間長了,左手明顯比右手類一些。這個習慣可能有十幾年之久,改起來麻煩嗎?不過幾天的事情,從此按鍵更加暢快了。
不過就程序來講,我寫Objective-C,雖然方法名變數名都比較長,但是IDE都有自動補全的啊,不就是敲幾個字母回車回車...一般來說思維清晰,速度不會怎麼慢的。反而會有打到一半,思路跟不上的情況。
樓上有人安利https://typing.io/其實我更推薦Learn to Type &<- 建議練習數字鍵的指法 我按(90-=)這幾個經常出錯 靠它調教好了。先說以提問人的情況來看,無論技術目前達到了哪個高度,流暢無障礙的編碼都會給您的工作效率帶來提升,我看很多同學討論鍵入是否有必要成為長板,但是與之相對的,提問人所說的短板明顯的狀況,還是值得用一兩周予以改善的吧!
說些題外話,我個人對高鍵入能力的價值看法。
很多人會講,技術不行,鍵入好有什麼用?技術很屌,鍵入不行依然多麼多麼風光。
——邏輯混亂。如果不理解為什麼這是邏輯混亂,這個……真沒必要往下繼續討論了。對初階程序員,應全力提高自己的工作效率,其中鍵入是最容易提升的能力短板。
對高階程序員,所能承擔項目複雜度上限很大程度上來源於合作成本,因此在同樣的技術條件下日均代碼量是非常重要的能力項,但是在這個階段鍵入在效率中的比例會沒有初期那麼高,還有諸如領域建模能力,層次化與分解問題的能力,簡化局部表達的語言控制能力等等。不管怎樣,圍繞輸出速度的各種能力中,鍵入能力依然是最容易提高的部分,且絕不會給其他能力帶來負擔,每個人都值得花一點時間來改善。
最後吹下牛,說下自己經歷中相關的體會。
初入行的時候對鍵入體會不深,已經能指法熟練飛快聊qq感覺夠用,相對的是開發環境開發工具熟練使用很重要。
做到核心程序員的時候,數據結構演算法熟練,語言特性建模技巧運用自如,這是我的產出高峰期,兩個我認為很有價值的能力,一個是積累了很多自己常用的函數庫,基礎代碼的重複開發率極低,包括數學字元串數據結構常用演算法甚至一些常見庫的簡易表達的封裝;另一個是局部化的編程方法,在編程的過程中每個時刻保證只考慮非常有限的內容,這需要對整體較好的駕馭分解能力做前提,輔以好的鍵入速度,編程如潑墨是非常暢快的,這個階段我專門去花一點時間練習了鍵盤輸入,也是這個階段感受到了普通鍵盤對手指的少許傷害,可能是習慣不好我會不自覺的擊鍵過重,05年的時候買了第一把很普通的機械鍵盤解決了這個問題。
該設計的時候設計,該思考的時候思考,該編碼的時候就專註於語法的表達,這種高效方法之下,鍵入的價值會不會被設計能力建模能力高低所影響,一望可知。再幾年後,轉去做了技術管理和核心技術方案設計,不在一線衝殺,。編碼能力慢慢滑坡,只有在QQ上聊得眉飛色舞的時候,擊鍵聲連成一片才會偶爾讓隔壁同事側目一下,也就這樣啦。
最後是我對年輕人的建議,如果想要做一個優秀的編碼者,熟練的鍵入和英文閱讀能力,對你的職業生涯有潛移默化的提升,不妨練好它吧。小時候看過中央台的科普節目,
裡面一個人二指禪打字(左手一個右手一個)。
後來節目介紹說這是tcpip協議發明人……對的,圖靈碗擁有者我司有一位資深程序員打字速度 10 秒 20 個英文字母左右。
真沒啥影響。工作量大的時候一個月也就1w行代碼,平均到每天400行吧。這才需要多久啊~~~大部分時間還是在思考和調試……所以,思考速度太慢才真的是有影響的。
影響很大。你要知道打字的速度是遠遠跟不上思路的,你打字的速度約慢,思路越可能被中斷。
一個人 不擅長用筆記本鍵盤打字.. 而他又不是去星巴克裝逼 而是去另外的工作地點幹活所以他左手提著mac 右手拎著青軸鍵盤 看起來像個傻逼..
從java程序員的角度來講,打字速度對java編程的(速度)影響真心不大,打字慢了可能會影響到心情吧,畢竟不像電影里演的那麼酷。但是實際工作中的場景真的像電影中的那樣嗎,當然不是。
個人愚見,影響java(對,我說的僅限於java開發)編程速度的是代碼編輯器。雖然很多人可以用vim寫程序寫的很爽,看起來很酷,但是做java開發真正方便的工具我認為還是IDE,畢竟編譯,運行,調試,打包等一系列的功能都集成了,功能強大方便使用才是提升編程速度的王道,加上可視化的操作界面對於入門級的程序員來講用起來門檻低。要是拿Android開發來講的話(都知道Android也是java開發),IDE對速度的提升就更明顯了。因為Android開發中的一個重要環節是UI開發,而影響UI編程速度的重要一點就是IDE的自動提示功能。一個自動提示功能強大的IDE(如Android Studio)簡直就是程序員的天堂了,敲兩三個字就可以提示一大串備選項,編程速度不知道能提升多少倍。不得不說Android Studio在寫layout代碼時自動提示功能秒殺eclipse。所以隨著IDE越來越強大,打字速度的重要性越來越被弱化了。
另外一個影響java編程速度的是大腦,是思路,是技術本身。如果一個需求拿到手,就已經成竹在胸的話,接下來要做的無非是把思路「搬出來」。但是實際情況是什麼呢,用戶出需求,和用戶開會,和項目經理開會,分工,編碼,測試,改需求,開會,,,但是不可否認技術好的程序員編程的速度確實要快,而且質量好。但是打字速度顯得也沒有那麼重要。
打字速度,vim,IDE等這些東西都是工具,就像自行車是交通工具一樣。如果你是大牛,當然可以可以把一些精力放在研究各個工具孰優孰劣上,但是入門級的程序員,最重要的還是技術本身。不管黑貓白貓,能抓耗子的才是好貓。重點在於「抓耗子」,而不是什麼顏色的貓。關係不大。而且咱們軟體師傅講求的是用最少的動作,做最大的產出。答主接觸過不少裝逼犯,甚至喜歡編輯模版到ide里,用的時候通過幾次擊鍵搞出來~~~
有個東西叫visual studio 2015,打字速度一般,堆代碼也會很快的。
學習vim or emacs不錯的,因為有快捷鍵啊,寫代碼成本低啊,但是還是得好好提手速吧。這是個簡單地經濟學問題,你做事兒要考慮成本和收益。同樣的收益下,你需要盡量減少成本,這樣你就能以同樣成本寫更多代碼獲得更多練習。建議樓主學習CS的同時補充下經濟學的知識。
我覺得跟ide的自動補全和腦子是否能清醒的實現各種快速邏輯轉換關係更大
匿了,
我這麼跟你說吧,很多時候我一個月寫的代碼都不到200行……
推薦閱讀:
※為什麼同為系統級編程語言,Rust 能擁有現代構建/包管理工具,C++ 卻不能?
※為什麼C++調用空指針對象的成員函數可以運行通過?
※在函數內new一個對象,如果作為引用返回,是不是就可以不用delete了?
※為什麼一個空的class的大小是1個位元組?
※C++非同步回調如何更優雅?