手机Av在线不卡,日韩精品校园婷婷五月天,国产轮理电影一区二区,日韩三级欧美视频

杭州甲骨文天眼

[其他計(jì)算機(jī)]
獵學(xué)網(wǎng)訂閱號(hào)
獵學(xué)網(wǎng)官方企業(yè)微信
位置: 獵學(xué)網(wǎng) > 學(xué)校機(jī)構(gòu) > 杭州甲骨文天眼 > 學(xué)習(xí)資訊> 年輕程序猿最需要學(xué)什么?

年輕程序猿最需要學(xué)什么?

123 2017-04-11

在過(guò)去的七年半中,我在Ronimo游戲公司指導(dǎo)過(guò)十幾個(gè)程序員實(shí)習(xí)生,審閱了數(shù)百份簡(jiǎn)歷。我發(fā)現(xiàn)他們中的大多數(shù)都需要學(xué)習(xí)一件事情。你可能以為這是某一技術(shù)、算法、數(shù)學(xué),或其它形式的某方面知識(shí)。當(dāng)然,他們的確需要彌補(bǔ)這些知識(shí),但是在我看來(lái),這些都不是最重要的。他們要去學(xué)習(xí)的最重要的一件事是:自律。這種自律體現(xiàn)在:編寫(xiě)盡可能清晰的代碼;重構(gòu)代碼以消除因后續(xù)開(kāi)發(fā)中的變化所造成的混亂;移除從未用過(guò)的代碼并且添加注釋。

年輕程序猿最需要學(xué)什么?

我指導(dǎo)實(shí)習(xí)生的大部分時(shí)間不是在高級(jí)技術(shù)或引擎細(xì)節(jié)的解釋上,而是讓他們寫(xiě)出更好的代碼。我總是會(huì)問(wèn)實(shí)習(xí)申請(qǐng)者:要成為一名優(yōu)秀的程序員,你們認(rèn)為哪些是重要的?他們的回答通常是:代碼要清晰,易懂,便于維護(hù)。這當(dāng)然是我想聽(tīng)到的,但是很少有年輕的程序員能從一而終地去實(shí)踐。

做到這些需要自律,因?yàn)檫@意味著代碼不能停留于“實(shí)現(xiàn)了功能”。假設(shè)所有的變量都被隨意地命名,代碼依然能夠完美運(yùn)行,但是閱讀性很差。從短期看,從“功能型代碼”到“清晰型代碼”帶來(lái)的回報(bào)很少:代碼原本就可以運(yùn)行,對(duì)其清理之后代碼仍然可以運(yùn)行。這就是為什么需要自律來(lái)完成這一步,這也是為什么參加實(shí)習(xí)會(huì)很有幫助:一個(gè)好的導(dǎo)師會(huì)非常注重代碼的質(zhì)量(盡管不同的人對(duì)“好的代碼”有不同的定義),從而要求實(shí)習(xí)生進(jìn)一步改進(jìn)完善,走到下一個(gè)階段。

下面給出幾個(gè)例子,這些是我在新手程序員所寫(xiě)的代碼里經(jīng)??吹降膯?wèn)題:

名不副實(shí)的函數(shù)/變量/類(lèi)

這些函數(shù)、變量、類(lèi)所做的事情并不是他們名字所暗示的那樣,這些名字具有欺騙性。顯然名字應(yīng)該反映真實(shí)的內(nèi)容,但讓我吃驚的是,名不副實(shí)這種情況常常出現(xiàn)。

舉個(gè)例子,我最近偶然看到以前一個(gè)實(shí)習(xí)生寫(xiě)的兩個(gè)類(lèi):EditorGUI和EditorObjectCreatorGUI,這代碼本是用來(lái)處理編輯器里的界面。令我吃驚的是,創(chuàng)建新對(duì)象的按鈕的代碼放在了EditorGUI里面,而EditorObjectCreatorGUI則是處理不同對(duì)象間的操作,這都跟名字所暗示的完全相反!盡管代碼比較簡(jiǎn)單,但我花了好大一會(huì)兒才弄明白,因?yàn)槲一陬?lèi)名稱(chēng)作出了完全錯(cuò)誤的假設(shè)。這個(gè)案例的解決辦法很簡(jiǎn)單:重命名為EditorObjectCreatorGUI和EditorObjectNavigationGUI,僅僅做一小步就可以大大提高閱讀性。

