需要前後端通吃嗎?

現在作為一個大三的非計算機專業的學生,對java和前端都有些興趣,已經學習兩年了,曾經看過PHP、JAVA、前端,也算有一定基礎了。但是時間不等人啊,所以想問一下幾個問題。
1.前端:如果我沒理解錯的話,就是網頁是吧,前端目前工作狀況究竟如何,初學需要考慮SEO相關的問題嗎,總在想SEO。。。
2.關於java,現在在看《java編程思想》,因為編排順序的問題,關於這麼書有沒有需要注意的呢。
3.操作系統打算學Linux,這個做前端應該不用吧,那我現在學java應該用linux還是windows呢,總感覺系統這東西是用用才會熟悉的東西。
4.是多學些好,還是學精些好,哪門精比較好呢。
5.走過路過不要錯過,感謝幫助我的人~


我的學習經歷,僅供參考。

大約十二年前我學了點html,css,和js,大概就是你說的前端。做了十幾個企業網站,加上一點點asp和access,好像是前後端一起搞,賺了點生活費。

當時覺得用記事本寫css挺傻逼的,沒想到現在很多人用這個吹牛逼。

突然有一天感覺網站很無趣,就改做多媒體和小遊戲,把磚塊公司的軟體用了個遍,才發現音視頻流媒體ps也算前端。

本職工作一直和技術無關,後來突然又有一天發現自己編程水平好像比開發部門每天crud的程序員高一點,美術水平好像比只會用ps切table不知道div為何物的射雞師高一點,於是要求轉崗,被boss以開發部管理崗無空位為由拒絕。

後來開始做手游,發現原來c++和java也是前端,opengl也是前端;原來flash只是個vm,原來我一直只是個api碼農。

開始厭倦學習各種庫和api,造了一些輪子之後,發現原來前端是這樣玩的:用別人的輪子會比較快但受限;自己造太慢;大量的新輪子又不斷出現,所以怎麼守住最後的防線,利用已有輪子和自建輪子把事做了才是問題重點。

做了這麼久前端之後,對後端同學的工作流程很不滿,就開始看後端的東西。做為一個會修電腦的碼農(遊戲邏輯程序員的成長出路? - 曾嶸的回答),又一直在關注linux,所以在入門上相對簡單(這有關係嗎?)。然後,我發現後端比前端好玩,簡潔,深入,專註,而且更易找到不浮躁的人。

這時又發現後端牛人的收入好高。當然了,前端牛人也很高,但冒似後端牛人要多一些。

所以我最近較多時間花在後端。

總之呢,跟隨興趣很重要,積累到一定程度,你自然會知道自己的方向。

學習廣度和興趣廣泛有好處,對你的判斷有很大的幫助。廣了之後,知道怎麼深下去,在經驗積累上花時間,了解別人的api是怎麼實現的。滿足於背熟某些庫或高級語言的api是危險的,人家分分鐘就不帶你玩了(Adobe 停止 Linux 平台 Flash 插件開發了? - 曾嶸的回答)。

最好不要入教。保持一顆渴求知識的心是好事,但不要抨擊你不喜歡的技術。爭論php是不是最好的語言,c++是最爛的語言,java是邪惡的,mac就是比win優雅沒有意義,反而會讓你更浮躁。思考大家為什麼會這樣說,在內心尋找答案。

對於你來說,程序寫到後來,可能就沒法把前後端分那麼清楚了。

對於我來說,前端剛入門,後端正在找門。


強分前後端其實也是在web app和mobile火起來以後,作為傳統桌面程序,前後端其實是整體,用不同的技術做不同的事,現在javascript也可以寫server端組件了,所以前後端在技術方面的界限,至少是在編程語言方面的界限正在慢慢模糊。

關於java的書,好書不止一本,effective java可以看看,不過建議有一些編程實踐之後再看,會更有收穫。還有很多其他關於多線程,關於虛擬機方面的好書,慢慢涉及到了再去看。

關於操作系統,對編程工作影響最大的也就是開發環境,環境搞定之後寫代碼都是差不多的。這個其實不牽扯到太多基礎,工作中用到了就學了。當然如果是linux,要熟悉shell腳本。

