|
作者:阿蘭·諾頓(Alan Norton)
翻譯:Purple Endurer
導(dǎo)讀:阿蘭·諾頓揭示了他如何讓自己一般般的編程技能發(fā)揮出最佳效果,從而能一直做著一名平庸程序員。
我一直以編寫(xiě)代碼為樂(lè),起因并不是我精于此道,而要部分歸因于它是一大挑戰(zhàn)。我發(fā)現(xiàn)沒(méi)有什么比命令個(gè)人電腦在顯示器上顯示“Hello World!”更令人激動(dòng)的了。而在顯示器上顯示三個(gè)紅桃或者黑桃A(Ace)和J(Jack)則是一個(gè)完全不同的問(wèn)題。我畢業(yè)后寫(xiě)的第一個(gè)程序是用Northstar Basic為NorthStar Horizon編寫(xiě)一個(gè)自動(dòng)售貨機(jī)程序,后來(lái)又為Northstar Advantage編寫(xiě)了基于圖形的21點(diǎn)紙牌(Blackjack)游戲程序。
PurpleEndurer注:
1、Northstar Basic:是源自NorthStar Horizon 和 NorthStar Advantage的一種BASIC語(yǔ)言。詳見(jiàn) http://en.wikipedia.org/wiki/NorthStar_BASIC
2、NorthStar Horizon:是North Star Computers公司生產(chǎn)、以ZiLOG Z80A為處理器的8位電腦。詳見(jiàn)http://en.wikipedia.org/wiki/NorthStar_Horizon
盡管如此陶醉于編程,但我必須坦白地承認(rèn):我是一個(gè)平庸的程序員,總在尋找一種方法來(lái)獲得大的回報(bào) - 即程序沒(méi)有語(yǔ)法錯(cuò)誤并能正常運(yùn)行。這并不奇怪,我從未像一名程序員那樣做好本職工作;我發(fā)現(xiàn)自己具有成為一名優(yōu)秀開(kāi)發(fā)人員的天賦。但是,在我們繼續(xù)往下談之前,我要給“平庸程序員”下一個(gè)定義。
平庸程序員——會(huì)使用一些現(xiàn)成工具的程序員。他只知道最簡(jiǎn)單的命令語(yǔ)法,但懂得在哪能找到更復(fù)雜命令的語(yǔ)法。他不知道如何編寫(xiě)最高效的代碼,但懂得在必要時(shí)如何重寫(xiě)和測(cè)試比較高效的代碼。他可以克服重重困難獨(dú)辟蹊徑達(dá)到目標(biāo),但他把每個(gè)困難視為挑戰(zhàn),并自信會(huì)找到每一個(gè)困難的解決方法。他可能需要較長(zhǎng)時(shí)間才能完成,但總能達(dá)到目標(biāo)。他不知道如何創(chuàng)建一個(gè)DLL,但在必要時(shí)可以弄懂。他與大多數(shù)程序員一樣,并不特別喜歡做工作記錄,之所以這樣做是因?yàn)樗且粋€(gè)專家。
工作決定技能
雖然我喜愛(ài)繼續(xù)編寫(xiě)游戲,但為了填飽肚子,我只得遷就本地就業(yè)市場(chǎng);公司有“必需勝任實(shí)際工作”這個(gè)奇怪的要求是眾所周知的。產(chǎn)品、人力資源、會(huì)計(jì)、庫(kù)存跟蹤和數(shù)據(jù)報(bào)告只是做生意必要的一些東西 - 你知道,很無(wú)聊的東西。
當(dāng)我真正為報(bào)酬而編寫(xiě)程序時(shí),我的技能發(fā)生了戲劇性地變化。它不需要采用大量先進(jìn)的編碼技術(shù)來(lái)圍著數(shù)據(jù)團(tuán)團(tuán)轉(zhuǎn),并耍魔術(shù)般地變成信息。
我被休斯飛機(jī)(Hughes Aircraft)公司雇用,通過(guò)IT服務(wù)來(lái)為產(chǎn)品控制部門(mén)提供支持。我的工作需要開(kāi)發(fā)/分析技能,我熱愛(ài)我的工作。編程不過(guò)是達(dá)到目的的手段。
開(kāi)發(fā)人員身兼數(shù)職
程序員只是開(kāi)發(fā)人員所扮演的諸多角色中的一個(gè),通常你要身兼以下數(shù)職:
購(gòu)買(mǎi)方(帶預(yù)算)Buyer (with budget)
清道夫(無(wú)預(yù)算)Scavenger (no budget)
分析師(Analyst)
設(shè)計(jì)師(Designer)
規(guī)劃師(Planner)
程序員(Programmer)
協(xié)調(diào)員(Coordinator)
測(cè)試員(Tester)
文檔管理員(Documenter)
技術(shù)支持員(Support technician)
當(dāng)開(kāi)發(fā)人員未被認(rèn)可為一個(gè)或更多角色中的專家時(shí)并不太令人奇怪。對(duì)我來(lái)說(shuō),工作職能就是編程。
我的生存之道
盡管我的編程技能不盡如人意,我仍然是一個(gè)非常成功的開(kāi)發(fā)人員。這里有一些我多年來(lái)學(xué)到的訣竅,以及如何我作為一個(gè)平庸程序員,發(fā)揮出最佳平均編碼技能水平的生存之道:
▲ 明確要求——我會(huì)預(yù)先得到完整、精確的系統(tǒng)要求清單。如果你直接開(kāi)始編碼就意味著你沒(méi)有針對(duì)系統(tǒng)設(shè)計(jì)的要求要進(jìn)行。
▲ 分析和設(shè)計(jì)——我獲得了分析和設(shè)計(jì)權(quán)。一名普通程序員獲得了分析和設(shè)計(jì)權(quán),就擁有了一個(gè)超越一名偉大的程序員的優(yōu)勢(shì)。
▲ 項(xiàng)目計(jì)劃——坦白來(lái)說(shuō),我早期職業(yè)生涯中沒(méi)有用過(guò)正式的項(xiàng)目計(jì)劃,一直到我加入了CSC,并不得不使用更多的正式文檔編制技術(shù),并且開(kāi)始使用項(xiàng)目計(jì)劃。由此我充分認(rèn)識(shí)到使用經(jīng)過(guò)慎重考慮后的項(xiàng)目計(jì)劃也是平庸程序員的一個(gè)優(yōu)勢(shì)。
▲ 經(jīng)常翻閱手冊(cè)、指南——我總是備有手冊(cè)、指南以供不時(shí)之需。我也研究了其它的參考材料。
▲ 拷貝-粘貼程序員——我不介意承認(rèn)自己是一名拷貝-粘貼程序員。多年來(lái),我寫(xiě)了許多可以在新項(xiàng)目中重復(fù)使用的代碼。因?yàn)槲抑辽倩〞r(shí)間寫(xiě)了一次代碼,所以我對(duì)這些代碼如何工作略知一二。在工作中我從不拷貝其他人寫(xiě)的代碼,并且我從不使用我在其他公司寫(xiě)的代碼。黃金規(guī)則和版權(quán)法都適用于知識(shí)產(chǎn)權(quán):您不得復(fù)制和使用別人的代碼,除非明確允許,或者你可以得到特別的許可。
▲ 毅力——我永不放棄,我一直相信自己能完成任何編程任務(wù)。
▲ 工具——當(dāng)我需要一臺(tái)更快的電腦但這又不在預(yù)算之列時(shí),我發(fā)現(xiàn)了一個(gè)經(jīng)理愿意用他們的一部分預(yù)算資金為我購(gòu)買(mǎi)。你可以通過(guò)乞求、借用,或交易來(lái)獲取所需工具,從而完成自己的任務(wù),要經(jīng)常向你的經(jīng)理提出自己的要求;只這些要求是合理的,一個(gè)優(yōu)秀的經(jīng)理會(huì)盡最大努力找到一種方式來(lái)獲得軟件,硬件,手冊(cè),或者你所需要的幫助。
▲ 手氣好(Serendipity)——也被稱為“代碼一寫(xiě)就好”策略。有幾次我像一個(gè)初級(jí)程序員那樣寫(xiě)了代碼,而這些代碼運(yùn)行得很好。我把它比作是國(guó)際象棋,你在下棋的過(guò)程中突然發(fā)現(xiàn),自己走兩步就有將死的機(jī)會(huì)。這不是編程應(yīng)有的方法,但由于我在檢討自己的職業(yè)中的罪過(guò),我不得不納入此項(xiàng)。
底線
我要做一個(gè)最終坦白:我不喜歡被看作是次等的團(tuán)隊(duì)成員。我見(jiàn)識(shí)卓越,而幼稚的程序員卻真的相信:不能寫(xiě)出“先進(jìn)”代碼的人對(duì)團(tuán)隊(duì)和公司來(lái)說(shuō)毫無(wú)價(jià)值。這些精英認(rèn)為平庸的程序員能力有限,不足以生產(chǎn)高品質(zhì)的代碼,幾乎總是犯錯(cuò),令人不快。有個(gè)觀念令我感覺(jué)既可笑和驚訝:如果你不能________(填空),就不是優(yōu)秀的程序員。
你不必成為一個(gè)出色的程序員或偉大的開(kāi)發(fā)者,特別是正在開(kāi)發(fā)商用系統(tǒng)的時(shí)候。沒(méi)錯(cuò),我是一個(gè)平庸的程序員,其主要原因是我從來(lái)不需要成為一個(gè)偉大的程序員。
我不是縱容平庸。不論做什么,都要盡力做好——包括編程。“最好”的代碼可能難以確定,但越高效的代碼可能也越難維護(hù)。可以說(shuō),任何可以完成工作的代碼就是好的代碼。代碼是像索瑪立方體(Soma cube),有240種途徑可以解決索瑪難題,同樣,也有許多代碼編寫(xiě)方法可以用來(lái)完成任務(wù)。底線就是盡可能做好工作——這是任何一個(gè)平庸的程序員也可以做到的。
it知識(shí)庫(kù):一名平庸程序員的自白,轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。