做javaweb已經(jīng)有一段時間偎血,雖然算不上大牛,但也積累了一些經(jīng)驗雕沉,最近主導(dǎo)公司一個項目的架構(gòu)集乔。同時指導(dǎo)新人,發(fā)現(xiàn)了新人身上存在的一些問題坡椒。我其實還算有耐心扰路。但他們有些問題讓我很抓狂。想起我剛工作時師傅抓狂的表情倔叼,我覺得有必要給剛畢業(yè)和剛?cè)肼殘龅某绦騿T一些建議汗唱。
學(xué)習(xí)的態(tài)度和方法很重要
剛工作不久肯定很多東西都不會,學(xué)校學(xué)的和真實的項目差很多丈攒,培訓(xùn)機構(gòu)也只能教你一些表面功夫哩罪,你會經(jīng)歷各種異常和報錯,不要恐慌巡验,利用百度和谷歌际插,盡快和他們混個臉熟。
學(xué)會js的debug显设、ajax請求框弛、表單提交、傳參捕捂、json解析等基本知識瑟枫,將數(shù)據(jù)的傳遞搞清楚,程序異常了先自己找找原因指攒,debug試試力奋,是js錯誤還是前段值沒傳過來,是后端變量名字沒對上還是配置檔配錯了幽七,仔細(xì)檢查檢查,不要一報錯就找人解決溅呢,盡量自己找出解決方法澡屡,如果實在解決不了再去找同事幫忙猿挚,最好連同幾個問題一起去問,別人也有工作要忙驶鹉,經(jīng)常打斷會降低工作效率绩蜻,影響別人的進度。
問問題前想好自己的問題再說室埋,你可能會問办绝,問問題都不會嗎,是的姚淆,很多人不太注意自己溝通表達的方式孕蝉。
我?guī)У囊粋€新人,每次問問題都是一堆語氣詞腌逢,你看降淮,怎么怎么著,等著我回復(fù)搏讶,然后怎么怎么著佳鳖,又等著我回復(fù),說了一堆和問題不太相關(guān)的話媒惕,最后我實在忍不住系吩,打斷他說你到底想問什么,他才說出自己的問題妒蔚。
問問題前在自己腦子里過一邊穿挨,簡潔的提出問題,再描述現(xiàn)象
有時別人給出一個具體方案沒有解釋清楚面睛,我們也懂為什么時絮蒿,在時間和條件允許的情況下去請教清楚:
我剛開始工作領(lǐng)導(dǎo)是不讓用system.out.println來輸出的,一定要用logger叁鉴,我就不明白為什么土涝,之前教的就這么用啊,但是改起來也不費勁幌墓,我也沒詳細(xì)去問但壮,直到后來接的一個項目,里面有很多system.out.println輸出常侣,你在控制臺只能看到輸出根本找不到是哪個類哪個方法輸出的蜡饵,我才明白為什么。
學(xué)習(xí)學(xué)習(xí)再學(xué)習(xí) 練習(xí)練習(xí)再練習(xí)
想要成為一個頂尖高手胳施,關(guān)鍵是刻意練習(xí)溯祸,成為一個優(yōu)秀的程序員,不停地學(xué)習(xí)和練習(xí)是必須的。
新人剛開始時迷茫是很正常焦辅,想要努力學(xué)習(xí)卻沒有方向博杖。多去問問前輩和同事還有領(lǐng)導(dǎo),和他們溝通學(xué)習(xí)的方向筷登,記住成長比成功更重要剃根。
軟件技術(shù)更新速度飛快,非關(guān)系型數(shù)據(jù)庫前方、nodejs狈醉、容器技術(shù)、h5 惠险、前后端分離苗傅、到現(xiàn)在react ironic 一套搞定ios android 微信公眾號,你可能剛學(xué)會一個新技術(shù)又出來一個更穩(wěn)定更好用的莺匠,所以自學(xué)能力非常重要金吗,要時刻保持對新技術(shù)的敏感,不一定要精通趣竣,也不要出了什么都去學(xué)摇庙,一般新技術(shù)的產(chǎn)生都是為了解決現(xiàn)有技術(shù)的瓶頸,了解它產(chǎn)生的背景遥缕,以及要解決的問題很重要卫袒。
我們剛工作碰到的肯定是別人已經(jīng)搭好框架的項目,我們寫代碼只是填充其血肉单匣,我們很少思考他為什么這么寫夕凝,這些配置都有什么用,換成別的行不行户秤,有了一定基礎(chǔ)后要試著嘗試自己從0搭建一個項目码秉,這樣你就能明白這些過濾器、攔截器鸡号、插件转砖、依賴的作用,對你的能力有很大的提升鲸伴。
如果碰上一個剛起步的新項目會是一個很好的機會府蔗,你會經(jīng)歷整個架構(gòu)的演變,碰到很多坑和問題汞窗,這些都是很寶貴的經(jīng)驗姓赤。
有了一些小想法或者新技術(shù)自己寫個小項目試試,慢慢的你的經(jīng)驗會越來越豐富仲吏,而不是僅僅知道公司的項目不铆,下班少去看電視劇蝌焚,玩游戲,自己多實踐狂男,寫寫東西综看,等一個問題順利解決或?qū)崿F(xiàn)了一個小功能,你會體會到無比的成就感岖食。
不要依賴技術(shù)大牛
很長一段時間,我在碰到自己解決不了的問題時舞吭,都回去問公司里的大牛泡垃,感覺很可靠也很厲害,所有的問題都能解決羡鸥,雖然問題是很快的解決了蔑穴,但是很少有自己的思考,說白了就是懶惧浴,能靠著著別人存和。后來離開了這個大牛,遇到了問題只能自己死磕衷旅,就是一段時間的死磕是自己學(xué)到了很多知識捐腿,看懂了很多比較底層的原理,也變成了幫別人解決問題的人柿顶,提升很大茄袖。
養(yǎng)成看源碼的習(xí)慣
剛開始的時候我也很懼怕看源碼,一個是懶嘁锯,再就是覺得自己看不懂宪祥,后來沒辦法,代碼出問題找不到原因家乘,只能硬著頭皮跟進去看蝗羊,開始的確很費勁,看多了就能了解個大概了仁锯,你可以了解到一些技術(shù)細(xì)節(jié)耀找,系統(tǒng)的看源碼可以學(xué)習(xí)別人的編程思想,這里推薦學(xué)java的同學(xué)有時間去研究一下spring的源碼扑馁,幫助多多涯呻。
代碼規(guī)范
代碼規(guī)范很重要,不要以為代碼是給機器讀的就寫的很隨意腻要,代碼是給人看的复罐,你不可能在這干一輩子,總有一天有人要接過你的代碼雄家,如果你的代碼只有你能看懂效诅,你能想到和你交接的人的心情嗎,肯定很想從新寫一遍,規(guī)范其實也不用非常嚴(yán)格乱投,規(guī)范不是限制咽笼,下面給出一些常見的java規(guī)范:
- 除了靜態(tài)變量,大部分標(biāo)識符使用駝峰法則戚炫,標(biāo)識符能準(zhǔn)確的表達出它所代表的意義剑刑,不要使用supplier1、 service2双肤、aaa施掏、bbb等,包名小寫茅糜,類名首字母大寫七芭,其他文件首字母都小寫。
- 狀態(tài)蔑赘、類型狸驳、參數(shù)名稱不要直接使用字符串或數(shù)字等比較,除非只有一個類中使用
這么寫別人根本不知道2是什么狀態(tài) 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;//已發(fā)貨 } if(orderStatus.equels(OrderStatus.ORDERSTATUS_PAID){ xxxx }
- 注釋掉的測試代碼或不用的類請盡快刪掉缩赛,如果還有用的請?zhí)砑覨IXME+注釋耙箍,否則時間長了自己也不知道為什么注釋掉,代碼越來越多不好維護
- 編譯工具的format要統(tǒng)一峦筒,在formatter代碼時最好不要全選整個類究西,而是只format編輯的方法,這樣如果大家同時修改一個類而formatter不同會導(dǎo)致更新代碼時大量的沖突
- 單個方法不要超過300行,類不要超過3000行物喷,重構(gòu)請參考《重構(gòu)-改善既有代碼的設(shè)計》
- 盡量縮小變量的作用域卤材,作用域過大可能回引起很多想不到的bug。
- 如果代碼需要公用峦失,盡量不要復(fù)制粘貼扇丛,請?zhí)岬絪ervice或util中。
做程序員對很多人其實很苦尉辑,你是否因為有“錢景“加入這個行業(yè)帆精,你是否真的有興趣長時間對著電腦敲代碼,你能否因為一個小問題一晚上找不到原因繼續(xù)堅持隧魄,如果你想好了就腳踏實地的努力卓练,我們一起共同學(xué)習(xí)。