剛好最近 Coding Girls 有同學問了這樣一個問題:
在現公司的開發日常已經脫離 hard 模式,就是日常寫業務無壓力,程式碼質量也 OK,但是寫完業務就沒事了。這樣子應該怎樣提升?
其實在工作一年多左右的時間,我也曾提出過這樣的問題。不知道是否曾有人也有過一樣的煩惱,就是當你能夠 handle 現在的工作之後,要怎麼提升自己?這個問題無關性別,任誰都會有。所以還是想根據自己的經歷來寫一寫。如若有相似之處,純屬正常。
這裡是 PHP 的社群,我們就基於 PHP 來講。相信很多剛開始接觸 PHP 的人,甚至是剛開始接觸程式碼的人,百分之七十都是先接觸的框架。比如我。Laravel 是個極度優秀的框架,最優秀的地方在於,它能夠讓一個連 SQL 都寫不好的女同學愛上寫程式碼。很多開箱即用的工具、各種技術教程帖子使得我們不需要在深究其原理的基礎上,寫出自己的畢業設計,寫出自己在程式碼世界的一丟丟自信和存在感,從此一腳邁進了程式碼世界的大門。
於是乎你帶著剛學會對框架的使用和一些在學校學得零零散散的稍微能理解的知識開始參加工作了。工作之後你突然發現自己對框架的理解還不夠深入,於是你開始從頭開始啃各種文件:
- PHP 的文件,瞭解了每個函式的使用。
- Composer 文件,開始折騰各種潮流包。
- Laravel 的文件,如何用 ORM 寫出複雜的 SQL,控制反轉到底是個什麼鬼?
- Redis 的文件,學會它,定時任務佇列快取等優化開始不在話下。
- Vue 的文件,可能你覺得只掌握一點點前端知識還不夠,於是你又開始折騰。
甚至隨著公司業務的發展,你會開始跟著你的團隊接觸一些對你而言還很高大上的技術,微服務、分散式、讀寫分離、主從備份等等~ 甚至你還開始嘗試寫開源專案,但是遲遲不肯釋出。
慢慢開始覺得自己變得牛逼了,因為產品同學的需求你能很快完成了,測試同學即使提出來 bug,那也是你沒好好看需求文件或者粗心寫錯了個符號導致的。工作變得越來越沒有難度,於是乎你開始不知足了,這時候如果公司沒能給你更多的挑戰,你就會開始想著要換份工作了。
但是一般換份挑戰無非是換個工作環境、組織、換個框架或者多兼顧一個語言的事情,當你適應這一切之後,你又開始會覺得好無聊,沒有挑戰的同時又對重複勞累的加班工作產生厭倦,終於你開始連週末也不想寫程式碼了。興許你會換個打發時間的事情,比如學一門樂器、談個戀愛、養個貓、實現一些 Flag ~~
這樣真的好嗎? 你開始這麼問自己。即便能做很多事情,卻仍舊有很多事情是自己做不了的。你開始有種比上不足比下有餘的感覺,你開始慌了,開始覺得迷茫、不知所措。於是乎你開始抓著身邊的人問,這該怎麼辦才好?可是當有人給你提出換行換崗的建議時,你卻並不想如此。是因為你熱愛還是因為除此以外你不知道做什麼好了?Anyway~ 我希望下面的內容能給有著同樣疑惑的你帶來些許答案。
提出疑問
提出什麼疑問?
- 你的程式碼質量真的 OK 嗎?你是拿什麼來衡量自己的程式碼質量呢?拿什麼來保證介面的健壯性嗎?你知道你寫的介面能承受多少請求數和併發量嗎?百萬級的資料你能 Handle,千萬級甚至 PB 級呢?
- 日常寫業務無壓力?平均每寫一個功能測試給你提多少缺陷你數過嗎?你知道你寫的功能有多少人在用嗎?你寫的功能別人用得可還順手嗎?生產上你寫的功能可曾產生過「不可能出現」的髒資料?
- 比如某天系統突然崩了十幾分鍾,CTO 和幾個技術組長出面解決了。你可曾去了解過為什麼崩了?如何解決的?瞭解到什麼程度?(比如有慢 SQL,遇到慢 SQL 導致系統阻塞怎麼解決,慢 SQL 是怎麼產生的,平日裡要如何避免慢 SQL ?怎麼根據崩了發現是慢 SQL 的?)
- 把框架文件看熟看透了就夠了嗎?Laravel 的框架為什麼要這麼設計?為什麼我們都說它好?它跟其他框架的區別在哪裡?有去翻過底層的程式碼嗎?
- PHP 函式的背後都用了什麼樣的演算法來保證其執行的高效?瞭解過嗎?
脫離 hard 模式,究竟是事情很 easy 還是因為你把自己置身於 easy 就算了?
積極主動
根據上面隨意提出的疑問再延伸出更多的疑問,就可以舉出大把你需要學習的內容了。
- MySQL 你真的會優化嗎?優化的原理是什麼?為什麼有些 SQL 語句邏輯相同,效能差異卻如此巨大?框架是怎麼和資料庫連線的,事務是怎麼處理的?為什麼加了索引會讓查詢變快?如何更好的利用索引?order by 是怎麼工作的?
- Nginx 你真的會用嗎?除了拿來簡單的部署專案,你知道如何設定反向代理來實現負載均衡嗎?跨域和快取的問題該如何處理?
- Linux 熟練嗎?命令都會用了?Linux 系統中出現大量不可中斷程式和殭屍程式怎麼辦?如何迅速分析出系統CPU的瓶頸在哪裡?Linux 記憶體是怎麼工作的?程式切換的過程是怎麼樣的?磁碟 I/O 效能優化有幾個思路?怎麼使用 tcpdump 和 Wireshark 分析網路流量?怎麼緩解 DDoS 攻擊帶來的效能下降問題?服務吞吐量下降很厲害,怎麼分析?
接下來就不詳細列舉了,比如基本崗位技能 Web 協議、Redis 等,內功心法之資料結構、演算法、設計模式等等~ 如果真的不知道自己有啥技能上的欠缺需要補充,看看自己心儀公司心儀崗位的招聘簡歷唄~
提出疑問,知曉自己的缺漏,下一步就是自己想辦法補缺了。上面的問題,你知道答案嗎?此刻的你是否有複製黏貼百度答案的衝動,如果還有,那就去找到答案吧!
在這個資源共享的時代,學習成本可以說幾乎為零。你能提出的疑問幾乎都有人提出過,也有人解答過。如若你需要更加系統更加深入的理解,書籍、視訊、課程,網上的資源大把。買了就踏踏實實的去看,辛苦加班賺回來的錢不要浪費了。反正沒見過厲害的人說他們是不看書的。
- 知識付費的時代,各大社群現在都多多少少有在運營相關技能的教程
- 極客、慕課也有很多深入理解底層原理的好課程
- 想補充相關的知識該去看什麼書,實在找不到人推薦你就上知乎
寫點什麼
學而不思則罔,思而不學則殆。有道是學以致用,如若看完一個知識點,把自己的理解寫下來,自己能看懂,別人也能看懂,還能把不懂的人講到懂,那你就是真的懂啦!還是那句話,沒見過哪個大牛沒有輸出自己的知識見解的。So,看了書、學了視訊課程之後,請務必要強迫自己寫點什麼。知識點筆記、讀後感等等~
加入圈子
一個人走得快,但一群人能走得更遠。於我個人的經歷而言,我的技術成長離不開圈子裡面的人的幫助。因為偶像安正超,來到 Laravel China 結識了站長 Summer,進而結識了更多社群裡的人。在一次次交流探討、耳濡目染之下,知道了自己的不足勤加修煉的同時,也知道有誰能解答我的問題、有誰願意與我探討,還有誰和我一起互相監督共同成長。一路走來,十分感謝伴我同行的人、耐心幫助我的人、願意花費自己的時間給予我建議的人。
因此,去積極加入圈子,或者是自己開闢圈子吧。尋求幫助、或者幫助別人。有道是教學相長,互相裹挾成長,一個人你學不下,一群人你旁聽總該有點收穫吧。花點時間建立自己的技能圈子,去找厲害優秀的人跟著他們學習,有什麼難的呢?
題外話
在這裡列出一大堆學習資源可能無法保證會對你有用。更何況學習本身還帶著堅持、自律、方法這樣的標籤去將我們很現實般地劃分為三六九等~ 需要學習的東西還很多,對程式設計師而言,知識的更新速度之快是我們永遠始料未及的。有道是,路漫漫其修遠兮,不管工作了多少年,時刻想著如何去提升自己是人生的一門必修課,你不想可不行啊!
如果有需要,可以在帖子下面留言,我或者社群裡的熱心的同學都會跟你分享我們學過的可能對你有用的課程、有用的書。比如網路相關的書有哪些值得一看~ 社群本身就是個很大的圈子,好好利用起來呀!
另外,一個程式設計師的成長肯定不僅僅只有技術,還有職場、管理、交際圈等等~ 如若有機會,再來寫個《職業篇》吧!(因為現在暫時還不夠格呀喵~)