Java成長之路--一個非科班生的進階之路

前言

筆者從事Java開發六年有餘,從什麼都不懂的小白一路成長到上市公司管理20人的技術leader。管理的團隊,雖然人數不算多,但也是對於我這個非科班生這麼多年努力的一種確定。在技術的道路上,我沒有走過什麼彎路,一切都是按照本身規劃的樣子在走下去。但對於一個非科班生來講,若是想在技術的道路堅決的走下去,那麼必定是艱辛的。大學四年的知識債務,老是要還的。經過這篇文章,相信不管是初入行業的小白,仍是職場老手,我從技術提高角度,如何一步一步成長起來,從如何管理角度分享我這麼多年以來的經驗。但願能對你有所啓發,歡迎在討論區參與討論。前端

我與Java的邂逅

時間回到2014年的夏天,渾渾噩噩過完大學四年的我,面臨個人,就是那時人們常說的「畢業即失業」,呵呵,像我這樣大學就連四級都考不過,四年一次獎學金都拿不到,大一當班長,大二就被輔導員由於不稱職被撤職,同窗眼中的混子學生,怎麼可能找獲得工做?畢業季,當你們都在參加各類企業的校招,我卻每天在宿舍睡覺打遊戲,連實習經驗都沒有,我拿什麼資本去和那些優秀的學生一塊兒去競聘崗位,因此我把這一些都歸功於個人專業垃圾,由於當年被調劑到了這個全國不超過10所學校開設的超冷門專業,我對前途不報任何期待,大一就給本身放棄奮鬥想好了藉口,專業這麼垃圾,就算好好學之後也找不到好工做。因此我很「愉快」的度過了個人大學四年,慶幸的是,腦瓜子卻是挺靈活,平時上課不聽,考試前,去讀書館自學兩三週,就能順利經過期末考試,大學沒有掛過科。java

那麼我又是怎麼和編程有了交集,又怎麼就入了這行呢?雖然大學四年對學業不抱但願,可是我對賺錢樂此不彼,大二開始就沒有從家裏要過錢,學費生活費都是本身掙的。由於家裏的表哥堂哥都是在互聯網行業,他們有本身的渠道去幫商家作網絡推廣,因此平時沒事就跟着他們一塊兒兼職作作,利潤是真的客觀,一直到畢業,除去學費吃喝玩樂的費用,支付寶餘額還剩餘8萬多。由於在跟他們作業務的時候,常常看他們會用一些腳本去作一些採集和自動化的操做,對此很是好奇,後來才知道,這些腳本都是用Python寫的。因爲強烈的興趣,個人第一門語言就是Python,平時沒事就在宿舍琢磨Python,自學了一段時間,已經能夠去寫一些簡單的腳本了,後來慢慢熟悉,就幫着表哥他們公司去定義一些個性化的腳本,一開始效率低BUG多,嚐嚐被吐槽,呵呵,遇到的坑多了,經驗也就多了。後來在一些衆包平臺,也本身去接單幫別人寫一些腳本,大學幾年寫的腳本有幾十個了,賺了也有好幾萬,第一次嚐到了經過技術帶來的甜頭,但是靠這個零碎的收入畢竟不是長久之計。在畢業後回來家中,父母也沒有催我找工做,只是讓我好好想想,將來到底要幹嗎?程序員

畢業那段時間,我想了好久,最終決定,我要考研,跨考計算機專業。我要在技術的道路上走下去,由於每次寫代碼,當軟件成功運行起來的那一刻,我是無比的興奮。說幹就幹,畢業後沒有上班,而是在家裏專心備考,買了不少考研的書,還有計算機專業課,經過那段時間自學的專業課,對計算機世界又有了新的認識,這對於我後來學習Java上手難度容易多了,對技術的思考也更深入。通過大半年的備考,我成功的......沒有考上,哈哈,人生沒有那麼多雞湯,並不時努力就有收穫,但起碼沒有遺憾。其實也並不時沒有考上,由於當時目標院校是一所985,劃線太高,可是有機會調劑,能夠調到一個普通院校,可是最終仍是放棄調劑了。如今想一想後悔莫及呀。web

