从零开始编译原理
1. 如何从零开始学编程
在你学习编程之前思考一下你的目标,当你有最终目标时道路会更加的清晰。那么,你想要写什么?网站?游戏?iOS或者Android应用?或是你是想自动化完成一些乏味的任务让你有更多的时间看窗外的风景?也许你只是想更具有就业竞争力找个好工作。所有的这些都是有价值的目标,这些目标都是你编程学习推动力的一部分,没有推动力的人,是无法在略显枯燥的漫长学习之旅中走远的。
不要浮躁
Badprogrammingiseasy.EvenDummiescanlearnitin21days.,meswithit.
不管是在线下还是线上的书店,满目都是《21天学通java》这种速成书目,它们都承诺在很短一段时间内就让你能够学会相关技术。MatthiasFelleisen在他的着作HowtoDesignPrograms,SecondEdition一书中明确指出了这种“速成”的趋势并予以了以上的讽刺。
所谓的“捷径”或者说“银弹”是不存在的,智者说过,精通某个东西需要10年或10000个小时,也就是汉语中的“十年磨一剑”,所以不用着急,功不唐捐。
培养兴趣
ionbythepublic,butbecauseitisfuntoprogram.
_LinusTorvalds
沉醉于编程,编程更是为了兴趣。兴趣是推动力的不竭源泉,保持这种充满兴趣的感觉,以便于你能将其投入到你的10年/10000小时的编程时间中。编程很有趣,那是探索的喜悦。那是创造的喜悦。看到自己亲手完成的作品显示在屏幕上很有趣。有人为你的代码而惊叹很有趣。有人在公共场合称赞你的产品、邻居使用你的产品、以及在媒体上讨论你的产品很有趣。编程应该十分有趣,若并非如此,就找出导致编程无趣的问题,然后解决之。
在这里对于初学者有两个大坑:
如果初学者们只与预先构建好的“发动机和组件”接触(没有理解和思考它们构造的原理),这会严重限制他们在将来构建这些东西的能力,并且在诊断解决问题时无从下手。
第二个坑没有第一个那么明显:幼稚的“整体论”方法有些时候会显得很有效,这有一定的隐蔽性与误导性,但是一两年过后(也许没那么长),当你在学习路上走远时,再想回过头来“补足基础”会有巨大的心理障碍,你得抛弃之前自己狭隘的观念,耐心地缓步前进,这比你初学时学习基础知识困难得多。
但腊敏茄也不能矫枉过正,陷入还原论的大坑,初学时便一心试图做宏大的理论,这样不仅有一切流于理论的危险,枯燥和乏味还会让你失去推动力。这种情况经常发生在计算机科班生身上。
为了更好理解,可以将学习编程类比为学习厨艺:你为了烧得一手好菜买了一些关于菜谱的书,如果你只是想为家人做菜,这会是一个不错的主意,你重复菜谱上的步骤也能做出不赖的菜肴,但是如果你有更大的野心,真的想在朋友面前露一手,做一些独一无二的美味佳肴,甚至成为“大厨”,你必须理解这些菜谱背后大师的想法,理解其中的理论,而不仅仅是一味地实践。但拿猛是如果你每天唯一的工作就是阅读那些厚重的理论书籍,因为缺乏实践,你只会成为一个糟糕的厨子,甚至永远成为不了厨子,因为看了几天书后你就因为枯燥放弃了厨艺的学习。
总之,编程是连接理论与实践的纽带,是计算机科学与计算机应用技术相交融的领域。正确的编程学习方法应该是:通过自顶而下的探索与项目实践,获得编程直觉与推动力;从自底向上的打基础过程中,获得最重要的通用方法并巩固编程思想的理解。
作为初学者,应以后者为主,前者为轮察辅。
启蒙
“学编程应该学哪门语言?”这经常是初学者问的第一个问题,但这是一个错误的问题,你最先考虑的问题应该是“哪些东西构成了编程学习的基础”?
编程知识的金字塔底部有三个关键的部分:
算法思想:例如怎样找出一组数中最大的那个数?首先你得有一个maxSoFar变量,之后对于每个数
语法:我怎样用某种编程语言表达这些算法,让计算机能够理解。
系统基础:为什么while(1)时线程永远无法结束?为什么int*foo(){intx=0;return&x;}是不可行的?
启蒙阶段的初学者若选择c语言作为第一门语言会很困难并且枯燥,这是因为他们被迫要同时学习这三个部分,在能做出东西前要花费很多时间。
因此,为了尽量最小化“语法”与“系统基础”这两部分,建议使用python作为学习的第一门语言,虽然Python对初学者很友好,但这并不意味着它只是一个“玩具”,在大型项目中你也能见到它强大而灵活的身影。熟悉Python后,学习C语言是便是一个不错的选择了:学习C语言会帮助你以靠近底层的视角思考问题,并且在后期帮助你理解操作系统层级的一些原理,如果你只想成为一个普通(平庸)的开发者你可以不学习它。
下面给出了一个可供参考的启蒙阶段导引,完成后你会在头脑中构建起一个整体框架,帮助你进行自顶向下的探索。
完成Codecademy的Python部分。这只是热身部分,尽快完成它,因为你永远只是在浏览器里,你不会学到如何搭建开发环境。在Codecademy这类的编程学习网站学到的那点儿东西,哪怕你只想做一个小的不能再小的项目,你都不知道该从哪儿开始。
完成MIT6.00.1x(中文化)(如果你英语不过关,完成麻省理工学院公开课:计算机科学及编程导论。MOOC是学习编程的一个有效途径。虽然该课程的教学语言为Python,但作为一门优秀的导论课,它强调学习计算机科学领域里的重要概念和范式,而不仅仅是教你特定的语言。如果你不是科班生,这能让你在自学时开阔眼界;课程内容:计算概念,python编程语言,一些简单的数据结构与算法,测试与调试。支线任务:
完成Python核心编程
完成HarvardCS50(如果你英语不过关:完成哈佛大学公开课:计算机科学cs50。同样是导论课,但这门课与MIT的导论课互补。教学语言涉及C,php,JavaScript+sql,HTML+CSS,内容的广度与深度十分合理,还能够了解到最新的一些科技成果,可以很好激发学习计算机的兴趣。支线任务:
阅读《编码的奥秘》
完成《C语言编程》
[可选]如果你的目标是成为一名Hacker:阅读Hacker'sDelight
PS:如果教育对象还是一个孩子,以下的资源会很有帮助:
5-8岁:TurtleAcademy
8-12岁:PythonforKids
12岁以上:MITScratch或KhanAcademy
入门
结束启蒙阶段后,初学者积累了一定的代码量,对编程也有了一定的了解。这时你可能想去学一门具体的技术,诸如Web开发,Android开发,iOS开发什么的,你可以去尝试做一些尽可能简单的东西,给自己一些正反馈,补充自己的推动力。但记住别深入,这些技术有无数的细节,将来会有时间去学习;同样的,这时候也别过于深入特定的框架和语言,现在是学习计算机科学通用基础知识的时候,不要试图去抄近路直接学你现在想学的东西,这是注定会失败的。
那么入门阶段具体该做些什么呢?这时候你需要做的是反思自己曾经写过的程序,去思考程序为什么(Why)要这样设计?,思考怎样(How)写出更好的程序?试图去探寻理解编程的本质:利用计算机解决问题。
设想:
X=用于思考解决方案的时间,即“解决问题”部分
Y=用于实现代码的时间,即“利用计算机”部分”
编程能力=F(X,Y)(X>Y)
要想提高编程能力,就得优化X,Y与函数F(X,Y),很少有书的内容能同时着重集中在这三点上,但有一本书做到了——(SICP)《计算机程序的构造和解释》,它为你指明了这三个变量的方向。在阅读SICP之前,你也许能通过调用几个函数解决一个简单问题。但阅读完SICP之后,你会学会如何将问题抽象并且分解,从而处理更复杂更庞大的问题,这是编程能力巨大的飞跃,这会在本质上改变你思考问题以及用代码解决问题的方式。此外,SICP的教学语言为Scheme,可以让你初步了解函数式编程。更重要的是,他的语法十分简单,你可以很快学会它,从而把更多的时间用于学习书中的编程思想以及复杂问题的解决之道上。
PeterNorvig曾经写过一篇非常精彩的SICP书评,其中有这样一段:
Touseananalogy,ifSICPwereaboutautomobiles,,howtheyarebuilt,andhowonemightdesignfuel-efficient,safe,.highway,justlikeeveryoneelse.
如果你是文中的前者,阅读SICP将成为你衔接启蒙与入门阶段的关键点
虽然SICP是一本“入门书”,但对于初学者还是有一定的难度,以下是一些十分有用的辅助资源:
):由上文提到的Google研究主管PeterNorvig主讲,教学语言为Python,内容有一定难度。
HowtoDesignPrograms,SecondEdition:HtDP的起点比SICP低,书中的内容循循善诱,对初学者很友好,如果觉得完成SICP过于困难,可以考虑先读一读HtDP。
UCBerkeleySICP授课视频以及SICP的两位作者给Hewlett-Packard公司员工培训时的录像(中文化项目)
ComposingPrograms:一个继承了SICP思想但使用Python作为教学语言的编程导论(其中包含了一些小项目)
SICP解题集:对于书后的习题,作为初学者应尽力并量力完成。
完成了这部分学习后,你会逐步建立起一个自己的程序设计模型,你的脑子里不再是一团乱麻,你会意识到记住库和语法并不会教你如何解决编程问题,接下来要学些什么,在你心里也会明朗了很多。这时候才是真正开始进行项目实践,补充推动力的好时机。
关于项目实践:对于入门阶段的初学者,参与开源项目还为时过早,这时候应该开始一些简单的项目,诸如搭建一个网站并维护它,或是编写一个小游戏再不断进行扩展,如果你自己的想法不明确,MegaProjectList中选取项目。总之,务必在这时拿下你项目实践的第一滴血。
与此同时,别忘了继续打好根基。为了将来的厚积薄发,在下面这几个方面你还要继续做足功课(注意:下面的内容没有绝对意义上的先后顺序):
计算机系统基础
有了之前程序设计的基础后,想更加深入地把握计算机科学的脉络,不妨看看这本书:《深入理解计算机系统》ComputerSystemsAProgrammer'sPerspective。这里点名批评这本书的中译名,其实根本谈不上什么深入啦,这本书只是CMU的“计算机系统导论”的教材而已。CMU的计算机科学专业相对较偏软件,该书就是从一个程序员的视角观察计算机系统,以“程序在计算机中如何执行”为主线,全面阐述计算机系统内部实现的诸多细节。
如果你看书觉得有些枯燥的话,可以跟一门Coursera上的MOOC:TheHardware/SoftwareInterface,这门课的内容是CSAPP的一个子集,但是最经典的实验部分都移植过来了。同时,可以看看TheCProgrammingLanguage,回顾一下C语言的知识。
完成这本书后,你会具备坚实的系统基础,也具有了学习操作系统,编译器,计算机网络等内容的先决条件。当学习更高级的系统内容时,翻阅一下此书的相应章节,同时编程实现其中的例子,一定会对书本上的理论具有更加感性的认识,真正做到经手的代码,从上层设计到底层实现都了然于胸,并能在脑中回放数据在网络->内存->缓存->CPU的流向。
此外,也是时候去接触UNIX哲学了:KISS-KeepitSimple,Stupid.在实践中,这意味着你要开始熟悉命令行界面,配置文件。并且在开发中逐渐脱离之前使用的IDE,学会使用Vim或Emacs(或者最好两者都去尝试)。
阅读《UNIX编程环境》
阅读《UNIX编程艺术》
折腾你的UN*X系统
数据结构与算法基础
如今,很多人认为编程(特别是做web开发)的主要部分就是使用别人的代码,能够用清晰简明的方式表达自己的想法比掌握硬核的数学与算法技巧重要的多,数据结构排序函数二分搜索这不都内置了吗?工作中永远用不到,学算法有啥用啊?这种扛着实用主义大旗的“码农”思想当然不可取。没有扎实的理论背景,遭遇瓶颈是迟早的事。
数据结构和算法是配套的,入门阶段你应该掌握的主要内容应该是:这个问题用什么算法和数据结构能更快解决。这就要求你对常见的数据结构和算法了熟于心,你不一定要敲代码,用纸手写流程是更快的方式。对你不懂的数据结构和算法,你要去搜它主要拿来干嘛的,使用场景是什么。
供你参考的学习资源:
《算法导论》:有人说别把这本书当入门书,这本书本来就不是入门书嘛,虽说书名是IntroctiontoAlgorithms,这只不过是因为作者不想把这本书与其他书搞重名罢了。当然,也不是没办法拿此书入门,读第一遍的时候跳过习题和证明就行了嘛,如果还觉得心虚先看看这本《数据结构与算法分析》
CourseraAlgorithms:DesignandAnalysis[Part1]&[Part2]:Stanford开的算法课,不限定语言,两个部分跟下来算法基础基本就有了;英语没过关的:麻省理工学院公开课:算法导论
入门阶段还要注意培养使用常规算法解决小规模问题的能力,结合前文的SICP部分可以读读这几本书:《编程珠玑》,《程序设计实践》
编程语言基础
.,.Additionally,,
-ThePragmaticProgrammer
此外还要知道,学习第n门编程语言的难度是第(n-1)门的一半,所以尽量去尝试不同的编程语言与编程范式,若你跟寻了前文的指引,你已经接触了:“干净”的脚本语言Python,传统的命令式语言C,以及浪漫的函数式语言Scheme/Racket三个好朋友。但仅仅是接触远远不够,你还需要不断继续加深与他们的友谊,并尝试结交新朋友,美而雅的Ruby小姑娘,Hindley-Milner语言家族的掌中宝Haskell都是不错的选择。但有这么一位你躲不开的,必须得认识的大伙伴—C++,你得做好与他深交的准备:
入门:C++Primer
[可选]进阶:
高效使用:EffectiveC++
深入了解:《深度探索C++对象模型》;C++Templates
研究反思:TheDesignandEvolutionofC++;对于C++这个NecessaryEvil,看这本书可以让你选择是成为守夜人还是守日人。
现实是残酷的,在软件工程领域仍旧充斥着一些狂热者,他们只掌握着一种编程语言,也只想掌握一种语言,他们认为自己掌握的这门语言是最好的,其他异端都是傻X。这种人也不是无药可救,有一种很简单的治疗方法:让他们写一个编译器。要想真正理解编程语言,你必须亲自实现一个。现在是入门阶段,不要求你去上一门编译器课程,但要求你能至少实现一个简单的解释器。
供你参考的学习资源:
《程序设计语言-实践之路》:CMU编程语言原理的教材,程序语言入门书,现在就可以看,会极大扩展你的眼界,拉开你与普通人的差距。
Coursera编程语言MOOC:课堂上你能接触到极端FP(函数式)的SML,中性偏FP的Racket,以及极端OOP(面向对象)的Ruby,并学会问题的FP分解vsOOP分解、ML的模式匹配、Lisp宏、不变性与可变性、解释器的实现原理等,让你在将来学习新语言时更加轻松并写出更好的程序。
:热热身,教你写一个简单的浏览器——其实就是一个javascript和html的解释器,完成后的成品还是很有趣的;接下来,试着完成一个之前在SICP部分提到过的项目:用Python写一个SchemeInterpreter
其他
编程入门阶段比较容易忽视的几点:
学好英语:英语是你获取高质量学习资源的主要工具,但在入门阶段,所看的那些翻译书信息损耗也没那么严重,以你自己情况权衡吧。此外英语的重要性更体现在沟通交流上,LinusTorvalds一个芬兰人,一口流利的英语一直是他招募开发者为linux干活的的法宝,这是你的榜样。
学会提问:学习中肯定会遇到问题,首先应该学会搜索引擎的“高级搜索”,当单靠检索无法解决问题时,去StackOverflow或知乎提问,提问前读读这篇文章:Whathaveyoutried?
不要做一匹独狼:尝试搭建一个像这样简单的个人网站,不要只是一个孤零零的About页面,去学习Markdown与LaTeX,试着在Blog上记录自己的想法,并订阅自己喜欢的编程类博客。推荐几个供你参考:JoelonSoftware,PeterNorvig,CodingHorror
小结
以上的内容你不应该感到惧怕,编程的入门不是几个星期就能完成的小项目。期间你还会遇到无数的困难,当你碰壁时试着尝试“费曼”技巧:将难点分而化之,切成小知识块,再逐个对付,之后通过向别人清楚地解说来检验自己是否真的理解。当然,依旧会有你解决不了的问题,这时候不要强迫自己——很多时候当你之后回过头来再看这个问题时,一切豁然开朗。
此外不要局限与上文提到的那些材料,还有一些值得在入门阶段以及将来的提升阶段反复阅读的书籍。ThePragmaticProgrammer就是这样一本程序员入门书,终极书。有人称这本书为代码小全:从DRY到KISS,从做人到做程序员,这本书教给了你一切,你所需的只是遵循书上的指导。
后记
如果你能设法完成以上的所有任务,恭喜你,你已经真正实现了编程入门。这意味着你在之后更深入的学习中,不会畏惧那些学习新语言的任务,不会畏惧那些“复杂”的API,更不会畏惧学习具体的技术,甚至感觉很容易。当然,为了掌握这些东西你依旧需要大量的练习,腰还是会疼,走路还是会费劲,一口气也上不了5楼。但我能保证你会在思想上有巨大的转变,获得极大的自信,看老师同学和csdn的眼光会变得非常微妙,虽然只是完成了编程入门,但已经成为了程序员精神世界的高富帅。不,我说错了,即使是高富帅也不会有强力精神力,他也会怀疑自己,觉得自己没钱就什么都不是了。但总之,你遵循指南好好看书,那就会体验“会当凌绝顶”的感觉。
首先要想学编程,选一门合适的计算机语言就十分重要了,怎么去选择就显得尤为重要了,这要根据自己的兴趣爱好及每个语言的特性来选择,比如说PHP适合做web开发,易学习,易上手,非常流行的一门计算机语言了,我个人比较推荐php语言。
java可以做web开发,做安卓app开发也用的是java,在学习程度上上可能比php稍微难上手一点,不过也是没问题的,如果对java感兴趣可以尝试一下。
python是目前比较火的一门语言了,比较适合做人工智能领域,另外写网络爬虫类的程序,用python也是非常合适的了,看个人兴趣来选择了。
c,c++,c#这些语言就不推荐给了,特别是c#,已经是比较过时的一门语言了,即使学习好了,也不太适合去找工作,c与c++并不是十分适合初学者来学习,因此也是没必要进行考虑了,还有一些更小众的语言,更是没有必要去考虑,因此关于语言的学习就从上面3种语言去选择一门自己所感兴趣的吧!
研发搭建环境
如果选择好计算机语言,那么接下来就是研发环境的搭建了,因为只有研发环境搭建好了,才可以进行后续的编程工作,比如说PHP,那么就从网络上搜一下如何安装PHP环境,能搜出一些简单的教程,初学者按照教程一步一步来,顶多半天时间就可以把研发环境装好了,如果是java,就需要先安装jdk,进行环境变量的配置等,网上也有相关的教程,也是十分容易的,相信大家只要按照教程来做,都可以很轻易的把研发环境搭建起来的
选好视频和书籍,辅助学习。既然是零基础学习,就需要进行系统的学习,而不是到处网络零基础的知识点进行学习。
代码练习
跟随教程一个一个章节的进行学习,需要注意的一点就是不能只是去看,那样不行,要对每一个章节的知识点要亲自用代码敲一遍,运行一下试试效果才行,这样才能提高自己的动手能力,才开始会觉得有一点生疏,慢慢的就会熟练起来,逐渐会增加编程的兴趣。这个过程就是需要反复的进行练习,大量的代码练习才行。这个过程是5步中最关键的阶段了,重在代码亲自练习,对编程中有的章节不明白的地方,千万不要放过去,可以在网上找一些相关的编程交流群,参加进去,在线上咨询一些过来人,也许就可以轻松帮你解决疑问了,对你的学习十分帮助,并且整个过程也都是免费的。
项目实战
如果说基础教程都按部就班的都实践过一遍了,那么你就有一定的编程的基本功了,那么自己就可以尝试着做一些小项目,把学到的知识给串起来,进入项目实战阶段,比如说自己设计一个学生管理系统,并把它完成,如果不了解怎么设计,可以去网上搜索。慢慢就有思路了。
我也在学习这方面,视频书籍看过不少,最推荐的还是北京尚学堂的学习资料,Java.300集,Python400集,都是很经典的入门基础教程,而且是结合项目学习的,很有意思,干货满满,还都是免费的,推荐你可以去看看,相信可以带你走进变成的世界。
从零开始学编程,第一关就是要选择你所要学习的编程语言。面对着琳琅满目的编程语言,初学者常常一筹莫展,拿不定主意,不知该选哪
2. 如何学好计算机编程
问题一:从零开始学习计算机编程应该怎么学 楼主注意一下 如果想学计算机的话需要很强的自学能力和耐性 如果这两点没有最好别学。
如果想学第一步需要学习一门编程语言推荐C语言 楼主可以查下编程语言排行榜C一直稳居第一名
从基本的C语言语法入手,边学语法边写程序不要忘记做一下书籍的课后编程练习题,然后可以学习下java语言,java有自己的很多程序库可以直接调用,买本java的教程看看可以写写小程序了。然后如果想深入你还需要学习操作系统、计算机组成原理、计算机网络、编译原理、还有数学(离散数学很重要),当然了还学要学别的东西,太多了一下子说不全。我是软件工程专业,课程基本自学的,纯经验之谈。
问题二:电脑编程怎么样?学的人多不多,好不好就业? 学的话比较难,c++还是要有一定我的英文水平的,就业是可以的还是看你学的怎么样,比较耗脑子,
问题三:零基础学计算机编程有什么好的书籍推荐 下面这个可以参考一下,具体还要看个人的情况。
我觉得应该根据你的工作需要或者说你的发展方向而定。基本上两大类吧:C/C++和Java。比如,如果你要做企业级应用的你应该学习Java和C#;如果你想做嵌入式,那么应该学好C语言;其他情况下,在你不知道要做什么之前你可以选择学习C/C++。学会这两大类中的一类,对于你学习其他语言都将是比较轻松,包括脚本语言,动态语言??呵呵,这里想就自己的学习经历和情况给大家一个建议,仅供参考。
1、我的入门是从学习C语言开始的(其实课程是C++),这是我们学校的公共课,我上课比较认真(虽然老师讲得很差,而且一段时间后,我就发现自己的基础掌握比她好,当然理解深度没她好),因此,我认为对于完全没有基础的人而言,听别人讲比较容易入门。当时的教材是学校自己编的,挺烂的。
建议一(以C/C++为例),对于刚想进入编程的人(就是从来都没有接触过编程的人),最好是听课的方式(自己看的话估计要很慢,而且很痛苦),可以找视频或者培训等。C语言推荐入门教材:谭浩强的C语言,最新版是第三版,不过第二版应该也可以了(蓝色的)。说明一下:坚决不同意直接看K&R的《The C programming language》,这本书绝对不是初学者可以看懂的,里面讲语法的并不多,语法都是合在程序里面讲。不过这本书非常好,入门以后一定要看的一本书。
当然可以从C++直接入门,C++之父强烈推荐从C++直接入手。C++推荐入门教材:钱能的C++(红色的,清华大学出版),这本书第一版不是ISO C++,不过比较经典,作者现在也出了第二版了,第二版好像不是太好。国外的最好的入门教材据说是:《Acclerated C++》作者是Koenig和Moo夫妇,非常厉害。他们的着作还有《c陷阱与缺陷》《c++沉思录》。《Acclerated C++》这本入门的书我没有看过,我觉得还是先找本国内的书好好看,看的差不多了,国外的经典书籍随便看就会觉得很有味道,否则你可能会很受打击。入门的书至少要看两三遍(要彻底理解哦 ):)。如果是C++,我建议后面类的部分至少要理解三到五遍。说明一下,c++模板的部分可以先不用看,如果有兴趣的话,等把c++学的差不多了,我觉得可以把模板、STL、泛型编程结合起来学习,这个又是一个很大的工作量了,又得下很大的功夫。所以说,C++博大精深啊。
建议二、学习过程中要结合简单的算法,像冒泡还有类似c语言程序百例这样的小例子做做;更进一步应该做点大一点的项目,最好是控制台程序。或者你已经着手学习win32、MFC或linux,你也可以结合平台做点小的项目。
2、第一阶段是最苦的,接下来相对就知道应该怎么去学习了。这时候假设你已经有了扎实的c++基础。这是你可以选择也应该选择发展方向了,做企业级应用,还是系统开发,嵌入式设计或者游戏开发?? 那时我其实并没有考虑那么多,因为我不是学计算机的,因此我就把参加一些计算机之类的考试当作学习目标。我当时其实C++语言基础已经很不错了,但是上机实践很少(那时我没有电脑),因此参加省计算机二级,全国计算机三级和全国计算机四级考试,结果上机都没有通过。我很郁闷,二级的时候是我不知道怎么样进那个DOS界面把题目调出来,三级的时候是很快就编好了,也通过运行了,可是成绩出来却不及格,四级的时候是编好了,可能是我那题目比较难,好像用了两次循环,结果那破机器竟然承受不了。后来一乱就毁了(当然主......>>
问题四:学好计算机编程可以从事什么工作! 1 可视化编程
掌握程序设计方法及可视化技术,精通一种可视化平台及其软件开发技术。获取Delphi程序员系列、Java初级或VB开发能手认证。
就业方向:企业、 *** 、社区、各类学校等可视化编程程序员。
2 WEB应用程序设计
具有美工基础和网页动画设计能力,掌握交互式网页程序的设计技术,能进行网站建设和维护。获取Macromedia多媒体互动设计师或Delphi初级程序员或Delphi快速网络开发工程师认证。
就业方向:企业、 *** 、社区、各类学校等WEB应用程序员。
3 软件测试
掌握软件测试的本原理、方法和组织管理,精通软件测试工具。获取ATA软件测试工程师或Delphi初级程序员或Java初级程序员认证。
就业方向:企业、 *** 、社区、各类学校等软件测试员。
4 数据库管理
能应用关系范式进行数据库设计,精通SQL语言,胜任数据库服务器管理与应用工作。获取Oracle数据库管理或SQL Server数据库应用或Windows XP应用认证。
就业方向:企业、 *** 、社区、各类学校等部门的中、大型数据库管理员。
5 图形图像制作
精通国际上流行的图形/图像制作工具(如CorelDraw、Photoshop、Pagemaker等)。获取平面设计师相关的认证。
就业方向:广告制作公司、建筑设计公司、包装装璜设计公司、居室装修公司、出版印刷公司。
6 网络构建技术
熟悉网络结构和组网方式,掌握建网方法,能利用工具分析和排除常见网络故障。获取Cisco路由配置或华为网络工程或AMP应用工程师认证。
就业方向:企业、 *** 、社区、各类学校等网络构建工程师。
7 网络系统管理
掌握网络系统管理的基本知识与应用技能,能进行网络系统的安全设置。获取Window2000 Server或TurboLinux TLCE或Cisco路由配置专家认证。
就业方向:企业、 *** 、社区、各类学校等网络系统管理员。
8 多媒体制作
具有多媒体程序设计与多媒体制作策划的能力。基本掌握面向对象程序设计与建模、造型设计、场景设计、分镜头原理等技能。获取多媒体设计师相关的认证。
就业方向:多媒体设计与制作公司、动画美术制作出版公司、广告制作公司。
问题五:准备自学计算机编程,这几个哪个易学,哪个就业前景好 对于计算机,无论你学那个语言,那个语言的技术,C语言是一个无比重要的基础。
以Java为例
如果你没有C语言,Java的学习将无比困难。而java是Android基础中的基础。不学C语言的指针,不知道动态内存分配,你将几乎无法理解Java中关于类的一切知识。
如果不学C语言,Java将会被认为无比复杂。仅仅一个HelloWord就要各种关键字 4 个之多。所谓“面向过程”、“面向对象”等重要概念更是无从说起。
C语言是一个基础,是一个经验。Java和C语言是走向所有编程语言的通行证。绝不可单一不变,融会贯通是关键。学精任意一门,都将前途无量。
隆重推荐
郝斌的各种编程教程(包括JAVA)
以下来自网络贴吧:
之前发过一次帖子... ...不过好像沉下去了, 看到好多人需要, 再发一次吧... ... 手机自带的播放器是不可以播放的, 各位若一款播放器不行就换几款常用的播放器试试看, 肯定有 *** 播放的.
郝斌c语言avi格式教程:pan./s/1kTsuSbt?密码:z7y8
郝斌SQL 2005教程avi格式:pan./s/1i31mz8T
郝斌java教程avi格式:pan./s/1sjLVted
郝斌数据结构教程avi格式:pan./s/1hqAbUPQ。
原帖自:
tieba./...&pn=0&
我就是从这里开始的,祝你好运。
问题六:如何学习电脑编程入门。 编程与数学成绩的好坏没有什么直接联系,如果想学好编程,最好不要一开始就学高级语言(比如VB之类的),那会让你以后的编程水平没进步。
第一步,可以先从《微机原理与汇编技术》开始,有了基本的计算机基础,你才会对整个计算机编程的原理以及来龙去脉有个大致的了解。
第二步,把C语言学好,可以不要求精通,但是一定要掌握的全面一点。C语言的编码软件很多,比如borland C,网上很多,网络可以找到。
第三步,c++。可以先接触Borland C Builder V6.0。学习的教材有 “C++程序设计谭浩强100%25完整・清华大学”,网上有其电子书。
第三部学好C++之后,可以陆续浏览下C#,VB之类的高级语言,只有学好了一门语言,其他语言才会一通百通。
问题七:在哪里学电脑编程好 你好,学电脑介意去正规专业的电脑学校学习,在好的学习环境里能有更好的收获。
问题八:如何学好计算机,需要什么条件? 学计算机首先是数学要好,因为计算机编程必须要借助数学思想来进行建模,有就是英语,程序代码都是英文的。计算机很枯燥,所以必须要下苦工才能成功,和那些打游戏之类的不同。
问题九:想学电脑编程从什么开始学起好? 我个人的学习过程(供参考) 最早是要有对计算机的兴趣:看了许多杂志和报纸,当然都是些硬件知识和软件的使用技巧,这是启蒙书 后来我利用高三暑期自学了编程,是VB,快开学的时候我基本算是小通VB了 来到大学,我的专业是计算机,于是在学校学了C语言,这个时候我就发现,传说中过时的VB竟对我学C语言带来了极大的帮助,因为我已经有了编程的思想了,之后我学习 POWER BUILDER , VB.NET , ASP.NET , JAVA等编程语言,真的是越学越顺.... 说到这里我就不继续吹牛了,我只想再说一句:经验都有它的特殊性,有学准有用,别听别人扯蛋
问题十:从零开始学习计算机编程应该怎么学 楼主注意一下 如果想学计算机的话需要很强的自学能力和耐性 如果这两点没有最好别学。
如果想学第一步需要学习一门编程语言推荐C语言 楼主可以查下编程语言排行榜C一直稳居第一名
从基本的C语言语法入手,边学语法边写程序不要忘记做一下书籍的课后编程练习题,然后可以学习下java语言,java有自己的很多程序库可以直接调用,买本java的教程看看可以写写小程序了。然后如果想深入你还需要学习操作系统、计算机组成原理、计算机网络、编译原理、还有数学(离散数学很重要),当然了还学要学别的东西,太多了一下子说不全。我是软件工程专业,课程基本自学的,纯经验之谈。
3. 如何学好编程
要想学好编程,首先要学好编程的基础语言及常用的各种语法规则,其次就是要多次实践应用验证,最后就是不断的进行经验积累。
4. 浠庨浂寮濮嫔︾紪绋嬭佸嚑骞
缂栫▼闂ㄦ涘叾瀹炲苟涓嶉珮锛岃嚜瀛﹀嚑涓链埚氨鍙浠ュ叆闂锛屼絾鏄鍒濈骇绋嫔簭锻樿繘阒跺嵈寰堥毦锛岄渶瑕佸︾殑鐭ヨ瘑寰埚氩緢澶氥傛墍浠ヨ嚜瀛︾紪绋嬫兂鍏ラ棬锛屽緢绠鍗曪纴鍙瑕佽嚜宸辫兘锷锷涳纴鑳藉潥鎸侊纴鍑犱釜链堜互钖庝綘灏卞凡缁忓湪璺涓娄简銆傚敖绠¤繖涓杩囩▼寰堥毦锛屼綘浼氲糠锣銆佸汹𨱍戯纴浣嗘槸浣犺佸潥淇″姫锷涘繀灏嗘湁缁撴灉銆
鎺屾彙锘虹镄勮娉
鎴戜滑链缁堢洰镄勬槸灏藉揩镄勫﹀畬鐩稿叧鐭ヨ瘑锛岀劧钖庢垒鍒颁竴浠藉伐浣滐纴杩涘叆杩欎釜琛屼笟銆傛垜浠杩欓噷镄勬柟娉曞氨鏄蹇阃熸帉鎻$煡璇呜繍鐢ㄣ备絾鏄寮鍙戠殑杩欎釜琛屼笟浣犲叾瀹为渶瑕佸︿範镄勭煡璇嗗疄鍦ㄥお澶氩お澶氾纴浣嗘槸鏅阃氩叕鍙哥殑涓涓鍒濈骇宸ョ▼甯埚彧瑕佽兘淇濊瘉浼氱敤涓氩唴阃氱敤镄勬嗘灦锛岃兘瑙e喅镄勫熀链镄勪笟锷¢梾棰桦氨濂姐傛墍浠ユ垜浠杩欓噷瀛︿範杩囩▼蹇呴’镄勫厛锅氩噺娉曘傝繖涓杩囩▼涓鎴戜滑鍏堜笉鐢ㄥ幓瀛︿範绠楁硶锛屾嗘灦婧愮爜浠涔堢殑锛屽厛铡诲︿範宸ヤ綔涓闇瑕佺敤鍒扮殑鐭ヨ瘑锛岀瓑鎴戜滑杩涘叆琛屼笟鍐嶅幓瀛︿範銆
镊瀛︾殑绗涓姝ワ纴鎴戜滑鍏堟帉鎻¤瑷镄勫熀链鐭ヨ瘑镣广傛垜浠涓嬮溃𨰾 Java 涓句緥銆
瀛︿範 Java锛屾帹钻愪娇鐢ㄨ嗛戝姞涔︾睄瀛︿範銆
镊充簬涔︾睄锛岃繖閲屾帹钻銆孞ava镙稿绩鎶链(鍗1):锘虹鐭ヨ瘑銆嶏纴銆孞ava缂栫▼镐濇兂銆嶃备袱链涔﹂兘鏄缁忓吀濂戒功锛屽挨鍏跺悗闱涓链镟存槸缁忓吀涓缁忓吀銆傝繖閲屽垏璁颁竴镣癸纴鍒囧嬁涔 銆寈x 鍏ラ棬鍒扮簿阃氥嶃併21 澶╁甫浣犲︿细 xx銆 绯诲垪涔︾睄锛屽敖绠¤繖绫讳功绫嶉攒閲忓緢濂姐
涓嶆帹钻愮洿鎺ョ湅涔﹀︿範銆傚洜涓轰綘濡傛灉鍗旷函鐪嬩功锛屼綘寰埚规槗浼氩汹涔忥纴钥屼笖寰埚规槗鎶扑笉浣忛吨镣广傝繖涓杩囩▼寰埚规槗浼氲╀綘澶卞幓鍏磋叮銆傝岀粨钖堣嗛戝︿範锛屼綘鍙浠ヨ窡瑙嗛戣繘搴﹀︿範锛岃繘钥岃兘鎺屾彙镊宸卞ぇ姒傚︿範杩涘害銆傝繖涓瀛︿範杩囩▼涓锛屼綘鍏堢湅瀹岃嗛戯纴铹跺悗锷ㄦ坠缁冧範瑙嗛戜腑镄勪唬镰併
涓瀹氲佸姩镓嬬粌涔狅紒
涓瀹氲佸姩镓嬬粌涔狅紒
涓瀹氲佸姩镓嬬粌涔狅紒
浠g爜鏄闇瑕佸姩镓嬬粌涔狅纴镓嶈兘瀛扮敓宸с
瀛﹀畬 Java 锘虹锛岀敤瀛︾殑鐭ヨ瘑铡诲畬鎴愪竴涓灏忛”鐩锛岃繖閲屼细璁╄嚜宸辨湁浜涘皬鎴愬氨锛岃繖镙疯兘镟村ソ瀛︿笅铡汇
Java 锘虹鐭ヨ瘑涓岖敤铡诲 awt锛宻wing 绛夊浘褰㈠寲缂栫▼銆
濡傛灉杩欑涓姝ラ兘鍧氭寔涓崭笅𨱒ワ纴闾e叾瀹炵湡镄勬斁寮冨惂銆傚悗闱浣犲彧浼氲秺瀛﹁秺锲伴毦
镵婅亰阃夋嫨镄勯梾棰
镊瀛︾浜屾ワ纴阃夋嫨浠庝簨镄勬柟钖戙
瀛﹀畬 Java 锘虹锛屼綘灏遍溃涓磋嚜宸变互钖庨渶瑕佷粠浜嫔紑鍙戠殑鏂瑰悜銆傚 Java 𨱒ヨ达纴涓鑸鍒嗕负链嶅姟绔寮鍙戜笌瀹㈡埛绔寮鍙戯纴鏂瑰悜涓嶅悓锛屾帴涓嫔幓瀛︾殑鐭ヨ瘑镣瑰氨浼氢笉钖屻傛墍浠ヨ繖閲岄夋嫨闇瑕佹厧閲嶆濊冦
杩欓噷鍙浠ヤ娇鐢ㄤ竴涓鏂规硶锛屾垜浠浠庝簨浠剁殑浠峰煎嚭鍙戯纴鍒楀嚭涓涓浼樼己娓呭崟琛ㄣ傛瘆濡备綘瑕侀夋嫨链嶅姟绔寮鍙戣缮鏄瀹㈡埛绔寮鍙戯纴浣犲厛铡诲厖鍒嗕简瑙h繖涓や釜鏂瑰悜锛岀劧钖庡垪涓鍒嗕紭缂烘竻鍗曡〃镙硷纴鎶娄简瑙e埌姣忎竴涓镣归兘鍐欎笂铡伙纴镓扑竴涓鍒嗘暟锛屽垎鏁板垎涓 -10 鍒 10 鍒嗐傛渶钖庢垜浠缁熻′竴涓镐诲垎锛岀劧钖庨偅涓鍒嗘暟杈冮珮镄勬柟钖戙
鎺屾彙鏁版嵁搴
鐢变簬链浜轰粠浜嬫湇锷$寮鍙戯纴涓嬮溃璇磋存湇锷$寮鍙戝︿範镄勮繃绋嬨
链嶅姟绔寮鍙戯纴闇瑕佸︿範镄勪笢瑗夸细寰埚氾纴涓嶈繃涓岖敤𨰾呭绩锛屾垜浠涓涓涓璇淬
棣栧厛鎴戜滑鍏堣存暟鎹搴撱傛暟鎹搴揿逛簬链嶅姟绔寮鍙戯纴涓瀹氲佸︿细镄勬妧链锛屾墍浠ヨ繖涓鎴戜滑闇瑕佺潃閲嶅︿範銆
棣栧厛鎸夌収缃戜笂鏁欑▼锛岃嚜宸卞湪鐢佃剳涓婃惌寤轰竴涓鏁版嵁搴掳纴杩欓噷鎺ㄨ崘 MySQL銆傛惌寤轰箣钖庯纴鍐崭笅杞戒竴涓鏁版嵁搴揿㈡埛绔绠$悊宸ュ叿锛屽 Navicat锛娈ataGrip銆傚纰瀹岃繖浜涘熀纭璁炬柦涔嫔悗锛屾垜浠杩欓噷鎺ョ潃铡诲︿细 SQL 镄勮娉曘傝繖閲岀潃閲嶅︿範鍗曡〃澧炲垹鏀规煡镄勮娉曪纴璺ㄨ〃镄勮繛鎺ユ煡璇㈢瓑銆傜绣涓婃垒涓涓渚嫔瓙锛屽傚彲浠ヨ嚜宸辨瀯寤轰竴涓瀛︾敓璇剧▼淇℃伅琛锛屽仛鍒板彲浠ョ敤浠ヤ笂瀛︿範鍒扮殑璇娉曘
瀛︿範瀹屾暟鎹搴掳纴鎺ョ潃鎴戜滑灏遍渶瑕佸︿範Java JDBC 镄勭煡璇嗐傚︿範镄 JDBC 灏辨槸璁╂垜浠浜呜В锛屽备綍浣跨敤 Java 镎崭綔鏁版嵁搴掳纴杩愯 Mybatis镄勫炲垹鏀规煡镄勮鍙ャ
鎺ョ潃鎴戜滑鍙浠ュ幓瀛︿範鐩稿叧 ORM 镄勬嗘灦锛屽 Hibernate 鎴 Mybatis锛岃繖閲屾帹钻 Mybatis銆傚︿範妗嗘灦锛屾垜浠瑕佸仛鍒版帉鎻℃嗘灦镄勪娇鐢ㄦ妧宸у氨鍙浠ャ
杩欎釜杩囩▼浣犲彲鑳戒细鍙戠幇锛孧ybatis 杩欑被妗嗘灦杩欎箞濡傛ょ亩鍖栧紑鍙戯纴涓轰粈涔堟垜浠涓岖洿鎺ュ︿範 Mybatis 锛
瀛︿範 JDBC 镄勭洰镄勶纴鍏跺疄灏辨槸璁╀綘浜呜В杩欎簺 ORM 镄勫熀纭銆
瀛﹀畬杩欎釜阒舵碉纴鎴戜滑鎺ヤ笅铡诲氨瑕佽繘鍏 WEB 寮鍙戙
WEB 寮鍙
杩欎釜杩囩▼鎴戜滑棣栧厛瀛︿範涓浜涘墠绔鐭ヨ瘑锛屽 HTML锛孋SS,JavaScript锛岀劧钖庡啀铡 Jquery 绛夊墠绔妗嗘灦锛屽仛鍒拌兘瀹炵幇涓浜涚亩鍗旷殑锷熻兘銆傛垜浠涓嶉渶瑕佽窡浣犱笂闱涓镙风簿阃氾纴鎴戜滑鍙瑕佷简瑙d竴浜涙傚康鍗冲彲銆
鎺ヤ笅铡绘垜浠瀛︿範 Servlet锛屽仛鍒拌兘浣跨敤铡熺敓 Servlet + Jsp 鑳借繍琛屼竴涓 WEB 绋嫔簭銆
钖庨溃鎴戜滑鍐嶅幓瀛︿範 Spring 妗嗘灦锛屼娇鐢 SpringMVC 浜呜В MVC 镄勬傚康銆傛渶钖庣敤 SpringMVC+Spring+Mybatis+MySQL 瀹屾垚涓涓绠鍗旷殑绠$悊绯荤粺銆
鍏朵粬
瀛﹀畬浠ヤ笂鍐呭癸纴锘烘湰涓婂凡缁忓︿範瀹屽伐浣滀腑瀛︿範鍒扮殑鎶链镙堛傝繖涓杩囩▼浣犺缮闇瑕侀濆栧︿範涓浜涘伐浣滀腑鐢ㄥ埌鍏朵粬鐭ヨ瘑銆
浣犻渶瑕佸幓瀛︿範鍗忓悓寮鍙戠殑宸ュ叿锛屽 Git锛孲VN銆乤picloud studio澶氱缂栬疟銆傚仛鍒颁简瑙e备綍鏂板缓鍒嗘敮锛屽备綍𨰾夊彇浠g爜锛屽备綍钖埚苟浠g爜鍗冲彲銆
浣犺缮闇瑕佸幓瀛︿範涓浜 Linux 镄勫懡浠ゃ
镐荤粨
瀛﹀畬涓婅堪鍐呭癸纴浣犲疄闄呭氨宸茬粡鎺屾彙鍒濈骇寮鍙戞墍闇瑕佺殑鎶链锛屽凡缁忓熀链涓婂彲浠ヤ粠浜嬩竴涓鍒濈骇寮鍙戠殑宀椾綅銆傛垜浠涓婇溃璁茬殑閮芥槸浣跨敤鎶宸э纴浣嗘槸闱㈣瘯镄勬椂鍊椤彲鑳戒细闂浣犱竴浜涘师鐞嗘х殑鍐呭癸纴镓浠ュ湪鎴戜滑铡绘垒宸ヤ綔涔嫔墠鎴戜滑杩橀渶瑕佸幓浜呜В涓浜涘师鐞嗘х煡璇嗐傝繖鏂归溃镄勫唴瀹归氲繃鎼灭储寮曟搸鎼灭储鍗冲彲銆
杩欎釜杩囩▼浣犲彲鑳戒细纰板埌寰埚氶梾棰桡纴杩欎釜杩囩▼涓瀹氩杽浜庝娇鐢ㄦ悳绱㈠紩镎庛
5. 要成为一名专业的程序员,从零开始需要怎么一步步来比较好,要把最底层的先学精通吗(个人认为)求学长
前言
你是否觉得自己从学校毕业的时候只做过小玩具一样的程序?走入职场后哪怕没有什么经验也可以把以下这些课外练习走一遍(朋友的抱怨:学校课程总是从理论出发,作业项目都看不出有什么实际作用,不如从工作中的需求出发)
建议:
不要乱买书,不要乱追新技术新名词,基础的东西经过很长时间积累而且还会在未来至少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等。
6. 从零开始学编程需要多久
从零开始学编程一般需要4-6个月。
入门编程应该先学入门C语言或者python :
C语言语法简单,有良好的逻辑抽象,如果是要更全面、深入地学习语言本身就C。python语法更加简单简洁易学,而且有各种强大的库,扩展库,如果是为了通过编程这一手段来迅速地做出有用、实用的程序和界面可以学python。现代很多语言都是从C语言发展而来的,所以可以以C语言做跳板进阶其他面向对象的高级语言。慢慢接触C++,或高级编程语言(如:Net,Java 等),网页设计相关的语言(HTML+CSS+Javascript)。如果想做一个程序员,在没有基础的情况下,买书自学是一个办法,但是大多数人会因为没有相关的基础知识,导致看书看得一知半解,在不了解的时候,买的书不一定合适。比较速成的办法还是去报名一个培训班,推荐【达内教育】,系统的学习一下基础知识,然后选择一个发展方向,再具体的针对性地买点书籍来学习。
想了解更多有关编程的详情,推荐选择【达内教育】。该机构独创TTS8.0教学系统,企业双选会。达内OMO教学模式,全新升级,线上线下交互学习,满足学生多样化学习需求。对标企业人才标准,制定专业学习计划,囊括主流热点技术。理论知识+学习思维+实战操作,打造完整学习闭环。实战讲师,经验丰富。→感兴趣的话点击此处,免费学习一下