發表文章

當java程式設計工程師心得(外傳2-Team work)2014-滿5.5年

      從事程式設計工程師也好幾年了,合作過的程式工程師也很多人,那就再來發一篇我對於團隊合作的心得吧。       一個研發團隊最理想的狀態就是可以互相支援對方對方60%~80%的工作,舉例說,有工程師A與工程師B,不論年資,只單純看能力,若是A對於B負責的功能或專案有80%的熟悉度,反之B對A也有80%,那好處就是當A突然有事請假,那專案進度並不會delay到,又或者業務臨時急件要拿B的專案去demo,那A可以馬上處理解決,這樣可以讓整個team給其他部門有好的印象,不會讓人有這部門怎麼什麼都不行的感覺,當你自己有自覺寫的程式不是代表自己,而是代表整個團隊時,那自己就要主動去跟團隊裡每個同事學一下技術,或了解相關進度,這絕對對自己有好處的(若是你想在短時間內有急速成長,並在多年後成為神(註1),就一定要這樣做)。       雖然是理想,但在現實上要達成是有很大的難度的,我目前待的研發團隊正面臨這個難題,整個團隊也為了這件事開會討論過,當一個團隊出現了有人能力跟不上,甚至會造成對個團隊進度負成長(註2),團隊裡就會開始有不好的氣氛,會有人開始抱怨,每個人對於這種負成長根源解決方式不同,我是把android team的人都找出來,之後用引導對方式向那位上班不集中的工程師問他原因,問他為什麼一個功能只要1小時可以寫完,他需要花上1天,並且我也直接跟他表明目前這個團隊需要的是可以跟上進度,有能力學習、不拖累別人的強者,之後他也承認他上班時都在玩,沒有認真寫程式,當然最後也有請主管與他談,後來他向主管承諾會改善,但這問題並發只有一人,別的小組也有這情形,但那位工程師被主管約談之後,他自己也覺得拖累大家,當天就決定離職了。       對於團隊合作,我目前所在的團隊討論了一個方式,大家之後會互相把專案功能切開,並把架構、UI、功能都分離,有人專負責架構,有人UI、有人功能,最終由1人整合,每個人都要有UI的基礎,這是基本的,剛進來不會的人就會先被分配去學做UI+流程,再由強的人去打主架構,然後大家都可以實作功能,功能有相同的可以集中成utility(註3),整合的人則是要對全部都很熟,要會寫架構、UI、功能、元件,才有能力進行整合並分配各工作,這樣的做...

當java程式設計工程師心得(6)2013-滿5年

 又到了年底寫心得的時間了,到了新公司工作也滿一年了,新公司是傳統產業,我所屬的部門是手機與公司其他電子裝置產品的結合應用研發,偏向手機app部份,大部份應用都有結合網路部份的程式設計,寫到這裡,又回想起之前一篇我提到走開發要不斷學習的事了,來到傳產發現了很不可思議的事!!其他研發部門幾乎很多人都不會網路方面的知識,但公司走向想朝網路方面應用,倒致於我所屬的部份想推網路技能到其他研發部困難重重,一方面是其他研發部不能接受json、tcp/ip、tls等等技術的導入,或許對現在正在看這篇文章的您會覺得很扯,不過現實就是如此,雖然過程艱困,但最後我同事也是把這些技能強行導入了(雖然別研發部很抗拒...)。        在第二段小提一下我今年學習到的一些技術或知識: State Machine:用來管控程式流程與狀態,應用在程式設計裡可以減少大量的if-else。 Android aidl:可在android裡跨不同app使用c/s(client/server)方式呼叫method,但基於這機制,需要實作service,但service會因為不同app各自管理,有時會因為service被回收或dead而造成另一端叫用method的程式拋出DeadObjectException,但目前有先用一些手法解決此問題。 Android SocketIO:這部份是為了讓android的app裡可以用web socket方式與server通訊,會這樣做是因為當server是用javascript寫時就必須要這樣做,不過java本身沒有SocketIO,所以跑去github找了一段open source並修改了其原始碼,讓其功能符合我的需求。 Cocos2d-X:這個是在網路上滿有名的一套撰寫遊戲程式語言(C++),可跨多平台,我有拿這個寫了一個小範例並輸出到android與ios上進行實機測試,效果滿不錯的,但由於沒繼續深入研究,因為沒應用到專案上,目前也從網路訂購兩本書還沒開始看... Think in java 4/e 中文版:這是一本書,買了三年多了吧,一直沒看,一共有1300多頁...今年抽空看了一半了,網路上滿多人在推薦寫java一定要讀這本書,當然我就買來看囉~這本書我建議寫程式1~3年以上後再來看會比較有感覺,因為很多都是...