可是我並無所以與技術道路分道揚鑣,就在15年的年初,咱們家庭聚會都一塊兒,表哥們問到我考研結果如何,我說:「目標院校沒考上,放棄調劑了,問我下一步有啥打算,我說要嘛再戰,要嘛就去找個班上。」面試

他們說這樣的,「咱們如今成立了一個公司了,咱們但願作一個私域流量平臺,本身研發,可是呢咱們這邊就一個懂技術的,公司剛起步,也沒那麼多錢去招聘開發人員,我看你挺有編程天賦的,你想不想加入咱們,我們一塊兒作?」算法

我驚喜道:「固然想呀,但是我只會Python呀,你說的那個平臺要用什麼語言作?」sql

「後端用Java作,你不會不要緊,有老吳(他們團隊惟一的開發,是表哥之前的死黨,之前在訊飛幹過幾年開發)能夠帶着你,你有編程基礎,腦瓜子又靈活,上手很快,真好咱們公司還在籌備階段,你能夠先跟着老吳學着,老吳很強的一我的,後端前端全能」數據庫

聽到這裏,我已難以按捺住激動的心情,眼角紅潤:「太好了,我終於有出路了!」這對當時壓力巨大的我,就像一個救命稻草,由於即便我再次二戰,就算考上,等畢業已是二十八九歲了,才能開始上班掙錢,對於一個農村娃來講,家庭壓力是巨大的,並且父母身體還很差。因此儘早能工做賺錢,是我當時一個迫切的指望。編程

因而,沒多久,我就打包好生活用品之類的,來到了當時他們租的辦公場地,在一個不起眼的寫字樓裏,辦公面積不足80平,一開始工做人員只有我、表哥、堂哥和老吳四我的,我帶着我大學賺的8萬塊錢一塊兒入股了這個公司。後端

到這裏,算是正式開始了個人技術生涯。因爲有了一些C語言、Python基礎和計算機專業知識,對於學習Java來講上手容易多了。

我如何學習Java的

老吳是一個盡職盡責的人,對於技術分享絕不吝嗇,就是個人Java啓蒙導師,剛去就給我定製了3個月的學習計劃,從基礎到框架再到Demo,三個月時間必須所有整會,這三個月時間他們作一些前期工做。到時候咱們就要進入項目開發階段,但願我不要拖後腿,有了目標,我學習起來格外賣力。

天天在公司都是在看視頻,看文檔學習。當時看的視頻主要是來自於B站的某馬的課程。一邊看視頻,一邊作總結筆記,最後再本身練習。

Java基礎這款大概花了10天左右,基礎這塊仍是很重要的,必定要踏實學完。如今市面上的學習資料有不少,有視頻有文檔,講解的通俗易容,小白也很容易能接受。這裏的核心重點就是Java的數據結構,必定要吃透,理解其本質。

掌握了Java的基本語法,能夠嘗試去刷一刷算法題,加深對Java語法的熟悉度和數據結構的理解度。瞭解時間複雜度和空間複雜度。

具有了基礎知識,接下來就是要對數據庫、Java Web方面的學習,這裏也是很重要的一個階段,學會這裏,你就能夠經過Java去操做數據庫了,能夠寫一些入門的信息管理系統了。數據庫建議把Mysql做爲主要學習方向便可,MySQL目前仍是如今市面上主流的數據庫。數據庫這裏,你須要掌握SQL語法,MySQL的基本原理,可以熟練編寫SQL進行增刪改查,可以經過JDBC操做數據庫,Java Web方面,你須要對HTML、CSS、JS、Ajax有基本瞭解,能寫出簡單的頁面,對於JSP、Servlet熟練掌握,對於XML、Filte、Listener有必定了解。

有了以上知識,能夠嘗試從網上找一些管理系統項目,本身寫一寫。學到這裏,大概須要三週時間,掌握這些,恭喜你,已經入門級別了。上面兩個階段,若是想看一些書籍的話,推薦《Java基礎入門》、《Java Web程序開發入門》、《Java Web程序開發進階》、《Mysql數據庫入門》,我當時就是買了這些書,對於小白來講,很是適合入門學習,爲了不廣告嫌疑,本身能夠在淘寶搜一搜相關的數據就行。