命名不準(zhǔn)確這種情況我見(jiàn)到很多。之所以頻繁發(fā)生,是由于代碼在不斷地演變。最初選擇那個(gè)命名時(shí)可能是正確的,但一到代碼完成之后,命名可能就變得不準(zhǔn)確甚至錯(cuò)誤的了。這個(gè)陷阱提醒我們應(yīng)該始終把命名記在心上,在你添加一段代碼的時(shí)候就要弄清楚,這與函數(shù)或類(lèi)的名稱(chēng)是否相稱(chēng)。

推薦閱讀:《程序員最頭疼的事:命名》

混淆不清的類(lèi)

另一個(gè)問(wèn)題是混淆不清的類(lèi),即一個(gè)類(lèi)做了很多不相關(guān)的事情。當(dāng)你長(zhǎng)時(shí)間專(zhuān)注于同一塊代碼時(shí),就可能這個(gè)問(wèn)題。新功能用最簡(jiǎn)單的方法實(shí)現(xiàn),到了某種程度,類(lèi)就會(huì)變得臃腫,做了很多不相關(guān)的事情。有時(shí)候類(lèi)變得臃腫不在于代碼規(guī)模的大?。阂粋€(gè)類(lèi)可能只有幾百行,但它卻包含了不屬于本類(lèi)功能的代碼。

舉個(gè)例子,如果一個(gè)GUI類(lèi)需要“分析哪些紋理可供使用”(設(shè)想有個(gè)按鈕用于選擇紋理),如果GUI類(lèi)是唯一一個(gè)需要這種分析結(jié)果的類(lèi),那么在GUI類(lèi)里實(shí)現(xiàn)它是很合理的。但是,這時(shí)一個(gè)完全不相關(guān)的gameplay類(lèi)也需要這種分析結(jié)果的信息,因此你將GUI類(lèi)傳遞給gameplay類(lèi)來(lái)查詢(xún)紋理信息。這個(gè)時(shí)候GUI類(lèi)就多出一種東西了:它是GUI類(lèi),同時(shí)也是TextureAnalyser類(lèi)。這個(gè)案例的解決方案很簡(jiǎn)單:從TextureAnalyser類(lèi)分割出一個(gè)獨(dú)立的類(lèi),這個(gè)類(lèi)可同時(shí)被GUI類(lèi)和gameplay類(lèi)使用。

避免這種問(wèn)題的最好方法是在每次寫(xiě)代碼前三思:我在這里添加的功能跟類(lèi)的名稱(chēng)符合嗎?如果不符合,那么就要對(duì)類(lèi)重命名,或者將其分割成獨(dú)立的類(lèi),或者把這段代碼放到其他的類(lèi)中。

如果想不出來(lái)一個(gè)跟類(lèi)非常匹配的名字,這通常是代碼異味(BadSmell)。如果找不到合適的名字描述這個(gè)類(lèi),可能因?yàn)樗龅氖虑樘祀s了。這時(shí)可以將它分割成幾個(gè)部分,并且每個(gè)部分用一個(gè)恰當(dāng)?shù)拿謥?lái)描述。

體積龐大的類(lèi)

這問(wèn)題跟上面所說(shuō)混淆不清的類(lèi)很相似:隨著時(shí)間的推移,越來(lái)越多的代碼被添加到一個(gè)類(lèi)里,使得其變得臃腫。在這種情況下盡管放在一個(gè)類(lèi)是很合理的,但是類(lèi)的體積變得很大。超大的類(lèi)處理起來(lái)是很麻煩的,當(dāng)很多代碼對(duì)同一個(gè)私有成員變量進(jìn)行操作時(shí),bug就很容易出現(xiàn),并且人也很容易忽略很多細(xì)節(jié)。

分割一個(gè)超大的類(lèi)是件相當(dāng)無(wú)聊的工作。當(dāng)代碼高度交錯(cuò)時(shí),這也具有很大的挑戰(zhàn)性。分隔代碼需要高度的自律,因?yàn)檫@只是對(duì)已有的代碼進(jìn)行增加或修改而保持原有的功能不變。

