在美做開發多年,寫給國內iphone新手

我說一下我個人經歷在先,我做過PPC的項目經理(可能現在改名叫WM),也在塞班智能系統剛開發之初做過一些商業項目等等等等都和嵌入式有關。但我一直認爲那個時候的我的開發都是不成熟的開發。爲什麼?因爲和很多新手一樣,陷入一些誤區。就是到底什麼是開發程序?這個錯誤大家常犯,爲什麼開發程序,是一大堆數據處理,從第一個程序誕生到今天,程序就是一大堆的數據處理。而其實很少的國內開發人員考慮過這一點,因爲他們大多考慮的是自己的飯碗和升職。所以他們忽略了最基本的東西。而多數國內論壇也把這些東西認爲是無需討論的。而那個時候的我也是。

爲什麼我在文章的一開始就提到了一大堆數據處理,那是因爲數學。可能看到這裏大多數學生朋友都會笑了,數學我很強。如果這樣想,這樣你和我以前的我一樣又進入了一個誤區。這裏我還是以我自己說一個例子,我在美國上calculus,在上之前,我本來不想上的,因爲高數什麼的我都很輕鬆拿到了高分了,這 calculus算什麼,對於中國人來說,簡直就是智商的侮辱,而且第一次Quiz和Midterm也證明了我的想法,多數的外國人的均分就60多,而中國人幾乎都是85以上。而在這成績背後我卻發現了一個問題,就是題目我們都會解,但老師爲什麼一定要反覆的證明趨向於一個數字,他寫了滿滿一個黑板的 2.0 ,1.999,1.998,1997 趨向於0 ,然後他又寫了從-.2.0,-1.999趨向於0.其實那時的我認爲老師很傻,有必要嗎?你做這些些不會改變定律,也不會改變任何結論。而且定律大家都已經知道了。後來我在上完後,找到了老師,問他爲什麼你要這樣寫?她開始笑了,然後對我說,其實過程比結果更重要,而她個人也認爲在這些過程中,說不定哪天她會看到一個,那個就是一個很tiny的一個數字,他的趨向可能會不同。其實她說完這些我還是沒理解,而且我還是認爲她很stupid更多的是古板。但當我完成所有的理科科目後,我終於有了很微妙的轉變,那就是哪怕是一個簡單的結論都需要去自己證明出來,因爲說不定哪一天我也可以去推翻這個定律,因爲我發現了一個很tiny的錯誤。 我想了半天,我決定用這個例子,因爲這代表了美國和中國文化的差異,沒有那一方是對的,或者錯的。只是個人如何去看待這個問題。

而這也是爲什麼要學習離散數學和線性代數和高等數學甚至物理,如果你實實在在的從根本上了解了他們,你的開發程序技能已經是有一定水準了,哪怕你就是不會 C。而這個例子的證明,在國內很多,比如很多清華的數學系和物理系的學生,在phd或者master轉入了CS(計算機技術)專業,他們會有很大的發展空間,而往往都是這類人比從一開始讀CS的人取的成就要高。

可能看完上面你已經灰心了,因爲你的數學不好。數學是一個捷徑,如果我們沒有這個捷徑,我們還有創意。這說起來好簡單。看看國內軟件行業就明白,沒一個有創意的軟件,在說遠一點,你用百度去搜索一個技術參考,可能有1000到2000個結果,但可以很負責的說這1000到2000個結果都是重複的。如果你把這個keyword打入google美國服務器。我也可以很明顯的告訴你,他的重複率低的讓你難以想象。爲什麼搜索結果和創意聯繫起來。因爲抄襲首先扼殺了創意,而什麼是創意,那個不是高深的理念,更不是什麼多符合數學或者物理邏輯的東西,那個是一個純粹的想法。

而多數的程序員在有了好的想法之後,就開始束縛起來,要加密,要如何創業快速賺錢。呵呵,很符合中國特色。其實一旦當你在最初階段就把你的創意捆綁上這些附加的東西之後,他就開始隕落了,除非你有很強大的公司做支持,比如Google或者MS,或者Apple.所以有了好的想法後,不惜代價,勇往直前纔是一個程序員的信念,哪怕市場就是不好,先把他完成,在一段時間後,說不定就會被注意,in other words.哪怕就是不成功,沒人注意,對程序員本身而言,這也是一種經驗的累計,因爲只要你去寫代碼,你就會發現你需要的知識很多。 那怕就是一個小的semicolon(;) 擺的位置發生變化,在程序上,也有可能發生質的變化。therefore, Just do it if you got good idea

說了2個大前提,讓我們開始進入一些開發細節。我看了多數人喜歡問這個一個問題,我要具備哪些語言才能開發apple的程序或者java的程序。