再往下一步就是各類框架、中間件的學習了,有如下知識點,你須要熟練掌握,框架類:Spring、Mybatis、SpringMVC這三個先學完,除了熟練使用這三個框架,還還須要具有,將三個框架集成的能力,嘗試使用這三個框架搭建一個簡單的web工程,另外你以前須要掌握maven、Git、SVN的使用。有了SSM框架的基礎後,但願你繼續學習Spring Boot框架知識,由於瞭解了Spring Boot以後,你會發現,你以前爲了把SSM框架集成費了那多精力寫的配置文件的問題,在SpringBoot中將再也不有煩惱。

到這裏你已經具有初級開發者的能力,能夠參與開發一個單體項目。可是目前不少公司基本項目都是分佈式的,因此至此若是你想在一家中大小公司可以勝任開發崗位,你還須要熟知分佈式相關知識。如RPC框架、Spring Cloud相關、Redis、MQ相關、ElasticSearch、分庫分表、分佈式事務等等,這裏面每個都須要花費大量時間去琢磨,掌握這些你已經達到了一箇中級開發的水平。

以上技術點,其實基本涵蓋了市面上主流的技術棧,若是你還有餘力,能夠去了解下大數據相關知識及雲原生相關。學到這裏花了大概三個月的時間,全職的學習投入,時間不算短也不算長,期間也作過一些簡單的Demo,但因爲沒有實戰過,因此對不少知識都是停留在理論,沒有深入的認識。因此技術學習是一方面,必定得多動手。

如何進階?

從中級開發向高級開發的進階,通常至少須要兩三年的沉澱,並且通常若是本身沒有明確的方向,或者沒有大佬的指引,靠本身摸索,是須要很長時間的經驗積累和深度學習。下面說下高級開發應該具有怎麼樣的素質。

一、編碼能力不用闡述,該會的都得會,熟練應用進攻式編程思想保證獨立模塊內部邏輯可以正確運行,異常外部依賴有感知,可處理。

二、熟悉的系統設計方法論,對分佈式架構設計有初步的經驗。

三、熟悉開源框架原理以及核心設計思想與關鍵實現細節。

四、可基於架構師設定的目標主導小型分佈式系統詳細設計。懂得CAP的權衡,並基於合理的判斷作出技術選型與方案設計。

五、基於業務的核心痛點可給出技術領域內的應對策略。

能掌握到以上,去面試一個公司高開,問題不大了,可是再往上,還得具有必定的管理能力如,可以承擔大型項目管理工做,合理拆解與分配任務並經過按期的任務跟進與溝通協做機制保證如期如質交付。具有初步的團隊管理能力,會基於團隊平常工做的特徵設定管理規則與制度,作必要的平常監督,且可以利用OKR等管理工具落實獎懲。可基於所負責的團隊短時間目標制定規劃。

那麼要如何才能作到這些,才能具有這樣的能力呢?若是培養你的團隊?做爲TL角度和研發角度,如何思考問題?這裏分享下我在自我驅動和團隊管理中的一些經驗,簡單能夠整理爲如下幾個關鍵字:

技術深,業務熟,執行力高,有創新,有owner精神,響應快,爲團隊作貢獻。

技術紮實

做爲一個技術人員,技術天然是最重要的,這是本身的手藝,手藝都丟了可想而知。如何提高本身的技術?簡單整理以下:

  • 多學,咱們這行最大的特色就是活到老學到老,學習能力正式咱們這行的門檻,不管多忙都要常常去學習新的技術,鞏固舊的技術。
  • 多作,動手能力是技術能力的最重要的一個部分,學習或者工做中遇到任何問題,去動手作,去用代碼驗證得出來結論,這樣在跟別人撕的時候纔有底氣嘛。
  • 多思考,凡是要多問個爲何?其實這個很難,常常會問不出爲何。個人方法是,零散的理解以後,能夠串起來完整的思考一遍,一環扣一環串起來推演,過程當中會發現不清楚的地方,而後想清楚,每一個環節儘可能的再往深處想,再多想一想各個點是要解決什麼核心問題,若是不這樣作,按其它思路有什麼優缺點。
  • 多交流,多和大牛交流這是事半功倍的最好辦法,大牛直接給你指點一二的好處天然不用說了。除此以外,你永遠不要以爲本身懂了,跟不一樣人對同一個問題探討兩到三次之後,你會發現這時候你才真正懂了。你能夠從中發現別人的思考角度彷佛和本身不同,可是別人的也沒問題。交流也不必定是要誰說服誰,其實就是想要知作別人是怎麼想的,本身再回去從新梳理一遍,把儘量多的場景想清楚。

