駱昊的Java空間

          傳道、授業、解惑,何有于我哉! Java SE / Java ME / Java EE / C / C++ / C#

          2010年2月1日

          關于MySQL的簡單總結

               摘要:   MySQL是最著名的開源數據庫,容易上手且功能強大,Yahoo!、BBC News等著名站點都使用了MySQL數據庫進行數據存儲 在Linux環境中可以通過/etc/my.cnf對MySQL服務器進行配置(在Windows中是一個叫my.ini的文件),有接近300個配置參數可以用來在啟動MySQL服務器時控制其行為(包括:內存、日志、錯誤報告等等) 在Linux環境中可以通...  閱讀全文

          posted @ 2011-02-20 05:48 駱昊 閱讀(290) | 評論 (0)編輯 收藏

          Struts 2.1.x + Spring 2.5.x + Hibernate 3.3.x整合需要的JAR包

           下面這個表相信對很多人都有用:

          jar包名稱

          所在位置

          說明

          antlr-2.7.6.jar

          hibernate/lib/required

          解析HQL

          aspectjrt

          spring/lib/aspectj

          AOP

          aspectjweaver

          ..

          AOP

          cglib-nodep-2.1_3.jar

          spring/lib/cglib

          代理,二進制增強

          common-annotations.jar

          spring/lib/j2ee

          @Resource

          commons-collections-3.1.jar

          hibernate/lib/required

          集合框架

          commons-fileupload-1.2.1.jar

          struts/lib

          struts

          commons-io-1.3.2

          struts/lib

          struts

          commons-logging-1.1.1

          單獨下載最新版本

          struts

          spring

          dom4j-1.6.1.jar

          hibernate/required

          解析xml

          ejb3-persistence

          hibernate-annotation/lib

          @Entity

          freemarker-2.3.13

          struts/lib

          struts

          hibernate3.jar

          hibernate

          hibernate-annotations

          hibernate-annotation/

          hibernate-common-annotations

          hibernate-annotation/lib

          javassist-3.9.0.GA.jar

          hiberante/lib/required

          hibernate

          jta-1.1.jar

          ..

          hibernate transaction

          junit4.5

          mysql-

          ognl-2.6.11.jar

          struts/lib

          slf4j-api-1.5.8.jar

          hibernate/lib/required

          hibernate-log

          slf4j-nop-1.5.8.jar

          hibernate/lib/required

          spring.jar

          spring/dist

          struts2-core-2.1.6.jar

          struts/lib

          xwork-2.1.2.jar

          struts/lib

          struts2

          commons-dbcp

          spring/lib/jarkata-commons

          commons-pool.jar

          ..

          struts2-spring-plugin-2.1.6.jar

          struts/lib

          posted @ 2010-02-27 18:23 駱昊 閱讀(845) | 評論 (0)編輯 收藏

          Spring AOP之Introduction(@DeclareParents)簡介

          Spring的文檔上對Introduction這個概念和相關的注解@DeclareParents作了如下介紹:

          Introductions (known as inter-type declarations in AspectJ) enable an aspect to declare that advised objects implement a given interface, and to provide an implementation of that interface on behalf of those objects.
          An introduction is made using the @DeclareParents annotation. This annotation is used to declare that matching types have a new parent (hence the name).


          在這段介紹之后還給出了一個例子,對于初學者要理解這段話以及后面的例子還是蠻困難的,因此下面用一個簡單的例子告訴大家什么是Introduction以及如何使用@DeclareParents注解。

          對于Introduction這個詞,個人認為理解成引入是最合適的,其目標是對于一個已有的類引入新的接口(有人可能會問:有什么用呢?簡單的說,你可以把當前對象轉型成另一個對象,那么很顯然,你就可以調用另一個對象的方法了),看一個例子就全明白了。

          假設已經有一個UserService類提供了保存User對象的服務,但是現在想增加對User進行驗證的功能,只對通過驗證的User提供保存服務,在不修改UserService類代碼的前提下就可以通過Introduction來解決。

          首先定義一個Verifier接口,里面定義了進行驗證的方法validate(),如下所示:
          package com.jackfrued.aop;

          import com.jackfrued.models.User;

          public interface Verifier {

              
          public boolean validate(User user);
          }

          接下來給出該接口的一個實現類BasicVerifier,如下所示:
          package com.jackfrued.aop;

          import com.jackfrued.models.User;

          public class BasicVerifier implements Verifier {

              @Override
              
          public boolean validate(User user) {
                  
          if(user.getUsername().equals("jack"&& user.getPassword().equals("1234")) {
                      
          return true;
                  }

                  
          return false;
              }

          }


          如何才能為UserService類增加驗證User的功能呢,如下所示定義Aspect:
          package com.jackfrued.aop;

          import org.aspectj.lang.annotation.Aspect;
          import org.aspectj.lang.annotation.DeclareParents;
          import org.springframework.stereotype.Component;

          @Aspect
          @Component
          public class MyAspect {
              @DeclareParents(value
          ="com.tsinghuait.services.UserService"
                      defaultImpl
          =com.tsinghuait.aop.BasicVerifier.class)
              
          public Verifier verifer;
          }
          接下來就可以將UserService對象轉型為Verifier對象并對用戶進行驗證了,如下所示:
          package com.jackfrued.main;

          import org.springframework.context.ApplicationContext;
          import org.springframework.context.support.ClassPathXmlApplicationContext;

          import com.jackfrued.aop.Verifier;
          import com.jackfrued.models.User;
          import com.jackfrued.services.Service;

          class Test {

              
          public static void main(String[] args) {
                  User user1 
          = new User();
                  user1.setUsername(
          "abc");
                  user1.setPassword(
          "def");
                  
                  ApplicationContext factory 
          = new ClassPathXmlApplicationContext("config.xml");
                  Service s 
          = (Service) factory.getBean("service");
                  Verifier v 
          = (Verifier) s;
                  
          if(v.validate(user1) {
                      System.out.println(
          "驗證成功");
                      s.serve(user1);
                  }

                  
              }

          }

          這樣,上面代碼中的user1是不會被服務的,當然是因為沒有通過驗證啦!

          這樣一說,是不是大概明白什么是Introduction了呢,其實@DeclareParents用起來也很簡單吧!

          至于配置文件和其他內容請參考完整源代碼:/Files/jackfrued/Spring-introduction.rar

          posted @ 2010-02-27 14:09 駱昊 閱讀(4803) | 評論 (0)編輯 收藏

          Spring AOP編程中的一個小問題

          在用Spring 2.5.6 + jdk 1.7開發時,使用@PointCut注解定義切入點時會導致以下錯誤

          error at ::0 can't find referenced pointcut XXX

          這應該算是一個Bug吧,不過只要在類路徑下放最新的aspectjrt.jar和aspectjweaver.jar
          就可以避免這個問題了。可以去到eclipse的官方網站下載上面的JAR包,下載地址:

          http://www.eclipse.org/aspectj/downloads.php

          posted @ 2010-02-27 12:36 駱昊 閱讀(424) | 評論 (0)編輯 收藏

          [轉]基于需求測試(RBT)

          測試人員的首要職責是找bug,但是最重要、最根本的職責應該是在軟件產品發布前確保公司的軟件產品滿足顧客的需求。

            測試組采用RBT(Requirements-based testing),基于需求的測試方法會使測試更加有效,因為它使測試專注于質量問題產生的根源。

                        

            研究報告指出,多年來,大部分的軟件項目不能按計劃完成,不能有效控制成本。大部分項目失敗的首要原因是軟件質量差,導致大量的返工、重新設計和編碼。其中軟件質量差的兩大原因是:軟件需求規格說明書的錯誤、有問題的系統測試覆蓋。

          需求規格說明書中的錯誤

            我們經常聽到最終用戶抱怨、不用我們的軟件,而這些軟件還通過了嚴格的測試和QA。對于這點我們不會感到驚訝,原因是我們知道需求從一開始就是錯誤的。

            一項調查(James Martin (“An Information Systems Manifesto,” Prentice Hall, 1984)表明56%的缺陷其實是在軟件需求階段被引入的。而這其中的50%是由于需求文檔編寫有問題、不明確、不清晰、不正確導致的。剩下的50%是由于需求的遺漏導致的。

          有問題的測試覆蓋

            要獲得滿意的測試覆蓋率是很難的。尤其現在的系統都比較復雜,功能場景很多,邏輯分支很多,要做到完全的覆蓋幾乎不可能。

            再者,需求的變更往往缺乏控制,需求與測試用例之間往往缺乏可跟蹤性。

                       

          RBT三大最佳實踐

          1、  Test early and often.盡早測試,頻繁地測試

            確認需求的業務價值。

            各利益相關方應該對需求進行評審。

            通過用例檢查需求的完整性

            應用語言分析技術確保需求文檔清晰一致,不會引起同一問題不同人有不同的解釋。

           2、  Test with your head, not your gut.不要單憑經驗測試

            不要依賴測試人員的經驗來設計測試用例,應該采用系統、嚴格的測試用例設計方法,而不是依賴有經驗的測試人員的技巧。通過這樣的方式來增加測試覆蓋的有效性。格式化、結構化的需求文檔有助于測試人員評估需求的測試覆蓋率。

            通過測試用例評審來檢查測試用例存在的錯誤,并且找出需求的不足之處。

           3、  Test with measurement and improvement in mind.測試過程中要保持度量

            在使用基于需求的測試方法的過程中,保持對需求的可追蹤性非常重要。保持需求與測試用例及測試之間的可追蹤性有助于監視進度、度量覆蓋率,當然也有助于控制需求變更。

          posted @ 2010-02-05 09:50 駱昊 閱讀(302) | 評論 (0)編輯 收藏

          [轉]我的七個建議

          如果你喜歡編程,那么你真是受到了上天的眷顧。你是非常幸運的少數人之一,能夠以自己喜歡的事謀生。大多數人沒有這么幸運。你認為理所當然的觀念熱愛你的工作,其實是一個很現代的概念。通常的看法是,工作是一種讓人很不開心的事,你為了拿工資才不得不去上班。你工作的目的是為了攢下錢去干那些自己真正喜歡干的事,但是前提是你得等到65歲退休之后才行,而且還有不少條件。條件一,你的積蓄必須足夠多;條件二,你沒有老到走不動,你還有體力去干那些事情;條件三,你喜歡的事情不需要用到脆弱的膝蓋、昏花的視力,也不要求你走上一里地不喘氣,等等。


          我剛才說到哪里了?對了,我要提建議。


          畢業前練好寫作


          如果不是Linus Torvalds不斷地散布福音,請問Linux操作系統會成功嗎?雖然他是一個非常聰明的計算機天才,但是Linux吸引來全世界一大批志愿者的真正原因卻是Linus Torvalds的表達能力。他通過電子郵件和郵件列表用書面形式傳播自己的想法,最終引起了所有人的注意。


          你聽說過現在風靡一時的極限編程[ ] ”Extreme Programming)嗎?我在這個地方不談我對極限編程的看法,我只說如果你聽過這個詞,那么原因就是它的倡導者都是一些非常有才華的作家和演說家。


          即使我們縮小范圍,將目光局限在任何一個軟件開發團體中,你也會發現該團體中最有權勢和影響力的程序員正是那些表達能力強的程序員,他們無論是做書面表達還是做口頭表達,都能夠清晰、自如、具有說服力地傳達觀點。此外,長得高也有助于提升影響力,不過這個不取決于你。


          一個普通程序員與一個優秀程序員的區別,不在于他們懂得的編程語言誰多誰少,也不在于他們喜歡用Python語言還是喜歡用Java語言,而在于他們能否與他人交流思想。如果你能說服其他人,你的力量就可以得到放大。如果你能寫出清晰的注釋和技術規格說明書,其他程序員就能夠理解你的代碼,因此他們就能在自己的代碼中使用,而不必重寫。如果你做不到這一點,你的代碼對其他人就沒有價值。如果你能為最終用戶寫出清晰的使用手冊,其他人就能明白你的代碼是用來干什么的,這是唯一讓別人明白你的代碼有何價值的方法SourceForge[ ]上有許多優美的、有用的代碼,但是它們都像被埋葬了一樣,根本沒人來用,原因就是它們的作者沒有寫好使用說明(或者壓根就沒寫)。這樣一來就沒有人知道他們的成果,他們杰出的代碼就衰亡了。


          如果一個程序員不會用英語寫作、沒有良好的寫作能力,我就不會雇他。如果你能寫,不管你去哪家公司工作,你很快就會發現寫作技術文檔的任務會落到你頭上,這意味著你已經開始在放大自己的影響力了,管理層正在注意到你。


          大學里有些課程被公認為寫作密集型writing intensive)課程,這就是說為了拿到學分,你必須寫作多得可怕的文字。一定要去上這樣的課程!不要管學科,只要這門課每周甚至每天都要你寫東西,你就去上。


          你還可以動手寫日記或者網志。你寫得越多,寫作就會變得越容易。寫起來越容易,你就會寫得越多。這是一個良性循環。


          畢業前學好C語言


          第二點我要講的是C語言。請注意,我說的是C語言,而不是C++。雖然在實際使用中C語言已經越來越罕見,但是它仍然是當前程序員的共同語言。C語言讓程序員互相溝通,更重要的是,它比你在大學中學到的現代語言(比如ML語言、Java語言、Python語言或者其它正在教授的流行垃圾語言)都更接近機器。你至少需要花一個學期來了解機器原理,否則你永遠不可能在高級語言的層次寫出高效的代碼。你也永遠無法開發編譯器和操作系統,而它們恰恰屬于目前程序員能夠得到的最佳工作之列。別人也永遠不會放心將大型項目的架構設計交給你。我不管你懂多少延續(continuation)、閉包(closure)、異常處理(exception handling),只要你不能解釋為什么while (*s++ = *t++);這句代碼的作用是復制字符串,或者不覺得這是世界上對你來說再自然不過的事情,那么你就是在盲目無知的情況下編程。在我看來,這就好像一個醫生不懂得最基本的解剖學就在開處方,他看病的根據完全是因為那些娃娃臉的醫藥廠商銷售代表說這種藥有用。


          畢業前學好微觀經濟學


          如果你沒有上過任何經濟學課程,那么我首先來做一個超短的評論:經濟學是這樣的學科之一,剛開始學的時候轟轟烈烈,有許多有用的、言之有理的理論和可以在真實世界中得到證明的事實,等等;但是,再學下去就每況愈下,有用的東西就不多了。經濟學一開始那個有用的部分正是微觀經濟學,它是商業領域所有重要理論的基礎。跟在微觀經濟學后面的東西就不行了。你接下來學的是宏觀經濟學,如果你愿意,盡管跳過去,也不會有什么損失。宏觀經濟學開頭的部分是利息理論,內容比方說是利率與失業之間的關系,但是怎么說呢,看上去這部分里面還沒有被證實的東西多于已經被證實的東西。學完這部分,后面的內容越來越糟糕,許多經濟學專業的學生實際上都變成在搞物理學,因為這樣才能在華爾街上找到更好的工作。但是不管怎樣,你一定要去學微觀經濟學,因為你必須搞懂供給和需求,你必須明白競爭優勢,你必須理解什么是凈現值(NPV),什么是貼現,什么是邊際效用。只有這樣,你才會懂得為什么生意是現在這種做法。


          為什么計算機系的學生也應該學經濟學?因為,從經營一家公司的角度來看,比起那些不懂的程序員,一個理解基本商業規則的程序員將會更有價值。就是這么簡單。我無法告訴你有多少次我是那樣地充滿挫折感,因為我看到了太多的提出一些瘋狂的想法的程序員,這些想法在代碼上也許可行,但在資本主義世界中毫無意義。如果你懂得商業規則,你就是一個更有價值的程序員,你會因此得到回報的,但是前提是你要去學習微觀經濟學。


          不要因為枯燥就不選修非計算機專業的課程。


          想提高GPA績點的一個好方法就是多選修非計算機系的課程。請千萬不要低估你的GPA的重大意義。千千萬萬的人事經理和招聘人員在拿到一份簡歷的時候,第一眼就會去看GPA,包括我也是這樣。我們不會為這種做法道歉。為什么?因為GPA不反映單個的成績,而是代表了許多個教授在一段很長的時間中,在不同的情況下,對你的表現的一個總的評估。SAT成績難道不夠嗎?哈,那只不過是一場幾個小時的測試罷了。GPA中包括了四年大學期間你的小論文、期中考試和課堂表現,總數有幾百次之多。當然,GPA也有自己的問題,不是百分之百準確。比如,這些年來,老師對學生的打分越來越寬松,學習成績有通貨膨脹的趨勢。再比如,GPA無法反映課程的難度,沒人能夠看出你的GPA是來自無名社區大學家政系的輕松課程還是來自加州理工學院針對研究生的量子力學課程。漸漸地,我形成了一套自己的做法,首先我會過濾掉所有來自社區大學、GPA低于2.5的簡歷,然后我會要求剩下的人給我寄成績單和推薦信。我再從中發現那些成績一貫優秀的人,而不是那些僅僅在計算機系課程中得到高分的人。


          為什么我要關心某人的歐洲歷史課程成績呢,畢竟作為雇主我要找的應該是程序員啊?何況,歷史是那么枯燥,不得高分很正常。哦,這么說來,你的意思是我應該雇用你,而不用考慮一旦工作變得枯燥你會不會努力工作?別忘了,在編程工作中也有很枯燥的東西。每一項工作都有枯燥難耐的時刻。我不想雇用那些只想干有趣事情的人。


          選修有大量編程實踐的課程


          我依然清楚記得我發誓絕不讀研究生的那一刻。那是在一門叫做動態邏輯的課程上,教師是活力十足的耶魯大學教授Lenore Zuck,她是計算機系那些聰明的老師中最聰明的人之一。


          如今, 由于記憶力糟糕, 我已經差不多把這門課的內容忘光了,但是不管怎么說,在這里我還是想要對付著說一下。大致上,形式邏輯的意思是說,如果條件成立,你就能證明結論也成立。比如,根據形式邏輯,已知只要成績好,就能被雇用,然后假定“Johnny的成績好,你就可以得到一個嶄新的結論“Johnny會被雇用。這完全是經典方法。但是,一個解構主義者(deconstructionist)只需要10秒鐘就能破壞形式邏輯中所有有用的東西。這樣一來,留給你的只是一些趣味性,而不是實用性。


          現在再來說動態邏輯。它與形式邏輯其實是一回事,但是必須再多考慮時間因素。比如,你打開燈之后,就能看見自己的鞋子,已知燈以前是亮的,那么這就意味著你看見了自己的鞋子


          對于像Zuck教授那樣聰明的理論家,動態邏輯充滿了吸引力,因為它看上去很有希望讓你在形式上證明一些計算機程序的相關理論問題。這樣做說不定很有用。比如,你可以用它在形式上證明,火星漫游車的閃存卡不會發生溢出(overflow)問題,不會因而整天一遍又一遍地重啟,耽誤了它在那顆赤紅色的星球上漫游尋找火星人馬文(Marvin the Martian)。


          在第一堂課上,Zuck博士寫滿了整整兩面黑板,甚至黑板旁邊的墻上都寫上了很多證明步驟。需要證明的問題是,有一個控制燈泡的開關,現在燈泡沒有亮,這時你打開了開關,請證明燈泡將會點亮。


          整個證明過程復雜得不可思議,處處都是陷阱,必須十分小心。保證這個證明不出錯太困難了,還不如直接相信打開開關燈就會亮。真的,雖然證明過程寫滿了許多塊黑板,但是還是有許多中間步驟被省略了,因為如果要從形式邏輯上完整證明所有步驟,那就瑣碎得無法形容了。許多步驟是用各種經典的邏輯證明方法推導得到的,包括歸納法、反證法等,甚至有些部分還是由旁聽的研究生證明的。


          留給我們的課后作業是證明逆命題:如果燈原來是關著的,現在卻亮了,那么請證明開關的狀態一定同原來相反。


          我動手開始證明,我真的去證明了。


          我在圖書館里待了很長時間。


          我對照著Zuck博士的原始證明想依樣畫葫蘆。研究了幾個小時之后,我在其中發現了一個錯誤。可能我抄寫的時候抄錯了,但是這使得我想通了一件事。如果花費3個小時,寫滿了一塊又一塊的黑板,每一秒鐘都可能出錯,最后能夠證明的卻只是一個很瑣碎的結論,那么這種方式有多大的實用性呢?在活生生、充滿趣味的現實世界中,你永遠都不會有機會使用它。


          但是,動態邏輯的理論家們對這一點不感興趣。他們看上它不是因為它有用,而是因為它可以為他們帶來終身教職。


          我放棄了這門課,并且發誓絕不會去讀計算機科學的研究生。


          這個故事告訴我們,計算機科學與軟件開發不是一回事。如果你真的非常幸運,你的學校可能會開設很像樣的軟件開發課程。但是另一種可能是,你的學校根本不教你在現實中如何編程,因為精英學校都覺得,教授工作技能最好留給職業技術學校、犯人重返社會的培訓項目去做。你到處都能學怎么寫代碼。別忘了,我們是耶魯大學,我們的使命是培養未來的世界領袖。你交了16萬美元的學費,卻在學循環語句的寫法,這怎么可以?你以為這是什么地方,難道是機場沿途的酒店里臨時拼湊起來不靠譜的Java語言培訓班?哼哼。


          麻煩在于我們沒有一種真正教授軟件開發的專門學校。你如果想成為一個程序員,你可能只能選擇計算機科學專業。這是一個不錯的專業,但是它同軟件開發不是一回事。在那些400等級的課程代號中,去尋找名稱中帶有“Practicum”這個詞的課程吧(編者注:指供人實習的課程)。不要被這個拉丁語單詞嚇倒,這些都是有用的課程,之所以起這種名字,只是為了讓那些文縐縐、裝腔作勢、滿嘴胡說八道的公司經理們覺得高深莫測。


          別擔心所有工作都被印度人搶走


          我首先要說的是,如果你本身就已經在印度了,或者你就是印度人,那么你真的毫無必要去想這件事,根本不用琢磨所有的工作機會是不是都跑到了印度。那些都是非常好的工作,好好地享受吧,祝你身體健康。


          但是,我不斷聽說計算機系的入學人數下降得很厲害,已經到了危險的程度。根據我聽到的說法,其中的一個原因是學生們不愿去學一個工作機會都流向印度的專業。這種擔心大錯特錯,有很多理由可以反駁。首先,根據一時性的商業潮流決定個人的職業選擇,這是愚蠢的。其次,即使編程工作無一幸存地都流向了印度和中國,但是學習編程本身依然是一種第一流的素質訓練,可以為各種超級有趣的工作打下基礎,比如業務流程工程(business process engineering)。再次,不管是在美國還是在印度,真正優秀的程序員依然是非常非常短缺的,這一點請相信我。不錯,確實有相當一批失業的IT從業者在那里鼓噪,抱怨他們長時間找不到工作,但是你知道嗎?即使冒著觸怒這些人的風險,我還是要說,真正優秀的程序員根本不會失業。最后,你還能找到更好的專業嗎?你覺得什么專業好?主修歷史學?如果那樣,你畢業的時候就會發現,根本沒有其他選擇,只能去法學院。不過我倒是知道一件事:99%的律師都痛恨他們的工作,痛恨他們當律師的每一分鐘。可是,律師每周的工作時間偏偏長達90小時。就像我前面說過的:如果你喜歡編程,那么你真是受到了上天的眷顧。你是非常幸運的少數人之一,能夠以自己喜歡的事謀生。


          不過說實話,我不覺得學生們真的有上面的想法。近年來,計算機系入學人數的下降只是回到了歷史上的正常水平,因為前些年的互聯網狂熱使得入學人數出現了大泡沫,抬高了基數。由于這種泡沫,許多并不真的喜歡編程的人也來讀計算機系。他們心里想的是,只要進了計算機系,將來就能找到誘人的高薪工作,就能獲得24歲當上CEO、進行IPO的機會。謝天謝地,這些人現在都離計算機系遠遠的了。


          找一份好的暑期實習工作


          精明的招聘負責人都知道,喜歡編程的人高中時就將牙醫的信息輸入了數據庫,進入大學前就去過三次電腦夏令營,為校報做過內容管理系統,有過軟件公司的夏季實習經歷。招聘負責人就是要在你的簡歷上找這些東西。


          如果你喜歡編程, 就不要隨便什么工作都答應,否則你會犯下最大的錯誤。不管是暑期工作,還是兼職或者其他性質的工作,只要與編程無關,就不要輕易接受。我知道,其他19歲的孩子都想去購物中心里打工,在那里折疊襯衫。但是你與他們不同,你19歲時就已經掌握了一門非常有價值的技能。將時間浪費在折疊襯衫上是很愚蠢的,等到畢業的時候,你的簡歷上本應該寫滿了一大堆與編程相關的經歷。就讓那些財經類的畢業生去租車公司幫助人們滿足他們租車的需要吧,你要干的是別的事(在電視中扮演超人的Tom Welling1除外)。


          為了讓你的生活變得更容易一些,也為了強調這整篇文章完全是為了滿足我的個人目的,我要告訴你,我的公司——Fog Creek軟件公司——提供軟件開發方面的暑期實習機會。我們非常看重簡歷。比起其他公司的實習工作,你在Fog Creek最有可能學到更多的編寫代碼、軟件開發、商業運作方面的知識。這是去年夏天我們的一個實習生Ben說的。他會這樣說,并不完全是因為我派了人到他的宿舍讓他這樣說。我們接受實習申請的截止日期是21日。一起來吧。


          如果你聽從了我的建議,你還是有可能落得一個悲慘的下場,比如很早就賣掉了微軟公司的股票,再比如拒絕了谷歌公司的工作機會,原因是你想要一間自己的可以關上門的獨立辦公室,或者做出了其他生命中愚蠢的決定。但是,這些可不是我的錯。我一開始就告訴過你,不要聽我的話。


          (注1 T o m W e l l i n g是一個美國演員, 在電視劇《超人前傳》(Smallville)中扮演超人。該電視劇講述還沒有成長為后來超人的克拉克·肯特少年時代的故事。)


          作者簡介:


          Joel Spolsky
          Joel Spolsky,世界最具影響的程序員網志Joel on
          Software的主人,軟件業一位旗幟鮮明的思想者,一位傳統軟件管理理念的挑戰者。他創辦的這個網站被程序員譽為反呆伯特宣言書,并被翻譯為三十多種語言。Joel畢業于耶魯大學,隨后即進入微軟公司工作,曾任微軟公司E x c e l 開發小組項目經理。現在他在自己創辦的Fog Creek軟件公司任CEO。此外,他與人合辦的Stack Overflow已經成為如今最熱門的技術網站。


          posted @ 2010-02-01 21:37 駱昊 閱讀(259) | 評論 (0)編輯 收藏

          <2010年2月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28123456
          78910111213

          導航

          統計

          常用鏈接

          留言簿

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 北票市| 融水| 图们市| 通海县| 耒阳市| 布尔津县| 卢龙县| 潢川县| 阿克苏市| 枣阳市| 成武县| 商丘市| 商城县| 巫溪县| 冷水江市| 象州县| 邹平县| 岱山县| 长乐市| 和林格尔县| 昭平县| 醴陵市| 辉县市| 苏尼特左旗| 海门市| 镇宁| 施甸县| 清流县| 江口县| 嵊泗县| 雷波县| 乐清市| 县级市| 句容市| 宜宾县| 屏东县| 内丘县| 界首市| 十堰市| 揭西县| 监利县|