Win8时代谈Alpha/Beta/RC/RTM/RTW/GA版本

http://www.win8china.com/html/682.html

1、Windows及其他软件开发过程中一般都有哪些版本?

 
  • Pre-Alpha:与Alpha和Beta版本相比,此版本的功能甚至还没有完善,只是个前期非常雏形的产物,一般是内部工程版本,仅仅是用来进行最初的小范围的内部测试的;

  • Alpha版:内部测试版,α是希腊字母的第一个,表示最早的版本,一般用户不要下载这个版本,这个版本一般是作为技术预览的,很可能包含很多BUG,功能也不全,主要是给开发人员和测试人员测试和找BUG用的。 此版本表示该软件在此阶段主要是以实现软件功能为主,通常只在软件开发者内部交流,一般而言,该版本软件的Bug较多,需要继续修改。一般的情况下,很多软件会把这个阶段的产品当作Preview(预览版本)对外部小范围的发布,当作Demo(演示版本)。

  • Beta版:通常意义上Beta版本往往被称为测试版、公开测试版。β是希腊字母的第二个,顾名思义,这个版本比alpha版发布得晚一些,这个版的软件其实已经很成熟了,大的BUG一般不会出现,面向公众测试,即“公测”,而且这个阶段版本的软件还可能会增加一些新的功能新的应用。该版本相对于α版已有了很大的改进,消除了严重的错误,但还是存在着一些缺陷,需要经过多次测试来进一步消除,此版本主要的修改对像是软件的UI。微软近几次喜欢在Windows的Beta版本里面放上那条鱼,就是Betta鱼,就是发音和Beta相同,取的这个意思。

  • RC版:Release Candidate(候选版本),Candidate是候选人的意思,用在软件上就是候选版本。Release Candidate 简称RC,就是发行候选版本。RC和Beta版最大的差别在于Beta阶段会一直加入新的功能,但是到了RC版本,几乎就不会加入新的功能了,而主要着重于除错!该版本又较Beta版更进一步了,这个版本有点像最终发行版之前的一个类似预览版,这个的发布就标明离最终发行版不远了,也就是事实上的“候选版”了。作为普通用户,如果你很急着用这个软件的话,也可以下载这个版本。RC版本实际上已经相当或者相对成熟了,基本上不存在导致错误的BUG,与即将发行的正式版相差不多。

  • Release版:该版本意味“最终版本”,在前面版本的一系列测试版之后,终归会有一个正式版本,是最终交付用户使用的一个版本。该版本有时也称为标准版。一般情况下,Release不会以单词形式出现在软件封面上,取而代之的是符号(R)。

2、Windows 或其他软件发布时一般有哪些版本?

上面所提到的是软件开发和发布过程中的几个里程碑式的版本,而作为最后一个阶段,Release版又可以分为如下几个版本:

  • RTM:Release to Manufacturing 或者 Release to Marketing的简称,国外媒体业习惯于称之为"Going Gold"。正式在零售商店上架前,是不是需要一段时间来压片,包装、配销呢?所以程序代码必须在正式发行前一段时间就要完成,这个完成的程序代码叫做 Final Code,程序代码开发完成之后,要将母片送到工厂大量压片,这个版本就叫做RTM版。所以说,RTM版的程序码一定和正式版一样。但是和正式版也有不一样的地方:例如正式版中的OEM不能升级安装,升级版要全新安装的话会检查旧版操作系统光盘等,这些就是RTM和正式版不同的地方,但是它们的主要程序代码都是一样的。 严格的说这种版本还是属于零售版,需要激活。

  • GA:General Availability的简称,软件已经完成必要的商业活动,如推广、广告等等。此时,软件已经可以通过光盘或者网络发布了。根据惯例,RTM和GA之间的间隔一般为1周-1个月左右。

  • Boxed copy(盒装):软件被压制成光盘并包装在设计好的包装盒中。

  • RTW:Release to Web的简称,此时软件将通过网络发布,比如,在微软下载中心中提供下载。此过程中不会有任何光盘之类的物品产生。

  • DP(Developer Preview):开发者预览版,微软在2011年9月BUILD大会上发布了Win8的早期测试版本。

  • CP(Consumer Preview):消费者预览版,微软在2012年2月29日发布Win8的测试版时,把Win8 Beta公开测试版本改称为了CP版本。

