一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

成為高效程序員的基本素質(zhì)有哪些

工程師人生 ? 來(lái)源:工程師吳畏 ? 2019-04-15 16:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.理解你的需求

成為高效程序員的第一步是,保證時(shí)間的合理分配。沒(méi)有什么比將時(shí)間花在完全沒(méi)有前途的工作上更浪費(fèi)的了。

盡快開(kāi)工

盡快完成一個(gè)直觀的系統(tǒng)。這意味著先創(chuàng)建界面,無(wú)論是程序界面還是用戶界面,然后生成內(nèi)部功能的存根代碼(如果有必要的話)。這么做便于“客戶”查看,通過(guò)執(zhí)行用戶界面或編寫(xiě)程序界面的代碼,可以發(fā)現(xiàn)最初代碼存在的矛盾或遺漏。甚至在第一次交付以前,你有可能會(huì)注意到問(wèn)題或可改進(jìn)的地方。

有一個(gè)經(jīng)典觀念認(rèn)為,如果你提前設(shè)計(jì)好所有東西,那么之后你要做的就只剩寫(xiě)代碼了。如果你之前做過(guò)完全相同的項(xiàng)目,那么這個(gè)說(shuō)法當(dāng)然正確。但如果不是,你很可能會(huì)陷入死角,也就是你只是在猜想或執(zhí)行一個(gè)可疑的假設(shè)。

很早以前在一家無(wú)限網(wǎng)絡(luò)的新公司工作時(shí),我們開(kāi)了兩個(gè)月的會(huì)來(lái)設(shè)計(jì)一個(gè)將在6個(gè)月內(nèi)發(fā)布的無(wú)線門戶和網(wǎng)關(guān)。最終,我們厭煩了開(kāi)會(huì),開(kāi)始編寫(xiě)代碼。頭兩周內(nèi),我負(fù)責(zé)的部分與原始設(shè)計(jì)不符,兩個(gè)月后的第一個(gè)無(wú)線連接測(cè)試表明,我完全誤解了無(wú)線協(xié)議。

這不是說(shuō)設(shè)計(jì)是沒(méi)必要的。但在一定程度上,設(shè)計(jì)只是一種猜想。設(shè)計(jì)應(yīng)該通實(shí)執(zhí)行來(lái)確認(rèn),并且早執(zhí)行總是比晚執(zhí)行好。

即使原始設(shè)計(jì)是充分的,只要你發(fā)現(xiàn)可以調(diào)整的地方,你就要改進(jìn)它。硬件產(chǎn)品、建筑和大型軟件項(xiàng)目等會(huì)受到僵死的“預(yù)制”的損害,但對(duì)于軟件,你可以在項(xiàng)目早期提煉項(xiàng)目要求,然后制作適合的界面。但是,這必須盡早完成。

盡早開(kāi)工有利于樹(shù)立你的職業(yè)形象。如果能向你的老板展示一些成果,他會(huì)很高興的。另一方面,提早開(kāi)工有助于緩解焦慮。

經(jīng)常交付

一旦你完成一些可用的東西了,不要只是把它留作“概念實(shí)證”。要讓其他人試執(zhí)行它、看看他們的反應(yīng),然后讓它指導(dǎo)開(kāi)發(fā)過(guò)程的優(yōu)先次序。觀察人們?nèi)绾问褂媚愕能浖?,這是無(wú)可代替的方法??蛻魡?wèn)卷調(diào)查和焦點(diǎn)研究可能會(huì)提供一些有用的意見(jiàn),但有可能會(huì)讓開(kāi)發(fā)者的設(shè)計(jì)決定和特點(diǎn)被客戶牽著鼻子走,這是一種冒險(xiǎn)。

特別是要盡快將軟件交付QA人員,經(jīng)常提交成果,最好是按預(yù)定的時(shí)間間隔。讓他們測(cè)試每天的成果,或至少是每周的成果也是好的。這會(huì)讓QA人員覺(jué)得自己全程參與項(xiàng)目開(kāi)發(fā),從而培養(yǎng)職業(yè)責(zé)任感,更樂(lè)意發(fā)現(xiàn)和報(bào)告問(wèn)題。最需要優(yōu)先解決的是導(dǎo)致產(chǎn)品失效的問(wèn)題,如崩潰或死循環(huán)——讓問(wèn)題盡可能涵蓋多方面,熟悉整個(gè)產(chǎn)品,這樣才有可能提早發(fā)現(xiàn)設(shè)計(jì)問(wèn)題。

在一個(gè)小型3D軟件公司,我負(fù)責(zé)移植從SGI出品的龍頭產(chǎn)品到Windows NT。6個(gè)月后,移植沒(méi)完成,倒有了崩潰的傾向,我很不情愿地將第一輪成果交付測(cè)試團(tuán)隊(duì)。幸運(yùn)的是,因?yàn)槁┒刺?,QA經(jīng)理堅(jiān)持要我立刻解決導(dǎo)致測(cè)試

人員無(wú)法有意義地使用程序的問(wèn)題。如果是我自己測(cè)試,我應(yīng)該會(huì)忙于看起來(lái)更困難更重要的核心3D問(wèn)題,可能會(huì)怠慢看來(lái)起比較普通的問(wèn)題,如用戶界面、載入-保存功能和與計(jì)劃支持的硬件之間的兼容性。

