老师都不会告诉你的,关于编程的秘密,看完以后恍然大悟,炸锅了


本文约3500字,阅读时间大概为8到10分钟。

如果编程是一门“艺术”,那么编程语言就是工具,而“艺术”的根在哪里?

我在初学编程的时候,是以一门课程来学习的,记得非常清楚,第一门编程语言学的是汇编,那个时候没有人告诉我,编程到底是什么,我们只是想将它学好,按照教科书上的内容,找参考资料,将所有参考资料上的例子全部实验一遍,寻找哪里有错误,询问老师,当时老师也是很努力的给我们解决实际过程中遇到的问题,可是,当我们学完了以后呢?考试结束了,伴随而来的也是这门语言的遗忘,为什么?因为缺少了应用、缺少了核心的理解。

第二门语言也是以课程的形式学习的,C,这门语言比汇编容易一些,至少能够去理解一些,但是,考试结束了伴随而来的是什么?还是遗忘!同样是因为缺少了应用和核心的理解。

这种情况持续了很久很久,当时我和我的同学们基本上看不到希望,因为我们不知道我们到底学了什么,我们不知道我们将来毕业以后能干什么?难道就是这样毕业吗?

直到我们学了算法,我当时有一种感觉,在黑暗的森林中,看到了曙光,终于看到了希望,因为我明白了一个道理,语言是算法的一种体现,在设计的过程中,核心内容为算法,工具为语言。这个时候又出现了另外一个问题,计算机是机器,只认01,我们如何让计算机理解我们的内容,并且存储?当时询问老师,老师回答:“回去找数据结构的书看,看完以后再来找我。”我遍寻图书馆,借来5本参考书,如饥似渴的读,我记得当时我每天只睡3到4个小时,那个时候真的是有点得到了武功秘籍一样的感觉。读完了以后,我好似打通了任督二脉,终于明白了编程的根本,也终于明白了为什么编程是一门“艺术”!

如果说编程是一门“艺术”,是因为编程是优雅的与机器交互,从而让机器解决现实问题,能够更好的解决人力发展的局限性。简单来讲:我们制造出来机器,为了替代我们人类去解决一些问题,而如何让机器工作,就是编程的“艺术”!

如果说编程语言是工具呢?是因为人类的语言与机器的语言是互不相通的,而你要让机器去解决问题,必然要通过一种工具使得人类与机器能够交互,这就是编程语言的工具。

“艺术”的根,在于算法与数据结构,这些是是计算机的根本,因为算法解决了如何让机器做的问题,数据结构解决了存储的问题!算法中的优化问题,能够处理问题的速度更加迅速、或者更加符合业务。

老师都不会告诉你的,关于编程的秘密,看完以后恍然大悟,炸锅了

编程语言是在不断的发展的,在每一个阶段,会有一个阶段的王者!

跨度大一点,我们讨论完“艺术”的问题,再来讨论一下工具的问题。什么是工具,工具就是为了解决我们现实中遇到的一个问题,使得更加简单、方便、高质的一个可以使用的物体。从进化学的角度来讲,工具也是区别于人与动物的根本。人为什么既无尖牙也无利爪的情况下,还可以处于食物链的顶端?就是会使用个工具。那么编程也是一样的。人为什么能够命令机器,因为咱有工具!

那么,既然是工具,就必须要符合这个社会的需要,需要不断进步,根据社会的条件而进行更新换代。编程语言也是一样的道理。比如:在计算机发明出来的时候,计算机算力以及存储是很宝贵的,编程语言要求尽可能的节省存储于算力,这是硬件的要求,你没地方说理。就好像是远古社会,每天人类都吃不饱,你还考虑穿衣的内容吗?穿暖就行了,不考虑样式;现在解决掉了温饱问题,对于穿衣、吃饭也就提出了要求,要吃的好、穿的美!这是社会发展的必然,没什么奇怪的。那么,这就会出现一个问题,编程语言这个工具是如何进化呢?其实也是相同的道理,比如:C,面向过程,极大程度上节省硬件资源,同时由于是面向过程,所以逻辑上更加清晰,使得机器在运行过程中效率很高。为啥,因为在C的广泛应用的时候,那个时候计算机硬件是相当昂贵的,你没事不可能上一个现在的超级计算机上去,没有!所以只有节约,高效。那现在呢?比如:python,效率比C低很多,但是无所谓,为什么?因为现在很多地方对于计算机算力及存储要求的不高,很多都是过剩的;但是对于开发效率以及迭代效率要求的比较高,因为现在是一个高速的时代,你慢了就有可能被替代!所以诞生了偏向开发高效的一些语言!你能说这些语言不好吗?并不是,只是适应社会发展而已。同样也是工具在进步而已。