其實很多其他問題裡面也有關於全棧開發者(full stack dev)的討論。就是指所謂的前後端都可以做的開發者。這種發展方向到底好不好,很難一概而論。我自己的路線是先擴展面,有點面的積累之後開始深度探索,然後再拓展一些面。僅供參考吧。現在主流的觀點是,想找工作的話,優先專精某一領域;想要創業自己乾的話,沒得選,只能什麼都會。


對於一個非計算機專業的同學來說,你所了解的東西已經很多了。不過可能因為受限於視角和各方面的原因,還是有那麼一些不足吧。

說一下我自己的觀點,希望能夠對題主有幫助。
首先有很大一部分人都提到,前後端通吃是很正常的一個現象。其實這個現象特別是在企業級軟體(常規的業務系統,如CRM、ERP和CMS等)開發中更常見。因為對於這些領域的軟體,考慮更多的是如何實現業務流程,把體驗和交互的優化則放在了次要地方。在這種時候,後端如何處理業務是重要關注點,而且必須具備相應的前端知識才有可能完成所有對應工作

與之相對應的是另外一個領域,比如我們常用的知乎、淘寶、微博等這些互聯網網站的開發。這邊的前後端區分就很明顯了,甚至後端都是分很多層的。
一方面,由於業務量過大造成的系統複雜性問題(比如C10k problem),後端必須獨立出來進行考慮。另外一方面,由於用戶量過大造成的體驗差異問題,前端也要拿出來進行體驗設計。這個時候,後端要思考的不只是如何實現業務,還要考慮如何提升效率、如何增強擴展性、如何應對變化,同樣地,前端也從僅僅把界面實現出來變成了考慮效率交互體驗和其他各個相關方面的問題(比如題主提到的SEO)。

======================
OK,科普就到這裡。具體喜歡哪一個領域,題主應該會有自己的主意。
然後就是給題主一些建議了:

  1. 後端。建議去看一下Rails(或者是少Rails-like,比如Laravel),了解下快速開發是怎樣一種節奏;多考慮一下關於效率並發的問題,以及跟非同步有關的內容,比如設想一下你的系統有了一萬個、十萬個、一百萬個甚至一千萬個用戶的時候又要去如何設計和實現。
  2. 前端
    前端目前還在一步步發展,因為HTML5和即將推出的ES Harmony一步步的指引前端走向多平台、模塊化、組件化,已經完全不是那個會jQuery
    和搜索引擎就能完成前端功能的時代了。而且目前來說知識太零碎,少有能夠比較全面涵蓋到各方面的前端知識庫存在。所以我的建議就是去了解一些現代的框架(比如Kissy)和技術,了解一下MVC / MVVM / FRP,了解一下作為後端的JavaScript(Node,甚至是MongoDB)。
  3. 開發平台。做後端的話,多了解一下Linux還是有用的。畢竟用它做伺服器已經幾乎是主流了。另外,常見的桌面系統都能夠正常的跑起來前端的IDE。
  4. 編程語言。這個不用多說。代碼寫多了你會有自己的體會的。唯一的建議就是除了你在用的Java / PHP和JavaScript之外,再去多學習幾門語言,比如前面提到的Ruby,以及常用到的Python等。
  5. 當然這不是全部。因為很久沒做過Web開發了,我也只是道聽途說,順便說了說自己的想法。記得多關注一下社區動態,隨時更新自己的知識庫。
  6. 祝你成功!

關於前端開發的一些參考:

http://kb.cnblogs.com/page/190205/

http://kb.cnblogs.com/page/190206/


以上。


隨便回答一下,不是很有條理。

前端是指瀏覽器端的編程,後端當然就是Server端的

前端技術包括HTML/CSS/Javascript,當然對於程序員而言,Javascript占更大的比重,有一部分「前端」任務由頁面製作人員完成,也就是切分網頁結構,定義CSS等等,程序員所負責的前端主要是完成用戶人機交互界面,調用數據介面,渲染頁面,完成業務邏輯等等