程序師常常不想過(guò)早將代碼交付測(cè)試人員——他們不想聽(tīng)到自己已經(jīng)知道的漏洞;而測(cè)試人員極有可能不想測(cè)試基本上行不通的東西。但測(cè)試人員的工作就是找到這些問(wèn)題。如果程序師想盡快看到成果的話,應(yīng)該把漏洞報(bào)告當(dāng)成好東西。

2.把工作當(dāng)真

將軟件放在盡可能接近完工的狀態(tài)下運(yùn)行。你永遠(yuǎn)不知道你什么時(shí)候得演示系統(tǒng)、發(fā)送評(píng)估備份或甚至交付。

使用真實(shí)數(shù)據(jù)

如果你只用作為著冰山一角的樣本數(shù)據(jù)作測(cè)試,那么,你的程序可能一撞上真實(shí)數(shù)據(jù)的大冰山就沉了。

我曾參與開(kāi)發(fā)一種用于評(píng)估先進(jìn)的半導(dǎo)體絕對(duì)值的供應(yīng)鏈管理產(chǎn)品??邕^(guò)交付這道大坎后,我們接到消息說(shuō)他們輸入的第一批真實(shí)數(shù)據(jù)仍然在處理中——已經(jīng)兩天了。我同情主程序師,他不得不在管理人員和客戶的催促之下忙活了兩周。很高興遇上這事的人不是我。

使用正式版本

記住,用你自己的機(jī)器創(chuàng)建的東西不是正式的。

在最近的一個(gè)游戲開(kāi)發(fā)項(xiàng)目中,我負(fù)責(zé)用戶界面,我陸續(xù)從QA那接到報(bào)告說(shuō)有些顏色不對(duì)。最后,我發(fā)現(xiàn)問(wèn)題只出現(xiàn)在交付版本中,另一位程序師使用專門的主機(jī)調(diào)試工具找到了漏洞。結(jié)果竟是一個(gè)我在兩個(gè)月前犯下的愚蠢錯(cuò)誤,沒(méi)有指定初始顏色值。調(diào)試版本總是選擇特定的默認(rèn)值,但是交付版本會(huì)更改,最終結(jié)果是不太確定的。如果我注意經(jīng)常地運(yùn)行交付版本,我會(huì)立刻發(fā)現(xiàn)問(wèn)題的,而不是損失大量的時(shí)間。

經(jīng)常合并

及時(shí)將你的代碼并入主代碼庫(kù)中——你拖得越久,這項(xiàng)工作就越累。

我曾與一名程序師共事,他覺(jué)得每天數(shù)據(jù)庫(kù)中出現(xiàn)的所有新代碼和數(shù)據(jù)變化都“很麻煩”。確實(shí),這讓所有其他程序師每天都要花一定時(shí)間合并,他才能夠只掃視一下代碼和數(shù)據(jù)就開(kāi)始運(yùn)行一些不錯(cuò)的獨(dú)立樣本。但每一次階段性交付時(shí),我們都要花好幾天再次把單獨(dú)的代碼接到當(dāng)前的代碼庫(kù)中,有時(shí)候甚至得拖延交付或冒著損失整個(gè)項(xiàng)目的風(fēng)險(xiǎn)。

將你的代碼與正式版本分開(kāi)意味著程序師不能評(píng)估你的代碼,以及測(cè)試員不能盡早發(fā)現(xiàn)漏洞。可能你并不想其他人挑剔你的代碼,但早發(fā)現(xiàn)問(wèn)題總是比晚發(fā)現(xiàn)好的——所以,忍了罷。

3.理解你的代碼

生活中充滿了奇妙的神秘,但你的代碼可不適合出現(xiàn)這些神秘。你不必知道你的車怎么工作的——如果引擎發(fā)出奇怪的聲音,把它交給汽車技師就好了。但換成是你的代碼,如果連你都不知道它是怎么運(yùn)行的或出了什么錯(cuò),那就沒(méi)人知道了。

有自己的編寫(xiě)風(fēng)格

我童年時(shí)的鋼琴教師是這么評(píng)價(jià)我和我姐姐哥哥的:“你姐姐的時(shí)間感強(qiáng),你哥哥的鍵盤打得不錯(cuò)?!比缓笏nD了一下說(shuō):“你嘛,嗯,你很努力?!?/p>

編程是一種有些人能做有些人不能做的事,但還有一些人則是天才。雖然我有過(guò)多年的練習(xí),鋼琴還是彈不好;雖然我那么喜歡打球,水平仍然一般般。但我確實(shí)認(rèn)為我有編程和寫(xiě)作的天賦。不要吃驚,我認(rèn)為好程序就像好散文。散文和代碼都是文本,有語(yǔ)法、句法、拼寫(xiě)和語(yǔ)義。對(duì)于大多數(shù)寫(xiě)代碼的人和寫(xiě)作的人,有這些就夠了,但好作家和好程序師還要有一種美感,他們的作品在結(jié)構(gòu)和風(fēng)格上是有特點(diǎn)的,往往能借此識(shí)別出作者。

許多Windows程序師都感到好奇:為什么壞脾氣的老Unix/Mac/Amiga/Lisp程序師對(duì)Win32/MFC/.NET很不滿,但如果所有應(yīng)用界面都來(lái)自Microsoft,你可能就不知道還有什么東西是更好的。

復(fù)制粘貼

風(fēng)格化編程的反面是復(fù)制粘貼。從什么地方復(fù)制一些可能有用的代碼,稍作調(diào)整,合并,重復(fù),然后就大功告成了。你的軟件簡(jiǎn)直就是大雜燴。

