日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 充電吧
[導(dǎo)讀]在一線做了十年的開發(fā),經(jīng)歷了網(wǎng)易、百度、騰訊研究院、MIG 等幾個地方,陸續(xù)做過 3D 游戲、2D 頁游、瀏覽器、移動端翻譯 app 等。

在一線做了十年的開發(fā),經(jīng)歷了網(wǎng)易、百度、騰訊研究院、MIG 等幾個地方,陸續(xù)做過 3D 游戲、2D 頁游、瀏覽器、移動端翻譯 app 等。

積累了一些感悟。必然有依然幼稚的地方,就當(dāng)拋磚引玉,聊為笑談。

一、對于團隊而言,流程太重要了

行軍打仗,你需要一個向?qū)?如果沒有向?qū)?,你需要一個地圖;如果沒有地圖,至少要學(xué)習(xí)李廣,找一匹識途的老馬;如果你連老馬也沒有,那最好可以三個臭皮匠好好討論,力圖勝過一個諸葛亮;如果三個臭皮匠連好好討論也做不到,那就是典型的烏合之眾了,最好寫代碼前,點上三炷香,斟上一杯濁酒,先拜拜菩薩,再拜拜谷歌。

我個人屬于性格溫和的(程序員大多性格不錯),但確實見過少數(shù)強勢的人,說很多強勢的話。在技術(shù)上一言而決,一聽到任何反對就上升到私人恩怨。這樣的風(fēng)格,到底是剛愎自用,還是胸有成竹,就需要仔細(xì)判斷了。

為什么說流程重要呢?實際上,如果團隊上有孫悟空存在,去西天取經(jīng),大概也不需要什么流程,只要方向就可以了。 但作為普通的戰(zhàn)士,應(yīng)該先慮敗。找人算命時,應(yīng)該先聽聽不好的地方,好的地方就不用聽了,總歸是好的,不好的地方一定要聽,這樣才能規(guī)避。

這就是我的態(tài)度:先悲觀一點,劃清底線,考慮在這個底線上你該怎么做?

這是我做開發(fā)的一個習(xí)慣,但這個習(xí)慣肯定不適用于買房。怎么劃清底線呢?就是假想團隊中沒有孫悟空了,光靠你唐玄奘、豬八戒和沙和尚,應(yīng)該怎么去取經(jīng)。

這個月走什么地方,遇到山怎么走,遇到河怎么過,遇到路上有妖怪劫道,誰去抵擋。遇到路上有少女要搭救,怎么辦?這就是流程,是原則。

我經(jīng)歷過一個流程很混亂的階段。都是很多年前的事情了,可以拿出來說說,不涉及單個人。

2011年在百度瀏覽器團隊時遇到幾件讓人影響深刻的事情。 有一次開會,產(chǎn)品拿出 Google 某個產(chǎn)品的 DEMO,里面有一段很酷炫 3D 效果,要求開發(fā)加上,只給2天時間,大家目瞪口呆。后續(xù)的開發(fā)為了趕節(jié)奏,導(dǎo)致非常多的 bug ,又為了修改 bug ,leader 將所有的 bug 按照人員平均分配,導(dǎo)致不同模塊間的同學(xué)相互修改......實在難以想象。好比讓做花卷的廚子,去修改西湖醋魚的味道。

最初的現(xiàn)象是:bug下降的慢,延伸 bug 反而增加,每個人都累的半死,代碼風(fēng)格極其雜亂,為了趕工導(dǎo)致的臨時方案層出不窮;

到了中期:人員離職越來也多,代碼難以維護,新加的需求與之前的臨時方案沖突。

到了后期:想做一些修復(fù),想調(diào)整架構(gòu),又要保證正常運行,其難度好比在一架飛行的飛機上拆換零件。

然后我也急忙離職了......實在看不到成功的可能性。

后來到了騰訊的團隊,感覺流程就規(guī)范多了。需求和 bug 有 Tapd 跟蹤,產(chǎn)品發(fā)布按照節(jié)奏,需求提出前會和開發(fā)反復(fù)討論可行性,有專門的質(zhì)量跟蹤,有專門的用戶反饋,每天知道要做什么,也知道明天要做什么。有產(chǎn)品需求,也有開發(fā)需求!這個非常重要。很多團隊,都是只有產(chǎn)品需求,開發(fā)好像牛一樣,耕完地就不管了?

