1. 首頁
  2. 行業

一位程式設計師對當前軟體行業的技術感悟

一位程式設計師對當前軟體行業的技術感悟

1. 工作軌跡

最開始用的是C++開發了一套酒店管理系統,這個應該是n年前的事情了

之後用過VB, 以及Delphi寫了一些小的軟體,這不值得一提,都是曾經了

從這之後就從原來的C/S(Client/Server)開發轉向B/S(Browser/Server)開發,第一個web專案是asp,當時用了3天的時間學習ASP,有人要問了,3天?就能用asp寫東西了?呵呵,別急,其實早在我15-16歲之間自己就自學了一些HTML, CSS以及JavaScript相關的東西,我說的3天,只是能開始用ASP+HTML+JavaScript+CSS去工作了,之後的經驗也是從工作中不斷積累的,因為個人認為好多事情都是要在實踐中學習的。

ASP寫了大概2-3個專案吧,其中包括給公司寫的,也包括幫朋友做的免費小系統:)這話應該是在06年左右了吧,J2EE開始盛行,雖然當時還沒有達到鼎盛的期間,自己選擇是需要固定自己大方向的時候了,所以開始自學Java以及J2EE相關的知識,就這樣開始了我的Java之旅,一直延續到2個月前把,都在做java相關的專案。當時效力是電力行業,為大唐國際發電股份有限公司做了生產管理系統,科技資訊系統,人事系統,簡訊收發系統,還為一些電廠做了生產管理系統等等吧。這個期間用到的一些技術從語言上來說有Java,FoxPro(哈哈,很少有人還記得它吧,很古老,但是也為很多企業提升過效率,我們藉此機會向微軟致敬)以及HTML等,資料庫的話呢包含Oracle,SQL Server, PI(不知道大家聽過這個沒,很NB的一個數據庫),哦對,甚至還有Access,指令碼呢用的最多就是JavaScript了,因為畢竟是做J2EE的專案,VBS也用過,解決過一些小的問題。當時運用了大量的開源,包括Yahoo UI,DWR,Spring,Hibernate,Struts,iBatis, Tomcat等等吧,一時想不起來太詳細。Web容器呢,用了Weblogic以及Tomcat。其實作業系統也就那麼2個,Linux當時用的是Red Hat和Windows server2000(其實這個server完全可以用來當開發機以及娛樂機,一直認為他的娛樂功能比XP強多了,沒XP那麼臃腫)。做這些專案的時候都是要負責和客戶溝通,更改需求的確認,需求分析,程式碼編寫,帶新人等,注意,這裡有一項就是需求的變動,我想這也是很多人對中國軟體行業感到萬般無奈的一個最重要的因素吧。哈哈

當做完最後一個電廠的資訊系統之後感覺自己的提高不會很大了,所以選擇了離開,想到一個新的城市去看看世界,哈哈。在這個新的城市找到的第一份工作還是J2EE的開發,不過公司性質是當地一家本土企業,號稱在前幾年曾經是當地本土企業中數一數二的了,現在也只能用瘦死駱駝比馬大去形容了,也許是由於哥們去的時間不對吧哈哈(太背了),給的工資完全達不到我的心裡底線(錢其實對於一個追求提高的人來說真的不算是最重要的,可是如果連基本的生活都幫正不了的情況下,我想再有追求百分之八九十的人都會選擇離開吧),所以呢3個多月之後就離開了這家公司,哦忘了說了,這裡做的是工作流系統,參與了一些小的模組,以及單點登入,當時還研究了一下Liferay。

其實本沒有進入移動網際網路開發的計劃,可是有時候就是這樣,身不由己,進了一家外資企業,這裡做的是Location Based Service,我主要負責手機導航相關的工作,覆蓋的手機平臺有J2ME, BlackBerry 以及 Android,說到這裡貌似哥們不知不覺的又回到了C/S的開發,不過在這同時,給公司內部也做了很多J2EE的專案,例如公司的站,公司內部的release平臺,以及team內部用的小工具。不過好景不長,從開發就轉向了管理,一管就是3年,在這三年中不誇張的說去趟廁所都是跑著去跑著回,這還不是最杯具的,最杯具的是根本沒有時間寫任何程式碼!!!作為一個“不思進取”的人來說,是多麼痛苦的事情。所以自己選擇在自己空餘的時間找一些專案做做,順便創個收什麼的,這樣就接觸了很多Outsourcing的專案,也瞭解了很多關於Outsourcing這個行業。

最近呢,感覺自己會的東西越來越少,也許聽起來很矛盾,不過我的想法是這樣的,作為一名軟體工程師來說,我們的目標是管理,這個沒錯,但是個人建議還是最少要寫上15年以上的程式碼之後再去考慮管理,要不然你會很快被淘汰。所以好訊息就是,哥們又能繼續開發了,管理的事情交出去,哈哈,大度不:)。所以現在又開始學習C++, Linux, Makefile, CMake, Python, HTML5等知識,目前做的事情是車載導航,這個行業很少人接觸,不過很給力的。

2. 北京-上海-西安-Sunnyvale

從工作環境上來說,其實所有公司都差不多,為了給自己申請一臺高配置的電腦要煞費苦心,甚至有很多程式碼瘋子選擇自己掏錢買高配置電腦,不過我工作過的幾家公司還好,這方面吝嗇的只佔50%吧,所以我感覺很幸福。

從工作機會上來說,不用說最好的就是矽谷了,各種世界級大公司,主要說一下國內的,北京上海都差不多,很多好公司,包括國內的,國外的分公司以及子公司,數量之巨大我想很多人都瞭解。在西安華為中興已經成為了很多人眼中的最好軟體公司,一個原因,就是給的錢多,因為華為他們在各個城市給的價錢都差不多,所以我們可以想一下,把北京的工資拿到西安來花是個什麼感覺。其實西安也有聊聊幾個很優秀外企,例如Thoughtworks,IBM, Emerson,被IBM收購的SPSS,NEC,Newegg等等吧,我就不一一列舉了。下面就說一下我對以上公司的個人感覺,我們就用工作3年以上的一個Java程式設計師來去對比吧:

Thoughtworks -- Java 程式設計師的天堂,工資1W以上沒有問題,不過據說管理方面被西安本土化了。

IBM -- 聽起來挺唬人的,工資應該是在7k-9k左右,平時非常閒,不打卡,沒有固定的工作時間(這點很人性),住房公積金會相對豐厚,我瞭解的幾個team完全木有鬥志(不代表所有),沒有學習的激情,給人的感覺是混日子拿工資的天堂。

Emerson -- 工資不是很給力6k+吧

原SPSS -- 很Cool的公司,有強大的技術實力,福利待遇沒得說,可惜被IBM收購以後很多東西都縮水了。

NEC -- 工資和Emerson應該差不多吧,面試過好多NEC的技術以及一些PM,個人不是很滿意

Newegg -- 前幾年很不錯,現在好像蕭條了很多

華為 -- 工資很可觀,工作3年以上之後會有拿到更多內部股份的機會,年終獎豐厚,常年加班,包括週六週日,很是熱鬧,面試過很多華為的,一個都沒招進來。

中興 -- 比華為差那麼一點點的公司,剩下都一樣,也面試過很多,還是一個都沒招進來。

以上西安的公司的管理以及工作方式都非常的本土化,個人感覺進取的激情很少,管理混亂,PM各種不專業,甚至讓我感覺西安根本就沒有真正意義上的PM。

3. 軟體領域分析

給政企單位提供服務的領域,這個是鐵飯碗,但是存在很多不公平競爭,不多說這個,再說下去保不齊這篇文章稽核都不過了。你懂的。

網際網路,很火,很熱,甚至已經很成熟了,多少之前的創業者實現夢想的地方,有成功的,有失敗的,競爭激烈,因為肉太多了。

移動網際網路,現在很熱,也很火,我將重點談談對移動網際網路的個人看法。