業務熟

技術是爲業務服務的,沒有業務不會有人爲技術買單。這就是互聯網的特色。公司領導每每都是懂業務的人,熟業務的價值天然不用多說了。

如何作到對業務很熟?多梳理、多總結、不肯定必定要問、多與產品業務溝通和他們一塊兒把他們想要的東西梳理抽象清楚。

執行力

最近在我給兄弟們作分支管理規範的要求(都是一些簡單的要求),信息也傳達下去了,可是偶爾仍是有人不按規範來,做爲TL會感到有點心累。我就在想,咱們就這麼幾我的,若是這東西還須要費那麼大勁,咱們之後作其它重要的事情還如何確保你們都能按要求完成工做呢?更別說之後人多了咋辦呢。想來想去,這就是執行力的問題。這是TL角度的思考,其實從研發人員的角度想也很簡單,至少要作到如下幾點:

  • 按要求作事,研發人員心理要有杆稱,作一件事情,本身要很清楚TL是如何要求的,本身這麼作是否是符合要求,不符合要求要麼改正要麼跟TL溝通,確認這樣作行不行。
  • 把TL的交代放在心上,互聯網公司講究的是開放寬鬆的工做氛圍,這就必然致使TL不可能每一件事情都像佈置任務同樣安排給你。更不可能把每一件事情都想清楚了再交代給你。正常狀況可能就是在溝經過程中的一句話。可能這件事情並不靠譜,但這不重要,你必定要放在心上,去把他梳理清楚,得出個結論,無論結論是可行仍是不可行,至少有個結論。而後若是可行,再去把這件事情作成,那就太完美了。不管如何,那些聽完就忘了,過了幾天TL想起來又來問一遍,這樣反覆下去對本身確定是不利的。
    舉個例子,阿里的五新戰略,看上去很風光,就拿新物流來講吧,其實在菜鳥內部,從上到下,根本沒有人想清楚啥叫新物流,曾經還有個新來的高管直接問馬雲」什麼叫新物流,咱們該作什麼?「。可是你再想一想,你以爲馬雲能說明白什麼是新物流嗎?其實他本身也不明白,因此他給這個高管的回答是:」你太不瞭解我了,我歷來不跟下面的人說該作什麼的。「。就這麼一個看似不着邊際的概念,N多的人扎堆在裏面思考,梳理,創新,目標就是實現它。至少你們知道,這個方向是對的,只是暫時尚未探索出道路。其實阿里的不少其它的業務都是用這種方式創造出來的,盒馬鮮生就是在這種環境下孕育出來的新零售的表明。我理解這就是執行力。
  • 把事情迅速完成,互聯網行業的研發應該有個很大的特色,就是計劃常常會變,安排給你的活,永遠不是你的所有的活。常常會有新的事情插進來。對的就是這樣的,計劃只是對這件事的最低要求,你不能由於時間還有就慢慢來,你必須用最快的速度完成它,而後剩下的時間去學習和等待可能來的新的任務。

有創新

創新好理解,就是去思考工做中、業務中、產品中遇到的方方面面,提出新的想法,並推進落地。落地是創新最重要的點,每每你們都會忽略這一點,其實不落地的想法一毛不值,只有落地了才能稱之爲創新(創造新的東西)

創新落地又分爲小的工具和系統化的平臺。你們應該有感觸,小的東西永遠只能解決零散的小問題,並且很容易被別人copy,且不容易拿到結果。是的,要有平臺化思惟,在這方面阿里作的就比較好。大部分創新均可以用平臺化

的思惟去解決一個面的問題的,並且這個平臺是可以帶來彙集效應的,能夠造成閉環,更容易推廣和造成核心競爭力,對本身來講就更容易拿到結果。

有owner精神

