在08年的時候,我尚未大學畢業,當時在一家公司實習。那時候老闆接了一個項目,是一個給中石油某下屬公司作的一個web版本的管理系統,我和一個同窗硬着頭皮接下來作完了。這個系統後端用的是c#的web form,前端普通的html+css+javascript,數據庫使用的是sql server2005,部署服務器使用的是Microsoft Server 2008。如今回顧這個系統,雖然代碼寫的爛,架構寫的爛,可是可以正常運行,這是偶爾有一些莫名其妙難以解決的小bug。畢竟是本身5年前的代碼嘛,那時候本身太嫩了,好多東西都不知道,沒有多少經驗。javascript
那若是如今要我給這個系統作功能升級,甚至重作這個系統,我會進行哪些改進那?這是個有意思的話題,若是你能真的找出不少可供改進的店出來,那麼說明這幾年來你真的在進步。css
如今還真有可能會對這個系統作功能升級。我想了一下,會在一下幾個方面作出改進和調整。html
使用最新的Visual Studio IDE,而且裝上ReShaper插件。如今本身已經成了一個快捷鍵控、重構控。俗話說,工欲成其事,必先利其器。好的程序員固然要用最好的工具了。新的Visual Studio在效率方面、智能提示方面都有改善。ReShaper做爲.net下的重構利器固然必不可少。前端
將代碼託管到github的私有代碼庫中,使用git做爲源代碼管理工具。之前項目中使用的是svn,使用的公司服務器做代碼託管,而公司服務器不是那麼的穩定。git做爲一款分佈式源代碼管理工具,脫離了中央服務器的束縛,而且擁有快速建立、切換分支,本地提交等特性,完爆svn。github做爲全球最大的代碼託管中心,方便實用,最便宜的會員7$每個月,經濟實惠。java
給系統中的重要功能打好LOG。想當年咱們想要記錄一些程序log,還要本身寫一個簡易的log類庫。如今有不少成熟的log框架能夠被c#使用。試想當你的程序部署到服務器上之後,若是沒有充足的log,那麼排查bug是多麼的困難。服務器上又不能讓你還原現場,不能調試,惟一能幫上忙的就是那些log了。固然打log也有不少學問,好比log等級設置,輸出設置等,這裏就不細說了。git
使用事務機制處理複雜邏輯。在這個系統中有不少併發操做,當時本身並非很懂事務,使用了一些很蹩腳的方法來處理可能的數據異常。如今我會採用成熟的分佈式事務機制來處理這些併發邏輯,使程序更加健壯。程序員
使用TDD,提升單元測試覆蓋率。之前的系統中沒有任何單元測試,一段簡單的代碼都須要啓動程序手工驗證。這樣的反饋太耗時,而且不具有重複性。測試驅動開發可以保證代碼簡潔、正確,而且能快速獲得反饋,保證測試覆蓋率。遇到遺留代碼時,也能夠先添加單元測試,創建保護網,使重構更有信心。github
使用webdriver進行自動化功能性測試。曾經在給客戶演示前,我改了一段代碼,沒想到這段代碼剛好破壞了給客戶演示的一個重要功能。若是有自動化的功能性測試那麼就能夠避免這一切。自動化功能測試能加強對產品的信心,每次改動都在可控範圍以內。web
編寫構建腳本,實現持續集成。即便只有一我的工做在這個項目中,也應當編寫構建腳本,應用持續集成。這樣才能保證你的每一次提交都是安全的;而且將一些重複的工做自動化起來,能夠解放你的大腦關注到更重要的地方去。sql
自動化部署。每次部署項目到服務器上是一個痛苦的經歷,須要手動的替換項目中的某些文件,將文件複製到服務器上,終止當前服務器服務…..哪個環節出錯都是一個致命的打擊。手動不只效率低,並且極易出錯。經過編寫腳本實現自動化部署能夠一勞永逸,和繁瑣的手動操做說拜拜吧。
使用Nuget做爲依賴項管理工具。若是你想要引用一個第三方依賴項,還須要手動從網上下載並添加到項目中的話,那你就out了。做爲一個Java程序員,maven,gradle等構建工具已經是標配,它們都提供了對依賴項的自動化管理。你只須要添加一行字符串來講明你想要使用那個類庫,下載、引用就全交給管理工具來實現了。在c#世界中固然也有相應的產品,那就是Nuget,今後依賴項管理不再是一件頭痛的事情了。
多使用c#自身的特性,如LINQ,委託,函數式編程等。比起不思進取的java語言,c#不知道強多少倍。java在java 8版本才正式引入Lambda,而c#的LINQ早都出來多少年了。若是在進行列表操做時,你還只使用foreach,那麼你太老土了。列表操做無非是filter,map,sort…而c#早爲咱們提供了一系列擴展方法,如Where,Select,Sort….可憐Java中只能使用Guava這種不三不四的第三方類庫來實現相應的效果,並且遠沒有c#的原生功能漂亮。c#既然每一年都會引用那麼多的特性,那麼就要學習、掌握和使用。不少人一邊使用着c#的老土語法,一邊說本身精通c#,真讓人無語。放着那麼多好特性不用,讓咱們這些java程序員真是羨慕嫉妒恨。
使用一些前端框架和JavaScript框架。對於我這種前端小白,想讓我設計出漂亮的頁面還真是力不從心。不用怕,設計者已經考慮到了前端無能者的感覺,譬如bootstrap之類的前端UI框架簡直爲咱們而生。這些不但使用簡單,效果明顯,還自帶響應式設計,實在是前端小白的利器,實現本身精美的web站點再也不是夢。JavaScript就很少說了,什麼jQuery,AngularJs,ExtJs…..各類框架類庫層出不窮,涵蓋了前端開發的方方面面。不管你是想畫圖,操做DOM元素,建立單頁應用,使用MVC架構…..在JavaScript的世界裏你總有多種選擇。想當年我爲了在web頁面中展示一張統計圖,採用了使用.net在後臺實時繪製成圖片加載到前臺顯示,都是淚啊。如今好了,只須要將數據模型綁定給圖表控件,分分鐘搞定。
好了,就寫這麼多了。如何判斷一個程序員真的具備N年工做經驗,而不是1年工做經驗重複使用了N年?一個好的辦法就是和拿出一個之前的項目出來,看他都會作哪些改進。
對於工做多年的程序員來講,知識面、視野必定要廣,這樣纔有競爭力。這靠的是平時的學習和積累,還要善於思考,如何能把手頭的事情作得更好。