学编程,究竟学的是什么

​爱因斯坦说过一句话

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

编程领域也是一样。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

跟着别人模仿

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

我们没有看到活人在做

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

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

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

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

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

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

持续训练自己的逻辑思维

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

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

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

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

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

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

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

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

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

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

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

不断练习

是的就这么简单。

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

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

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

写在最后

一入编程深似海

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

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

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

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

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

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

0.gif

Coin Marketplace

STEEM 0.27
TRX 0.11
JST 0.030
BTC 70572.77
ETH 3817.08
USDT 1.00
SBD 3.53