前端程序員當然需要懂一些後端的知識,程序員從來不應該是偏門的,這個也符合木桶理論,一個短板過短,其他的長板再長也存不住更多的水,所以對前端的使用到了一定程度,如果沒有一些後端的知識,很難有深入的理解。而且前端僅限於JS的水平就太low了,這是一個綜合能力(比如HTTP協議,HTTP Server的配置優化)。

當然樣樣精通不是一兩年能達到的,站的位置決定眼光,也更容易知道自己的界限在什麼地方,這是初學者需要突破的,否則對於開發來說就不是享受,而是在辛苦的掙扎。

後端更多關注的是架構、存儲、效率、穩定、負載,客觀一點說後端的工作的含金量應該更高一些,因為如何保證一個架構有良好的擴展性並承載高負載是互聯網應用(不論是網站還是應用還是在線遊戲)的一個永恆的主題,而前端的技術千變萬化也只是延伸而不是觸及根本的問題(當然不是說用戶體驗不重要)。不過後端的同學壓力也會比較大,半夜被電話叫起來修Bug的幾率是大大的。。

目前探討前端當然是比較時髦的話題了,不過萬變不離其宗,要成為優秀的開發人員提高綜合素質是必須的。

學習Java或其他語言對於是Windows還是Linux其實沒有區別,因為關注的是語言本身,基本各種語言都是有Win和Linux版本的。但是如果涉及部署架構等問題,學習Linux類的操作系統也是必須的。(入一台Mac電腦對於開發人員其實是很不錯的選擇,不過內存一定要大~MacBookPro的標配已經是16G內存了) 無論是PC還是MAC加上Virtualbox+Vagrant這些虛擬機來管理開發環境,那是相當的愜意。

關於SEO的問題,我個人認為如果能遵照各個開發環節所提倡的規範去做,實際上就已經把SEO的工作做了一大半了,這個SEO問題我覺得不是開發過程中首要考慮的。

Thinking In Java這種書還是在闡明Java 語言的基本概念,和實際的J2EE開發還是有很遠的距離的,當然這也是學習Java的不能略過的過程,這個就要靠時間的積累了。不過我已經很少看書了,除非接觸一個全新的知識,否則只看文檔就夠了,這些計算機書籍,實用性比較強的還是O"Reilly的Cookbook系列,了解了基本語法以後,多看一些實例比看一大段理論文字有效,而且計算機書籍往往比當前的技術要落後一個時間段,中文的更是如此,所以有了基礎知識之後多找一些技術網站甚至Follow一些開源項目才是最有效的學習手段。(Evernote是一個很不錯的筆記工具哦,要多加利用,積累整理自己的知識庫)

另外不太推薦Java,我覺得Java用來開發Web應用過於沉重了,學完J2SE還得學J2EE,學完J2EE其實離開發真正的網站還有很遠距離,又有各種框架/類庫/Design Pattern需要學習,另外還得掌握環境部署,這一套學下來終於能運用到實際開發了,發現時間又花在寫各種部署的配置上了。相較而言PHP/Python/Ruby on Rail/NodeJS等語言更現代,類庫也很豐富,也更容易進入實際的開發流程,而且也有很廣泛的用途。不過現在無論是哪種語言不用框架或者用自己的小框架開發都是比較落伍的了,網上的開源項目令人眼花繚亂,連CSS都要框架了,一段時間沒關注什麼Less/Sass這些技術一出感覺好像一下落後了不少,說實在以前切頁面就是個體力活,現在切個結構合理的響應式布局網頁現在的技術含量都是牛逼閃閃的,你說可怕不。。程序員只有不斷更新知識才能跟上時代的節奏。。

再補充一點前端學習的建議
基本的HTML/CSS/Javascript當然比需要先有基礎了,HTML/CSS不必精通,前面也說了要做一個布局結構合理的響應式布局網站是需要一些基礎的,但基本的盒模型總得知道是什麼吧,DIV/P/SPAN有什麼區別也得知道吧,Form怎麼發送數據也得知道吧。然後就要接觸一些框架了,但本人認為絕不要一上來就用jQuery,不了解原生的JS原理上來就用jQuery是快餐的學法,大好基礎最重要,另外用好chrome等瀏覽器的控制台也非常重要,必要的時候你還得了解一下怎麼自己搭一個Apache/Nginx的HTTP Server,和一些基本的資料庫知識(因為前端要和後端數據打交道才有意義,沒有數據的交互做啥功能也是白瞎)

