John Jiang

          a cup of Java, cheers!
          https://github.com/johnshajiang/blog

             :: 首頁 ::  :: 聯系 :: 聚合  :: 管理 ::
            131 隨筆 :: 1 文章 :: 530 評論 :: 0 Trackbacks
          Rock Star 2008 -- Joshua Bloch
              這是一篇在今年的JavaOne會議期間對Joshua Block的訪談。作為聞名的Java guru,大家已經從Joshua的Effective JavaJava Collection Framework,...中獲益了。相信,Joshua Block在訪談中的一些真知灼見,仍然會使大家受益良多。(2008.06.02最后更新)

          簡歷:Joshua Block,Google公司的首席Java構架師,曾為Sun Microsystems公司的杰出工程師,由于Effective Java Programming Language Guide一書,他獲得了Software Development Magazine極富盛名的Jolt大獎。在Sun公司時,他領導設計并實現了眾多的Java平臺特性,包括JDK 5.0的語言升級以及獲獎的Java集合框架。他擁有卡納基-梅隆大學計算機科學博士學位,目前還是Effective Java, Second Edition的作者。

          Q:你和Brian Goetz將會有一個名為"撰寫下一本偉大的Java技術書籍"(BOF-6588)的議題。寫一本偉大的Java書籍需要做些什么?
          A:這要看實際情況。你可以以書籍的形式介紹那些之前還沒有被介紹過的重要知識,就如Brian Goetz和Tim Peierls 在Java Concurrency in Practice一書中所做的那樣。或者,你也可以寫一部對現有資料的原創講解,使它能被所有未接觸過Java的人所接受,就如Kathy Sierra和Bert Bates在Head First Java一書中所做的那樣。你也可以先弄一大堆資料,然后提煉出其中的精華,就像Peter Sestoft在Java Precisely一書中做的那么出色。這還可以接著說下去。
          Q:對于你寫的Effective Java,開發者經常告訴我,那是他們最喜歡的Java技術書籍。你將二次貢獻名為"More 'Effective Java'"(TS-6623)的議題,在那兒,你將談論Java平臺新近的最佳實踐。讓我們先了解一點兒它的情況。
          A:我正在收集新出現在該書第二版中的素材。去年,我花了大量時間在談論泛型,所以今年我仍將重點關注它,我確實有一個新的期望能夠分享的泛型小竅門。
          我也將介紹一些關于enum類型的有趣素材,并有一個針對延遲初始化的最佳實踐的簡明指導。是的,我還計劃展示我們州長年輕時的一張祼照[1]

          一天的生活
          Q:描述一下你在Google的一天中的生活。
          A:那是個工作的好地方。我與許多來自世界各地的聰明人一起工作,那兒不缺乏挑戰性的工作去做。 Google理解開源以及回饋社區的重要性,所以他們一直支持我在Java平臺方面的持續工作。額外的好處就是他們因此而獲得的好名聲。
          Q:你在Google吃的最好的一餐是什么?
          A:嗯...可能是兩年前在Cafe 7吃的烤鵪鶉?或者可能是在Pinxto吃的Shiro Maguro Sashimi?有些飲品也是很棒的。
          Q:這些食物真的很好吃嗎?
          A:是的。我不是說在那兒我就沒吃過差的食物,但總的來看,確實很好。

          將"Bloch"作為動詞
          Q:如果你能將"Bloch"變成動詞,就如已對"Google"做的那樣,那么動詞"Bloch"會是什么意思?
          A:天啊,這是個很難的問題。可能是"寫出好的API"?當然,這將不會發生,而我也樂于接受。在每一代中,只會有很少的人夠得上用一個詞去稱呼,并且經常是一個形容詞。如你所知的:牛頓的,笛卡爾的,莎士比亞的,就像這樣的。
          由于某種原因,這使我想起多年前看到的一則頭條。當Miles Davis[2]逝世時,紐約時報上他的訃告說:"Miles Davis,小號手,去逝了;爵士天才,65歲,絕對的酷"。我也想到了自己,"是的,這就是一個總結。而且還沒人能上這樣的頭條"。

          最美的代碼
          Q:你所喜愛的代碼是怎樣的?或者說,你所見過的最漂亮的代碼是什么樣的?如詩般的代碼?
          A:我看過許多代碼都能激起這種反響。就像真的詩歌一樣,在某人看來很美的一段代碼可能在其它人看來很丑陋。這兒有一段神秘的代碼詩:
              static int inverse(int val) {
                  t *= 2 - val * t;
                  t *= 2 - val * t;
                  t *= 2 - val * t;
                  t *= 2 - val * t;
                  return t;
              }
          正如它的名字所暗示的,該方法計算奇參數的乘法逆值,mod 2^32。換言之,對于所有的奇整數i,有i * inverse(i) == 1。它根據牛頓迭代原理。
          有嚴格的證據表明這四個迭代--方法中非回轉的循環--對于任何輸入值都足夠了。那么這是我見過的最漂亮的代碼嗎?不,但它確實十分的聰明。
          如果你喜歡這樣的東西,你應該去看看Henry S. Warren的書Hacker's Delight(Addison-Wesley,2003)。當你能看這本書時,要翻到"The Quest for an Accelerated Population Count"一章。在Osram和Wilson的Beautiful Code(O'Reilly,2007)一書中,當你手里也有這本書的話,也要讀一下Jon Bentley 寫的"The Most Beautiful Code I Never Wrote"一章。Jon寫了許多詩歌般的代碼。

          最有趣的代碼
          Q:你能想到的最有趣的代碼是什么?
          A:The Daily WTF中滿是有趣的代碼。Bill Pugh也經常發給我一些由FindBugs發現的有趣代碼。這兒有一個令人欣喜的例子--我發誓,它從未被透露過:
             public Object getObject(java.util.Map<String,Class<?>> map)
                 throws SerialException
             {
                 map = new Hashtable(map);
                 if (!object.equals(null)) {
                     return map.get(object);
                 } else {
                     throw new SerialException("The object is not set");
                 }
             }
          Q:代碼是世界語嗎?如果是,那為什么?
          A:我認為音樂才稱得上,其次就是數學了。因為音樂將自然語言與數學符號聯系了起來。代碼很像數學:創建具有良好可讀性程序的很大一部分工作就是選擇好的標識符名稱,而這就要基于自然語言。
          Q:哪位Java達人深深地影響了你?是在什么方面?
          A:應該是Doug Lea[3]。他知道很多事情中的很多東西,多年來,他激發了我數不清的想法。他總有讓人感興趣的事情可說。并且他有一種不可思異的能力,能發揮出VM的最佳性能。幸運的是,他已教給我一些他的竅門。例如,Branch Free代碼會運行的很快,緩存的作用將會終結,內聯探索法(Inlining Heuristics)在性能方面有著巨大的效用。
          Q:能給我們一個你創造的最讓你感到自豪的代碼例子嗎?并解釋一下為什么?
          A:集合框架。雖遠非完美,但多年來,已經證明了它的可維護性與優雅。而前面提到的Doug Lea構建的java.util.concurrent包中的許多部分就構建集合框架之上。并且在程序員的來信中,他們總是告訴我,集合框架是如何使他們的工作更加賞心悅目。它能使你寫像下面這個程序那樣的代碼,這個程序通過標準輸入流計算文件中所有的片語:
          public class Anagram {
              public static void main(String[] args) {
                  int minGroupSize = Integer.parseInt(args[0]);
           
                  // Read words from input and put into simulated multimap
                  Map<String, List<String>> anagrams =
                      new HashMap<String, List<String>>();
                  for (Scanner s = new Scanner(System.in); s.hasNext(); ) {
                      String word = s.next();
                      String alphagram = alphagram(word);
                      List<String> group = anagrams.get(alphagram);
                      if (group == null)
                          anagrams.put(alphagram, group = new ArrayList<String>());
                      group.add(word);
                  }

                  // Print all permutation groups above size threshold
                  for (List<String> group : anagrams.values())
                      if (group.size() >= minGroupSize)
                          System.out.println(group.size() + ": " + group);
              }

              private static String alphagram(String s) {
                  char[] chars = s.toCharArray();
                  Arrays.sort(chars);
                  return String.valueOf(chars);
              }
          }
          Q:當你感到困惑時,你會做些什么?
          A:我會喝一杯美味的熱咖啡。Google有很好的咖啡機,這些機器來自于Barefoot Coffee Roasters。如果不管用,我就會去走一走。如果還不管用,我就會去叫Doug Lea。
          Q:你使用哪些網絡資源,以緊跟Java技術。
          A:規范,還有Google。無論走到哪里,這都能幫上我。
          Q:是否有一種益智的訓練或有趣的行為讓你覺得能使你成為一名更好的開發者?
          A:我認為數學和寫作能使你成為更好的開發者。數學與編程一樣,要求嚴謹的思維。而寫作會強迫你去組織你的想法。數學和寫作都訓練了相同的審美機能,而這對于寫出好的程序也是必需的。
          Q:你希望在工科學校中你還應該學到哪些東西?
          A:我希望我能更好地學會彈吉他,現在我彈的可不好。我希望能學一門外語,還有藝術史。當然,還想學一些商業和金融方面的知識。這樣說起來,哥倫比亞大學會對我有更好的幫助。我會鼓勵本科生們,當他們還有時間時,就要創造機會去獲取更寬泛的知識。以后,他們會有足夠的時間深入到其中。

          譯注
          [1]這張"祼照"就是加利福尼亞州現任州長
          阿諾.施瓦辛格的健美祼膚照。
          [2]Miles Davis,爵士樂大師。點擊此處可以看到紐約時報上關于他的訃告全文。
          [3]Doug Lea,java.util.concurrent的創始人,目前也是OpenJDK臨時管理委員會的成員。

          請關注下一篇譯文:Rock Start 2008 -- Chet Haase
          posted on 2008-05-31 23:39 John Jiang 閱讀(2075) 評論(2)  編輯  收藏 所屬分類: OthersJavaOpenWorld/JavaOne/SunTechDays翻譯

          評論

          # re: Rock Star 2008 -- Joshua Bloch(譯) 2008-06-02 13:05 dennis
          很棒的工作,多謝  回復  更多評論
            

          # re: Rock Star 2008 -- Joshua Bloch(譯) 2008-06-02 13:18 Sha Jiang
          Thanks :-)  回復  更多評論
            

          主站蜘蛛池模板: 溧阳市| 广东省| 和平县| 盘山县| 盐山县| 盐池县| 岳阳县| 大石桥市| 花莲县| 抚州市| 彰化市| 玉林市| 彭水| 铜山县| 微山县| 万安县| 盐亭县| 阿图什市| 大厂| 大方县| 宾阳县| 武隆县| 城口县| 陈巴尔虎旗| 丽江市| 泗水县| 边坝县| 绩溪县| 松江区| 宽城| 邵东县| 盖州市| 理塘县| 沁源县| 高阳县| 茂名市| 石河子市| 扶绥县| 浦北县| 贵阳市| 子长县|