编程入门_编程入门自学 - CSDN
精华内容
参与话题
  • 自学编程怎么入门

    万次阅读 2019-01-08 23:32:19
    其实这是一个老生长谈的...我觉得每个人学习编程先问一下自己这个问题,到底是自己喜欢编程,还是看到互联网公司的高薪资,不得不说表面上程序猿的薪资比其他行业是高的多的。我毕业4年,真正开始编程6年了,自己编...

    其实这是一个老生长谈的问题,就像毕业了去大公司还是小公司好一样。虽然这个问题已经被问烂了,但是不同的人有不同的看法,每个过来人的学习路径不一样,有的效率高,有的效率低,总结出的学习经验学习方法也不一样。

    为什么学习编程

    我觉得每个人学习编程先问一下自己这个问题,到底是自己喜欢编程,还是看到互联网公司的高薪资,不得不说表面上程序猿的薪资比其他行业是高的多的。我毕业4年,真正开始编程6年了,自己编写的第一个软件是淘宝店铺商品管理小工具。 我是非科班出身,本科是牛批的生物技术,其实报考生物专业也纯属偶然,这个以后矫情的时候会跟大家唠唠。下面来说说看薪资的编程兴趣使然的编程有什么不同。

    • 看钱类

    这类童鞋学习编程纯粹的是为了一份工作,想获得更高的收入才转行学习编程。又或者是一些刚毕业的学生听说编程行业就业不错工资高,去培训学习编程,然后进入互联网企业, 上面说的是最常见的为了工资进入编程行业的两类。其实这类童鞋很多来自农村或者一般家庭(我也是来自农村还是贫困县,渣二本毕业)。对他们来说编程是获得高收入的最直接途径,也是在城市立足的最有效的一种保证。

    • 兴趣类

    这类人大部分科班出身,或者即使不是科班出身也比较爱折腾,在学生阶段就开始学习编程。他们对编程有着浓厚的兴趣,一旦入门之后,基本出现什么新技术他们都爱去折腾,不断的汲取新知识,自主学习能力较强。当然也有很多人是进入编程行业之后突然有了兴趣的,这个另说。

    应不应该报培训班

    不管是兴趣类的还是看钱类的,刚入门的新人,毕业找工作的第一件事情就是,我要不要报个培训班,培训一下去找工作。尤其是在当前大环境下,动不动爆出个裁员消息的情况下,很多人精神紧张,甚至很多工作两三年的人去报什么进阶班,大神班。

    报不报班完全看个人情况,如果你是新人,非科班,对计算机概念比较陌生,无头绪,那么可以看自己经济能力报班。经济能力如果不允许可以去找一些系统的教程,找一些知名的培训机构的实际教学录制教程。从头看到尾,也能入门。甚至学完后找到一份不错的工作,这个完全靠自觉来学习了。(哪些机构比较好,这里不方便说,可以私信我,有问必答)

    还有一些同学是快毕业了,又要找计算机的工作,或者已经毕业能力不达标,想去培训一下,也是可以的。

    既然标题都说了,如何自学编程,我给的建议是能自学尽量自学。完全可以靠自学入门,无非是自己入门难,自己一头雾水,总是在学习方向上很迷惘。要学习哪些东西,先学什么后学什么,觉得这也要学那也要学。然后自己也刷了很多题,也接触了很多方面,既知道前端又知道后端。但是什么都不精,过来人告诉你这种状态很危险。去小公司同事会觉得你牛批,全能小王子。但是去大公司面试基本上问深一点就挂了。知识的深度决定你的高度。

    那么自学应该怎么学呢,篇幅有限这里不可能给你列出所有的详细的计划来。只能大体上给点规划建议。

    1). 第一点:别乱加群
    别乱加群,什么前端群,后端群,什么node群,php群。注意说的是不乱加群,不是不加群,别杠精一会跑来找我理论。 如果你加了群,你会发现80%的群是没用的,要么是培训机构的群,动不动什么两小时学习百度阿里的亿级流量架构,2小时教你剖析linux内核,好的机构还好,让你知道个概念,差的机构让你更迷茫浪费时间。又或者是一群扯淡群,大家在群里闲聊,斗图斗的不亦乐乎。这一天下来神清气爽,总是对着屏幕偷偷乐。几个月过去了,毛都没学到。

    加群要学会甄别,真正有营养的群很少,多动脑思考下辨别一下。

    2). 第二点:要有计划
    一定要有计划,并付诸行动,一个阶段一个阶段去学习,不要每天既学java,又学前端。有计划才能让自己有深度。如果你现在在学习java web那么就制定好完整的学习计划,列出要学的知识点的思维导图。可能刚开始的思维导图枝枝叶叶很多,但是排好优先级,各个攻破绝对是一种成就。可以尝试下百度脑图,列出所学的知识点,标注好优先级,各个击破。

    3). 第三点:专一专注
    如果你是做web的后端工程师,那么你要先专注把后端做好,后端做精了,你可以横向发展拓展自己的知识面,前端可以偶尔了解一下,菜吃腻了也要换换口味,但是了解归了解,不要忘本。扩展自己的知识面可以完整的清楚一个项目是怎么运行的,怎么构建在服务器上的,linux,nginx等等周边也可以深入了解一下。尤其是在前后端分离盛行的今天,有些前端不知道后端是什么样的,有些后端对js,ajax等一窍不通,在现成的框架上实现个api就是日常工作,一旦脱离不知道从哪下手。

    横向发展也要专注自己所在的领域,比如web领域。这样知识面广了,如果自己的本行比如后端java又比较精通,那么很有潜力往架构师之类的方向发展。

    4). 第四点:多写多改
    要有动力去改自己的代码,多看优秀开源软件,学着去用,一些好的代码编写方式尝试用到自己项目中,别怕出bug被人骂,出bug可以改,只要不是恶意为之没关系。 bug出了,自己能力也到手了,编程能力和经验,就是解bug和制造bug的能力。bug解多了,在新手面前可以装比。老哥我这里出现了bug,我改了哪里哪里…。不等他说完,你眼一撇,是不是判断写反了,这时候绝对对你佩服的五体投地。

    多改多写,对自己写的不好的代码优化,其实是一种能力的锻炼,也是对项目负责,短期bug变多了,改坏了,长期是有好处的。工作都是为了钱,除非家里有矿。锻炼自己的能力最重要,个人成长才是真的成长。别上个班上升到什么民族大义了,效益不好,老板该让你滚蛋你还是得滚蛋。

    打铁还需自身硬。

    5). 第五点:多面试
    说这一点,我感觉要被人打,其实面试是最快的短期提升自己的方式。面试一些自己不想去的公司,可以知道自己距离企业的要求有多远,可以知道自己哪些不足,针对性的调整弥补。其实面试你会发现也就问那些知识点,只是深度不一样,一些企业问偏题,甚至翻遍所有资料都找不到记录的,这种的就当什么没听见好了,反正你也不会去。

    我一个朋友之前面试过几家公司,作为真正跳槽前的准备,就起到了很好的效果。特别一些公司爱引导面试者回答问题,由浅及深更佳。

    希望勿喷,实际就是这样。

    ——– 分割线 ———–


    扯到这里,下次聊聊遇到瓶颈怎么办。理论扯完后面开始上干货, 本人专注于java和go后端开发,主要对高并发和微服务比较感兴趣,欢迎来撩。

    其实偶尔也写写界面啦,现在比较喜欢做产品和思考职场,写写文章。

    展开全文
  • 编程怎么入门

    2019-05-29 08:58:24
    那么,对于一个完全零基础的人,想学习编程,该怎么入门呢? 网上的建议千千万,说啥的都有,推荐各种语言,各种工具的。 估计大家看的都摸不着头脑了吧,这到底该听谁的呢? 来,看看台哥怎么说,我的看法呢,编程...

    现在的社会,大家对编程越来越有兴趣了。
    工作了的人,觉得学点编程,对工作会有帮助。
    上学的学生,觉得学点编程,能培养逻辑思维。

    那么,对于一个完全零基础的人,想学习编程,该怎么入门呢?
    网上的建议千千万,说啥的都有,推荐各种语言,各种工具的。
    估计大家看的都摸不着头脑了吧,这到底该听谁的呢?

    来,看看台哥怎么说,我的看法呢,编程是个好玩的事,
    要尽快的、简单的、直接的,让大家先了解到它的好玩,
    只有体会到了好玩有趣,对编程的兴趣才不会减,才更愿意学习。

    那么这里,我所推荐的编程入门,是VB,
    为什么呢,因为它简单呀,一两天就能入门了,
    它的开发,是拖拉拽式的,所见即所得,特别适合初学者。

    先去下载个VB6.0开发工具,只有6M大小,安装后打开,
    新建一个工程,界面如图所示,

     

    屏幕中间的Form,其实就是软件运行后的样子,可以从左侧的工具箱里,
    把控件直接拖拉到Form上,在右侧的属性窗口里设置控件的各种属性。

    至于控件的事件,是通过双击进入代码环境下编辑。

    我这里就这么简单介绍下。推荐大家找本VB的书,照着练习,大概一两天的学习,就可以自己做出些简单的小程序了。

    欢迎来到编程的世界。。

    展开全文
  • 自学编程入门,先学什么语言好?

    千次阅读 2020-04-13 16:55:29
    从事IT教学7年,常常有同学私信我:零基础入门IT该学什么语言?我的回答一律是:学Python。 为什么零基础入门该学Python? 1.易上手,语法简单 对初学者来说,学Python能更快找到工作,投入产出比高。在一场45分钟的...

    从事IT教学7年,常常有同学私信我:零基础入门IT该学什么语言?我的回答一律是:学Python。

    为什么零基础入门该学Python?

    1.易上手,语法简单

    对初学者来说,学Python能更快找到工作,投入产出比高。在一场45分钟的面试中,Python相对于Java能节省10分钟Coding时间。并且,早期的成就感是学习编程的一个非常重要的因素。

    简单≠没用,Python的许多工具使机器学习变得容易,随着数据科学和人工智能的兴起,机器学习的很多库都是用Python编写。

    2.应用范围广

    Python可以用来构建网站、开发GUI、分析数据、将其他语言“粘合”在一起,这意味着只需要这一门语言来满足您所有的开发需求。

    3.供不应求

    目前世界上有2300万开发人员。到2030年这一数字预计将增长为2770万。在全球范围内没有确切的Python开发人员数量,因为这个数字在不断增长。

    然而,正如TIOBE研究报告所指出的,Python开发人员占全球所有开发人员的5.761%。(所以大概是1325万人)


    资料来源:TIOBE Index for June 2018

    现在Python开发人员有限,大部分已有工作。所以目前高质量Python开发人员现在在就业市场,还是供不应求。

    4.薪资高

    先看国内Python岗薪资~
    image
    统计出自:https://github.com/juwikuang/china_job_survey

    再看美国Python岗热门城市的平均薪资~(10万-13万美元之间)
    image

    5. 国家政策

    2018年起,Python进入浙江省信息技术高考,山东省最新版的小学教材也加入了Python内容。

    小学生都开始接触Python语言了!跟紧国家政策准没错!

    Python怎么学?

    不建议一上来就看大部头书,你学Python是为了找工作。

    可以试听《零基础找CS工作,如何准备》,先搞清楚Python岗面试内容、学习路径、入门基础,理清学习思路能节省50%以上准备时间。

    下面推荐一些Python网课和书籍。

    Python Tutorial for Beginners (For Absolute Beginners)

    油管上的面向初学者的Python视频教程,主要是用语言讲解一些基础结构。

    image

    九章基础算法班(Python3)

    课程口碑很好,很多人推荐。由Top1名校毕业、资深算法工程师、FLAG面试官、ACM算法竞赛金牌获得者张三疯老师讲授。

    现在大厂面试越来越流行面算法了,这门课Python和算法都能cover到,非常适合小白入门或有转专业找工作需求的小伙伴们。

    廖雪峰的Python教程

    从Python的历史讲到Python在各方面的应用,深入浅出,循序渐进。不过需要对计算机和编程语言的一些基础知识有一些了解。

    Introduction to Scripting in Python Specialization

    Coursera上的Python教程,从一开始介绍一些基础的Python理论知识慢慢的引导到在实际案例中的应用,可以慢慢的对Python由越来越深的理解也能一步一步加强对Python内容的应用能力。

    image

    书籍

    入门阶段

    Python编程:从入门到实践

    一本针对所有层次的Python用户的Python入门书,涉及到关于Python的很多的基础概念并且辅以练习。前半讲理论后半重实践,会以实际的开发项目的讲解引导读者进一步学习这门语言。

    image

    父与子的编程之旅

    是一对父子共同创作,适合家长和孩子共同学习的一本编程书,从基础内容开始讲解到后期实现游戏的编程,为了增加趣味性而在其中添加了很多的卡通形象。由于其中内容讲解的较为基础,所以也适合普通的初学入门者学习。

    image

    笨办法写Python

    适合对计算机和编程了解不多的读者学习,通过简单习题的方法引导读者一步一步的去学习编程,让读者从简单的编程技术开始,慢慢的体验到软件开发的完整过程。这个系列在海外有着十分广泛的群众基础。

    image

    进阶阶段

    流畅的Python

    致力于让广大Python程序员能把代码写的更流畅,减少重复劳动,并且会涉及到一些Python语言中的高级用法,帮助很多的中高级程序员进一步的去理解和使用这一门语言。

    image

    Python Cookbook

    介绍了Python应用在各个领域中的一些使用技巧和方法,对于有一定Python编程经验的人来说是一本实用的工具参考书。书中包含了大量实用的编程技巧和示例代码,并在Python 3.3环境下进行了测试,可以很方便地应用到实际项目中去。

    image

    Effective Python

    副标题是叫《编写高质量Python代码的59个有效方法》,内容上主要涵盖了很多的Python方面的代码实用范例,而且还提出了很多方案让用户能避开写代码时会遇到的问题。

    image

    实际应用方面

    利用Python进行数据分析

    image

    通过大量详细的案例分析,利用多种Python的数据库来讲解Python在数据分析方面解决实际问题的方案,适合刚刚接触Python的分析人员以及刚刚接触科学计算的Python程序员。

    Python 3网络爬虫开发实战

    爬虫也算是Python的一种非常广泛的应用了,很多的大数据产品都是利用Python来爬虫。这本书属于近两年国内在爬虫方面写的非常优秀的一本书了。

    image

    Python深度学习

    这本书作者是目前使用最广泛的深度学习框架Keras的发布者,从这一点上来说,权威性得到了保障。这本书并不需要特别深刻的机器学习知识,读者在学习完这本书之后将获得搭建自己的深度学习环境的能力。

    image

    展开全文
  • 史上最全 | 编程入门指南

    千次阅读 2018-01-22 03:02:15
    点击上方“程序人生”,选择“置顶公众号”第一时间关注程序猿(媛)身边的故事内容源自:https://zhuanlan.zhihu.com/p/19959253前言如今编程成为了一个越来越重要的「技能」:作为设计师,懂一些编程可能会帮你更...
        

    点击上方“程序人生”,选择“置顶公众号”

    第一时间关注程序猿(媛)身边的故事


    640?wx_fmt=jpeg&wxfrom=5&wx_lazy=1

    内容源自:https://zhuanlan.zhihu.com/p/19959253


    前言

    如今编程成为了一个越来越重要的「技能」:作为设计师,懂一些编程可能会帮你更好地理解自己的工作内容;作为创业者,技术创始人的身份则会让你的很多工作显得更容易。而作为刚想入门的新手,面对眼前海量的信息,或许根本不知道从哪里开始;入门轻松度过初级材料的学习后,发现学习越来越困难,陡峭的学习曲线又让你望而却步;你知道如何在页面上打印输出一些文本行,但是你不知道何时该进行一个真正的有用的项目;你不清楚自己还有哪些不知道的东西,你甚至搞不清下一步该学什么。


    这篇文章的内容对此不仅会有一些方向性的建议,还会包含一个基础核心向的编程入门导引。当然,Step by Step 的路线是不现实的,并且每个人都会有自己的特点,所以给出的这个编程入门导引更多的是为了引发读者的思考,最终帮助你形成适用于自己的学习路线。


    但要注意:这篇文章是写给那些真心想学编程的人看的——那些憋着一股狠劲儿,一定要做出个什么真东西,不学好不罢休的人;而不是那些「听说编程好玩」的人,在我看来,这种人永远都入不了编程的门,更别提做出个像样的东西来了。


    心态调整

    0?wx_fmt=jpeg


    01

    确定目标

    在你学习编程之前思考一下你的目标,当你有最终目标时道路会更加的清晰。那么,你想要写什么?网站?游戏? iOS 或者 Android 应用?或是你是想自动化完成一些乏味的任务让你有更多的时间看窗外的风景?也许你只是想更具有就业竞争力找个好工作。所有的这些都是有价值的目标,这些目标都是你编程学习推动力的一部分,没有推动力的人,是无法在略显枯燥的漫长学习之旅中走远的。


    这段视频也许能给你启发:

    http://v.youku.com/v_show/id_XNTIzNzE2NzQ4.html


    02

    不要浮躁

    Bad programming is easy. Even Dummies can learn it in 21 days. Good programming requires thought, but everyone can do it and everyone can experience the extreme satisfaction that comes with it.


    不管是在线下还是线上的书店,满目都是《21天学通 X》这种速成书目,它们都承诺在很短一段时间内就让你能够学会相关技术。Matthias Felleisen 在他的著作 How to Design Programs 一书中明确指出了这种「速成」的趋势并予以了以上的讽刺。


    所谓的「捷径」或者说「银弹」是不存在的,智者说过,精通某个东西需要10年或10000个小时,也就是汉语中的「十年磨一剑」,所以不用着急,功不唐捐。

    03

    培养兴趣

    Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.

    – Linus Torvalds


    沉醉于编程,编程更是为了兴趣。兴趣是推动力的不竭源泉,保持这种充满兴趣的感觉,以便于你能将其投入到你的10年/10000小时的编程时间中。编程很有趣,那是探索的喜悦。那是创造的喜悦。看到自己亲手完成的作品显示在屏幕上很有趣。有人为你的代码而惊叹很有趣。有人在公共场合称赞你的产品、邻居使用你的产品、以及在媒体上讨论你的产品很有趣。编程应该十分有趣,若并非如此,就找出导致编程无趣的问题,然后解决之。


    开始学习

    01

    令人警醒的故事

    刚上初中时我便开始了编程学习,很不幸,我读完了好几本当时普遍存在的诸如《21天精通C++》这类的垃圾书,当时读完也无大碍,甚至还能写点小程序。但是软件出故障了我不知道为什么,稍显庞大的编程问题无从下手,碰到现有的库做不到的事也只能两手一摊。虽然我每天不停地编码,但我发现自己的编程能力却是提高的如此缓慢,对于「迭代」与「递归」的概念只有极其有限的了解,可以说只是把计算机当成了计算器来使用。


    进入大学后,我主修了物理学,最初的一段时间里我一直在记忆背诵那些物理公式,却不理解她们是如何得出的,她们之间有什么联系,亦或是她们的意义。我不停地学习如何计算解答一些常见的物理问题,却对在这些 How 背后的 Why 一无所知。


    而在我尝试做一些基于物理行为的电脑游戏时我再次遇到了之前的的困难:面对新问题时无从下手,面对新问题时的恐惧不断累积滋生,我开始主动逃避,不去真正地理解,而是幻想能通过Google搜索复制粘贴代码解决问题。幸运的是,大二时的一堂课完全改变了我的学习方法。那是第一次我有了「开天眼」的感觉,我痛苦地意识到,我对一些学科只有少的可怜的真正的理解,包括我主修的物理与辅修的计算机科学。


    关于那堂课:那时我们刚刚学习完电学和狭义相对论的内容,教授在黑板上写下了这两个主题,并画了一根线将他们连了起来。「假设我们有一个电子沿导线以相对论级别的速度移动…」,一开始教授只是写下了那些我们所熟悉的电学与狭义相对论的常见公式,但在数个黑板的代数推导后,磁场的公式神奇的出现了。虽然几年前我早已知道这个公式,但那时我根本不知道这些现象间的有着这样潜在的联系


    磁与电之间的差别只是「观察角度」的问题,我猛然醒悟,此后我不再仅仅追求怎么做 (How),我开始问为什么 (why),开始回过头来,拾起那些最基础的部分,学习那些我之前我本该好好学的知识。这个回头的过程是痛苦的,希望你们能就此警醒,永远不要做这种傻事。



    02

    警醒后的反思

    0?wx_fmt=png


    这幅图取自 Douglas Hofstadter 的著作 Gödel, Escher, Bach。图中的每一个字母都由其他更小的字母组成。在最高层级,我们看的是 "MU",M 这个字母由三个 HOLISM (整全观)构成,U则是由一个 REDUCTIONISM (还原论)构成,前者的每一个字母都包含后者的后者整个词,反之亦然。而在最低层级,你会发现最小的字母又是由重复的 "MU" 组成的。


    每一层次的抽象都蕴含着信息,如果你只是幼稚地单一运用整体论在最高层级观察,或运用还原论观察最低层级,你所得到的只有 "MU" (在一些地区的方言中 mu 意味着什么都没有)。


    问题来了,怎样才能尽可能多的获取每个层级的信息?或者换句话说,该怎样学习复杂领域(诸如编程)包含的众多知识?


    教育与学习过程中普遍存在一个关键问题:初学者们的目标经常过于倾向整全观而忽略了基础,举个常见的例子,学生们非常想做一个机器人,却对背后的

    理解物理模型 → 理解电子工程基础 → 理解伺服系统与传感器 → 让机器人动起来,这一过程完全提不起兴趣。



    在这里对于初学者有两个大坑


    1、如果初学者们只与预先构建好的「发动机和组件」接触(没有理解和思考它们构造的原理),这会严重限制他们在将来构建这些东西的能力,并且在诊断解决问题时无从下手。


    2、第二个坑没有第一个那么明显:幼稚的「整体论」方法有些时候会显得很有效,这有一定的隐蔽性与误导性,但是一两年过后(也许没那么长),当你在学习路上走远时,再想回过头来「补足基础」会有巨大的心理障碍,你得抛弃之前自己狭隘的观念,耐心地缓步前进,这比你初学时学习基础知识困难得多。


    但也不能矫枉过正,陷入还原论的大坑,初学时便一心试图做宏大的理论,这样不仅有一切流于理论的危险,枯燥和乏味还会让你失去推动力。这种情况经常发生在计算机科班生身上。


    为了更好理解,可以将学习编程类比为学习厨艺:你为了烧得一手好菜买了一些关于菜谱的书,如果你只是想为家人做菜,这会是一个不错的主意,你重复菜谱上的步骤也能做出不赖的菜肴,但是如果你有更大的野心,真的想在朋友面前露一手,做一些独一无二的美味佳肴,甚至成为「大厨」,你必须理解这些菜谱背后大师的想法,理解其中的理论,而不仅仅是一味地实践。


    但是如果你每天唯一的工作就是阅读那些厚重的理论书籍,因为缺乏实践,你只会成为一个糟糕的厨子,甚至永远成为不了厨子,因为看了几天书后你就因为枯燥放弃了厨艺的学习。


    所以,编程是连接理论与实践的纽带,是计算机科学与计算机应用技术相交融的领域。正确的编程学习的方法应该是:通过自顶而下的探索与项目实践,获得编程直觉与推动力;从自底向上的打基础过程中,获得最重要的通用方法并巩固编程思想的理解。


    作为初学者,应以后者为主,前者为辅。



    启蒙

    0?wx_fmt=jpeg


    学编程应该学哪门语言?」这经常是初学者问的第一个问题,但这是一个错误的问题,你最先考虑的问题应该是「哪些东西构成了编程学习的基础」?

    编程知识的金字塔底部有三个关键的部分:


    算法思想:例如怎样找出一组数中最大的那个数?首先你得有一个 maxSoFar 变量,之后对于每个数…


    语法:我怎样用某种编程语言表达这些算法,让计算机能够理解。


    系统基础:为什么 while(1) 时线程永远无法结束?为什么 int *foo() { int x = 0; return &x; } 是不可行的?


    启蒙阶段的初学者若选择C语言作为第一门语言会很困难并且枯燥,这是因为他们被迫要同时学习这三个部分,在能做出东西前要花费很多时间。


    因此,为了尽量最小化「语法」与「系统基础」这两部分,建议使用 Python 作为学习的第一门语言,虽然 Python 对初学者很友好,但这并不意味着它只是一个「玩具」,在大型项目中你也能见到它强大而灵活的身影。


    熟悉 Python 后,学习 C 语言是便是一个不错的选择了:学习 C 语言会帮助你以靠近底层的视角思考问题,并且在后期帮助你理解操作系统层级的一些原理。


    下面给出了一个可供参考的启蒙阶段导引,完成后你会在头脑中构建起一个整体框架,帮助你进行自顶向下的探索。下面的材料没有先后顺序,如果卡壳的话可以考虑换另一份材料。


    完成 MIT 6.00.1x (麻省理工:计算机科学和 Python 编程导论)。虽然该课程的教学语言为 Python,但作为一门优秀的导论课,它强调学习计算机科学领域里的重要概念和范式,而不仅仅是教你特定的语言。如果你不是科班生,这能让你在自学时开阔眼界;课程内容:计算概念,Python 编程语言,一些简单的数据结构与算法,测试与调试。


    完成 Harvard CS50x (哈佛大学:计算机科学)。同样是导论课,但这门课与MIT的导论课互补。教学语言涉及 C, PHP, JavaScript + SQL, HTML + CSS,内容的广度与深度十分合理,还能够了解到最新的一些科技成果,可以很好激发学习计算机的兴趣。支线任务:阅读《编码》


    完成 Python 教程


    入门

    0?wx_fmt=jpeg

    结束启蒙阶段后,初学者积累了一定的代码量,对编程也有了一定的了解。这时你可能想去学一门具体的技术,诸如 Web 开发, Android 开发,iOS 开发什么的,你可以去尝试做一些尽可能简单的东西,给自己一些正反馈,补充自己的推动力。


    但记住别深入,这些技术有无数的细节,将来会有时间去学习;同样的,这时候也别过于深入特定的框架和语言,现在是学习计算机科学通用基础知识的时候,不要试图去抄近路直接学你现在想学的东西,这是注定会失败的。


    那么入门阶段具体该做些什么呢?这时候你需要做的是反思自己曾经写过的程序,去思考程序为什么 (Why) 要这样设计?,思考怎样 (How) 写出更好的程序?试图去探寻理解编程的本质:利用计算机解决问题。


    设想 :

    X = 用于思考解决方案的时间,即「解决问题」 部分

    Y = 用于实现代码的时间,即「利用计算机」部分」

    编程能力 = F(X, Y) (X>Y)


    要想提高编程能力,就得优化 X,Y 与函数 F(X, Y),很少有书的内容能同时着重集中在这三点上,但有一本书做到了——Structure and Interpretation of Computer Programs (SICP)《计算机程序的构造和解释》,它为你指明了这三个变量的方向。


    在阅读 SICP 之前,你也许能通过调用几个函数解决一个简单问题。但阅读完 SICP 之后,你会学会如何将问题抽象并且分解,从而处理更复杂更庞大的问题,这是编程能力巨大的飞跃,这会在本质上改变你思考问题以及用代码解决问题的方式。此外,SICP 的教学语言为 Scheme,可以让你初步了解函数式编程。更重要的是,他的语法十分简单,你可以很快学会它,从而把更多的时间用于学习书中的编程思想以及复杂问题的解决之道上。


    Peter Norvig 曾经写过一篇非常精彩的 SICP 书评,其中有这样一段:


    To use an analogy, if SICP were about automobiles, it would be for the person who wants to know how cars work, how they are built, and how one might design fuel-efficient, safe, reliable vehicles for the 21st century. The people who hate SICP are the ones who just want to know how to drive their car on the highway, just like everyone else.


    如果你是文中的前者,阅读SICP将成为你衔接启蒙与入门阶段的关键点。


    虽然SICP是一本「入门书」,但对于初学者还是有一定的难度,以下是一些十分有用的辅助资源:


    Udacity CS212 Design of Computer Program:由上文提到的Google 研究主管 Peter Norvig 主讲,教学语言为 Python,内容有一定难度。

    How to Design Programs, Second Edition:HtDP 的起点比SICP低,书中的内容循循善诱,对初学者很友好,如果觉得完成SICP过于困难,可以考虑先读一读 HtDP。

    UC Berkeley SICP 授课视频以及 SICP 的两位作者给 Hewlett-Packard 公司员工培训时的录像(中文化项目)

    Composing Programs:一个继承了SICP思想但使用Python作为教学语言的编程导论(其中包含了一些小项目)

    SICP 解题集:对于书后的习题,作为初学者应尽力并量力完成。


    完成了这部分学习后,你会逐步建立起一个自己的程序设计模型,你的脑子里不再是一团乱麻,你会意识到记住库和语法并不会教你如何解决编程问题,接下来要学些什么,在你心里也会明朗了很多。这时候才是真正开始进行项目实践,补充推动力的好时机。


    关于项目实践:对于入门阶段的初学者,参与开源项目还为时过早,这时候应该开始一些简单的项目,诸如搭建一个网站并维护它,或是编写一个小游戏再不断进行扩展。


    如果你觉得 SICP 就是搞不定,也不要强迫自己,先跳过,继续走常规路线:开始读 The Elements of Computing Systems 吧,它会教会你从最基本的 Nand 门开始构建计算机,直到俄罗斯方块在你的计算机上顺利运行。


    这本书会贯穿你的整个编程入门阶段,你入门阶段的目标就是坚持完成这本书的所有项目(包括一个最简的编译器与操作系统)。


    为了完全搞定这本书,为了继续打好根基。为了将来的厚积薄发,在下面这几个方面你还要做足功课(注意:下面的内容没有绝对意义上的先后顺序):


    01

    计算机系统基础

    0?wx_fmt=jpeg


    有了之前程序设计的基础后,想更加深入地把握计算机科学的脉络,不妨看看这本书:Computer Systems: A Programmer's Perspective, 3/E《深入理解计算机系统》。这里点名批评这本书的中译名,其实根本谈不上什么深入啦,这本书只是 CMU 的「计算机系统导论」的教材而已。


    CMU的计算机科学专业相对较偏软件,该书就是从一个程序员的视角观察计算机系统,以「程序在计算机中如何执行」为主线,全面阐述计算机系统内部实现的诸多细节。


    如果你看书觉得有些枯燥的话,可以跟一门 Coursera 上的 MOOC: The Hardware/Software Interface,这门课的内容是 CSAPP 的一个子集,但是最经典的实验部分都移植过来了。同时,可以看看 The C Programming Language,回顾一下C语言的知识。


    完成这本书后,你会具备坚实的系统基础也具有了学习操作系统,编译器,计算机网络等内容的先决条件。当学习更高级的系统内容时,翻阅一下此书的相应章节,同时编程实现其中的例子,一定会对书本上的理论具有更加感性的认识,真正做到经手的代码,从上层设计到底层实现都了然于胸,并能在脑中回放数据在网络->内存->缓存->CPU 的流向。


    02

    数据结构与算法基础

    如今,很多人认为编程(特别是做 web 开发)的主要部分就是使用别人的代码,能够用清晰简明的方式表达自己的想法比掌握硬核的数学与算法技巧重要的多,数据结构排序函数二分搜索这不都内置了吗?工作中永远用不到,学算法有啥用啊?这种扛着实用主义大旗的「码农」思想当然不可取。没有扎实的理论背景,遭遇瓶颈是迟早的事。


    数据结构和算法是配套的,入门阶段你应该掌握的主要内容应该是:这个问题用什么算法和数据结构能更快解决。这就要求你对常见的数据结构和算法了熟于心,你不一定要敲代码,用纸手写流程是更快的方式。对你不懂的数据结构和算法,你要去搜它主要拿来干嘛的,使用场景是什么。


    供你参考的学习资源:


    《算法导论》:有人说别把这本书当入门书,这本书本来就不是入门书嘛,虽说书名是 Introduction to Algorithms,这只不过是因为作者不想把这本书与其他书搞重名罢了。当然,也不是没办法拿此书入门,读第一遍的时候跳过习题和证明就行了嘛,如果还觉得心虚先看看这本《数据结构与算法分析》


    Algorithms: Design and Analysis [Part 1] & [Part 2]: Stanford 开的算法课,不限定语言,两个部分跟下来算法基础基本就有了;如果英文不过关:麻省理工学院:算法导论


    • 入门阶段还要注意培养使用常规算法解决小规模问题的能力,结合前文的SICP部分可以读读这几本书:《编程珠玑》《程序设计实践 》


    03

    编程语言基础

    0?wx_fmt=jpeg


    Different languages solve the same problems in different ways. By learning several different approaches, you can help broaden your thinking and avoid getting stuck in a rut. Additionally, learning many languages is far easier now, thanks to the wealth of freely available software on the Internet

    - The Pragmatic Programmer


    此外还要知道,学习第 n 门编程语言的难度是第 (n-1) 门的一半,所以尽量去尝试不同的编程语言与编程范式,若你跟寻了前文的指引,你已经接触了:「干净」的脚本语言 Python, 传统的命令式语言 C, 以及浪漫的函数式语言 Scheme 三个好朋友。


    但仅仅是接触远远不够,你还需要不断继续加深与他们的友谊,并尝试结交新朋友,美而雅的 Ruby 小姑娘,Hindley-Milner 语言家族的掌中宝 Haskell 都是不错的选择。至于 C++ ,喜欢的话学学也无妨。


    现实是残酷的,在软件工程领域仍旧充斥着一些狂热者,他们只掌握着一种编程语言,也只想掌握一种语言,他们认为自己掌握的这门语言是最好的,其他异端都是傻X。这种人也不是无药可救,有一种很简单的治疗方法:让他们写一个编译器。要想真正理解编程语言,你必须亲自实现一个。现在是入门阶段,不要求你去上一门编译器课程,但要求你能至少实现一个简单的解释器。


    供你参考的学习资源:


    《程序设计语言-实践之路》:CMU 编程语言原理的教材,程序语言入门书,现在就可以看,会极大扩展你的眼界,拉开你与普通人的差距。


    Programming Languages:课堂上你能接触到极端 FP (函数式)的 SML,中性偏 FP 的 Racket,以及极端 OOP (面向对象)的 Ruby,并学会问题的 FP 分解 vs OOP 分解、ML 的模式匹配、Lisp 宏、不变性与可变性、解释器的实现原理等,让你在将来学习新语言时更加轻松并写出更好的程序。


    Udacity CS262 Programming Language:热热身,教你写一个简单的浏览器——其实就是一个 JavaScript 和 HTML 的解释器,完成后的成品还是很有趣的;接下来,试着完成一个之前在SICP部分提到过的项目:用Python写一个 Scheme Interpreter


    其他

    0?wx_fmt=jpeg


    编程入门阶段比较容易忽视的几点:


    1 学会提问:学习中肯定会遇到问题,应该学会正确的使用搜索引擎。当单靠检索无法解决问题时,去 Stack Overflow 或知乎提问。


    2 不要做一匹独狼:尝试在 CoCode 与他人交流想法。试着在博客上记录自己的想法。订阅自己喜欢的编程类博客,推荐几个供你参考:Joel on Software, Peter Norvig, Coding Horror


    3 学好英语:英语是你获取高质量学习资源的主要工具,但在入门阶段,所看的那些翻译书信息损耗也没那么严重,以你自己情况权衡吧。


    小结


    以上的内容你不应该感到惧怕编程的入门不是几个星期就能完成的小项目。期间你还会遇到无数的困难,当你碰壁时试着尝试「费曼」技巧:将难点分而化之,切成小知识块,再逐个对付,之后通过向别人清楚地解说来检验自己是否真的理解。当然,依旧会有你解决不了的问题,这时候不要强迫自己——很多时候当你之后回过头来再看这个问题时,一切豁然开朗


    此外不要局限于上文提到的那些材料,还有一些值得在入门阶段以及将来的提升阶段反复阅读的书籍。


    Code Complete:不管是对于经验丰富的程序员还是对于那些没有受过太多的正规训练的新手程序员,此书都能用来填补自己的知识缺陷。对于入门阶段的新手们,可以重点看看涉及变量名,测试,个人性格的章节。


    The Pragmatic Programmer :有人称这本书为代码小全:从 DRY 到 KISS,从做人到做程序员均有涉及。


    这本书的作者 Dave ,在书中开篇留了这样一段话:


    You’re a Pragmatic Programmer. You aren’t wedded to any particular technology, but you have a broad enough background in the science, and your experience with practical projects allows you to choose good solutions in particular situations. Theory and practice combine to make you strong. You adjust your approach to suit the current circumstances and environment. And you do this continuously as the work progresses. Pragmatic Programmers get the job done, and do it well.


    这段话以及他创立的 The Pragmatic Bookshelf 一直以来都积极地影响着我,因此这篇指南我也尽量贯彻了这个思想,引导并希望你们成为一名真正的 Pragmatic Programmer 。


    后记


    0?wx_fmt=jpeg


    如果你能设法完成以上的所有任务,恭喜你,你已经真正实现了编程入门。这意味着你在之后更深入的学习中,不会畏惧那些学习新语言的任务,不会畏惧那些「复杂」的 API,更不会畏惧学习具体的技术,甚至感觉很容易。


    当然,为了掌握这些东西你依旧需要大量的练习,腰还是会疼,走路还是会费劲,一口气也上不了5楼。但我能保证你会在思想上有巨大的转变,获得极大的自信,虽然只是完成了编程入门,但已经成为了程序员精神世界的高富帅。不,我说错了,即使是高富帅也不会有强力精神力,他也会怀疑自己,觉得自己没钱就什么都不是了。但总之,你遵循指南好好看书,那就会体验「会当凌绝顶」的感觉。


    0?wx_fmt=jpeg


    - THE END -


    点击图片get往期内容

    0?wx_fmt=png

    0?wx_fmt=png

    0?wx_fmt=png

    0?wx_fmt=gif

    展开全文
  • 编程入门

    2020-05-25 20:06:23
    学习java前须知的基本知识(学习笔记)
  • 就像刚刚出生的婴儿一样。你让他跑他会吗? 美女们喜欢的肌肉男!哇&... 让我们去想一下,如果小孩刚出生就会走路.... 肌肉男也一样,不能有一颗的松懈,每天吃大量的食物....从...
  • windows 编程入门资料

    千次阅读 2018-05-30 14:01:42
    资料1 ...《Windows高级编程指南》是1999年清华大学出版社出版的图书,译者是王书洪 / 刘光明,目前出已经出第三版。 第0章 绪论  0.1 关于应用程序范例  0.1.1 用c语言编写程序  0.1.2 message ...
  • 在看书、阅读前,一定先选择一门适合自己的编程语言。对0基础的同学,选择程序设计语言时先了解自己的学习能力。太难的语言,没有一定的基础,以及没有老师讲解、指引,太容易产生挫败感从而放弃。其次,如果自己有...
  • 技术更新太快,精通一门编程语言已经实属不易,又怎么好意思说精通多门语言呢? 不过呢,当你精通一门语言同时,涉猎一下其他语言无伤大雅。 这对于编程思想也是大有裨益的。每门设计语言都有其独特的设计思想...
  • 感觉对于学习c语言无从下手,特别是刚入门的朋友。看到那些奇怪的,不合常理的符号,感觉完全是摸不着路一样。然后写这篇文章,谈一下个人的学习方法和学习效率,希望对大家有帮助,特别是新手! 一、书的选择 ...
  • 感谢分享者 下载地址 往下翻 下载压缩包
  • Python编程入门到实践

    千次阅读 多人点赞 2020-01-11 15:00:02
    Python编程入门到实践 全配套资源免费分享 博主的百度云分享:点击保存下载Python编程入门到实践全配套资源 提取码:efej 下载之后成功解压后的文件(见下图): 解释一下:没有把这些资源上传到CSDN资源,...
  • python编程入门到实践电子书下载

    千次阅读 2018-10-21 09:06:49
    https://blog.csdn.net/zhiyong499/article/details/81016102
  • python编程入门到实践 配套资源下载地址 免费!

    万次阅读 多人点赞 2019-08-04 16:49:15
    《python编程入门到实践》书中有一些需要配套资源的,比如12章需要飞船图像ship.bmp和外星人图像,16章需要从网上下载天气数据。这些资源如果从论坛下载有点麻烦,要注册和积分的。 其实可以直接在书店下载全书...
  • MFC教程——鸡啄米

    千次阅读 多人点赞 2015-02-17 23:53:37
    VS2010/MFC编程入门之前言 VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架) VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构) VS2010/MFC编程入门之四(MFC应用程序框架分析)...
  • VS2010/MFC编程入门系列教程

    万次阅读 多人点赞 2017-02-09 14:40:00
    VS2010/MFC编程入门教程之目录和总结  鸡啄米的这套VS2010/MFC编程入门教程到此就全部完成了,虽然有些内容还未涉及到,但帮助大家进行VS2010/MFC的入门学习业已足够。以此教程的知识为基础,学习VS2010/MFC...
  • 如何下载《Python编程:从入门到实践》配套资源

    万次阅读 多人点赞 2019-08-20 23:49:57
    由于很少上论坛,所以资源发送不及时。同时qq邮箱一次只能发几个人,每个人都发送实在太过麻烦,但是有一部分人还是发了,还请大家互相索取,收到资源的同学还请不吝分享! 抱歉! ——————————————...
  • Python编程:从入门到实践>>,从头到尾系统的学习了下。 可能在学习过程中,课后习题有几个不大会,没有思路的话,可以参考一下随书下载的答案。 我是大自然的搬运工,相关下载资料都在这...
  • 源代码地址 2014版的源代码: 链接:百度云链接分享 密码:6lil 2018版的源代码: 链接:百度云链接分享 密码:mlzx
  • 鸡啄米MFC入门系列教程

    万次阅读 多人点赞 2018-04-17 16:18:02
    原文地址:点击打开链接鸡啄米的这套VS2010/MFC编程入门教程到此就全部完成了,虽然有些内容还未涉及到,但帮助大家进行VS2010/MFC的入门学习业已足够。以此教程的知识为基础,学习VS2010/MFC较为深入的内容已非...
1 2 3 4 5 ... 20
收藏数 329,584
精华内容 131,833
关键字:

编程入门