流程其實沒那么復(fù)雜,就是各司其責(zé)+節(jié)奏。我們都是“哆瑞咪發(fā)梭拉西多”中的一員,各自有各自的責(zé)任,然后組合在一起,按照一個節(jié)奏跑起來。把該做的事情與該跑的節(jié)奏定好。

二、不要炫技,老老實實寫代碼

網(wǎng)上有一個段子,說有人要用JS實現(xiàn)一個簡單的功能,然后朋友給他推薦了幾十個庫。

真的有必要嗎?具體情況具體分析。

居家過日子,你只需要一套普通的工具就可以了;如果你是修車的,你需要一套修車的工具;如果你是光頭強,你需要一臺伐木機。 吃飯用筷子,用刀叉,都可以,但不要用殺豬刀,不要用丈八長矛!,當(dāng)然也不能用牙簽。

用什么工具,用什么庫,問問過來人,多在KM上搜索一下。舉個例子:android 上加密,用 SQLChpher就可以了,微信也在用,你當(dāng)然可以學(xué)習(xí);數(shù)據(jù)庫 ORM 思想,用 KM 上推薦的 GreenDAO 就可以了;PC 上 3D 引擎,用OGRE就可以了;小型游戲 DEMO,用 Irrlicht 足夠;寫 WebGL,用 ThreeJS 足夠。

首先想想:一些大庫 hold 的住嗎,后續(xù)發(fā)展如何?這些庫對安裝包的體積影響有多大?有沒有調(diào)研過同樣的產(chǎn)品在用什么?

想清楚了再決定用什么,最好是跟隨成功項目的腳步。

三、架構(gòu)上實用+適用

很喜歡曾國藩的一句話:結(jié)硬寨、打呆仗。

一字長蛇陣、八門金鎖陣,哪個好?iOS 都是單個進程,微信 Android 版本3.5以前是單進程,3.5以后有獨立的網(wǎng)絡(luò)進程; PC 瀏覽器的進程架構(gòu)更加復(fù)雜,UI 進程、內(nèi)核進程、Render 進程,而且還有根據(jù)頁面多少的進程調(diào)節(jié)模型。

這些設(shè)計都很好,各有各的道理,都適用于當(dāng)前的產(chǎn)品。所以我的觀點是:首先分析當(dāng)前產(chǎn)品的規(guī)模、性質(zhì),然后再設(shè)計架構(gòu)。

在當(dāng)前階段達到:開發(fā)效率+架構(gòu)的平衡;并向后展望3個月,或者半年左右,看看架構(gòu)能不能適應(yīng)。

我做騰訊翻譯君時,曾反復(fù)猶豫要不要模仿微信加入獨立的網(wǎng)絡(luò)進程。后來逆向了有排在第一二位的競品,最終采用了現(xiàn)在的主功能單進程模型。

產(chǎn)品規(guī)模、人員規(guī)模、功能階段,具體問題具體分析。

四、既要有攻城之力,也要有熬戰(zhàn)之氣——BUG

產(chǎn)品開發(fā)完成后,必然有 bug 。其實開發(fā)人員在工作過程中,是有一定的直覺或者心理預(yù)判的,即:某個功能模塊的質(zhì)量如何。 這里面的質(zhì)量包括:可維護性、擴展性、算法\渲染效率,還有就是bug與崩潰率。

功能開發(fā)完成后,就要開始守城了。

bug,一部分產(chǎn)生是由于架構(gòu)帶來的,例如比較復(fù)雜的架構(gòu),會導(dǎo)致復(fù)雜的實現(xiàn)細(xì)節(jié);

但還有很大部分bug,其實是基于如下三個原因產(chǎn)生的:

對于某個api的不了解,或者對于某個平臺,或者 SDK 版本的不了解。 舉例而言:android里面非主線程,是不能直接處理UI相關(guān)的事情的;JAVA 的內(nèi)存釋放也不是絕對的,相互指向是無法釋放的;函數(shù)個數(shù)是有DEX問題制約的---------------------這些bug的產(chǎn)生,也是開發(fā)人員摸索學(xué)習(xí)的過程,經(jīng)歷過一次就不會再犯了。這是學(xué)習(xí)廣度與熟練度的問題;

還有一些bug,是由于粗心大意導(dǎo)致的。例如空指針的問題,野指針的問題。在 C 的開發(fā)中,野指針的問題,GDI 句柄的釋放問題,這些都是嚴(yán)謹(jǐn)?shù)拇a需要避免的; 而又一些工具,或者方法是可以規(guī)避這些問題的,例如 android中 的利用@ Nullable 和@ NonNull 加強空指針檢測等方法;

