挨踢部落故事匯(3):入行IT自學(xué)成才
原創(chuàng)【51CTO.com原創(chuàng)稿件】研究生期間參與的企業(yè)項目堅定了益達進入IT行業(yè)的決心。那份執(zhí)著與看待問題的思維,使他在開發(fā)路上愈戰(zhàn)愈勇。在益達看來,處理問題的思維就相當(dāng)于一個軟技能,是學(xué)會了就不會跑掉的東西。問題的本質(zhì)、觸類旁通、借鑒思想,嚴謹性這些都是他的思維要素。遇到問題多思考,多問what,why,有耐心,不急躁,多溝通,層層排查最終找解決辦法。
益達·大數(shù)據(jù)開發(fā)
學(xué)生時代脫穎而出
益達高考選擇的是電子信息科學(xué)與技術(shù)專業(yè),計算機學(xué)習(xí)占比居多。他從幾乎沒接觸過電腦的完全小白正式走進了0和1的世界,慢慢學(xué)習(xí)了C,JAVA,HTML,Android等計算機開發(fā)語言。益達本科畢業(yè)后又通過保研進入研究生進修階段,研究無線傳感器網(wǎng)絡(luò)數(shù)據(jù)聚類算法,SVM算法,神經(jīng)網(wǎng)絡(luò)等,通過MATLAB去實現(xiàn),比較優(yōu)劣進行改進。研究生期間益達參與了部分企業(yè)項目,根據(jù)項目需求自學(xué)了Delphi和MFC相關(guān)知識,項目實戰(zhàn)過程使他獲益匪淺。2015年6月益達研究生畢業(yè),以Android開發(fā)攻城獅的角色進入到工作崗位,從此他離開校園,變身成一個職場菜鳥,開啟另一種人生狀態(tài)。
既然要做一件事,就盡自己更大的努力做好
初入崗位,自然是適應(yīng)與學(xué)習(xí),而這些主要是通過溝通和自學(xué)成長的。看老程序猿寫的業(yè)務(wù)代碼,成了益達第一步要跨過去的門檻,由于業(yè)務(wù)較大,代碼量不小,需要花很多時間去學(xué)習(xí)。那個時候他接手的第一個任務(wù)是開發(fā)支付SDK,完全是益達獨自一人完成的,當(dāng)時他與其他程序猿各種溝通協(xié)作,詢問查資料。Git、51CTO、掘金、StackOverflow還有各種技術(shù)相關(guān)的論壇網(wǎng)站都少不了他拜訪的身影。談及到這個SDK任務(wù),他印象最深的是微信支付問題,其他銀聯(lián)和支付寶的接口都比較好接入,容易測試聯(lián)調(diào),但微信支付接入就比較有坑了,不過在他查閱資料調(diào)整測試的不斷努力下終于實現(xiàn)了。完成之后他并沒有繼續(xù)做SDK開發(fā),而是應(yīng)部門需要被轉(zhuǎn)到JAVA服務(wù)器去做實時數(shù)據(jù)計算開發(fā)。
后臺開發(fā)需要做數(shù)據(jù)統(tǒng)計相關(guān)工作,益達從接觸Kafka、Storm等開源工具做起,更多的接觸了Linux系統(tǒng),在實踐中不斷學(xué)習(xí)到常用的各種命令,實現(xiàn)shell腳本的編寫。服務(wù)器管理中使用nginx、haproxy等代理工具,自學(xué)netty與jetty的開發(fā)流程。由于唯一一位老司機離職了,導(dǎo)致storm集群、mongo集群、elasticsearch集群、Docker集群等維護工作也是益達一人接管。開發(fā)中益達覺得遺留下的elasticsearch統(tǒng)計對他們業(yè)務(wù)的針對性不強,所以他又在探索學(xué)習(xí)Apache Kylin和druid工具,不斷提升IT技能來適配當(dāng)前業(yè)務(wù)需求。
益達在如此強壓環(huán)境下,并沒有抱怨,在他看來,盡自己最大的努力做好一件事是對他個人價值的體現(xiàn)。
自學(xué)與反思,是開發(fā)的必備要素
益達在開發(fā)中碰到的問題不計其數(shù),身經(jīng)百戰(zhàn)的他回顧走過的路,填過的坑,整理了以下6個方面,希望能幫助初入職場的程序猿們少走彎路。
1.代碼方面,結(jié)構(gòu)清晰,邏輯嚴謹,注釋得當(dāng),方便自己理解以及測試定位問題,同時也方便別人理解看懂代碼。
2.業(yè)務(wù)方面,一定要協(xié)調(diào)溝通并且理解到位,否則很容易和需求方產(chǎn)生各種問題,進而可能會有各種扯皮和更改。比如后臺服務(wù)接口開發(fā)中,業(yè)務(wù)代碼遇到問題也要及時和接口調(diào)用方進行確認,及時做調(diào)整。
3.基礎(chǔ)能力方面,自學(xué)技能是一個很好的技能。如果對設(shè)計模式、數(shù)據(jù)結(jié)構(gòu)等基礎(chǔ)還不是特別明白,一定要去理解學(xué)習(xí)。可以結(jié)合開源框架學(xué)習(xí),開源框架中一般都會包含多種設(shè)計模式和常用的數(shù)據(jù)結(jié)構(gòu),比如Android中的RxJAVA響應(yīng)式編程,學(xué)習(xí)其中的思想。
4.資源方面,開發(fā)中要養(yǎng)成資源及時釋放的習(xí)慣,尤其是JAVA開發(fā),畢竟“Stop The World”并不是什么好事情。不用的對象等要及時清理掉。CPU、內(nèi)存、負載等硬件資源也要做好監(jiān)控工作。
5.性能方面,其實在寫代碼的時候就要有這方面的意識了,如提到的資源釋放問題。同時在開發(fā)中要注意一些細節(jié),例如:在處理數(shù)據(jù)的過程中采用List數(shù)據(jù)結(jié)構(gòu),一般采用ArrayList比較多,但如果你的數(shù)據(jù)添加、順序訪問、刪除比較頻繁,那它就不合適了,相比下鏈表結(jié)構(gòu)的LinkedList就會好很多。還有就是學(xué)會性能調(diào)優(yōu),在JAVA中就需要理解JVM,學(xué)會調(diào)優(yōu)工具的使用,然后定位問題,做出相應(yīng)的優(yōu)化。
6.分布式服務(wù)器開發(fā)管理方面,主要是各類框架集群的搭建、服務(wù)代理的使用(外網(wǎng)代理轉(zhuǎn)發(fā)到內(nèi)網(wǎng)等,負載均衡處理)。如果集群搭建有問題,會影響很大,比如老司機留下來的ES集群,在集群節(jié)點內(nèi)存分配、節(jié)點角色分配上都不合理,導(dǎo)致集群性能不穩(wěn)定,所以又重新做參數(shù)調(diào)整和部署,數(shù)據(jù)索引方面比如index的mapping設(shè)置,routing設(shè)置以及冷熱數(shù)據(jù)分離,數(shù)據(jù)壓縮等處理。總之開發(fā)過程中遇到的坑還是很多的,不論是業(yè)務(wù)層面還是非業(yè)務(wù)層面,都要開發(fā)者們有耐心去解決。
一入行業(yè)深似海,想要如魚得水,就得學(xué)會掌握更多技能,不斷豐富自身,廣度深度都進行探索,也許有些東西開發(fā)中不一定用得到,但是學(xué)會了,總不會錯。無論是各類開源框架、還是開發(fā)語言,其實都只是使用工具,畢竟框架總是層出不窮的,掌握核心思想就能更好的遨游各處。
如果你也愿意分享你的故事,請加51CTO開發(fā)者QQ交流群 370892523聯(lián)系群主小官,期待你的精彩故事!
【51CTO原創(chuàng)稿件,合作站點轉(zhuǎn)載請注明原文作者和出處為51CTO.com】