前言
你是否覺得自己從學校畢業的時候只做過小玩具一樣的程序?走入職場后哪怕沒有什么經驗也可以把以下這些課外練習走一遍(朋友的抱怨:學校課程總是從理論出發,作業項目都看不出有什么實際作用,不如從工作中的需求出發)
建議:
不要亂買書,不要亂追新技術新名詞,基礎的東西經過很長時間積累而且還會在未來至少10年通用。
回顧一下歷史,看看歷史上時間線上技術的發展,你才能明白明天會是什么樣。
一定要動手,例子不管多么簡單,建議至少自己手敲一遍看看是否理解了里頭的細枝末節。
一定要學會思考,思考為什么要這樣,而不是那樣。還要舉一反三地思考。
注:你也許會很奇怪為什么下面的東西很偏Unix/Linux,這是因為我覺得Windows下的編程可能會在未來很沒有前途,原因如下:
現在的用戶界面幾乎被兩個東西主宰了,1)Web,2)移動設備iOS或Android。Windows的圖形界面不吃香了。
越來越多的企業在用成本低性能高的Linux和各種開源技術來構架其系統,Windows的成本太高了。
微軟的東西變得太快了,很不持久,他們完全是在玩弄程序員。詳情參見《Windows編程革命史》
所以,我個人認為以后的趨勢是前端是Web+移動,后端是Linux+開源。開發這邊基本上沒Windows什么事。
啟蒙入門
1、 學習一門腳本語言,例如Python/Ruby
可以讓你擺脫對底層語言的恐懼感,腳本語言可以讓你很快開發出能用得上的小程序。實踐項目:
處理文本文件,或者csv (關鍵詞 python csv, python open, python sys) 讀一個本地文件,逐行處理(例如 word count,或者處理log)
遍歷本地文件系統 (sys, os, path),例如寫一個程序統計一個目錄下所有文件大小并按各種條件排序并保存結果
跟數據庫打交道 (python sqlite),寫一個小腳本統計數據庫里條目數量
學會用各種print之類簡單粗暴的方式進行調試
學會用Google (phrase, domain, use reader to follow tech blogs)
為什么要學腳本語言,因為他們實在是太方便了,很多時候我們需要寫點小工具或是腳本來幫我們解決問題,你就會發現正規的編程語言太難用了。
2、 用熟一種程序員的編輯器(不是IDE) 和一些基本工具
Vim / Emacs / Notepad++,學會如何配置代碼補全,外觀,外部命令等。
Source Insight (或 ctag)
使用這些東西不是為了Cool,而是這些編輯器在查看、修改代碼/配置文章/日志會更快更有效率。
3、 熟悉Unix/Linux Shell和常見的命令行
如果你用windows,至少學會用虛擬機里的linux, vmware player是免費的,裝個Ubuntu吧
一定要少用少用圖形界面。
學會使用man來查看幫助
文件系統結構和基本操作 ls/chmod/chown/rm/find/ln/cat/mount/mkdir/tar/gzip …
學會使用一些文本操作命令 sed/awk/grep/tail/less/more …
學會使用一些管理命令 ps/top/lsof/netstat/kill/tcpdump/iptables/dd…
了解/etc目錄下的各種配置文章,學會查看/var/log下的系統日志,以及/proc下的系統運行信息
了解正則表達式,使用正則表達式來查找文件。
對于程序員來說Unix/Linux比Windows簡單多了。(參看我四年前CSDN的博文《其實Unix很簡單》)學會使用Unix/Linux你會發現圖形界面在某些時候實在是太難用了,相當地相當地降低工作效率。
4、 學習Web基礎(HTML/CSS/JS) + 服務器端技術 (LAMP)
未來必然是Web的世界,學習WEB基礎的最佳網站是W3School。
學習HTML基本語法
學習CSS如何選中HTML元素并應用一些基本樣式(關鍵詞:box model)
學會用 Firefox + Firebug 或 chrome 查看你覺得很炫的網頁結構,并動態修改。
學習使用Javascript操縱HTML元件。理解DOM和動態網頁(http://oreilly.com/catalog/9780596527402) 網上有免費的章節,足夠用了?;騾⒖?DOM 。
學會用 Firefox + Firebug 或 chrome 調試Javascript代碼(設置斷點,查看變量,性能,控制臺等)
在一臺機器上配置Apache 或 Nginx
學習PHP,讓后臺PHP和前臺HTML進行數據交互,對服務器相應瀏覽器請求形成初步認識。實現一個表單提交和反顯的功能。
把PHP連接本地或者遠程數據庫 MySQL(MySQL 和 SQL現學現用夠了)
跟完一個名校的網絡編程課程(例如:http://www.stanford.edu/~ouster/cgi-bin/cs142-fall10/index.php ) 不要覺得需要多于一學期時間,大學生是全職一學期選3-5門課,你業余時間一定可以跟上
學習一個javascript庫(例如jQuery 或 ExtJS)+ Ajax (異步讀入一個服務器端圖片或者數據庫內容)+JSON數據格式。
HTTP: The Definite Guide 讀完前4章你就明白你每天上網用瀏覽器的時候發生的事情了(proxy, gateway, browsers)
做個小網站(例如:一個小的留言板,支持用戶登錄,Cookie/Session,增、刪、改、查,上傳圖片附件,分頁顯示)
買個域名,租個空間,做個自己的網站。
進階加深
1、 C語言和操作系統調用
重新學C語言,理解指針和內存模型,用C語言實現一下各種經典的算法和數據結構。推薦《計算機程序設計藝術》、《算法導論》和《編程珠璣》。
學習(麻省理工免費課程)計算機科學和編程導論
學習(麻省理工免費課程)C語言內存管理
學習Unix/Linux系統調用(Unix高級環境編程),,了解系統層面的東西。
用這些系統知識操作一下文件系統,用戶(實現一個可以拷貝目錄樹的小程序)
用fork/wait/waitpid寫一個多進程的程序,用pthread寫一個多線程帶同步或互斥的程序。多進程多進程購票的程序。
原文轉自:http://blogread.cn/it/article/4015?f=sa