我觉得这个可以类比我们学习一门外语。最好的学习方法应该是先不要去管什么语言的语法,严谨的时态之类的,先能用最简单的对话和别人交流。等到交流没有问题了,然后再开始反推进行深入的语法和时态等的学习。切忌从一开始就往幽深的黑暗深林里面钻,最终不是迷路了出不来,就是一开始就碰壁碰得头破血流,过早放弃!
第一,正确理解语言和程序的用途
首先,我们要正确理解语言的作用。语言是用来交流的,比如英语是用来和说英语的人交流的。而计算机语言是用来和机器交流的。
那既然语言是用来交流的,那通过计算机语言按照一定的逻辑编写出来的程序的作用是什么呢?那就是为了让机器能够按照我们希望的方式来执行我们的指令。
理解这一点非常重要,因为这能够让我们明确知道我们学习编程的目标是什么,有了目标,我们才知道我们应该采取什么方法去达成。特别是作为小白的我们,不要连学习这个东西的目标是什么就开始盲目的说想要学编程,最终只能流于口号。
这就好比幼儿园老师问小朋友想做什么,小朋友说想做科学家。问题是小朋友连科学家是什么都不知道,你看下长大后有几个真的成为科学家的?
言归正传,了解了语言和程序的作用之后,我建议这时作为小白的我们应该去尝试下不同的应用程序。这时最好的方法就是去使用不同的命令行工具,去体验这些程序的功能,看它们是如何按照开发者的意愿去执行指令的。
这里我推荐装个Linux或者macOS操作系统,反正你也是小白。对于小白来说,其实macOS比Windows更容易上手。而macOS和Linux都是类*nix系统,命令行上不少工具的使用方法是相通的。
这时你可以去尝试下Linux或者macOS下一些最常用的命令,比如ls,cd,ping,ps,cat,echo之类的。
这里要了解几个东西,一个是为什么这些命令这样命名,以便让你更快的记住这些命令;二是了解这些命令的作用,也就是我们刚才说的程序的作用就是为了让人们更好的和机器沟通,比如ls,是为了让你更好的告诉计算机说我要列出某个目录下的文件。三是为了给你下一步通过自己去调用这些程序进行最简单的脚本编程打基础。
那么熟悉这些命令整个过程大概会耗掉你多长时间呢?我估计约莫3周左右吧,只要你有耐心,应该到时你就能在Linux或者macOS命令行下流畅的执行一些命令来满足自己的需求了!
第二,以最简单的方法去上手编程
此时我们已经熟悉了一定数量的命令行工具,也清楚了语言是为了和计算机交流,程序是为了让我们更好的按照我们预设的流程和计算机交流。
那么我们下一步应该做什么呢?学习C/C++/Python/Java之类的编程语言?错了!
对于当前的你来说,学习这些语言还是太过于难,我相信你坚持不了几周,甚至几天,你就会发一遍文章叫做《小白学习编程之从开始到放弃》。
这时我们更应该做的就是通过最简单的方法去体验编程的乐趣,就像学英语应该先学会和人做基本的对话一样。
那么最简单的体验方法,我想应该就是通过脚本语言去将我们之前学到的命令给串起来了!
没错,先是将几个命令通过vim写到一个shell脚本文件上,然后通过chmod一下改下可执行权限,跟着执行下这个shell脚本。
当你看到输出的时候,作为小白,我相信你已经会感到很有成就感,感觉很神奇了。
而在内行人的眼里,你这个是已经是编程入门的一个HelloWorld了。同时你已经获取到编程的一些最基本的知识:
- 第一,我们是需要代码编辑工具来编写代码的,比如我们这里的vim
- 第二,代码就是根据符合某个语言规则的方式组合起来的一行行的数字,比如这里我们就是按照脚本语言的规则,一行写一个命令
- 第三,语言并不是和很多人说的那样需要编译器编译成自己作为小白望而生畏的二进制才能执行的
- 第四,程序是需要用户有执行权限才能运行的,比如我们这里需要chmod一下。
最重要的,这次的体验让你十分的兴奋,让你觉得可以尝试下不同的方式去组合不同的命令,然后通过管道等方式开始尝试去获取到一个命令的输出,然后保存起来,作为另外行代码的命令的输入。
这时,你应该乘胜追击,开始尝试看一下对应的shell,比如bash的一些基本语言组织规范(术语叫语法),然后尝试下加入一些条件判断,一些循环,甚至尝试下分出一个脚本来专门处理独立的一些命令,然后按下主脚本中怎么调用起来。
当你如此反复的玩弄shell脚本一头半个月之后,其实你已经算是上手脚本编程了!而脚本编程也是编程,所以,你已经算是上手编程了!
别小看这个,很多运维大神和黑客,厉害的点就是可以快速的通过编写shell脚本,用正确的命令去达成自己的需求!
而这个过程需要多久呢?如上面说的,我估计一个月,大不了两个月,基本上作为小白的你就能顺利的通过shell脚本来随意编写你的逻辑了。
第三,通过类比法学习一门可以写自己的APP的解析执行的语言
到了现在,你已经有了shell编程的丰富经验了。但是,毕竟shell还只是做批处理用的,你不能通过它来做出一个强大的应用,比如一个带有GUI的应用。
所以这个时候你应该更进一步,学习一门新的语言。听到这个词,作为一两个月前还是小白的你,是不是觉得很兴奋?是的,你已经熟悉一门语言了,编程老司机了,开始要掌握多门外语了。
这个时候我当然不建议你去开始学习C/C++之类的,因为这里涉及太多计算机原理性的知识,比如内存管理,编译原理,操作系统等相关的知识,虽说你不一定要精通,但是没有相关一些知识点,你确实很难学好C/C++。
况且,坦白说吧,我觉得如果你只是想要写自己的移动app或者桌面应用之类的,其实你很大可能都不需要去学习C/C++这些语言,更别说汇编了。
同时这里我也不建议你去学习C#/JAVA等,毕竟这里牵涉面向对象的一些知识,多态,抽象,继承这些还是有点难,且语法学起来也相对难点,对你当前的基础应该不是很适合。
也不推荐你学习Javascript + HTML5 + CSS3,毕竟这里每一项都可以叫做一门语言,学起来担心你嫌多,打击刚成为脚本编程程序员的你。
那么这里Python应该是个不错的选择。学起来简单,你在开始时也不需要非要用上面向对象的知识才能玩转,事实上,你完全不以面向对象的方式来写python,也一样能正常的做出自己的app。
同时还有一个挺重要的一点是,现在机器学习和人工智能是个大热门,而Python刚好就是这个热门领域的主要开发语言!
而Python应该怎么学呢?别忘记了你刚成为shell脚本程序员。其实语言很多基础知识点都是想通的,python上需要学的概念,你在shell脚本上也很多已经学过了,所以你一类比起来学习,基本上上手就快很多了。比如:
- 变量。
- 条件判断。
- 循环。
- 函数。
- 输入/输出。
- 字符串。
- 运算符。
如此这般的。当然,我相信你肯定会在学习的过程中碰到一些坑坑洼洼的。但是相信我,你在填坑的过程中,会越发激起你学习的兴趣的。
以你现在的水平,我相信把python的基础知识学完,到能够通过pyqt库写出一个计算器这样的应用,估计在两到三个月左右的时间吧。
你还不少嫌时间长,我说的还只是入门,毕竟你此前还只是有shell编程的经验。
等你接触越来越多了,你到时会发现你去学习一门完全陌生的语言,估计就只是早上看了下基本的语法,下午你就可以开始写代码了。这需要一个积累,骚年!
第四,上手之后的路该怎么走?
上面学习了shell脚本之后,我觉得已经算是对编程上手了,等到学了python或者javascript之类的,那么我觉得你就算已经是入门了。
所以这个回答到了这里应该算是了了的。
但是,毕竟你不是计算机科班出身的,你如果想在编程这个行业中走得更深更远的话,肯定还有很长的路要走。
所以这里我作为一名没有名气的老程序员,也就多嘴稍微多说几句。
首先,我们要明白人的精力是有限的,而计算机的知识,坦白说,真的是无限的。你不可能学完计算机所有知识。而其实很多外行的人是不知道这一点的,以为花几年时间下去,就能把计算机所有知识给学完。包括我自己刚上大学之前也是这样认为的,上了几年大学后才发现当时的看法是多么的无知。
庄子曰,吾生也有涯,而知也无涯,以有涯随无涯,殆己!所以我们应该要明确自己的方向,不要什么都想要去学。
而按照当前互联网领域的情况,方向是非常多的,比如算法工程师,嵌入式开发工程师,iOS软件开发工程师,安卓开发工程师,Windows桌面应用开发工程师,大数据工程师,Javascript全栈开发工程师等。
作为非科班出身的我们,因为我们的底子薄,所以我们一开始的时候尽量不要往自己不知道深浅的方向上去钻。我给出的建议是在前5年时间里,尽量往不需要接触硬件,不需要深厚的算法和数据结构知识,也不需要很好的高等数学、概率论、线性代数等知识的方向上去走,先把自己写代码和计算机相关的基础知识给夯实了。
其实说白了,就是你要把人家本科科班生花4年时间学习的那些基础知识给补回来,比如计算机组成原理、高数、概率论、线性代数、c/c++、数据结构、算法、微机原理、操作系统实现原理、软件工程思想、编译原理等等。试想下人家大学有教授教还要4年,我们靠自己边实践边摸索,估计5年时间还是比较合理的。
等这5年过完了,我想这个时候你编程经验也积累差不都了,相关的计算机知识也有目的性的夯实了。这时,我觉得不需要别人教你,你都知道未来的路应该怎么走了!
没想到一下子写了差不多4千字,挺长的,估计是我在知乎上写的最长的一次回答了。这就真的希望写出来的东西能对后来者有帮助了!
我是<a href="http://www.zhihu.com/people/c9dcefaf373f30df4c60ee3200c49f68" class="internal">@天地会珠海分舵,小程序「三日清单」 和「好学街」独立开发者。能力一般,水平有限,觉得我说的还有那么点道理的不妨点个赞关注下! |