如果單純使用java,說實話非常難。一個稍微有點規模的應用絕非一種語言能夠搞定。一般作為自由開發人員,拋開技術不談,光是技術之外的東西就足夠頭疼。
首先還是談技術。從應用場景出發,針對伺服器後端開發,不用多說,spring技術棧全要會,但這絕對不夠,還要會javabean sevlet jsp最底層,struts和hibernate也要會,因為不是所有的專案都是用最新技術,有些老系統做二次開發,在其原來的技術基礎上增加新功能,如果用新技術甲方可能不會接受。伺服器前端html4和5 css2和3以及js都得會,同時要會一些前端介面框架如easyUI,bootstrap等,這樣才能獨立做網站和維護老網站。web這塊基礎完了,然後就是架構上的加深,如負載均衡,反向代理,讀寫分離,資料快取等等,這些是保障做的東西能夠應對大規模訪問不會崩潰。同時還要懂一些滲透的東西,用來檢查自己系統是否有漏洞。當然瞭解但不限於nginx,mysql,sqlite,rabbitmq,redis,openldap,opendds等等,這些軟體或框架是實現比較良好架構的工具。伺服器應用完了就是桌面應用,雖然現在是bs天下,但是桌面應用也是有的,如果用Java開發桌面應用,那麼就要注意Java桌面技術選型和部署問題。Java桌面技術主要有swing,Javafx,jface等等,以及eclipse和netbeans rcp,建議選擇swing,一方面swing是oracle jdk保留專案,Javafx很可能會從jdk踢出捐給openjdk組織,另一方面swing雖然醜,但也可以做到非常美化,美化方法在swinghacks以及Java swing這兩本書上有,的確可以做到極致的外觀定製,不過難度非常大。netbeansrcp可以改善介面風格,與swing整合不難,eclipsercp採用了jface與swing整合時坑太多。部署時肯定不能強迫甲方必須安裝jre,因此還要自己想辦法將開發的東西連同jre打包,jre本身非常大,為了把桌面軟體變得精巧,還要對rt.jar等包進行裁剪和封裝。桌面之後就是手機端,不用太多說android開發也要會。最後是嵌入式系統,Java做嵌入式有點非主流,不過這不是問題,Javase配合Java se embedded可以實現當前大部分嵌入式需求。當然Javame也要會的,畢竟由於歷史原因,有些販賣機和機頂盒子居然還是用me開發的。基本上從ee到me都會,都要懂,這才不至於接專案太窄。技術只是一個層次,開發是第二個層次。程式碼要足夠清晰簡單,註釋良好,可維護和重用,這樣既能給甲方一個好映像,同時也避免給自己挖坑。因為是要拿Java吃飯的,不是炫技的。同時開發上要注意效率,能夠快速交付東西,還要保證質量,能及時響應甲方需求變更,這才能積累良好的口碑。
其次是技術之外的東西。這裡就比較考驗情商了,一是需要能夠和甲方溝通,能夠準確抓住甲方的需求是什麼,這裡非常忌諱悶頭開發,有可能自己做了半天卻不是甲方想要的。這裡的溝通要注意技巧,對自己的口才表達要求比較高,因為甲方很可能不懂技術,溝通時儘量多談需求性和業務性問題,避免談技術,這樣甲方才會認為你是懂行的。而且溝通絕對不要停留在口頭上,一定得形成書面文字由甲方確認,雖然這一步很多人深惡痛絕,覺得浪費寫程式碼時間,但是書面文字比口頭表達更有效,更能驗證雙方在同一個問題上理解是否有偏差,防止出現甲方想要飛機,你卻造個飛碟的尷尬。二是及時反饋,因為自由開發者承接專案對於甲方而言是一個比較大的風險,一者對於開發者水平無法保證,二者對於開發者的進度無法保證,很可能等了幾個月卻告知無法完成,這不僅導致甲方浪費時間和金錢,也損壞了自己口碑。所以定期反饋是非常有必要的,比如每一週寫週報,把軟體介面截圖或者把開發的功能模組描述一遍,這樣既讓甲方知道你當前進度,同時也能及時發現開發是否出現了偏差。這樣做雙方都有好處,因為對甲方而言,完成一個低端low逼的卻滿足自己需求的軟體,遠比完成一個高階卻沒有滿足自己需求的軟體來的重要。對自己而言開發也沒那麼累。
最後如果打算做自由開發者,一定要保持高度學習狀態,不斷地學習,高效的學習,帶有目的學習。這裡的學習不是隨便找一本技術書看看,說實話看了也就忘了,必須結合當前專案需要來看書,看了就要上手做,把知識運用起來,這樣才是最有效的。不然看了之後又長時間不用,很快久忘了,還浪費時間。而且自由開發者必須路子要足夠野,車開得足夠穩,視野足夠寬,畢竟從深度和精度上比不過大廠的人,那就請在廣度和邪門歪道上比別人厲害,也就是所謂的有兩把刷子。
如果單純使用java,說實話非常難。一個稍微有點規模的應用絕非一種語言能夠搞定。一般作為自由開發人員,拋開技術不談,光是技術之外的東西就足夠頭疼。
首先還是談技術。從應用場景出發,針對伺服器後端開發,不用多說,spring技術棧全要會,但這絕對不夠,還要會javabean sevlet jsp最底層,struts和hibernate也要會,因為不是所有的專案都是用最新技術,有些老系統做二次開發,在其原來的技術基礎上增加新功能,如果用新技術甲方可能不會接受。伺服器前端html4和5 css2和3以及js都得會,同時要會一些前端介面框架如easyUI,bootstrap等,這樣才能獨立做網站和維護老網站。web這塊基礎完了,然後就是架構上的加深,如負載均衡,反向代理,讀寫分離,資料快取等等,這些是保障做的東西能夠應對大規模訪問不會崩潰。同時還要懂一些滲透的東西,用來檢查自己系統是否有漏洞。當然瞭解但不限於nginx,mysql,sqlite,rabbitmq,redis,openldap,opendds等等,這些軟體或框架是實現比較良好架構的工具。伺服器應用完了就是桌面應用,雖然現在是bs天下,但是桌面應用也是有的,如果用Java開發桌面應用,那麼就要注意Java桌面技術選型和部署問題。Java桌面技術主要有swing,Javafx,jface等等,以及eclipse和netbeans rcp,建議選擇swing,一方面swing是oracle jdk保留專案,Javafx很可能會從jdk踢出捐給openjdk組織,另一方面swing雖然醜,但也可以做到非常美化,美化方法在swinghacks以及Java swing這兩本書上有,的確可以做到極致的外觀定製,不過難度非常大。netbeansrcp可以改善介面風格,與swing整合不難,eclipsercp採用了jface與swing整合時坑太多。部署時肯定不能強迫甲方必須安裝jre,因此還要自己想辦法將開發的東西連同jre打包,jre本身非常大,為了把桌面軟體變得精巧,還要對rt.jar等包進行裁剪和封裝。桌面之後就是手機端,不用太多說android開發也要會。最後是嵌入式系統,Java做嵌入式有點非主流,不過這不是問題,Javase配合Java se embedded可以實現當前大部分嵌入式需求。當然Javame也要會的,畢竟由於歷史原因,有些販賣機和機頂盒子居然還是用me開發的。基本上從ee到me都會,都要懂,這才不至於接專案太窄。技術只是一個層次,開發是第二個層次。程式碼要足夠清晰簡單,註釋良好,可維護和重用,這樣既能給甲方一個好映像,同時也避免給自己挖坑。因為是要拿Java吃飯的,不是炫技的。同時開發上要注意效率,能夠快速交付東西,還要保證質量,能及時響應甲方需求變更,這才能積累良好的口碑。
其次是技術之外的東西。這裡就比較考驗情商了,一是需要能夠和甲方溝通,能夠準確抓住甲方的需求是什麼,這裡非常忌諱悶頭開發,有可能自己做了半天卻不是甲方想要的。這裡的溝通要注意技巧,對自己的口才表達要求比較高,因為甲方很可能不懂技術,溝通時儘量多談需求性和業務性問題,避免談技術,這樣甲方才會認為你是懂行的。而且溝通絕對不要停留在口頭上,一定得形成書面文字由甲方確認,雖然這一步很多人深惡痛絕,覺得浪費寫程式碼時間,但是書面文字比口頭表達更有效,更能驗證雙方在同一個問題上理解是否有偏差,防止出現甲方想要飛機,你卻造個飛碟的尷尬。二是及時反饋,因為自由開發者承接專案對於甲方而言是一個比較大的風險,一者對於開發者水平無法保證,二者對於開發者的進度無法保證,很可能等了幾個月卻告知無法完成,這不僅導致甲方浪費時間和金錢,也損壞了自己口碑。所以定期反饋是非常有必要的,比如每一週寫週報,把軟體介面截圖或者把開發的功能模組描述一遍,這樣既讓甲方知道你當前進度,同時也能及時發現開發是否出現了偏差。這樣做雙方都有好處,因為對甲方而言,完成一個低端low逼的卻滿足自己需求的軟體,遠比完成一個高階卻沒有滿足自己需求的軟體來的重要。對自己而言開發也沒那麼累。
最後如果打算做自由開發者,一定要保持高度學習狀態,不斷地學習,高效的學習,帶有目的學習。這裡的學習不是隨便找一本技術書看看,說實話看了也就忘了,必須結合當前專案需要來看書,看了就要上手做,把知識運用起來,這樣才是最有效的。不然看了之後又長時間不用,很快久忘了,還浪費時間。而且自由開發者必須路子要足夠野,車開得足夠穩,視野足夠寬,畢竟從深度和精度上比不過大廠的人,那就請在廣度和邪門歪道上比別人厲害,也就是所謂的有兩把刷子。