離開(kāi)一家公司的幾個(gè)月后,一位前同事電郵問(wèn)我,他復(fù)制粘貼了十頁(yè)的代碼組成一個(gè)算法,為什么運(yùn)行不了。我實(shí)在不知道怎么回答了。如果你不能解釋你自己的代碼應(yīng)該是怎么運(yùn)行的,你還指望誰(shuí)來(lái)拯救你?

我甚至在診斷自己從樣本代碼復(fù)制粘貼過(guò)來(lái)的代碼時(shí)也犯過(guò)難。從復(fù)制粘貼開(kāi)始新代碼是合情理的,但你不能因?yàn)榭雌饋?lái)能運(yùn)行就放手不管了——你得返回去看看你是否讀懂了每一條,根據(jù)自己的目的理清代碼。

清理代碼

保持你的房子/公寓/房間整潔的最好辦法就是每天花一點(diǎn)時(shí)間清理它,或至少每周清理一次吧。如果等到住所亂到一定程度才打掃,那么這麻煩就非常大了。除非你雇個(gè)清潔工。

假設(shè)你沒(méi)辦法奢侈到雇一個(gè)人每天幫你清理代碼的程度,那么你就應(yīng)該定時(shí)地檢查你的代碼、清理累積的死代碼、淘汰過(guò)時(shí)的注釋和錯(cuò)誤的名稱,否則你必定會(huì)得到一份不敢拿出來(lái)見(jiàn)人的代碼。如果你不覺(jué)得丟不起人,好吧,你行。

我指導(dǎo)過(guò)的一名程序員總是向我報(bào)告,她的代碼“完成”了。這是管理者樂(lè)意聽(tīng)到的話,卻讓我非常抓狂。她的代碼從來(lái)沒(méi)有做完——你得調(diào)試它、維護(hù)它、改進(jìn)它,直到它徹底沒(méi)問(wèn)題。

問(wèn)題?注釋?

有些人認(rèn)為編程是一門手藝活,也有些人認(rèn)為編程是一項(xiàng)工程。更經(jīng)常的是,它是一門考古學(xué)。你挖掘代碼的沉積物,想知道這些奇怪的人工產(chǎn)品是用來(lái)干什么的。為后來(lái)人著想一下,留點(diǎn)線索吧。

我問(wèn)之前提到的那位程序員“完成”注釋了沒(méi)有。結(jié)果是,一個(gè)函數(shù)名稱為“GetData”的注釋居然是“Gets data”。這不只是廢話——簡(jiǎn)直是侮辱。什么數(shù)據(jù)?什么格式?來(lái)自哪里?更不要提像服務(wù)器不可用或傳送中斷時(shí)會(huì)怎么樣這種小細(xì)節(jié)了。

將你的代碼做成文檔,以防有人隨時(shí)要拿來(lái)用??赡芤玫娜司褪悄惚救恕胂肴绻贿@么做,你得重新訪問(wèn)代碼多少次???

與之前的一個(gè)老板合作時(shí),他叫我瀏覽一段沒(méi)人有時(shí)間看的代碼。一開(kāi)始,我認(rèn)為它很糟,不知道寫(xiě)的都是什么東西。之后我慢慢摸索出來(lái)這段代碼是干什么的,所以我勉強(qiáng)同意它不算太糟。最后我終于認(rèn)出這貨竟是我兩年以前寫(xiě)的。教訓(xùn):多留點(diǎn)注釋。

當(dāng)你寫(xiě)代碼時(shí),記得注釋,而不是等著出現(xiàn)什么方便的清理短語(yǔ)——注釋你的代碼,讓它甚至可以清楚地反映你在編寫(xiě)時(shí)的想法。你可以成為自己的編寫(xiě)伙伴。

現(xiàn)在你可以用javadoc和doxygen等生成漂亮的HTML或來(lái)自源代碼注釋的其他格式化的文件。理想的情況是,你每天晚上做的就是doc生成的部分,可以通過(guò)你的內(nèi)聯(lián)網(wǎng)獲得。

注意警告

無(wú)視編輯器和運(yùn)行時(shí)間警告會(huì)害到你自己。有“警告”就有原因。

我曾做過(guò)一個(gè)基于Unix的應(yīng)用,它不能成功地連接某些函數(shù)。我們通過(guò)在運(yùn)行時(shí)再次連接這些函數(shù)解決問(wèn)題。六個(gè)月后,當(dāng)我們執(zhí)行一個(gè)干凈的新版本時(shí),我們才發(fā)現(xiàn)原來(lái)我們關(guān)掉了能提醒我們未知連接漏洞的警告。在供應(yīng)商的斥責(zé)下,我們將連接問(wèn)題解決了。但結(jié)果是,原來(lái)我們只要通過(guò)重新排列庫(kù)就能連接上了。

提高編輯器的警告水平,注釋代碼以及記錄創(chuàng)建和運(yùn)行時(shí)間的警告信息,最好包括解決警告的標(biāo)準(zhǔn),這樣你就會(huì)知道是否解決問(wèn)題或忽略問(wèn)題。

4.優(yōu)化編程

帶著目的寫(xiě)代碼

復(fù)制粘貼代碼的人的另一個(gè)極端是,只是為了讓代碼看起來(lái)更漂亮(至少對(duì)他們而言)而改變代碼。雖然有編程審美感是值得贊揚(yáng)的,但改變代碼以便讓你覺(jué)得漂亮只是浪費(fèi)時(shí)間(無(wú)用的冒險(xiǎn))。瀏覽并改變別人寫(xiě)的代碼,讓它看起來(lái)更漂亮,真是讓人生氣。

