寫代碼工作2年有餘,可總感覺在原地踏步,如何突破?
專科狗畢業之後一直從事寫代碼的行業,搞搞C#,作為一個寫代碼的渣渣,自我感覺總是沒有進步,代碼寫來寫去總是浮於表面,深層次的東西總是了解的不透徹,如何才能更進一步的提升自己的編碼水平和認知?
學所有東西都是類似的規律。我試圖給出對大多數行業都適用的更普遍一些的觀點。
前期通過一段時間的奮力學習,能達到一個不錯的水平,也就是剛好能夠應付目前工作的水平。
然後如果沒有繼續深入鑽研的話,基本就在原地踏步,最多熟練度上去了。此時如果想尋求突破,最好要先想辦法知道,目前這個領域的尖端知識是什麼?難點是什麼?
那麼從哪裡能找到答案呢?
首先可以自己通過網路大量搜索相關內容,其次可以問行業大牛,再次可以看看行業經典的有深度的書籍(例如「趙三本」)。這樣一套過來以後,你基本知道自己哪方面不足了。
但是,搞工程和搞科研還有一點不一樣,搞工程需要實際項目的鍛煉。小池塘裡面的魚是養不大的,你需要更廣闊的海洋才能蛻變成更大的魚。
當你在所在的公司或者所在崗位已經沒有動力讓你繼續前進的時候(因為目前的技能已經足以應付當前工作),是適合該換公司或者換崗位了。
有人說過「興趣是最好的老師,其次是恥辱」,當你身邊都是牛逼閃閃的人物的時候,你多半就不會安於混日子了。如果寫代碼的時候只想著怎麼完成功能,永遠不會有突破的,除非功能本身需要技術上的突破。
一個好的程序員,要想著怎麼用最少的代碼,最簡潔的思想,去優雅地解決業務問題。有些人可能不相信,但是寫出漂亮的代碼,是一種藝術。同時好的程序員也是懶惰的,他們為了不用同一件事情做兩次,會瘋狂地把一件可能需要每天花5分鐘的事情用2天的時間解決掉,只為以後不用重複勞動。不要小看這個過程,很多精妙的想法就是在這個過程里產生的。(當然到了一個階段以後,你還要逐漸意識到不是所有事情都適合這麼干,還是要計算投入產出比,以及對項目時間的影響。但是這種思維訓練是寶貴的經驗。)
這樣的訓練過程,可以讓你理解框架里深層次的東西,就是它的Design Decisions。如果你不親自去思考類似的問題,你很難站在框架設計者的角度去衡量所有的選擇,以及為什麼做了現在的選擇。
與此同時,我仍然推薦鞏固基本的編程知識,詳見 0基礎學編程,是選擇python+mysql入手好,還是C#+sql sever好? - 周擎宇的回答你知道有個詞兒,叫瓶頸期跳槽么?
簡單的說下,開發人員幾個可以進步的點
1. 能寫10代碼完成的功能,別寫20行
這個不是從單單一個函數,一個類來說的。首先從總體上要做到DRY(don"t repeat yourself ),然後再考慮代碼的精簡2.要寫20行的代碼,別寫10行
這個是從代碼的健壯性來考利的,往往一個函數,很多時候核心代碼只有一行,但是前後的參數異常判斷,錯誤處理代碼卻要好多行。這些代碼99.999999%都不會生效,但是剩下那麼一點點小概率事件發生的之後,比如宇宙射線導致位反轉之後,就能夠觸發了。如果不寫,系統要麼神經錯亂,要麼直接掛掉。3.能調用(運算)10次,就不要調用(運算)20次。
程序怎麼才能運行的快,當然是什麼事情都不做最快了。往往一些函數,代碼塊會被無效的頻繁調用,適當的優化之後,可以減少調用次數的。盡量優化。4.解耦(代碼隔離,邏輯隔離,層隔離)以及流暢消息傳遞(函數調用,事件分發)
解耦往往要從設計模式,架構上去考慮,如何把一些混雜在一起的代碼做適當的分層,隔離以及解耦,這個需要很深層次的考慮。這也是寫代碼吸引人的地方。耦合度高的好處就是互相調用很方便。解耦和分層之後,帶來的問題就是互相調用不方便,如何保證解耦的情況下,進行順暢的互相訪問,這個就有很多設計模式的知識在裡面了。這些都是一直橫貫在日常的開發當中的,隨時考慮這些問題,隨時想辦法解決。層次自然慢慢提高了。你都說了深層的東西了解不透徹,那就去了解啊
C#的話我恰好有發言權——去看CLR是怎麼回事,去研究搞明白基本的設計模式和SOLID原則然後在你寫的程序里應用,去看Windows系統調用,去看SQL Internals,去看HTTP1.1的標準,等等……然後利用你學到的知識寫一些小程序驗證,然後慢慢擴大堅持下去就好了。但關鍵,第一是去做,第二是堅持。光迷茫是最沒用的。援引我同事的一句話:「你沒有感覺到你在進步是因為你沒有跳槽。」在公司這個大環境里你和其他同事在一起進步著,因為在同時前進步調一致所以很難感受到自身的進步。
轉行賣手機
學什麼東西都是一樣,初期簡單,興趣高。會有一段陡峭的進步期。到一定階段後興趣減弱,難點增加,進步開始趨向平緩。這時候如果放棄了,前面的就全白費了;如果不想費力得過且過,那就在這個水平蹲著了,提升也沒多大了;如果咬牙堅持,繼續保持濃厚的興趣,動力去學習,堅持一段時間後就能迎來第二個陡峭的進步期。但這個階段的長短就因人而異了。
先百度查一下大型網站部署需要哪些技術點,挑容易入手的逐步去學,然後你就能充當技術總監了。(畫大餅)最有效的是考PAT之類的大企業認可的證書,如果你不打算創業,只是打工,名企才是你的目標。
推薦閱讀:
※參加 Hackathon 發現 SDK 有 Bug 是什麼體驗?
※參加 Go Hack 17 是一種怎樣的體驗?
※「喬布斯在停車場和 Google 的 Eric 爭論面向對象編程的段子也廣為人知」,這個段子里他們爭論的具體內容是什麼?
※編程中什麼是「Context(上下文)」?
※如何養成良好的黑客思維?