如何学好编程一文彻底搞懂

隔行如隔山,在别的行业的人看来,编程非常神秘,觉得很神奇,怎么就在电脑和手机上出现了那个效果呢?怎么就批量处理那么快呢?而对于行业内的人来说,这一切都非常简单,就跟开车、游泳、说英语一般,不会的人觉得好难,会了的人觉得好简单。今天就来系统化系地阐述下编程初学者应该如何学习编程。

编程究竟是个啥?

首先,编程是通过计算机语言来实现数据计算和逻辑控制操作,主要内容是数据结构加算法。数据计算就是加减乘除,逻辑操作就是如果那么否则或者以及循环等。数据结构就是数据的组织方式,是本字典还是书架抑或一张图表。算法就是依据计算机语言对数据进行逻辑处理。

其次,编程离不开编程语言,你需要通过编程语言给计算机下命令。说白了,就是你想让计算机做什么,你通过编程语言来告诉它。编程语言会将你的想法翻译为计算机能看懂的命令,然后去执行。编程语言有很多种,不同语言应用场景不同,但语法结构和基本概念大同小异,深入理解一门之后就可以轻松掌握其他的。

最后,编程很简单,比数学、语文、历史、地理等专业知识都要简单,人人都可以学会编程,但要学好编程并不容易,因为最好的程序员不是说掌握了多少门编程语言,也不是说某种程序有多少种写法,而是深入理解了某个专业或领域,利用编程语言解决了复杂的问题。这其实对于哪个行业来讲都并非易事,这需要理解各个领域的门道。

作为一个初学者,应该怎么样来学习编程呢?

编程有哪些需要掌握的知识呢?我这里进行了基本的总结,希望能够帮助到你。如果你对此有个基本的掌握,那么可以说是编程入门了,做一些项目开发不成问题。如果你能够深入掌握以下这些知识,那么成为编程高手只是迟早的事情。

(一)从基础学起

1、编程的基础是数据结构加算法。数据结构就是数据组织的方式,算法就是数据运算的过程。

2、选择一门流行的高级语言入手,哪一门都可以,找你认为看着最舒服的。比如C、Java、Python、JavaScript、Go、Swift……。具体应该从哪一门开始,可以看下之前写的关于入门语言选择。

3、选一个操作系统、运行环境和开发环境。比如Windows、Linux、Mac,语言SDK或浏览器。开发环境,也就是IDE。文本编辑器即可,比如记事本、Notepad++、Sublime、VSCode之类。

(二)熟悉语言规则

1、找一本编程语言书或者对着网上语言入门教程,不断重复地敲代码。编程语言无非是语法、句法和数据类型和内置对象、方法等。这些不同语言有些差异,但差异不大。C/C++或者Python、Java、JavaScript、Go均可。

2、不断地调试结果,变换一些变量、参数、条件进行尝试。通过大量测试,慢慢就会熟悉语法规则。真的很好理解,就是像是人说话一样,按照最简单的方式来,别整复杂的。

3、熟悉语言的基本语法、数据类型、流程控制等。语言跟说话差不多,你会说话那么就会编程。编程在于重复练习已经学过的知识,学而时习之、温故而知新。

以下是一段关于质因数分解的C语言代码,结合注释,看下是否很简单。

(三)学好数据结构

数据结构就是数据组织存储方式,也就是把数据聚合在一起,以便进行加工整理。把数据从一种结构换成另一种结构就是数据处理,这是编程最常见的工作。

1、数据一般分为整型、字节、浮点、字符、和布尔等类型,也就是生活中的数字和文字,把它按照一定规则分下类,不同语言略有些不同。

2、数据结构有两种分类方法:

线性结构(数据一一相连)和非线性结构(数据非一一相连)。

集合结构(数据无关系)、线性结构(数据一对一)、树形结构(数据一对多)、图形结构(数据多对多)。

3、常见的结构有以下8种:

堆栈(Stack),线性结构,后进先出。

队列(Queue),线性结构,先进先出。

数组(Array),聚合数据的集合,可以实现线性和非线性。

链表(LinkedList),线性结构,数据以链式结构存储。

树(Tree),非线性结构,模拟树状结构性质的数据集合,一个顶点。

图(Graph),非线性结构,节点相互连接,每个节点都可以作为顶点。

堆(Heap),非线性结构,特殊的树形数据结构,一般指完全二叉树。

散列(Hash),线性结构,根据键访问储存位置的数据结构。

数据结构的概念一下子可能不好看懂,也不明确其中的区别。你可以把数据结构看成是一个个盛放东西的柜子或书架,里面有不同的东西。数据结构主要是用来给数据进行分门别类的,这样便于对于事物的归纳和理解。

(四)学好算法