in fact, my answer is nothing. 做java開發也好,做objectC開發,乃至php什麼都好,C不是必須的基礎.in other words, 你會C和不會都一樣。而爲什麼有很多人強調無論學什麼你都要會C,這個論調在國內很多,他們說沒錯,因爲可能他們老師是這麼說的,或者他的學長或者學姐也是這麼說的。但其實,國內多數人都沒給出一個爲什麼要學C的理由,其實看多英文書後,你就知道了,C是一種Thinking, 我並沒有去翻譯這字,因爲Thinking代表很多,不單單是解釋他是一個想法。thinking包括你的文化,包括你的個人經歷,甚至你對其他專業的理解。而我個人的理解對C就是,他是一個做大型程序的基石,而對於你只是完成一個普通程序,可要可不要。因爲現在的計算機英文開發教材都是屬於解釋性的,什麼叫解釋性,就是作者把那些枯燥的東西用他們自己的經驗和實力通過最簡單的語言給你解釋了一下。所以你不需要任何其他基礎, 只需要和twitter一樣,去follow以一個你喜歡的作家,但找到這個你喜歡的作家要花很多時間。

而開發語言,真的無太多話可以說,你只要去記住那些就可以了,OOP就那麼點東西,說來說去就是繼承,多態,封裝這些。最難的也就是C++,因爲他只是一個不全面的OOP,或者不完善的OOP,所以他難,因爲沒完全遵循OOP的規則或者原理。 而相對java就容易很多,因爲就是一個存OOP。而瞭解 OOP的人,或者你真的掌握了他的精髓後,你會發現她是一個合理的東西,而不存在難與不難,就等於Thiniking in Java裏作者反覆說的一些句子,萬物皆對象。而這個對象就是我們在現實生活中天天遇到的,再打個比方,你對你的另一半有些基礎的要求,比如是男性是必須,然後要20歲以上,太小不行,則就是你的field.而有了field就是需要一些function,比如這個男的需要有錢,所以他能賺錢這個 function是必須的,當然能實行人道這個function也是必須的。就這麼簡單,OOP基礎就這些,在深入一些,也有很多,花個2到3天時間就掌握了,所以不要一開始就問難不難。請記住,在中國這麼艱難的環境裏,你都能生存下來,還有什麼可以算得上是難的。

而如果你有C的基礎,其實還是要看一下ObjectC,因爲很多定義還是有一定差別,就等於你會C++,可能也用了C++多年,但你剛接觸java的時候,你也要難免有點不適應,比如繼承裏,你不能繼承多個base class,而且要使用interface,而更具體的,邏輯方面的東西更現實化,比如instanceof(),例子有很多,但說白了就是更方便你快速開發。既然這裏說到了快速開發,我在這裏就展開這個話題,作爲一個新手,不要考慮太多,用現有的你的資源去把你的想法去實現,那怕就是VB也好,不要太在意我今天學的這個java是不是過時了,或者ObjectC是不是太不可移植了。請在你腦海中一定要放棄這個概念,任何東西都會過時,但Thinking 是不會變化太大的。而我們要master或者要handle的是Thinking.

多討論,這個是我在美國學到的另一個東西。其實任何人都可以討論,我的另一半是學生物的,對計算機編程是完全不懂,但我很喜歡問他,你認爲這個如何?他經常的回答很讓我生氣,比如他自己的項目有時候,其他人是用java的寫得,他的瀏覽器沒裝可以打開java程序的東西,他就會很憤怒,爲什麼你們這些做程序的不把問題簡單化。我當時也很氣憤,人家用java寫有什麼不對,但我靜下心來想想,他就是一個最總端的用戶,雖然他的要求不符合計算機原理,但最起碼他對這個程序是感到厭煩了,而那個用Java寫的人,完全可以用ajax加php 做改進,這樣就把這個問題讓非程序員更容易理解。最起碼容易打開。所以和任何人去討論,去聊天,你會得到很多東西。而那些東西是你一輩子在書上學不到的,但肯定會讓你的程序更貼近用戶。如果你和可以和你奶奶(前提你奶奶會電腦)多聊一會,他們也會給你他們需要什麼樣的程序,而不一定要到處找靈感,因爲靈感就在你身邊。

最後一點就是討論後的認同,國人很不喜歡認同別人,總是會認爲自己比別人有本事。但在來美后,我也開始逐步的去承認別人,這在以後的team work中很重要,國內的team work不多,所以很難體會到,一個組員,一個手下,他們都會有他們的想法,而一個好的leader甚至manager,是需要過人的包容力,而這個包容力的基礎就是去認同別人,因爲他們會在任何的一個時間點上說出一些你不知道,或者你沒想的提示,而這個提示可能就是你的軟件項目的轉折點。

本篇完結,我的結語就是:雖然社會很讓你無奈,但作爲一個“人”,做任何事情,都要先尊重和了解身邊的一切,這樣你才能成爲一個人,最少也是一個對別人有幫助的人,而程序員就是用程序去幫助人。而不是停留在自我滿足的層面。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章