我是大學的時候才開始接觸編程的,不過我上的是一所三流的大學,高三的時候,因為我們班是重點班,所以有一些復讀生也來我們班學習,高三開始不久我就和一個高四的學姐談戀愛了,還是我的初戀,所以我高考就GG了...
偏題了,回來說說編程的事情吧,雖然說大學是個三流的學校,不過老師都是博士碩士級別的工程師,對于當時的我會覺得他們好像很厲害的樣子,不過現(xiàn)在覺得有時候標簽這種東西并不能說明什么吧。
那時候老師說「移動應用開發(fā)」會火,到時畢業(yè)一定可以找到工作,所以我就想著主攻「移動應用開發(fā)」,也就是 Android ,因為 Android 的應用層是用 Java 寫的,所以一開始學的是「Java基礎」。
雖然說去上課,但是真正聽老師講課的人寥寥無幾,我也不例外,電腦前演示著老師講課的PPT,但是視線一直停留在自己手機里的美女上。
不過有一次老師講到一個「使用for循環(huán)打印星星的例子」,我覺得好好玩,這時候我才發(fā)現(xiàn)Java并非那么無聊,我可以通過代碼寫出打印多少顆星星,打印成正三角形的形狀,倒三角形的形狀,正方形形狀等等。第一次有了一種「有想法可以被Java實現(xiàn)的感覺」,從那天起開始對編程產(chǎn)生了興趣。
那一天雖然知道了「for循環(huán)」怎么寫(跟著老師的例子照貓畫虎),但是對于Java環(huán)境變量怎么配置,二進制是什么,什么是Byte,Long都不懂,那時候可以說對于 Java 只知道怎么拼寫而已。
因為有些知識點之前沒認真聽,也發(fā)覺老師講的很無聊,后來我決定自學,自我驅(qū)動的學習和被動的學習是兩個完全不同的概念,我到現(xiàn)在依然認為:真正牛逼的人,都是自學能力極強的人!
我開始上網(wǎng)查詢學習「Java基礎知識」的資料,無意間發(fā)現(xiàn)了某培訓機構(是哪個機構就不說了,免得說我打廣告)有免費的講課視頻資料,看了一下目錄發(fā)現(xiàn)很全面,于是我下載下來試著看一下,沒想到被講師的幽默講課方式深深吸引,感覺他不做相聲演員都可惜了,于是邊笑著看他的視頻,邊跟著他敲代碼,自己也做一些筆記。那段時間有時候逃課其實是在宿舍里看他的視頻哈哈!
那個視頻課時分為三十來天,不過我是除了跟著他敲代碼外,我還會自己做一些筆記,所以我大概花了兩個多月才把視頻學完的,也就這幾個月的時間我從如何打印Hello World,到常量,變量,注釋,運算,邏輯語句,再到面向?qū)ο螅赡鼙容^笨,當時想了好幾天才明白這一概念),數(shù)組,函數(shù),繼承,內(nèi)部類,多態(tài),GUI等,再到集合,多線程,IO流,反射等等有一個全面的了解了。
感覺自己把 Java 比較基礎的知識學的差不多了,就想著能不能做點好玩的東西出來,記得有一個情人節(jié),那時候我還是有女朋友的人,想給女朋友做一個程序,作為禮物送給她,有那么一個夜晚,我突然想到能不能用 Java 做一款小游戲,游戲的主角就是她呢?
想想還是有點激動的,后來我模仿了「坦克游戲」,不過玩家的坦克是我女票的頭像,而很多敵方坦克就是我的頭像,然后子彈被我改成??(愛心子彈,害羞)。
用了幾天的時間把它做出來覺得好有成就感,最后我把這個游戲打成jar包送給我女票當作禮物,然后看她玩的時候一直在互相發(fā)射愛心,不過敵方的“我”又多,射出的愛心子彈又快,每次玩不久她就“掛”了,老是叫我去修改一下游戲速度,讓她贏哈哈。不過現(xiàn)在的她已經(jīng)不屬于我了,哎,想想還是有點小傷感呢,我是不是又跑題了 - -
因為我一開始就知道我學 Java基礎 是為了去開發(fā) Android 應用,那時候覺得能在手機上把玩自己開發(fā)的 APP 是一種牛逼的存在。所以我又去找了一些「Android入門教程」的視頻來學習,因為自己有了一定的 Java基礎知識 ,所以對「Android入門教程」視頻學起來倒不覺得很難,反而是想著快點學完然后做個有意思的APP出來,所以那時候?qū)ctivity,Service的生命周期、一些諸如TextView,EditView基礎的組件、諸如LinearLayout的容器組件、廣播、Intent、內(nèi)容提供者消費者、Sqlite等基礎內(nèi)容都學的比較認真。
慢慢的我開始寫了一些demo,但是發(fā)現(xiàn)很不滿意,原因是我感覺自己寫的東西很簡單,幾個界面跳來跳去,幾個增刪改查,好像就沒什么了,感覺自己沒有什么項目經(jīng)驗,而且停留在很基礎的層面。
于是我上網(wǎng)去搜索一些Android相關的資料,發(fā)現(xiàn)了CSDN上的「郭霖」大佬,發(fā)現(xiàn)他寫的博客通俗易懂,那時候他每篇博客我都看,慢慢的我又認識到了「老羅」,他寫的東西很深,有時候我看不懂 - -,發(fā)現(xiàn)了「阮一峰」的博客,再到后來我又發(fā)現(xiàn)在知乎上的 「stormzhang」, 我這才發(fā)現(xiàn)當時自己有多l(xiāng)ow,這些大佬們經(jīng)驗滿滿,我從他們身上學到了自定義View,性能優(yōu)化,網(wǎng)絡編程,第三方框架等等比較進階的東西,不過更加讓我學習到的是他們的執(zhí)行力,他們的認知,他們對信息的敏感。
舉個例子:記得 Android Studio 剛出來那會,我只是覺得 Android Studio 應該和 Eclipse 差不多吧,不就是個編輯器,而且Android Studio 剛出來的時候我下載體驗了一下卡的要死,我二話不說就把它給卸載了,什么垃圾玩意。不過后來我發(fā)現(xiàn)大佬們都在用 Android Studio ,而且一直在建議更換為Android Studio,我記得之前大佬們還專門寫了Android Studio的教程。受他們的影響,我把Android Studio下載回來,隨著Android Studio的迭代,我才發(fā)現(xiàn)這編輯器簡直了,這快捷鍵,這體驗,簡直完爆 Eclipse。現(xiàn)在還看到有些人還用Eclipse開發(fā),沒用過Android Studio或者InteliJ IDEA,說實話,我面試到這樣的人一般會直接pass掉,并不是說Eclipse不好,而是認為,如果不擁抱新的事物,總是固步自封,那么很快會被淘汰!
也是那個時候,我發(fā)現(xiàn)了原來還有一個叫做「GitHub」的東西,簡直打開了新天地,上面有許多大牛分享代碼,聚集了全世界的程序員,嚇得我趕緊去學習了Git的操作命令,clone了幾個覺得適合我當時學習的Android項目源碼!
后來和朋友參加軟件杯比賽,能寫出比較像樣的APP了,看著APP從想法到實現(xiàn),確實能帶來很多成就感,也許對別人來說并不完美,但是自己親手寫出來的,自己debug出來的APP,就是有不一樣的感覺,覺得像自己的孩子一樣哈哈!
在大學期間,自己用PS畫UI,使用第三方的接口,琢磨著做了幾個小眾的APP,后來將這些APP都裝在自己的手機上,面試的時候一邊演示一邊跟面試官吹吹牛逼,倒也拿了幾個實習offer。
后來自己選了初創(chuàng)公司,剛開始就讓我接手一個比較大的項目,功能挺多的,商品上下架,第三方支付,商家入駐,到后來甚至還做了附近的人,聊天約炮交友,抽獎等功能,我和另一個小伙伴負責這個項目的Android端,雖然期間遇到了許多問題,如代碼混淆打包閃退,不同手機兼容適配,支付配置不正確等等,也曾懷疑自己是不是能行過,但還是一一解決了,前前后后花了快一年時間也在應用市場上架了好幾版,不過用戶寥寥,可能你應該想到了,產(chǎn)品還沒運營,就夭折了。現(xiàn)在回頭想想,產(chǎn)品思維確實重要。
接著也做了幾款別的APP,表現(xiàn)也是平平 - -
可能因為表現(xiàn)的還行,后來老大說有個公眾號的小項目,后端讓我來搞怎么樣,當時自己也發(fā)現(xiàn)原生APP的開發(fā)趨勢下降了,H5 越來越火,然后跟老大說給我三天熟悉一下 Java 后端的,他說沒問題,沒想到這一決定讓我開始轉向后端開發(fā)了...
其實這三天主要研究了下 JSP , Servlet ,還看了點 struts2 框架,然后也算按計劃時間倒騰出來了那個小項目,也是因為這個小項目我對后端開發(fā)產(chǎn)生了些許興趣,我覺得寫邏輯接口提供給前端調(diào)用好像比較牛逼。
那段時間開始研究 SSH2 框架,使用它做了一個電商項目,接著發(fā)現(xiàn)很少人用 SSH2 了,然后研究了 SpringMVC 框架,JDBCTemplate,進一步學習 Mysql的索引、視圖,使用 PowerDesigner 設計數(shù)據(jù)庫,Nginx,Linux操作系統(tǒng)環(huán)境搭建,操作命令,網(wǎng)絡協(xié)議等等。
不過之前做的很少涉及到高并發(fā),后來比較流行SSM框架了,也使用過它來做一些分布式的項目,慢慢的了解到了連接池、消息隊列、定時、緩存、搜索引擎、渲染模板引擎等等。
由于SSM配置繁瑣,現(xiàn)在Spring Boot/Spring Cloud這樣的高效框架也越來越多人開始使用了。
越往后越發(fā)現(xiàn)基礎的東西很重要,比如多線程的同步異步,各種集合的實現(xiàn)原理,面向?qū)ο螅瓷浼夹g等!
當然我非常不推崇那些對剛入門想學的同學推薦一堆諸如:各種設計模式,JVM調(diào)優(yōu),負載均衡,各種數(shù)據(jù)結構和算法,鏈表、排序樹,分布式存儲,對象池,連接池,網(wǎng)絡三次握手過程等等。
人家還沒開始學,就給嚇跑了 - -
所以我建議「Java自學入門」先從基礎開始,再進階到會使用各種框架,再慢慢了解其原理,加以項目輔助練習,最后再回來補充自己的弱項例如操作系統(tǒng),數(shù)據(jù)結構,算法,網(wǎng)絡!