[書籍推薦][.NET]進入IT產業必讀的200個.NET面試決勝題
前言
今年剛好有這機會,應博碩出版社之邀,幫忙翻譯、審校了這本書籍:「進入IT企業必讀的200個.NET面試題」。作者是對岸的朱毅,所以是簡體書要翻譯跟審校成繁體書。
在這一行的朋友們,應該可以感受到現在許多簡體書進攻台灣的市場,一來對岸人多資源多市場大,相對的作者、譯者也多,所以許多原文的翻譯書,都是先被翻譯成簡體,爾後才看台灣有沒有出版社願意花錢買版權翻譯成繁體。加上對岸的書雖然紙質不好,印刷不好,但實在便宜。所謂知識無價,很多朋友應該也跟我一樣,荷包深度有限,但又很喜歡看書,一本原文書的價格可以買四五本簡體書,既不是盜版,閱讀上雖然有些滯礙,但閱讀速度也不會被影響太多。
再加上資訊變化相當快速,而市場是呈現金字塔形狀分佈,也就是功力或經驗淺的人佔最多數,越往上走,人數比例越低。因為市場如此,無怪乎出版社願意投資的書籍,絕大部分是「新技術」與「快速上手類」的書籍。新技術有討論熱點,快速上手有入門市場。相對的,比較有深度一點的書,通常很難賣的比新技術或快速上手的書籍好,主因還是因為這是寡眾市場。
最後,天平傾斜,我們看的到的繁體書數量就變得比較稀少,趨勢也都是以新技術為賣點。這也是台灣作者跟專家,吃虧很大的地方。就像百敬老師曾經說的,在對岸,一門新技術準備好,可能全國巡迴上課,沒有一年也可以撐上半年,投資報酬比相當高。在台灣呢?台北、台中、高雄三地上完課,又要準備下一個不同的課程內容了…
這是我第一次的出版相關經驗,我衷心地佩服所有願意寫書、翻譯的作者譯者,尤其是台灣的作者,每一本出版作品的背後,所花的心血、時間、精力,真的是表面上看不出來的。要靠寫書賺錢養家,以這些作者的 level,出去當顧問、講師或是資訊公司領導團隊,投資報酬比絕對是寫書的好幾倍。為什麼他們還願意把自己的知識、經驗分享出來?絕大部分的出發點,都還是為了拉未來的後進一把。
而我為什麼會接下這個任務,幫忙翻譯這一本書呢?對這本書有興趣的朋友,在選購或閱讀前,真心地期望您能看一下審校序,那就是為什麼我會想翻這本書的原因。(審校嘛,能自己寫的部分不多,只好在審校序塞一些我想幫助讀者的資訊)
雖然我的資歷不算太豐富,技術能力也還稱不上多深厚,不過因為對人與溝通也挺有興趣,所以很常去協助面試應徵者。絕大部分的面試過程,應徵者對 .NET 的熟悉程度,都只停留在表面,都只停留在工作上用的到的部分,都是碰到了問題,才會想透過網路來找到範例或答案(論壇上更是充斥著這樣的現象)。然而,過了這關,還有下一關。同樣的原理,不同的情況,這樣的應徵者就無法變通。同樣的原理,不同的語言、framework,這樣的應徵者就無法掌握。就更不用說,這樣的應徵者根本不夠資格來帶領團隊或影響團隊、促使團隊成長。
創新,在於瞭解既有的東西,才能突破既有的思維。如果對底層的設計原理不瞭解,那自己又怎麼從這些原理設計出實用的模組或服務呢?
或許,許多應徵者在碰到了這樣的面試題目會覺得荒唐,這些跟日常作業有什麼關係?你應徵寫程式的,我只要會寫程式,為什麼我得知道背後怎麼運作(當然啦,這句話通常都不敢講)。但我想說的是,面試的問題,往往要瞭解的都不是答案本身,或是問題本身,而是過程與延伸要瞭解的應徵者人格特質。
這一本書,雖然以現在的技術觀點來說,少了很多新的技術主題(審校序上有補充),但前半段完全 focus 在 .NET 的基礎知識,這就是前面說的,我們日常作業一直在使用的技術,身為一個 developer,到底有沒有用心去瞭解背後原理怎麼運作的。後半段則是照顧不同技術領域的讀者們,在不同領域中,面試官著重的概念不同,所以後半段屬於廣度,而非深度。相對來說,這些不深的問題或概念,如果答不出來,那就代表著應徵者對未來職務內容的技術領域,熟悉程度可能不夠。
所以,這本書結合了許多 .NET 的基礎知識、運作原理,切入的角度則以面試題目為出發點,由淺入深地點出一系列的知識點,既適合面試官拿來發問,瞭解應徵者在某一類知識點能力的深度,也適合應徵者拿來瞭解,自己在某一類知識點準備的是否充足。對資歷能力尚淺的 junior developer,則可以透過這樣的角度,來掌握自己學習的 road map,也希望對新鮮人或要轉換跑道的朋友們,可以知道除了實作以外,真正的技術價值在哪裡。
內容簡介
本書分為幾個部分:
第一章是面試相關注意事項,這個或許比較適合新鮮人或正在準備面試的朋友,快速的瞭解一下,不要踩到面試的地雷了。除了書本中第一章的內容,我也建議讀者朋友們可以參考一下我之前整理的文章:Interview時,Candidate應該準備的非技術性問題。非技術性問題,參考書的第一章與這篇文章,而技術性問題呢?則可以參考這本書的其他部分。
第二章到第六章,這是我最喜歡這本書的部分,從 .net framework 的基礎,到介紹型別、記憶體管理、常用的類別、介面與資料結構,最後講 delegate, event, reflection 與 attribute。瞭解這些東西之後,寫程式才不會濫用、硬幹、能動就好。加上這些東西是不管寫 Web, Winform 甚至 Metro app,都用得到的基礎知識,所以請各位讀者一定不要錯過了這幾章。
第七章則是 multi-thread 的概念,這也相當重要且越來越重要。雖說,許多寫 ASP.NET 網站或日常業務上沒機會與需求接觸到 multi-thread 的朋友,或許沒什麼機會去瞭解。但就像前言所說,不是工作上自己用的到的部分才需要去瞭解,ASP.NET 背後用了哪些 multi-thread 的機制,當需要提升效能、提升 user experience、需要轉換資源以節省時間的任務時,不瞭解 multi-thread 寫出來的程式將會是一場災難。而這也是 .net framework 4.0 以後,Parallel 與 TPL 的基底。
第八章以後,則是針對 ASP.NET, ADO.NET, XML, Web Service 與 .NET Remoting 的介紹,這邊就是前面提到屬於書本後半段,廣度的部分。舉 .NET Remoting 來當例子,可能用到的朋友很少,那為什麼還需要去瞭解呢?其實,瞭解了以後,會發現很多東西的機制都很像。例如 WCF、服務參考時 .NET 所產生的 client proxy class,甚至 SignalR 在 server 與 client 的互動,再加上其交錯的生命週期與資源釋放,即使用不到也可以取其精髓。有用功過,未來看類似的東西,就很容易觸類旁通。
第十三章是常見的演算法題目與程式碼範例,這內容就真的很針對面試或特殊職務了,但是,這些常見的演算法,其實很多都是被封裝在 .net framework 或其他語言的 framework 背後使用。為什麼有一些資料結構,呼叫其 Sort() 方法,就可以取得排序完的結果?背後是使用哪些演算法在進行,如果今天要自己寫一個 Sort 的演算法,自己能不能動手做出來這麼漂亮的模組?多刺激自己的想法,多瞭解基礎,才有能力跟本錢創新。
第十四章則是單元測試,身為一個 developer,單元測試是自己應肩負的責任。單元測試的好,單元測試要經歷的痛,單元測試怎麼進行,我想讀者朋友們應該很常在我的 blog 上看到相關的文章了。這一章的內容則是透過 NUnit,實際地帶讀者朋友練習一次單元測試。
最後要提醒的一點,我相信一定很多讀者朋友可能覺得內容對一些詞彙的翻譯,看起來相當彆扭。例如 stream 翻成「流」,heap 翻成「累堆」。這些常見的專業詞彙,其實大部分日常生活的討論,我們都是使用英文。但出版社為了避免中英文混雜的情況太多,也為了初學朋友可以較輕易地看懂內容,所以還是強烈地希望我用中文來寫。所以,實屬無奈下,這些 term 我還是用了中文,但在審校序中,有請讀者朋友務必瞭解到,即便在面試中,有些詞彙還是應該使用英文,而非中文,對自己有利無害。書本最後,我也附上了詞彙表,針對詞彙表上的 term,還是希望大家能以英文來溝通,會比較精確一些。
結論
雖然只是翻譯與審校,但從閱讀與消化作者所闡述的知識過程中,我也發現了許多自己以前理解地不夠明確、精準的地方,有些可能是因為自己經驗或能力不足,導致無法完全理解作者表達的意思,但今天既然是翻譯兼審校,我就要想辦法蒐集相關資料瞭解原理後,再想辦法盡力地讓台灣的讀者可以輕易地瞭解。這個過程,覺得收穫最大的是我自己,也很少有機會,可以這樣完整地看完一本書,且完整地重新闡述一本書的內容。
我相信很多台灣的朋友,對讀簡體字與簡體詞彙的用法,相當不能適應。我周遭的同事、朋友也有很多人有這樣的情況,所以希望透過翻譯成繁體書這樣的方式,可以讓大家更有興趣、更有動力地去瞭解 .NET 的基本原理,讓大家對於學習可以恢復熱忱。
當學習之路,打了一盞燈之後,就會發現原本平時自己在走的路,有多麼美妙。也會發現,原來旁邊還有這麼多有趣的路與風景,值得一走。
瞭解越多,就越覺得瞭解的不夠多。上次與 Bill 叔在聊天時,他提到了一個圓的概念。
當你的熟悉與理解範圍,可能是十公尺的時候,或許你會覺得這方圓十公尺內的人事物,你都瞭若指掌了。但如果沒有去接觸圓以外的世界,那你的世界就是一口方圓十公尺的井。當慢慢往外去接觸,去擴充自己的圓時,會發現圓以外的世界,自己不瞭解的東西越來越多,不再是以前自以為世界就這麼大的時候,恭喜你,你正式的踏上學習之路了。
最後,謝謝這一路上支持我的前輩、朋友、家人,能有機會貢獻一己之力,真是太好了。
希望未來還有機會幫忙翻譯一些經典的書籍,甚至可以把自己專長的經驗撰寫成冊,分享給大家。
blog 與課程更新內容,請前往新站位置:http://tdd.best/