還有一些bug,是由于“使用情況各異導(dǎo)致的”。例如:偶現(xiàn)在某個模塊crash。這里的本質(zhì)還是因為邏輯的異常邊界沒有處理好。例如 android 上的 OOM 問題,還有 PC 上 UI 焦點導(dǎo)致的對象釋放問題。這些異常情況,一部分靠測試發(fā)現(xiàn),一部分靠用戶反饋,還有一部分就靠自己的異常處理。例如Android中的try catch機制,其實就是遇到異常了,你能糾正錯誤的機會。

五、自審

每過一段時間,都要站在高空俯視自己,問問:到底是在承擔(dān)過去,還是在改變未來。

如果之前程序代碼質(zhì)量不好,后面修改問題的時間就會比較多。到了開發(fā)的中期,得多問問自己,你在不停的改正以前的錯誤,還是在做新的東西。 如果修改錯誤的時間多一點,那就要注意自己的代碼質(zhì)量了!

六、注釋

我很喜歡寫注釋。有大牛說:代碼就是最好的注釋。 可惜我還沒有達到那個程度。所以,我會把注釋寫的非常清楚。其一:為了自己以后維護的方便; 其二:為了其他人接手的方便。

這是我在翻譯君項目中寫注釋的方式。1:對于很復(fù)雜的邏輯,務(wù)必用12345的順序依次寫清楚;2 :對于函數(shù)中的某個參數(shù),需要解釋為什么要設(shè)置這個參數(shù),尤其是公用工具類里面的函數(shù)---說清楚參數(shù)的背景含義,可以讓其他調(diào)用者理解的更加清晰。

我一般不用英文寫。雖然這樣看起來格調(diào)很低,但勝在大家都能輕松的看懂。寫代碼不能太傲嬌,寫注釋也不要太傲嬌,目的是讓你的搭檔或者接手者,更輕松的理解,讓她/他少加班。

七、代碼結(jié)構(gòu)

代碼結(jié)構(gòu)要清晰。有按照功能劃分的,有按照 UI 結(jié)構(gòu)劃分的。還有公用工具類,有數(shù)據(jù)管理,有主邏輯控制。不管用哪種思想,有序的代碼結(jié)構(gòu),可以讓每個人感覺很干凈。好比日本的收納整理技巧讓很多小資推崇,無非就是干凈、整潔、便于管理。

而且,還有一個重要的好處:代碼結(jié)構(gòu)表現(xiàn)出來的其實是——程序的一個模塊\邏輯思想——讓大家工作在不同的區(qū)域。

八、代碼風(fēng)格

代碼風(fēng)格統(tǒng)一!好比一家人,有叫 Tom 的,有叫安東尼的,還有叫流川楓、石破天、圣杰夫拉斯基,無所適從。理論上,看一個函數(shù),就能從名稱上區(qū)分哪些是成員變量,哪些是局部變量,哪些是全局靜態(tài)值。

除了命名統(tǒng)一外,還有一行代碼最大的寬度,函數(shù)的連續(xù)調(diào)用長度等,頭文件的包含風(fēng)格,也最好有一個約定。類的出現(xiàn)時間,創(chuàng)建人名,最好也加上,看起來沒用,但到了追蹤問題時,就能看出時間線的好處。

九、安全與逆向

這是針對Android說的,還有PC插件也需要考慮。Android 上首先要防止被別人逆向,我成功逆向并重新打包過有第一位和第二位的競品。這似乎有點不可思議,但確實做到了。加固+混淆+代碼判斷,最好都有。

安全上,可以看金剛掃描的漏洞,逐一修改就行。公司很多工具很好用的!

十、開發(fā)效率

開發(fā)效率可以用這些方式提升:

構(gòu)建公用工具類,方便大家使用。

使用開源的一些包,例如 ORM 思想的數(shù)據(jù)庫等。

可以很快的找到問題。開發(fā)中,找 bug 的時間,往往是很多的。我用的方法有3個: 使用 try catch; 攔截所有 crash 到我指定的地方;超多的 Log,Log 有統(tǒng)一的控制開關(guān)。

借力:數(shù)據(jù)上報用燈塔,崩潰上報用 bugly,公司 KM 上很多經(jīng)驗,拿過來用。

十一、安裝包體積

TINY 壓縮圖片

刪除無效的資源文件

十二、UI渲染效率

UI 是用戶的第一感覺;UI 快并穩(wěn)定,第一感覺就不會差太多;管理好內(nèi)存,基本管理好了一半 crash;管理好 UI,等于管理了人機交互感受。