在這裡能賺到錢的`卻很少很少,多少投資也都砸進去了,收回的卻微乎其微,也是導致很多創業者夢想破滅的“搖籃”,個人認為移動網際網路開始很混亂,大家都看到了這片商機,也都付諸了行動,可是都是在兩眼一抹黑地在這片混亂的戰場上廝殺,當我們看到Nokia,Motola,Blackberry這樣的巨人也在這片戰場上倒下的時候,難免都會有些替他們感到惋惜。

現在炙手可熱的iOS,Android的出現導致了很多人的退出,同時也有很多人參與了進來。Android作為一個開源的平臺,為自己爭取了很大的市場份額,優秀的程式架構加上快速開發的APIs,也吸引了無數的開發者,我就是其中之一,可是個人對Android的擔憂就是由於開源而沒有統一併且明確的標準,這難免讓人擔心會沖走J2ME的老路(前段時間看到了一個新聞,說是Google也注意到了這方面的不足,已經開始研究策略了);還有就是Android market,現在叫做Play store,雖然換了圖示換了名字也換了排名演算法,可是大家能看到的還是一堆一堆的垃圾軟體排名非常的靠前,這難免讓我這種有各種潔癖的人感到難受。相比較之下,目前最好的Software sotre應該就是App store了,感覺至少會比Play store公平那麼一點點,嗨。。這種混亂不好避免,各種水軍,各種刷,其實也能理解,都是為了利益。iOS的應用開發很快速,尤其是它的xCode,簡直是開發者的天堂(個人感覺),可是從技術角度上來說,個人感覺Android的整體架構要比iOS強。但是Apple給我的感覺就是把現有的產品做到極致的一家公司,哪怕是一個非常微小的細節,是我們在工作和生活上學習的榜樣。

4. 從技術角度看發展

對於開發語言簡單的說,Java的鼎盛已快過去,C++王者要歸來。為什麼這麼說?

Java現在覆蓋的領域最大的市場份額現在來看應該是J2EE相關的專案,可是PHP還是能搶走很大一部分市場的,唯一J2EE能保住的就是企業級的開發了(雖然這就是J2EE出現的根本原因,雖然當時J2EE搶走了很多website的市場份額)。J2ME呢,隨著Android很iOS的出現、Blackberry的倒下,已經快不復存在。J2SE來說(這裡只是只client的開發,用Swing和AWT),超級慢的執行速度早就沒有任何的競爭能力。

C++就像是一個家庭的主人,永遠要負責這個家庭的安全一樣,應用在各個領域,從各種開發板子,到我們看到的UI,無所不能,在這裡對於開發者來說,唯一的挑戰就是時間問題,不過隨著越來越多的lib的積累,我想開發速度也是會慢慢提高的。

剛才提到UI,讓我想到了openGL,這項技術也會更大面積的興起,雖然覆蓋面已經很大了。

對於指令碼呢,個人比較推薦Python,高效率的開發,是每一個程式設計師的夢想,不是嗎?

好了,說了這麼多關於語言方面的,下面說一下關於開源專案的那點事兒吧。

開源專案是推動整個軟體行業的一個完全不能忽略的一大塊,要說整個軟體行業是汽車的話,我想開源專案最少是發動機的一部分。可是我們在選型的時候往往面對的態度不對,當前大部分人用開源元件,都只是用,其中會有一部分人會對之有所改動,但是這就是我們的誤區,我們一直在我們的專案基礎上進行選擇、進行對比,這時往往忽略了裡面的程式碼實現,這樣最終也只是用人家的專案而已。開源,什麼是開源,開源就是別人寫的程式碼你不用寫了,但是不是你完全不用寫了,你要知道,如果你不用開源,你同樣要寫和人家一樣的程式碼,如果寫不出來人家一樣的程式碼,我想你還是先不要用開源,自己寫吧,還能提高自己的能力,不知道我表達清楚沒,如果理解到這一點,我想,你會用開源專案了。

對於測試,哈哈,這個應該是整個軟體行業不論是國內還是國外都很頭疼並且必須要做的事情,它決定著你的產品的成敗!

很多國內的軟體公司招了一堆號稱叫做QA的人,每個人分上幾百甚至幾千的cases,之後坐在電腦前,輸入-->點選-->觀察結果,如果是預期的pass,如果不是預期的,開啟Bug tracking工具,報bug。個人更喜歡和這類人叫做UE(User Experience)哈哈,完全自己給起的名字,其實也挺好聽的。我心目中的QA應該是瞭解專案的整體程式碼架構的(說到這我插一句,大家都在做什麼單元測試,之後呢,當作完了總結的時候都說意義不大,為什麼會出現這種情況?因為還沒有真正意義上了解測試的概念),我們的單元測試首先要從架構的測試開始,之後測試業務程式碼框架,測試完業務程式碼框架,再之後測試業務程式碼,這幾個環節中用到的最多的是什麼?Mockup data吧?好,具體怎麼生成Mockup data我就不用多說了吧,每個專案不同,架構不同,這些data的結構都不同,這些data也確實是比較枯燥,但是非常有用!

5. 個人對一些公司的拙劣意見

真正意義上的QA team,一定要選擇技術強大的人,這個很重要的,還是那句話,決定產品的成敗。

不要盲目追求什麼敏捷開發,因為不是所有人都適合,也不是所有公司,所有專案都適合,我們要做的首先就是要選好人

讓每一個職位上的每一個人瞭解他們的職責,並且告訴每一個人你當前階段對他的預期是什麼

從公司到部門到每一個小team,都要由上至下定期的樹立當前的目標

讓每一個人養成的Follow through習慣

建立強大的Review機制