我想做網站(10年前一個程序員想寫個網站)

前篇:10年前的程序員,走過的成長之路Qt 塞班應用開發上回說到在國企離職瞭。但其實還有很多事情沒說完,先繼續國企這兩年的編程經歷吧。那段時間,我用瞭一段時間諾基亞的N81:諾基亞N81上點歲數的程序員可能知道,這款手機的操作系統是當時最受歡迎的第一代智能操作系統:諾基亞的Symbian塞班。時過境遷,這個名字現在也已經不是個操作系統瞭,好像有個泰國人一直在找他:塞班操作系統這是我接觸到的第一款開放手機操作系統(之前的摩托羅拉隻是開放瞭Java應用,非常可憐),程序員可以在上面自己寫應用。開發語言依然是C++,這次用的不是VC++6.0瞭,而是Qt Creator。提到Qt估計現在依然有很多人還知道它。正是諾基亞自己研發的一款跨平臺C++開發工具包。而現在大傢對他的認識也許都是以PyQt的形式存在的吧。。。這是Qt Creator後來的樣子由於對C++比較熟悉,直接很快就可以上手,但細節還是很難一下掌握的。心血來潮想做一個能給室友同事炫耀的小應用,而且當時瘋狂迷下五子棋,於是決定就做個五子棋!用瞭將近一個月的時間,經常通宵寫代碼到第二天上班之前,開發瞭一個自己很滿意的五子棋對戰版,可以藍牙跟室友聯機用諾基亞下五子棋。關於Qt這段,立個Flag,單獨介紹一下它吧,這十多年也算是跟它有著不解之緣。第一次接觸web這是一段蠢得要命的經歷。在國企的一個項目中,有一臺電腦連瞭一個設備,領導想看它的運行狀況。這個設備有一根網線能連接到PC上,可以燒進去C語言程序去監聽網卡端口。於是我的第一版設計方案出來瞭。用C#在PC端UDP詢問設備,在設備上收集數據後用C語言監聽回復給PC端。運行結果就是這樣的,每秒鐘刷屏一次:設備管理系統不要笑,這就是我理解的管理系統。參考《學籍管理系統》《圖書館管理系統》。。。懂的都懂。我當然不會滿足於此。憑借紮實的基本功,我判斷:既然設備能使用網線,能使用TCP和UDP協議,那它就能支持HTTP!但我對之後的事情一無所知。不過當時我的組長開發過一個非常厲害的工具,就是一個socket代理工具,一端收消息另一端直接轉發出去。大概類似這樣:網絡圖,原軟件已經找不到瞭,找到也帶不出來這讓我有瞭靈感:我直接把瀏覽器連到這個軟件的tcp端口上,再代理到設備上,於是我就可以觀察到瀏覽器的行為!這樣一搞不要緊,我看到瞭天書:GET / HTTP/1.1
Host 10.10.10.10
User-Agent Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept image/webp,image/*,*/*;q=0.8
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8我的C語言程序的socket居然真的就收到瞭這樣一個字符串??原來腦海中之前很抽象的所謂“HTTP通信協議”,居然就是在TCP socket上直接發送瞭一串帶有格式的字符串!這下我完全懂瞭!於是第二個方案產生瞭:我在設備端監聽80端口,用c語言socket收到瀏覽器發來的HTTP協議字符串之後,把它們解析出我需要的內容,然後把設備的狀態拼成一個HTML網頁的樣子,再在外面套上HTTP協議應答的格式,生成一個更長的字符串,然後TCP socket再發回給瀏覽器。char str1[] = "HTTP/1.1 200 OK\
Date: Fri, 22 May 2009 06:07:21 GMT\
Content-Type: text/html; charset=UTF-8\
\
";
char *str2 = strcat(str1, "<html>\
<head></head>\
<body>\
<li> 主機狀態 正常</li>\
<li> 8000端口 正常</li>\
<li> 接收字節數 2000</li>\
<li> 發送字節數 5000</li>\
</body>\
</html>\
";
// 太蠢瞭原諒我實在無法完全復刻當年的代碼就這樣一個程序,我大概花瞭整整三天時間在設備間調試。其實我完全沒有自信在理論上證明這個方案可行:瀏覽器不是看網站的嗎,真的能用來瀏覽我的C程序?當我第一次看到瀏覽器上真的顯示出一個網頁時,簡直興奮到爆!設備管理系統2.0為瞭讓多個瀏覽器同時訪問這個網頁,我甚至還把它用epoll改寫瞭一遍。。。當天晚上,我跟同樣學計算機的高中同學視頻聊天,給他講瞭我的重大發現:我已經學會瞭開發網站瞭!!然後的故事可能你們能夠猜到:我同學給我介紹瞭有一種叫PHP的東西。並且他給我一句評語:你可真牛逼,C語言字符串拼接手寫http server。。。而我一開始居然以為這真的是在誇我。。。原來不用自己拼HTTP協議?“我說呢,寫這麼個網頁我大概搞瞭小1000行代碼,一大半都是在給HTTP協議拼字符串,這要是寫個網站不得幾十萬行代碼啊?”後來的故事這個同學給我打開瞭web開發的一扇大門。後來我們直接一起去創業寫網站瞭。當然,用的並不是php,後面的文章我再詳細講創業寫代碼的故事吧。但“設備管理系統”的經歷,讓我對“協議”終於有瞭直觀的認識:所謂的協議,就是字符串的格式罷瞭。而在此之前,我一直以為這隻是一個類比,協議應該是看不見摸不到的玄學的東西。現在回憶起來,我一直認為,在編程這件事情上,我的天賦真的是非常差。上面的事情可能很多人都會當笑話來看吧。但這些事情的確對我產生瞭非常深遠的影響。總結所以這裡想對能看到我文章的萌新們說句話:這麼笨的人是可以成為技術負責人的。關註我不要隻看故事!當然我會一直把我的沙雕技術成長之路的故事講下去。但我還會有一個系列,把真正影響我成長的一些原則、方法論總結出來給大傢看的。如果你是入行不久的萌新程序員,請一定要關註我故事系列之外的專題文章。我不會講任何具體框架、語言細節、技巧的。但每一篇都是我認為非常重要的一些啟發和實踐經驗,一定不要錯過~前篇:10年前的程序員,走過的成長之路我是@寫代碼的莎白先生什麼代碼都寫,還喜歡帶萌新入門歡迎關註,歡迎提問!


本文出自快速备案,转载时请注明出处及相应链接。

本文永久链接: https://www.xiaosb.com/beian/51792/