由於JAVA語言安全性高、代碼優化、跨平台等特性,從1995年5月由SUN公司發布後,迅速取代了很多傳統高級語言,占據了企業級網路應用開發等諸多領域的霸主地位。
不過,JAVA最突出的跨平台優勢使得它不能被編譯成本地代碼,而要以中間代碼的形式運行在虛擬機環境中,這使得JAVA的反編譯要比別的高級語言容易實現,並且反編譯的代碼經過優化後幾乎可以與源代碼相媲美。
為了更好地保護知識產權,避免本公司的智力成果輕易被人竊取,開發者有必要對反編譯工具深入了解,以便有針對性地採取保護措施。
目前,比較流行的JAVA反編譯工具有近30種,其中有三款堪稱精品:
一、 應用廣泛的JAD
在眾多的JAVA反編譯工具中,有幾種非常著名的工具使用了相同的核心引擎——JAD,其中主要包括:Front End Plus、mDeJava、Decafe Pro、Cavaj Java Decompiler、DJ Java Decompiler、NMI』s Java Class Viewer和國產的JAVA源代碼反編譯專家。
JAD本身是一個命令行工具,沒有圖形界面,上述的這些工具大多是在JAD內核的基礎之上加了一個圖形界面而已。這么多種產品的共同選擇,足可證明JAD在JAVA反編譯領域中的尊貴地位。
JAD是使用Microsoft Visual C++開發的,運行速度非常快,可以處理很復雜的JAVA編譯文件。眾多的參數使JAD可以靈活應付多種加密手段,令反編譯的代碼更加優化和易讀。由於JAD參數太多,沒必要一一解釋,其中有幾個最常用的如下(以JAD 1.5.8f版本為例):
-d
- 用於指定輸出文件的目錄
-s - 輸出文件擴展名(默認為: .jad),通常都會把輸出文件擴展名直接指定為.java,以方便修改的重新編譯。
-8 - 將Unicode字元轉換為ANSI字元串,如果輸出字元串是中文的話一定要加上這個參數才能正確顯示。
最常用的反編譯指令如下所示:
Jad –d c:\javasource –s .java -8 javatest.class
這條指令將當前目錄下的javatest.class反編譯為javatest.java並保存在c:\javasource目錄里,其中的提示輸出為中文,而不是Unicode代碼。
二、 源碼開放的JODE
JODE是全球最大的開源項目網站Sourceforge.net的成員,在所有的JAVA反編譯器中,JODE的反編譯效果是最好的,尤其是對付一些常見的加密手段,例如混淆技術等,更是出類拔粹。
JODE本身也是純JAVA開發的,最近越來越多的JAVA反編譯軟體也選擇JODE來做它們的核心引擎,例如JCavaj Java Decompiler、BTJ (Back To Java)、jEdit』s JavaInsight plugin等。
JODE是一個可運行的JAR文件,在windows環境下雙擊即可運行。
需要特別說明的是,JODE不是通過常規的Open->File的方式來載入JAVA編譯後的類文件(*.class)或是類包(*.jar)的, 而是通過在Options菜單中的Set Classpath來實現的,單獨的類文件可以將它的上一級目錄作為Classpath輸入,然後再選擇Reload Classpath即可。
新加入的類包或是類的名字會在左側窗口出現,雙擊類包名可以展開目錄樹結構,雙擊需要反編譯的類名則在右上角的窗口中直接顯示反編譯後的源代碼。
三、 獨樹一幟的DAVA
DAVA不是一個獨立的JAVA反編譯器,而是JAVA代碼優化工具Soot的一部分。Soot和JODE一樣是純JAVA開發的,也是一個獨立的JAR包,但卻不能通過雙擊直接運行,而是象JAD一樣在命令行狀態運行。
Soot對環境變數的配置要求非常嚴格,通常情況下要對CLASSPATH做如下設置:
Set CLASSPATH=%CLASSPATH%;c:\sootdir\sootclasses-2.1.0.jar;.;
其中的c:\sootdir\是下載的soot類包放置的路徑,CLASSPATH末尾的.;代表了當前目錄,如果不加上這個的話Soot經常會報一個找不到類的錯誤。
DAVA是作為Soot的一個參數使用的,通常的用法如下:
Java soot.Main –f dava –d c:\javasource javatest
注意最後的類名不用帶.class後綴,因為它默認是處理class文件,這個操作與前述的JAD的參數效果相同。
DAVA採取了流程優化的方式進行反編譯,與傳統反編譯思路不盡相同,但卻對改變流程類的加密方法有獨特的反編譯效果。
上述的三種工具各有千秋,但效果都非常不錯。經測試,它們基本上都可以把JDK自帶的一些常式完全反編譯,然後不加任何修改可再編譯成功,並能正常運行!
Ⅱ 新手如何學習編程
熟悉以下關鍵東西,可以邊學邊做,定期訓練,經常思考,長期積累:
1、語法。
2、基礎理論(數學、數據結構、演算法等)。
3、設計方法(編程原則、設計模式、框架設計等)。
4、庫(核心、基礎、UI、擴展、游戲引擎等)。
5、計算機相關(操作系統、網路、圖形學等)。
6、領域知識(游戲設計、網站設計等)。
7、開發工具(編輯器、IDE、自動部署等)。
8、項目管理(進度管理、分工協作、Bug管理、版本控制等)。
最普遍也是最重要的能力:創造力。努力分析並理解好做什麼以及怎麼做。要知道上面那些東西一開始都是不存在的。
具體方法包括:
1、快速閱讀入門教程和書籍,適合學習語言和基礎庫。比如我學Java讀的《Java編程思想》,練習題做過一點,然後學ActionScript就沒讀過書,只讀過Adobe官方文檔《ActionScript 3.0編程》。
2、閱讀庫的文檔、實例、源碼。比如Flash、Flex開發,熟悉官方API很重要,很多細節要具體使用時才注意到,這時候最好做個筆記,雖然我從沒看過我的筆記。
3、做一個自己感興趣或熟悉的小項目,比如我就以黑白棋游戲作為多個語言的試水項目,一樣的邏輯,便於把關注點放在語言特點上。
4、自己動手豐衣足食。廚師有菜譜,程序員可沒菜譜。比如我做游戲,最關鍵的游戲編程知識全部是動手學出來的,很少有專門針對某個業務領域(如游戲)的編程書籍,要麼是入門書,要麼是模式書(如演算法)、理論書(圖形學),很少有書籍教你如何開發一個45度角地圖系統加編輯器的,全靠自己思考,以及看前人的代碼,需要時找些網路資料。關鍵是,可以培養最重要的創造力。
對於演算法和設計模式,可以研讀下,但是關鍵還是靠平時如何使用了。新手勉強不來的。
項目管理方面的,就得靠工作經驗了,多思考多提意見不要只走流程。
Ⅲ 學習java好找工作嗎
學Java好不好找工作?先來看看學完Java後能做些什麼吧。
一、大數據技術
Hadoop以及其他大數據處理技術都是用Java或者其他,例如Apache的基於Java 的 HBase和Accumulo以及ElasticSearchas。但是Java在此領域並未占太大空間,但只要Hadoop和ElasticSearchas能夠成長壯大,Java 依舊還有潛力去在這個市場占據一部分。
二、嵌入式領域
Java 在嵌入式領域發展空間很大。在這個平台上,你只需130KB就能夠使用 Java 技術(在智能卡或者感測器上)。最初,Java 被設計用來在嵌入書設備上工作。事實上,這只是其中的一個領域,這只是當初的「一次寫入,隨便暢游」的項目,現在看起來是這樣了。
三、網站領域
同樣,Java在電子商務領域以及網站開發領域占據這大部分席位。你可以運用許多不同的框架來創建web項目,SpringMVC,Struts2.0 以及 frameworks。
即使是簡單的servlet,jsp和以struts為基礎的網站在政府項目中也是很受歡迎的。例如醫療救護,保險,教育,國防以及其他的不同部門網站都是以Java為基礎來開發的。
四、伺服器程序
Java在金融服務業的應用非常廣泛,許多跨國投資銀行例如:Goldman Sachs(高盛投資),Citigroup(花旗集團),Barclays(巴克萊銀行)以及其他銀行,都用Java來編寫前台和後台的電子交易系統,結算和確認系統,數據處理項目以及其他項目。
大多數情況下,Java被用在伺服器端開發,但多數沒有任何前端,它們通常是從一個伺服器(上一級)接收數據,處理後發向另一個處理系統(下一級處理)。
五、軟體工具
許多常用的軟體和開發工具都是運用Java來編寫和開發的。比如Eclipse,IneteliJIdea和Netbans IDE。
六、高頻交易
Java平台大幅度提高了這個平台的特性和即時編譯,他同時也能夠像C++一樣傳遞數據。正是由於這個原因,Java成為程序員編寫交易平台的語言,因為雖然性能不比母語,但你可以避開它的安全性,可移植性和可維護性,以更快的速度運行。
七、J2ME系統
隨著近幾年IOS和Android的出現,幾乎占據了J2ME市場,但仍然有低端諾基亞、三星手機使用J2ME。這個時代的大多數手機游戲,手機應用都採用J2ME的一部分MIDP和CLDC編寫,以適應 Android系統。但是J2ME依然在藍光,磁卡,機頂盒這些產品中流行。通信應用之所以這么火是因為Nokia的手機依舊支持J2ME。
八、科學應用
今天,Java依然是在科學應用中最好選擇,包括自然語言處理。最主要的原因是因為Java比C++或者其他語言相對其安全性、便攜性、可維護性以及其他高級語言的並發性更好。
九、交易系統
第三方交易系統,現已是金融服務產業的一個很大的部分,它們同樣也是Java編寫。例如受歡迎的交易平台Murex,它也是Java編寫,並與許多的銀行前台所連接,提供服務。
作為歷史悠久的老牌開發語言,Java在金融行業、銀行、電子商務、政務等領域有廣泛的應用空間,任何一個選擇學習Java的優秀程序員都有廣闊的發展空間。並且,根據職友集數據顯示,全國java平均工資:¥12820/月,取自 472311 份樣本。Java在北上深等一線城市招聘需求量非常大。
只要你技術掌握的好,想找份不錯的工作是十分容易的。反之,技術掌握的不好,找工作肯定會遇見困難。最好是找個面授的學校系統全面的學一下。可以去【千鋒】試聽看看,親身感受下,看你能不能學會Java,難不難,值不值得你學。
Ⅳ 易輯編譯潤色圖片處理效果怎麼樣
不錯。
易智編譯的論文潤色將保證在不改變文章本身立意的基礎上進行修改和優化提升。
絕不會有任何主觀意識的內容添加和對文章原意的修改。
Ⅳ 學python有前途么
在回答這個問題以前,先分析下Python的就業方向如何?具體可以分為三個方向。
python作為一門高級編程語言,它的誕生雖然很偶然,但是卻獲得了無數編程愛好者的喜愛。Python語言簡單易懂,初學者學Python語言,不但入門容易,而且經過深入系統的學習可以編寫復雜的程序。那麼接下來說說學習Python的三大就業方向,希望能對大家有所幫助。
方向一:利用python做爬蟲
Python語言還可以寫爬蟲,但僅僅只是爬蟲的入門而已。過Python入門爬蟲比較簡單易學,不需要在一開始掌握太多太基礎太底層的知識就可以很快上手,而且很快可以做出成果,非常適合小白一開始想做出點看得見的東西的成就感。如果想要往這個方向發展,Python是不錯的入門選項。
方向二:數據分析和人工智慧
Python是機器學習和AI的主要開發語言。作為被用於機器學習和人工智慧系統以及各種現代技術的一門語言,Python能夠十分容易地應用於分析和組成可用的數據,這也使它成為數據科學中比較流行的語言之一。而豐富的本機拓展也使Python的優勢得以強化,更適用於機器學習、數據計算和人工智慧領域。
方向三:web全棧開發工作
掌握前端知識,掌握python三大後端框架,可以具備獨立開發網站的能力,成為一名合格的web全棧開發將不在話下。全棧工程師是指能駕馭各種開發工具的工程師,而Python本身就有著很強的全棧式綜合語言的特點,能夠完成後端、前端、GUI、科學運算、網路編程、大數據開發等等,掌握了Python,會使你更快成為一名全棧程序員。
所以,學好Python,就業前途還是很可觀的,但是所有的前提都是需要自己真的有兩把刷子哦。
Ⅵ 提倡中文編程為什麼會總遭到程序員的嘲諷
原因:
1,用英文是歷史原因;
2,編程環境生產使用的都是英文的,包括運行系統。
3,程序生態是英文的。
4,程序上語言只是符號,因此,不論你用什麼自然語言來表達,只要編譯器能轉換,都是可以的。
7,看盡千帆過,跳出此山中。不用太糾結於表面形式,尋找更深本質,或許會更好。
Ⅶ 開發一個 C++ 編譯器的難度有多大,難點又在哪裡
C++的前端是出了名的復雜度和可靠性要求並駕齊驅的軟體。
(這兩點都比它高一個數量級的大概就只有OS了)
對於這種系統,唯一的辦法就是燒錢。
燒錢的作用主要包括:
1.留人;
2.填坑;
3.買買買。
先說留人:復雜度一般是「細節」的代名詞。現實中的編譯器大多數以遞歸下降為主,自底向上的歸納推導為輔。這兩樣在教科書上也就是幾頁紙的事情。但是現實總是很殘酷的,人們總想讓語言更加「易用」,這就意味著各種上下文相關的情況都會出現。
對於C++來說,你要判斷一個符號是類型或者變數(比如這個符號被用在模板參數中),要看前面的聲明/定義。這就是一個上下文相關的推導。然後你就會寫大量的if else switch case之類的代碼來解決各種各樣的可能分支。寫它的人當然知道它是做什麼的,但是如果這個人離職了,新來一個人,就呆掉了,這寫的都是什麼煞筆玩意兒。因為它不知道現實中怎樣的需求會導致奇形怪狀的邏輯。所以人員的穩定,對於這種長周期迭代、邏輯復雜的項目是很重要的。但是人的水平要求高嗎?不算高也不算低。總結來說就是:有邏輯,知好歹。技術什麼都可以培養,但是態度和基本智商是比較難培養起來的。
至於怎麼保證人員穩定?很簡單:加薪。
再說填坑:編譯器是對正確性要求很高的基礎軟體。這里的正確性既包括產生的代碼的正確性,也包括編譯器自身對於各種問題的容忍度和足夠豐富的錯誤提示。容錯和錯誤提示本身也是代碼,也有很大的出錯幾率。所以這些軟體,bug少不了。但是作為基礎軟體,你又不能隨便就2+3搞成了2*3,這樣還怎麼讓別人相信愛情。所以要燒很多錢來養一幫debugger。
再說買買買:古人日:我們不用很麻煩很辛苦也可以成佛。既然這么費神我們自己做干什麼,不如買別人的吧。於是MS就乾脆不自己做了,直接去EDG整了個前端,這樣就可以少了不少人年。這就是傳統土豪和水果這種新暴發戶想的不一樣的地方。
傳統土豪想的是:我們有這么多錢為什麼還要自己解決問題呢?買買買!
水果新貴則是:啊呀,不小心有了這么多錢,我們要不要給自己製造點問題好把這些錢花出去?
Ⅷ C/C++2018年發展前景怎麼樣
C++博大精深,是一門可以學一輩子的語言,如果你有著10年C++開發經驗,各大知名IT公司都會搶著要你;如果你有15年C++開發經驗,年薪百萬不是夢,而且必然小有名氣,在C++圈叱吒風雲。可謂是經驗越多,價值越高,沉澱越厚,絕對是一次投入,終生受益!成為名副其實的永不過時的全棧型IT人才!
從TIOBE語言排行榜中我們可以發現,在過去逾15年的時間里,C++一直穩居最受歡迎語言列表的第三名。對一個老牌語言來說,這個成績不算差了。
在大學里,有很多人早已接觸過C語言編程。他們對C/C++感興趣,自己主動學習。如果在一種好的學習環境下,興趣所在,成長的會很快。這些人,知道自己所學所想,目的很明確,動力也很強,效率很高。
社會上也存在這樣一大波人,非計算機專業,甚至是高中學歷。他們中很多人不知道自己適不適合學C/C++編程,那麼該怎樣判斷自己適不適合編程呢?首先需要確定你是否對編程感興趣,自己是不是想在編程方面發展,如果是的話,建議快速選擇中公優就業進行學習。(相關推薦:中公優就業C/C++周末精品班)
一、C++職位需求量大
2018年,C++職位需求量大的驚人,畢業後根本不用發愁沒有工作,而且高薪!
下圖是C++在智聯招聘上的職位需求。從圖中可以清楚看到:搜索日期是今天日,單單是北京一個城市的職位需求數量就達到了34282個!這么大的缺口誰來填補?你還會發愁找不到工作么?
小編只是把你平時看不到的數據,把這些巨大職位需求展現在你的眼前,扮演著搬運工的角色。我們時刻都在關注著市場動態,為你們提供最新的數據。建議你們也可以多去智聯招聘或者前程無憂上查詢,數據都是絕對真實的!
二、C++稱霸的領域
C++是一門運用很廣泛的計算機編程語言,適合於多種操作系統,因此也有著很廣闊的運用領域。據不完全數據統計,C++在游戲、伺服器端開發、數字圖像處理、編譯器、金融等領域中都是可以被用到的,下面我會給出一些建議。
游戲行業:幾乎所有3A游戲都是使用C++編寫的。大眾公認電子游戲的開發者是軟體行業里回報最高的工作之一,也是需求量最大的領域之一。因為速度非常重要,所以編寫高效的代碼就是最基本的要求。除了要懂C++之外,精通游戲開發更應注重理論與模式的鑽研,而不限於特定的API或者Library。通常還必須具備高超的圖形與數學技能,這些知識足夠你活到老學到老。
HPC:以極限速度處理數據,要求對底層硬體有深刻的理解,這類知識可以直接應用在語言中。通用圖形處理器(GPGPU)及CUDA、OpenCL之類的並行計算框架的出現,引發了對有這類技術的C++程序員的需求。如果深入到科學計算領域,還有很多能做的工作。不知你是否聽說過機器學習?這是當今的熱門話題。
編譯器:這是小編最喜歡的領域,LLVM項目如此成功,以致於很難找到一種既未使用LLVM庫編寫前端,也沒有使用LLVM生成位元組碼的流行語言,而這些全都是C++。盡管編譯器是以各種語言編寫而成,但其背後的實現原理是相同的。我們使用優化器、靜態分析程序、調試程序、標准庫、鏈接器以及所有其他相關的工具來工作。
金融領域:除此之外,金融領域也有很多工作需要有能力編寫低延遲代碼的程序員。在這個領域,數學背景也是一大加分亮點。該領域的大多工作可能都涉及到開發與維護高頻使用的交易平台。另外如果不想掛著程序員的名頭,這個領域也是很棒的選擇。可以說負責設計並實現金融數學模型的寬客(Quant)職位是所有程序員中最有可能獲得高額獎勵的。
以上只是小編的幾個建議,這些領域的共通點在於:無法通過數量取勝。也就是說,C++工程師的可替換性很低,公司必須付給他們更高的薪水,並讓他們解決自己感興趣的問題,才能把人留住。如果你對C/C++還有什麼想要了解的問題,請關注優就業IT常見問題欄目。
Ⅸ 編程是什麼(具體、易解)
簡單的說,編程就是為了藉助於計算機來達到某一目的或解決某個問題,而使用某種程序設計語言編寫程序代碼,並最終得到結果的過程。
么叫做編程?或許是這樣的,編寫自己的代碼和文檔以及閱讀別人的代碼或文檔!
我們太多的強調了寫自己的代碼和文檔,而對後者我們好像並沒有在意。這就像文
章一樣,太多的人會寫,太多的寫的經驗和規則已經存在,但是對讀文章,那仍然
就像是一門藝術,所以大家經常用恍然大悟一些詞語來形容讀懂了一篇文章。程序
的狀況和文章差不多,但是程序相比文章更加的固定,更加的具有規則可言,因此
我們有理由相信,閱讀代碼雖然也是一門藝術,但是應該是一門更加有規律可循的
的藝術。下面這個故事摘錄《編程之道》:
我的故事開始於我從大學計算機科學專業畢業後的幾個星期。我大學畢業後的目
標是為一家研究和開發機構工作,最好是編譯程序或操作系統設計的部門。我最
後終於找到一家願意盲僱傭我的機構,但條件是我必須在一段時間內,通過完成
程序維護的工作來「學會這套系統」。
我當然會對這個建議產生抵觸心理。我花了五年的大學時間,竟然是為了浪費時
間來解決其他一些程序員的錯誤!然而,因為他們曾經答應日後讓我干感興趣的
工作,於是我便接受了,並在心中提醒自己,即使這份工作干不出名堂,我還能
找到其他的工作。
當我第二個禮拜去報到的時侯,我被領著去與那個程序維護組的師父見面。人事
部總管帶著我快步地穿過開發中心黑暗的走廊,最後她指著長長的大廳通道盡頭
處的一扇門說:「他在那裡面。」說完志身走了,好像有些心神不定。
我向門口走去,眼睛朝裡面窺探,我看見一個男人正坐在終端前工作,但他背對
著我,所以我不知道他有多大年紀,長得什麼樣。我只有靠咳嗽一聲來表明我的
存在,這里,那位大師甚至沒有回頭瞅一眼便說:「請坐」。
越過他的肩膀,我瞟見了那些難以理解的屏幕顯示,隨著他纖長的手指在鍵盤上
飛舞,它們一閃一閃地出現在他的終端上。最後,他滿意地咕噥了一聲,退出系
統,然後轉過身來面對著我。
我所看見的讓我吃了一驚,因為他看上去不像那種應該是禪師的人,他的臉乏味,
幾乎是醜陋的,他的頭發如同一圈煩惱的光環。但人們首先注意的是他的眼睛,
透過厚厚的眼鏡片射出淡淡的藍光。
他從頭到腳地打量了我一番,然後點點頭,就好像確認一個個人觀點,「你就是
那個新來的?」他酸酸地問。
「是的。」我回答。我假裝充滿激情,把我的經歷和在大學的成績向他作了快速
的匯報。
這位禮貌的聽著,然後說:「那很好,但你以前做過程序的維護工作嗎?」
我坦白地告訴他我沒有做過。
師父長長地嘆了口氣,「那好,我們應該做我們做做的事。」他說。然後他從一
個架子上取下一本龐大的程序清單,隨意地翻開它,並遞給我。接著他問:「你
怎樣對付這個?」
我眼睛盯著這本清單,那上面是匯編語言,還攙和著一些奇怪的宏語言。每隔十
幾行語句,控制權便轉移到某個神秘的子程序,而且,即使這個程序具有任何結
構性,我也看不出來。「這是什麼程序、」我問。
師父把那本清單從我的膝蓋上拿了過去,「這是《世代大師編碼藏經》,」他說,
「當你學會了從迷魂陣中把錯誤的代碼抓出來時,那就是你出師的時侯了。」然
後,他合上清單,把它放回到書架上。
我不久便意識到,程序的維護遠比我想像的要難得多。我起初試圖學會那本《編
碼藏經》中所用的匯編語言,但令我煩惱的是,我發現那套匯編語言從未按規矩
提供過說明文檔,現存的僅有一些筆記,是一位多年前就死去或離開公司的硬體
開發者寫的。
這本《編碼藏經》不能給我什麼幫助了。雖然其中偶爾有一些注釋,但這些注釋
和這種匯編語言一樣模糊,除了一些涉及到有關原始硬體構造的使人干著急的資
料以外,別無它物。
當我向那位師父抱怨這一切的時侯,他禮貌地聽著,並在我們兩人沉默了許久之
後,回答我說:
「你正在試圖理解某種不可能被你的理性思維所理解的東西,」他說,「這樣所
導致的結果必然是失敗。你必須先清空你的大腦,只有那時,你才能開始領悟《編
碼藏經》。」
接著,師父開始慢慢地向我闡釋那本《編碼藏經》里復雜的邏輯。當我聆聽他那
溫和的聲音時,我終於開始覺察到一點光芒的閃爍,這是隱藏在《編碼藏經》中
輝煌的和永恆的靈光。「那些大師對『良好的程序設計慣例與規則』一無所
知,」師父說,他們努力去理解普遍意義上的計算機思維的內部活動,他們還需
要什麼說明文檔呢?那些程序是極限的表達。
然而,即使我慢慢開始有所領會,我還是感覺到自己像一隻在琥珀在掙扎的小飛
蟲。師父所講的與我曾學過的東西截然不同,我的理性思維很難接受。但師父總
是耐心地一遍遍解釋說,我必須不靠理性思維去推理,而要用潛意識來領悟《編
碼藏經》的內涵。
經過數月的指點後,我感到很自信了,便想試試我的第一塊修補程序。為了給師
父一個驚喜,我偷偷地工作。我寫了一段能重新運行幾行語句的補丁,把程序重
新進行匯編,並把新程序釋放到生產系統中去。
第二天早上,我來晚了一會兒。讓我感到奇怪的是,開發中心的主任和從事部總
管正在師父的辦公室里。當我走進大廳後,從事部總管看見了我就把門關上了。
我聽見了很大的說話聲,但聽不清說什麼。
等到那兩位來訪者離開後,我走進師父的辦公室,「什麼事?」我問。
「你的修補程序,昨天晚上六點整進入了生產系統。它現在已經被刪除了。」
「那麼?」
「你仍然可以繼續工作。」師父說。
最後,我終於明白,所有用我的理性思維去理解《編碼藏經》的努力都是徒勞的,
這使我很絕望。師父覺察到了我思想上的這個變化,他開始向我傳授開機。他教
給我冥想和查錯的技巧,他說這些技巧是從計算機時代之初,由技術支持部一代
一代地傳下來的。
我聽著聽著,開始意識到一個關於我以前的編程體驗的特大事實。在大學里,我
一起認為程序員的工作主要是控制硬體和軟體的活動,編程的最高藝術境界是,
為了完成一項任務或達到一個目標而成功地運用高超的編程技巧。但程序維護是
不同於程序開發的。要想維護一個程序,就要把程序看作是一棵漸漸成長的植物,
拔苗助長是毫無益處的。事實上,這樣的行為更容易導致植物的死亡。一個程序
必須被小心地滋養。程序員在對程序進行改動之前,必須對每一個邏輯關系非常
熟悉,必須對程序的意圖有很深刻的理解力。這種理解力不是在一夜之間就可以
得來的,需要長時間的積累。
好幾個月以後,我終於能夠給《編碼藏經》成功地設計修補程序了,但設計之前
要經過長時間的冥想,還要把那本程序清單打開著支在我的桌子上。我還發現,
如果我工作的時侯點燃一支香,口中不停在重復師父教給我的口訣:
「Null-So-Stix-Etx-Eot」(ASCII 碼表中頭五個位元組NUL、SOH、STX、ETX、EOT
的發音--譯注),我更容易集中注意力。師父說,那個口訣意味著宇宙的「五
原」。
不久我發現我不再關心是否能為工作成績而得到獎勵了,在我自身和我所維護的
程序之間也看不見任何分離了。我像一個一生都活在陰影里的人一樣,開始理解
編程之禪,這是一種隱於程序員設計背後的難以言喻和難以形容的力量,就像投
射影子的太陽一樣。
從那毫無意義的「自我的存在」中擺脫出來後,我開始發覺,那些偉大的編程語
句過去對我來說似乎模糊不清,只是因為我還沒有徹悟,無法理解它們。我現在
知道了為什麼過去的那些程序員從不為他們的程序提供文檔,因為英語語言的描
述本身更讓人迷惑,而非使人受到啟發。
一天,我發現自己正在解決的一個問題涉及到《編碼藏經》中最復雜的部分--
錯誤分析全程。我在對此一無所知的情況下,給出了一個修補程序,它能通過對
硬體中斷區的內容進行檢查來測定錯誤的情況,使程序能繼續正確執行。
那天下午,師父第一次走進了我的工作間,他把手放在我的肩膀上,眼睛朝下看
著我,「現在該是你出師的時侯了。」他說。
計算機雖然功能十分強大。可以供你上網、打游戲、管理公司人事關系等等,但是沒有程序,它就等於是一堆廢鐵,不會理會我們對它下達的「命令」。於是,我們要馴服它,只有通過一種方式——程序,這也是我們和計算機溝通的唯一方式。
那程序到底是什麼呢?
程序也就是指令的集合,它告訴計算機如何執行特殊的任務。
打個比方說,它好比指導你烹調菜品的菜譜或指揮行駛一路到達目的地的交警(或者交通路標)。沒有這些特殊的指令,就不能執行預期的任務。計算機也一樣,當你想讓計算機為你做一件事情的時候,計算機本身並不能主動為我們工作,因此我們必須對它下達指令,而它根本不會也不可能聽懂人類自然語言對事情的描述,因此我們必須使用程序來告訴計算機做什麼事情以及如何去做?甚至對最簡單的任務也需要指令,例如如何取得擊鍵,怎樣在屏幕上放一個字母,怎樣在磁碟中保存文件等等。
這么麻煩,連這些東西編程都要考慮!怪不得人家說編程好難!你錯了,其實許多這樣的指令都是現成的,包含在處理晶元中內置於操作系統中,因此我們不必擔心它們工作,他們都是由處理器和操作系統來完成的,並不需要我們來干預這些過程。
上面講到的計算機本身不會主動的做任何事情。因此我們要通過程序的方式來讓計算機為我們「效勞」。而這個過程就是我們「編」出來的。編程可以使用某一種程序設計語言來實現,按照這種語言的語法來描述讓計算機要做的事情。
我們這里所講的語法和外語中的語法完全兩碼事,這里講的語法只是讀你的程序書寫做出一寫規定而已。
寫出程序後,再由特殊的軟體將你的程序解釋或翻譯成計算機能夠識別的「計算機語言」,然後計算機就可以「聽得懂」你的話了,並會按照你的吩咐去做事了。因此,編程實際上也就是「人給計算機出規則」這么一個過程。
Ⅹ 為什麼很多人建議學C語言不用任何IDE,直接用編輯器和編譯器
其實對新手學習c語言來說,直接使用編輯器和編譯器不是明智的,因為對c語言本身不了解的情況下,IDE會幫助新手解決一些他不需要關注的問題,如果獨立使用編輯器和編譯器,會加大新手判斷問題的難度,不利於學習基本語法和編程方法,只有對c有了一定的了解,知道從編輯,編譯,執行的整個過程,再來獨立使用編輯器和編譯器,定位問題會更准確