基礎框架如jQuery是必須要掌握的了,曾經還有Prototype/Mootools之類的框架,目前基本上是jQuery一統江湖了,另外其他的基礎框架Underscore/LoDash,模板框架(很多不列舉了),非同步處理RSVP,模塊管理RequireJS等等

MVC框架,Backbone/Angular/Ember/Spin,目前工作項目用的Backbone+Marionette還不錯,其他也不是全用過,還是要選一個口碑比較,用戶社區貢獻比較多的。

功能框架,比如繪圖/繪製圖表,控制動畫等等方面的框架

UI組件框架,這個就很多了,什麼按鈕、日曆、上傳、列表、菜單、對話框、所見即所得編輯器,開源項目很多,Bootstrap上也有很多不錯的項目

總之,基礎知識學習到一定程度就要開始學習框架了,其中基礎框架和MVC框架是最重要的,其他的框架隨著項目的需要再隨時學吧。

另外還有一些周邊的工具,如JsFiddle/RunJS,CoffeeScript,Grunt...學無止境...慢慢來吧

................................


這個答案關於前端技術的內容現在有點過時了,總體方向當然沒錯,最近用的比較多的是react vuejs webpack等,前端技術迭代的太快了??


推薦你去看《程序員修鍊之道》。幹這一行,懂得越多越好。不要小看人的學習能力。


太在意自己是前端還是後端是沒有意義的!
學東西不就是為了完成自己想做的事情么?所以不要局限於前後端啦,什麼有用學什麼!

你要思考的是如何讓技能間相互搭配,搭配好了那就是1+1=???。

拿我自己說,從去年4月份開始學前端,初衷是:作為一個設計師,既然我能用這麼難操作的PS把效果圖做出來,為毛不能用這麼簡單直白的CSS寫出來?然後為了寫出來,學習了HTML,後來看到了CSS3的動畫,幀數高的感動,不行,我也要做動畫!所以。。。然後為了網站能活起來開始用jquery,jquery不夠用了開始學javascript,當然之前有學一些基本的。後端的兄弟開始大量數據了腫么辦?然後開始學習資料庫,開始用json,開始用框架,學了angular,後來又換成Avalon。。MVC,MVVM,是什麼?看不懂啊!然後去找後端的兄弟補課。再後來為了提升自己編碼效率,擺脫自己的5年的老電腦,開始使用公司伺服器遠程寫代碼,所以開始用linux,xshell,xftp,Xming,putty........

一不小心寫成總結了,總之別限制自己的可能性,共勉。


考慮過做ic的人看到這個題目的感受咩


時間夠的話可以先通吃,通吃以後你就知道了整個流程是個什麼樣子。

比如我本人就學了C,C++,VB,python,delphi,JAVA等語言,(當然有好幾種只是了解而已,比如只學過一套教程或者一本書),linux也學過,dreamweaver,CSS,Photoshop,flash,illustrator都學過,其中illustrator和Photoshop還深入學過。

我個人感覺,多學點東西能極大拓寬視野,廣度和深度是互相幫助的。

有時候你不知道該怎麼選擇,可能正是因為你廣度不夠,從而導致不能從整體上去審視和把握。

我建議你把前端和後端都熟悉熟悉,然後選一個先做做。做著做著,說不定選擇就明朗了。


先看看自己的口味吧
LINUX呢,前端也是要會的,不過接觸到了再學也是一樣的
seo呢,跟你沒關係,你只要知道這回事就行了。
一般來說呢,既要你做前端,又要你做後端的公司一般不會是什麼好公司,因為不專註,兩邊都很難玩得轉。最後的產品一般都只是一個能用的東西罷了。
如果你到畢業都沒有明確方向,可以找個什麼都要乾的公司混一兩年,看看自己到底興趣在哪,找到方向之後你就可以專註了。
我認為程序員最重要的就是專註,每個人的時間都是有限的,你不可能做到樣樣精通,那就在保證對其他東西有一定了解的情況下,專攻一項。