當java程式設計工程師心得(5)2012-滿4年

 首先,第一件跟大家分享的就是我離職了,離開從事了四年的手機網路遊戲設計這個工作。       今年發生滿多事情的,在上半年5月時,公司主管想將html5的技術導入遊戲開發,而不同以往是將ios與andoird分別用object-c與java撰寫,而是整合使用javascripts進行開發,兩邊的app也都可以使用mobile webview來執行html,有這個想法我們並非是先軀,但總不能是最後,因此我被選為進入這個新技術領域的人選,當然這裡也不例外,也是套了工程師必經的一句話就是「說很簡單,做很難」,不過最後結果,這個試驗品個專案目前已上架了,分別在ios與android上都有,是由我撰寫伺服器與app及整合,裡有些核心元件是由主管與同事提供,花了將近20天完成,不說手機方面的程式,光是主程式那支html就超過4000多行,全都javascripts,其他支html大約都300行以內,主程式會寫那麼多是因為我是接這個專案才開始學javascripts,所以有很多東西不會拆,例如怎麼把程式拆成n支,再以import的方式載入之類的,說到這些,或許有些人懂javascripts就會說,不就只是scripts src=xxx.js,我可以跟你們說這樣做穩死,這種寫法來載入js,會因為html的body先載入完成,而js是再之後載入,這樣會造成你在html已紿開始執行,卻讀不到js裡的function,會有機會讓程式掛掉,還找不到原因,因此這個方式是被我們捨棄不用的。      在上文(其實是廢話,沒幾個人想看XD)提到,我雖然是以java出身,但不管工作幾年,自己還是要擁有挑戰新技術的熱情與信心,當然學習一定會遇到很多奇怪問題,這時就要提出來與大家討論或是去詢問技術主管,若是能自己找到解決方式再出來與大家討論這方式是否妥當會是最好的做法,這樣大家也可以分享到技術,在學生時期,自己會覺得學一個新程式語言很難學,那是因為自己本身沒有一個基本的語言底子當基礎,在此建議大家,盡量在學生時期,不管你是要自學、私下找老師問等等,挑一種程式語言,用大學四年的時間把他讀爛讀熟,並多寫,多試,多看書,以及多看別人寫的程式,去思考這樣寫會有什麼問題,以及別人這樣寫是為了要避免什麼問題,有時候很簡單的幾行程式,是有很深的技...

當java程式設計工程師心得(4)2011-滿3年

   時間過的好快,從寫第一篇當工程師心得日誌到現在已經三年過去了,從菜到不行,到現在要扛責任,掛名資深工程師,並且要帶新人寫專案,看著新人什麼都不會,只會用一種程式語言開發,很多工具跟linux指令都不會用,突然覺得自己當新人時,也是怕學東學西,最後還是什麼都要會XD。    當新人有當新人的好處,也有壞處,當老鳥的只有壞處= =,上有主管給的專案壓力,下有新人對開發時間得反彈力,夾在中間只能把一切都吸收下來克服掉,每當接到專案需要用到現在沒有的技術元件,就會聽到一句話「沒有寫不出來程式」,我都會再補一句「給我時間就寫的出來」,但總是天不從人願,時間永遠只會更少,不會更多,因為開發是拼速度,能比別間遊戲公司早開發出遊戲,就可以先佔上風,當然也是有績效壓力,固定一個月就要產出3款手機online game,也是基本款,當然不是我一個人在寫,那會寫到死,呵呵,我是接一個遊戲,帶一個新人寫,15~20個工作天要開發完並測試完上線,這些先不聊了XD    第四年的目標,當然是希望技術可以學更多,更廣,也希望自己能寫更多的元件出來,雖然我不知道我發表在這個日誌上的元件有多少人受惠,但是只要有一個人可以用到,我就會感到開心,最少最少也有我自己會來看,因為有些時候要用到的東西,我會忘了怎寫,就來自己日誌複制過去用,呵呵,沒辦法~腦子要記的東西太多了,把日誌當記事本在用,當然囉~有很多技術元件我都偷偷藏起來,不會發表在日誌,並不是不分享,有些技術是公司給的,而我只是收下來,用到後來會再自己加上更多功能,但是最源頭還是公司的東西,因此就不便在此分享,但如果是我自己個人私下研究出來的元件,就會分享到日誌給大家參考,雖然寫的不是很好,也希望有用過的人可以提些意見,以便我更新元件的版本。    最近接了公司要開發MMORPG的手機online game,當然也是負責server的部份,感覺滿鮮的,希望可以順利完成上線!!先寫這樣囉~剩下的等第四年年底再來寫吧~    祝福一同走上工程師之路或是即將要踏上工程師之路的人能順心,加油!!!只要積極並堅持下去,你就會成為很厲害的工程師^^