3、VOL、MSDN、OEM、FPP版本为何意

  • MSDN (Microsoft Developer Network)版 :MSDN软件是微软公司面向软件开发者的一种版本。MSDN 涵盖了所有可以被开发扩充的平台和应用程序,如微软公司的百科全书 Encarta,或者是各种游戏,是不包括在 MSDN 之内的,因为这些产品直接面向最终用户,没有进行程序开发的必要。 MSDN 在 Operating System 以上的等级都有附微软的软件授权,根据 MSDN 的使用者授权合约 (EULA),MSDN版本其实已经不是一个软件开发周期中的版本代号了,它是微软软件独有的,平常说MSDN版更多意义上代表的是“微软官方原版”、“未修改版”、“纯净版”的含义。因为MSDN订阅用户是付费了的,他们可以从内部下载微软发行的软件,这个是非MSDN用户所没有的特权。 

  • OEM(Original Equipment Manufacturer)版:OEM软件只能随机器出货,不能零售,所以也叫做随机版。OEM软件只能全新安装,不能从旧有操作系统升级。 如果买笔记型计算机或品牌计算机就会有随机版软件。包装不像零售版精美,通常只有一片cd和说明书(授权书)。这种系统通常会少一些驱动,而且目前的OEM软件很少放在光盘里能给你安装,要么就是恢复盘,要么就是硬盘镜像。

  • VOL(Volume Licensing for Organizations) 版:中文可翻译为团体批量许可证,根据这个许可,当企业或者政府需要大量购买一软件时可以获得优惠。这种产品的光盘的卷标都带有"VOL"字样,就取 “Volume"前3个字母,以表明是批量。这种版本根据购买数量等又细分为“开放式许可证”(Open License)、“选择式许可证(Select License)”、“企业协议(Enterprise Agreement)”、“学术教育许可证(Academic Volume Licensing)”等5种版本,上海政府 VOL 版XP就是这种批量购买的版本。根据 VOL 计划规定, VOL 产品是不需要激活的(无论升级到SP1还是SP2)。 

  • FPP(Full Packaged Product)零售版:FPP就是零售版(盒装软件),这种产品的光盘的卷标都带有"FPP"字样,比如英文WXP Pro的FPP版本的光盘卷标就是WXPFPP_EN,其中WX表示是Windows XP,P是Professional (H是Home),FPP表明是零售版本,EN是表明是英语。获得途径除了在商店购买之外,某些MSDN用户也可以得到。

4、什么是Wave?

此外,SP服务包如Vista SP1、Vista SP2、Win7 SP1的发布往往还会以分波(Wave)的形式发布,主要以语言来区分:

例如,在Win8以前Win7Vista发布的时候,

  • Wave0:一般包括英语、法语、德语、日语、西班牙语五种语言
  • Wave1:一般包括含简体中文在内的其他36种语言

而在Win8发布的时候,Wave0 则已经把中文放到第一波了。

5、其他

除了上面那些,还有些平时能看到的一些版本,例如:

  • EVAL版:评估版。就是有30或者60天等使用期限的版本。
  • RTL版:Retail(零售版),这个版本就是真正发售的版本,有漂亮的包装、光盘、说明书等东西和高昂的价格。
  • Stable版:稳定版。 这个一般商业软件中没有这个版本,据说是在开源软件中有这个版本,这个就是开源软件的最终发行版,用户可以放心大胆的用了。


小數的1補數

Q: 各位大大,小弟在書看到有一題是求2進位的1補數,"0.011的1補數=0.100″,可是…我算了很久一直都是1.100,請各位大大指點一下!! thank you!

 
A:
這主題雖然已過了幾個月,最近在學補數,剛好路過看到。
我覺得你的答案應該是錯的,書上的答案才是對的。
在2進位下,某數的1補數,用1減去各數值即可得之。
你問的0.011,要求其1補數,應該是用0.111去減,
  0.111
 -0.011
——-
 0.100 <–正解

因為小數點前已沒有整數,不需在小數點之前多用一個1去減。

補數的作用在於使減法運算可以用加法來完成。
實際應用一下,隨便選定一個數,例如0.110,去減你那個數,算算看結果會如何。
0.110-0.011     <===== 此解為0.011
=0.110+(0.011的補數)

用書上的答案去算,上式為:
=0.110+0.100
=1.010
去掉進左邊的1,然後最小位再進1,得0.011,符合結果。