我有一個(gè)挑剔的同事,瀏覽我們的代碼庫(kù)時(shí)將所有的附加語(yǔ)都刪除了。如果他只是清理了入門級(jí)員工寫(xiě)的代碼,那可能沒(méi)人會(huì)說(shuō)什么,但那些附加語(yǔ)是我們團(tuán)隊(duì)的技術(shù)領(lǐng)導(dǎo)寫(xiě)的,他可是我們公司最出色的人物之一。

不要搞破壞

“代碼重構(gòu)”現(xiàn)在十分流行,但程序員往往以為它是指代碼清理或重新設(shè)計(jì)。這個(gè)技巧是指重新組織代碼,同時(shí)不破壞其他東西。如果你以改進(jìn)的名義破壞已經(jīng)存在的功能,那么你的意思就是:要么你的時(shí)間比其他人的時(shí)間金貴,要么你不破壞就不會(huì)整代碼。

我有一個(gè)特別討人嫌的同事,他決定重新執(zhí)行我們系統(tǒng)中的解析器,但結(jié)果讓代碼變成其他所有人都不知道怎么寫(xiě)了。我讓他恢復(fù)原狀,之后發(fā)現(xiàn)代碼能編寫(xiě)了,卻不能運(yùn)行了—–問(wèn)他怎么回事,他說(shuō)“應(yīng)你的要求”,他移除了整個(gè)解析器。真沒(méi)團(tuán)隊(duì)精神。

保持代碼運(yùn)行需要一些耐心和額外的工作——你勤奮地回歸測(cè)試你的工作,在將函數(shù)添加到新代碼中時(shí),你可能需要暫時(shí)留住老代碼和界面。但對(duì)于所有與這個(gè)代碼庫(kù)有關(guān)的人來(lái)說(shuō),這是必須做的。

找到瓶頸

人們總是談?wù)摗白罴选?,但這不是一個(gè)正確的詞。我們極少將最佳作為目標(biāo)——相反的,我們的目標(biāo)是改進(jìn)和權(quán)衡以達(dá)到足夠好的表現(xiàn)。

在谷歌的電話面試時(shí),我被問(wèn)到如何在一組有序的數(shù)字中搜索某個(gè)數(shù)字。顯然,提問(wèn)的人是在問(wèn)二進(jìn)制搜索法。但在現(xiàn)實(shí)生活中,我可能會(huì)做出“錯(cuò)誤”的選擇——從頭找到尾。如果程序表現(xiàn)足夠好了,還花兩倍的時(shí)間寫(xiě)兩倍的、必須維護(hù)和調(diào)試的代碼,那是毫無(wú)意義的,特別是如果那段代碼并非程序的瓶頸(我嚴(yán)重懷疑如果那個(gè)數(shù)據(jù)是瓶頸部分,你居然還會(huì)將它線性排列)。

如果你確實(shí)需要在程序的速度或空間方面達(dá)到最佳,折騰除了瓶頸以外的其他任何部分都只是浪費(fèi)時(shí)間。

5.自我管理

你可能對(duì)你那位討厭的老板有各種抱怨,你的抱怨可能沒(méi)錯(cuò)。所以你得成為你自己的管理者。即使你的老板人不錯(cuò),他也不會(huì)站在你背后告訴你該寫(xiě)什么、怎么寫(xiě)才會(huì)快(盡管我肯定許多老板恨不得這么做)。

估計(jì)時(shí)間

程序師不能提供有用的時(shí)間估計(jì),這是出了名的。但我認(rèn)為這是無(wú)理指責(zé),因?yàn)楣芾韺油鞒龈畹念A(yù)測(cè),并且程序員的警告往往被無(wú)視(這可能是所有工程的共同災(zāi)難)。但是,合理的時(shí)間估計(jì)對(duì)于按時(shí)完成項(xiàng)目仍然是關(guān)鍵的。

在一個(gè)商業(yè)軟件項(xiàng)目中,我的有些同事居然樂(lè)得忘了產(chǎn)品交付日期——有人問(wèn)是否已經(jīng)交付了,另一個(gè)人才很驚訝地發(fā)現(xiàn),日子已經(jīng)過(guò)去好幾天了。

更糟的也更普遍的是,程序員能給出的時(shí)間估計(jì)是“只需要幾天。”每次我聽(tīng)到這話,或者我自己說(shuō)出這話,我都感到害臊。

一家圖像軟件公司的總裁想讓產(chǎn)品支持VRML(那時(shí)它是下一件大任務(wù)),包括我們將在兩個(gè)月內(nèi)發(fā)行的產(chǎn)品也支持VRML。他可能想到(他是正確的)我會(huì)拒絕開(kāi)始新項(xiàng)目,所以他問(wèn)了另一個(gè)工程師,得到了他想到的回答:“只需要幾天?!眱商旌?,我告訴總裁,我們剛剛浪費(fèi)了他和我的兩天時(shí)間,因?yàn)橛袃砂俣鄠€(gè)更重要的漏洞要修復(fù),他認(rèn)為我的理由算是充分。(后話:VRML沒(méi)有太成功。)

