richardweiyang avatar

学编程,究竟学的是什么

richardweiyang

Published: 30 Dec 2017 › Updated: 30 Dec 2017学编程,究竟学的是什么

学编程,究竟学的是什么

​爱因斯坦说过一句话

我学得东西越多,我越意识到更多的我不知道的东西。

编程领域也是一样。

没有编程经验的人,心中对编程人员的理解可能就是电影上描绘的黑客。坐在密密麻麻屏幕前,随便敲敲代码,嗖,银行卡里的钱就多了,别人家的门就开了,说不定哪颗导弹就上天了。好像学会了编程就无所不能,为所欲为了。

是,确实是有可能做到这些的。“黑”到了别人的系统,你就可以想干啥就干啥了。但是落到具体的动作,就完全不是你想象的“敲敲键盘”这么简单了。

不说别的,就说编程语言。按照大类就有

  • 机器语言
  • 汇编语言
  • 高级语言

可能每天学一种,一个月都不带重样的。怎么样,是不是很惊悚。原因非常简单,计算机科学在短短的四五十年时间内发展速度实在太过惊人,每隔一段时间就会有新的技术出现。比如说现在大家能听到的云,大数据,人工智能都是在近四五年时间突然崛起的。

好了,那请问你说的学编程是学什么呢?是学哪门语言么?是学某个具体的技术么?这些都是。那对于一个想要学习编程的人,尤其是一个初学者,怎么样在这浩如烟海的计算机知识中选择需要学习的内容学习?又怎么样建立起自我学习的能力,在下一次技术革新的时候,能够有自己的判断力知道自己要怎么学习,或者自己不要学什么呢?

在这里我分享一下我自己的一点点总结,希望能够帮助到大家。

带着计算机思维学习经典语言

很地方都说语言是最不用学的一个,因为学会了一种语言基本上再学另一门语言就易如反掌。

是的,基本上没错。计算机语言之间(高级语言)可能有80%是互通的。只要你对某一门语言掌握得比较好了,另一门语言基本不需要学习。

那我为什么还要着重提这一点,而且还放在头一位?

因为对刚学习编程的小白来说,理解语言是进入计算机世界的一个渠道

就好像我们要进入英语世界一样,如果连英语都不会,别人再怎么说英语其实不难,你还是被挡在了英语世界之外。

除了要学好编程语言之外,作为一个老司机,我还有两个tips给到你:

  • 带着计算机的思维去学习
  • 要学习就要学习经典

第一点和学英语又很像了。很多人英语学了半天讲出来的一听就知道是中式的,这就是因为他没有用英语思维在说话。换到计算机领域如果我们知识掌握了一个语言的表面意思,很可能换到另一个语言你就慌了。

比如很多程序猿写代码已经很溜了,因为干这一行很久了嘛,所谓熟能生巧是也。然而很多人反应不会用git,说靠这玩意太难了。但是git已经是现在软件行业代码管理的事实标准了,不懂不行。为什么呢?因为在他们的头脑中想象不出git的运行机制,自然理解起来就困难些。然而你通过语言的学习,如果掌握了计算机的思维,那对以后的学习就所向披靡了。

写到这里我突然想起新东方三巨头王强在北大做过的演讲。其中提到学习的关键就是 读一流书

(视频无法嵌入,用bing 搜索“王强北大演讲读书如何改变我”。或者关注我的微信公众号“杨小伟的世界”看原文。)

我人生的捷径就是花了时间非常痛苦的啃了那些一流书,反而最后收益。

若能遇到像王强一样的老师,真是吾生所幸。

我推荐的学习的和王强当时学习的语言一样,c语言。在视频42:00段还提及了学习c语言时选择的经典书目。不过很多人都被c语言的难度吓跑了。却不知道看似挑了一条快速的道路,实则要用更多的时间去弥补。

跟着大牛学习经验和行业知识

如果我们抛开计算机思维,单纯把编程看作一项技能,那学习技能的最佳途径是什么呢?

跟着别人模仿

我们很多人觉得编程很难,觉得做某个新的领域很难是因为