用你的答案去算,上式為:
=0.110+1.100
=10.010
這時進了兩個位數。雖然說去掉最左邊的1,然後最小位進1,也是可以得到答案0.011,
但是連進兩個位數似乎不太符合補數運算的規則。

所以,書上的答案應是正確的。

請參考小弟的心得「以十進制理解補數的作用」
http://www.wretch.cc/blog/ronlee543/11904225


Introduction to MTP: Media Transfer Protocol

http://shiwawa.blog.hexun.com.tw/8323038_d.html

微軟制訂了一套名為媒體傳輸協議(MTP)的新USB類別,希望協助Windows CE設備與Apple iPod產品系列匹敵。MTP協議與MSC的主要差異在於通信的層次、低階傳輸協議及設備控制的層級。本文將討論MTP協議的細節、MSC與MTP之間的異同之處,並介紹一些MTP傳輸範例.

安全地傳送數字內容不是一件容易的事,為使用者開發一套簡化操作的底層技術就更加困難。眾多從事創作與傳送數字音頻及視頻內容的廠商現在正面臨這項重大挑戰。微軟為新一代掌上設備開發了一套具備豐富功能的用戶界面,現已推廣一個新的傳輸協議——媒體傳輸協議(Media Transfer Protocol),簡稱MTP。

  數字版權管理(DRM)機制是用來保護有版權或付費的影音內容,這對於消費性掌上產品市場而言相當重要。由於欠缺數字內容傳送的控制技術,內容供貨商多半不願意發行如電影這類數字內容。若能開發出適合的保護協議,內容供貨商會樂於將其知識產權加以數字化,微軟表示其MTP正是目前所需的保護協議。

MTP采用分層化設計

  MTP與現今大多數的通信協議層次相似,都采用分層化設計。我們將MTP協議分成三層:物理層(Physical Layer)、傳輸層(Transport Layer)以及指令層(Command Layer)。這些功能層有別於OSI模式的前三個層面,但其概念是相同的。MTP所用的數據傳輸層是Picture Transfer Protocol(PTP)規格。其中許多指令也是PTP指令,並可通過不同廠商的PTP延伸自行擴充。

物理層

  需要註意的是,就物理層的層面而言,PTP與MTP是相同的,PTP與MTP在此層中可互通運用。本文將全文使用MTP。

  USB設備通過端點與主控端進行通信。一個USB端點對應一個主控端獨立信道。每個設備需要一個特別的雙向端點,即控制端點,其代號為端點0。主控端會利用這個端點來控制設備並判斷其各項特性。其他端點皆為單向信道,具備獨立排序與流量控制功能。MTP設備包含提供以下通信信道的四個端點:

◆ 主控端的Data OUT(海量數據輸出端點)
◆ 主控端的Data IN(海量數據輸入端點)
◆ 主控端的Commands(requests) OUT(共享控制端點:EP0)
◆ 傳送至主控端的Events IN(中斷輸入端點)

  IN與OUT代表USB設備中的數據傳送方向。USB是一種以主控端為中心的通信協議;所有IN的數據流量都會流向主控端,而OUT的數據流量皆流向設備端。

傳輸層

  MTP的數據傳輸層源自於PTP(USB Still Image Class)。USB Still Image Class規格了指令如何通過PTP進行傳輸、如何響應指令、如何中止傳輸,以及指令如何進行格式化。它並沒有規格指令本身,我們將在下面探討指令。

  USB傳輸狀態結構有三個主要狀態:指令狀態(Command Phase)、數據狀態(Data Phase)以及響應狀態(Response Phase)。主控端始終通過數據線激活指令狀態。指令狀態可能會持續多個數據包(尤其是較舊的USB 1.1設備),但所有被定義的指令皆小於64位。

  在指令狀態中,主控端會傳送一個單一指令到設備端。這些送出的指令會裝在有固定格式的存儲器(Containers)中,如表1所示。

  如果指令有一個數據狀態,IN或OUT數據狀態就會緊隨在指令狀態之後。傳送至存儲器中的數據屬於Container Type 2,而非指令區塊的Container Type 1。最後,設備發出一個響應信號,顯示指令的執行結果。響應編碼與指令有關連,它們通常含有指令所有預期的結果。例如,允許響應GetObjectHandles出現超過10種可能的響應編碼,其中包括OK以及Store_Not_Available。

