程序員如何一個人干幾個人的活?

如題,發現自己的編程效率很低,自己的任務經常加班加點還做不完。

聽說有的人一個人能幹幾個人的活,這是怎麼做到的?


如果把程序員看作一個狀態機,工作的時候,有四種狀態。

1,做什麼?

2,怎麼做?

3,做!

4,做錯了。

酌情跳轉1或2,開始新一輪的循環。

要效率高,有兩個方向,一是減少迭代次數,二是加快迭代頻率。

準確的需求理解,良好的架構設計,可以減少迭代次數,但往往需要對業務的深刻理解,和多年的編程經驗,有時並不容易。

另一個方式是,不追求細枝末節,抓主要矛盾,先上線主要功能,驗證修改,再上次要功能,加快迭代速度,不求一次做對。這在進入一個新領域時,特別常用。

具體到實踐上,架構設計用方法一,功能開發用方法二。

如果還是學生,就不用管那麼多,多寫code,有些坑必須要踩,錯必須要犯,之後才談得上效率。

不是在書寫bug,就是在發現bug。


要做到一個人干幾個人的活,必須要有「凡是重複的事情,必須讓機器去做」的思維方式。

這種思維方式體現,你在編程的過程中至少必須要做到一下三點:

  • 工具化
  • 腳本化
  • 自動化

如果你能做到以上幾點,那麼基本就算入門了,一個人至少可以干5-10個人活了

1. 工具化

凡是有工具能完成的工作,必須交給工具去完成

現在編程拼的一條就是誰的生產力工具發達。如今輔助編程的工具成千上萬,覆蓋各個方面。極端點說吧,如果你開發網站,現在還需要不斷按F5來看結果,那麼你的開發技能還不夠專業。我使用的一寫工具來輔助我開發,包括不限於一下一些功能:

  • 自動刷新瀏覽器頁面
  • 檢查語法錯誤
  • 檢查代碼風格
  • 檢查代碼質量
  • 找出重複代碼
  • 格式化代碼
  • 壓縮代碼
  • 導出API文檔
  • 測試
  • 版本控制
  • 依賴管理

等等,詳細可以看看這個回答:前端工程師都有用哪些比較靠譜的小工具? - 知乎

這些工具大多是行業標準的編程輔助工具,工具導出的結果都是專業領域相對最好的建議和代碼質量,所以可以放心大膽的使用。很多初級程序員,甚至高級程序員會把大量時間放在尋找一些諸如「逗號點錯地方」或者"括弧括的位置不對"等這些小問題,當你把這些重複的工作,交給了工具去做,你將節省大量反覆查看代碼的時間。

2. 腳本化

任何工作都是有個工作流程,就算你有了工具,讓工具按照順序一個一個執行,也是需要有所考量的,但是當你每次開發時候,按順序一個一個執行這些工具的時候,也是會浪費很多時間。尤其是那種每次寫完代碼,都要把必要工具運行一遍的程序,那這個手動走流程這個步驟會讓你抓狂。

所以這個時候,你需要找一款功能強大的工作流程腳本工具,也就是構建工具,Javascript有gulp和grunt,php有robo和phing,c有make等等基本上每款語言都會推出相應的工程構建工具。編寫構建腳本,讓全部流程打一個命令就完成,這將會給你節省更多的時間。

3.自動化

「凡是重複的事情,必須讓機器去做」

你一次一次打入腳本命令,那是費人精力,費人時間的做法,這個時候你要想辦法讓他自動化。

我的自動化主要是兩個方面:

1) 代碼變化監控

這個自動化就是只要代碼有變化,就會立刻執行構建腳本,並進行單元測試;如果是開發網站,那麼瀏覽器應該是自動刷新當前頁面的,這是本地的自動化。這裡用的工具主要是watch和livereload技術。

2)持續集成

持續集成就是版本控制庫有變化,那麼就更新代碼庫,執行構建腳本,並進行測試最後給出報告,有錯就會通知開發者。這個作業基本在第一次配置好持續集成項目後,以後持續集成系統就會自動更新代碼並構建測試了,無需有多餘人員監控,大大節省人力資源(可以少請一名測試人員了)。這是代碼庫的自動化

詳細看: 作為 IT 從業人員,你覺得有什麼工具大大提高了你的工作效率? 中「持續集成」的部分

當你完成了工具化,腳本化,自動化後,你大致可以算是一個人幹了5-10個人的活了,也算是入門了,接下來,你要繼續提高你的編程效率,那麼你就要研究一下以下的一些概念,這樣你就可以更有效率地編寫出更出色的程序軟體了:

  • 絕不重複代碼,有相似的代碼一定抽象成一個函數或整合成設計模式
  • 凡是有第三方庫可以完成的工作,盡量是用第三方庫
  • 第三方庫必須使用依賴管理工具進行管理
  • 必須編寫單元測試,如果能測試驅動開發更好
  • 重構
  • 敏捷開發


優秀程序員之所以能一個人頂一個團隊,絕對不是因為打字快、肯熬夜、吃苦耐勞寫一堆重複的業務代碼。而是靠足夠的經驗來跳過低級bug、繞過很多框架和庫的大坑。憑什麼人家一上午寫完的代碼又快又好,比你吭哧吭哧熬了三天搜了好幾個開源庫改了無數bug的還快還穩定?答案就是所有的坑人家之前都掉進去過,只是接受教訓不會再摔倒在同一處而已。

編程不是搬磚,水平高低不僅會在完成速度上有成倍的差異,成品質量也是天差地遠的。對性能和安全性要求越高,差距就越懸殊。一個人不僅可能幹幾個人的活,甚至還能幹那幾個人無論如何都幹不了的活。

除此之外,團隊成員的溝通要多少成本?怎樣保證所有人對需求和規範理解都一致?每天有多少時間花在開會、跟蹤進度、等待被其他人阻塞的功能和Code Review上?如果團隊水平參差不齊,配合又不夠默契的話,這種時間損耗可能會佔到三分之一甚至一半以上。但一個人可以保持專註高效,溝通和進度規劃的成本幾乎為零。

除了這兩點最明顯的之外,還有一件事不得不指出:能夠以一頂N的資深程序員,在產品團隊面前是有話語權的。除了技術實力足夠之外,對產品設計本身的經驗也不輸於一般的產品經理了。很多時候軟體的bug和反覆修改並不來自技術,而來自產品的瞎指揮。如果技術團隊面對產品經理也有足夠權威的話,節約下來的這部分時間甚至比前面說的兩點更為可觀。


你現在給大學生寫作業,你也能一個人做幾個人的作業。


我以一人之力寫了全組的bug。嗯。


編程,其實大部分時間是浪費掉的,你要做的比別人好,比別人快,只有一個要點

好好寫設計文檔


有些人我一個可以頂他1000個,因為他戰鬥力是負值。

…………

完蛋,把自己繞坑裡去了。(●°u°●) 」


emmmm 其他人都不幹活。

天天準備面試,一讓他們幹活,他們就說:「我都要走的的人了,幹活有意義么?

可是這之前是你們寫的啊,也沒交接給我,現在出了問題。。。

他打斷我說:「早晚交接給你,趁機熟悉熟悉,多做點東西總沒錯,好了,別打擾我,準備面試呢!

就這樣,他們半年沒幹活,找了半年工作。

最後,忍不了了,媽的,每次安排五個人的工作,活最後我一個人干,天天吭哧吭哧加班。我發了封郵件給領導,說最近半年他們沒完成過一個功能。沒提交過任何一段代碼,不信查近半年SVN。

然後,領導給大家開了個會,非常隱晦地說他們工作不飽和。他們就炸了,全都要挾月底辭職,

領導害怕了,又給他們每人漲了2~4K 不等。

然後,他們這次更不幹活了,乾脆大大方方在工位看書,看視頻,這樣又過去了半年。

項目經理,覺得進度慢,他們就說我不出活,但是領導這次沒幫他們,直接把他們懟了。懟完月底他們真走了。

他們走後,我自己繼續做著之前五個人的活,輕鬆多了,心態也好了。

幾個月後,我一個大學同學要請他們新來的技術總監吃飯,叫上了我。我去一見面傻眼了,我擦,這不是我們組天天寫bug不幹活那小哥嘛!

吃飯的時候,很是尷尬,我想揭穿他,但他對我讚頌有加,各種敬我酒,說當年我們在一個組,全靠我了,整個組就我踏實幹活,他們呢就覺得公司沒啥發展,也沒心情幹活,瞎干玩!

順道問了下我的工資,我如實說了,他當時怒摔筷子,說見過傻逼沒見過我這麼傻逼。他之前在我們公司工資就是我二倍還多,以為我工資很高呢。這他媽也太欺負人了。

之後,他給我弄到他們公司了,工資翻倍了,現在在新公司一年多了,總共乾的活沒有之前一個月幹得多。想想當年一個人干好幾個人活,不禁覺得自己之前像條狗 ,好傻逼呀!

===

HeartKing:程序員如何轉行做廚師?


所謂全棧工程師:從摳圖、切圖;到前端頁面布局、css、js邏輯;到後端api、資料庫增刪查改;linux環境、運維腳本。全部一腳踢。

折騰過一年半載後,你就可以一人干多人活了。


保持對新技術的關注,自己動手對技術改進


無他,唯手熟爾。

經驗多了,走的彎路和掉的坑就少咯。


開發自己的東西輔助自己開發,如此循環,效率自然就越來越高了。


提高效率,簡單重複的東西自動做


1 公司

根據我的經驗,在公司幹活,絕大部分時間是改bug,少量時間用來開發新功能。而維護前人留下的代碼的bug——尤其是有伺服器相關的bug——是很蛋疼的事情。如果涉及前後端聯調,就更加噁心了,因為很可能對方會抬杠。最可怕的是,一旦重大bug的產生速度高過改的速度,那麼這個項目就已經死了。

在公司別說你一個人頂不了幾個人,就算你頂的了幾個人,你也堅持不久。肺腑之言。

2 獨立開發

個人開發有幾個小技巧:

善用問答社區(stackoverflow等,等於多了個資深技術指導),善用開源項目(github等,等於多了好多個程序員)和開源UI網站(阿里巴巴icon等,等於多了個美工);善於山寨(等於多了個產品經理)優秀的競爭對手;勇於重構已有代碼。

更重要的是,開發不要好高騖遠,什麼功能都想做,到最後什麼都做不出。抓住1~2個核心功能,做到堅如磐石即可。UI可以丑一點,核心功能一定要強。如果說你的app的核心功能就是UI,那不好意思,當我啥都沒說……

最後,就是勞逸結合。剛開始單幹時,我每天工作10+小時,2年後我每個禮拜不一定有10小時;大部分時間就是思考,醞釀,修修補補;除非有重大的新的功能要加上去。從長期來看,人的惰性的一面一定會肆無忌憚地表現出來,懂得堅持永遠比猛加班一陣然後去醫院躺著要好。


我現在在創業公司里,一個人搞定公司所有的技術問題,前段,api,後台程序,伺服器運維,資料庫維護,美工,性能優化,對了,還兼職財務出納,大概能頂10個人吧(|||¬ω¬)


學計算機相關課程的時候,三五個人組隊做期末大作業,一個人挑起了整個組~

這個算嗎 (瑟瑟發抖.jpg)


嗯……強行來XJB說一發……

找一家創業公司吧……找一家創業公司吧……找一家創業公司吧……(真的很磨練人,能磨練出各種技能)

先說下背景:實習的時候做後台開發,但是由於創業公司嘛,人手不夠……嗯……

-----------------------------日常工作狀態----------------------------------

我:嗯,API介面做完了,頁面什麼時候出一下?

前端:好,等活動做完的。

我:活動?什麼活動?

前端:XXXX,XXXX。

我:哦?這麼6?讓我看看……(他丫的,這逼是一邊看直播一邊寫……)

然後愉快的開始圍觀(一起看直播)……

----------------好吧,上面是扯淡的……下面才是日常-------------

我:嗯,API介面做完了,頁面你什麼時候出一下?

前端:好,等活動做完的。比較急。

……一天後……

我:你啥時候能做完?

前端:嗯……得幾天了……這次活動有點多……

我:好……

……一天後……

我:嗯,你懂得。

前端:→_→還沒弄完……

我:(你整天都搞啥呢……光顧著打爐石了吧……干!)額,好吧……要不你告訴我一下,這個***怎麼寫?

前端:Σ( ° △ °|||)︴?!哦,這樣,這樣,這樣……嗯……差不多就這樣……剩下的你再百度百度……

我:嗯……

……幾天後……

前端:嗯……我活動做完了,你頁面要怎麼做?

我:嗯……我做完了。

前端:Σ( ° △ °|||)︴還有這種操作?!

從此打開了新世界的大門……

從那以後安排工作讓我做後台功能的時候……就順便把頁面設計一塊給我了……

讓我一個人靜靜。。。

--------------------------------------------------------------------------------

好吧……雖然故事有一些杜撰誇張,但是確實來源於那段實習經歷。

從一個後台程序猿,到會寫那麼一丟丟前端頁面……確實是「得益於」(打個引號,確實不忍直視)創業公司,當時做完後台功能,實在閑得無聊……就自己YY寫了些頁面,然後就點開了新的技能樹……

最後說一下,頁面都是給運營用的頁面,所以基本就是本著能看就行的理念……沒啥複雜的設計和交互……


很多小企業的程序員不都是身兼多職的嗎?也就是典型的碼農。一個人干多人的活不難吧。難的是一個人干好, 多人的活


為了生活


逼急了什麼干不出來


推薦閱讀:

Google為什麼不為Android中的RecyclerView添加Item的點擊監聽器?
如何自定義隨機數函數?
怎樣理解或評價面向對象的編程技術?
如何從零基礎做出類似拳皇一類的動作類2D遊戲?
SPFA演算法可否取代Dijkstra演算法成為計算單源最短路徑的最優解?

TAG:程序員 | 編程 | 效率 |