另一位程序員完全沒(méi)有時(shí)間估計(jì)的概念。但沒(méi)有必要完全拒絕時(shí)間的模糊屬性——畢竟只是估計(jì),事實(shí)上你應(yīng)該避免太確切。如果你是一名有經(jīng)驗(yàn)的工程師,你就知道你以前做類似的工作需要多長(zhǎng)時(shí)間,如果你不是,那你就問(wèn)問(wèn)有經(jīng)驗(yàn)的人。

我有一個(gè)聰明的朋友,經(jīng)常被指派去開(kāi)發(fā)實(shí)驗(yàn)原型,他問(wèn)我:“你怎么估計(jì)時(shí)間?”我認(rèn)為這是一個(gè)反問(wèn)句,但甚至純研究人員也要估計(jì)時(shí)間。有人支付他們,希望得到結(jié)果,即使它是許多演示樣本或某段時(shí)間發(fā)表的文章。

如果你確實(shí)估計(jì)不準(zhǔn)需要多少時(shí)間,那么你就不是做這項(xiàng)任務(wù)的合適人選。

有時(shí)候程序師不情愿承諾時(shí)間是因?yàn)樗麄兒ε卤WC。確實(shí),這個(gè)世界沒(méi)那么美好,經(jīng)理會(huì)在時(shí)間上跟你討價(jià)還價(jià),競(jìng)爭(zhēng)對(duì)手可能用嚴(yán)苛或不切實(shí)際的安排來(lái)擠兌你,希望你失敗。在你承諾時(shí)間后,你就悲劇了,你別想得到任何你希望的結(jié)果。

我曾有個(gè)老板問(wèn)完成時(shí)間后會(huì)追問(wèn)一句:“你保證?”但問(wèn)他硬件條件和其他相關(guān)事宜時(shí),他會(huì)說(shuō):“我盡量。”

我能說(shuō)的只有,抓緊時(shí)間以及給出現(xiàn)實(shí)估計(jì)。任何讓步都應(yīng)該根據(jù)實(shí)際的介于產(chǎn)品和資源之間的交易。要根據(jù)假設(shè)、相關(guān)事宜和資源做時(shí)間安排,找個(gè)地方寫(xiě)下來(lái),這樣以后你就不用麻煩你不太給力的記性了。

計(jì)劃進(jìn)度

在決定上哪去以前,你不會(huì)跳上車的,對(duì)吧?你在開(kāi)車時(shí)心里可能就有路線了。相同地,在你開(kāi)始用電腦寫(xiě)以前,你應(yīng)該知道你今天想完成什么,有一些想法了。

每天都會(huì)遇到分心的事,所以你不可能總是完成你想完成的事。與那些將軟件工程團(tuán)隊(duì)當(dāng)作自動(dòng)販賣機(jī)的人的想法相反的是,有些任務(wù)不是一天就能完成的。所以想想你到周五要完成什么,如果你完成了,那么周末你就可以好好過(guò)了。

6.不斷學(xué)習(xí)

一名社團(tuán)足球隊(duì)成員曾經(jīng)問(wèn)我,我們每天束緊防滑釘練習(xí),你們“C語(yǔ)言編程的秘密是什么?”如果存在這樣的秘密的話,我肯定會(huì)在晚間電視節(jié)目上宣傳如何靠房地產(chǎn)發(fā)財(cái)。對(duì)不起,沒(méi)有捷徑——你必須學(xué)習(xí)、練習(xí)和犯錯(cuò)。你不一定得依靠團(tuán)體訓(xùn)練或?qū)W校教育——有許多國(guó)立的和當(dāng)?shù)氐膶I(yè)團(tuán)體、書(shū)籍,當(dāng)然還有網(wǎng)絡(luò)。

編程是科學(xué)

編程被稱作“計(jì)算機(jī)科學(xué)”是有原因的。無(wú)需正規(guī)的計(jì)算機(jī)科學(xué)教育,任何人都可以輕易地開(kāi)始編程(可能太容易了)。特別是,那些學(xué)過(guò)其他工程和理科的人,可以非??斓厣鲜志幊?,然后以此謀生。但對(duì)于高效地處理重大任務(wù),你必須知道軟件的固有功能和限制、識(shí)別前提,這樣你才不會(huì)白費(fèi)力氣地做重復(fù)的工作。你不必知道所有事,但你應(yīng)該至少粗略地了解許多領(lǐng)域,必要時(shí)能做一些額外的研究。

例如,創(chuàng)建了新文件格式的人應(yīng)該知道一些關(guān)于編輯器的事。我不是指所有代碼生成的優(yōu)化如循環(huán)展開(kāi),而是基本的問(wèn)題和各種編輯的短語(yǔ)和大部分指定標(biāo)記和語(yǔ)法的重要性。今天,大多數(shù)人會(huì)默認(rèn)地使用XML,那是件好事,

但在那之前,一般是粗略地寫(xiě)一些文本格式,指向一些生成的樣本文檔作為文件,之后其他寫(xiě)了另一個(gè)解析器的人會(huì)補(bǔ)上一些在文檔中閱讀的東西,但不是全部。在出了差錯(cuò)的情況下,你有兩種方式推卸責(zé)任——要么讀者不行,要么作者太差。無(wú)論怎么樣,更受歡迎的產(chǎn)品會(huì)贏。

