照抄课程编译不通过怎么办
Ⅰ 要成为一名专业的程序员,从零开始需要怎么一步步来比较好,要把最底层的先学精通吗(个人认为)求学长
前言
你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发)
建议:
不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少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语言不是孤立的,自己一个人学习的过程中常常会遇到很多问题,这时大家需要多向别人请教。通过与他们交流可以真正学到企业需要的技能。多看他们怎样思考,如何写代码,有哪些工具和快捷方式,出现问题怎样调试追踪,这些在书本上很少见,却都是项目实践中非常有用的东西。
分享自己的知识。对于自己所知道的东西,要不吝于与别人交流沟通,可以在一些论坛或贴吧分享自己的知识,如果发现自己哪方面能力不够,多通过这些方式进行交流,也可以急躁发现自己的问题,实现自我提升。