當java程式設計工程師心得(外傳1-帶新人寫專案心得)2010-滿2年

   從上星期開始來我們公司的新人也過了適應期囉~所以也就開始接專案了!!重點來了...由我帶= =+,呵呵,讓我帶就慘了XD,目前專案完成度約40%,但開發時間只剩一半。 對於剛從大學畢業然後進到公司當開發工程師的人,個人有幾點小小建議: 1.新人進公司寫程式有兩種:   (1)進開發寫專案。   (2)學維護,慢慢寫小功能。 2.必須拋棄學生時代寫程式的寫法,學校通常只要求你要寫得出來,會跑就好,但是在業界會要求你寫的程式要著重維護性,所以每間公司都有自定的規則寫,為的是寫出來的程式大家都可以很好維護,而不需要去幫你修一堆的bug。 3.畢竟剛畢業進到公司,對於專案的流程與程式的撰寫以及整個專案分析完的架構都會霧煞煞,但是這是新人必經的過程,我~當然也是這樣過來的XD,但是也是要靠自己多問,多看、多想,我一開始也是先試著把自己寫的程式由小到大,慢慢的把整個server的架構畫出來,才了解自己在寫什麼,當然一開始一定不知道程式整個架構長怎樣,因為公司會給你一個基本的元件給你使用,一開始都只要會用不需要懂,用了就對了。 4.如果你進去公司是學維護,是讓你先熟架構,那你可以穩札穩打的把公司維護的系統慢慢學下來,不過維護通常都是收拾前人留下的爛bug...程式也不好改,因為前人也是新人過來的,所以就...惡性循環啊~ 5.如果你進去就是開發,那你賺到了,因為可以學到很多,而且不用收拾前人留下的爛bug,不過也不要自己太閒留爛bug給後人修。 6.當你是開發工程師剛參與寫專案時,壓力大是一定的,有壓力才會成長,但一定要可以很快的理解公司給你的元件如何使用,不懂就要快問,不能低著頭猛寫,或許你遇到的問題,別人一看就知道如何解決。 7.盡量把物件導向的觀念建立起來,很多人在大學時都學過物件導向,但是真正在開發實務上都很缺經驗去分析物件,不過久了自然多看多學,就會了^^"    最近因要接手機開發專案,因此把之前寫的一些java server交接給同事做維護,同事花幾天看我的程式只說:「你的server每個都長一樣,架構完全一樣,懂一個等於懂全部了,一看就懂」 我此時心裡想:「當時我也是被磨出來的= =」    後來他交接完馬上就有被要求加新功能,也只花一星期就寫好了,因為在寫的當時都有留彈性,所以架...