我對(duì)3D圖象行業(yè)最不能容忍的事情之一是,過(guò)多的文件格式不明。當(dāng)我執(zhí)行一個(gè)3D作品的OBJ文件解析器時(shí),我測(cè)試的每份導(dǎo)出作品都生成明顯不同的文件,比如空白和換行不同。與之形成對(duì)比的是,我的一個(gè)初出茅廬的同事用語(yǔ)法和詞法分析器設(shè)計(jì)了一個(gè)新游戲交換格式(現(xiàn)在,這不再是什么大不了的事了—-大多數(shù)新圖象文件格式好像都是基于XML的)。

只會(huì)將簡(jiǎn)單的腳本和用戶界面放在一起的程序員和可以處理實(shí)際問(wèn)題的程序員,如果說(shuō)這二者有什么區(qū)別的話,那就是對(duì)復(fù)雜計(jì)算的理解能力,如算法怎么影響問(wèn)題的大小。每一位程序員都應(yīng)該知道基本的復(fù)雜性術(shù)語(yǔ)和對(duì)常見(jiàn)問(wèn)題的復(fù)雜程度有常識(shí)性認(rèn)識(shí)。

我的第一份工作是計(jì)算機(jī)輔助半導(dǎo)體設(shè)計(jì),涉及許多可擴(kuò)展性的問(wèn)題,包括一些NP-complete問(wèn)題(非常難處理)。但是,每次看到在線性時(shí)間中不能解決的問(wèn)題,和我們自夸可能意味著大部分是線性時(shí)間的“線性”算法,有些工程師會(huì)興奮地說(shuō):“這是旅行商問(wèn)題!”(游戲邦注:旅行商問(wèn)題,即TSP是一個(gè)有著重要工程背景、在圖論中的典型組合優(yōu)化問(wèn)題,已被證實(shí)是一個(gè)NP完全問(wèn)題。也就是,如果一個(gè)旅行商不得不到幾個(gè)城市做生意,怎樣走最短的路線使他一次到達(dá)這幾個(gè)城市。)

免費(fèi)啤酒、自由討論、免費(fèi)軟件

好吧,其實(shí)沒(méi)有免費(fèi)啤酒;但現(xiàn)在程序員過(guò)得還不錯(cuò)(盡管經(jīng)濟(jì)衰退和外包業(yè)惹爭(zhēng)議)——畢竟你需要的東西網(wǎng)上教程、討論組上都有,還有免費(fèi)軟件可以用。你要解決的只有硬件和寬帶問(wèn)題。

7.尊重

高效軟件工程師的要求之一是,被認(rèn)真對(duì)待。你必須得到你的同事和老板的尊重,至少出于你的技術(shù)能力、對(duì)自己的工作有主導(dǎo)權(quán)、對(duì)他人有一定影響力。

愚蠢問(wèn)題

真的,這個(gè)世界上存在許多愚蠢的問(wèn)題。提出一個(gè)聰明的問(wèn)題會(huì)增加別人對(duì)你的尊重,但這是一項(xiàng)技術(shù)活。一個(gè)揭露未解決的事的好問(wèn)題會(huì)讓別人看到你深刻的內(nèi)涵,你敏銳的思維。要求說(shuō)明關(guān)于技術(shù)參數(shù)的問(wèn)題,顯示了你閱讀和發(fā)現(xiàn)問(wèn)題的能力。

如果你的問(wèn)題沒(méi)有得到答案,可能是問(wèn)題本身有誤,所以不要再重復(fù)發(fā)問(wèn)了。換一種方式提問(wèn),帶上更多細(xì)節(jié)或背景。如果被提問(wèn)的是你或花時(shí)間回復(fù)新手問(wèn)題的是你,你會(huì)感謝上述考慮的。

能與技術(shù)支持人員保持良好關(guān)系,這是讓我對(duì)自己都感到驕傲的事。但我確實(shí)記得一件往事,那時(shí)我拋出一個(gè)問(wèn)題:“幾周前提出來(lái)的那個(gè)問(wèn)題是怎么回事?”你可以想象別人是多么惱火地回答——“你說(shuō)的怎么回事是指什么,并且,你說(shuō)的是什么問(wèn)題?”

粗魯無(wú)禮是沒(méi)有回報(bào)的,特別是如果你是要求免費(fèi)指導(dǎo)或咨詢討論組。即使你是在支持協(xié)議的保護(hù)之下發(fā)問(wèn),激怒了你的技術(shù)顧問(wèn)對(duì)長(zhǎng)期合作也會(huì)很不利。

我曾經(jīng)向臭脾氣的新人們解釋為什么他們的問(wèn)題有問(wèn)題或者什么是他們從一開(kāi)始就做錯(cuò)了的,真是太累人了。現(xiàn)在,我給你快速生效的傻瓜過(guò)濾器——“我想知道的只是……”或果斷無(wú)視。

讓所有人知道你讀了文件和谷歌搜索了該問(wèn)題。除了避免回復(fù)必然的“RTFM”(游戲邦注:RTFM意為:去讀該死的指導(dǎo)手冊(cè)。當(dāng)你需要信息或者解決問(wèn)題時(shí),在請(qǐng)求對(duì)方幫助之前,應(yīng)該花一些時(shí)間嘗試自己去尋找需要的東西。)和“Google is your friend”,都顯示了你做足了功課,那些幫助的人不必搜索相同的資源。如果你確實(shí)指望他們?yōu)槟闼阉髂切┵Y源,那你的意思就是,你的時(shí)間比他們的金貴,你在謀殺他們的時(shí)間。

白癡答案