指令

  PTP與MTP將設備中大部分元素視為對象。日常生活中用戶使用設備的大多數指令都會涉及對象。

通信協議運作流程

  觀察樣本數據流量的內容,很容易看出通信協議的運作流程。圖4的CATC流程圖顯示在主控端與設備之間激活通信的過程。

  主控端激活所有標示為OUT的傳輸,設備端則傳送所有標示為IN的數據。傳輸時全部采用解碼數據。例如,Transfer35的數據包含在Transaction230776中。

  Transfer35:這裏可以看到存儲器實際運作的狀況。長度字段(0x10/16小數)從LSB傳送至MSB,之後有類型(Command=1)及指令碼(OpenSession)。MTP執行ID為0,顯示這是聯機中的第一項傳輸。

  Transfer36:結束一項傳輸,顯示主控端成功完成傳輸(Code=OK)。

  Transfer37:主控端要求設備中存儲元素清單(GetStorageIDs)。例如,附有擴充卡的Palm Pilot可能有兩個元素,一個支持主存儲器,另一個支持擴充卡。

  Transfer38:這是數據存儲器的第一個範例。設備響應它有一個單一存儲元素,標示為0x1(邏輯)與0x1(物理)。這個指令完全編碼如表3所示。

  Transfer39:以一個OK指令碼關閉Transaction1。

  Transfer40:開始下一項MTP傳輸。

MTP添加延伸技術 擴充PTP規格

  我們用了大量篇幅介紹MTP與PTP的共同點,因為MTP需要70%至80%的執行工作,但MTP會在大大小小的層面上提升PTP。在通信協議上進行的小規模改良,會對功能產生極大的影響。

  MTP增加了許多以各種新方式定義的新對象。這種設計可為各個播放清單提供支持,這些播放清單是任何MP3或媒體播放裝置的重要關鍵。MTP也增加了對Palm這類PDA設備的支持,可加入日歷、聯系人及群組對象等功能。當然,MTP也加入了對影像對象的支持。

  通過加入特定的數字版權管理(DRM)屬性,包括DRM狀態、URL(在授權權限過期時,讓DRM可以要求付費)、使用次數和其他相關屬性,讓產品更容易加入數字版權管理的支持,MTP可讓DRM的支持功能更容易執行。

  MTP還添加了許多延伸技術,使數據處理更加容易。它擴充了PTP規格,因此可傳輸大型(超過4GB)的文件。它也讓存儲器與數據被分割成不同的USB數據包。這樣可以使USB芯片(包括Cypress EZ-USB FX2LP與EZ-USB SX2系列產品)能更有效率地處理數據包。

增強版MTP讓主控端與MTP外圍設備緊密結合

  微軟在基本MTP結構中加入一系列優化設計,借此提升在Windows操作系統中使用MTP設備的效果。如果您是一臺設備(Resopnder),這些功能已包含在微軟的免版稅授權範圍內。若您是主控端(Initiator),這些“Enhanced Initiator”功能的授權屬於基本功能之外,您必須與微軟公司洽談授權合約。

  增強版MTP的目的是讓主控端能與MTP外圍設備緊密結合,獲得更好的終端用戶體驗。許多增強版MTP功能的目的是一次處理多個對象,從而提高同步性能。

法律問題

  如果用戶從微軟網站下載MTP規格,就會發現說明書的前三頁是終端用戶授權協議(End User License Agreement,EULA)。建議用戶在開始任何MTP研發工作前,最好請律師詳讀這份授權書。EULA的重點包括:

◆ 基本MTP規格可免費使用:“微軟授予您以下有限的、非獨家、全球性、免版稅、不可讓渡、不可轉讓、不可再授權的使用權限。”
◆ “Enhanced Initiator”功能不在此授權範圍之內。“本協議並未授予您在解決方案中運行“Enhanced Initiator”功能或此規格中所述功能的權限。”
◆ 必須履行整套規格:“您在解決方案中的工具設計,必須遵從整套規格。”

為保護數字內容版權提出對策

  追根究底,制定另一種傳輸規範的根本標準還是終端用戶的需求。面對消費性市場要求簡單、多功能的掌上產品的壓力,以及內容創作業界要求妥善保護數字內容版權的呼聲,微軟正致力解決這種兩頭燒的問題。

  為了讓雙方都能滿意,微軟提出媒體傳輸協議。技術人員須了解底層技術,方能發現滿足顧客的產品特性和優勢。因此,雖然學習新的通信協議可能不會是件簡單的事,但之後消費者必然會感謝您的努力。