Ronimo公司有一個(gè)規(guī)定,保持類(lèi)的代碼在500行以下,函數(shù)的代碼在50行以下。有時(shí)候這是不可行也不合理的,但是通常來(lái)說(shuō),不管哪一個(gè)類(lèi)或函數(shù)超出了這個(gè)規(guī)定,我們都會(huì)尋找辦法將其重構(gòu)或者分割成更小的,更易于管理的片段。(這讓我很好奇:你覺(jué)得這個(gè)限制應(yīng)該是多少行?可以在評(píng)論中留言。)

代碼注釋

實(shí)習(xí)申請(qǐng)人給我們發(fā)過(guò)來(lái)的樣本代碼幾乎都有一些被注釋的代碼塊,但并沒(méi)有說(shuō)明為什么會(huì)做這個(gè)注釋。是代碼存在錯(cuò)誤需要修改嗎?還是代碼過(guò)舊需要更新?注釋掉的代碼為什么會(huì)在這里?當(dāng)我們問(wèn)起申請(qǐng)人時(shí),他們對(duì)這些被注釋的代碼也顯得很疑惑,但是奇怪的是,總會(huì)有一些原因不明的被注釋的代碼。

代碼重復(fù)

另一個(gè)我經(jīng)??吹降膯?wèn)題是有相似功能的代碼重復(fù)出現(xiàn)。

舉個(gè)例子,從紋理名字也許可以看出這東西的用途,如TreeBackground.dds。為了知道這個(gè)紋理是否可以用于一棵樹(shù),我們檢查以Tree開(kāi)頭的文件名。也許當(dāng)使用SDK后我們能很快找到,使用beginsWith(”Tree”)就行了。這個(gè)代碼很短,如果需要用到它,直接粘貼到那兒就可以了。這就是代碼重復(fù),并且人人都知道代碼重復(fù)是應(yīng)該避免的,如果重復(fù)的代碼很短,那么最吸引人的做法是直接復(fù)制粘貼。在這兒的問(wèn)題很明顯:以后如果要檢查這個(gè)紋理是否適用于別的東西,我們就要進(jìn)行散彈式修正,一個(gè)地方一個(gè)地方修正了。

通常比較好的做法是,如果代碼功能特殊,不要去復(fù)制,而是把它放到一個(gè)函數(shù)里。盡管代碼很短很短,并且調(diào)用一個(gè)函數(shù)比粘貼需要寫(xiě)更多的代碼,但是你要學(xué)會(huì)這么做,這也需要高度的自律。

本文所討論的主題很淺顯,大多數(shù)人在上大學(xué)一年級(jí)的時(shí)候已經(jīng)學(xué)過(guò)了。難就難在從知道這些東西到實(shí)際花時(shí)間遵循它們,再到把它們記在心里。這就是為什么所有在Ronimo實(shí)習(xí)過(guò)的人學(xué)到的最重要的東西不是知識(shí),而是自律。

溫馨提示: 專(zhuān)業(yè)老師1對(duì)1為您解答    馬上填寫(xiě),¥1000 元豪禮免費(fèi)領(lǐng)!

掃一掃
獲取更多福利

×
獵學(xué)網(wǎng)
欧美日韩久久久内射| gaV黄色在线| 成人一区二区网址| 和美女玩白虎屄| AV黄色精品。| 欧美精品伊人欧美精品| 日韩不卡欧美高清在线观看| 亚州第一色| 久久一区二区三区四区六区| 久久伦理片导航| 丝袜少妇被干| 日本 丰满熟妇| 精品国产露脸久久AV| 国产男人的天堂在线一区二区三区| 久久亚洲精品性色AV| 精品久久久婷婷五五| 91九色porn| 欧美人妻中文三区| 青青草成年人| caoporn超碰男人天堂| 亚洲黄色吸奶| 天天日妹子91| 精品无人伦一区二区三区| 精品免费9999麻豆视频| 艹在线观看日韩一区| 天天射天天爽av| 性生活肛交精品无码| setingting 久| 欧美日韩精品喷水| 艹bav在线观看| 日韩无码一区不卡AV| 亚洲中文字幕春色| 日韩三级久久精| 无码破解一区第一页| 欧美日韩亚洲自拍第一页| 欧美精品精品一区二区三区蜜臀| 五月天69无码| 91麻豆精品一区| 大肉大捧一进一出视频| 国产精品久久久久9999县| 日本视频一二三区视频|