算法那就是用计算机程序语言来解决某个问题的计算方法和步骤,比如从一堆数字中找出最大的一个,比如计算圆周率,比如实现一个文件加密和解密。

1、算法是一个计算的过程,包括加减乘除和逻辑运算。

算法人人都会,就是通过程序来一步步解决具体逻辑问题。其中有很多算法思想,采用好的思想远胜过一般思路。常见算法思想包括分治法、动态规划法、贪心算法、线性规划法、简并法等。

2、算法实现方式有递归与迭代。

递归是指在函数体里不断调用函数自身的方式。迭代是反复地运用同一计算方式的过程,一般是for和while循环。实现算法可以是串行计算、并行计算和分布式计算。

3、评价算法的优劣方式有时间复杂度和空间复杂度。

算法的时间复杂度是指算法执行所消耗的时间,用T(n)表示。算法执行时间通常是渐进式的,如果用函数f(n)来表示执行动作,大O符号来表示渐进性,则算法复杂度可以用O(f(n))来表示,即T(n)=O(f(n))。算法的空间复杂度是指算法执行需要占用的空间,可以用S(n)来表示。算法占用的空间也是渐进性的,也可以用大O符号来描述,即S(n)=O(f(n))。时间复杂度和空间复杂度往往是相互影响的,但在表示一个算法的复杂度O(f(n))时,人们通常指的是时间复杂度。

4、常见的算法有哪些?

文本,字符串搜索、字符串压缩、最大公共子序列、回文计算等。主要是针对字符串进行查找。

数字,进制转换、开平方、斐波那契数列、质因数分解、数字三角形等。主要是进行数值的运算。

十大排序,冒泡、选择、插入、希尔、归并、快速、堆、计数、桶、基数等。这些跟打扑克排序和挑大小差不多,很好理解。

其他算法还有很多,什么动态规划、贪心、矩阵、回溯算法等,这些呢也有用,但是暂时不用掌握那么多。

学习和应用算法并不难,只要会走路、会做饭、会打牌、会下棋就会算法。难的是发明新的算法,但那属于数学家、计算机科学家或哲学家的工作。绝大部分程序员都不需要发明新的算法,而是掌握现成的算法,进行算法组合和策略调优。所以,学编程,掌握算法其实并不难,学习算法更多的是掌握不同解决问题的思路。如果不知道该写什么算法,可以去leetcode看别人的问题和例子,那有很多算法题和解法。

(五)学会找开源代码

掌握基本的数据结构和算法之后,然后就是看别人的源码。

1、找开源精品,去github找就行,任何语言的任何库,算法或数据结构源码,任何框架。优秀源代码太多了,这里不一一列举,找适合自己的练习。如何区分代码好坏?一是可以看他人的评价,二是看目录结构是否清晰,三是看编码规范和代码结构。

2、看优秀书籍的源码。优秀的书很多,乱七八糟的书也很多。看到不好的例子会深受其害。那该如何甄别呢?从stackoverflow或quora、medium上找热门帖子,或者从豆瓣看编程书籍排名。书籍最好看国外作者的书,尤其是某语言、框架的作者,或者大学老师,大企业里的高级工程师。那些书有共同点,就是讲得非常透彻,把来龙去脉搞得清清楚楚,不会模棱两可,不会胡吹海侃。有三种书可以不看,一是国内作者的书,二是某语言和框架速成书,三是某某开发应用实践。

3、找到好的源码后,就是不断练习,类似打字就行。一定要对照他人的源码,不断地敲。一开始看不懂,也不明白是对的,但敲的次数多了,也就领悟了。这跟读四书五经和老子是一个道理,看不懂就不断朗读即可,读得多了,慢慢就会有所理解。所谓读书百遍,其义自现。写程序也是这样,找到经典源码,反复对照练习。

这是第五个建议,当完成这一步了,那基本上是一个合格程序员了。

(六)学好设计模式

掌握了数据结构与算法,通过不断实践也积攒了大量的代码,也开发了一些小程序和Web系统了,现在需要进行优化代码了。

如何让代码更加整洁、清晰、有效,有利于维护和可扩展呢?这时候就需要用到设计模式(Designpattern),也就是通用最佳实践方案。

1、有哪些常见的设计模式?

根据设计模式的参考书DesignPatterns-ElementsofReusableObject-OrientedSoftware中所提到的,总共有23种设计模式。总结起来有这么几个类型。

是创建型模式,也就是创建时不是直接new出一个实例,而是把new这个操作隐藏在方法背后,而是根据需要来创建对象。比如工厂、抽象工厂、原型、单例、建造者等5种。

是结构型模式,这里主要是类的继承被对象组合所替代的模式。有适配器、桥接、组合、装饰器、外观、享元、代理模式等7种。

是行为类模式,主要


转载请注明:http://www.aierlanlan.com/rzdk/4592.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了