OpenGL ES

OpenGL ES 2.0 簡單介紹

OpenGL ES 和 OpenGL 一樣,是 khronos 所維護、定義的免授權費、跨平台的 3D Graphics API,不過和 OpenGL 不同的是,OpenGL ES 主要是針對嵌入式系統(embedded system)的環境(像是手機、PDA);而近年來網頁上的多媒體技術越來越複雜、多樣化,也漸漸地需要用到 3D Graphics 的硬體加速,所以也出現了基於 OpenGL ES 2.0 而發展、直接在網頁上做 3D 顯示的 WebGL

也由於 OpenGL ES 所針對的環境一般來說效能都較差、有支援的功能也較少,所以OpenGL ES 的技術方面的進展會比 OpenGL 來的慢、而且也有較多的限制。

目前 OpenGL ES 有兩個大版本,一個是基於 OpenGL 1.3 / 1.5、使用「fixed function pipeline」的 1.0 / 1.1,另一個則是基於 OpenGL 2.0、使用「programmable pipeline」的 2.x。兩者最大的差別,就在於 OpenGL ES 2.0 移除了 fixed function pipeline 的功能,而要使用透過 vertex / fragment shader 來實作的 programmable pipeline。

opengles_1x_pipeline opengles_20_pipeline_thumb[6]

上面兩張圖取自 OpenGL ES 網站的 fixed function pipeline 和 programmable pipeline 的流程圖。以這兩張流程圖,應該可以清楚地發現:vertex shader 就是對應到本來的 transform 和 (pre-vertex) lighting 的部分,fragment shader 則是對應到 texture、colour sum、fog、alpha test 等功能;也就是說,這些(橘色的部分)本來在 fixed function pipeline 時會由系統做掉的計算,現在在 programmable pipeline 都要自己寫 shader 程式來做計算了。

這樣的好處,是 render 的方法可以變得相當地有彈性,程式開發者可以根據自己的需求,來調整這兩大塊的計算方法,來達到自己需要的功能;但是相對的缺點就是,就算是最簡單的程式,都還是需要自己編寫 shader 程式,某種程度上也提高了入門的門檻。

而另外和傳統 OpenGL 在開發上差異較大的部分,包括了:

  • 在 OpenGL ES 2.0 裡也沒有 OpenGL 的 matrix stack,程式開發者必須要自行計算投影矩陣以及各物件的 transform matrix,再傳到 shader 裡做計算;雖然在 GPU 端的程式是有矩陣計算的功能,但是在 CPU 端就需要自己實作矩陣計算的基本演算法了。
  • 在 OpenGL ES 裡沒有 glBegin() / glEnd() 這種 immediate mode 的函式,vertex 資料必須用 buffer object 或 vertex array 來處理。
  • 取消了 GL_QUADS / GL_POLYGONS 這兩種 primitive 類型。
  • vertex 的所有資訊(包含本身的位置、顏色、normal 等等)都變成以抽象的 vertex attrib 來處理,需要自行定義並在 vertex shader 裡計算。
  • Lighting、material 也都是以抽象的形式,以 uniform 變數形式傳進 shader 並自行計算。

這些只是一些比較大的差異,其他還有一些地方也都不一樣,就不在這邊列舉了。而實際上,以這些部份來看,OpenGL ES 2.0 在概念上與其說是接近 OpenGL 2.0,其實更接近 OpenGL 3.x 的 Core profile 了~所以基本上以 OpenGL 3.0 的概念來寫 OpenGL ES 2.0 的程式,應該會更為適合;只是 OpenGL ES 2.0 的功能又比 OpenGL 3.x 少了些就是了。


Android JNI實例

http://huenlil.pixnet.net/blog/post/23801824

Android 的SDK中沒有包括JNI的支持,而且對如何支持JNI也沒有任何文檔說明。不過既然整個Android 平台是開源的,我們可以通過Google發佈的源代碼來找到一些線索(比如frameworks/base/media/jni/目錄),依葫蘆畫瓢的實現上層JAVA程序通過JNI來呼叫Native C程序中的函數。


Steve Jobs: Get Rid of the Crappy Stuff

