照抄課程編譯不通過怎麼辦
Ⅰ 要成為一名專業的程序員,從零開始需要怎麼一步步來比較好,要把最底層的先學精通嗎(個人認為)求學長
前言
你是否覺得自己從學校畢業的時候只做過小玩具一樣的程序?走入職場後哪怕沒有什麼經驗也可以把以下這些課外練習走一遍(朋友的抱怨:學校課程總是從理論出發,作業項目都看不出有什麼實際作用,不如從工作中的需求出發)
建議:
不要亂買書,不要亂追新技術新名詞,基礎的東西經過很長時間積累而且還會在未來至少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/tcpmp/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和動態網頁(Dynamic HTML: The Definitive Reference, 3rd Edition - O'Reilly Media) 網上有免費的章節,足夠用了。或參看 DOM 。
學會用 Firefox + Firebug 或 chrome 調試Javascript代碼(設置斷點,查看變數,性能,控制台等)
在一台機器上配置Apache 或 Nginx
學習php,讓後台PHP和前台HTML進行數據交互,對伺服器相應瀏覽器請求形成初步認識。實現一個表單提交和反顯的功能。
把PHP連接本地或者遠程資料庫 MySQL(MySQL 和 SQL現學現用夠了)
跟完一個名校的網路編程課程(例如:http://www.stanford.e/~ouster/cgi-bin/cs142-fall10/index.php ) 不要覺得需要多於一學期時間,大學生是全職一學期選3-5門課,你業余時間一定可以跟上
學習一個javascript庫(例如jQuery 或 ExtJS)+ Ajax (非同步讀入一個伺服器端圖片或者資料庫內容)+JSON數據格式。
HTTP: The Definitive Guide 讀完前4章你就明白你每天上網用瀏覽器的時候發生的事情了(proxy, gateway, browsers)
做個小網站(例如:一個小的留言板,支持用戶登錄,Cookie/Session,增、刪、改、查,上傳圖片附件,分頁顯示)
買個域名,租個空間,做個自己的網站。
進階加深
1、 c語言和操作系統調用
重新學C語言,理解指針和內存模型,用C語言實現一下各種經典的演算法和數據結構。推薦《計算機程序設計藝術》、《演算法導論》和《編程珠璣》。
學習(麻省理工免費課程)計算機科學和編程導論
學習(麻省理工免費課程)C語言內存管理
學習Unix/Linux系統調用(Unix高級環境編程),,了解系統層面的東西。
用這些系統知識操作一下文件系統,用戶(實現一個可以拷貝目錄樹的小程序)
用fork/wait/waitpid寫一個多進程的程序,用pthread寫一個多線程帶同步或互斥的程序。多進程多進程購票的程序。
用signal/kill/raise/alarm/pause/sigprocmask實現一個多進程間的信號量通信的程序。
學會使用gcc和gdb來編程和調試程序(參看我的《用gdb調試程序》)
學會使用makefile來編譯程序。(參看我的《跟我一起寫makefile》)
IPC和Socket的東西可以放到高級中來實踐。
學習Windows SDK編程(Windows 程序設計 ,MFC程序設計)
寫一個窗口,了解WinMain/WinProcere,以及Windows的消息機制。
寫一些程序來操作Windows SDK中的資源文件或是各種圖形控制項,以及作圖的編程。
學習如何使用MSDN查看相關的SDK函數,各種WM_消息以及一些常式。
這本書中有很多常式,在實踐中請不要照抄,試著自己寫一個自己的常式。
不用太多於精通這些東西,因為GUI正在被Web取代,主要是了解一下Windows 圖形界面的編程。@virushuo 說:「 我覺得GUI確實不那麼熱門了,但充分理解GUI工作原理是很重要的。包括移動設備開發,如果沒有基礎知識仍然很吃力。或者說移動設備開發必須理解GUI工作,或者在win那邊學,或者在mac/iOS上學」。
2、學習Java
Java 的學習主要是看經典的Core Java 《Java 核心技術編程》和《Java編程思想》(有兩卷,我僅鏈了第一卷,足夠了,因為Java的圖形界面了解就可以了)
學習JDK,學會查閱Java API Doc Java Platform SE 6
了解一下Java這種虛擬機語言和C和Python語言在編譯和執行上的差別。從C、Java、Python思考一下「跨平台」這種技術。
學會使用IDE Eclipse,使用Eclipse 編譯,調試和開發Java程序。
建一個Tomcat的網站,嘗試一下JSP/Servlet/JDBC/MySQL的Web開發。把前面所說的那個PHP的小項目試著用JSP和Servlet實現一下。
3、Web的安全與架構
學習HTML5,網上有很多很多教程,以前酷殼也介紹過很多,我在這里就不羅列了。
學習Web開發的安全問題(參考新浪微博被攻擊的這個事,以及Ruby的這篇文章)
學習HTTP Server的rewrite機制,Nginx的反向代理機制,fast-cgi(如:PHP-FPM)
學習Web的靜態頁面緩存技術。
學習Web的非同步工作流處理,數據Cache,數據分區,負載均衡,水平擴展的構架。
實踐任務:
使用HTML5的canvas 製作一些Web動畫。
嘗試在前面開發過的那個Web應用中進行SQL注入,JS注入,以及XSS攻擊。
把前面開發過的那個Web應用改成構造在Nginx + PHP-FPM + 靜態頁面緩存的網站
4、學習關系型資料庫
你可以安裝MSSQLServer或MySQL來學習資料庫。
學習教科書里資料庫設計的那幾個範式,1NF,2NF,3NF,……
學習資料庫的存過,觸發器,視圖,建索引,游標等。
學習SQL語句,明白表連接的各種概念(參看《SQL Join的圖示》)
學習如何優化資料庫查詢(參看《MySQL的優化》)
實踐任務:設計一個論壇的資料庫,至少滿足3NF,使用SQL語句查詢本周,本月的最新文章,評論最多的文章,最活躍用戶。
5、一些開發工具
學會使用SVN或Git來管理程序版本。
學會使用JUnit來對Java進行單元測試。
學習C語言和Java語言的coding standard 或 coding guideline。(我N年前寫過一篇關C語言非常簡單的文章——《編程修養》,這樣的東西你可以上網查一下,一大堆)。
推薦閱讀《代碼大全》《重構》《代碼整潔之道》
高級深入
1、C++ / Java 和面向對象
我個人以為學好C++,Java也就是舉手之勞。但是C++的學習曲線相當的陡。不過,我覺得C++是最需要學好的語言了。參看兩篇趣文「C++學習信心圖」 和「21天學好C++」
學習(麻省理工免費課程)C++面向對象編程
讀我的 「如何學好C++」中所推薦的那些書至少兩遍以上(如果你對C++的理解能夠深入到像我所寫的《C++虛函數表解析》或是《C++對象內存存局(上)(下)》,或是《C/C++返回內部靜態成員的陷阱》那就非常不錯了)
然後反思為什麼C++要干成這樣,Java則不是?你一定要學會對比C++和Java的不同。比如,Java中的初始化,垃圾回收,介面,異常,虛函數,等等。
實踐任務:
用C++實現一個BigInt,支持128位的整形的加減乘除的操作。
用C++封裝一個數據結構的容量,比如hash table。
用C++封裝並實現一個智能指針(一定要使用模板)。
《設計模式》必需一讀,兩遍以上,思考一下,這23個模式的應用場景。主要是兩點:1)鍾愛組合而不是繼承,2)鍾愛介面而不是實現。(也推薦《深入淺出設計模式》)
實踐任務:
使用工廠模式實現一個內存池。
使用策略模式製做一個類其可以把文本文件進行左對齊,右對齊和中對齊。
使用命令模式實現一個命令行計算器,並支持undo和redo。
使用修飾模式實現一個酒店的房間價格訂價策略——旺季,服務,VIP、旅行團、等影響價格的因素。
學習STL的用法和其設計概念 - 容器,演算法,迭代器,函數子。如果可能,請讀一下其源碼。
實踐任務:嘗試使用面向對象、STL,設計模式、和WindowsSDK圖形編程的各種技能
做一個貪吃蛇或是俄羅斯方塊的游戲。支持不同的級別和難度。
做一個文件瀏覽器,可以瀏覽目錄下的文件,並可以對不同的文件有不同的操作,文本文件可以打開編輯,執行文件則執行之,mp3或avi文件可以播放,圖片文件可以展示圖片。
學習C++的一些類庫的設計,如: MFC(看看候捷老師的《深入淺出MFC》) ,Boost, ACE, CPPUnit,STL (STL可能會太難了,但是如果你能了解其中的設計模式和設計那就太好了,如果你能深入到我寫的《STL string類的寫時拷貝技術》那就非常不錯了,ACE需要很強在的系統知識,參見後面的「加強對系統的了解」)
Java是真正的面向對象的語言,Java的設計模式多得不能再多,也是用來學習面向對象的設計模式的最佳語言了(參看Java中的設計模式)。
推薦閱讀《Effective Java》 and 《Java解惑》
學習Java的框架,Java的框架也是多,如Spring, Hibernate,Struts 等等,主要是學習Java的設計,如IoC等。
Java的技術也是爛多,重點學習J2EE架構以及JMS, RMI, 等消息傳遞和遠程調用的技術。
學習使用Java做Web Service (官方教程在這里)
實踐任務: 嘗試在Spring或Hibernate框架下構建一個有網路的Web Service的遠程調用程序,並可以在兩個Service中通過JMS傳遞消息。
C++和Java都不是能在短時間內能學好的,C++玩是的深,Java玩的是廣,我建議兩者選一個。我個人的學習經歷是:
深究C++(我深究C/C++了十來年了)
學習Java的各種設計模式。
2、加強系統了解
重要閱讀下面的幾本書:
《Unix編程藝術》了解Unix系統領域中的設計和開發哲學、思想文化體系、原則與經驗。你一定會有一種醍醐灌頂的感覺。
《Unix網路編程卷1,套接字》這是一本看完你就明白網路編程的書。重要注意TCP、UDP,以及多路復用的系統調用select/poll/epoll的差別。
《TCP/IP詳解 卷1:協議》- 這是一本看完後你就可以當網路黑客的書。了解乙太網的的運作原理,了解TCP/IP的協議,運作原理以及如何TCP的調優。
實踐任務:
理解什麼是阻塞(同步IO),非阻塞(非同步IO),多路復用(select, poll, epoll)的IO技術。
寫一個網路聊天程序,有聊天伺服器和多個聊天客戶端(服務端用UDP對部分或所有的的聊天客戶端進Multicast或Broadcast)。
寫一個簡易的HTTP伺服器。
《Unix網路編程卷2,進程間通信》信號量,管道,共享內存,消息等各種IPC…… 這些技術好像有點老掉牙了,不過還是值得了解。
實踐任務:
主要實踐各種IPC進程序通信的方法。
嘗試寫一個管道程序,父子進程通過管道交換數據。
嘗試寫一個共享內存的程序,兩個進程通過共享內存交換一個C的結構體數組。
學習《Windows核心編程》一書。把CreateProcess,Windows線程、線程調度、線程同步(Event, 信號量,互斥量)、非同步I/O,內存管理,DLL,這幾大塊搞精通。
實踐任務:使用CreateProcess啟動一個記事本或IE,並監控該程序的運行。把前面寫過的那個簡易的HTTP服務用線程池實現一下。寫一個DLL的鉤子程序監控指定窗口的關閉事件,或是記錄某個窗口的按鍵。
有了多線程、多進程通信,TCP/IP,套接字,C++和設計模式的基本,你可以研究一下ACE了。使用ACE重寫上述的聊天程序和HTTP伺服器(帶線程池)
實踐任務:通過以上的所有知識,嘗試
寫一個服務端給客戶端傳大文件,要求把100M的帶寬用到80%以上。(注意,磁碟I/O和網路I/O可能會很有問題,想一想怎麼解決,另外,請注意網路傳輸最大單元MTU)
了解BT下載的工作原理,用多進程的方式模擬BT下載的原理。
3、系統架構
負載均衡。HASH式的,純動態式的。(可以到Google學術里搜一些關於負載均衡的文章讀讀)
多層分布式系統 – 客戶端服務結點層、計算結點層、數據cache層,數據層。J2EE是經典的多層結構。
CDN系統 – 就近訪問,內容邊緣化。
P2P式系統,研究一下BT和電驢的演算法。比如:DHT演算法。
伺服器備份,雙機備份系統(Live-Standby和Live-Live系統),兩台機器如何通過心跳監測對方?集群主結點備份。
虛擬化技術,使用這個技術,可以把操作系統當應用程序一下切換或重新配置和部署。
學習Thrift,二進制的高性能的通訊中間件,支持數據(對象)序列化和多種類型的RPC服務。
學習Hadoop。Hadoop框架中最核心的設計就是:MapRece和HDFS。MapRece的思想是由Google的一篇論文所提及而被廣為流傳的,簡單的一句話解釋MapRece就是「任務的分解與結果的匯總」。HDFS是Hadoop分布式文件系統(Hadoop Distributed File System)的縮寫,為分布式計算存儲提供了底層支持。
了解NoSQL資料庫(有人說可能是一個過渡炒作的技術),不過因為超大規模以及高並發的純動態型網站日漸成為主流,而SNS類網站在數據存取過程中有著實時性等剛性需求,這使得目前NoSQL資料庫慢慢成了人們所關注的焦點,並大有成為取代關系型資料庫而成為未來主流數據存儲模式的趨勢。當前NoSQL資料庫很多,大部分都是開源的,其中比較知名的有:MemcacheDB、Redis、Tokyo Cabinet(升級版為Kyoto Cabinet)、Flare、MongoDB、CouchDB、Cassandra、Voldemort等。
Ⅱ 我是個菜鳥,求學習方法!
經驗一:
1、不妨給自己定一些時間限制。連續長時間的學習很容易使自己產生厭煩情緒,這時可以把功課分成若干個部分,把每一部分限定時間,例如一小時內完成這份練習、八點以前做完那份測試等等,這樣不僅有助於提高效率,還不會產生疲勞感。如果可能的話,逐步縮短所用的時間,不久你就會發現,以前一小時都完不成的作業,現在四十分鍾就完成了。
2、不要在學習的同時干其他事或想其他事。一心不能二用的道理誰都明白,可還是有許多同學在邊學習邊聽音樂。或許你會說聽音樂是放鬆神經的好辦法,那麼你盡可以專心的學習一小時後全身放鬆地聽一刻鍾音樂,這樣比帶著耳機做功課的效果好多了。
3、不要整個晚上都復習同一門功課。我以前也曾經常用一個晚上來看數學或物理,實踐證明,這樣做非但容易疲勞,而且效果也很差。後來我在每晚安排復習兩三門功課,情況要好多了。
除了十分重要的內容以外,課堂上不必記很詳細的筆記。如果課堂上忙於記筆記,聽課的效率一定不高,況且你也不能保證課後一定會去看筆記。課堂上所做的主要工作應當是把老師的講課消化吸收,適當做一些簡要的筆記即可。
經驗二:
學習效率這東西,我也曾和很多人談起過。我們經常看到這樣的情況:某同學學習極其用功,在學校學,回家也學,不時還熬熬夜,題做得數不勝數,但成績卻總上不去其實面對這樣的情況,我也是十分著急的,本來,有付出就應該有回報,而且,付出的多就應該回報很多,這是天經地義的事。但實際的情況卻並非如此,這里邊就存在一個效率的問題。效率指什麼呢?好比學一樣東西,有人練十次就會了,而有人則需練一百次,這其中就存在一個效率的問題。
如何提高學習效率呢?我認為最重要的一條就是勞逸結合。學習效率的提高最需要的是清醒敏捷的頭腦,所以適當的休息,娛樂不僅僅是有好處的,更是必要的,是提高各項學習效率的基礎。那麼上課時的聽課效率如何提高呢?以我的經歷來看,課前要有一定的預習,這是必要的,不過我的預習比較粗略,無非是走馬觀花地看一下課本,這樣課本上講的內容、重點大致在心裡有個譜了,聽起課來就比較有針對性。預習時,我們不必搞得太細,如果過細一是浪費時間,二是上課時未免會有些鬆懈,有時反而忽略了最有用的東西。上課時認真聽課當然是必須的,但就象我以前一個老師講的,任何人也無法集中精力一節課,就是說,連續四十多分鍾集中精神不走神,是不太可能的,所以上課期間也有一個時間分配的問題,老師講有些很熟悉的東西時,可以適當地放鬆一下。另外,記筆記有時也會妨礙課堂聽課效率,有時一節課就忙著抄筆記了,這樣做,有時會忽略一些很重要的東西,但這並不等於說可以不抄筆記,不抄筆記是不行的,人人都會遺忘,有了筆記,復習時才有基礎,有時老師講得很多,在黑板上記得也很多,但並不需要全記,書上有的東西當然不要記,要記一些書上沒有的定理定律,典型例題與典型解法,這些才是真正有價值去記的東西。否則見啥記啥,勢必影響課上聽課的效率,得不償失。
作題的效率如何提高呢?最重要的是選"好題",千萬不能見題就作,不分青紅皂白,那樣的話往往會事倍功半。題都是圍繞著知識點進行的,而且很多題是相當類似的,首先選擇想要得到強化的知識點,然後圍繞這個知識點來選擇題目,題並不需要多,類似的題只要一個就足夠,選好題後就可以認真地去做了。作題效率的提高,很大程度上還取決於作題之後的過程,對於做錯的題,應當認真思考錯誤的原因,是知識點掌握不清還是因為馬虎大意,分析過之後再做一遍以加深印象,這樣作題效率就會高得多。
經驗三:
學習效率是決定學習成績的重要因素。那麼,我們如何提高自己學習效率呢?
第一點,要自信。很多的科學研究都證明,人的潛力是很大的,但大多數人並沒有有效地開發這種潛力,這其中,人的自信力是很重要的一個方面。無論何時何地,你做任何事情,有了這種自信力,你就有了一種必勝的信念,而且能使你很快就擺脫失敗的陰影。相反,一個人如果失掉了自信,那他就會一事無成,而且很容易陷入永遠的自卑之中。
提高學習效率的另一個重要的手段是學會用心。學習的過程,應當是用腦思考的過程,無論是用眼睛看,用口讀,或者用手抄寫,都是作為輔助用腦的手段,真正的關鍵還在於用腦子去想。舉一個很淺顯的例子,比如說記單詞,如果你只是隨意的瀏覽或漫無目的地抄寫,也許要很多遍才能記住,而且不容易記牢,而如果你能充分發揮自己的想像力,運用聯想的方法去記憶,往往可以記得很快,而且不容易遺忘。現在很多書上介紹的英語單詞快速記憶的方法,也都是強調用腦筋聯想的作用。可見,如果能做7到集中精力,發揮腦的潛力,一定可以大大提高學習的效果。
另一個影響到學習效率的重要因素是人的情緒。我想,每個人都曾經有過這樣的體會,如果某一天,自己的精神飽滿而且情緒高漲,那樣在學習一樣東西時就會感到很輕松,學的也很快,其實這正是我們的學習效率高的時候。因此,保持自我情緒的良好是十分重要的。我們在日常生活中,應當有較為開朗的心境,不要過多地去想那些不順心的事,而且我們要以一種熱情向上的樂觀生活態度去對待周圍的人和事,因為這樣無論對別人還是對自己都是很有好處的。這樣,我們就能在自己的周圍營造一個十分輕松的氛圍,學習起來也就感到格外的有精神。
經驗四:
很多學生看上去很用功,可成績總是不理想。原因之一是,學習效率太低。同樣的時間內,只能掌握別人學到知識的一半,這樣怎麼能學好?學習要講究效率,提高效率,途徑大致有以下幾點:
一、每天保證8小時睡眠。
晚上不要熬夜,定時就寢。中午堅持午睡。充足的睡眠、飽滿的精神是提高效率的基本要求。
二、學習時要全神貫注。
玩的時候痛快玩,學的時候認真學。一天到晚伏案苦讀,不是良策。學習到一定程度就得休息、補充能量。學習之餘,一定要注意休息。但學習時,一定要全身心地投入,手腦並用。我學習的時侯常有陶淵明的"雖處鬧市,而無車馬喧囂"的境界,只有我的手和腦與課本交流。
三、堅持體育鍛煉。
身體是"學習"的本錢。沒有一個好的身體,再大的能耐也無法發揮。因而,再繁忙的學習,也不可忽視放鬆鍛煉。有的同學為了學習而忽視鍛煉,身體越來越弱,學習越來越感到力不從心。這樣怎麼能提高學習效率呢?
四、學習要主動。
只有積極主動地學習,才能感受到其中的樂趣,才能對學習越發有興趣。有了興趣,效率就會在不知不覺中得到提高。有的同學基礎不好,學習過程中老是有不懂的問題,又羞於向人請教,結果是鬱郁寡歡,心不在焉,從何談起提高學習效率。這時,唯一的方法是,向人請教,不懂的地方一定要弄懂,一點一滴地積累,才能進步。如此,才能逐步地提高效率。
五、保持愉快的心情,和同學融洽相處。
每天有個好心情,做事干凈利落,學習積極投入,效率自然高。另一方面,把個人和集體結合起來,和同學保持互助關系,團結進取,也能提高學習效率。
六、注意整理。
學習過程中,把各科課本、作業和資料有規律地放在一起。待用時,一看便知在哪。而有的學生查閱某本書時,東找西翻,不見蹤影。時間就在忙碌而焦急的尋找中逝去。我認為,沒有條理的學生不會學得很好。
評:學習效率的提高,很大程度上決定於學習之外的其他因素,這是因為人的體質、心境、狀態等諸多因素與學習效率密切相關。
總結
學習必須講究方法,而改進學習方法的本質目的,就是為了提高學習效率。
可以這樣認為,學習效率很高的人,必定是學習成績好的學生。因此,對大部分學生而言,提高學習效率就是提高學習成績的直接途徑。
提高學習效率並非一朝一夕之事,需要長期的探索和積累。前人的經驗是可以借鑒的,但必須充分結合自己的特點。影響學習效率的因素,有學習之內的,但更多的因素在學習之外。首先要養成良好的學習習慣,合理利用時間,另外還要注意"專心、用心、恆心"等基本素質的培養,對於自身的優勢、缺陷等更要有深刻的認識。總之,"世上無難事,只怕有心人。"
漫談學習方法
下面主要談五個方面的學習方法。
(一)抓好預習環節
預習,即課前的自學。指在教師講課之前,自己先獨立地閱讀新課內容。初步理解內容,是上課做好接受新知識的准備過程。有些學生由於沒有預習習慣,對老師一堂課要講的內容一無所知,坐等教師講課。老師講什麼就聽什麼,老師叫干什麼就干什麼,顯得呆板被動,缺乏學習的積極性和主動性。有些學生雖能預習,但看起書來似走馬觀花,不動腦、不分析。這種預習一點也達不到效果。
1.預習的好處
(1)能發現自己知識上的薄弱環節,在上課前補上這部分的知識,不使它成為聽課時的「拌腳石」。這樣,就會順利理解新知識。
(2)有利於聽課時跟著老師講課的思路走。對聽課內容選擇性強。明確哪些知識應該放上主要精力,加強理解和消化;哪裡應該重點記筆記,做到心中有數。
(3)預習有利於弄清重點、難點所在,便於帶著問題聽課與質疑。注意力集中到難點上。這樣,疑惑易解,聽起來輕松、有味,思起來順利主動,學習效果高。
(4)預習可以提高記筆記水平。由於課前預習過,講的內容和板書,心中非常清楚。上課時可以不記或少記書上有的,著重記書上沒有的或自己不太清楚的部分,以及老師反復提醒的關鍵問題。從而可以把更多的時間用在思考理解問題上。
2.預習要注意的幾個問題
(1)預習時要讀、思、問、記同步進行。對課本內容能看懂多少就算多少,不必求全理解,疑難也不必鑽深,只需順手用筆作出不同符號的標記。把沒有讀懂的問題記下來,作為聽課的重點。但對牽涉到已學過的知識以及估計老師講不到的小問題,自己一定要搞懂,以消滅「攔路虎。」
(2)若以前沒有預習的習慣,現在想改變方法,先預習後上課,但不能一下子全面鋪開,每門功課都搞提前預習。這樣做會感到時間不夠用。顯得非常緊張,不能達到預習效果。因此,剛開始預習時,要先選一兩門自己學起來感到吃力的學科進行預習試點,等到嘗到甜頭,取得經驗後,並在時間允許的條件下,再逐漸增加學科,直到全面鋪開。
(3)預習應在當天作業做完之後再進行。時間多,就多預習幾門,鑽得深一點;反之,就少預習幾門,鑽得淺一點。切不可以每天學習任務還未完成就忙著預習,打亂了正常的學習秩序。
(4)學習差的學生,課前不預習,上課聽不懂,課後還需花大量的時間去補缺和做作業,整天忙得暈頭轉向,擠不出一點時間去預習。其實,這種學生差的根本原因就在不預習上。學習由預習、上課、整理復習、作業四個環節組成。缺了預習這個環節就會影響下面環節的順利運轉。這些學生必須作好在短期內要多吃點苦的思想准備。在完成每天的學習任務後,要安排一點時間預習。這樣做雖然費了時間,但上課能聽得懂,減少了因上課聽不懂而浪費的時間,同時,還可以減少花在課後整理、消化、作業上的時間。時間一長,運轉正常了,學習的被動局面也就會改變,就再也不需加班加點了。
3.預習的要求
(1)要注重講究實效,不搞形式。要根據學習計劃安排時間,不能顧此失彼。預習一般要安排在新課的前一天晚上進行。這樣,印象會較深。新課難度大,就多預習一些時間,難度小就少預習一些時間。應重點選擇那些自己學起來吃力,又輪到講授新課的科目進行預習,其他科目只需一般性的預習。某些學科,也可以利用星期天,集中預習下一周要講授的課程,以減輕每天預習的負擔。
(2)預習的任務是通過初步閱讀,先理解感知新課的內容(如概念、定義、公式、論證方法等),為順利聽懂新課掃除障礙。具體任務是:①復習、鞏固和補習有關已學的舊知識,找出新課中自己不理解的問題,並把理解不透的記下來。②初步弄清新課中的基本內容是什麼?這些知識內容在原有的基礎上向前發展了什麼?並找出書中的重點、難點和自己費解的地方。③預習時要看、思、做結合進行。看:一般是把新課通讀一遍,然後用筆勾劃出書上的重要內容。需要查的就去查一查;需要想的就應該認真想一想;需要記的就應該記下來。思:指有的時候要想,做到低頭看書,抬頭思考,手在寫題,腦在思考。做:在看的過程中,需要動手做的准備工作以及對課本後的練習題要進行嘗試性的做一做。問答題答一答。不會做,不會答可以再預習,也可以記下來。等教師在授課時集中注意聽講或向老師提出。預習以後,還要合上書本,小結一下。這樣做能使自己對新教材有更深刻的印象。
(二)注重聽課環節
學生的大部分時間是在課堂中度過的。因此,聽課是學生接受教師指導,掌握知識,發展智力的中心環節。是獲取知識的重要途徑。是保證高效率學習的關鍵。聽課時,有的學生全神貫注,專心聽講;有的分心走神,萎靡不振,打瞌睡。有的像錄音機,全聽全錄;有的邊聽邊記,基本上能把教師講的內容都記下來;有的以聽為主,邊聽邊思考,有了問題記下來;有的乾脆不記,只顧聽講;有的邊聽邊劃邊思考。思考時,有的思考當堂內容,有的思考與本課相關的知識體系,有的思考教師的思路,有的拿自己的思路與教師的思路比較。
那麼,怎樣才能達到聽好課的目的呢?總的要求是要抓住各學科的不同特點,帶著問題聽,聽清內容,記住要點,抓住關鍵,著重聽老師的講課方法與思路,釋疑的過程與結論。具體要求:
1.要充分認識老師在上課時的重要作用。因為教師在課堂教學中起著主導的作用。他在課堂中的分析講解遠比課後輔導要詳細得多,這也是學生自已看書無法比較的。課堂教學是老師指導學生掌握知識的一條最簡捷的路。因此,每個學生都應該虛心向老師學習。在老師的啟發誘導下上好每一節課。
2.要集中注意力,全神貫注地聽老師講解,跟著老師的講課思路走,千萬不能思想開小差。如果在老師啟發下,自己有了比較好的想法,可以在筆記本上記下來,等下課後再去深入思考或請教老師和同學。總之,課堂上的「分心」,是學習的大敵。
3.聽課中可以嘗試在老師沒有作出判斷、結論之前,自己試作判斷、試下結論。看看自己想的與老師講的是否一致。找出對與不對的原因。
4.要力求當堂理解。理解是掌握事物本質、內部聯系及規律的思考過程。那麼,怎樣才能做到當堂理解呢?在課堂上,你想的應與老師講的統一,你思考的問題應與老師講的問題統一。在教師的啟發下,你要始終開動腦筋,積極思考。如果在思考中出現不理解或理解不透的地方,應舉手提出問題。如果課堂上老師沒有時間解答你的問題,應繼續聽老師的講解。課後再去請教老師。
5.要跟著老師的思路跑。聽課是為了增長知識和發展智力。因此,不能把知識聽懂了就算課聽好了等同起來。高水平的聽課應該不僅注意老師傳授的具體知識,更應該注意老師講課的思路。追著老師的思路跑,目的在於把老師講課過程中運用的各種思維方式,思維過程搞清楚。學習老師是如何進行周密科學思考的,從而提高自己的思維能力和智力水平。有的學生不注意老師的講課思路,而偏重於記憶老師的推導,總結出來的公式或結論,認為這是聽課的主要目的。其實,這樣掌握的知識,是知其然而不知其所以然的死知識。這種死知識忘得快,又不能用於解決實際問題,更談不上發展智力。
6.要抓住一節課的知識內容和學科特點的關鍵。知識內容的關鍵一般指基本概念、基本原理、基本關系式以及公式、定義。當老師講解這些關鍵知識時,你一定要特別注意,抓住不放。同樣,不抓住學科特點的關鍵學習,也會影響你的學習效果。實際上,各門學科的內容體系、發展思路、訓練要求以及教的方法各有特點。學習中非抓住這些特點不可。如物理、化學、生物課要特別注意觀察和實驗,在獲得感性知識的基礎上,通過思考來掌握科學概念和規律。數學要通過大量演算,證明等練習獲得數學知識,培養出數學思維能力。語文和外語在聽課時,主要抓住字、詞、句、篇等方面的知識點,並且通過聽、說、讀、寫來提高閱讀和寫作能力。以便更好地理解和掌握語言和文字。
(三)緊抓復習環節
復習是對前面已學過的知識進行系統再加工,並根據學習情況對學習進行適當調整,為下一階段的學習做好准備。因此,每上完一節課,每學完一篇課文,一個單元,一冊書都要及時復習。若復習適時恰當,知識遺忘就少。早在1885年,德國的心理學家艾濱浩斯,通過實驗發現剛記住的材料,一小時後只能保持44%;一天後能記住33%;兩天後留下的只有28%;六天後為25%。所有的人,學習的知識都會發生先快後慢的遺忘過程。一些記性好的學生是因為能經常從不同的角度、不同的層次上進行復習,做到「每天有復習,每周有小結,每章有總結」,從而形成了驚人的記憶力。因此,很多學生對所學知識記不住,並不是腦子笨,而是不善於復習,或復習功夫不深。
1.復習的要求
(1)課後應及時把老師講的和板書的知識像放電影一樣,在腦子里過一遍。看看能想起多少,忘了多少。然後翻開筆記,查找漏缺。
(2)看教材時,應邊看邊思,深思重點、難點。分析疑點、深化理解。
(3)看閱必要的參考書,充實課堂所學的內容。
(4)整理與充實筆記,對知識進行歸類,使知識深化、簡化、條理化,並按規律去加強記憶。
(5)加強練習。練習一般應在復習後進行,也可邊復習邊練習。在復習過程中,加強練習,能提高復習效果。
(1)及時復習。當天學的知識,要當天復習清,決不能拖拉。做到不欠「帳」。否則,內容生疏了,知識結構散了就要花費加倍時間重新學習。要明白「修復總比重建倒塌了的房子省事得多」。
(2)要緊緊圍繞概念、公式、法則、定理、定律復習。思考它們是怎麼形成與推導出來的?能應用到哪些方面?它們需要什麼條件?有無其他說法或證明方法?它與哪些知識有聯系?通過追根溯源、牢固掌握知識。
(3)要反復復習。學完一課復習一次,學完一章(或一個單元),復習一次。學習一階段系統總結一遍。期末再重點復習一次。通過這種步步為營的復習,形成的知識聯系就不會消退。
(4)復習要有自己的思路。通過一課、一節、一章的復習,把自己的想法,思路寫成小結、列出圖表、或者用提綱摘要的方法,把前後知識貫穿起來,形成一個完整的知識網。
(5)復習中遇到問題,不要急於看書或問人,要先想後看(問)。這對於集中注意力、強化記憶、提高學習效率很有好處。每次復習時,要先把上次的內容回憶一下。這樣做不僅保持了學習的連貫性,而且對記憶有很好的效果。
(6)復習中要適當看點題、做點題。選的題要圍繞復習的中心來選。在解題前,要先回憶一下過去做過的有關習題的解題思路,在這基礎上再做題。做題的目的是檢查自己的復習效果,加深對知識的理解,培養解決問題的能力。做綜合題能加深知識的完整化和系統化的理解,培養綜合運用知識的能力。
(四)獨立完成作業環節
獨立完成作業是深化知識,鞏固知識,檢查學習效果的重要手段,也是復習與應用相結合的主要形式。然而,有些學生沒有真正利用好這個環節。他們一下課就搶著做作業,作業一完,萬事大吉。更有些學生課上根本沒聽懂,下課後也不問,作業抄襲後向老師交差完事。其實,做好作業有以下意義:
1.可以檢查自己的學習效果。通過做作業可以發現問題,以便及時補救。
2.通過做作業時的思考,可以加深對知識的理解,把易混淆的概念搞清楚,把公式的變換搞熟練。總之,有利於把書本上的知識轉化成自己的知識。
3.可以培養思維能力。因為作業中提出的各種問題,必然會促使自己積極思考,增強分析問題和解決問題的能力。
4.做完作業後,不能把它一扔了事,而應當定期進行分類整理,為總復習積累資料。復習時,翻閱一下記錄的作業,既方便省事,又印象深刻。
做作業的基本要求和方法:
1.審題。審題是做作業十分重要的一步。拿到一個題目,首先應判斷它屬於哪一類,難易的程度如何?分清題目的條件和要求。已知條件是什麼?從題目提供的信息中還能挖掘出什麼條件?它的要求是什麼?同時要讓自己的思路順著題目的路子思考。通過思考、准確、透徹地理解題目的意思,分清已知條件有哪些,題目要求的結論是什麼。在審題過程中,還要注意哪些地方沒有直接用語言表示出來,而隱含在題目中的其他形式條件,即注意隱含條件的挖掘。
2.尋找解題途徑。方法一般有三種:一種是「由因導果」,可以表述為:「已知→可知→可知……」,最後到達結論。第二種是「執果索因」,即結論←需知←需知←……」。這樣一層一層的追下去,直到追到已知條件全部有了為止。這樣。已知條件和要求結論之間的道路就打通了。第三種是對於一些比較復雜的題目,就需要我們用前兩種的綜合辦法,以盡量縮短條件與結論的距離。即一方面從已知條件推出一些可知的中間結果,另一方面根據題目的要求分析出一些需知的中間結果。需知與已知一旦統一,則可得到解題的途徑。
在尋找解題途徑中,要廣泛聯想與這些條件和結論有關的概念、公式、法則和方法等。聯想過去是否解過和與此相同或相近的題目。那時是怎樣解的?如果能聯想起有關的舊知識,即與此題相應的規律原理、原則、公式就會浮現在腦海中,使解題的思路更加開闊。聯想越廣,跨度越大,得到的解題效果也越佳。
有時因為題目較復雜,為了思考方便,也可以把審題的過程畫成簡圖。這實際上是一個運用學過的知識,把題目加工、改造的過程。經過加工,思路明了,解題捷徑就會出現在眼前。
3.正確解題,經過①②兩個步驟,已經尋得解題的途徑,判定了解題的方案。但在實施時還要注意解題的保質保量。要做到這點,解題的步驟必須按部就班,一步步演算。書寫規范化,格式明了,表達准確。要做到這點,必須要有扎實的基礎。除此以外,在解題中,重要的知識點應寫出來,繁題要簡寫,簡題要詳寫。
4.注意檢查。就是回過頭來再檢查一遍,看看是否題目要求的解都求出來了,有沒有漏解。是否求出的解均符合題目的要求,有沒有錯解。檢查是培養學生獨立思考能力的重要一環。檢查的方法很多。①步步檢查法。即從審題開始,一步步檢查。這種方法可以檢查出計算、表達上的錯誤。②重做法。即重做一遍,看結果是否一樣。③代入法。將計算結果代入公式或式子看看是否合理。同時,還要注意鍛煉一題多解、一題多想。比較歸類的解題習慣,不斷提高自己分析問題和解決問題的能力。
(五)認真記好課堂筆記
記筆記是為了學,為了懂,為了用。記筆記的原則是以聽為主,以記為輔。簡練明白,提綱挈領,詳略得當。難點不放過,疑點有標記。不亂,不混,條理明。對聯想、發現的問題,要及時記。筆記要留有空白處,便於復習時補缺。
Ⅲ C語言程序設計實驗報告怎麼寫啊
通過本試驗初步培養計算機邏輯解題能力。熟練掌握賦值語句和if語句的應用;掌握switch多路分支語句和if嵌套語句的使用
Ⅳ 如何安裝ros系統
ROS作為一款開源機器人操作系統,在各種工業機器人、自動駕駛導航中非常流行,是學習自動駕駛、機器人的方向的人必須接觸的系統軟體,這里以目前寫這篇文件時最新(2018年5月)的ROS Melodic Morenia的系統安裝為例,寫一篇經驗。
工具/原料
ROS Melodic Morenia Ubuntu Bionic amd64 版
方法/步驟
1/9 分步閱讀
首先要安裝一個基礎的linux系統,在ROS Melodic Morenia看一下受支持的linux發行版本,主要只有Ubuntu Bionic(18系列),Ubuntu Artful(17系列),和Debian Stretch(9系列),故這里以Ubuntu 18.04 LTS系統為例進行安裝。
2/9
首先要添加網路庫,這里選擇使用國內的鏡像源,中科大的鏡像源安裝速度快一些,如果使用國外的源,電信的寬頻幾乎就安裝不了。
執行sudo sh -c '. /etc/lsb-release && echo "deb <軟體源> $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list',如下圖指令,加入中科大源到sourcelist。
ROS機器人開發入門_免費視頻課程_訊飛AI大學
廣告
3/9
添加認證密鑰,國內從ubuntu的官方keyserver添加密鑰較快。
使用如下圖命令添加認證公鑰到軟體源中。
【全新】「夢幻西遊網頁版」開局滿神裝,人人有神寵
廣告
4/9
更新軟體源緩存數據,sudo apt-get update
合肥 全屋整裝系統_實力品牌集成牆板廠家大保障!
廣告
5/9
新手安裝的直接全環境安裝即可,使用指令
sudo apt-get install ros-melodic-desktop-full
如下圖,國內的源下載速度非常快,大概十幾分鍾就可以安裝完成。
查看剩餘1張圖
6/9
安裝完成後,接下來要做一些初始化設置才能開始使用。依次輸入
sudo rosdep init
rosdep update
如下圖所示。
查看剩餘1張圖
7/9
為了使用方便,你可以將配置好一打開你的bash就自動導入所有Ros環境變數,這樣你可以方便以後的使用。
8/9
最後你需要安裝一些開發使用的編譯工具,最後你就可以愉快使用ROS了。
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
安裝編譯工具如下圖。
9/9
最後使用roscore命令測試一下安裝效果。
編輯
Ⅳ c語言從零開始 怎麼學 要求是什麼
看書。選對學習書籍,對於學習C語言能夠起到事半功倍的作用。在看書的時候,沒看完一段知識點,最好上機進行實驗訓練,把章節後面的練習自己動手操作一
下,章節中的代碼示例也可以自己動手敲一下,進行編譯。這樣不僅可以鍛煉自己敲代碼的能力,還有助於進一步理解理論知識點。
敲代碼。學習的時候,如果光看書上的理論知識,而不自己動手進行實踐,理解不深刻,是很容易遺忘的,也許下次遇到類似的項目或者代碼,還是不會,這樣的學習就是無用功。代碼敲的多了,出現的bug也會多,這樣在調試bug,修改漏洞的時候也能學到很多,可以積累很多經驗。
向他人學習。學習C語言不是孤立的,自己一個人學習的過程中常常會遇到很多問題,這時大家需要多向別人請教。通過與他們交流可以真正學到企業需要的技能。多看他們怎樣思考,如何寫代碼,有哪些工具和快捷方式,出現問題怎樣調試追蹤,這些在書本上很少見,卻都是項目實踐中非常有用的東西。
分享自己的知識。對於自己所知道的東西,要不吝於與別人交流溝通,可以在一些論壇或貼吧分享自己的知識,如果發現自己哪方面能力不夠,多通過這些方式進行交流,也可以急躁發現自己的問題,實現自我提升。