1. 我应该选择什么编程语言
可能困扰编程新手最多的一个问题是【我应该学什么编程语言】或者【我需要学习哪些课程才能做出一个web、一个app】,很多人一直纠结这个问题,陷入了东学一点、西看一点的死循环,到头来啥也没学好,这会很浪费时间。刚上大一的时候,我也很想知道应该选择什么编程语言。我问了很多人,网上各种查资料,但所能得到的答案都很片面,多数对这个问题答非所问,总是回答说“某某编程语言难”,“某某编程语言性能好”。其实作为初学者,我们对计算机体系都不了解,就不要过多地去纠结性能,或者难易等因素,原因我等下再说。如果你有明确的方向,那么很好选择。如果你想做算法、机器学习方向,那么python是最好的选择。如果你想做web开发,java、php等都可以。如果想做一些更底层的工作,那么就可以选c。当然这是建立在你有明确方向的基础上。可是,很多人都没怎么接触过计算机行业,特别是和我一样刚入学就被调剂到计算机专业的人。对这些同学来说,各个编程语言就只是个名字,除了叫法不一样,你根本不知道它们有什么差别。所以索性不要纠结了,我替你选一个吧。如果你是在校大学生,那么你有大把连续的时间,就先学习c,然后再学c++。我个人是学c入门的,也许很多人不理解我为什么推荐学c,因为c和c++都很难、很复杂,看起来并不适合入门。然而正是它们的难和复杂才能让你更好地理解计算机系统【计算机系统不是指操作系统】。学习编程不是学习编程语言,而是学习一个计算机生态,即一个庞大的知识体系。只会编程语言而不理解整个计算机的体系,就像只会写字而写不出好文章。了解c/c++和了解计算机系统是极为贴合的,向下可以帮助你更容易地理解操作系统、编译原理、计算机网络、计算机组成原理,为什么呢?因为较为底层的东西很多都是用c实现的,和系统的贴合度极高,很多教材源码甚至教程,在讲述这些知识的时候都是用c或c++作为媒介。而向上,c++面向对象的机制,也可以做出一些应用,譬如五子棋游戏等,也不会显得那么枯燥。花个小半年时间了解c和c++,之后你就会觉得看书、看资料可以轻松很多。如果你是一个上班族,但是刚刚学习编程,可能学c和c++对你来说有些复杂和困难,因为学习它们确实是很需要时间。你们不像在校生那样有大把的连续时间,而零碎的时间去学习一个比较复杂的东西效果不见得有那么好,所以可以先学一些【更容易见效】的编程语言,从python入手吧,至少能快速做出一些小应用,不至于丢失了兴趣,但是真的要入门编程又还得看看与计算机系统相关的书籍,这样才能更深层次地去编程,譬如【深入理解计算机系统】这一本书可以读很多遍,这本书把整个计算机系统给串起来了。2.学习编程,我需要学习哪些课程?我要学哪些课程?我为什么要学习如高数、离散数学、线性代数、概率论等课程?这个问题也是之前困扰了我很久的问题。不过我现在想通了,对于【高数、离散、线性代数、概率论】等课程,很好解释,做算法的同学肯定知道为啥要学习这些课程。机器学习中会大量用到上述提到的课程,所以会比较好理解。对在校生而言,学校开设的很多课程我们不知道为什么要学,我们很疑惑,不知道学它有什么用,这个时候我们就会很纠结,还会产生抵触情绪。这很正常,因为我们学习得不够深入,自然不能理解它们的用处。在我看来,大学本科课程更多的是面向“面”的教学,即什么课程都教给你一些,但是又讲得不那么深入;而工作或者读研,更多的则是面向“点”的学习,用到的知识更专。本科时,学校也不知道你以后是去搞算法、还是搞架构、还是搞服务器开发,甚至去搞硬件,所以学校需要你学很多课程,至少有个了解。对学生来说,一方面可以从中选择自己感兴趣的点;一方面也可以对未来的就业方向有些启发。所以即使像数电、模电等课程,虽然之后可能用不着,但是你也要学,并且会花费大量的时间。虽然你最后不一定去搞硬件,但是这些课程也会让你更容易去理解一些知识,比如cpu中的逻辑器件。如果你在大一的时候就有一个明确的定位,知道自己今后想从事哪方面的工作,课程与课程之间是可以调一下优先级的。不过像大学物理,这种课程确实是对编程没有帮助,但是像我前面所说的,大学教育更注重广度,大物等课程可能就是为了给你普及生活常识吧。其实,大学教育的问题是普遍存在的,我认为我们学习一项技能的时候,应该采取的是项目驱动式学习,即需要用到什么东西时不会了再去学,而不是先填鸭式的都填进脑子,并且在学习的过程中我们还不知道它这是干嘛用的,等之后用到了,甚至不记得自己学过,反而查资料才会想起:哦,原来我之前学的xx科目是这个用处啊,可是我当时并没有好好学。很多时候学生时间的浪费可能还是要怪老师、怪学校,他们一开始没给我们做好充分的课程介绍。所以,在经过比较多的编程和项目实践后,我认为一个比较好的学习方式是,改良版的项目驱动学习法。即:学习一段时间,做个小项目,将做项目遇到的问题记下来,针对性地学习相关知识,然后再实践,再学一段时间理论,让知识成网状发射状地变大。当然,项目驱动式学习有一个弊端,就是每次学习的知识都是项目所需要的,很零碎、不成体系,所以需要改良,即在采取项目驱动学习法的时候每天抽一段时间去完整地读一本书,或者一个相关问题的完整介绍,这样就很容易把一些知识成体系地串起来。这样一段时间下来,慢慢的,你就知道我们为什么要学那么多科目,学这些科目能干什么。为了表达地更加形象,我就举一个小例子,是我最近遇到的。我本身的工作是做Linux C++的,但不仅限于此。我个人对python、数据分析,以及机器学习等内容比较感兴趣,大家可以看到我最近也在我的专栏发布了很多文章。就从数据获取开始,我讲讲我这两个月做了什么东西。谈到数据获取,可能最容易想到的是爬虫,爬虫是一个被说烂了的话题,所以我不想多说它是什么。很多时候有人觉得爬虫简单,为什么呢,因为有现成的框架,所以获取少量的数据就比较容易。但是当你需要爬取的数据很大的时候(比如我之前抓取了某网站500万用户的数据,在下班的时间、用自己家里普通的pc,计算机性能并不是那么好,比不上服务器,又要在不被封IP的情况下抓到这么大量的数据,然后对数据进行清洗,最后还要可视化展示),使用现成的爬虫框架就并不是那么容易实现了。况且,我需要抓很多数据源,并不是一锤子买卖。所以我选择去开发一个系统,即在现有的框架下进行二次开发,搭建一个属于自己的爬虫系统,并植入一些算法。我在系统中添加了很多中间件,直到现在,它还可以在10分钟内就部署一个能抓取大量数据的爬虫应用。当然,这个过程也遇到了不少麻烦,我就简单讲讲,怎么去攻克一个个问题。下面先给出一个树形图,从上往下每一个圈都代表了学习过程中遇到的难点,如果你现在看不懂,没关系,我想告诉你的是一种梳理知识的方法:如上图所示,就是一个项目驱动式学习的例子,我们的目的是为了获取数据,所以选择了爬虫:爬虫可以理解为一个简单的过程:发送request,获取response,然后提取数据。这个过程会涉及到网络,是发送http还是https请求;目标网站是否需要登录,是post请求还是get请求,从这条线,衍生出了一条对网络进行学习的路径。获取到网页之后,如果不是结构化的数据,可能返回的是一个html源代码,那么可能就需要了解dom,或者html页面解析的知识,甚至需要了解一下前端开发。在抓取的过程中,经常会遇到数据中途不能被爬取的情况,一般是IP被封禁了,那么可能又要用上代理,代理是什么呢?http,https代理能不能混用呢?如何构建一个代理池呢?这里又有很多要学习的东西。还有可能遇到的情况是,抓下来的数据是加密的,需要通过js解密,这时候就要了解一下js,如何用爬虫模拟浏览器进行抓取。除此之外,如果抓取的频率不对,很多数据源会给你假数据,这就是一些经验问题了,本文不是技术文,所以就不多讨论。当解决了上述问题后,我们好像可以拿到一些数据了,但是当数据大起来,问题又复杂了,你可能需要使用分布式抓取了,这时候你可能需要了解一下redis,当request产生的速度大于其消费的速度之后,你的任务队列可能爆炸,所以这里又涉及到算法和数据结构的应用了。数据量上去之后,把数据写在文件里面是不靠谱的,这时候又涉及到存储了,到底是使用关系型数据库还是非关系型数据库呢,有什么区别呢?存进去的数据怎么去重呢?为什么insert操作越来越卡了呢?电脑怎么越来越热了呢?索引是什么,什么时候该建立索引呢?这里又牵扯到数据库原理相关的知识。遇到一些比较难处理的网站,比如有验证码识别该怎么办呢?其实对于很多纯数字和字母的验证码都很好解决,自己用深度学习训练即可。在TensorFlow的Demo中就要生成验证码自己训练的教程,然后制定个中间件放在爬虫系统中,这个问题就解决了。可是什么是深度学习呢?这里又引出一条对深度学习进行探索的例子,而我自己也是之前在学校的时候自学了小半年机器学习,有了一定的基础后,才能比较容易地上手TensorFlow框架。再往下就比较深了。上述六点简单讲了讲项目驱动式学习的介绍,其实,你看到的每一个小圆圈,深挖下去都大有文章。我们现在看到的只是冰山一角,任何一条学习路径学习下去都深无止境,我们不可能完全学会,可是项目驱动式学习最大的好处是让你知道你应该去学习什么,而不是先学一大堆知识,再去做一个项目。严格来说,项目驱动式学习的可视化路径是一张网,而不是一棵树,这里画成树状只是为了便于大家理解。除了获得数据,还有清洗数据、分析数据,甚至挖掘数据,最后可视化数据并且展示数据,这里我就不一一介绍了。3.学习编程是否需要制定计划?学习编程是否需要制定计划,该制定什么样的计划呢?我认为不只是编程需要制定计划,其他任何的学习和工作都需要制定计划。我从13年上大学就开始定期给自己制定计划,这个习惯也一直坚持到了现在,受益匪浅。当然也不只是制定学习计划,还可以列一些自己需要做的其他的事情。我最近在整理笔记的时候也发现了一些之前记录的计划和清单,可以给大家看看。比如下图就是我14年写的笔记,笔记上都留下了最后一次打开的时间。列举了一些自己需要看的文章,因为当时不太懂得规划,所以比较乱。到了16年的时候,我做计划做得更加有条理了。下图是16年10月30日的计划,那时候我已经大四了,并且已经找到了工作、签了满意的offer,并且没有什么课,按理说可以放松放松了,不过我还是制定了一些学习计划,并且选择在11月去百度实习。从内容上看,主要是学习英语和计算机专业课,因为大一大二的时候我确实不明白为什么要学习专业课,到了大三下想清楚原因以后,我也就一直在重新学习,因为计算机专业课真的很重要!学好了这些课,能让你在日后的学习工作中轻松不少:除了大四制定的计划外,大二的时候我也制定过较为详细的学习计划(如下图),把需要学习的内容进行了编号,存入表格,这样才能让你过得有条不紊。当然,很难完全按照计划去执行,不过制定相应的计划能让你清楚地知道自己应该干什么。所以,如果你是在校生,那么好好制定一个计划吧,因为你有大把的时间。当然,如果你已经毕业了,没关系,我现在也在上班,同样也列举了自己最近要学习的内容,如下图(2月27日更新过),包括了短期和长期需要学习的内容:4.编程是否需要做笔记和写博客?我觉得,写不写博客无所谓,因为博客是要写出来给大家看的,可能要保证格式美观、语法也要尽量准确,最好比较有文采,我觉得太麻烦也就一直没写。而笔记是必须要做的,并且记笔记是一个长期的过程。在学习的过程中,我们一直都在追求一种最高效的学习方法,比如,同一个班的同学,他用他的学习方法考上了清华,而你用同样的方法就不行,为什么?因为他的方法对他自己而言是定制化的,可能且大概率不适合你,比如他的笔记你不一定能看懂,因为他可能设计了一套属于自己的符号。而就编程而言,很多同学说善用搜索引擎,是对的,可是搜索引擎搜出来的是别人的答案。你照搬过来,也许可以用,但是你没有记住,这些知识并不属于你,之后你可能还会遇到同样的问题,又要再搜索一遍,可能很难找到之前的那个答案了。但是记笔记就不一样,记笔记是定制化的,对你自己定制,你可以用自己最爽的表达方式来描述一个问题,是自己写给自己看的东西,看了几遍之后就能非常迅速和容易地理解。之后遇到相同的问题可以快速地通过找笔记解决。举个例子,下图是我记录的一些关于gdb【linux下调试c++的工具】的使用的一些笔记。我只记录了我自己最常用的一些内容,也许你看着很乱,但是我就能很容易看懂,这就是我的定制化。记笔记的习惯一定要坚持,等过个一年或者两年,这就是你巨大的财富,因为那是只有你才能看懂的东西。我已经记录了4年多、1G多的内容,现在的笔记基本已经形成了体系,可以给大家展示其中的一部分。专业知识相关笔记:开发相关的笔记:一些类目:5.有什么比较好的编程方法?除了上述分享的一些方法,我认为在同一时间段不要学习太多类别的课程,比如你可以同时学习python和html/css,但是你不要同时学python、操作系统、编译原理、计算机组成、数据结构、网络,我曾经试过,一门课没学一会儿就学下一门,其实上一门根本学不到什么实际的知识。因为记忆知识是符合艾宾浩斯记忆曲线的。对于一门课,特别是很难的专业课,譬如操作系统,你每天看半小时,效果是比较差的,可能你热身就得半小时。所以宁可每天学两门,然后每一门学长一点的时间,比如两小时。【毕竟学校上课,一次课也得两小时】,要避免贪多,一口吃不成个胖子。6.我需要刷oj么?我认为刚开始编程的时候还是应该刷的,但是一定要注意,不要被你周围的“X神”给误导了。因为我上大学的时候,身边总是有很多搞计算机竞赛的人,他们之间都互相称对方为“X神”,某某神又使用一个牛逼的算法,将程序时间从1秒降低到了0.999秒。我要劝大家的是,刷题不是为了达到这个目的,不是说非要在竞赛中拿奖,除非你是特别喜欢,否则,没必要去背代码。我们刷题的目的是适应写代码的感觉,在这个过程中你会遇到编译错误,你会慢慢去记住一些语法、关键字,并理解一些概念,还可以自己去使用它,比如实现数据结构。慢慢的你就会变得有经验,知道一些错误产生的原因。我也是慢慢这样过来的,我现在在工作和下班以后写代码时,基本都不用IDE了,比如写c++,要么vim,要么就是sublime,而调试用的是我前面提到的工具gdb。即,有一个文本编辑器就能写代码,脱离了IDE的束缚。在写oj之后一段时间,在比较熟练了之后,就可以不去刷题了,可以去譬如github这样的网站上找点项目来看,然后自己跟着写一下,编程能力慢慢就提升了。就计算机专业来说,很多同学在大一上完编程课之后,就很少写代码了,这样是很不好的。刷题除了可以锻炼编程能力,对于找工作前突击也很有作用。比如,我之前投递过华为公司的研发岗位,校招的时候有笔试题。我就在16年国庆的时候刷了一下华为的oj,我记得笔试是600分的总分,过100就给面试机会,而我很轻松的就拿了500分,而当时也就刷了20多道华为的题。7.看书还是看视频?网上有不少人鄙视看视频学习的同学,我不知道为什么,因为我认为看视频是一个很好的学习方式。不过我们得明白看书和看视频分别有什么优缺点。其实我是很建议看视频入门的,因为目前网上的应用型【非学术型:比如清华大学的操作系统,非常难】的视频都是很简单的,很多是面向初学者的,视频能用较短的时间告诉你你现在所学的技术可以干什么,可能需要先修哪些知识,可以帮助我们搭建一个项目驱动式学习的网络。可是视频也有个缺点:就是知识非常的杂,很不系统。虽然现在很多教学网站都提供了学习路径,但是这些路径中的视频很多时候都不是同一个老师录制的,只是按照知识的依赖关系排的顺序,所以,如果想通过视频去系统地学习一门知识,是比较困难的。【当然,一些学术型的视频还是很推荐的,比如斯坦福的机器学习,清华的操作系统、数据结构等课程,能坚持看完,绝对受益匪浅】。而应用型的,比如web开发等知识,还是得看书。书籍等特点就是系统化,由浅入深,你可以定制化地看自己薄弱的章节。所以一个比较好的学习方式是:看视频入门,看书进阶。8.多久能学会编程?其实这个问题是没有答案的,如果只是想做出一个小应用,2个月足矣,而就我个人而言,我认为学习编程不是学习一种编程语言,而是学习一个生态,一个计算机系统,所以无止境。9.我应该选择什么资料,看什么书?其实这个问题也是很多编程新手容易困惑的问题。网络上拥有我们一辈子都看不完的教程和资料,所以现在应该不会存在找不着视频教程、找不着书看的问题。而问题就是我们不知道看什么视频、看什么书。从开始学编程到现在,我也买了上百本书,而真正适合自己的好书并不多。而视频教程的问题就更严重了,东看一点、西看一点,知识很难组织成网络。所以学习编程的过程中,我们遇到的最大的问题是:当我们遇到问题的时候,在大量资料面前,我们不知道选择什么资料去学习。即使我们使用项目驱动式学习的方法找到了我们的方向,但是同一个路径下,也有很多资料。前文列举的项目驱动式学习的图中,我们是自上而下的去发现问题,然后再解决问题。如果能有人帮我们组织好学习路径,然后自下而上地去学习,那么效率可能会提高很多。不过不用担心,我已经尽我所能,将我看过或者我认为好的课程和书本资料给串了串,整理好上传了,所有学习资料均免费,无任何收费课程。资料百度云地址: https://pan.baidu.com/s/11Pk-TAKuiyKaY9Llxpdj2Q 提取码: w4mk另外,很多新手反馈不会搭环境,那我给大家推荐一款可以在线运行代码的网站,那个背单词app百词斩推出的学习编程的网站,在线编辑,在线运行,避免了你搭环境的痛苦,直接运行即可,这个环境使用是免费的,点击FreeCode,选择“代码练习”新建文件就可以了:这个网站对初学者比较友好,不过目前只有Python环境,其他的环境得再等等。百词斩一直走的都是黑科技路线,并且出的课程也是采用的及时反馈的模式,也正是在他们家自己搭建的环境上,进行的一个练习,对电脑的配置也没有什么要求,甚至平板和手机等终端上都可以使用,也是按背单词那套来设计的,感兴趣的同学也可以去看看,也可以去公众号回复「免费教程」能白嫖免费的课程,感觉也还挺扎实的,实在不感兴趣的,也可以免费薅一下他家的编程环境,对电脑配置真的没有什么要求。主要是汇编语言没有难度,不论是X86系列的宏汇编,还是单片机汇编,只要一个指令手册在手,基本都可以很快上手。
当然以下几方面也是主因:
随着各种高级语言的IDE的出现,结构化编程的出现,汇编语言逐渐被取代。最有代表性的,单片机C语言代替了汇编语言。如C8051Fxxx,ARM处理器,汇编语言的劣势逐渐显现,不利于结构化编程,不支持大规模编程。一些单片机选型配置程序,只支持C语言,一些厂家的处理器售后编程服务,也只提高C语言的服务。
以C8051F124为例,虽然程序空间支特128KB,但实际上ASM只能达到64KB,只要C语言才支持段BANK,扩展至128KB,这是反复与其总部的服务工程师确认的。
X86系列的宏汇编MASM,也被C,PLM等高级语言取代。
汇编语言的执行效率要比高级语言高,但是其后期的维护成本也高,可读性差,一些老牌的公司,都在考虑汇编程序的升级换代。国际上一些知名的自动控制公司,其早期的控制软件都是用ASM或者MASM写成,特别是底层的程序。最有代表的,是以前用RTOS实时操作系统所作开发,ASM,C,PASCAL等并存,这使得维护成了大问题,统一成某一高级语言,是大势所趋。
ASM,MASM虽然高效率,但码冗长,可读性差,特别是处理浮点运算,其复杂的浮点运算指令、繁琐的ST(i)寄存器使很多人知难而退,非常容易出错。但C等高级语言基本就一条语句的事。
处理器速度大幅提高,内存空间的海量提升,也是汇编语言加速退出历史舞台的主要原因。单片机主频由十多兆提高到几百兆,X86主频更是到了GHZ的时代。
单片机再也不用纠结几百字节的内部RAM了,几十KB,几百MB也不是问题;X86的8GB,16GB内存也相当普遍,尽情地用吧,不用考虑溢出。
总之,汇编语言退出历史舞台只是时间问题,没必要花大量时间去研究它。目前最流行的C语言,就是各种汇编、宏汇编语言的极好替代品,易学好维护,执行效率也不错。各种IDE的出现、高频率的处理器、大容量的内存、海量的程序空间等工具、硬件的飞速发展,给高级语言提供了强有力的支撑,也加速了汇编语言的消亡。
首先这两个语言其实没有什么太多交集。我们大多数的迷茫都源于自己的无知。今天先来弄清楚PHP和C语言他们到底是做什么的?学习的曲线等等;
PHP是用来做什么的?
PHP是一种服务器端的脚本语言,专门是为网页开发而设计的,用途很广泛。
上面所有的只是PHP可以做的事情的大类,其实PHP能做的东西还有很多:
下面是C语言的介绍,C语言的用途:C语言还有很多趣事:比如在1969年到1973年间在AT&T贝尔实验室由Dennis Ritchie创造并用于Unix操作系统的在开发;很多后期语言是从C中直接或者间接的借出来的。其中包括Java、JavaScript、C++、python、PJP和Per;
C语言相对来说比PHP难很多,但是如果你有足够的兴趣和动力的话,这边也是建议可以的话先学C语言。因为我们可以看到上图的话,学会C语言等于学会一切。因为C实在是很强大。后期的语言都是基于C语言写出来的。
至于C语言我们该如何学习可以参考下图:
本文从以下几个方面给大家分享几本高价值书单,并不一定全面,欢迎读者补充,希望能对你有帮助。
1 关于编码与重构
1.1 代码整洁之道
英文名《Clean code》,该书出自 Robert C Martin 之手,又被称为 Bob 大叔,是一位美国著名的软件工程师和作家,他已经写了有关敏捷软件开发的书籍。书中提到众多有名的编程原则:比如 SOLID 原则、 Law of Demeter(LoD,又被称为最少知识原则)。推荐理由:每个程序员都必须拥有本书并阅读它。这是一本非常著名的书,它将完全改变您的编程风格,书中介绍的规则均来自作者多年的实践经验,涵盖从命名、数据结构、面向对象的设计原理到重构的多个编程方面,虽为一“家”之言,然诚有可资借鉴的价值。或许,真正整洁的代码真能让同行读起来像诗一样。任何傻瓜都可以编写计算机可以理解的代码。优秀的程序员编写人类可以理解的代码。— 马丁·福勒如果只能读一本书,我就推荐这本。最后,基于本书,众多开发者还推出了各种语言的整洁之道:? Javascript 整洁之道? PHP 整洁之道? ABAP 整洁之道? Java 整洁之道? .NET 整洁之道还有各大科技公司的代码风格指南:? Google 风格指南? Uber Go 语言风格指南Bob 大叔的《架构整洁之道》也值得推荐,这本书是在架构领域的登峰之作,围绕“架构整洁”这一重要导向,系统地剖析其缘起、内涵及应用场景,涵盖软件研发完整过程及所有核心架构模式。还有《程序员的职业素养》,作者以自己以及身边的同事走过的弯路、犯过的错误为例,意在为后来人引路,助其职业生涯迈上更高台阶。1.2 重构(第2版)
英文名: 《Refactoring: Improving the Design of Existing Code,2nd Edition》,作者 Joshua Kerievsky。本书是理论和实践最佳组合的罕见书籍之一。重构是一个使您的工作代码更加美丽的过程,这本书可以利用已经尝试和测试的软件开发世界的模式来为您提供帮助。推荐理由:重构一词经常在各种大会上被提及,那就是这本书带来的影响。重构也就是重写软件的过程,而无需更改其功能,以提高其可读性,可检验性或可维护性。重构是使工作代码美观的过程,重构有助于改进工作代码的设计。这也是优秀程序员的必备技巧之一,通常优秀的程序员也擅长重构。本书将教你重构代码的艺术和科学。无论您是 Java 程序员、C++ 开发人员还是 Python 开发人员,每个程序员都可以从本书中受益。与《重构》经常被提及的书就是大名鼎鼎的《代码大全》,书中解释的也是久经考验的技术和策略,能有效帮助程序员和软件开发人员。笔者也曾在大学的时候把这本书图书馆借出来,发现这本书太厚,啃不动,到期就立马归还了。1.3 代码之美
英文名:《Beautiful Code: Leading Programmers Explain How They Think》,作者:Grey Wilson。推荐理由:大牛前辈的博客合集,同时也是提高编码技能的好书之一,因为它为您提供了一个机会,让您了解专业程序员如何处理问题、编写的代码以及他们如何解决问题,并且仍然能够保持他们的代码美观。这本书是一系列案例研究的集合,揭示了 Emacs 到 Facebook 等大型网站架构秘密,讲述了那些专家程序员,包括布莱恩·克尼原,乔恩·本特利(Jon Bentley)(编程珠玑的作者),蒂姆·布雷(Tim Bray),卡尔·福格尔(Karl Fogel),迈克尔·菲瑟斯(Michael Feathers)(有效地使用旧版代码的作者),以及许多更多伟大的作者和程序员。关于二分查找,在书中数次被不同作者提及,了解不同作者的观点。无论您使用哪种编码语言,例如 Java,C#,Python 或 Ruby,都会在本书中找到有趣的东西。代码之美调查了一项努力的人类发明和创造力的范围:计算机系统的开发。每章中的美观来自发现独特的解决方案,这是作者的力量超越界限,识别他人所忽略的需求,并找到令人惊讶的解决方案,以解决令人困扰的问题。2 关于职业成长
2.1 程序员修炼之道(第2版)
英文名《Pragmatic programmer》,作者是 Andrew Hunt & David Thomas。中文版的译者是大名鼎鼎的云风,副标题是:通向务实的最高境界。推荐理由:本书是时隔 20 年的新版,覆盖哲学、方法、工具、设计、解耦、并发、重构、需求、团队等务实话题的最佳实践及重大陷阱,以及易于改造、复用的架构技术。刚出来的时候博文出版社举办了一个推广活动,在云风和皓子叔联袂推荐下,毫不犹豫的入手了本书。程序员往往最难得就是务实主义,总想追求新技术,炒新概念。工作后才逐渐明白,编程的本质,均不依赖于特定语言、框架和方法,技术改变世界在于能够有效解决用户的真实需求。本书本质上是程序员的自助指南。它探索了良好的软件开发实践,并为您提供了出色的建议、提示和技巧,以更有效地编程。正是对经典和现代轶事、引人入胜的类比和发人深省的例子的创造性使用,使每个部分的学习都变得有趣而有趣。如果说大学期间读的都是类似于 C 语言圣经和 Head First 系统书籍的话,工作后的人才会真正懂得为什么这本书籍不厚,读起来拍案叫好,这大概就是大道至简。作者另一著作:《程序员修炼之道: 从小工到专家》也是值得推荐的2.2 卓有成效的程序员
英文名:《The Productive Programmer》,作者:Neal Ford。推荐理由:本书就是讲述如何在开发软件的过程中变得更加高效。同时,《卓有成效的程序员》的讲述将会跨语言和操作系统:很多技巧的讲述都会伴随多种程序语言的例子,并且会跨越三种主要的操作系统,Windows(多个版本),Mac OS X 以及 *-nix (Unix 或者 Linux)。贯穿全文的思想大概就是尽量让机器做机器该做的事情,让程序和程序打交道,发挥程序员在这方面的先天优势。学会善用工具,命令行、学会写脚本,学会宏。提供效率,不去做重复单调的工作。最终的目的:成为一个“慵懒”的程序员。2.3 软技能:代码之外的生存指南
英文名:《Soft Skills: The software developer's life manual》,作者:John Z. Sonmez推荐理由:研究生期间读过最受益的一本非技术书。程序员都知道编码很重要,这是我们吃饭的硬技能。可是实际工作上才发现不止写代码,代码之外的软技能也很重要:比如面临着与客户沟通、与产品打交道的沟通问题;比如应该关注自身发展,书中也介绍了怎么做职业突围;还有更多章节介绍了作者如何学习、如何理财、健身、自我营销等等。分享书中有趣让我印象深刻的点是作者去面试,面试官浏览过他的博客文章,两人因此相谈甚欢。 最后也想给阅读的朋友声明一下:这本书涉猎了很多方面,但是并不是没一点都是一套可以照抄的完美答案,毕竟作者也是从当时的环境和自己经历出发介绍这些内容,每个读者应该都有自己的选择,综合而言,这本书挺适合各个阶段的人阅读的,尤其大学生和初入职场的朋友。作者也出了《软技能2:软件开发者职业生涯指南》,如果说软技能关注于生活,那软技能 2 则更加关注于了软件开发职业。3 关于黑客与开源
3.1 Unix 编程艺术
书籍英文名:《The Art of UNIX Programming》,作者:《Eric S. Raymond》从 1982 年开始就是 UNIX 开发者。推荐理由:本书涉及 Unix 系统领域中的设计和开发哲学、思想文化体系、原则与经验,由公认的 Unix 编程大师、开源运动领袖人物之一 Eric S.Raymond 倾力多年写作而成。程序会过时,编程语言会更新,代码会跟随业务不断改动,但编程思想的生命力会长盛不衰,好的编程艺术也是具有穿透力的,尽管书中的案例已经偏老,但贯穿始终的 KISS 原则、思想文化体系、设计与开发哲学一定能够给你带来醍醐灌顶的感觉。Keep it simple stupid,简称 KISS 原则。在做软件设计的工作中,很多时候都不要想得过于复杂,也不要过度设计和过早优化,用最简单且行之有效的方案也就避免了复杂方案带来的各种额外成本。这样既有利与后续的维护,也有利于进一步的扩展。另外,本书还可以与“左耳朵耗子”ef="">皓子叔推荐 过的《UNIX传奇:历史与回忆》结合着一起看,了解 UNIX 的诞生记与发展史,贝尔实验室的幕后故事!本书不但书写 Unix 的历史,而且记录作者的回忆,一探 Unix 的起源,试图解释什么是 Unix,Unix 是如何产生的,以及 Unix 为何如此重要。3.2 大教堂与集市
英文名:《The Cathedral & the Bazaar: Musings on Linux and Open Source by an Accidental Revolutionary》, 《Unix编程艺术》作者 Eric S. Raymond 的另一封神之作,副标题是《对 Linux 和开源革命的沉思》。推荐理由:大家都知道程序员热衷于开源文化,都在说不要重复造轮子。开源时代下的软件开发可能只需要三个键盘按钮:CTRL + C + V,开个玩笑。说到开源文化,那么本书《大教堂与集市》是开源运动的《圣经》,颠覆了传统的软件开发思路,影响了整个软件开发领域。作者把软件开发思路类比于古代的大教堂文化和集市文化,讲述了集市如何变成大教堂,书中系统解释了开源软件是如何生产的,开源开发的优势在哪,开源软件的传承是如何做到的。3.3 黑客与画家
英文名:《Hackers and Painters: Big Ideas from the Computer Age》,作者:Paul Graham,本书的译者是大名鼎鼎的阮一峰大佬。推荐理由:说到黑客文化,就不得不提到硅谷创业之父Paul Graham 的这本书,本书主要介绍黑客 Hacker,即优秀程序员的爱好和动机,讨论黑客成长、黑客对世界的贡献以及编程语言和黑客工作方法等所有对计算机时代感兴趣的人的一些话题。本书是一本为黑客正名的技术散文集,看完书后第一次将我从电影中的黑客形象颠覆过来,才了解到并不是入侵系统、制作病毒、各种解密的人就是黑客,Hacker 是专家级程序员,是一群与画家有着极大的相似性,他们都是在创造,而不是完成某个任务,“黑客”象征着第一流的能力,以及求解问题过程中产生的精神愉悦或享受。他们崇尚分享、开放、民主、计算机的自由使用和进步。而那些恶意入侵计算机系统的人更应该被称为 cracker(骇客)。4 关于算法与设计模式
4.1 算法设计手册
英文名:The Algorithm Design Manual (2nd Ed.),作者:Steven S Skiena推荐理由:关于算法的重要性大家都知道,大家肯定都知道另外两本著名的《算法导论》和《算法4》:《算法导论》侧重与算法的数学推导,适合研究,而《算法4》侧重于算法的代码实现,适合入门。而这次推荐的《算法设计手册(第2版)》却没有那么有名气,但也不失为设计实用且高效算法的最全面指导书。该书揭密了算法的设计与分析,以简单易懂的写作风格,介绍了各种算法技术,着重强调了算法分析。目前市场上算法书层出不穷,但是经典的算法却一直在那里,不曾走远。4.2 Head First 设计模式
英文名:《Head first design patterns》,作者:Elisabeth Freeman / / Eric Freeman / Bert Bates / Kathy Sierra / Elisabeth Robson推荐理由:这本书完整地涵盖了 GoF 版本全部23个设计模式,毫不费力地解释了世界各地熟练的软件开发人员和程序员用来构建优雅、功能齐全、灵活和可重用的软件的几种软件设计模式。。图文并茂,配有大量说明性和启发性的示例,它们将使学习同时变得高效和有趣。与其他文本繁重的编程书籍不同,这本书具有引人深思、视觉丰富的格式。Head First 系统书籍充满了幽默感,选题和编辑都很用心,值得一读。相信读完的读者逐步迈向对软件设计模式的深入了解。再来读 GoF 不失为一个不错的选择。4.3 设计模式:可复用面向对象软件的基础
英文名:《 Design Patterns: Elements of Reusable Object-Oriented Software》,又被简称为计算机领域的 GoF ,因为本书的作者是四个人:Erich Gamma / Richard Helm / Ralph Johnson / John Vlissides。推荐理由:本书是任何使用面向对象代码的开发人员的必备入门读物。而且作者 Erich Gamma 是 jUnit、Eclipse、IBM Jazz 项目、Visual Studio、Azure 和 Office 365 的幕后推手。如果您没有很好地掌握 UML,您可能会发现很难吸收编程书中汇编的一些信息和示例。然而,这不会阻止您欣赏设计模式书中叙述的美妙之处,它既简单又内容丰富。《设计模式》一书详尽地解释了 23 种软件设计模式,可帮助软件开发人员和设计人员制作更好、更优雅、更灵活的软件。这本书讨论了针对常见软件设计问题的大量简洁明了的解决方案。如果说 GoF 太难读下去,那么就推荐程杰的《大话设计模式》,这本书通过对话的形式带领大家入门设计模式,人人都可以是好学的小菜和经验丰富的大鸟。4.4 编程珠玑(第2版?修订版)
英文名:《More Programming Pearls,Second Edition》,作者:John Bentley推荐理由:这是一本带你真正领略计算机科学之美,融深邃思想、实战技术与趣味轶事于一炉的奇书。与大多数其他编程书籍不同,这本书侧重于基本问题和一般问题。它讨论了可以提高性能或减少内存需求的各种算法和技术。作者选取许多具有典型意义的复杂编程和算法问题,生动描绘了历史上众大师们在探索解决方案中发生的轶事、走过的弯路和不断精益求精的历程。就如书名一样,大浪淘沙,计算机科学中的智慧正如自然界里珍珠出自细沙对牡蛎的磨砺,留下一个个编程“珠肌”。题外话:
上面的书都是本人曾经阅读过,或者说在图书馆中有借阅翻过的书。也是计算机领域评分很高、有口皆碑的书籍。但计算机行业的经典书籍太多,本人能推荐的也只是其中一部分,想要推荐的内容也不想针对某个特定编程语言和领域,所以像《C++编程思想》和《On Java8》这类书籍没有进行推荐,推荐理由也不一定完全正确,欢迎大家批评指正。另外,看完上述的书并不能说自己就能在工作中就能运用到,看完就能成为一个顶尖的程序员。何况看书也不能完全接收前辈们的这些大智慧,但如果在某个瞬间(看书过程或者实践过程中)对自己有一种醍醐灌顶的感觉,就已足够。参考链接:
? UNIX传奇(上篇)? 假期好读书? Top 5 Books to Improve Coding and Programming Skills? wtfm.jpg本文分享自华为云社区《【云驻共创】对于编程思想和能力有重大提升的书有哪些》,作者:宇宙之一粟 。
以下是全国可报的书法专业院校:
书法专业招生院校(国家统招本科):
北京市
1、中央美术学院
http://www.cafa.edu.cn/sp/zs/?ci=802
2、中央财经大学
http://zs.cufe.edu.cn/bkzsw_new/
3、北京语言大学
http://zsb.blcu.edu.cn/index.html
4、北京师范大学
http://admission.bnu.edu.cn/
5、北京城市学院【民办】
http://zs.bcu.edu.cn/
6、首都师范大学科德学院
http://www.kdcnu.com/work/zsjz/
天津市
7、天津美术学院
http://zsbgs.tjarts.edu.cn/index/bkzs.htm
河北省
8、河北大学
http://zhaoban.hbu.cn/
9、河北师范大学(面向河北)
http://zsjy.hebtu.edu.cn/zsw/
10、保定学院(面向河北)
http://221.192.237.22:8018/zhsh/default.html
11、廊坊师范学院(面向河北)
http://www.lfsfxy.org.cn/zsk/
12、沧州师范学院(面向河北)
http://www.caztc.edu.cn/gzzd/index.shtml
13、河北民族师范学院(面向河北)
http://www.hbun.net/smartcore/web/site9/index.htm
14、河北传媒学院【民办】
http://zs.hebic.cn/
15、河北美术学院【民办】
http://zsc.hbafa.com/
16、河北师范大学汇华学院(面向河北)
http://222.30.226.10/zhaosheng/
河南省
17、河南大学
http://zs.henu.edu.cn/
18、郑州大学
http://ao.zzu.edu.cn/
19、许昌学院
http://zs.xcu.edu.cn/
20、商丘师范学院、
http://zhaoban.sqnu.edu.cn/
21、洛阳师范学院
http://183.170.0.11/system/index.php?m=content&c=index&a=lists&catid=194
22、安阳师范学院(面向河南)
http://zs.aynu.edu.cn/
23、河南科技学院
http://zsxx.hist.edu.cn/
24、安阳学院【民办】
http://www.ayrwedu.cn/zsxxw/
25、河南大学民生学院
http://zs.humc.edu.cn/
26、周口师范学院
http://zs.zknu.edu.cn/
山东省
27、山东大学
http://www.bkzs.sdu.edu.cn/
28、山东艺术学院
http://zsbgs.sdca.edu.cn/
29、山东工艺美术学院
http://zs.sdada.edu.cn/
30、临沂大学
http://zhaosheng.lyu.edu.cn/
31、聊城大学
http://zsb.lcu.edu.cn/
32、曲阜师范大学
http://www.qfnuzsb.com/Index.html
33、齐鲁师范学院
http://qlnuzs.university-hr.com/default.php#
34、菏泽学院
http://zsjy.hezeu.edu.cn/
35、泰山学院
http://zhaosheng.tsu.edu.cn/
36、齐鲁理工学院(原曲阜师范大学杏坛学院)【民办高校】
http://www.xtxy.cn/zsw/
http://www.qlit.edu.cn/zsw/
山西省
37、山西大学
http://bkzs.sxu.edu.cn/
38、山西师范大学(只招山西)
http://zsb.sxnu.edu.cn/
39、太原师范学院
http://zjc.tynu.edu.cn/Default_Adm.html
40、晋中学院[只招山西]
http://zs.jzxy.edu.cn/
41、忻州师范学院【只招山西】
http://zs.xzsyzjc.cn/
42、山西大同大学【只招山西】
http://sxdtdxzs.university-hr.com/
43、山西应用科技学院【民办】
http://www.sxxh.org/col.jsp?id=462
44、山西师范大学现代文理学院(只招山西)
http://www.xdwl-sxnu.cn/index.php?p=news_list&c_id=28&lanmu=9
45、吕梁学院
46、太原学院
http://zhaosheng.tyu.edu.cn/
陕西省
47、陕西师范大学
http://zsb.snnu.edu.cn/
48、西安美术学院
http://www.zhshch.xafa.edu.cn/
49、西安交通大学
http://zs.xjtu.edu.cn/
50、西安工业大学
http://zsb.xatu.cn/
51、咸阳师范学院
http://zsb.xync.edu.cn/
52、渭南师范学院
http://www.wntc.edu.cn/index/tzgg.htm
53、西安思源学院
http://www.xasyu.cn/
54、西安交通大学城市学院
http://zhaoban.xjtucc.cn/index.php?m=content&c=index&a=lists&catid=10
55、西安文理学院http://zsb.xawl.org/
56、陕西学前师范学院
http://www.snie.edu.cn/
安徽省
57、淮北师范大学
http://hbcnczs.go od-edu.cn/
58、宿州学院
http://zjc.ahszu.edu.cn/zs/
59、合肥师范学院
http://zsb.hfnu.edu.cn/
江苏省
60、南京师范大学
http://bkzs.njnu.edu.cn/
61、南京艺术学院
http://zhaosheng.nua.edu.cn/
62、江苏师范大学
http://bkzs.xznu.edu.cn/
63、淮阴师范学院
http://zjc.hytc.edu.cn/zhaosheng/
64、南京师范大学泰州学院
https://zs.nnutc.edu.cn/
65、泰州学院
http://zsb.tzu-edu.cn/
上海市
66、上海师范大学
http://ssdzsb.shnu.edu.cn/
浙江省
67、浙江大学
http://zdzsc.zju.edu.cn/
68、中国美术学院
http://zb.caa.edu.cn/bkszs/bkzsxx/
69、杭州师范大学
http://bkzs.hznu.edu.cn/index.action
70、绍兴文理学院(兰亭书法艺术学院)
http://zs.usx.edu.cn/
江西省
71、上饶师范学院
http://zsjy.sru.jx.cn/
72、宜春学院
http://zsw.ycu.jx.cn/zsw/
73、景德镇陶瓷大学
http://zs.jci.edu.cn/
福建省
74、泉州师范学院
http://zs.qztc.edu.cn/
广东省
75、暨南大学
http://zsb.jnu.edu.cn/
76、广州美术学院
http://www.gzarts.edu.cn/zsjy/bkzs.htm
77、岭南师范学院
http://zsb.lingnan.edu.cn/
78、肇庆学院
http://wxy.zqu.edu.cn/index.htm
http://zsb.zqu.edu.cn/
79、韩山师范学院
http://zsb.hstc.edu.cn/
80、中山大学新华学院
http://zsb.xhsysu.edu.cn/
广西壮族自治区
81、广西艺术学院
http://zsb.gxau.edu.cn/
82、广西师范大学
http://bkzs.gxnu.edu.cn/
83、广西师范学院
http://zjc.gxtc.edu.cn/zsxxw/
海南省
84、海南师范大学
http://www1.hainnu.edu.cn/zhaosheng/
85、琼台师范学院
http://zhaosheng.qttc.edu.cn/default.html
云南省
86、云南艺术学院
http://www.ynart.edu.cn/index.shtml
87、云南师范大学
http://zsc.ynnu.edu.cn/default.aspx
88、昭通学院
http://zjc.ztu.edu.cn/index.htm
89、楚雄师范学院
http://cnuzsjy.cxtc.edu.cn/
90、曲靖师范学院
http://zsjyc.qjnu.edu.cn/index.php?a=lists&catid=2
91、玉溪师范学院【美术大类招生,大二分专业】
http://zb.yxnu.net/
92、大理大学
http://zs.dali.edu.cn/
贵州省
93、贵州师范大学
http://zjc.gznu.edu.cn/bkzs/index.aspx
94、贵州民族大学
http://zjc.gzmu.edu.cn/zsxxw.htm
湖南省
95、湖南人文科技学院
http://hnrkuzs.university-hr.cn/
96、湖南第一师范
http://zhaosheng.hnfnu.edu.cn/
97、长沙师范学院
http://zs.cssf.cn/
湖北省
98、湖北美术学院
http://zjc.hifa.edu.cn/
99、湖北师范大学
http://www.zsxx.hbnu.edu.cn/
100、汉江师范学院(原郧阳师专)
http://zsjy.hjnu.edu.cn/zs/
重庆市
101、四川美术学院
http://www.scfai.edu.cn/zsb/bkszs.htm
102、重庆师范大学
http://zsb.cqnu.edu.cn/
四川省
103、 四川大学
http://zs.scu.edu.cn/
104、四川文化艺术学院【民办】
http://zjc.cymy.edu.cn/index.html
105、成都文理学院
http://zs.cdcas.edu.cn/
106、西华师范大学
http://www.cwnu.edu.cn/
甘肃省
107、西北师范大学
http://zsb.nwnu.edu.cn/
108、甘肃民族师范学院
http://zsc.gnun.edu.cn/
内蒙古自治区
109、内蒙古科技大学
http://zhaosheng.imust.cn/
110、内蒙古艺术学院
http://zs.imac.edu.cn/
111、呼伦贝尔学院
http://zsjy.hlbrc.cn:81/
黑龙江省
112、哈尔滨师范大学
http://zsb.hrbnu.edu.cn/
113、黑河学院
http://www.hhxyzsb.com/index.asp
吉林省
114、吉林艺术学院
http://zsb.jlart.edu.cn/recruit/index/index
115、长春师范大学
http://zhaosheng.cncnc.org/
116、吉林建筑大学
http://zj.jlju.edu.cn/
117、吉林师范大学
http://web.jlnu.edu.cn/zsb/
118、吉林建筑大学城建学院
http://zsjy.jlucc.edu.cn/index/mainUI.xhtml
辽宁省
119、鲁迅美术学院
http://www.lumei.edu.cn/z_s/bks.htm
120、鞍山师范学院
http://202.199.249.135/
121、大连艺术学院【民办】
http://zsgzc.dac.edu.cn/
122、辽宁传媒学院
http://www.lncu.cn/zhaosheng/
高职(专科)院校
1、廊坊燕京职业技术学院【公办专科】
http://zsjyxx.lfyjzjxy.com/
2、曲阜远东职业技术学院【民办专科】
http://www.fareast-edu.net/#
3、石家庄理工职业学院【民办高职】
http://www.ltc789.com/
4、北京传媒艺术职业学院【民办高职】
http://www.bjamu.cn/index.jsp
5、河北对外经贸职业学院(原河北外国语职业学院)【只招河北】
http://www.hbvcfl.com.cn/Channel.aspx?ChId=99
6、运城师范高等专科学校【只招山西】
http://www.sxycsf.com/index.php?m=content&c=index&a=lists&catid=45
7、晋中师范高等专科学院
http://www.sxjzsf.com/zhaoshengjiuye/zhaosheng/
8、合肥幼儿师范高等专科学校【只招安徽】
http://zsb.hfpec.edu.cn/index.php
9、四川艺术职业学院【只招四川】
http://zs.scapi.cn/
10、赣州师范高等专科学校
http://zy.ganzhsz.cn/s.php/zsjy/
11、济源职业技术学院
http://www.jyvtc.com/zs/index.html
民办高校(非国家统招)
1、北京民族大学【民办高校】
http://zs.bjmzdx.org/
2、北京人文大学【民办高校】
http://www.bjrwdx.com/
暂停招收(书法)院校
由于种种原因,某些院校停止了书法专业招生,之前也为中国培养了大批书法人才,我们值得怀念!
西南大学、佳木斯大学、齐齐哈尔大学、贺州学院、南京航天航空大学、三峡大学、桂林电子科技大学、中国人民大学、宁波大学、德州学院、南开大学、郑州美术专修学院、昆明医科大学海源学院、陇东学院、北京经贸职业学院……
以上就是关于php大学教程以及如何快速学习编程的相关回答,有更多疑问可以加微。Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有