我们没有看到活人在做

这一点在我之前的文章中也曾经提到。当我们开始一个新的领域时,我们通常倒在了最最简单的地方,而不是传说中很难的地方。比如我之前参加全栈营的学习,很多同学在系统环境配置上就倒下了,还根本没有到代码编写,真正体会编程乐趣的时候。因为有非常详细的教材,有助教和同学的帮助,很快速的跨过了第一阶段的环境问题,避免了大家倒在一个根本不是问题但又确实存在的坑上。

所以学习编程的第二点就是找到某个领域的大牛,看着他是怎么做的,从他身上获得这个领域最直接最快速的套路,避免自己跌在前任曾经跌过的坑里。不仅是编程,我认为这是进入所有新领域的最快速的方式。

而且这也是你能“买”到的唯一方式

又回到全栈营的例子,作为一个资深程序员我获得的是什么呢?

  • 用RoR搭建网站的套路
  • 发布自己网站的套路
  • 各种工具使用的套路

所以编程学习,不仅仅是我们想象中的语法和代码,还有周围的各种软件的使用,工具的搭配,外部资源的利用等等。这些如果是依靠自己摸索那绝对避免不了踩坑,这也是这些牛人经验的价值所在。

持续训练自己的逻辑思维

编程说到底是逻辑在软件上的体现。这也是我上一节中说大牛的经验是唯一能“买”到的东西。逻辑思维能力不可能由别人告诉你,哪怕是告诉了你一种方案,下次遇到新的方案你就又懵圈了。

逻辑思维能力需要的是训练,而且是大量的重复训练

刚才被王强老师吓回去的朋友这次估计又要吓回去了,能读到这里的估计能有30%就不错了。在这个鼓吹一切都要快速的世界,人们最受不了的就是要花时间。恨不得马上学会九阳神功,或者像段誉一样吸收别人的功力。

记得武志红的专栏中说过(非原话,是我记忆的版本)

这世界一切都是时间的凝结

不论是你自己技能的提升,还是和别人的关系,都离不开时间的因素,只是大家都觉得自己会飞。

最近有朋友问“没有经验,能学会编程么?”这个问题我思考了很久,一开始一直不知道怎么回答。编程不是很简单吗,按照语法敲敲键盘不就出来了么?不对,那些神一般的代码还是看不懂啊,这能算学会了么?后来我终于想明白了,“学会”的概念是在太宽泛,太不准确了。

不同的层次对“学会”有着巨大的差距

  • 刚开始能输出HelloWorld就算学会了
  • 接着能够用代码读写文件就算学会了
  • 再后来能写个贪食蛇游戏就算学会了

在这个过程中,每一次的提升都对语言和工具本身的提升。这些都是比较好容易量化,但是如何让自己的程序有魂,能够写出自己想要的结果,则依赖于自身逻辑思维能力的提高。而这个过程则是永无止境的。

那回到学习编程这件事上,怎么样才能提高自己的逻辑思维能力呢?

不断练习

是的就这么简单。

以前有人问我为什么我的英语还不错,我想我唯一做的事情就是当时把所有课文都背到滚瓜烂熟。那些所谓的语法和语感就自然显现。这和逻辑思维能力一样,只要你不断的训练自然就能提高。但是这又不是一朝一夕,能够迅速让你看得到变化的。

这就涉及到了学习方法,恐怕本篇展开也无法说清。总结成一句话

学到了最少必要知识,就直接开干

写在最后

一入编程深似海

这是编程最痛苦的地方,也是编程最有乐趣的地方。

学习的东西总是那么多,但你总觉得自己在不断进步

对于一个想要学习编程的你,我的建议是:

  • 带着计算机思维学习经典语言
  • 跟着大牛学习经验和行业知识
  • 持续训练自己的逻辑思维

你来或者不来,程序都在那里,不增不减

最后放一个我曾经写的无聊的游戏吧

0.gif

Leave 学编程,究竟学的是什么 to:

Written by

Read more #programming posts


Best Posts From richardweiyang

We have not curated any of richardweiyang's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From richardweiyang