这里我用一个比喻我觉得比较恰当:好比是农民伯伯种地用的锄头,一开始,农民伯伯由于体力优先,因此他会去优化锄头头,优化锄地动作,让锄地更加的方便,高效,从而节省体力,能够干更多的工作。因为这个时候农民伯伯的体力是有限的,也就是说,计算机算力是有限的。(锄头好比是编程语言,锄头头和锄地动作好比是数据结构与算法。) 那么,现在我们出现了机械化,从某种意义上讲,我只要加油,就可以耕地,那么,我们考虑问题就会转变,转变为,我如果更多的耕地而获得更多的收益,因为有了机械化,我加油就可以了。这就是工具的提升(机械化是编程语言)。但是,这里面有一个问题,你再机械化,是不是也得需要一个类似于锄头的东西在耕地?这就是根。 如果再继续推理下去,所谓的算法是,我的这个锄头用什么样的力量锄下去,用什么角度锄下去,能够耗费的能源最少,获得的收益最高,这就是算法的优化,也是算法的根。那么数据结构是什么意思呢?我的这个锄头的 头用什么样的材料?用铁?用铜?还是用其他金属?能够使得这个锄头用的时间最长。 这就是计算机的根。

老师都不会告诉你的,关于编程的秘密,看完以后恍然大悟,炸锅了

既然是工具,那么如何能够学好呢?

这是一个很高深的课题,很多人会告诉你,你要多练,没错,多练是根本,我这里就不再赘述了。可是我们要理解一个问题,这个问题是,仅仅是多练就可以了吗?

相信大家都看过一本书《天龙八部》,里面有个角色叫虚竹,到最后厉害吧?可是之前他如何呢?换句话说,仅仅是多练,没有很好的方法,没有理解是绝对不行的,因为招式的厉害是一时,当你不再年轻,体力不再好,那么伴随而来的是什么呢?淘汰!

还记得《天龙八部》里最牛的人是谁吗?“扫地僧”,他呢?不年轻,招式几乎没有写,为什么大家都觉得他比较厉害呢?这就叫“内功”,“内功”是可以随着你的不断深入的理解而不断加深的,到一定程度就变为“无招胜有招”了!

现在整个社会过于浮躁,造成大家只重视招式的训练,而忽略掉“内功”的修为,这从某种意义上讲,也是为什么产生中年危机的原因,尤其是IT这一行!

老师都不会告诉你的,关于编程的秘密,看完以后恍然大悟,炸锅了

既然“内功”重要,我要如何修为“内功”!

我不是一个“专家”,所以我不敢说的比较大,仅仅是建议吧,其实多听听“专家”的蛮好的,听的多了,再听听我的,有点帮助最好,建议、建议、建议!

无论你是要做什么,开始的第一步必须是打好基础,这你没有跑的,只有基础打好了,才有继续提升的根,根稳了,才能长的高,长的快!基础是什么?数学是基石,很多情况下,算法的思维借用了数学中的极限思维,比如:蚁群算法,蚁群算法的核心思维就是无限的蚂蚁一直爬,爬的多了,留下的最深的那条线就是最优解。可能有小伙伴说,我数学不好,注意,我讲的是数学思维,很多情况下数学思维比数学解几道题重要!

其次,编程思维,编程思维也有很多很多“专家”讲过,大家看看,也可以参考一下我的,我认为的编程思维其实很简单,就是将复杂的问题分解掉,然后分别抽象出模型,之后识别模型,利用算法解决问题。说的高大上是把,我们举个例子:包饺子(饺子是世界上最好吃的食物。)我们需要干嘛?第一步,问题分解,面皮、馅料、合二为一。然后抽象出的模型分别为:面皮、馅料、手法。继续我们进行模型识别,面皮要通过和面、揉面、擀面,存放面皮等等,馅料需要剁肉、剁菜、调味、搅拌均匀。手法需要正常包、花样包、机器包等等。然后我们利用某种算法解决掉这个问题。这其实就是编程思维,我们很多人都有这种思维,只是没有很好的利用而已。

再次,你理解了这些以后,你需要学习计算机基础知识,你得知道计算机的构造是什么,怎么运行的对吧,你不知道这些怎么和人家聊?就好像是你和一男朋友(女朋友)谈恋爱,你都不知道人家的喜欢什么讨厌什么,你怎么谈恋爱?

然后你需要学习数据结构和算法,只有理解了这些,才是开始。这一步其实会困扰很多人的,因为你缺少方向感,所以很多人在这一步退缩了。

最后,你需要使用一个工具,将你理解的内容写出来,因为你只有写出来了,才能实现,就像你心中的白马王子(公主)长什么样子,你得画出来或者写出来吧,不然谁知道。所以需要一门编程语言来进行。

到这一步,基本上圆满了,之后就是按照自己所想的内容,无限输出就好了,但是我的建议是,遵循开源的理念,别动不动就收个费神马的,计算机这玩意得开源才能发展,技术的保留其实从某种意义上讲限制了技术的发展。

老师都不会告诉你的,关于编程的秘密,看完以后恍然大悟,炸锅了

老师都不会告诉你的,关于编程的秘密,看完以后恍然大悟,炸锅了


老师都不会告诉你的,关于编程的秘密,看完以后恍然大悟,炸锅了

老规矩,转发+关注并私信小编:“学习”即可带走哦唉,写的有点多了,为了头发!不写了!

希望可以对还在路上的人有所帮助。


分享到:


相關文章: