作者:Phillip J. Eby.
翻譯:ShiningRay @ NirvanaStudio
原文地址:[[http://dirtsimple.org/2004/12/python-is-not-java.html][1]][1]
我最近正在看一個基于wxPython的GUI應用程序,大概45.5KLOC的樣子,但我沒有計算它用到的庫的大?。ㄈ鏣wisted)。代碼是由那些對Python相對生疏的Java的開發者寫的,所以程序有很嚴重的性能問題(如三十秒的啟動時間)。我在檢查代碼的時候發現他們寫了很多對Java有意義但是對Python卻很恐怖的東西。并不是因為“Python比Java慢”,而是因為在Python中有更方便的方法去完成同樣的目標,甚至在Java中不可能的事情。
所以,可悲的事就是這些可憐人事倍功半,產生了很多很多不需要寫的代碼,從而比相應合乎Python習慣的寫法慢得多得多。我們來看一些例子:
* 在Java中一個靜態的方法(static)不能翻譯成一個Python的類方法(classmethod)。哦,當然,多多少少他最終產生類似的效果,但類方法的目的實際上是做了一些通常在Java中不可能的事(如繼承一個非默認的構造函數)。Java靜態方法的習慣翻譯通常是一個模塊級函數,而不是一個類方法或靜態方法(staticmetho)。(同時靜態封閉(final)字段應該翻譯成模塊級常量。)
這并不是一個性能上的問題,但是一個Python程序員要用像這些類似Java習慣的代碼的話,可能就會被在該輸入Foo.someFunction時卻要輸入Foo.Foo.someMethod這種情況給惹毛了。但是請注意:調用一個類方法將會比調用一個靜態方法和函數要多一部分額外的內存。
啊,那些Foo.Bar.Baz也不是省油的。在Java中,這些點分割的名稱是由編譯器去查找的,所以運行時根本無所謂你有多少點。在Python中,每次運行時都要查找,所以每個點都要計算在內。(Python中一定要記住這點,“平鋪比嵌套好”,盡管比起性能,他和“可讀性”和“簡單就是美”更靠近。)
* 要用switch語句?Python翻譯將是一個哈希表,不是一堆if-then語句。用一堆if-then在Java中也不是switch語句,如果有字符串參與了呢?他其實是一個哈希表。CPython字典實現用了性能最佳??在我們宇宙中目前所知道的?的哈希表的實現之一。你自己所寫的代碼也不會比這個再好了,除非你是Guido、Tim Peters和Raymond Hettinger的關門弟子。
* XML不是答案。它也不是一個問題。要在正則表達式上解釋Jamie Zawinski,“一些人,當遇到一個問題的時候,就想‘我知道,我要用XML’那這個時候,他們就有兩個問題了。”
和Java比這個一個不同的情況,因為比起Java代碼,XML是輕巧而且有彈性的。但比起Python的代碼來,XML就是一個船錨,一個絆腳石。在Python中,XML是用來做交換,而不是你的核心功能,因為你不需要這么做。在Java中,XML可能是你的大救星因為他讓你實現了特定領域的語言并“不通過編碼”提高了你的應用程序的適應性。在Java中,避免編碼是一個很大的優勢,因為編碼意味著重新編譯。但在Python中,更常見的是,寫代碼比寫XML更方便簡單。同時Python處理代碼要遠遠比處理XML快。(不僅僅是這個,你必須書XML處理代碼,同時Python自身就已經為你準備好了。)
如果你是一個Java程序員,對于你是否要在你的Python核心應用中使用XML作為一部分,不要相信你的本能。如果你不是因為信息交互的原因去實現一個已經存在的XML標準或是建立某種導入、導出格式或者建立某種XML編輯器或處理工具,那么就不要這么做。一次也別。甚至連想都不要想。現在,扔掉那個XML模式把你的手解放吧!如果你的應用程序或者平臺要被Python開發者使用,他們只會感謝你不要在他們的工作量中添加使用XML的負擔。
(這里唯一的例外是如果你的受眾的的確確,確確實實需要XML,出于某種奇怪的理由。像,他們拒絕學習Python并只對你使用了XML而付錢給你,或者你打算給他們一個編輯XML的GUI,同時這個寫XML的GUI呢是另一個人寫的,同時你得到免費使用的權利。還有一些很少見的架構上的原因需要用到XML。相信我,他們不會出現在你的程序中。如果有疑問,對一個資深的Python開發員解釋你的用例?;蛘?,如果你臉皮厚的話,試試向一個Lisp程序解釋你的程序為什么要用XML!)
* Getter和Setter是壞蛋!壞蛋!魔鬼! Python對象不是Java Bean。不要寫什么getter和setter,然后還把它們包裝在“屬性”里面。它直到你能證明你需要比一個簡單訪問復雜一點的功能時才有意義,否則,不要寫getter和setter。它們是CPU時間的浪費,更要緊的是,它們還是程序員寶貴時間的極大浪費。不僅僅對于寫代碼和測試的人,對于那些要閱讀和理解它們的人也是。
在Java中,你必須使用getter和setter因為公共字段不允許你以后改變想法再去使用getter和setter。在Python中,這樣做很傻,因為你可以以一個普通特性開始并可以在任何時間改變你的想法,而不用影響到這個類的任何客戶。所以不要寫getter和setter。
* 代碼重復在Java中常常是一個不得不要的魔鬼,你必須經常一遍一遍寫同一個方法而只有一點點的變化(通常是因為靜態類型約束)。在Python中這樣做是沒有必要的也是不值得的(除了極少數一些特定的場合需要內聯一些要求性能的函數)。如果你發現自己一遍一遍在寫同樣的代碼而且變化很少,你就需要去學一下閉包。他們并不是真的很可怕。
這就是你要做的。你寫了一個包含了函數的函數。這里內部的函數就是你要一遍遍寫的函數的模版,但是在里面加入了針對不同情況的函數要使用變量。外部的函數需要剛剛提高的那種變量作為參數,并且將內部的函數作為結果返回。然后,每次你要寫另一種略微不同的函數的時候,你只要調用這個外部的函數,并且把返回值賦給你要讓“重復”函數出現的名字。現在,如果你需要改變這個工作方式,你只要改變一個地方:這個模版。
在我所看過的應用程序/平臺中,只有一個很微不足道的程序使用了這個技術之后可以去掉數百行重復代碼。事實上,自從開發者使用了特別的樣板文件來為這平臺開發插件,這會節省很多很多第三方開發人員的代碼,同時也使那些程序員要學習的東西簡化了。
這只是Java->Python思維方式轉變的冰山一角而已,現在我可以讓他轉變成正確的而不用鉆研這個程序的細節。本質上,如果你曾經用過一段時間Java,而且對Python比較陌生,不要太相信自己的本能。你的本能已經為Java調節,而不是Python。向后退一步,最重要的,不要寫這么多代碼了。
要這樣做,讓自己覺得更加需要Python。假裝好像Python是可以做任何你想做的魔棒,卻讓你無須動一個手指。問一下,“Python是怎樣解決我的問題的?”還有“Python語言的哪個特點和我的問題最相似?”你絕對會驚訝于你需要的東西其實已經有了某種固定形式。事實上,這種現象實在是太普遍了,甚至在很有經驗的Python程序員中也會出現,以至于Python社區中給這種現象起了個名字。我們稱之為“GUIDO的時間機器”(GUIDO是美語中太空飛行工程師的意思),因為有時候看上去得到我們所需要的東西好像只有他知道的一種方法,但當我們自己知道了就不一樣了。
所以,如果你不能感到你在使用Python時至少比用Java要多出10倍的生產力,?。ㄍ瑫r如果你還懷念你的Java IDE,考慮一下這種可能性:因為你寫的Python程序比他所需要的要復雜得多)
附錄:(翻譯自此篇文章的評論)
確實,哈希表==字典。舉個最簡單的例子,從Python標準庫中檢出“pickle”和“copy”模塊,這兩個模塊會從字典中查找類型并調用相應的函數。另一個有些詭異的例子是范型函數,我已經在最近的Blog中寫了一下。
關于閉包的例子,我這里給出一個很笨的資歷。假設你要寫很多這樣的函數:
def addOne(x): return x+1
def addTwo(x): return x+2
然后你可以這樣寫:
def makeAdder(addend):
... def add_it(x): return x+addend
... return add_it
并且這樣使用:
addOne = makeAdder(1)
addTwo = makeAdder(2)
這樣就可以等同于原來的定義了。
[1]: [http://dirtsimple.org/2004/12/python-is-not-java.html][2]
[1]: http://dirtsimple.org/2004/12/python-is-not-java.html][1]
[2]: http://dirtsimple.org/2004/12/python-is-not-java.html
------美國真的是個還未經開發的大農村!
在中學時,老師們就教過工業越發展,環境就會遭到破壞。比如咱們的工業城市沈陽,到處都是大煙囪,到處都是大工廠。街道灰塵比較多。這都是工業化的象征??!中國產品已經占領了美國市場。在美國到處都可見“中國制造”,就連廁所里放用過的廁紙的盒子都是來自中國的,這讓我非常驕傲!可是美國呢?極少見到煙囪,偶爾見到小小的幾個,還是別墅裝飾用的,到處都是清澈見底的河流和湖泊,河邊也沒有造紙廠啊,煉鋼廠啊什么的。簡直沒有一點工業化的影子!
除了幾個少數的大城市外,根本沒有什么高樓大廈。我剛到美國時,飛機快降落,我看到紐約邊上大片大片小平房,錯以為到了柬埔寨。
美國人的思想也比較單純,完全是沒有開化的表現。美國的高速公路四通八達,可是完全沒有收費站!這么好的巨大商機居然白白浪費!我恨不得馬上用水泥在這些路上筑幾收費站,不出一個月,肯定可以在西海岸或者邁阿密買帶花園的的海景別墅。還有,公路邊隨處可見寧靜,還未開發的湖泊,go-vern-ment寧愿讓水鳥隨便棲息拉屎,也不會開發個湖景花園來大賺一筆??梢娒绹撕翢o經濟頭腦。曾經有一個著名的美國經濟學家曾經說過:“中國的經濟學家里,真正可以稱得上經濟學家人,不會超過五個。”我簡直要笑掉大牙了,連這么簡單的賺錢機會都看不到的美國人,居然說中國沒有經濟學家?我看美國經濟才是停留在原始社會。
說到水泥和混凝土,我簡直不敢相信美國幾乎沒有混凝土的建筑,他們的房子大部分都是木頭和一些奇怪的材料建成的。用原始的木頭做房子,看來洋人們的建筑水平還只停留在中國清朝以前??!
洋人們簡直就是單純無知到了極點,根本不懼怕和陌生說話,替陌生人做事。我剛到紐約的時候,在肯尼迪機場一個行李車要3美圓。我沒有零錢,一個美國人看見我行李很多,就替我出了三美圓并把車推到我面前,我想起小學時老師說過人販子一般都是用小恩小惠引誘并拐賣孩子和婦女的,我白了他一眼,拖著我的行李艱難的往相反的方向走了……后來我才發現這是美國人幼稚的表現,他們會隨便把書包啊,電腦啊什么的放在圖書館門口,大樹底下,完全不怕小偷,真是一點警惕感都沒有;他們還隨時會給你開門,隨時會把車停下要“give me a ride”,隨時會問需不需要幫助……我才不會上洋人的當呢,因為我知道“不能和陌生人說話。
美國人開車的方式也很奇怪,馬路上很多車,卻聽不見喇叭聲。街道安靜得不像街道,一點省會城市的熱鬧和人氣都沒有。最可怕的是,有一天晚上我和同學開車去另一個城市,忽然從路中間跑出幾只馬鹿來,同學眼疾手快剎了車才免了一場“馬鹿的自殺性撞車事件”,據說這樣的事經常發生,有時候一頭鹿就可以毀了一輛車。美國go-vern-ment也不知道管管,連馬鹿都管不好,還要整天張羅著要打伊朗,真不知道布什吃飽了在想什么。還不只馬鹿呢,據說樹林里還有熊和狐貍,野鳥和松鼠隨時光顧廚房就更不用說了。美國人整天就和這些動物住在一起,根本就是原始社會。
學校里的教授一點都架子都沒有,完全沒有學者尊貴的風范。D教授據說是美國著名的心理學家,可是課間休息的時候居然和學生在教室里大吃餅干,大侃《24》和《越獄》。一點學術的威嚴都沒有,我簡直失望死了。還有,剛上兩星期課就要測驗,第三個星期要交book review,要求讀10多本書,一學期要兩個paper。我說您都整到教授了還一天到晚這么認真負責干嗎?也不知道去當個引進教授不干白拿錢。
還有,美國人看點小病都要給自己制造麻煩。先得跟醫生預約,看完病,醫生給開藥方。有些人還得咨詢藥師。買藥得自己去超市買,不像咱們那塊兒,看完病拿著醫生龍飛鳳舞的處方在醫院直接買藥就行了??梢娒绹t院又不會賺錢了,干嗎告訴病人藥名???在醫院直接買,把藥價翻個8倍10倍的,多好的生意不會做,可見資本主義市場經濟真的不活啊,唉。
美國人人人都開車,可是卻連小摩托車都沒見過,可見見識之少。學校里有一個非洲學生,為了方便和便宜就不知從哪里搞來一個女式小摩托車,在校園里開的時候,美國人都覺得他很“alien”,真是少見多怪。美國人要來到咱們國家,特別是南寧??谑裁吹模沁€不被那洶涌的小摩托車大潮嚇死。
有時候對美國人的無知和愚蠢我完全失去了耐心。比如當他們知道中國有電視臺和報社的時候,居然無知的問我:“中國有報紙?。?!”簡直太豈有此理了,咱們中國不但有中文報紙,而且我們的報紙都是精心加工制作的,才不像美國報紙亂七八糟的輿論,把人頭都搞暈了。
還有我最受不了的就是,大部分美國人吃飯前都要做什么禱告,星期天都去什么禮拜,美圓上都印什么“In God We Trust”,美國人還天真的說:“上帝保佑美國”,完全是胡說八道嘛,上帝保佑美國,怎么還讓美國如此落后,如此原始,還讓美國人民如此單純幼稚啊。所以我還是相信毛主席的“人定勝天”,我的祖國靠著類似的一些偉大觀點,為這個地球創造了多少讓人驚嘆的奇跡??!
在美國的每一天,我都會深深的想起我的故鄉和那些勤勞勇敢的中國人民。
經常可以在論壇上可以看到這樣的帖子:“小弟要學 Java 了,可是聽說 Ruby 現在如日中天,要取代 Java 了,到底如何選擇?”、“ Borland 要賣掉 Delphi 了,學 Delphi 還有沒有前途?”、“學 Java 應該用 JBuilder 呢還是 Eclipse 呢?”……這樣的帖子經??梢猿蔀檎搲悬c擊率回帖量最多的帖子。我曾經警告過自己不要去點擊這種帖子,以表明自己有多么的“拽”,以示自己的“清高”,可是經常仍然忍不住誘惑而點進去。春秋時期的群儒論戰在這里又得到了重現,每個人都以自己的親身經歷講述到底那個語言更有前途,講述為什么 C# 程序員沒有 Java 程序員公司高,偶爾也有回帖曰:“語言不重要,思想才重要”,可是立即就被后邊回帖的人反駁:“你說思想重要,那么要求你一個月時間用你不熟悉的一個語言開發一個系統出來,你還思想不思想?”,遂唾沫橫飛……
如果說語言之爭是赤裸裸的話,那么框架之爭就顯得隱蔽多了:“ EJB3.0 要出來了, Hibernate 還有沒有前途”、“做 Struts 的工資高還是做 WebWorks 的工資高”、“ Spring 萬歲, EJB 去死!”。
上面這些問題的答案是什么?我也不知道。
我只知道——
有個人由于工作的需要,學了一周的 C#, 然后就用 C# 開發出一個 ORMMaping 框架來;
有一個 PB 用了八年的老手因為公司轉用 Java 而失業 ;
有人只學了一個月的 Java 就在應聘中擊敗了有多年開發 Java 開發經驗的老手;
一位有多個大型項目經驗的人被問之什么是多態的時候,他回答“是化學里邊的詞匯吧”;
有個人用了兩個月的時間搭建出了一個企業開發平臺,這個平臺后來發展成為一個核心企業開發平臺;
有個用
Websphere Studio
開發過多個大型項目的高手在轉用
JSP
的時候寫出來的代碼被人笑掉大牙;
http://www.aygfsteel.com/huanzhugege/?
我還知道——
任何語言都是由循環、順序、分支結構組成的;
Eclipse 是很多由 C++ 轉過來的人員開發的,雖然 Eclipse 代碼中還有很多 C++ 的影子,但是沒有人說 Eclipse 寫的不好;
Java 中的 CachedRowSet 在 C# 中叫脫機 DataSet ,在 Delphi 中叫 ClientDataSet ;
JSF 是向 C# 的 WebForm 學習的,而 IntraWeb 早在 WebForm 之前就實現了拖放式 Web 開發;
EJB
中的聲明式事務在
DCOM
中就有了;
...
網站地址:http://www.camstudio.org/
下載地址:http://www.camstudio.org/CamStudio20.exe
Eclipse 使用系統內置的“ Text Editor ”做為文本編輯器,這個文本編輯器有一個長期存在的問題,那就是文本無法換行。雖然這個問題長期存在,而且解決起來并不困難,但是這卻給人們帶來不少麻煩。
終于有人忍不住開發了一個擴展插件 WordWrap ,這個插件非常小,但是安裝這個插件以后就可以輕松實現文本編輯器的換行功能了。
【本文來自 Cownew 開源團隊: http://www.cownew.com http://www.aygfsteel.com/huanzhuege 】
安裝方法:使用
Eclipse
的自動升級功能(【
Help
】→【
Sofeware updates
】→【
Find and Install
】→【
search for new features to install
】,點擊【
New Remote Site
】按鈕),在“
Name
”中填入“
wordwrap
”,“
URL
”中填入“
http://ahtik.com/eclipse-update/
”,
然后點擊【
Finish
】安裝即可。
安裝完畢后在文本編輯器的右鍵菜單中就可以看到“
Virtual Word Wrap
”了。
對于“人脈”兩個字,不少人有許多迷思,在你還沒厘清人脈到底是什么之前,怎么談得上去找到你的“人脈入口”?
所以建議你,先仔細對照一下這張Check list,將你對人脈的迷思勾選出來,看看你到底是屬于“鐵齒型”、“軟腳型”、“唬爛型”、“全滅型”中哪一類型的人,根據這4種不同類型,參考《Cheers》雜志采訪到的8位業界精英說法,他們不但分享自己經營人脈的 方法及過程,還提供私房建議,讓你走對方向,找到你的人脈入口。
1、人脈好=攀關系,我才不做這種事。
2、凡事不求人,我靠自己哪需要人脈?
3、工作都忙不完了,哪有時間建立人脈?
4、現在努力加強專業就好,建立人脈是以后的事。
*以上歸類為 鐵齒型 *
5、我臉皮薄怕被人拒絕,建立人脈太難。
6、別人講話我只有聽的份,怎么建立人脈?
7、生活=辦公室+我家,去哪里建立人脈?
8、周末只想睡大覺,別說人脈、連出門都懶!
*以上歸類為 軟腳型 *
9、有人脈=好辦事,我做事最吃得開!
10、有人脈,升遷就像坐電梯,沒人脈,升遷就像爬樓梯!
11、人脈要過濾,沒利用價值的人,不用浪費時間!
12、我認識許多大老板,人脈好得不得了!
*以上歸類為 唬爛型 *
13、朋友有難,兩肋插刀,我用血淚換人脈。
14、別人都躲著我,人脈出現大危機。
15、每次提出要求都石沉大海,人脈實在不可靠!
*以上歸類為 全滅型 *
看看你是屬于「鐵齒型」、「軟腳型」、「唬爛型」、「全滅型」中哪一類型的人
鐵齒型的你很有工作實力,做事有自己的一套,但是別忘了,現在是一個講究團隊工作的時代,單打獨斗既不能拓展格局又不能持久,所以,適時地分享你的經驗,或是幫助其它人,會對你事業上的提升有很大幫助
軟腳型的你比較內向、不善交際,但經營人脈并不是要你當花蝴蝶,其實你可以從當一個好的傾聽者開始,建立別人對你的信賴感,而工作之外的時間,也可以參加跟自己嗜好有關的社團活動,例如登山社、旅行團、美術館義工等等,增加認識朋友的機會,這將對你今后的發展起到重要作用。
屬于唬爛型的你,最好放下身段、腳踏實地經營自己的專業實力比較能走得遠走得穩,不要整天計算周遭人的利用價值,這種功利心態真的很讓人討厭!不要忘了,你利用別人一次,人家不但會永遠記得還會告訴別人,就算你認識的人再多,別人提到你的名字都嗤之以鼻,這樣惡質的人脈不如沒有。
屬于全滅型的你基本上人脈已經亮起紅燈,你用錯誤的觀念去經營人脈,不但危及自己的工作、信用掃地,甚至可能有觸犯公司規定或犯法的可能,勸你及時煞車,重新檢視自己對于人脈的定義。
ISA環境,foxmail能收,但不能發郵件;而Outlook?Express和Outlook都沒有任何問題。
首先我要確定是服務器的問題還是我這邊客戶端的問題,于是又試了其它幾個郵箱,也是不能發送,而且出錯問題是一樣的,基本可以確定是我的機器的問題了。為了進一步明確我的判斷,我又用telnet命令分別連接了實驗室郵箱的25和110端口,發現25端口不能連接,其它郵箱也是如此。
?????然后看看我的foxmail設置是否有問題,我到foxmail官方論壇去查閱了相關資料,發現最可能出錯的地方就是在"屬性"設置中沒有選擇"服務器驗證",但我的情況是選擇與否都還是不能發送。總之,按照資料基本把foxmail設置的問題排除了。
?????由于我的系統是沒有安裝防火墻的,所以我沒有怎么考慮防火墻的問題。接著查看機器的25端口(smtp協議所用端口),發現tcp?25端口沒有打開,于是又想辦法試圖打開這個端口,但很快我發現自己的想法是錯的,因為服務器使用25端口,而客戶端卻是在1024以上隨機選擇端口的,使用的根本不是25端口。
?????那是什么原因呢?以"foxmail不能發送郵件"關鍵詞在google上搜索,在眾多資料中發現一篇提到安裝"MacFee?Antivirus"之后會把可能被蠕蟲病毒利用傳播的25端口關閉,而自己用的正是"MacFee?Antivirus"的企業版,而解決的辦法有兩個:要么將上述功能選項關閉,要么將編輯這個選項,將foxmail.exe排除在關閉端口的程序之外。我兩者都試了一下,均能發送郵件了。
系統裝有McAfee?Desktop?Firewall?8.0、McAfee?VirusScan?Enterprise?+Anti-spyware?Module?8.0、ewido?anti-spyware?4.0。
問題不在防火墻MDW和防御木馬、間諜程序的ewido上,而是在防病毒的VirusScan。
在Mcafee的VirusScan控制臺中有一個“訪問保護”,其中有一項“禁止大量發送郵件的蠕蟲病毒發送郵件”,默認的是開啟的,把這項功能取消就可以了。?
如果不想取消這個功能,則編輯這個功能,在已排除的進程中添加foxmail.exe就行了。
以前一直用Outlook?Express收發郵件,而VirusScan默認排除了OE的進程,后來重裝系統,換了foxmail,一直沒有機會發郵件,所以也就一直沒有發現問題癥結之所在。
這是上班族的一個特點,也是上班族的一個優勢,學會充分利用在工作中積累的資源和建立的人脈關系進行創業,可以大大減少創業風險?!犊茖W投資》采訪過一位朋友,原來在北京一家大的電腦圖像制作公司工作,在工作中與很多小的電腦圖像公司、報社、雜志社、電視臺、電視節目制作公司建立了關系,積累了人脈。時機成熟后,這位朋友辭去了原來的工作,自己成立了一個電腦圖像工作室。因為相當于原來工作的延續,無縫銜接,這位朋友幾乎沒有冒任何風險,便踏上了成功之路?,F在這位朋友的工作室生意很紅火。但是在這方面要注意的是,不能將個人生意與單位生意搞混淆,將工作秩序搞顛倒,甚至只要是有利可圖的生意就歸自己,而無利可圖或者虧本的生意就歸單位,這樣做不僅要冒道德上的風險,而且很有可能會受到法律的制裁。另外,要區分清楚主業、副業,不能因為自己的創業活動影響單位的工作。
方案二:選擇合適的合伙人進行創業
有些上班族沒有時間自己進行創業,但可以提供一定的資金,或者擁有一定的業務經驗和業務渠道,這時候就可以尋找合作伙伴一起進行創業。與合作伙伴一起進行創業需要注意的事項是:責、權、利一定要分清楚,最好形成書面文字,有雙方簽字,有見證人,以免到時候空口無憑。更不能等到賺錢了再說。我們看到無數合作創業的伙伴,在公司沒有贏利之前,雙方都能夠和諧相處、和和氣氣,一旦公司賺了錢,矛盾便開始出現,有時一發而不可收拾。這就是大多數合伙企業,開始熱熱鬧鬧,中間打打鬧鬧,最后一敗涂地的原因。
方案三:找準好的項目
一位朋友在上海的一家臺資企業工作,妻子在一家大型電器公司當推銷員。這位朋友手頭有一定積蓄,又不愿放在銀行里吃息,因為銀行利息太低(眼下已是負息)。從去年6月起,他瞅準時機,在上海吳淞碼頭開了一家拉面館,后來連開了4家?,F在這4家拉面館每月能為他帶來2萬多元的收入,遠超過其打工的薪水。這位朋友說,其實很簡單,他看準了地方,出錢盤下店面,請了幾個人來開店,設了一個店長,工資要高些,其他人按市場行情走,每月幾百元外帶吃住。他只要每個星期到店里走一趟,盤盤賬。因為店小,賬目很簡單,無非是進貨、出貨。進貨,就是這個星期買了多少錢的面粉、買了多少錢的牛肉、蔬菜;出貨,就是這個星期消耗了多少面粉,消耗了多少錢的牛肉、蔬菜;賣了多少錢,將中間差價一算,刨除房租、水電、稅費及人員工資,就是他賺的錢。既省心省力,又不花時間。類似這樣的項目,非常適合想創業的上班族。關鍵是你要開動腦筋,時刻留心,四處留心。另外,就是該下手時就下手,不能猶猶豫豫。大家都在找機會,機會來了你不下手,一眨眼機會可能就被別人逮跑了。
前不久,有臺灣機構調查上班族最熱衷的創業項目,一共有10個,分別是:擺地攤賣服裝飾品,占20.81%;炸雞排、咸酥雞等小吃攤,占18.78%;咖啡店占16.63%;網絡上開設店鋪,占15.54%;便利商店,占15.32%;飲料冰品店,占14.15%;連鎖加盟餐飲,占13.11%;語言補習班,占11.96%;升學補習班,占11.62%;瘦身美容用品或服務,占11.22%。這10個項目都有一個共同的特點,就是投資較少,另一個特點是管理相對簡單,不需要創業者長年累月、耗時費力地盯在那里。
有錢你可以請漂亮的女孩子一起去吃飯,唱歌跳舞
下面是 AOP 的一些基本概念 :
aspect (方面):實現了 cross-cutting 功能,是針對方面的模塊,是為題的不同關注點,我們可以將這些方面通過某種方式加入到核心關注點中。
jointpoint (連接點):連接點是方面插入應用程序的地方,該點能被方法調用。
advice (通知): advice 是我們關注點功能的實現,它通知程序新的行為。如在權限處理中, permission advice 包括權限控制的實現代碼。
pointcut (切入點): pointcut 可以指定把哪些 advice 應用到 jointpoint 上去、如何應用上去以及應用的位置。
AOP 包括三個開發步驟:
關注點分解:分解需求提取出橫切關注點和一般關注點。把核心模塊級關注點和系統級的橫切關注點分離開來。就前面所提到的網上購物系統來說,可以分解出四個關注點:核心的訂單處理、權限、日志和事務。
關注點實現:各自獨立的實現這些關注點。
關注點的重新組合:在這一步里,通過創建一個模塊單元來指定關注點重組的規則。重組過程被稱為織入( Weaving )。以前邊的網上購物系統來說,可以通過某種方式指定每個操作結束后需要記錄日志、操作開始前要驗證是否有權限、操作失敗要事務回滾。
下面是 AspectJ 實現日志記錄的一個例子:
public aspect AutoLog
{?
pointcut publicMethods() :
execution(public * org.apache.cactus..*(..));
pointcut logObjectCalls() :
execution(* Logger.*(..));
pointcut loggableCalls() :
publicMethods() && ! logObjectCalls();
before() : loggableCalls()
{
Logger.entry(thisJoinPoint.getSignature().toString());
}
after() : loggableCalls()
{
Logger.exit(thisJoinPoint.getSignature().toString());
}
}
可以看到,這里邊有很多 Java 中沒有的關鍵字,比如 aspect 、 pointcut 等。這些關鍵字都是 AspectJ 提供的,使用這些擴展我們可以用 AspectJ 為 Java 類增加字段及方法,甚至使 Java 支持多繼承。
Spring 沒有自己進行 AOP 技術的實現 , 它的主要實現技術來自于 AOP 聯盟( AOPAlliance )。
Spring AOP 中的術語不像 AspectJ 那樣多,因而也更容易理解和學習。只要理解三個概念就可以, advice , pointcut 和 advisor :
advice 是要向別的模塊內部不同的地方注入的代碼
pointcut 定義了需要注入 advice 的位置,通常是某個特定的類的一個 public 方法
advisor 是 pointcut 和 advice 的裝配器,是將 advice 注入主程序中預定義位置的代碼