這些年,許多人問過我下面相同的問題:
我開始了一個新項目,你認為我該使用什么技術呢?
通常,這些人屬于下面兩類中的一類:
已經做出決定的技術人員
需要鼓勵支持的非技術人員
在一天結束的時候,我懷疑這些人是否真正關心我的答案?;蛟S他們只是想知道我們是否面對相同的問題或只是需要鼓勵支持。
坦白的說,作為一名工程師,我信奉這個說法:偉大的想法可由幾乎任何技術構建。它們都有自己的優點和缺點。無論你選擇什么技術,你都要為它帶來的風險買單。但真的,你項目的成功與否更多的取決于愿景、領導團隊、執行和市場,而并非技術的選擇。
現在,我是一個負責人,我每天做技術上的決斷。當我選擇了一個特定技術時,我要能夠證明這個決定,向我自己、我的合合伙人/員工和潛在的投資者。我根據項目及公司愿景做技術選擇。
項目要成功你必須有一個堅定的愿景。如果你能將你的愿景轉化成一組衡量你每個決定的值,你的前進道路會更清晰,也更容易找到合適的加入你的人。
除了愿景,許多初創公司專注于文化。人們都說文化是由創始人、最初的幾個員工及產品本身確立的,然而,技術抉擇對公司文化有直接影響這個說法卻沒怎么被提到。
你的項目初創可能基于J2EE、Oracle、Perl、PHP、Rails、Node.js或.NET,隨之而來你的團隊工程師將有不同的期望,不同的價值觀,和不同的關注點。這些技術沒有本質上是壞的。偉大的事情都有各自不凡的所在。它們伴隨而來的是一種文化。
幾年前,我遇到一位負責人選擇使用Node.js來搭建自己的應用。出于好奇,我問他為什么選擇Node。他的回答很簡單:基礎的工程師對Node.js很興奮,所以我可以更容易招募到愿意免費貢獻的人,因為他們希望積累相關經驗。
這個決定顯式地定義了工程師文化和團隊成員——那些能夠在這個項目中工作或感興趣這個項目上工作的人。
問一個不一樣的問題
那么我們不應該問什么技術是我們需要使用的, 我們應該問我們自己:
這個技術符合我們公司的核心價值觀嗎?
這顯然是個更為之困然的問題,因為你需要切切實實地了解你公司的核心價值觀。這將是創建一個成功項目的關鍵。
你不能盲目地套用技術就像你不用套用別人的商業計劃那樣。這是公司身份的一部分,你的核心價值觀,你的目標,你的團隊,你的期望都是跟別人不一樣的。
關于“這技術在某某公司用得適合啊”這樣的論據是很少有效的。例如Facebook使用PHP,它“在Facebook公司用得很適合”,但是這意味著我們選都應該使用PHP嗎?
技術文化聯盟
要具體描述這些技術社區的特性是很困難的,但我會個你分享我在不同選擇上的觀點與看法。請自由在評論里分享自己的看法,也可以包括關于其他技術社區的。
古典學校:
這里有些是“經典“的語言:他們已經被使用很長的一段時間,并且被證明他們的價值。他們的使用范圍已經很廣泛,但卻引不起別人更大的激情。
注意:我在這沒有提及Perl,因為我并不知道有哪個創業項目是以Perl作為核心技術來創建的(6?)。
PHP
理念:
功能都實現出來,這非常重要
就像互聯網的基礎一般
只要有一個方法去實現它,那么就不會被破壞
只要它運行起來并且速度很快,那么其他東西都是沒有意義的
不要太理論化了,我們的語言是非常通熟易懂的,任何人一眨眼的功夫就能上手了。你可以用Java做同樣的事情看看!
面向對象是種落后的想法
常見的使用例子: (在2013年中期)
你的第一個web app
WordPress/Drupal的擴展
個人觀點:
PHP擁有它光榮的日子。它真的讓web開發更加簡單,容易上手. 但是, 大概因為大量新的程序員開始使用PHP并且它擁有個不是那么地堅持自己觀點的社區,所以只有少數人能寫出漂亮的PHP代碼。
良好的擁有規范的代碼例子是很難找到的,并且我甚至不敢肯定PHP擁有自身的規范。這導致了PHP社區以糟糕的代碼質量,缺乏測試,安全問題如同夢魘和像在2000年代初期般的落后品味而著名。
擁有良好規范約定,開發流程和指南的強大的PHP團隊,是可以完成偉大的事情的,但這樣團隊很稀少。
Java
理念:
可移植性
像C/C++般的能力和表現,但卻能夠自動管理內存
更多地關注面向對象
IDE是必須有得
我們要消耗所有的內存,因為它們是一文不值的
線程處理是個好方法!
不要提起Java applets
看看我可愛的JVM!
開源(但擁有者為Oracle)
緩慢但更為安全的開發流程
個人觀點:
Java是非常有趣的。在幾年前很多開發者已經厭倦了Java,他們找到了其他新大陸。他們開始轉向一些腳本語言,像PHP,Pyhton,Ruby或者一些更加難懂小眾的語言像Erlang。
盡管如此,Google通過Android展示了Java并不像我們腦海里的那么糟糕(只要你并不是使用J2EE或者Swing)?,F在有一種”趕時髦“的趨勢視乎暗示著Java再次變得酷起來了。這些大多建立在兩件事情上:
JVM
讓人難以置信高質量的代碼庫
即便如此,對于我們來說,花一整天來編寫Java程序看起來并不是一件吸引人的事。如果你打算依靠Java的堆棧,那么有一系列的其他JVM語言供你選擇,他們成熟而且兼容Java擴展的庫(例如:Scala, Groovy, JRuby, Clojure),你總是可以混搭使用它們。
自從大量畢業生學習Java后,聘請Java程序員并非一件難事,但是要找那些前期創業公司,高水準的工程師并且對寫Java程序感興趣是一件極具挑戰性的事情。
另外注意:如果你的目標是Android,那么不用想得太復雜,即使你認為其他JVM語言更好,你也要堅持使用官方的堆棧。
原文轉自:http://blog.sae.sina.com.cn/archives/651?qq-pf-to=pcqq.c2c