Java工程師成長之路
李顏芯:歡迎大家收看CSDN的視頻節目,今天我們的有關話題是Java工程師的成長之路,今天我們請到兩位老師,和我們一起探討這個問題,首先請兩位老師作一下自我介紹。
李翊:大家好
耿因志:各位好,我是Java組的編程教師。
李顏芯:歡迎兩位老師的到來。首先要問的是要成為合格的Java工程師要具有哪些結構呢?
李翊:我先來說一下,因為我以前一直從事軟體的開發包括這種架構的設計,也從事過教育的工作,包括在職業教育裡面的設計,從工作的經曆感覺,其實說白了就兩點,其一就是編碼能力,其二就是項目經驗,其實這二點聽起來很普通,但是我想著重說明一點就是編碼能力這一點來講,我們通常企業裡面說的編碼能力和我們平常說的可能不太一樣,因為Java的學生可能更注重API這些東西的使用,我們這些編碼的理解就是如何使用企業級的程式一個代碼,那什麼是企業級代碼呢?當然他跟企業的現實環境是有關係的,除了要有代碼的功能之外還要有很好的效能方面,等等,所以在寫代碼的時候及我們會對這方面有這方面的考慮,以前我也給學生們舉過一個例子,我會拿出一個真正的企業級的代碼去給他們看,他們會發現最大的不同,他們會發現真正的企業級代碼在那裡面寫了很多的代碼,而他們寫的代碼可能只是列印出來的語句,作為企業級的程式他可能要有很大的工作兩去解決異常情況,在我們平常的聯絡或者學習的過程中可能會更多的注重API的體現。所以我們在設計產品的時候,怎樣使學員的編碼是企業級的編碼。
李顏芯:那他們又是怎樣去慢慢編寫這個代碼呢?
李翊:這個可能會有一些困難,這個需要我的教師去給他們展示企業級的代碼。
李顏芯:那是不是會給他們這樣的類比環境呢?
李翊:這樣的環境肯定會有,那這方面是不是請耿老師給我們說一下。
耿因志:我這邊現在是這樣,我們一致強調一個觀點就是學以致用,我們主要以案例為主,拿一些案例來說明一些概念,我們要通過這個代碼來知道哪個概念,我們要對這個案例進行重構,這是我們上課當中經常採用的一種方式,我們平常還通過其他的方式,還有別的手段。
李顏芯:那你們通過這種手段和這種方法想達到一種什麼樣的效果呢?想給學員達到一種什麼樣的應用呢?
耿因志:很多學生來了以後對編程方面非常的缺乏,首先要打通他們的經脈,讓他們在企業中有思路,我們通常比如上課這樣敲代碼以後,我們會根據某一個知識點會讓學生來分組進行代碼方面的類比,比如我在課上敲代碼會少不了的,那會留一些概念讓學生們自己敲代碼自己示範,這裡面有一種手段,這個敲代碼中會有各式各樣的問題,那這裡面的思路可能會有些打不開,我們會在每個角落都發現問題,基本上分小組的方式,比如我們在30號發現問題了,我會在30號敲代碼,目的是讓這個錯誤在全部展示出來,告訴其他同學一下。
李顏芯:那實際上這也是你們教學的一種方式是吧?
耿因志:對,是一種方式,目的是協助學生開拓思路。
李顏芯:那學生進來之後你們會覺得學生身上有哪些不足呢?在應用方面?
耿因志:我覺得最大的問題就是方法的問題,這個跟學曆沒有太大關係,這個在開發方面差別是不太大的,關鍵最大的問題就是對學生方法有問題,很多學生就是擺脫不了傳統的學生方法,比較依賴於書本,我們在講課的時候一開始還拿著書,很多書上的概念我們是不用看的,只要上課的東西掌握清楚了,就不用看書了,我們號召大家撕書,就是把書撕下來放在兜裡,可以反覆揣摩。
李顏芯:那麼就你們的經驗來看,一般這些學員在進來之前在技術或者應用上有哪些不足呢?掌握的程度怎麼樣?
耿因志:很多學員就是這樣,他可能聽過別人說過某個概念,你要問他這個概念表達的什麼意思他可能一無所知,我們要通過對這方面的瞭解再做一些開發工作。
李翊:我稍微打斷一下,你剛才提到市面上的一些概念比較流行的,這邊我也有一個問題想探討下,這個問題可能跟企業的項目經驗有關,我們現在的無論學生也好培訓機構也好,對於這些非常實用的技術或者架構都有一個比較使用的關注,其實我覺得這邊的話可能會有一個誤區,其實我們這邊的整個課程設計包括整個教學課程不是完全以這樣的架構的講解為主,我們也明白,如果我們只是講到知識的層面,對於學生以後的開發還是協助不會特別的大,為什麼呢?因為我們教出的學員是讓他們具備企業的項目經驗,這也是企業特別希望的,那麼這個如何去具備項目經驗呢?我感覺你應該明白這個項目中間會出現什麼問題,去怎樣解決,那這個架構是什麼呢?這個架構他有它的曆史,我覺得在給學員講這個東西的時候,最重要的第一點就是暴露這個企業方面的東西,讓他知道你在企業中間都會遇到什麼樣的問題。
李顏芯:那是不是暴露企業中間經常出現的問題呢?
李翊:對,比如技術的問題還有需求變更的問題等等。
李顏芯:會出現什麼特殊的問題嗎?
李翊:特殊的問題,其實他能夠把企業中的常見問題解決我想是項目的問題不是技術點的問題,然後把這些問題暴露以後呢?要明白這些組建這些架構是如何解決這些問題的,或者說他解決這個問題的特色在哪裡?第三次我們知道任何東西都是有利有弊,我們在提高方便的懂事降低了靈活度,我們在提高可擴充性的同時降低了效能,我們就是想如何讓你的組建很好的服務於項目裡,那就是要做一些這種,如何去避諱我用了這個組建去有哪些好的方面有哪些不好的方面,我們去做一些自己的擴充都是有可能的,我們的期望我們的確要教這些流行的架構,更要教就是這些流程的架構真正在企業中能夠作什麼事情,我們如何讓這些事情更好的為企業服務。
李顏芯:剛才我們也說了,您剛才教學員們流行的架構,更重要的是告訴他們如何解決實際開發的問題。還會教學員哪些思維呢?
李翊:設計模式這個東西是肯定要有的,我們把模式上升到一定程度是可以的,但是不能過分化,我們要告訴學員這些模式是可以實際解決問題的,有的學員說老師我學了3、5種模式,但是比較模糊,分不清,區別不開,我說區別不開更好,我們不能光為了模式而去學他,我們首先要學習這些模式肯定是通用的一些理念或者方法,去解決實際的行為結構問題,我覺得他只要能夠用這種方式這種思維去解決就好了。
耿因志:我們平常去處理一個問題的時候,我們不可能只解決一種模式,可能集線模式穿插在一起去解決,我覺得李老師剛才說的無招剩有招就是這個問題。
李顏芯:那這個學員當中肯定會有模糊的概念,怎麼幫他清晰呢?
耿因志:我們的學生方法一定要轉變過來,我經常告訴學生的方法就是把這些全部刪除重新寫,那他在重寫的過程中可能會發現說哦,剛才有哪裡寫錯了。
李翊:我們在書上可能會舉一個例子,就是講賣水果或者怎樣,他就會去想,其實我們沒有必要想清楚這兩種模式真正的界限在哪,這是正常的。
耿因志:其實模式的東西我們不需要把他分的特別清楚,我們有的時候要做一個靈活的變通。
李翊:關係是要有變通的感覺。
耿因志:而且我覺得對於學生在那種概念的時候不適合一直往下鑽,我們出現的問題他正好能解決就可以了。
李顏芯:那你們是不是會給學員進行層次的劃分?
耿因志:這個肯定會說一下,另外就是學生方法,什麼階段應該是什麼樣的學生方法。
李顏芯:那二位能不能談一下具體的案例?在教學當中?
耿因志:案例的話,就是我們要求學生寫代碼,寫作業的時候,會出現一種問題,千奇百怪什麼樣的問題都有,這種方式可能就是典型的思路有問題,如果這條路走不通可以用其他的方法,但其實我們不需要再一個問題上深究,至於中間怎麼轉換我們是不提倡的。
李顏芯:那你們會給學員一個什麼樣的導向呢?去解決問題?
耿因志:就是這條路走不通你就先避開,他不行你就趕緊繞彎子,當所有的問題都解決完了再去錦上添花,看看有沒有其他的路可以走。
李顏芯:那這個可以理解成你們的教學的概念嗎?
耿因志:我個人當中經常採用這種方式,經過這種教學的實踐效果還是比較明顯的。
李顏芯:能把這個教學的問題擴大談一談嗎?
耿因志:比如敲代碼的時候經常會一個老師帶一班學生比較多,經常會出現一些問題就是比如張三出現問題,那我可能叫李四幫他處理問題,不是說李四一定能夠協助他解決問題,但是會幫他想,我們會嘗試心理暗示的方法,你開始想,你旁邊有一個鬼,你告訴鬼你開始寫代碼了,第一行、第二行、第三行等等。
李翊:還有一個就是現實的協助,我以前協助過一個學生就是他是清華大學的學生,他來我們這學習,這是一個優秀的例子,我們以前留了這麼個作業,就是上傳FTP的軟體,我發現全班同學都在忙活,就他閑著,閑著幹嗎呢?他上網去找這個FTP,因為FTP這種協議網上肯定會有現成的使用,那麼把他的東西讀懂以後,他又在原先以後進行了一種改變,我覺得這個方式是蠻好的,我倒是建議大家寫代碼的初學者不要埋頭苦幹,為什麼呢?因為這樣會走很多的彎路,你沒有企業級的環境,你沒辦法作專業的測試,所以你往往寫出來的東西表面上可以,實質的結構是有問題的,所以編程編到一定的階段要去多看一些東西,在基礎上重新做一些開發,多看多思考。因為你只有看了才有思考的空間。
耿因志:我覺得程式員必須要有一種衝動,就是首先要把你自己的代碼寫出來,我覺得每個程式員要有這種思路解決這種問題,那這樣如果有現成的離子我們那來調一調。
李顏芯:實際上老師在向我們介紹學生的方法,最後向讓老師給我們談一談不同層次的學員你們對他們的教學目標是什麼呢?
耿因志:我覺得剛開始來的時候會有一些不同,可能科班畢業的學生可能會有助於他的學習,還有一些就是初學者沒有接觸過,我覺得沒有太大的區別,一般來講2個星期以後大家都是一樣的階段,我覺得對於初學者來講學生方法是最重要的。
李翊:對,這個我比較贊同,因為原先我們的教育化主要是以培訓為主,現在的話,東方標準可能除了培訓以外還有廣泛的人才這樣的一個業務,就是我們如何對待不同層次,因為我們作的是全方位的,我們可以針對不同的人可以做不同的培訓,我們可以做高端的人才也可以作普通的人才,單單是開發來講,我覺得你的問題就是來一般地學生可能水平高一些或者水平低一些,可能前兩個星期這幾個人水平很厲害,其他的人稍微的遜色一些,但是2個星期以後水平都抹平了,因為我們培訓的東西是真正企業級的東西,是真正在企業裡面遇到的問題解決的方案,所謂高一點水平就是學曆高一點,拿武術的角度來說就是花拳秀腿,到時候大家真正學到了企業級的思路可能就差不多了。我們還是以一種比較通用的方式去教他們,對於初學者還是鼓勵增長信心,對於高層次的人就是勸戒他不要驕傲。
李顏芯:那是不是你們對這些人注重代碼的應用?
李翊:對,畢竟像軟體開發是一個非常非常高端的腦力勞動,我們不能夠像教他們開汽車或者開飛機那種純應用的東西,而是純理論,如果沒有理論僅僅是操作技能以後找工作還是缺陷的。
耿因志:剛才李老師說的東西是很重要的,我覺得解決問題的方法可能還是要比知識點增長很多。
李翊:我們跟學員講,你們出去以後你們向作架構師可能嗎?你們沒有項目經驗的極點沒有行業背景,但是你至少具備這個架構師的潛質,有的人可能作2、3年就是架構師專案經理了,但是有些人作了很多年以後還是程式員,可能是能力比較高的程式員。
耿因志:我們說一個班的學員層次是比較不同的,基本上學生學的好學的壞老師心理是有譜的,但是不是絕對的。
李顏芯:那節目的最後希望老師給我們說一下總結性的話語。
耿因志:還是長期在這個崗位上的體會,還是個人的體會,第一點就是對所有的開發人員來講,就是對於這個架構非常的流行,每個程式員都不可避免的,我們學任何一個架構之前就是把東西調通,這個非常重要,這個對於後面學習其他的東西有非常的重要,要先練功再練武。第二點解決問題的時候不要沉迷於某一個概念,但是要專著,再一個問題浪費太多的時間沒有太大的必要,那第三點我認為學習技術來講,它的適用性更強一點,要用以自學的觀點,我們在用的過程中體會這個概念,那如果這一本書你覺得看的頭昏腦脹的時候你可以先放一下,這是我個人的體會。
李翊:我這邊也可以說是體會或者是經驗的東西,有幾點,首先就是對於錯誤不要沮喪,可能我們對編程的時候會有錯誤的發生,這是好事情,因為我們學習的就是解決錯誤的方法,我們重要的是要鍛煉解決問題的能力,程式出錯要非常的高興,不要沮喪,對待技術不要敬畏,不要懷著對技術敬畏的角度來學習,這個是不可取的,我們學他是為了用它,我們真正應該用的是項目中如果解決問題,我們通過學習這個產品這個手段更多的是要知道企業中的這些問題他生了我們要怎麼去解決他,去研討解決方案策略,更重要的就是解決架構也好,他會遇到一些弊端,你要敢於去懷疑他,在實踐開發的時候應該有一些這種精神,我們要有一些實踐的開發東西去給學員看,好像背離了我們通常這種一般的認識,其實這可能是正常的因為在中間作了一些事情,對這是個很正常的事情,那麼有些時候我們還會給這些架構做一些改動,做一些完善做一些擴充,你要做一些核心不要去敬畏他,因為某些東西會和他一起淘汰下來,但是我們對於解決系統問題的方法這個可能會保留下來,第三點我們覺得就是對待嘗試不要去畏懼,我們除了學習Java又去學習資料庫,我們不能按照一個一個模組去學習,你剛開始的時候你不可能去對某個技術學習的很深,就是用於常識不要怕犯錯,我也跟學員講,你放開膽去試,那電腦你怎麼試都不會爆炸的,我大體講三點。
李顏芯:好,今天我們的訪談節目就到這裡,非常感謝二位老師的參與,謝謝大家。