一件事或者一個系統的owner,很好理解,就是要對它負責,它的任何東西owner都是第一責任人或者受益人。在工做中TL會指定一些owner,而後由owner來把這件事情不折不扣的負責起來,作爲owner最基本的要求就是這件事情你要負責起來,主動去解決問題(有問題能夠找TL尋求幫助),多和TL溝通匯報當前存在的問題和進展。

可是咱們這裏說的owner精神遠不止這些,從研發人員角度來講,能夠歸納爲如下幾點:

  • 主動承擔一些分外事情, 你要主動去負責一些不在本身負責範圍的事情(可能TL尚未指定這件事情的owner是誰)。爲何要這麼作?只有這樣,你才能讓TL看到你擁有能夠owner更多的事情的能力,能力提高力,才能得到更多的機會去往下一步發展。只是把安排給你的事情作好,永遠只是本身本職工做,不具有晉級下一階段的說服力。阿里有句話是這麼說的:晉升到下一級別的基本要求是你已經在作下一級別的事情,至少作半年以上了。

  • 首任負責制,就是一件事情到你這裏了,你不能簡單的判斷不是你的事情,就無論了。你有責任去分析判斷出這件事情的責任人是誰,並找到他,讓他接下這件事情以後,你才能夠撒手(有些重要緊急的狀況還不能撒手,還須要不停的去確認結果,並及時反饋)。

  • 能成事,作事容易,成事很難!一個和尚擡水喝,兩個和尚挑水喝,三個和尚沒水喝。說的就是這個團隊沒有能成事的人,若是你是其中一個和尚,你能帶頭把另外兩個和尚組織起來去把水弄回來,這就是你的成事能力。另外兩個和尚充其量就是個作事的,可是成事的這個和尚重要性不言而喻。

響應快

7*24小時onCall,互聯網行業對研發人員的基本要求。若是你還在懷疑這點,你絕對不是一個合格的互聯網研發人員。舉個例子:當時在阿里時,團隊內對你們的要求是,報警響了(阿里的監控作的特別好),相關人員立馬響應(由於阿里的流量太大,響應慢一慢系統可能就掛了),這個先後不會超過5分鐘,就在這種狀況下,我發現每次一收到報警打開電腦,羣裏已經有人(那幾個剛畢業的小孩)說話了:」XXX問題我在看「,過了5分鐘,羣裏就會看到結論了。包括半夜的報警,我感受這才叫響應快,TL若是不推崇這種精神那還推崇啥呢?

固然啦,響應速度和精力有關,剛畢業的小孩精力旺盛,生活雜事相對少些。對工做多年有家有室的老程序員來講的確有點爲難。可是無論怎樣這個意識是要有的,有時間要關注羣裏的線上問題,並及時響應。線上有報警在條件容許的狀況下,要主動迅速的去跟進問題。即便條件不容許,幫忙協調下,羣裏問問誰有空,打個電話溝通下仍是能夠的。(這也是owner精神的一種體現

若是你們都有這個意識,並付諸行動,我相信基於團隊的力量作到7*24小時onCall也不是難事。

說完響應快我要強調一下,平時不關注羣消息,下班後就不再露面的同窗要注意了,其實這一點你已經損失,」有owner精神「和」響應快「這兩條了。你基本已經掉隊了(除非你其它點很強)。

爲團隊作貢獻

研發人員是處在一個團隊中的,團隊中的每個人都必須是無私的爲團隊作貢獻的,若是把本身與團隊分開,到處以我的利益爲主,那必然成爲團隊的壞味,將是被團隊淘汰的首選。從研發人員的角度,爲團隊作貢獻能夠但不限於如下幾個方面:

  • 分享,幫助團隊其它成員成長,團隊內分享新技術和經驗;
  • 提高團隊影響力,幫助團隊提高在外部的影響力( 外部分享,BBS文章、專利提報);
  • 內推,幫助團隊推薦優秀的人才;
  • 提高團隊效率,經過創新性工具爲團隊解決效率或者其它問題;

結語

以上就是我這麼多年以來,從技術提高,到軟實力提高的一些經驗總結,但願能對你有所啓發,歡迎提出意見!

相關文章
相關標籤/搜索