http://blogs.forbes.com/carminegallo/2011/05/16/steve-jobs-get-rid-of-the-crappy-stuff/

“People think focus means saying yes to the thing you’ve got to focus on. But that’s not what it means at all. It means saying no to the hundred other good ideas that there are. You have to pick carefully. I’m actually as proud of the things we haven’t done as the things I have done. Innovation is saying ‘no’ to 1,000 things.”

“A designer knows he has achieved perfection not when there is nothing more to add, but when there is nothing left to take away.”

 


韜睿惠悅最新2011年產業預期調薪率發佈 – Towers Watson – 台灣

http://www.towerswatson.com/taiwan/press/3812

Towers Watson 是很有名的薪資依據排名…

 

 

 


Android 免費軟體 不自由!?( 微軟追權利金 點名宏碁華碩)

http://blog.udn.com/glee/4531830

業界人士表示,微軟認為Android作業系統侵權的範圍,以電子郵件、行事曆、聯絡人與PC同步功能,以及應用程式隨著訊號強度、剩餘電池電力變化而改變模式等為主,專利本身頗具殺傷力,而隨著宏碁、華碩等品牌業者都會將Android作業系統應用範圍由智慧型手機延伸至平板電腦,代表微軟追索權利金的範圍也將隨之擴大。


程式員的個人性格

提要:軟體開發是一個“以人的智力為加工原料”的工程活動,在開發過程中會不斷的對智力和性格作研究。需要注意20/80原則,並不是最勤奮的才是最優秀的。程式設計的工作難以檢查,是否成為高手和個人性格有關。你無法改變智力,但可以改變性格。在軟體開發者的成長過程中,EQ還是佔主要因素。

1. 聰明和謙遜

一個人越謙虛進步越快,承認自己的無知才會去正視和彌補自己的錯誤。理解程式需要通常很強的對細節把握和理解能力,這對程式員的智力有很大要求,但是很好的利用聰明要比你到底有多聰明要重要的多。有個程式員需要也需要謙虛,用謙虛去促進自己的智慧,使得自己更加聰明。這是軟體開發者的兩個基本質素要求,它們互相依賴促進,有時候也互相排斥,把握好自己的才智和謙虛就能更大程度提高能力。

也許某些事情很麻煩和困難,我們這時就需要使用一些方法去聰明的解決它們。比如:採用良好的程式風格便於理解、採用分解的辦法使複雜問題簡單化、多進行評審和測試,多和別人討論和關注軟體品質問題、儘量使用高度抽象的思維使問題一般化,提高重用率減少工作量、如果問題走進一個“死胡同”不妨和杯咖啡放松情緒,或和別人交談交流觀點,這是解決鑽牛角尖的好方法。

2. 好奇心

一旦你認為自己理解程式的能力是有限的,而且你意識到,進行有效程式設計是補償自己能力的方法時,你就開始了你職業生涯中漫長的探索過程。對技術的好奇很重要,否則你將在知識爆炸的時代迅速落伍。別在忙碌的工作或瑣事中,失去了對學術,自然和生活的好奇心和激情。我們可以在:

1 開發過程中建立自我意識。透過在開發中有意識的可以使用進行新技能的鍛煉,多對開發工程進行觀察,和學習其他解決方法,這樣就對整個項目有很強的把握 能力,甚至可以帶領整個團隊走向更好的方向。如果你現在做的是市場前景很好的工作,那也意味著工作中的某些技術可能會很快被淘汰,注意保持好奇心和創造 力。

2 實驗。了解程式設計的一個有效方法就是對程式設計和開發過程做實驗。你可以編寫一個程式並觀察它是如何工作的,調試器裏跟蹤程式的執行把握它的特性。 用個小程式去檢驗一個不太了解的概念,這對增進理解有非常大的幫助。或者用一個短程式,去試圖製造一些錯誤,透過錯誤去學習。錯誤不是罪過,沒有從錯誤 中學到什麼那才是罪過。

3 閱讀解決問題的有關方法。解決問題是軟體開發過程核心的活動。一個奇怪的現象:人們通常不能從自己面臨的問題找出解決的方法,即使這個方法很簡單。

4 行動前先做好分析和設計。儘管實踐和分析設計過程有很大的矛盾,但是好的分析會避免讓你過早走向一個錯誤的方向,好的設計可以避免混亂。

