先回答第二個問題,前段和后端,看個人洗好,大部分程序員剛開始是前后端一起的,但是術業有專攻,慢慢的前后端就分離開了。前段需要一些美術功底,就是對展現有感覺,我就是一個對頁面無感的程序員,所以我很早就放棄了前段。
對于后端來說,我覺得有一下幾個能力比較重要,程序實際是解決問題的,不以解決問題為目的的代碼都是耍流氓。
要解決問題,可能需要一些技能。
第一,建模,能把問題進行建模。說白了,就是劃分輸入,處理,輸出,對他們進行建模。需要一定的建模能力。
第二,工程,所謂的工程就是把一個東西拆成很多模塊,然后把它組織起來。所以能把一個大的問題拆分成可實現的小問題是第一項技能,可能涉及的技能有UML圖,oop的編程思想(分層),模塊化,接口設計。
第三,對已實現的模塊的理解及復用,web服務器,數據庫,消息中間件,緩存,操作系統等。
第四,對編程語言自身的理解,如Java,他的jvm運行機制,類庫的使用。
第五,溝通能力和管理能力,程序員其實是一個非常需要溝通的職業,也需要管理,管理自己,管理項目。
第六,情商。高情商會幫助你很多。
最后,健康的身體,這是一項能力,甚至是最重要的能力,因為你需要投入很大的精力和毅力去維護他,比任何技術都更難獲得和保持。