A. 如何打好java的基礎
從大學到現在,我使用Java已經將近20年,日常也帶實習生,還在公司內部做training,所以可以分享下我的經驗,希望對你有用。
因為是在工作中培訓,就必然有兩個約束:實用、時間緊,因此就不能像大學那樣,把所有的知識點都面面俱到的講到。而只能挑基礎的,實用的,難理解的講。至於其他邊邊角角的知識,就一筆帶過。一則沒有時間,二則不常用,再則既使講了,學生印象也不深刻。總之一句話:「好鋼用在刀刃上」。
下面,就根據我的實踐,具體談下學習過程:
1.基礎知識
我學習java的時候,先是通讀了《Java編程思想》,然後是《Java核心技術》。當時這兩本書還不像現在這么厚,而剛才我把案頭的《Java核心技術》第9版翻了翻,上下兩冊已經1700多頁了,可想而知,如果要把它通讀一遍,且不說把所有的代碼都調通,就是當小說讀,估計也需要些時間。
但我現在教學依然首推《Java核心技術》,主要是體系完整,實例多,可操作性強。但對初學者,我一般是只講前6章,也就是下面的內容:
Java程序設計概述
Java程序設計環境
Java的基礎程序設計結構
對象與類
繼承
介面與內部類
就《Java核心技術》第9版來說,也就是到250頁為止,加把勁,1個月拿下完全沒問題。
因為你是自學,所以建議你一定要把其中的代碼都調通,課後的作業盡量去做。除此之外,還有兩點特別重要:
#.學習筆記
因為你是自學,不像在企業中學了就能夠實踐,印象自然特別深刻。而自學因為沒有實踐的及時反饋,所以記筆記就顯得特別重要。因為記筆記就像寫作一樣,是整理思路的絕佳方法。同時學習筆記也是你以後開發,面試的絕好資料。
學習編程,人跟人是不一樣的,別人覺得難理解的東西,對你卻不一定;而你覺得難理解的東西,別人可能又會覺得特簡單。而學習筆記就是自己專有的「難點手冊」,有點像高考時的「錯題本」,以後無論是在面試前,還是在日常工作中,隨時都可以翻出來看看,自是獲益匪淺。
#.分門別類保存demo
學習筆記是很好的文字資料,但編程界有句話說的特別好,所謂「no code, no text」,意思就是說:千言萬語都沒有一段代碼來的實在。
以我的經驗,在你在學習的過程中,就某個知識點,無論當時理解的多透徹,調試的多棒,只要時間一長,等到了實用的時候,肯定會碰到各種各樣的問題,一些看似簡單的東西,此時死活就是調不通,正所謂人到事中迷。這個時候,如果你手頭恰有運行良好的demo,打開參考一下(甚至直接拷貝過來),問題自然迎刃而解。而且因為這些demo都是你親手調試出來,印象自然特別深刻,一碰到問題,在腦子中自會立刻涌現。
所以說,在學習的過程,一定要善待你調通的demo,千萬不要用完了就扔,等後來碰到困難,想要用時卻找不到,追愧莫及。正確的做法就是把所有調通的demo,分門別類的保存起來,到時候查起來自是得心應手。
人都說「書到用時方恨少」,其實代碼也是這樣,所謂「demo用時方恨少」。
2.Spring
目前在Java EE開發中,Spring已經成為和Java核心庫一樣的基礎設施,所以說如果想成為一個合格的Java程序員,Spring肯定繞不開。另一方面,如果掌握了Spring體系,Java基本上就算入門了,就有能力進行一些實用級的開發了。
但Spring本身也是日漸復雜,衍生項目越來越多,但最最核心的概念依舊是IOC和AOP,掌握了這兩個概念,再把Spring MVC學會,再學習其他的衍生項目就會平滑很多。
同時,因為Spring本身就應用了許多優雅的設計理念,所以學習Spring的過程,也是加強Java基礎知識學習的過程。因此等你掌握了Spring,原來很多你理解不透徹的Java特性,此時就會恍然大悟,包括介面、抽象類等。
我學習Spring,讀的第一本書是《Spring實戰》,坦率的說,書很一般,但市面上比它好的書,我卻沒有遇到過。還有一本《Spring源碼深度解析》也不錯,對Spring的設計理念講的尤其透徹,雖然整本書讀起來有些艱澀,但前幾章卻生動有趣,也是整本書的精華。所以建議你在學習Spring之前,先把該書的前幾章通讀一下,然後再回過頭來學習《Spring實戰》會順利很多。
以我經驗,要學透Spring,終極的方法還是閱讀源碼(我當時就是這么乾的),待把Spring的核心源碼通讀了,人就真的自由了(所謂無真相不自由),不僅是對Spring,而是對整個Java體系。以後再遇到其他框架,大概一眼就能看出其中的脈絡,所謂到了「看山不是山」的境界。但這都是後話,可以作為以後你努力的方向。
和學習Java基礎知識一樣,學習Spring也一定要記筆記,一定要分門別類保存demo。
老實說,Spring對初學者不算簡單,因此最好能有個好老師帶一下,不用太長時間,2個課時即可,然後就是在你遇到大的困難時,能及時的點撥下。
以我的經驗,要初步掌握Spring,大概需要1到1個半月的時間。
3.其他知識
Spring是Java編程的基礎設施,但真要進入到實際項目的開發,還有些東西繞不過,包括 MySql,Mybatis,Redis,Servlet等,但如果你經過Spring的洗禮,這些東西相對就簡單多了,以我的經驗,1個月的時間足夠了。
4.實踐
學習Java,光學不練肯定是不行的。但因為是自學,所以就沒有實際的產品讓你練手,但也沒有關系,誰大學還沒有做過畢業設計呢?以我的經驗,大家最愛的「學生管理系統」依舊是個很好的練手系統。
別看「學生管理系統」邏輯簡單,但麻雀雖小五臟俱全,其中資料庫設計、Mybatis,Spring、SpringMVC,Servlet、Tomcat一個都不缺,絕對的練手好伴侶。
還有,雖然你的學習重點在Java,因為要做一個完整的demo,前端的配合肯定少不了。因此就免少不了要學一些簡單的JS、HTML知識,但因為前端本就是個很大的topic,所以一定要控制好邊界,千萬不要顧此失彼。就「學生管理系統」來說,在前端上,只要實現一個包含table、textbox、button,能發送REST請求到server,能實現學生的「增刪改查」的簡單頁面即可。
作為一個練手項目,目標就是把Java的主要技能點串起來,所以自不求盡善盡美(也不可能),所以1個月時間足夠了。
.最後
按照上面的過程,4個月的時間剛剛好。當然Java的體系是很龐大的,還有很多更高級的技能需要掌握,但不要著急,這些完全可以放到以後工作中邊用別學。
學習編程就是一個由混沌到有序的過程,所以你在學習過程中,如果一時碰到理解不了的知識點,大可不必沮喪,更不要氣餒,這都是正常的不能再正常的事情了,不過是「人同此心,心同此理」的暫時而已。
在日常的教學中,我常把下面這句話送給學員們,今天也把它送給你:
「道路是曲折的,前途是光明的!」
祝你好運!
B. 程序員的必備技能有哪些
數組、字元串與哈希表
任何受過專業訓練的程序員,對「數據結構」這門課程中涉及到的各種數據結構都不會陌生,但是在實際的編程工作中,大部分的數據結構都不會用到,而且也永遠都不會用到。雖然如此,深入地理解基本數據結構的概念和實現細節,仍然是每個程序員的任務。這不僅僅是因為,掌握這些知識將有利於更加正確和靈活地應用它們,而且也是因為,對於語言背後的實現細節的求知慾是一個優秀程序員的素質。
正則表達式
在程序員日常工作中,數據處理占據了相當的比重。而所有的數據之中文本又占據了相當的比重。文本能夠被人理解、具有良好的透明性,利於系統開發、測試和維護等就必需要有一定規律遵循一種規則,當你掌握一門正則表達式語言,就能夠培養你編程的直覺本能,達到較高水平,也能夠在實踐中提供更高的開發和執行效率。
調試
軟體調試是軟體工程的一個重要部分,其過程出現在軟體工程的各個階段,從最初的可行性分析、原型驗證、到開發和測試階段、再到發布後的維護與支持,都有軟體調試過程參與。學習和靈活運用軟體調試技術,不僅可以提高程序員工作效率,而且有利於對代碼的感知力和控制力,加深對軟體和系統的理解。此外,調試技術是解決各種軟體難題的一種有效武器,它直擊要害、銳不可擋,相對其它間接方法具有明顯的優勢。軟體有大美,調試見真功!
兩門語言
任何一位職業化的軟體技術人員都會將編程語言當成自己的利器。它們代表了開發人員對計算機本身的理解與對軟體開發工作的執著。同時,建立在編程語言之上的基礎也標志著程序員的職業化道路發展到了一個新的階段,而單一語言又有一定的局限性,軟體開發的本質就是處理信息以及數據。一種專門用來處理數據的腳本語言常常是走向更加職業化的必備武器之一。所以精通兩種語言,對於任何一個開發人員來說,並非必須,但是對於一個專業化程度較高的開發人員來說,又常常是必要的。
一個開發環境
隨著技術的進步,IDE已經越來越強大,遠遠超出我們心目中的最初形象,越來越多的內容被涵蓋到IDE中,從需求分析、業務建摸大批軟體發布,IDE已經逐漸覆蓋了軟體開發的整個生命周期。
SQL語言
說起SQL,絕大多數程序員對其作用都瞭然於胸--用來訪問資料庫嘛。確實,數據是信息系統的核心,沒有數據的計算機應用沒有任何意義。信息系統中,大量數據本質上就以實體--關系的模式存在,而RDBMS支持SQL這么簡單但表達能力豐富的訪問介面,同時還提供了內建的事務ACID特性保證和故障恢復能力--因此,RDBMS理所當然地成為了大部分信息系統的標准數據存儲介質。於是,無論使用何種語言開發信息系統,從C、C++,Delphi到Java,從Perl、Python到Ruby,使用SQL訪問RDBMS都是我們必須修煉的武功秘籍。
編寫軟體的思想
說起程序員的武器自然少不了技術書籍,它們就像是拳譜、劍經、雖然不能馬上轉化為巨大的傷害輸出,但假以時日勤以研讀,有朝一日成為傍身絕學也是說不定。不過雖然各類技術書籍汗牛充棟,除去入門時淺顯易用的參考和復雜深奧的學術專著,能夠讓所有程序員常看常新的心法秘籍還是不多。
C. 有哪些老程序員都知道對新手很有用的經驗
一說到程序員,想必大家的第一印象就是頭發少,很大程度上就是因為壓力大導致的,有生活壓力,也有工作壓力。
今天說說工作方面的壓力,想必看到這個問題的小夥伴都有一個認知,就是一個項目往往比預期的要長,說不定從哪天開始就加班了,一出現BUG真的要人命。此時,考研新老選手心態的時候和經驗的時候了,老程序員或許能從容應對,新手可能完全不知錯所。
這些信息包括戶口檔案、社保、公積金等信息,程序員新手可能跳槽比較頻繁,有人甚至還換個城市工作。除了戶口可能其他的信息都亂了,可能當時覺得不那麼重要,但是十年、二十年後,可能會非常重要。
·工作日誌可以提升腦容量;
·不要先寫框架再寫實現,要反過來;
·重構/優化/修復Bug,不要同時做;
·簡化開發流程,加快迭代速度;
·紙筆是最好的工具,其次是markdown;
·畫出結果,一目瞭然。
·要學會進行清晰的命名;
·問問題前先調查,要問到點上。
·不要小看程序員
D. 一個程序員的創業經歷(一)
曾經的創業熱潮讓很多大廠的程序猿加入到了創業大軍,但往往發現「理想很豐滿,現實很骨感」。我也是這樣的一員,國內「C9聯盟」大學畢業,然後去美國常春藤名校讀了個Master,畢業後在一家世界前五的軟體公司工作,後來裸辭回國在一家一線互聯網公司做數據挖掘/機器學習的工作,一切都按部就班的在給個人簡歷添磚加瓦,不過隨著一個加入創業團隊的決定,就開始了一段不一樣的經歷,之後的5、6年時間經歷了多個創業項目。一直埋頭向前沖,最近停下腳步回顧了一下過往經歷,想寫點東西當作紀念,也算是給想要或正在創業的程序猿們一個案例供參考。
當時選擇從大廠出來加入一個創業團隊,也並不算很盲目。首先,行業是當時很火爆的互聯網金融,其次核心團隊成員來自金融、法律、互聯網等不同領域,都是國內頂尖大學畢業的高材生,而且也有不錯的工作經驗和人脈的積累,最後種子輪的資金大概有700多萬,股東也有銀行系出身的大佬,看起來是一個值得搏一把的機會。
我與其中一個創始人曾是同事,被游說出來作為技術團隊的leader,他負責產品,我負責研發,先簡單介紹下核心人物(化名):
劉備:公司CEO,金融領域,做業務出身,對各種金融產品比較了解,在各大銀行及政府部門都有不錯人脈,熟悉生意場上的各種潛規則,有些匪氣但並不是那種很有領導威嚴的風格。
關羽:公司CTO,我的前同事,互聯網產品出身,專業能力很強,既聰明又踏實肯干,待人接物也不錯,屬於實干型,但一樣也是一直在大公司工作,內容相對專一,且沒有金融領域經驗。
張飛:公司法務總監,法律專業,本人也像法律法規一樣嚴禁,無論工作上還是生活上說話做事都很嚴謹,被朋友形容為任何跟黃賭毒沾邊的東西都跟他不沾邊,工作之外並不善言辭,但是為人很nice。
在被前同事關羽游說的過程中,遇到了第一個「豐滿的理想」,因為我是做大數據的,所以關羽跟我說出了他對技術和產品發展的規劃,將來是一定要做金融大數據的,有很多場景可以做,技術上也會有很多挑戰。但既然是「大數據」,首先就要有足夠多的的數據,也就是業務要發展的足夠好才會到這一步,這點我心裡還是很清楚的,所以接受邀請自然也不是因為這個願景。
既然已經決定了大幹一場,也就不瞻前顧後了,出來後就開始著手組建技術團隊,那時候創業公司還是一片欣欣向榮,很多大廠的程序員也都願意考慮創業公司的機會,所以首選就是從公司前同事下手,可惜一個都未能邀請成功,有一個曾經談的比較深入,但最後去了一家拿到A輪的做餐飲供應鏈的B2B電商,之後復盤考慮主要可能有幾個原因:
1. 金融領域本身水就比較深,對普通的程序員來說未實際接觸過的話感覺有點心裡沒底;
2. 種子輪公司畢竟風險更高,而且使用到的技術也更初級一些,若沒有成功,對技術積累來說有一個斷檔;
3. 與前同事共事時是平級,但出來後可能變成向你匯報,或許會有心理落差,之前談得比較深入的同事是被他一個師兄叫走的;
4. 公司給出的offer還不足以讓人放棄穩定的大公司工作加入到小團隊中。
為了控製成本又不能找獵頭,所以接下來就只能通過招聘平台了,拉鉤、智聯什麼的,雖然經歷了一些波折,但最終組建了一個還算蠻有戰鬥力的團隊,在外包+兼職+自己團隊的組合之下,初版系統兩個月左右就上線了,期間產品、技術、法務之間的磨合也越來越好,貌似一切都在正確的軌道上運行。
但系統上線之後才是真正考驗的開始,公司面臨的第一個問題就是平台上是否有足夠多優質的理財產品,雖然前期已經准備了一些由股東支持的理財產品隨時上線,但這並不是長久之計,所以在系統開發期間劉備也一直在洽談合作事宜,時不時的帶來一些振奮人心的消息,但結果證明沒有最終簽署合同的口頭協議都是無效的,這就導致前期平台上產品匱乏。
產品匱乏自然也就無法吸引足夠多的用戶了,用戶量少就更難去談合作了,致使業務一直處於發展緩慢的狀態。商務談判並不像技術開發一樣可以評估工時,安排工期,一個合作談成之前進展都是0,簽合同之後才是100%,中間進度很難評估,而過多的打雞血也會有副作用產生,慢慢的技術團隊的成員就開始對公司不停跳票的業務發展有些擔憂。這僅僅只是一個導火索,接下來會引發一系列的事件和決策,每一個可能都不是決定性的,但累加到一起導致了公司最終的結局。
當業務停滯的時候,沒有太多創業經驗的團隊開始有些發慌,尤其是賬戶里的資金越來越少的情況下,這時開始了兩個所謂「自救」的行為,一個是尋求新一輪的融資,一個是嘗試一些新的產品或接一些快速賺錢的項目。前者的目的也是很明確的要盡快的補充資金,所以很容易陷入到一個2VC的狀態,就是一味地迎合投資人的偏好和想法,迷失了自己最核心的價值和初衷,最終也沒有拿到投資;後者無異於飲鴆止渴,盲目的去接一些無關的項目,導致自己的核心產品和平台沒有持續的迭代和優化,對用戶就更沒有吸引力了,而且找到的項目也很難cover技術團隊的工資成本,變成了做一個賠一個。所以這兩種方式只是勉強支撐團隊而已。
而往往在最艱難的時候才會爆發出更多平時被隱藏下去的問題,首先,劉備和關羽、張飛都是大學同學,作為CEO他對團隊並沒有一個絕對的主導和控制權,而關羽負責人數最多的技術團隊,他們之間的分歧導致了公司整體戰略和團隊方向的不統一。其次,公司的早期股東是4個自然人為主,在公司一個沒有一個比較好的營收的時候,他們之間也出現了一些問題,尤其是其中某一個股東跟劉備的關系最緊密,導致其他股東質疑公司的財務問題,最終導致股東不願意再繼續注資。最後,同樣是因為自然人十大股東,就導致監督機制缺失,作為法務負責人的張飛,由於業務能力比較強,經常被股東委託解決一些私人事務,讓他不勝其煩,成為了第一個離職的核心人員。
最終我們的公司也算是有個歸宿,被一家金融機構給收購了,但這顯然不是因為我們做的足夠出色,而算是無奈把公司賣掉,回收點剩餘價值吧。就這樣第一段的創業經歷就這樣草草落幕,事後復盤總結,有以下幾個重要的經驗吧:
1. 股東組成,早期可以接受個人股東,但不宜太多,占股要有權重等級,而且要有完善的監督機制,如果個人股東占股比例接近,沒有主導性,監督機制又不健全,很容易出現股東之間的猜忌和分歧,對初創公司是致命性的傷害;
2. 創始團隊,團隊成員能力互補、互相信任是基礎,所以經常會有同學、同事一起出來創業,之前大家可能是朋友,或者感情比較親密,但任何團隊都要有領頭人,要有靈魂人物,在有重大決策時能拍板的人,不能因為顧及對方感受而讓決策層出現長時間的分歧;
3. 團隊組成,根據公司或業務類型來合理配置團隊,很多時候在資金還充裕的情況下會盲目的擴充技術團隊,導致當業務沒有起色的時候技術團隊的開銷成為了公司沉重的負擔,任何一個公司都不能只考慮技術開發,運營、市場、銷售等等都要合理配置;
4. 成本控制,創業初期,為了吸引早期員工公司提供了很多福利,包括免費健身、周五團建、飯補車補等等,而且高新聘請各種大牛,一副大幹一場的態勢,最後發現業務還沒什麼起色時初期的融資就已經消耗大半,而且很多時候大牛們也沒有用武之地,造成了極大的浪費;
5. 技術邊界,所謂技術邊界就是創業初期你的產品在技術上要做到一個什麼程度,很多時候技術出身的leader容易陷入到追求技術完美的誤區,覺得一個功能在技術上沒達到理論上的完美就不上線,但永遠都有做不完的需求,一個好的技術leader要清楚怎樣的優先順序最能支撐公司的快速發展,一個功能做到什麼程度就能滿足當時客戶的需求,人力資源就那些,要最大化的發揮效用。
E. 程序員,感覺技術停滯了怎麼辦
你是一名程序員,感覺技術停滯了。那你就去深造唄,就是你可以選擇各種的程序任務去做。哦!針對自己有弱點的地方,然後去學習。活到老,學到老。