版權聲明:本文爲北京尚學堂原創文章,未經容許不得轉載。html
菜鳥程序員如何提升本身的邏輯思惟和技術水平java
一、 學習一門腳本語言python
可讓你擺脫對底層語言的恐懼感,腳本語言可讓你很快開發出能用得上的小程序。實踐項目:程序員
處理文本文件,或者csv (關鍵詞 python csv, python open, python sys) 讀一個本地文件,逐行處理(例如 word count,或者處理log)正則表達式
遍歷本地文件系統 (sys, os, path),例如寫一個程序統計一個目錄下全部文件大小並按各類條件排序並保存結果算法
跟數據庫打交道 (python sqlite),寫一個小腳本統計數據庫裏條目數量sql
學會用各類print之類簡單粗暴的方式進行調試chrome
學會用Google (phrase, domain, use reader to follow tech blogs)數據庫
爲何要學腳本語言,由於他們實在是太方便了,不少時候咱們須要寫點小工具或是腳原本幫咱們解決問題,你就會發現正規的編程語言太難用了。
二、 用熟一種程序員的編輯器(不是IDE) 和一些基本工具
Vim / Emacs / Notepad++,學會如何配置代碼補全,外觀,外部命令等。
Source Insight (或 ctag)
使用這些東西不是爲了Cool,而是這些編輯器在查看、修改代碼/配置文章/日誌會更快更有效率。
三、 熟悉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…<</p>
瞭解/etc目錄下的各類配置文章,學會查看/var/log下的系統日誌,以及/proc下的系統運行信息
瞭解正則表達式,使用正則表達式來查找文件。
對於程序員來講Unix/Linux比Windows簡單多了,學會使用Unix/Linux你會發現圖形界面在某些時候實在是太難用了,至關地至關地下降工做效率。
四、 學習Web基礎(HTML/CSS/JS) + 服務器端技術 (LAMP)
將來必然是Web的世界,學習WEB基礎的最佳網站是W3School。
學習HTML基本語法
學習CSS如何選中HTML元素並應用一些基本樣式(關鍵詞:box model)
學會用 Firefox + Firebug 或 chrome 查看你以爲很炫的網頁結構,並動態修改。
學習使用Javascript操縱HTML元件。理解DOM和動態網頁,網上有免費的章節,足夠用了。或參看 DOM 。
學會用 Firefox + Firebug 或 chrome 調試<</p>
在一臺機器上配置Apache 或 Nginx
學習PHP,讓後臺PHP和前臺HTML進行數據交互,對服務器相應瀏覽器請求造成初步認識。實現一個表單提交和反顯的功能。
把PHP鏈接本地或者遠程數據庫 MySQL(MySQL 和 SQL現學現用夠了)
跟完一個名校的網絡編程課程,不要以爲須要多於一學期時間,大學生是全職一學期選3-5門課,你業餘時間必定能夠跟上
學習一個+ Ajax (異步讀入一個服務器端圖片或者數據庫內容)+JSON數據格式。
HTTP: The Definitive Guide 讀完前4章你就明白你天天上網用瀏覽器的時候發生的事情了(proxy, gateway, browsers)
作個小網站(例如:一個小的留言板,支持用戶登陸,Cookie/Session,增、刪、改、查,上傳圖片附件,分頁顯示)
買個域名,租個空間,作個本身的網站。
【進階加深】
一、 C語言和操做系統調用
從新學C語言,理解指針和內存模型,用C語言實現一下各類經典的算法和數據結構。推薦《計算機程序設計藝術》、《算法導論》和《編程珠璣》。
學習計算機科學和編程導論
學習C語言內存管理
學習Unix/Linux系統調用(Unix高級環境編程),瞭解系統層面的東西。
用這些系統知識操做一下文件系統,用戶(實現一個能夠拷貝目錄樹的小程序)
用fork/wait/waitpid寫一個多進程的程序,用pthread寫一個多線程帶同步或互斥的程序。多進程多進程購票的程序。
用signal/kill/raise/alarm/pause/sigprocmask實現一個多進程間的信號量通訊的程序。
學會使用gcc和gdb來編程和調試程序
學會使用makefile來編譯程序。
IPC和Socket的東西能夠放到高級中來實踐。
學習Windows SDK編程(Windows 程序設計 ,MFC程序設計)
寫一個窗口,瞭解WinMain/WinProcedure,以及Windows的消息機制。
寫一些程序來操做Windows SDK中的資源文件或是各類圖形控件,以及做圖的編程。
學習如何使用MSDN查看相關的SDK函數,各類WM_消息以及一些例程。
這本書中有不少例程,在實踐中請不要照抄,試着本身寫一個本身的例程。
不用太多於精通這些東西,由於GUI正在被Web取代,主要是瞭解一下Windows 圖形界面的編程。@virushuo 說:「 我以爲GUI確實不那麼熱門了,但充分理解GUI工做原理是很重要的。包括移動設備開發,若是沒有基礎知識仍然很吃力。或者說移動設備開發必須理解GUI工做,或者在win那邊學,或者在mac/iOS上學」。
二、學習Java
Java 的學習主要是看經典的Core Java 《Java 核心技術編程》和《
學習JDK,學會查閱Java API Doc http://download.oracle.com/javase/6/docs/api/
瞭解一下Java這種虛擬機語言和C和Python語言在編譯和執行上的差異。從C、Java、Python思考一下「跨平臺」這種技術。
學會使用IDE Eclipse,使用Eclipse 編譯,調試和開發Java程序。
建一個Tomcat的網站,嘗試一下JSP/Servlet/JDBC/MySQL的Web開發。把前面所說的那個PHP的小項目試着用JSP和Servlet實現一下。
三、Web的安全與架構
學習HTML5,網上有不少不少教程,之前酷殼也介紹過不少,我在這裏就不羅列了。
學習Web開發的安全問題
學習HTTP Server的rewrite機制,Nginx的反向代理機制,fast-cgi(如:PHP-FPM)
學習Web的靜態頁面緩存技術。
學習Web的異步工做流處理,數據Cache,數據分區,負載均衡,水平擴展的構架。
實踐任務:
使用HTML5的canvas 製做一些Web動畫。
嘗試在前面開發過的那個Web應用中進行SQL注入,JS注入,以及XSS攻擊。
把前面開發過的那個Web應用改爲構造在Nginx + PHP-FPM + 靜態頁面緩存的網站
四、學習關係型數據庫
你能夠安裝MSSQLServer或MySQL來學習數據庫。
學習教科書裏數據庫設計的那幾個範式,1NF,2NF,3NF,……
學習數據庫的存過,觸發器,視圖,建索引,遊標等。
學習SQL語句,明白錶鏈接的各類概念(參看《SQL Join的圖示》)
學習如何優化數據庫查詢(參看《MySQL的優化》)
實踐任務:設計一個論壇的數據庫,至少知足3NF,使用SQL語句查詢本週,本月的最新文章,評論最多的文章,最活躍用戶。
五、一些開發工具
學會使用SVN或Git來管理程序版本。
學會使用JUnit來對Java進行單元測試。
學習C語言和Java語言的coding standard 或 coding guideline。(我N年前寫過一篇關C語言很是簡單的文章——《編程修養》,這樣的東西你能夠上網查一下,一大堆)。
推薦閱讀《代碼大全》《重構》《代碼整潔之道》
最後,若是你想了解更多最新Java資訊,但願從事IT技術相關的崗位和領取Java學習資料,歡迎關注「北京尚學堂」微信公衆號。