linux入门基础(三)Gcc编译编程?
【希望对你有帮助】
建议你看看编程的一些基础知识
– 经典hello word 程序
#include <stdio.h>
int mian()
{
printf(“hello world!n”);
return 0;
}
– 编译
-进入终端
-进入源文件所在的目录
$ gcc hello.c -o hello
– 运行
$ ./hello
如何学编程?
编程是编定程序的中文简称,就是让计算机代码解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程。编程能提高逻辑思维能力,加强计算能力。
编程语言
Python
Python是一种面向对象有着代码简洁、可读性强特点的解释型计算机程序设计语言。代码简洁是因为它把许多的复杂的操作封装起来,将C语言中麻烦的指针和内存管理对开发者隐藏起来,使得在开发过程中,无须在意这部分的细节。另外Python这门语言强制用户用缩进进行排版,若不好好排版,则代码编译无法通过,或者运行过程会出现错误。
C语言
C语言是一门面向过程的、抽象化的广泛应用于底层开发的通用程序设计语言,能以简易的方式编译和处理低级存储器。C语言既具有高级语言的特点,又具有汇编语言的特点,是仅产生少量机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。
是有简洁的语言、具有结构化的控制语句、丰富的数据类型、丰富的运算符、可对物理地址进行直接操作、代码具有较好的可移植性、可生成高质量、目标代码执行效率高的程序。
Java
Java通过面向作为静态对象的编程语言的代表,可以充分的实现面向的对象理论的编程语言,有简单性、功能强大、分布式、健壮性、安全性、平台独立与可移植性、多线程及动态性的特点。
Java支持在网络上应用,Java既支持各种层次的网络连接,又以Socket类支持可靠的流(stream)网络连接,它是分布式语言。所以用户可以产生分布式的客户机和服务器。网络变成软件应用的分布运载工具。Java程序只要编写一次,就可到处运行。
PHP
PHP是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。
使用 PHP 的最大的好处是它对于初学者来说极其简单,同时也给专业的程序员提供了各种高级的特性,只需几个小时就可以自己写一些简单的脚本。尽管 PHP 的开发是以服务端脚本为目的,但事实上其功能远不局限于此。
GO
Go语言(又称 Golang)是一种静态强类型、编译型语言,是一个开源编程环境,可以轻松构建简单、可靠和高效的软件。Go 语言语法与 C 相近,但功能上有:内存安全,GC(垃圾回收),结构形态及 CSP-style 并发计算。Go 内嵌了关联数组(也称为哈希表(Hashes)或字典(Dictionaries)),就像字符串类型一样。
对比
python和c语言的区别主要体现在:语言类型、内存管理、速度、应用、运行、对象、声明、测试和调试难度、复杂度、学习程度。 测试和调试难度不同:Python相对其他语言而言是非常简单的语言,高度集成,代码量少。Python中的测试和调试更容易;C中测试和调试更难。 学习难度不同:Python:Python程序更易于学习,编写和阅读;C语言:C程序语法比Python更难。
python 跟 java 一样是强类型语言,也就是说它不会根据环境变化自动改变数据类型。python 是动态语言,而 java 是静态语言。也就是说 python 在编程时,永远不用给任何变量指定数据类型,而 java 写程序时必须声明所有变量的数据类型。
python 的模块类似于 java 的 class,不过python模块导入会执行 代码的内容,而 java 不会。python 与 java 的执行方式还是蛮像的,都是将源码编译成 byte code 然后交给相应的虚拟机去执行。
Python的框架数量较少,而PHP中成熟的框架比较多;PHP是面向web的语言,而Python是多用途语言,也可以用于web开发;Python使用非常严格的缩进强制执行,使它比PHP更具可读性。
学习思路
认识编程
编程语言(programming language)又称程序设计语言,是一组用特定语言编写的用于执行特定任务的指令。主要用于开发桌面应用、操作系统、网站、移动应用等。
低级编程语言
它基于二进制数 0 和 1 工作,处理器直接运行低级程序,不需要编译器或解释器,因此用低级语言编写的程序可以运行得非常快。
低级语言进一步分为两部分
机器语言
机器语言也称为机器代码或目标代码,更容易阅读,因为它通常以二进制或十六进制形式(基数 16)形式显示。
它不需要翻译器来转换程序,因为计算机直接理解机器语言程序。
汇编语言
汇编语言是为特定处理器设计的,它以象征性和人类可理解的形式表示一组指令。它使用汇编程序将汇编语言转换为机器语言。
中级编程语言
中级编程语言介于低级编程语言和高级编程语言之间。
它也被称为中间程序语言和伪语言。
中级编程语言的优点是支持高级编程的特性,是一种用户友好的语言,与机器语言和人类语言密切相关。
例如:C、C++
高级编程语言
高级编程语言 (HLL) 旨在开发用户友好的软件程序和网站。
这种编程语言需要编译器或解释器将程序翻译成机器语言(执行程序)。
示例:Python、Java、JavaScript、PHP、C#、C++ 等。
编程实践
学习编程语言的过程简单描述为:过、抄、仿、改、调、看、练、创、悟。
过
基础知识点不求深解,语言什么样的,适用场合、基本语法格式
抄代码
从书上抄、例子中抄、边抄边想边想边回忆语法
模仿改
仿照给出的代码写出自己的代码
勤调试
不断调试验证自己想法,继续思考,再次验证。熟悉调试工具调试方法
看n遍
出错或者遇到问题时,将代码从头到尾看n遍直到快记住,找出问题原因
练
2-5步三遍以上
创新
拿出一个没有写过的根据要求,一步一步写出来,写不出来参考6
悟
主动找到写代码的感觉和成就感,保持下去。
选择大于努力,只有切入一个适合自己的开发方向,才能持续进步。关于开发方向,我有以下两个选择标准。
兴趣
学习编程是一个非常枯燥的过程,内容多,时间长,成本高,即使报名了培训班也学不会,所以,我们首先要选择自己感兴趣的一个开发方向,这样不但能快速学习,以后还能持续进步。学习编程的过程是比较艰苦的,没有兴趣很难硬抗下来,此处的兴趣,是指别人无法撼动的热爱,是工作之余让你放松的事情。如果你只是有过某种想法,别人告诉你这个想法不靠谱,你就放弃了,这顶多是一时的鸡血。
学习方式
费曼学习法
在学完一个东西之后去给别人讲明白,注意是讲给别人听,当你写成文章发表在网上的时候,你自然会去用更通俗的语言,更清晰的逻辑去讲述这个事物背后的逻辑。这个过程是对自己学习的一个检验,也是加深映像整理思路的重要过程。
那么如果你是去记笔记的话,很有可能你会倾向于去照抄,或是不完全照抄,以“提纲”或是“知识点”的形式抄在本子上。说句实话,照抄的笔记真的没用,因为现在搜索引擎的能力已经可以让你把大多数东西快速找到,你为什么还要照抄到笔记本上呢?
从功利的角度考虑,技术文章的写作,别人可以直接访问,也可以逐渐累积你的影响力,一个好的个人技术博客,会给你的简历加分很多,而一个厚厚的笔记本,没有人会管你记了什么。
做好笔记
大多数人没有过目不忘的神技,学了也不一定马上掌握,需要过后花时间慢慢领悟,而且还有忘掉的风险,所以对于重要的知识点都要做好笔记。编程的过程中总会遇到各种各样的问题,比如编程环境的配置,常用的快捷键,编程过程中的错误、异常,软件更新问题等等。面对这些问题都是如何解决的,一定要记录下来,一是增加自己解决问题的经验,而是以防下次出现。
多看官方文档
外文资料互联网是一个更新迭代很快的行业,所有编程语言都会不断的更新新功能和修复旧Bug,网上查的资料很有可能是旧的解决方案,现在已经不适用了。所以最好最快的方法就是查看官方文档。
进入行业圈子
只有进入行业圈子与其他人交流,你才了解最新的行业动态,才知道自己需要更新哪些技能。
动手做项目
学习编程的最终目的就是用所学的做出具有一定功能的项目,而做项目又是最好的学习和巩固知识的方式。如果前期能力不足就先做一些简单的功能模块,一步一步慢慢来,不要一开始就要实现各种酷炫炸天功能,遇到不会的就在网上查, 现在互联网这么发达,获取资源也及其方便。而且开发前也最好在网上查一下有没有已经成型的框架或模板,什么都自己做一是很耗费时间,二是自己技术能力不足还可能留下不少坑。
学习Python
安装编程环境
第一步:访问Python官网,获取最新安装程序。
第二步:运行下载的安装程序,注意勾选“Add Python3.7 to PATH”,然后选择个性化安装,即“Customize installation”。
第三步:确保“pip”被勾选上,之后安装各种库需要用到pip。
第四步:高级选项,需要的可以修改安装目录,通常没有需要修改的,直接点“Install”。
第五步:等待程序自动安装完成。
第六步:出现如下界面,说明安装已完成。
第七步:验证方法,Windows+R 键打开“运行”窗口,输入cmd运行,进入命令提示窗口,再输入python,进入Python的命令模式,输入 print("Hello"),结果输出了 Hello,如下图所示,确定开发环境已安装完成。
运行环境
Hello World!
命令行
在Linux命令行输入:$python
将直接进入python。然后在命令行提示符>>>后面输入:>>>print('Hello World!')
可以看到,随后在屏幕上输出:
Hello World!
print是一个常用函数,其功能就是输出括号中得字符串。
(在Python 2.x中,print还可以是一个关键字,可写成print 'Hello World!',但这在3.x中行不通 )
小程序
另一个使用Python的方法,是写一个Python程序。用文本编辑器写一个.py结尾的文件,比如说hello.py
在hello.py中写入如下,并保存:print('Hello World!')
退出文本编辑器,然后在命令行输入:$python hello.py
来运行hello.py。可以看到Python随后输出Hello World!
脚本
我们还可以把Python程序hello.py改成一个可执行的脚本,直接执行:#!/usr/bin/env python
print('Hello World!')
需要修改上面程序的权限为可执行:chmod 755 hello.py
然后再命令行中,输入./hello.py
就可以直接运行了。
基本数据类型
变量不声明
Python的变量不需要声明,你可以直接输入:>>>a = 10
那么你的内存里就有了一个变量a, 它的值是10,它的类型是integer (整数)。 在此之前你不需要做什么特别的声明,而数据类型是Python自动决定的。
>>>print(a)
>>>print(type(a))
那么会有如下输出:
10
这里,我们学到一个内置函数type(),用以查询变量的类型。
回收变量名
如果你想让a存储不同的数据,你不需要删除原有变量就可以直接赋值。
>>>a = 1.3
>>>print(a,type(a))
会有如下输出
1.3
序列
sequence(序列)是一组有顺序的元素的集合,(严格的说,是对象的集合,但鉴于我们还没有引入“对象”概念,暂时说元素)序列可以包含一个或多个元素,也可以没有任何元素。
我们之前所说的基本数据类型,都可以作为序列的元素。元素还可以是另一个序列,以及我们以后要介绍的其他对象。
序列有两种:tuple(定值表; 也有翻译为元组) 和 list (表)
>>>s1 = (2, 1.3, 'love', 5.6, 9, 12, False) # s1是一个tuple
>>>s2 = # s2是一个list
>>>print(s1,type(s1))
>>>print(s2,type(s2))
tuple和list的主要区别在于,一旦建立,tuple的各个元素不可再变更,而list的各个元素可以再变更。
一个序列作为另一个序列的元素
>>>s3 = ]
空序列
>>>s4 =
自学
网站
菜鸟网站
这个python教程很适合小白学习,没有高深的原理,照着教程学就完事了。
菜鸟教程是一个提供免费编程学习的网站,里面不但能学到编程知识,还能运用在线编程工具,使你在学习的过程中得到发挥,实践得真理,边学边做中让基础打得更稳,让自己的知识更加稳固。在自己有不明白不理解的地方可以在网站的用户笔记中寻找大佬们的笔记,把自己所学和技术大佬的经验所融合,使自己更好地提升自己的能力。
菜鸟教程内容丰富,例如前端热门语言HTML5、CSS3、JavaScript、Vue等它该有的都有,都会从最基础的开始教,让刚学编程的小白由浅及深,一看就懂。每个知识点都有实例可以动手,直接在页面内做你想要的效果真的非常棒。菜鸟的排版简洁清晰有序,内容一针见血,让你一看就能明白其知识点的含义。
菜鸟教程不仅前端教程语言丰富,后端的Java、PHP、Python更是一应俱全,当然数据库、移动端、XML、ASP.NET、Web Service、开发工具和网站建设也是应有尽有,菜鸟教程有学到的知识如此之多,奋斗吧少年。
廖雪峰的官方网站
廖雪峰的官方网站比较推荐新手程序员学习前端,这个网站的教学视频的讲解相对来说会比较生动,没有其他教程那么死板,看起来也不至于那么犯困,也更便于新手去理解。总的来说,廖雪峰的官方网站作为一款启蒙类的前端学习网站还是相当不错的。
Python官方教程
这是Python官方出品的教程,可搭配Python标准库一起学。
书籍
《Python编程从入门到实践(第2版)》
作者:埃里克·马瑟斯 (EricMatthes)袁国忠 译
ISBN:9787115546081
出版:人民邮电出版社
本书是针对所有层次Python读者而作的Python门书。全书分两部分:部分介绍用Python编程所必须了解的基本概念,包括强大的Python库和工具,以及列表、字典、if语句、类、文件与异常、代码测试等内容;第二部分将理论付诸实践,讲解如何发三个项目,包括简单的2D游戏、利用数据生成交互式的信息图以及创建和定制简单的Web应用,并帮助读者解决常见编程问题和困惑。
《像计算机科学家一样学Python》
ISBN:9787115425515
作者:艾伦 B. 唐尼(Allen B. Downey)
出版:人民邮电出版社
本书以培养读者以计算机科学家一样的思维方式来理解Python语言编程。贯穿全书的主体是如何思考、设计、发的方法,而具体的编程语言,只是提供了一个具体场景方便介绍的媒介。全书共21章,详细介绍Python语言编程的方方面面。本书从基本的编程概念始讲起,包括语言的语法和语义,而且每个编程概念都有清晰的定义,引领读者循序渐地学习变量、表达式、语句、函数和数据结构。书中还探讨了如何处理文件和数据库,如何理解对象、方法和面向对象编程,如何使用调试技巧来修正语法错误、运行时错误和语义错误。
《计算机科学丛书:Java编程思想》
ISBN:9787111213826
作者: Bruce Eckel
出版:机械工业出版社
本书的作者拥有多年教学经验,对C、C++以及Java语言都有独到、深入的见解,以通俗易懂及小而直接的示例解释了一个个晦涩抽象的概念。本书共22章,包括操作符、控制执行流程、访问权限控制、复用类、多态、接口、通过异常处理错误、字符串、泛型、数组、容器深入研究、JavaI/O系统、枚举类型、并发以及图形化用户界面等内容。这些丰富的内容,包含了Java语言基础语法以及高级特性,适合各个层次的Java程序员阅读,同时也是高等院校讲授面向对象程序设计语言以及Java语言的好教材和参考书。
《疯狂Java讲义》
ISBN:9787121361586
作者:李刚
出版:电子工业出版社
《疯狂Java讲义(第4版)》深入介绍了Java编程的相关方面,《疯狂Java讲义(第4版)》内容覆盖了Java的基本语法结构、Java的面向对象特征、Java集合框架体系、Java泛型、异常处理、Java GUI编程、JDBC数据库编程、Java注释、Java的IO流体系、Java多线程编程、Java网络通信编程和Java反射机制。覆盖了java.lang、java.util、java.text、java.io和java.nio、java.sql、java.awt、javax.swing包下绝大部分类和接口。本书重点介绍了Java 9的模块化系统,还详细介绍了Java 9的jshell工具、多版本JAR包、匿名内部类的菱形语法、增强的try语句、私有接口方法,以及Java 9新增的各种API功能。
%3Chowto_content%3E,"text":"","id":"WceadiusyoyOwaxoNSsceBGjnVd"},{"type":"heading","attrs":{"level":1},"children":,"text":"","id":"Oqa2diWSioCqoexAhV7cd5qbnLd"},{"type":"heading","attrs":{"level":2},"children":,"text":"","id":"RYCIdicsYoyiUgx6drTcXYVMn4d"},{"type":"paragraph","children":,"text":"","id":"SeiEdQ4GAoc8Koxm6Oucd3MonOb"},{"type":"image","attrs":{"height":701,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/aeaa7b58948c4124bd69b6417e51906a","width":1563},"text":"","id":"DSA6demiCo8YmgxGYDmcdbmenQf"},{"type":"heading","attrs":{"level":2},"children":,"text":"","id":"RKKodkW2Wo0muoxaYdScS9gDnse"},{"type":"paragraph","children":,"text":"","id":"WkgAdki6koYcsSxzF93csMeynCk"},{"type":"paragraph","children":,"text":"","id":"FkCQdiCsmo40iqxg7ujcPBy9nHe"},{"type":"image","attrs":{"height":806,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/6f859719f77941aea4a29e7119f20a7f","width":1603},"text":"","id":"ME8ad6QuAoiWo2xe8zCc3gXrnog"},{"type":"heading","attrs":{"level":2},"children":,"text":"","id":"FWK8d2GSUoMME2xUxHzc8kMYnQR"},{"type":"paragraph","children":,"text":"","id":"TeIod6souoE4EkxgjEfcOZkLnoc"},{"type":"paragraph","children":,"text":"","id":"Te4udsisCoK44gxMpuPcDy11nfd"},{"type":"image","attrs":{"height":839,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/0e1656925be54be393b49dc2e2ac7b80","width":1893},"text":"","id":"SUW6d0aw2oskC4x2FMSc3WhNnRg"},{"type":"heading","attrs":{"level":2},"children":,"text":"","id":"Ic6kdo08aoY4GuxeY6Qc3Z8nnNe"},{"type":"paragraph","children":,"text":"","id":"IwQ8dKQCeoGAmixqM7BcXdgUnAd"},{"type":"paragraph","children":,"text":"","id":"DW0Odakc6ouW6Kxu6kPcdPF3nZd"},{"type":"image","attrs":{"height":648,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/300a2e3c7e954e7b8def92163c3f3673","width":1828},"text":"","id":"Naq2duscgogQ2oxYjg2cosy1nEe"},{"type":"heading","attrs":{"level":2},"children":,"text":"","id":"CwWwdCYeAoMuMuxCiNpcqJKpnRg"},{"type":"paragraph","children":,"text":"","id":"SIY6dO8ecoGoOOxmUVPcViIAnxb"},{"type":"image","attrs":{"height":772,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/3a879bbdd4b64d2b9b54d3f7358e7ed3","width":1522},"text":"","id":"GuiUdc6UCoKUWGxaCogc2jcrnFe"},{"type":"heading","attrs":{"level":1},"children":,"text":"","id":"EGqmdKMsGogUeexukQ5cA2wTnQf"},{"type":"paragraph","children":,"text":"","id":"HEyKduA4Iow6Kwx8ZiCcPQaVnHd"},{"type":"paragraph","children":,"text":"","id":"I6yAdOUQqoQSIYxs7XVcPwlSnMe"},{"type":"paragraph","children":,"text":"","id":"VmgOds4Ceoi0KoxGa8nc0GLDneb"},{"type":"paragraph","children":,"text":"","id":"MW22d02SsoU2oYxesy1cIEfsnYb"},{"type":"paragraph","children":,"text":"","id":"SA4kdwiSIoMW42xCGzDcMMyXnfe"},{"type":"heading","attrs":{"level":1},"children":,"text":"","id":"ECkydGqiIoEmKoxQzshckC4rncd"},{"type":"heading","attrs":{"level":2},"children":,"text":"","id":"IkSQdA02Ko64KKxoHAGc6cEwnIb"},{"type":"paragraph","children":,"text":"","id":"HM2udQ0giowuekxoV1kchShynhc"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"CkEQdgiGooaKGaxesABch5T1nlh"},{"type":"paragraph","children":,"text":"","id":"UgoMde6QIou8yAxambScEu1vnOb"},{"type":"paragraph","children":,"text":"","id":"ASy6dMoGooWsKaxeCDAcTUajnde"},{"type":"paragraph","children":,"text":"机器语言","id":""}],"text":"","id":"Z8MKdYOOmoucO0xai2uc1TUKnTd"},{"type":"paragraph","children":,"text":"","id":"RIgMdsykeoaykIxawjVcRE7HnXf"},{"type":"paragraph","children":,"text":"","id":"LMsSdcWGsooA00xgzJUcR80Inuf"},{"type":"paragraph","children":,"text":" 汇编语言","id":""}],"text":"","id":"Xi0gdKkgGo0oKYxE0vacrHAtngb"},{"type":"paragraph","children":,"text":"","id":"GYOQdMKQuoGkoExyYdkcuU2anIf"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"RGmIdsSwmoY8A2x89NUcdbWbnjg"},{"type":"paragraph","children":,"text":"","id":"Q822d2sssoQQGYxAzK6c9GqFnbd"},{"type":"paragraph","children":,"text":"","id":"BuG2d8s6AoiIWCxGQt1cGdbgneg"},{"type":"paragraph","children":,"text":"","id":"FIg6dMMGaoYSu0xSyhpcKu46nPh"},{"type":"paragraph","children":,"text":"","id":"LK8sduKWaoa0oUxQXspcudVbnid"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"FaYsdG0KqoOGW6xa4u0c0UQVn9c"},{"type":"paragraph","children":,"text":"","id":"Rsi4dE64WoykEkxzYAIcCNc8nbH"},{"type":"paragraph","children":,"text":"","id":"IOqmdGCEcoeC2wxXJElc68FsnvL"},{"type":"paragraph","children":,"text":"","id":"CgagdYoyyoQMCwxJ65zcUJF6ntC"},{"type":"heading","attrs":{"level":2},"children":,"text":"","id":"KGCQdQuyyoIu8Cx8DxYcWwFGnXf"},{"type":"paragraph","children":,"text":"学习编程语言的过程简单描述为:过、抄、仿、改、调、看、练、创、悟。","id":""}],"text":"","id":"JUUOdqi2Ko6mSix0qMBcv94pnAb"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"HqSsduwsUoqSamxyGKWcWlLqnDd"},{"type":"paragraph","children":,"text":"","id":"XO0mdIAcMoOisgxuAb6cTIvHn9I"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"ZwqWdC2AioWsWGxNBikcRf0unBf"},{"type":"paragraph","children":,"text":"","id":"XQWmdmoMcoQ82axuI6Lcjb6knDe"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"WOc0dUWuAogWYAx8vZycJ1OYnfd"},{"type":"paragraph","children":,"text":"","id":"Iokkd0EewoMSMuxqCAKch8tRnZf"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"CCIsd2secoIAiOxUXGhcQ55Mncc"},{"type":"paragraph","children":,"text":"","id":"Sg8CdMOy8oMyysxC0jyc1mzunff"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"UW4Id0cOooa6EAxIro7c3bT5nle"},{"type":"paragraph","children":,"text":"","id":"ROsUdMEyQoewGUxB0JWcntn7nh6"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"Ag2EdIGQQowSOOxRfD2cRMnOnNl"},{"type":"paragraph","children":,"text":"","id":"D8eod4eqmoEUcQx0XNVcgNE9n7Z"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"JqU2damiUoQm4CxUSSDcpg16nAn"},{"type":"paragraph","children":,"text":"","id":"DIeidUEkooIGGWxmAUQcWltanhh"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"V4ikdSQY4oacQWxQ3RocOJTbnQc"},{"type":"paragraph","children":,"text":"","id":"ZOCqd80k8oi8GgxkFcUcGuxan6b"},{"type":"paragraph","children":,"text":"","id":"R620d6Qwko6O4gxeS37cRQxjnwd"},{"type":"heading","attrs":{"level":2},"children":,"text":"","id":"WCkGd64Gwo6UcqxoV8Icg1G8nCf"},{"type":"paragraph","children":,"text":"","id":"BgqEdSkuMoqmqExFM9Dc7lBYnmk"},{"type":"heading","attrs":{"level":2},"children":,"text":"","id":"FG6OdgEWAosIcexYLUecc900nLd"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"FOYAdYUk6oEk4gx7u0ycaoPsnEy"},{"type":"paragraph","children":,"text":"","id":"EyYWdScu2o0ca2xIRdgcR5k2nnd"},{"type":"paragraph","children":,"text":"","id":"HSu4dusiqoIcCcxCOhTccQL5n3e"},{"type":"paragraph","children":,"text":"","id":"SOUSdQWIoo6OMYxIldZcuIU9nKh"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"SUoEdyCk0oOa2Ux2lGlcxcJKnXd"},{"type":"paragraph","children":,"text":"","id":"OGGwdgoU0oca0gxamqlcZ7HVnCf"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"HqyKdYYu8oU6QCxKmzicQi2qnxb"},{"type":"paragraph","children":,"text":"","id":"FGkAdKUGioyu6OxiQ7pcForVnXc"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"OEwIdSQ4EoK0U8xHbsJcVXchnCw"},{"type":"paragraph","children":,"text":"","id":"XqkadOImEoakm4xCGrscdtHOnrg"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"SMIQdeS4Qo60gKxSE1qcpjf9n1b"},{"type":"paragraph","children":,"text":"","id":"E8SSdsQksoOykkxq8qhc2D9UnPh"},{"type":"heading","attrs":{"level":1},"children":,"text":"","id":"Noeodu46Eoyg4Oxcz2Lcvsh6nWf"},{"type":"heading","attrs":{"level":2},"children":,"text":"","id":"Ucwad8wU0omK2YxUmNnc76Pjneb"},{"type":"paragraph","children":,"text":"","id":"CIWwdiUucoGM4Axe1XscufX4npb"},{"type":"image","attrs":{"height":253,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/6243e00debbc4a70b8dc277fa202d4e3","width":500},"text":"","id":"ZAUEdiiUoockeYx4FwFcKNmVnsb"},{"type":"paragraph","children":,"text":"","id":"DikMdkUMeoIIwOxEFNjcgKC8nfb"},{"type":"image","attrs":{"height":308,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/61c8842e690b42fc8de3ab3bce410252","width":500},"text":"","id":"VeISdQwCcogI8yxKqjrcxkXBnXf"},{"type":"paragraph","children":,"text":"","id":"JakkdcOG8omkoCxUt62cPMoinKb"},{"type":"image","attrs":{"height":308,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/257a0f4181604843b6b89e1ab0d338fc","width":500},"text":"","id":"HQUGdykoMoSUmGxymgjcOwounzg"},{"type":"paragraph","children":,"text":"","id":"U8gUdO22So4GWMxk5AAcYxhgnwd"},{"type":"image","attrs":{"height":308,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/a0bb9ea7ffad45d5aeef1f09f1dde2a4","width":500},"text":"","id":"IGQwdQag4oi06uxWuyacQYQAnwe"},{"type":"paragraph","children":,"text":"","id":"ZqiadCqiEoWewYx0AC8cBcnTneh"},{"type":"image","attrs":{"height":308,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/a46cba8c1cc64627a6bcb5bf991fe3f9","width":500},"text":"","id":"EmCWd0sMaoowOIxuA2lctZeXn8e"},{"type":"paragraph","children":,"text":"","id":"CSiudKqaqomAkcx2B6tcVnpGnPd"},{"type":"image","attrs":{"height":308,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/379805f0786b447583f0a32c4d573b32","width":500},"text":"","id":"UiCYdig0KoeIUWx049tcMB6bn6f"},{"type":"paragraph","children":,"text":"","id":"Lmoede4cuoEwQKxmabGcMLaXnXf"},{"type":"image","attrs":{"height":261,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/f84920cc98b14ad9beb9aae12c2e06f7","width":500},"text":"","id":"MsIgduUaEosaG6xSunHcnIm8nvf"},{"type":"heading","attrs":{"level":2},"children":,"text":"","id":"Lqiwde2SYoKEoOxquyEcgRRLnLd"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"IIgSdccwkoeaG8xmadlcUw6Bnbh"},{"type":"paragraph","children":,"text":"命令行","id":""}],"text":"","id":"JAaKdcMMUoSaKcxW4c1ccXeGnPb"},{"type":"paragraph","children":,"text":"","id":"Ac0Udg8sKoo64WxKUEpcVHc9ngc"},{"type":"paragraph","children":,"text":"","id":"C6OwdcCKao0kG8x4u6bchmSwn9e"},{"type":"paragraph","children":,"text":"","id":"HMyIdGao0omCcMxyu1Kc9DyFnQJ"},{"type":"paragraph","children":,"text":"","id":"HCWydoCIKo02yMxOy7GcZ1MBnkc"},{"type":"paragraph","children":,"text":"","id":"K4gYdSoiuo00icxAHmpc1eimnGc"},{"type":"paragraph","children":,"text":"","id":"BQACduGE6oCgSOx2fvYcEcbPn4f"},{"type":"paragraph","children":,"text":"小程序","id":""}],"text":"","id":"NGqsdeUKwoewYQx3zgdcf4Q4nsb"},{"type":"paragraph","children":,"text":"","id":"LkWEdeSkSosWMexWc7PcjpdvnJg"},{"type":"paragraph","children":,"text":"","id":"JgOsdAKe4ogmyExYHgLcTmQunyg"},{"type":"paragraph","children":,"text":"","id":"So08dE2imoYYQCxQ2QFcO82cnJL"},{"type":"paragraph","children":,"text":"","id":"AIKCdsmeYoCwwUx0su3cHkHqnvb"},{"type":"paragraph","children":,"text":"脚本","id":""}],"text":"","id":"ZsEMdwYWcoQOsQxSSv6cYylLn5e"},{"type":"paragraph","children":,"text":"","id":"LqUgd8CeQoCIeux81qFc7h69nHE"},{"type":"paragraph","children":,"text":"","id":"ASc8d6YmkoASeOxcNArcGC3Anbc"},{"type":"paragraph","children":,"text":"","id":"SY4Sd2aEMoy8E2x8moScAd5Gnbc"},{"type":"paragraph","children":,"text":"","id":"KcuSdKiEGomYGmxcxZ9cfAzwn9d"},{"type":"paragraph","children":,"text":"","id":"WoeudWqOAosyosx8vdLcVyTQnre"},{"type":"heading","attrs":{"level":2},"children":,"text":"","id":"PCwKdMoS2oKi4gxFAqZctL2XnJp"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"HsuQdOC6kosCkax4ML4cAJ8Dnje"},{"type":"paragraph","children":,"text":"","id":"SoA0dk2IKogMgOxewwVc4LkKnMe"},{"type":"paragraph","children":,"text":"","id":"KuuidCs4SooqGex6ZITcthxHnHc"},{"type":"paragraph","children":,"text":"","id":"VUaadIGOqoYYS4xwFOLcR1CVnEh"},{"type":"paragraph","children":,"text":"","id":"K2uYdIgSwoIaKexCWFvc3GZnnIe"},{"type":"paragraph","children":,"text":"","id":"VYCKdqwy4oWG6Ux2xQjcXvipnzV"},{"type":"paragraph","children":,"text":"","id":"FukWdMmaAoceg4xCaJ5c8ktfnuf"},{"type":"paragraph","children":,"text":"","id":"Mo4IdywqgoqKI8xSBu7cFmLyndb"},{"type":"paragraph","children":,"text":"","id":"C8yKdI8amoWwssxaEpQcGuK7nTf"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"LmgCdYeiuoIWgWxOon3c3P1Hncd"},{"type":"paragraph","children":,"text":"","id":"J0C0dc8UWo4CESx4m4jceRTAn4e"},{"type":"paragraph","children":,"text":"","id":"Tme6dEUG8ogECYxMrZOcjBzCnfg"},{"type":"paragraph","children":,"text":"","id":"Xo8mdWieio2ayqxYvCqcNNnKnac"},{"type":"paragraph","children":,"text":"","id":"HEQgdWU6so2EW0x2pYGc8Up6nLf"},{"type":"paragraph","children":,"text":"","id":"Xe0Qd0YkEoWcUixQxzNcsc7BnQc"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"K4sIdyYiaooeSKx0ENocBIlknzb"},{"type":"paragraph","children":,"text":"","id":"NKG2d8UMAokU4mxs9Snc667DnQf"},{"type":"paragraph","children":,"text":"","id":"SIe2duU4WoQEuMxUTXrcAmmKn2f"},{"type":"paragraph","children":,"text":"","id":"RmMwdgGU4oqywAxIZbQcqQHjnNe"},{"type":"paragraph","children":,"text":"","id":"WOaCdYes4o2k8yxWsrqckvlxnDd"},{"type":"paragraph","children": # s2是一个list","id":""}],"text":"","id":"De8ydgYi2o0ciixAjmgcINQnnzd"},{"type":"paragraph","children":,"text":"","id":"IMqQdWcKEogyGuxORI4cXDm9n5N"},{"type":"paragraph","children":,"text":"","id":"EY6idcQaooqaaGx0o8HcNZcmnHc"},{"type":"paragraph","children":,"text":"","id":"A8A0d4wsEoQM6gxy8wfczcPunJg"},{"type":"paragraph","children":,"text":"","id":"BiqUdsI6Koks4gxyig4ckRhgnGd"},{"type":"paragraph","children":]","id":""}],"text":"","id":"YoyEdOKywoYs8Ax4E1ic6uIan3c"},{"type":"paragraph","children":,"text":"","id":"OWykdUkeWo4UOQxWiu3cKYkDnAd"},{"type":"paragraph","children":","id":""}],"text":"","id":"VWEIdSqWooyg40xMpeYcDMo9nbd"},{"type":"heading","attrs":{"level":1},"children":,"text":"","id":"KW4Odiy8Eo4QyMxmAKFciGS8n4f"},{"type":"heading","attrs":{"level":2},"children":,"text":"","id":"G4AadueAIoa4o8xs9gwcSrAxnme"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"KqWid0A6UoAOIAxIlTWcxC9Nnsd"},{"type":"paragraph","children":,"text":"","id":"UiaCdQGKyo6Wg2xwxHoc2Dxmnxt"},{"type":"paragraph","children":,"text":"","id":"ZEgwdWWSsoq682x8f5wchxAynZe"},{"type":"paragraph","children":,"text":"","id":"WiU8de84coa6cQxcTG1chmmunkh"},{"type":"paragraph","children":,"text":"","id":"RggwdQ6uqoSiQWxI1ENck2ktnYe"},{"type":"image","attrs":{"height":383,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/0798ab45151c4bd0ad7d0b1c1b4f9566","width":720},"text":"","id":"NI2SdAC2QosicOxQ9YxcHeSknnh"},{"type":"paragraph","children":,"text":"","id":"DsoCdsMcuoAoi0x8BarcCb3Sn3f"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"CwsqdmSY6os00wxdcNSctzmwnHH"},{"type":"paragraph","children":,"text":"","id":"SimcdEA4mo2QwExkXoAcSn0RnEh"},{"type":"image","attrs":{"height":750,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/b21b64b7b6c74706ab17469ccbf6b14b","width":1783},"text":"","id":"NWWwdMy2AoWIwgxI10pcF9jJnhh"},{"type":"heading","attrs":{"level":3},"children":,"text":"","id":"M0cGdIGsSoAYA8xaOKYcPxMInuf"},{"type":"paragraph","children":,"text":"","id":"QCUKde0YCoe4aixMp6mc34NynAf"},{"type":"image","attrs":{"height":810,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/4871398dc75d4de4ab867263607d7048","width":1445},"text":"","id":"NQI2dc86io4EgwxgVEXcl1svnae"},{"type":"heading","attrs":{"level":2},"children":,"text":"","id":"ZYEAdMaCaoY8mSxGJFecEcpannb"},{"type":"paragraph","children":,"text":"《Python编程从入门到实践(第2版)》","id":""}],"text":"","id":"OKe4diK4goU4Swxg9Edc2CcjnQZ"},{"type":"paragraph","children":,"text":"","id":"PKQcdAAcGoUoC0xOqEocFhTCnlh"},{"type":"paragraph","children":,"text":"","id":"DyUWd4aUio4a60xu6ogcPj1Bn2d"},{"type":"paragraph","children":,"text":"","id":"Rs42dYymGoSIuUxWU7RctjUznMe"},{"type":"paragraph","children":,"text":"","id":"HoQodykKqo8COCxqyqwccoimnKh"},{"type":"image","attrs":{"height":619,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/f952cca888c0454e838c59d17090daf7","width":501},"text":"","id":"ZU6qdUUScoCUA4x46jtchHQIndf"},{"type":"paragraph","children":,"text":"《像计算机科学家一样学Python》","id":""}],"text":"","id":"E28edua0koSygsxnyHBcIkeznGk"},{"type":"paragraph","children":,"text":"","id":"N44Udusiso2siQx61owcIo13n6d"},{"type":"paragraph","children":,"text":"","id":"RkEudeuIsoy2CmxW6NxcCRV1nfh"},{"type":"paragraph","children":,"text":"","id":"WYKKdki4WoSykmx6OJVcqWOunDg"},{"type":"paragraph","children":,"text":"","id":"BK6ydyYuaouyusx4pJfcnzCvnPh"},{"type":"image","attrs":{"height":701,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/2fcdba851350469c8f20a6fd2e54a3f8","width":526},"text":"","id":"Gukwd8S6oo0uMKxNGdKcgvECnCz"},{"type":"paragraph","children":,"text":"《计算机科学丛书:Java编程思想》","id":""}],"text":"","id":"Qyk4dmCKMouoUwxDv4BcZSonnv6"},{"type":"paragraph","children":,"text":"","id":"LOyCdEOUeo0MSixsRQOcsCACn1A"},{"type":"paragraph","children": Bruce Eckel","id":""}],"text":"","id":"NY06d6MISoicmMxkpXAcDYjwnxe"},{"type":"paragraph","children":,"text":"","id":"SASYdyGwMoMiMqx6Cn3c7fPfnFf"},{"type":"paragraph","children":,"text":"","id":"DmCwdc4UWo8kIyxkrbKcGAPFn3S"},{"type":"image","attrs":{"height":603,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/58be17df22694f249be5f539f0f12cbf","width":436},"text":"","id":"NuusdkO0KoEuqcxkhDUcaHIinNd"},{"type":"paragraph","children":,"text":"《疯狂Java讲义》","id":""}],"text":"","id":"Za0CdW40komg2KxiOCtcsN4pnNf"},{"type":"paragraph","children":,"text":"","id":"XAcQd6qs0oWqqGxUFeAcY2danZe"},{"type":"paragraph","children":,"text":"","id":"HImOdIWASoK8YGxkvUZcJhCHnrh"},{"type":"paragraph","children":,"text":"","id":"P0s8dmIUioYcsIxE13WcCFIgnJc"},{"type":"paragraph","children":,"text":"","id":"HqYKdqMICoW6Iexk7uecKI1ZnNb"},{"type":"image","attrs":{"height":685,"note":,"url":"https://p3.douyinpic.com/large/tos-cn-i-qvj2lq49k0/73f9b8449be24d31b0eb1b31f5d545fa","width":528},"text":"","id":"Nosid8Yukoa0aOxA54IcivKanue"},{"type":"paragraph","children":,"text":"","id":"ESKMd2eyCoKUQmxCgyCcBWYbn6f"}]%3C%2Fhowto_content%3E
如何从零开始学编程?
You can code. They cannot. That is pretty damn cool.– Learn Python The Hard Way
在你学习编程之前思考一下你的目标,当你有最终目标时道路会更加的清晰。那么,你想要写什么?网站?游戏?iOS或者Android应用?或是你是想自动化完成一些乏味的任务让你有更多的时间看窗外的风景?也许你只是想更具有就业竞争力找个好工作。所有的这些都是有价值的目标,这些目标都是你编程学习推动力的一部分,没有推动力的人,是无法在略显枯燥的漫长学习之旅中走远的。
不要浮躁
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天学通Java》这种速成书目,它们都承诺在很短一段时间内就让你能够学会相关技术。Matthias Felleisen在他的著作 How to Design Programs, Second Edition 一书中明确指出了这种「速成」的趋势并予以了以上的讽刺。
所谓的「捷径」或者说「银弹」是不存在的,智者说过,精通某个东西需要10年或10000个小时,也就是汉语中的「十年磨一剑」,所以不用着急,功不唐捐。
培养兴趣
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小时的编程时间中。编程很有趣,那是探索的喜悦。那是创造的喜悦。看到自己亲手完成的作品显示在屏幕上很有趣。有人为你的代码而惊叹很有趣。有人在公共场合称赞你的产品、邻居使用你的产品、以及在媒体上讨论你的产品很有趣。编程应该十分有趣,若并非如此,就找出导致编程无趣的问题,然后解决之。
这幅图取自 Douglas Hofstadter 的著作Gödel, Escher, Bach。图中的每一个字母都由其他更小的字母组成。在最高层级,我们看的是”MU”,M 这个字母由三个HOLISM(整全觀)构成,U则是由一个REDUCTIONISM(还原论)构成,前者的每一个字母都包含后者的后者整个词,反之亦然。而在最低层级,你会发现最小的字母又是由重复的”MU”组成的。
每一层次的抽象都蕴含着信息,如果你只是幼稚地单一运用整体论在最高层级观察,或运用还原论观察最低层级,你所得到的只有”MU”(在一些地区的方言中mu意味着什么都没有)。问题来了,怎样才能尽可能多的获取每个层级的信息?或者换句话说,该怎样学习复杂领域(诸如编程)包含的众多知识?
教育与学习过程中普遍存在一个关键问题:初学者们的目标经常过于倾向整全觀而忽略了基础,举个常见的例子,学生们非常想做一个机器人,却对背后的
理解物理模型 → 理解电子工程基础 → 理解伺服系统与传感器 → 让机器人动起来
这一过程完全提不起兴趣。
在这里对于初学者有两个大坑:
如果初学者们只与预先构建好的「发动机和组件」接触(没有理解和思考它们构造的原理),这会严重限制他们在将来构建这些东西的能力,并且在诊断解决问题时无从下手。
第二个坑没有第一个那么明显:幼稚的「整体论」方法有些时候会显得很有效,这有一定的隐蔽性与误导性,但是一两年过后(也许没那么长),当你在学习路上走远时,再想回过头来「补足基础」会有巨大的心理障碍,你得抛弃之前自己狭隘的观念,耐心地缓步前进,这比你初学时学习基础知识困难得多。
但也不能矫枉过正,陷入还原论的大坑,初学时便一心试图做宏大的理论,这样不仅有一切流于理论的危险,枯燥和乏味还会让你失去推动力。这种情况经常发生在计算机科班生身上。
为了更好理解,可以将学习编程类比为学习厨艺:你为了烧得一手好菜买了一些关于菜谱的书,如果你只是想为家人做菜,这会是一个不错的主意,你重复菜谱上的步骤也能做出不赖的菜肴,但是如果你有更大的野心,真的想在朋友面前露一手,做一些独一无二的美味佳肴,甚至成为「大厨」,你必须理解这些菜谱背后大师的想法,理解其中的理论,而不仅仅是一味地实践。但是如果你每天唯一的工作就是阅读那些厚重的理论书籍,因为缺乏实践,你只会成为一个糟糕的厨子,甚至永远成为不了厨子,因为看了几天书后你就因为枯燥放弃了厨艺的学习。
总之,编程是连接理论与实践的纽带,是计算机科学与计算机应用技术相交融的领域。正确的编程学习方法应该是:通过自顶而下的探索与项目实践,获得编程直觉与推动力;从自底向上的打基础过程中,获得最重要的通用方法并巩固编程思想的理解。
作为初学者,应以后者为主,前者为辅。
启蒙
「学编程应该学哪门语言?」这经常是初学者问的第一个问题,但这是一个错误的问题,你最先考虑的问题应该是「哪些东西构成了编程学习的基础」?
编程知识的金字塔底部有三个关键的部分:
算法思想:例如怎样找出一组数中最大的那个数?首先你得有一个 maxSoFar 变量,之后对于每个数…
语法:我怎样用某种编程语言表达这些算法,让计算机能够理解。
系统基础:为什么 while(1) 时线程永远无法结束?为什么 int *foo() { int x = 0; return &x; } 是不可行的?
启蒙阶段的初学者若选择C语言作为第一门语言会很困难并且枯燥,这是因为他们被迫要同时学习这三个部分,在能做出东西前要花费很多时间。
因此,为了尽量最小化「语法」与「系统基础」这两部分,建议使用 Python 作为学习的第一门语言,虽然Python对初学者很友好,但这并不意味着它只是一个「玩具」,在大型项目中你也能见到它强大而灵活的身影。熟悉Python后,学习C语言是便是一个不错的选择了:学习C语言会帮助你以靠近底层的视角思考问题,并且在后期帮助你理解操作系统层级的一些原理,如果你只想成为一个普通(平庸)的开发者你可以不学习它。
下面给出了一个可供参考的启蒙阶段导引,完成后你会在头脑中构建起一个整体框架,帮助你进行自顶向下的探索。
完成 Codecademy 的 Python 部分。这只是热身部分,尽快完成它,因为你永远只是在浏览器里,你不会学到如何搭建开发环境。在 Codecademy 这类的编程学习网站学到的那点儿东西,哪怕你只想做一个小的不能再小的项目,你都不知道该从哪儿开始。
完成 MIT 6.00.1x(中文化)(如果你英语不过关,完成麻省理工学院公开课:计算机科学及编程导论。MOOC 是学习编程的一个有效途径。虽然该课程的教学语言为Python,但作为一门优秀的导论课,它强调学习计算机科学领域里的重要概念和范式,而不仅仅是教你特定的语言。如果你不是科班生,这能让你在自学时开阔眼界;课程内容:计算概念,python编程语言,一些简单的数据结构与算法,测试与调试。支线任务:
完成Python核心编程
完成 Harvard CS50 (如果你英语不过关:完成哈佛大学公开课:计算机科学 cs50 。同样是导论课,但这门课与MIT的导论课互补。教学语言涉及 C, PHP, JavaScript + SQL, HTML + CSS,内容的广度与深度十分合理,还能够了解到最新的一些科技成果,可以很好激发学习计算机的兴趣。支线任务:
阅读《编码的奥秘》
完成《C语言编程》
如果你的目标是成为一名 Hacker:阅读 Hacker’s Delight
PS:如果教育对象还是一个孩子,以下的资源会很有帮助:
5-8岁: Turtle Academy
8-12岁:Python for Kids
12岁以上: MIT Scratch 或 KhanAcademy
入门
结束启蒙阶段后,初学者积累了一定的代码量,对编程也有了一定的了解。这时你可能想去学一门具体的技术,诸如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 解题集:对于书后的习题,作为初学者应尽力并量力完成。
完成了这部分学习后,你会逐步建立起一个自己的程序设计模型,你的脑子里不再是一团乱麻,你会意识到记住库和语法并不会教你如何解决编程问题,接下来要学些什么,在你心里也会明朗了很多。这时候才是真正开始进行项目实践,补充推动力的好时机。
关于项目实践:对于入门阶段的初学者,参与开源项目还为时过早,这时候应该开始一些简单的项目,诸如搭建一个网站并维护它,或是编写一个小游戏再不断进行扩展,如果你自己的想法不明确,Mega Project List 中选取项目。总之,务必在这时拿下你项目实践的第一滴血。
与此同时,别忘了继续打好根基。为了将来的厚积薄发,在下面这几个方面你还要继续做足功课(注意:下面的内容没有绝对意义上的先后顺序):
计算机系统基础
有了之前程序设计的基础后,想更加深入地把握计算机科学的脉络,不妨看看这本书:《深入理解计算机系统》 Computer Systems A Programmer’s Perspective。这里点名批评这本书的中译名,其实根本谈不上什么深入啦,这本书只是 CMU的「计算机系统导论」的教材而已。CMU的计算机科学专业相对较偏软件,该书就是从一个程序员的视角观察计算机系统,以「程序在计算机中如何执