一個偶然的機會使得朋友須要我幫忙編寫一個企業應用。這個工做是免費的,所以進度方面並不緊張,因而我也就有了借編寫這個應用實踐一下企業開發方面新技術的機會,且寫且學。前端
由於這是一個小應用,並且全部工做都是我一人來作,全部必須選擇簡單、易用、快速的技術,好在現在這樣的技術可選擇的很是多。最終我選擇了 Spring Boot、AngularJS 和 Bootstrap 這三個技術。java
先扯一些和標題關係不大的東西。在寫如何用這些技術開發一個企業應用以前,我想談談我在軟件工程師技術學習和發展方面的心得。剛參加工做的時候,我如同不少工做在外包行業的碼農小朋友們同樣,學習的中心是在 Struts、Spring 和 Hibernate 這三個框架之上的,而編寫代碼和 Java 的基本功則是半瓶水(甚至還不到)。其實這樣很正常,由於 SSH 這三個框架是在平常工做中每天要用到的,因此學習這些框架的時候對於我有即時的意義。可是通過幾年工做以後,我逐漸感覺到對於一個程序員來講,其實內功纔是最重要的。以前由於經驗淺,感覺不到這一點,甚至覺得能熟練使用 SSH 就是一個不錯的程序員了。那對於程序員來講,內功都有哪些呢?這裏就只說技術方面的了,交流、時間管理方面的就不在本文範圍了。程序員
這個話題很大,說一下我能想到的:面試
你主要使用的編程語言原理 如今編程語言幫你作了不少底層的事情,但這不表明你不須要了解這些底層的、原理性的知識。對於我主要使用的 Java 而言,Java 虛擬機、垃圾回收、內存模型都是你須要瞭解的知識。有時甚至須要精通,好比你須要對垃圾回收進行設置的時候。算法
代碼重構和設計模式的知識編程
經常使用數據結構及其實現方式 不爲別的,就爲了面試的時候能順利過關也要作到這一點。對於用 Java 的朋友,JDK 中 java.util 包中的數據結構應當耳熟能詳。什麼 ArrayList、HashMap 中主要操做的源代碼應當都看一遍,調用流程在大腦中應當有個完整的印象。對於經常使用操做的邊界條件也應當瞭解。設計模式
閱讀你所經常使用類庫框架的源代碼 好比像 JDK 的源代碼、Spring 的源代碼等等(固然也包括其它語言的,若是你常用它們)你都應當有意識地瞭解它們主要部分的源代碼。要想寫出好代碼,首先要知道何時好代碼。服務器
多線程技術 作服務器端開發的同窗,併發編程是必須掌握的一個重要的知識點。即使是像 Java 這樣,在併發方面提供了很是多工具的語言,你也是要深刻掌握併發方面的知識。數據結構
算法技術 並非讓你們背算法,而是要讓你們培養解決問題的思惟習慣,而算法就是最好的鍛鍊方式之一多線程
面向對象的思想
架構模式 設計模式只是關於方法一級和類一級的設計的範式,經驗的總結。而要設計一個應用程序,僅僅是方法和類級別的好的設計是不夠的,你還須要更高級別的設計思想來武裝你的應用設計,例如狀態機、事件驅動、DDD 等等的。固然我這方面的只是也十分有限,也還須要繼續學習。
協議 TCP、HTTP 協議幾乎是每一個作服務器端開發的朋友必須掌握的。TCP 並不須要精通,可是你知道的越多,你每每就能更深刻的認識和解決工做中的遇到的問題。對於作電信方面的同窗來講,SIP 等協議必需要了解,甚至精通的了。
軟件生產力的不斷提升,得益於新技術的不斷涌現。做爲軟件開發人員,不斷的學習新技術是自身能力提升的重要途徑。雖然你最終所能達到的高度每每是由你的內功的水平決定的,可是這並不意味你不用學習新技術。就比如是一個士兵,不論你的身體素質、射擊技術、格鬥技術、做戰經驗這些內功多麼好,若是你不能熟練操做現代化的武器,你仍是不能成爲一名好士兵。
現在軟件開發領域新技術層出不窮,前端技術、大數據、NoSQL、雲計算、新的編程語言和已有語言的更新、新的開發框架、移動開發,這其中任何一個領域都有大量的新技術,讓人應接不暇。學習全部這些顯然是不可能的,也沒有必要。對於選擇哪些新技術進行學習,一個原則就是根據你現有的工做內容和從此的發展方向來進行選擇。
你首先要對你所作的項目有批判性的思考,絕對不能有這樣的思想:「之前是這樣作的,因此我這麼作也是對的」。你要時不時的思考現有的設計和使用的技術是否存在問題,這些問題對當前項目的影響的程度如何。若是有新技術能改善現有的設計、提升生產力,那這個新技術即是值得學習的。即使是你現有的項目不能輕易地應用新的對生產力有明顯提升的技術,一般是一些大型的、大量採用舊技術的項目,採用新技術有時會牽一髮而動全身。領導每每會出於風險的考慮,不會輕易採用新的技術。但在這個時候,做爲開發人員的你,仍是有必要去學習一些會對項目有明顯幫助的新技術。由於只有當證據確鑿時,領導纔有可能決定在項目中使用這些新技術。
選擇技術一般是根據這樣的路徑:這個技術是什麼 -> 它有什麼優勢 -> 它的優勢會給個人工做帶來什麼幫助 -> 它有什麼缺點 -> 要使用這個技術的項目是否能接受這些缺點。
就像我以前說的,當新的技術能明顯提升現有項目的開發效率,但短期內這些新技術並不能應用在項目之中時,你仍然應該去學習這些。一方面,當你掌握了這些新技術的時候,當你目前工做的項目決定應用這些新技術的時候,你在工做中便有了更多的發言權,你的地位天然也會有提高。或者你的能力能夠應用在將來的項目中。
對技術的掌握,最好的方式就是在一個實際的項目中使用這些技術。實踐出真知。這即是我幫朋友免費開發一個系統的緣由。
除了以前提到的技術外,Gradle、Spock 也都會嘗試使用。這個項目像是一個試驗場,讓我有機會經過一個實際的項目學習這些新技術。
對於一個喜歡編程的人來講,使用新技術老是會讓人激動的。可是,在快樂地學習新技術的同時,你也要時不時地想一想,本身的內功仍是有不少欠缺的。