互聯網編程如何入門,學習路徑大致是怎樣的?
題主小弟在互聯網編程方面的知識結構比較混亂。我盡量表述清楚我的觀點/問題。
我對這個問題的理解:
1,理論基礎:http原理什麼的。
2.網站的搭建需要用到哪些技術。
3.涉及到rest,soap 這些從哪裡能夠學到。
4.前端其實還好了,小弟的問題主要是後端以及客戶端。例如,豆瓣發布了api,但是這些api都是一些「網址」(我可以這麼理解嗎?)小弟看不懂啊。。。最後問一個和本題無關的問題:com編程如何入門?
小弟現在求的是整個知識框架/體系。周圍沒人懂,只能求助於網路 -- &>特別是神奇的知乎。
或者,您可以回答我,看哪些書,關注哪些人,哪些問題,哪些博客或者其他任何可以自助的方式?小弟不是伸手黨,但是,如果有一個方向性的建議,會事半功倍的。謝謝大家了。
兩個問題一起問,我只能先回答網站搭建的部分,com編程還是vczh來吧。
網站開發涉及的東西很多,很碎。
以你訪問知乎的一個網頁為例,首先你在瀏覽器中輸入知乎的域名http://zhihu.com。域名就如同我們通訊錄中的名字,我們打電話的時候光知道名字是不行的 ,還需要知道對應的電話號碼。於是有種東西叫DNS伺服器,它能把域名換為ip,比如知乎的ip 125.39.223.103。網路通訊的過程中有時候依靠設備的物理地址即Mac地址,有時候依靠ip 地址,中間會穿過交換機、路由器、中繼器等各種設備。作為一個後端,這些知識還是需要掌握的。
當然最基本點,你要掌握 客戶端 到 伺服器 的通訊是通過 socket 的,就是ip + 埠號。比如你訪問知乎的網頁,就是向125.39.223.103的80埠發請求。http一般使用80埠,當然其他埠也是可以的。很多埠是有約定被那些進程使用的,如http 80埠、ssh 22埠、https 80 443。
反正大家通訊都是依靠ip + 埠號進行的,這是網路通訊的基礎,http協議是建立在這基礎上的。
所以要先學好『計算機網路』。
再說http 協議,最重要的就是狀態碼HTTP狀態碼_百度百科這個東西在很長一段時間內不大被重視,我們常用的,200 是正常返回,404是找不到頁面,403是沒有訪問許可權,500是伺服器出錯。這些東西都是約定好的東西。還有就是GET POST PUT DELETE 四種Method。
然後REST可以簡單理解成基於HTTP狀態碼和對應四個Method的一個網路架構系統。
Web開發的過程中,我們訪問網頁,伺服器端返回HTML,瀏覽器解析HTML。
採用REST,我們訪問伺服器端時,伺服器端只返回對應的數據,我們通常採用json格式或者xml。
這樣做剝離了系統的數據層和交互展示的部分。
於是我們一個產品就可以變成,一套RESTFul服務作為數據源,前端的iOS端、Android端、Web端,統一從RESTFul的介面中去讀數據,寫數據。就想直接讀資料庫一樣。其實就是解耦,內聚。
當然只是RESTFul的一部分特點,講RESTFul的書挺厚的。大家現在執行的也很少時嚴格的RESTFul這就是理論和實際應用的不同,大家都會根據自己的情況去調整。
前端的事情就不講了,技術太多。需要什麼學什麼吧。
如何搭建一個RESTFul的服務呢?首先我們要選擇一套技術架構。
後端技術:Ruby on Rails 、Codeigniter (PHP) 、django(Python) 當然還有http://asp.net 、GO 什麼的。
資料庫:Mysql 、Redis 、MongoDB 等
伺服器:Nginx 、Apache 等
在伺服器方面,還有負載均衡、CDN等一些知識,這不急著了解了。
——————————————————————————————————————————
如果你一定要整個知識框架體系,那東西就多了啊。你要做的東西大概按順序如下:
1:學會用C++和socket或windows的http server api做一個http server,搞成一個小網站
2:多加幾個網頁之後你就明白為什麼大家總是需要一個template語言/工具了,然後你可以試著自己開發一個
3:於是你開始試圖做動態網頁,你就要用jquery和XMLHttpRequest修改html本身還有和C++伺服器進行數據交換
4:然後你開始給你的網站加一個Windows桌面的客戶端,這是對模塊化能力的重大考驗
5:你會發現你重複了很多代碼,所以開始使用MVC和一些小的設計模式來幫你劃分模塊
6:然後你發現,儘管C++用IOCP是很方便,但是拼HTML字元串還是難爆了。於是你開始嘗試把C++伺服器改成純粹的功能伺服器,然後用一個薄薄的http server來host你的網頁,網頁開始用js獲取後台數據,然後用js調用你的新template工具來生成HTML,再也不要在C++裡面拼字元串了。
=========================================
做到這裡,你的小網站已經變成了 C++功能伺服器/不知道什麼寫的http server/js+template+ajax的browser端/不知道什麼寫的GUI客戶端
=========================================
這個時候你差不多可以用你學到的知識來做你想要的東西,於是後面你就面臨幾大問題
1:用戶登錄怎麼做。authentication是需要特別豐富的知識的,而且在天朝不能因為【嗶—】規定你要給【嗶—】提供用戶的密碼你就非得把密碼的明文保存在生產環境里等著被拖庫。
2:用戶太多了,功能服務期一台機器hold不住了,你需要寫分散式系統
3:客戶端漸漸蔓延到了windows phone、android、ios。如果你不讓view層變得很薄,你就會在各種端和語言裡面重複實現你的controller,做大了之後簡直無法維護。
=========================================
做到這裡,你基本上已經碰到了如何在各種奇葩的語言之間交換數據的問題了。當然這個問題肯定很早就被人解決了,但是因為你需要學會整個知識框架體系,那你一定會開始去山寨一個你自己的protocol buffer這樣的東西。伺服器也開始知道如何用restful http server來把功能抽象成model了,然後你的MVC到這裡就正式學會了。
=========================================
然後你開始加入公司,發現,卧槽之前做過的東西,別人都不願意用你的代碼,而用別人的代碼。然後開始苦逼的學習各種奇怪的腳本語言和框架了。苦逼了半年之後你發現,這些東西竟然都不如你做的,於是出來創業,出新的產品,拳打node.js,腳踢http://asp.net mvc,成為CEO,贏取白富美,走上人生巔峰。
一個web系統每一個地方展開了之後都有無限的問題和細節可以討論,你應該做好準備花大量的時間,一點一點了解他們。
====================================================
發現了題主還要COM,這個實在沒什麼好辦法啊,看《COM 本質論》吧。看得懂就懂,看不懂就算了,反正大部分情況下我們也只需要用簡單粗暴的方法來理解那些COM寫成的API就行了。
前幾年的一天,會用Java寫Loop和Function表弟告訴我,他有機會加入公司的開發團隊,人家團隊是用JBOSS SEAM開發WebApp的。請我給他講講倒底還需要再學點什麼?
我花了整整一晚上的時間,給他畫了一張學習路線圖,還寫了一份說明並標註了重點
。。。。
後來,他轉行了。
最近在做一個Webapp,也算真正的剛入門吧。剛開始接觸互聯網還是因為知乎上的那個關於Python能做什麼有趣的事情,發現Python挺好玩的,就開始學Python。玩Python當然得寫爬蟲,所以就學接著學http協議,也只是粗略的了解,後來想自己搭建一個網站,又開始整Django,然後自己給學校的圖書館寫了一個查詢服務的Webapp掛到微信公眾平台上。
我覺得首先學習一門後端語言,C#,java,php,Python等。然後自己寫一些小程序熟悉一下最基礎的知識,比如http的各種方法,URL什麼的。
然後學習一個框架,自己搭建一個網站,比如給你自己寫個博客。可以用SinaAppEngine,用著挺舒服。這個時候應該算入門了。再去像@vczh 和@bhuztez 說的系統的學習。如果一開始就讀RCF或者從底層寫起,時間周期太長,可能會沒有耐心。當然你如果靜的下心,從零開始,那是再好不過的了。
多年前醉心網路,但是不知路線如何。
作為一個英語專業的學生,奮力學習html語言,學習C語言,學習dreamwaver,1個月後做出了一個的靜態網頁(多年之後我依然為這個網頁自豪,雖然很簡陋)。
後來放棄了背代碼,自己開始搭建伺服器,開私服。開私服用的是asp網站,苦攻半月無解,最後用了現成的。
如今看那段足跡,不難發現它雜亂、無頭緒,既無切入點,又無方向性。
可惜那時候的熱血。
所以,想對題主說的最重要的話就是----------如果你想進入這個行業,一定要有一個引路人!
我們都不是天才,我們需要一個視野廣闊、閱歷豐富的人來指引我們如何在這個你日常生活中從未經歷過的世界中生存。
先學會編程,互聯網編程就入門了。
或者各種速成的培訓班報個名。
算了,你還是去做產品經理把。vczh 的回答的確精彩,心與之,心與之。
如果的確想學這些知識,除了 vczh 說的用心之外,簡單的方法就是跟一個靠譜的老大,看著他如何從0開始做一個整體的架構,認真體會和理解,在工作之餘惡補細節的知識。
知識是無窮無盡的,一個好的老大能給你的不僅是知識,他能讓你有見識,有思想,有高度,就像 vczh 這樣。
QIANDD
現實是你要學很多的東西用來作為進入(較知名)互聯網公司的敲門磚,進去之後會發現其實你在工作中用到的只是公司招聘時候要求的很小一部分技術。
報培訓班吧
推薦閱讀:
※應該學習最新版本的 Python 3 還是舊版本的 Python 2?
※你為什麼從中國移動離職?
※《商業價值》移動互聯網創新大會 2013 的簡介究竟是什麼意思?
※我們看一眼廣告值多少錢?創造了多少價值?
※小米手機的媒體開放日都有哪些環節?