5 學習成功或失敗項目的開發經驗。學習程式設計的好方法是向一些優秀的程式員學習。應該要注重項目的戰略思想,把握項目中解決關鍵難點的戰術。任何成熟的 科學,都是透過解決問題發展起來的。這些問題通常被看一些被良好解決的例子,並可為將來工作做指導。(這可能也是目前很多公司注重工作經驗的原因吧?) 我們應該努力對別人工作存在的問題做研究,學習別人的無論成敗的解決辦法都是很有意義的。多拿自己的代碼和比你優秀人的代碼做比較,看看你們間有什麼異 同?為什麼會有這樣的差異?誰的更好?為什麼?也要多讓自己的代碼讓別人評價,這樣可以提高自己的程式品質。

6 閱讀手冊,書籍和期刊。手冊中往往對帶有些可以直接調用的例程,這對我們研究和解決具體問題有很大幫助。書籍中往往是介紹系統理論,多閱讀可以提高專業 能力;期刊中常常包含著流行的技術和觀點可以開闊眼界。

3. 誠實

程式設計生涯成熟的部分標志是堅持誠實。通常是:不假裝自己是高手、樂於承認錯誤、尊重編譯器的警告、對程式有清晰的了解,而不是編譯看其是否有錯、提高實際狀態報告、提供實際方案評估,在上級面前堅持自己的意見。你最好假裝自己知之甚少,聽別人的解釋,向他們學習,並且評估他們是否了解其正在討論的東西:)

你應該對自己能力做某種程度評估,認為自己完美是一個不妙的信號。錯誤正如潮流一樣是一個複雜的活動,如果你過去沒犯過錯誤,那麼沒有人會將錯誤歸咎於你。所以正視自己的錯誤。當你並不了解程式時,編譯運行並不是解決問題的方法。測試是證明錯誤的存在,而不是保證沒有錯誤。如果不能深入理解程式,就不能深入測試。依據事實給出準確的狀態報告,不能欺騙自己和別人,這是充分合作的前提。不能因為壓力而否定符合規律的做法--這個項目需要10人月,要用5人月完成除非降低性能或其他做法--準確的向上司說明情況。

4﹒ 交流與合作

真正優秀的程式員應學會怎樣和別人工作和娛樂。真正閱讀你寫出的程式是人,而不是給電腦--注意代碼的可讀性。絕多數高水平的程式員堅持自己代碼的可讀性,並抽出充足時間這麼做。對程式員能力的界定標準:

1 初學者

是能使用一種語言基本能力的程式員,他能使用例程、循環、條件語句或其他許多語言特徵。

2 中間者

有使用許多語言的能力,並且至少非常熟悉某一種語言。

3 專家

對其語言或環境或這二者有很深的造詣。這種級別的程式員對公司是有價值的,而且有些程式員往往就停留在這個水平上。

4 大師

有著專家那樣的專業知識,並且意識到程式設計隻是15%和電腦交流,其餘85%是和人打交道。一般程式員只有30%時間或更少。而且大師注重給人看的清晰易 懂的代碼,並注意建立有關文檔。

不強調可讀性的高水平代碼者可能停留在級別3上面。並且根據經驗,編寫不可讀代碼的主要原因是:代碼品質差或是編寫者自己並不能完整地理解自己的代碼。當你知道自己的水平後,不必內疚和自愧。在你知道如何提高水平後,你倒應該為自己停留在初學者或專家水平上有多長時間而內疚。

5. 創造力和紀律

雖然一些有創造力的程式員將各種標準和約定視為對其創造力的阻礙,但是沒有這些約束項目實現是不可能的。不要在無關緊要的領域建立約定,應該在值得的地方發揮你的創造力。一個傑出的程式員需要遵守許多規則。如果編碼之前不分析需求就設計,那麼你就學不到項目的許多東西,那樣工作就像小孩畫畫而不是藝術品。

6. 懶惰

懶惰的三種形式:1 拖延自己討厭的工作 2 迅速解決討厭的任務以襬脫任務 3 寫一個工具來完成討厭的工作解脫自己。當你不是透過玻璃看問題的時候,你就看到了懶惰的另一方面。“趕著做”是一種多餘和沒有必要的“努力”。有效的工作最重要的現象是人們在思考種往往顯得冷靜而不忙。一個一直很忙碌的程式員不是好程式員,因為他並不是在使用對於他來說最有價值的工具和頭腦。