以題主的水平來說,完全不是通不通吃的問題,而是考慮得太多,寫得太少。
此外,是否前後端通吃更多是由工作跟興趣決定的,其實都沒啥好說的。比如你進了一個規模相對完整的公司,基本上做好本職工作,在自我工作範圍內加深學習即可。
若是在某些創業公司或者出於自己興趣做項目,那就除了自己專業所長外,其他技能也起碼需要達到能做出DEMO級別的水平。


看你想怎麼通吃了,皮毛的話,一不小心就學會了腫么辦?


我個人建議是不管你做所謂的前端還是後端,在一個方向慢慢做深後,慢慢自然會涉及到不同的領域,不用刻意去前後端通吃,當你技術積累到一定程度,你會發現你前端也會,後端也會,底層也會等等。當然先做好一個方向,有自己的核心競爭力了再說,並且你一個方向精通了,轉其他方向太容易了,記住技術都是相通的!


我學前端的時候,是想著我既然都會了PHP了,乾脆也把前端學了這樣自己一個人就能獨立作出一個網站,要不再學點簡單的設計?讓頁面更好看點。這是我學完PHP後有的想法,因為需要練手就隨便做了個網站,但自己就只能寫後端,沒有前端頁面怎麼測試?隨便用HTML拼起來的頁面醜死了,就連測試ajax都測不了。畢竟感覺前端也不是太難,了解了前端對寫後端也有幫助。
所以我就把前端也學了,能夠獨立開發一直是我的目標。不管是做什麼東西,做個半成品,缺胳膊少腿的東西我真是不能忍!(好像有點強迫症的意思了-_-!)
學了javascript後就發現其實這個語言用處好大。用了nodejs還能寫後端!全棧工程師這個名字聽起來還是很牛逼的。還能在瀏覽器上寫遊戲!甚至是用來寫Android和IOS的應用!這感覺就像是發現了新大陸一樣。

但還是得根據實際情況來決定,時間充足的話前端最好能會,許多公司招聘時,前後端都會的話都是能夠有加分的。畢竟現在有很多新的東西都跟前端有關,HTML5遊戲,web app,混合app。所以前端最好是能會。


精那個都可以,除了SEO,這個是錦上添花的功能,白SEO是寫出對搜索友好的網頁,黑SEO是發現搜索引擎的漏洞,換句話說這個技術是很快過時的。搜索引擎遲早會堵上這些漏洞。這個有機會現學現用就好,目前沒必要花精力。
至於前後端,初期還是定位準一個方向,精通後再考慮兼一下別的方面,那個方向都有機會,收入水準事實上差不多的,都是根據能力給錢。不過目前貌似前端稍緊缺一些。
一般而言,目前一般是window或mac開發,Linux部署,初期你可以不去考慮Linux的問題,不是自己創業會有運維人員處理上線問題的,當然你想向運維方向轉的話,全力學Linux也可以。


我還以為是在問,前後端產品通吃嘛!


我也是非科班的 感覺你問題問得有點傻 看過這種事就別拿出來說了 曾經有個人和我說大學看過1萬行代碼 我心想大學後兩年 一天起碼10小時在電腦前 這一年看了少說20萬 更何況只是看 多實踐自己會有答案


一入前端深似海。能吃下一方面就很流弊了。


你學的還是太少了,等你學的更多一些,再來審視自己的問題


前後端通吃的前提是你先有非常精深的一端。
如果你的老闆老讓你干所有的工作不給你深入某一領域的機會,還是換一個規模更大點的公司吧


需要,而且需要業務和架構通吃,而且還需要需求,設計,編碼,測試,上線,售後通吃,對了另外,我是認真的


推薦閱讀:

PHP是最棒的語言,這個梗 從何而來?
《秒速五厘米》中遠野貴樹的編程水平怎麼樣?
public static <T> List<T> asList(T... a) 原型是怎麼回事?
Android有什麼好的技術點適合進行技術分享?
如何有逼格地輸出「Hello, World!」?

TAG:前端開發 | Linux | Java | 後台開發 |