UI 上的開發(fā)是:渲染效率與渲染效果的平衡。

很匆忙的寫的,必然有很幼稚的地方,歡迎斧正。

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

(全球TMT2022年7月28日訊)凱睿德制造宣布與企業(yè)開源解決方案提供商紅帽(Red Hat)達成戰(zhàn)略合作,為工業(yè)領(lǐng)域的更大創(chuàng)新鋪平道路,并提供解決方案以支持基于開源技術(shù)的 MES 部署。 紅帽在從數(shù)據(jù)...

關(guān)鍵字: 應(yīng)用程序 開源 數(shù)據(jù)中心 程序開發(fā)

本文內(nèi)容來源于麥克泰技術(shù)RISC-V指令集架構(gòu)和生態(tài)系統(tǒng)正在全球范圍內(nèi)快速崛起,RISC-V處理器已經(jīng)在嵌入式與物聯(lián)網(wǎng)市場中嶄露頭角,開發(fā)者生態(tài)日漸成熟。面對風(fēng)起云涌的處理器市場,兆易創(chuàng)新與麥克泰軟件誠邀您9月29日上午...

關(guān)鍵字: 物聯(lián)網(wǎng) RISC-V 程序開發(fā)

隨著網(wǎng)絡(luò)威脅變得更加強大和普遍,組織時刻檢查應(yīng)用程序中的安全漏洞至關(guān)重要。 應(yīng)用程序安全性是通過查找、修復(fù)和增強應(yīng)用程序安全性來使應(yīng)用程序更安全的過程。這大部分發(fā)生在其開發(fā)階段,但其中包

關(guān)鍵字: 應(yīng)用程序 AC CODE 程序開發(fā)

區(qū)塊鏈技術(shù)一直在顛復(fù)和傳播數(shù)據(jù)的民主化。這促進了它的使用。區(qū)塊鏈范式已經(jīng)從金融用途轉(zhuǎn)向了應(yīng)用程序開發(fā)用途。 在使用區(qū)塊鏈技術(shù)的應(yīng)用中,游戲應(yīng)用是使用區(qū)塊鏈技術(shù)開發(fā)最為廣泛的應(yīng)用。比特幣通

關(guān)鍵字: 區(qū)塊鏈 應(yīng)用程序 程序開發(fā) 節(jié)點

如果你最近一直在關(guān)注科技新聞,那么可能已經(jīng)讀到了有關(guān)人工智能的新聞,無論好壞。它在你能想到的每個行業(yè)都留下了自己的印記。諸如Google,F(xiàn)acebook和Microsoft之類的科技巨頭都將賭

關(guān)鍵字: 應(yīng)用程序 AI 移動應(yīng)用 程序開發(fā)

如果你最近一直在關(guān)注科技新聞,可能會讀到一些有關(guān)人工智能的新聞,或好或壞。人工智能已影響了大量行業(yè)。 特別是伴隨著人工智能的發(fā)展與應(yīng)用逐步成為世界各國的發(fā)展戰(zhàn)略,谷歌、臉書、微軟、百度等

關(guān)鍵字: 應(yīng)用程序 程序開發(fā) AI技術(shù) 移動應(yīng)用

區(qū)塊鏈不能處理它所處理的所有信息。它應(yīng)該專注于其核心區(qū)塊鏈功能,而不是提供不同的數(shù)據(jù)選項。 隨著我們使用區(qū)塊鏈構(gòu)建越來越多的應(yīng)用程序,我們需要更多的高級數(shù)據(jù)來滿足我們的用例。這種對更高級

關(guān)鍵字: 區(qū)塊鏈 API 應(yīng)用程序 程序開發(fā)

沒有人在用IPv6?我相信有很多人在談話中聽到了類似的內(nèi)容,雖然很難說服這些人,越來越多的組織正在部署IPv6,特別是當(dāng)采用率在20歲時如此緩慢到目前為止存在的一年,這些實例至少讓我有機會讓他們

關(guān)鍵字: IPv6 應(yīng)用程序 基礎(chǔ)知識 程序開發(fā)

??????? 在Win CE5.0驅(qū)動程序中:??????? MapPtrToProccess()函數(shù)允許將一個指針從一個地址空間映射到另一個地址空間,通過調(diào)用該函數(shù),用于獲得對應(yīng)用程序空間數(shù)據(jù)的訪

關(guān)鍵字: WinCE 程序開發(fā)
關(guān)閉