7. 並不是你想象中起作用的性格

堅持:這是一筆財富也是不利的條件。你可以稱它為頑固或者堅強,這完全取決於應用它的場合。在多數情況下,軟體開發的“堅持”就是頑固的意思!當你遇到新問題時候,你再固執己見並不是好事。你應該迅速適應它,或原方案並不起作用時,學會用另一種解決方法。調試中,當你發現一個困擾你4個小時之久的錯誤時,你一定感到非常滿意。但是實際上,如果你在一段時間--通常為15分鐘沒有取得任何進展時,你應該放棄找錯。用你的潛意識去思考問題,嘗試用別的方法解決問題,甚至重寫厭煩的代碼段。和電腦錯誤做鬥爭時不明智的,你應該儘量避免它們。知道在時候需要放棄時困難的,但是必須面對一個問題:當你覺得自己受挫折時,是否考慮嘗試其他不同的方法。

經驗:過於依賴經驗會導致知識的落伍。今天的經驗必須為明天的工作服務。如果不在過去經驗中去歸納總結出一些有價值的原則或規律並改變自己去適應它們,那麼經驗也將一文不值。如果你的經驗還是停留在上一次戰鬥而不是下一次,也不因時間做出應變,那麼經驗更像是一個阻礙。此外,錯誤的經驗往往得不到客觀的評價。錯誤的經驗可以讓你得出重要的不同結論,學習其他人的錯誤經驗是一個好方法--你更可以對它做客觀的檢查。其他領域有成功經驗的專業人員往往使人放心,而在軟體開發中,知識更新迅速使得此領域中“經驗”處於一個奇怪的地位。為了使自己有所價值,你必須緊跟潮流,對於年輕求知欲旺盛的程式員在這點有優勢,而有些年老的程式員認為自己有所資格而厭倦一年接一年都要證實自己的能力。如果你已工作了10年,你得到了10年的經驗未必是真正的經驗--你如果堅持不斷地學習,你就能得到經驗,但如果你並不想學到什麼,不管多少年你也學不到什麼。

程式設計狂:如果你還沒有至少在一個相同的項目上花費一個月的時間--一天工作 16 個小時;為了發現你的程式中最後一個錯誤睡眠中你也念念不忘它,你接連幾天沒日沒夜地工作--即使你所編的程式並不複雜,那麼你可能不會意識到程式設計中有某種令人興奮的東西。 Edward Yourdon

這種對程式設計的癡迷純粹是胡鬧,並且幾乎注定要失敗。但是那些通宵程式員使你覺得他們是世界上最好的程式員,但是隨後你不得不花費幾周的時間來修正你在這短時間的輝煌中所帶來的錯誤,你可能對程式設計非常熱愛,但是你應能冷靜地處理這個問題。

8. 習慣

好的習慣起作用是由於你為一個程式員所作的大部分事情是你在無意識中所完成的。成為某方面好的或差的程式員,主要是靠你自己的所作所為。你所作所為習慣,決定了你的程式設計品行。最終,你的習慣好壞決定了你是否能成為一位好的程式員。當你開始學習某一件事時,你應按正確的方式學好它。當你開始學時,你已對其進行了思考,並且你可在正確或錯誤的途徑間作出輕易的選擇。在你作過一段時間後,你對你所作的不太注意,此時“習慣的力量”會開始起作用。確保起作用的習慣是你所希望的。

小結

‧你的個人性格直接影響你編寫電腦程式的能力。

‧ 最有明顯作用的性格為:謙虛、好奇心、誠實、創造性和紀律,還有文明的“懶惰”。

‧ 高級程式員的發展和產生與天才並無多大聯系,任何事情都和個人的發展有關。

‧ 令人吃驚的是,小聰明、經驗、堅持和慾望既可幫助你也能妨礙你。

‧ 許多程式員不主動去吸收新資訊和新技術,而是靠偶然地上穫得一些新資訊,如果你抽出少量時間學習別人的程式設計經驗,過一段時間後,你將在你的同行中脫穎而出。

‧ 好的性格對養成良好習慣有很大影響。為了成為一位高水平的程式員,你應養成良好的習慣,其餘的就會隨之而來。


OAuth 2.0

http://tools.ietf.org/html/draft-ietf-oauth-v2-10