當java程式設計工程師心得(3)2010-滿2年

   公司最近面試了幾個新人下星期要進來,才突然驚覺,已經當了二年工程師了,想起二年前我還只是個只會用java的陣列寫遊戲的剛退伍夜校大學生= =" 二年過去真快,寫過10幾個專案,20幾個server,有大有小,有難有簡單。 在這篇就分享一下第二年的心得吧,也列幾點可以提升自己coding能力的方法。 1.拿自己比較會的程式來翻寫別的語法程式,把別的程式拿來改成java,這是基本要求吧,而且我發現這樣可以讓自己了解別人在寫什麼,為什麼這樣寫。例如:我會java,我看到了別人寫了一個method或演算法是c或php程式,而你可以把他整段翻成java執行結果也一樣。 2.多想些小題目來寫,但看到題目不要先急著寫,先想過一次可以有幾種寫法,各有什麼好處。例如:多去javaworld論壇或知識+看看有什麼題目,不需要去回答,若是你自己覺得寫的很棒,你也可以貼出來讓大家比較或批評,這樣自己才知道有哪些可以改進的地方。 3.當你寫的是比較大的專案,這時並不是要去考慮各個method裡的邏輯要怎麼實作,而是先把你整個大系統要拆成幾個功能,整個架構要怎麼劃分,流程如何跑,所有的功能可以先定義成一個類別名稱,或者是一個method名稱,這樣是加速你確定整個系統大流程是對的,而不會導致你邊寫邊想,寫好3分之2才發現,後面寫不下去因為流程有錯,架構有錯。 4.培養自己debug的直覺性與解決問題的能力,我在知識+發現有很多人對於程式所拋出來的錯誤訊息無法判斷是什麼錯,也不會解決問題,連有excepiton的錯都不能解決了,要是遇到整個server某一段邏輯有錯,倒致結果是錯的,也不會有exception,那不就挫咧旦XD 5.多與人分享寫的程式,因為這樣你可以知道自己寫的是否有問題,而你或許會收到對方給你更棒的程式元件,或是寫法,當覺得對方的程式好用,就可以學來用或是拿來套,但是要記得當程式是被包成元件時,收到程式並不能直接拿來改,這樣會造成以後原作者又有更新時,你的程式就不能套新的元件,拿到元件需要用繼承或是把他new在自己另外寫的一個類別裡,重新包過,這樣對你自己的程式才有最大的擴充性。 6.或許你看到這裡會覺得上面很多廢話,但等你實際都去做之後,能力還沒有提升,那我也沒辦法XD,有提升的話記得買飲料請我啊XD 共勉之!

當java程式設計工程師心得(2)2009-滿1年

 從事java程式設計已經滿一年了,幾乎一整年都在寫java,從一開始剛進只會基本的迴圈、判斷式、陣列,跟一些些的資料結構,連執行緒都半知半解,雖然考過SCJP與SCWCD但真正的寫專案倒是進公司才真正跟同事合作寫一個專案,我負責整個server所有的撰寫,另一位同事寫client,還有一位leader幫我們分析整個專案如何開發以及解決實務上奇怪的問題。     記得之前剛發現第一篇心得時,才剛進三個月,剛要接第二、三個專案,現在已經完成近十個專案了,遇到很多實務上的問題,還有程式真正上線時的恐怖= =,測試時沒測到的bug,程式一旦上線,就要待命隨時出現bug時,連半夜也會接到電話,要爬起除錯,而且要時間內修正並更新,所以啊~,寫就要細心,連一個變數宣告錯都會有可能造成是潛在的問題。     程式在主管的帶領下,我學到了很多技術,還有架構,最重要的是觀念,程式被要求一個class不能寫超過500行,而且程式要很直覺,別人看了很容易懂,這都是為了程式可以隨時丟出來給別的人接手維護,但有的人還是會追求寫很複雜的程式,只有自己看得懂= =,而且也不知道什麼時候會出問題。     寫到現在,覺得啊~撰寫技巧可以不斷的學到,而且寫到後來大家都會一樣強,差別在於觀念,觀念不好,會讓自己的程式難以交接給別人維護,程式太複雜,自己久了回來看也會忘了在寫什麼,還有數學要好= =,我就是數學爛,在寫一個專案時要用到大量的數學運算去推演算法,推了一個星期推不出來= =,後來主管直接找我們開會,當場花一個小時寫出來,所以數學真的要好= =...     也沒什麼可以分享的啦,只是一些心得,最近也在寫別的程式了,花了一個月學iphone的objective-c,一開始剛看到程式有的傻眼,語法超不熟的,但也漸漸的習慣了,總之就把java會的通通拿過來用就對了XD,然後再查一下api就差不多了,目前也在開發iphone的專案,iphone的缺點就是,api都是英文,而且很爛,範例少,解釋有點難懂,其實是我英文也爛啦= =,我都十個單字看得懂七個就用猜的了,剩下就是把method拿來試試看跟java的是否一樣,一樣就用了,再注意一下那個method的api有沒有寫note,那都會寫那個method在什麼情況下...