
做javaweb已經有一段時間,雖然算不上大牛,但也積累了一些經驗,最近主導公司一個項目的架構。同時指導新人,發現了新人身上存在的一些問題。我其實還算有耐心。但他們有些問題讓我很抓狂。想起我剛工作時師傅抓狂的表情,我覺得有必要給剛畢業和剛入職場的程序員一些建議。
學習的態度和方法很重要
剛工作不久肯定很多東西都不會,學校學的和真實的項目差很多,培訓機構也只能教你一些表面功夫,你會經歷各種異常和報錯,不要恐慌,利用百度和谷歌,盡快和他們混個臉熟。
學會js的debug、ajax請求、表單提交、傳參、json解析等基本知識,將數據的傳遞搞清楚,程序異常了先自己找找原因,debug試試,是js錯誤還是前段值沒傳過來,是后端變量名字沒對上還是配置檔配錯了,仔細檢查檢查,不要一報錯就找人解決,盡量自己找出解決方法,如果實在解決不了再去找同事幫忙,最好連同幾個問題一起去問,別人也有工作要忙,經常打斷會降低工作效率,影響別人的進度。
問問題前想好自己的問題再說,你可能會問,問問題都不會嗎,是的,很多人不太注意自己溝通表達的方式。
我帶的一個新人,每次問問題都是一堆語氣詞,你看,怎么怎么著,等著我回復,然后怎么怎么著,又等著我回復,說了一堆和問題不太相關的話,最后我實在忍不住,打斷他說你到底想問什么,他才說出自己的問題。
問問題前在自己腦子里過一邊,簡潔的提出問題,再描述現象
有時別人給出一個具體方案沒有解釋清楚,我們也懂為什么時,在時間和條件允許的情況下去請教清楚:
我剛開始工作領導是不讓用system.out.println來輸出的,一定要用logger,我就不明白為什么,之前教的就這么用啊,但是改起來也不費勁,我也沒詳細去問,直到后來接的一個項目,里面有很多system.out.println輸出,你在控制臺只能看到輸出根本找不到是哪個類哪個方法輸出的,我才明白為什么。
學習學習再學習 練習練習再練習
想要成為一個頂尖高手,關鍵是刻意練習,成為一個優秀的程序員,不停地學習和練習是必須的。
新人剛開始時迷茫是很正常,想要努力學習卻沒有方向。多去問問前輩和同事還有領導,和他們溝通學習的方向,記住成長比成功更重要。
軟件技術更新速度飛快,非關系型數據庫、nodejs、容器技術、h5 、前后端分離、到現在react ironic 一套搞定ios android 微信公眾號,你可能剛學會一個新技術又出來一個更穩定更好用的,所以自學能力非常重要,要時刻保持對新技術的敏感,不一定要精通,也不要出了什么都去學,一般新技術的產生都是為了解決現有技術的瓶頸,了解它產生的背景,以及要解決的問題很重要。
我們剛工作碰到的肯定是別人已經搭好框架的項目,我們寫代碼只是填充其血肉,我們很少思考他為什么這么寫,這些配置都有什么用,換成別的行不行,有了一定基礎后要試著嘗試自己從0搭建一個項目,這樣你就能明白這些過濾器、攔截器、插件、依賴的作用,對你的能力有很大的提升。
如果碰上一個剛起步的新項目會是一個很好的機會,你會經歷整個架構的演變,碰到很多坑和問題,這些都是很寶貴的經驗。
有了一些小想法或者新技術自己寫個小項目試試,慢慢的你的經驗會越來越豐富,而不是僅僅知道公司的項目,下班少去看電視劇,玩游戲,自己多實踐,寫寫東西,等一個問題順利解決或實現了一個小功能,你會體會到無比的成就感。
不要依賴技術大牛
很長一段時間,我在碰到自己解決不了的問題時,都回去問公司里的大牛,感覺很可靠也很厲害,所有的問題都能解決,雖然問題是很快的解決了,但是很少有自己的思考,說白了就是懶,能靠著著別人。后來離開了這個大牛,遇到了問題只能自己死磕,就是一段時間的死磕是自己學到了很多知識,看懂了很多比較底層的原理,也變成了幫別人解決問題的人,提升很大。
養成看源碼的習慣
剛開始的時候我也很懼怕看源碼,一個是懶,再就是覺得自己看不懂,后來沒辦法,代碼出問題找不到原因,只能硬著頭皮跟進去看,開始的確很費勁,看多了就能了解個大概了,你可以了解到一些技術細節,系統的看源碼可以學習別人的編程思想,這里推薦學java的同學有時間去研究一下spring的源碼,幫助多多。
代碼規范
代碼規范很重要,不要以為代碼是給機器讀的就寫的很隨意,代碼是給人看的,你不可能在這干一輩子,總有一天有人要接過你的代碼,如果你的代碼只有你能看懂,你能想到和你交接的人的心情嗎,肯定很想從新寫一遍,規范其實也不用非常嚴格,規范不是限制,下面給出一些常見的java規范:
- 除了靜態變量,大部分標識符使用駝峰法則,標識符能準確的表達出它所代表的意義,不要使用supplier1、 service2、aaa、bbb等,包名小寫,類名首字母大寫,其他文件首字母都小寫。
- 狀態、類型、參數名稱不要直接使用字符串或數字等比較,除非只有一個類中使用
這么寫別人根本不知道2是什么狀態 if(orderStatus.equels(2){ xxxx } 正確的寫法 public interface OrderStatus{ public static final int ORDERSTATUS_NEW = 1;//新建 public static final int ORDERSTATUS_PAID = 2;//已支付 public static final int ORDERSTATUS_DELIVERY = 3;//已發貨 } if(orderStatus.equels(OrderStatus.ORDERSTATUS_PAID){ xxxx }
- 注釋掉的測試代碼或不用的類請盡快刪掉,如果還有用的請添加FIXME+注釋,否則時間長了自己也不知道為什么注釋掉,代碼越來越多不好維護
- 編譯工具的format要統一,在formatter代碼時最好不要全選整個類,而是只format編輯的方法,這樣如果大家同時修改一個類而formatter不同會導致更新代碼時大量的沖突
- 單個方法不要超過300行,類不要超過3000行,重構請參考《重構-改善既有代碼的設計》
- 盡量縮小變量的作用域,作用域過大可能回引起很多想不到的bug。
- 如果代碼需要公用,盡量不要復制粘貼,請提到service或util中。
做程序員對很多人其實很苦,你是否因為有“錢景“加入這個行業,你是否真的有興趣長時間對著電腦敲代碼,你能否因為一個小問題一晚上找不到原因繼續堅持,如果你想好了就腳踏實地的努力,我們一起共同學習。