如果你要表現(xiàn)得你知道自己在說(shuō)什么,那么你確實(shí)應(yīng)該知道你到底在說(shuō)什么。工程師的交流有時(shí)候更多地是炫耀自己的知識(shí)而不是提供信息(如果你也能這么做,那我向你致敬)。這往往無(wú)益于求職面試,面試官其實(shí)是假借“發(fā)現(xiàn)你是怎么想的”的幌子,向求職者拋出空洞的問(wèn)題。當(dāng)然,如果求職者有一點(diǎn)自知之明的話,也可能產(chǎn)生出乎意料的結(jié)果。

有一位技術(shù)總監(jiān)打電話面試我,要我概述C++編輯的結(jié)果堆??蚣埽⑶铱陬^答復(fù)他。我一步一步地打草稿,每次我給他正確的答案,他都反過(guò)來(lái)要我說(shuō)一個(gè)錯(cuò)誤的答案,以便我們可以仔細(xì)檢查為什么那個(gè)選擇不管用。我不知道我這么寫(xiě)是不是在彰顯我有多聰明或他有多聰明。

作為一名工程師,你不能太倚重錢財(cái)和長(zhǎng)相——信譽(yù)才是你的資本。所以如果你犯錯(cuò)了,就坦率承認(rèn)吧。

我有幸與一名資深工程師共事,他從來(lái)不犯錯(cuò)。當(dāng)他的Java代碼在多重處理器系統(tǒng)中崩潰時(shí),原來(lái)是出現(xiàn)了大漏洞。當(dāng)我拿代碼指出UI代碼不支持多線程運(yùn)行時(shí),他堅(jiān)持說(shuō)只有一個(gè)線程。當(dāng)我列出代碼中的7條線程(我能找出的)時(shí),他同意不應(yīng)該保留這么多線程,并且最好修改一下。但他還是按老樣子編寫(xiě)代碼——他沒(méi)有修復(fù)任何漏洞,他只是用更多代碼掩蓋了漏洞。

最后,一個(gè)節(jié)省時(shí)間的建議:不要糾結(jié)于愚蠢的爭(zhēng)論。愚蠢是會(huì)傳染的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 程序員
    +關(guān)注

    關(guān)注

    4

    文章

    954

    瀏覽量

    30413
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)

    的地址)出發(fā),采用推導(dǎo)的方式,深入淺出的分析了廣大C程序員學(xué)習(xí)和開(kāi)發(fā)中遇到的難點(diǎn)。 2. 從方法論的高度對(duì)C語(yǔ)言在數(shù)據(jù)結(jié)構(gòu)和算法方面的應(yīng)用進(jìn)行了深入講解和闡述。 3. 講解了絕大多數(shù)C程序員開(kāi)發(fā)
    發(fā)表于 05-13 16:45

    如何在 樹(shù)莓派 上編寫(xiě)和運(yùn)行 C 語(yǔ)言程序?

    ,一本很好的書(shū)是BrianKernighan和DennisRitchie所著的《TheCProgrammingLanguage》。這本書(shū)對(duì)經(jīng)驗(yàn)豐富的程序員和想學(xué)習(xí)C語(yǔ)
    的頭像 發(fā)表于 03-25 09:28 ?570次閱讀
    如何在 樹(shù)莓派 上編寫(xiě)和運(yùn)行 C 語(yǔ)言<b class='flag-5'>程序</b>?

    零基礎(chǔ)入門:如何在樹(shù)莓派上編寫(xiě)和運(yùn)行Python程序?

    是一種非常有用的編程語(yǔ)言,其語(yǔ)法易于閱讀,允許程序員使用比匯編、C或Java等語(yǔ)言更少的代碼行。Python編程語(yǔ)言最初實(shí)際上是作為L(zhǎng)inux的腳本語(yǔ)言而開(kāi)發(fā)的。Py
    的頭像 發(fā)表于 03-25 09:27 ?740次閱讀
    零基礎(chǔ)入門:如何在樹(shù)莓派上編寫(xiě)和運(yùn)行Python<b class='flag-5'>程序</b>?

    Gemini Vision + Raspberry Pi 化身“數(shù)字導(dǎo)盲犬”?

    本文討論了一位程序員利用樹(shù)莓派、攝像頭、Gemini和Python構(gòu)建PeregrineEye設(shè)備,使其成為“數(shù)字導(dǎo)盲犬”為視障者服務(wù)的項(xiàng)目經(jīng)歷,包括項(xiàng)目靈感、功能、構(gòu)建過(guò)程、遇到的挑戰(zhàn)及未來(lái)計(jì)劃等
    的頭像 發(fā)表于 03-25 09:20 ?1318次閱讀
    Gemini Vision + Raspberry Pi 化身“數(shù)字導(dǎo)盲犬”?

    阿里云升級(jí)通義靈碼AI程序員,全面上線

    近日,阿里云宣布其備受矚目的通義靈碼AI程序員已正式全面上線,為開(kāi)發(fā)者帶來(lái)更為強(qiáng)大和便捷的編程輔助工具。 此次上線的通義靈碼AI程序員,在功能上實(shí)現(xiàn)了全面升級(jí)。現(xiàn)在,它支持VS Code
    的頭像 發(fā)表于 01-09 11:16 ?715次閱讀

    TMS320C6000程序員指南

    電子發(fā)燒友網(wǎng)站提供《TMS320C6000程序員指南.pdf》資料免費(fèi)下載
    發(fā)表于 12-24 17:19 ?0次下載
    TMS320C6000<b class='flag-5'>程序員</b>指南

    TMS320C55x DSP CPU程序員參考補(bǔ)充

    電子發(fā)燒友網(wǎng)站提供《TMS320C55x DSP CPU程序員參考補(bǔ)充.pdf》資料免費(fèi)下載
    發(fā)表于 12-21 11:36 ?3次下載
    TMS320C55x DSP CPU<b class='flag-5'>程序員</b>參考補(bǔ)充

    UCD3138A64/UCD3138128程序員手冊(cè)

    電子發(fā)燒友網(wǎng)站提供《UCD3138A64/UCD3138128程序員手冊(cè).pdf》資料免費(fèi)下載
    發(fā)表于 12-09 14:42 ?0次下載
    UCD3138A64/UCD3138128<b class='flag-5'>程序員</b>手冊(cè)

    機(jī)械革命發(fā)布CODE AI程序員

    近日,英特爾新質(zhì)生產(chǎn)力技術(shù)生態(tài)大會(huì)在成都舉行,機(jī)械革命作為重要參展商帶來(lái)了多款明星產(chǎn)品引爆全場(chǎng)!其中更是在AI PC軟件生態(tài)產(chǎn)品發(fā)布分論壇上,Intel、智譜、機(jī)械革命三方聯(lián)合發(fā)布了專為程序員設(shè)計(jì)的CODE AI程序員本,成為
    的頭像 發(fā)表于 11-30 10:34 ?1108次閱讀

    Linux驅(qū)動(dòng)程序程序員指南

    電子發(fā)燒友網(wǎng)站提供《Linux驅(qū)動(dòng)程序程序員指南.pdf》資料免費(fèi)下載
    發(fā)表于 11-22 15:53 ?0次下載
    Linux驅(qū)動(dòng)<b class='flag-5'>程序</b><b class='flag-5'>程序員</b>指南

    AI編程工具會(huì)不會(huì)搶程序員飯碗

    AI編程工具可輔助編程,減少手動(dòng)編碼,提升效率,對(duì)程序員積極影響也有挑戰(zhàn)。程序員需深化技能、拓寬知識(shí)應(yīng)對(duì)。長(zhǎng)遠(yuǎn)看,AI與人類程序員將共生共榮。
    的頭像 發(fā)表于 11-08 10:17 ?533次閱讀

    軟通動(dòng)力子公司鴻湖萬(wàn)聯(lián)助陣?guó)櫭?024程序員節(jié)成功舉辦

    10月24日,在武漢、成都、深圳等地政府指導(dǎo)下,鴻蒙生態(tài)服務(wù)公司舉辦了一場(chǎng)面向廣大開(kāi)發(fā)者的盛會(huì)——鴻蒙1024程序員節(jié)暨鴻蒙原生應(yīng)用交流會(huì)。軟通動(dòng)力子公司鴻湖萬(wàn)聯(lián)作為開(kāi)源鴻蒙生態(tài)的重要參與者和貢獻(xiàn)者
    的頭像 發(fā)表于 10-29 15:49 ?753次閱讀
    軟通動(dòng)力子公司鴻湖萬(wàn)聯(lián)助陣?guó)櫭?024<b class='flag-5'>程序員</b>節(jié)成功舉辦

    第五屆長(zhǎng)沙·中國(guó)1024程序員節(jié)開(kāi)幕

    據(jù)官方媒體報(bào)道,10月24日;? 第五屆長(zhǎng)沙·中國(guó)1024程序員節(jié)在湖南湘江新區(qū)開(kāi)幕;本次中國(guó)1024程序員節(jié)以“智能應(yīng)用新生態(tài)”為主題。設(shè)置岳麓對(duì)話、技術(shù)英雄會(huì)、主題峰會(huì)及賽事、展覽等活動(dòng),一場(chǎng)
    的頭像 發(fā)表于 10-25 15:42 ?498次閱讀

    90后程序員的職業(yè)成長(zhǎng)漫談

    開(kāi)始,逐步了解公司的業(yè)務(wù)、文化,以及學(xué)習(xí)如何成為一名合格的職場(chǎng)人;19-21年,我開(kāi)始負(fù)責(zé)一塊完整的業(yè)務(wù),并逐漸成長(zhǎng)為小組負(fù)責(zé)人; 2022年開(kāi)始負(fù)責(zé)整個(gè)部門的架構(gòu),并且開(kāi)始參與一些公司核心項(xiàng)目的設(shè)計(jì)與落地。 這一路走來(lái)經(jīng)歷的挫折與收獲
    的頭像 發(fā)表于 10-15 15:24 ?550次閱讀
    90后<b class='flag-5'>程序員</b>的職業(yè)成長(zhǎng)漫談

    技術(shù)干貨驛站 ▏深入理解C語(yǔ)言:掌握程序結(jié)構(gòu)知識(shí)

    在計(jì)算機(jī)編程的世界中,C語(yǔ)言被廣泛認(rèn)可為一門強(qiáng)大而高效的編程語(yǔ)言,其簡(jiǎn)潔的語(yǔ)法和直接的指令使得它成為了許多程序員的首選。了解C語(yǔ)言的程序結(jié)構(gòu)和基本語(yǔ)法對(duì)于初學(xué)者來(lái)說(shuō)至關(guān)重要。從一個(gè)簡(jiǎn)單
    的頭像 發(fā)表于 07-27 08:45 ?1861次閱讀
    技術(shù)干貨驛站 ▏深入理解C語(yǔ)言:掌握<b class='flag-5'>程序</b>結(jié)構(gòu)知識(shí)