一个零基础的文科生学编程有多难?为什么单把文科生拎出来,这里不是歧视文科生,只是想强调过往没有任何的编程和计算机基础这一点,而大多数理工科的毕业生多少都有一点基础。

我到现在都不能说自己是个程序员,但我自认为有足够曲折的编程自学经历来现身说法。

第一难:学什么语言

6年前的春天,我买了第一本编程书,一本C语言的书,得有4厘米厚,京东畅销书。这可能是任何一个自学编程的人能做出的最差的选择。然而,我不知道是听信了谁的鬼话,也不记得为何没有进行网上搜索,也许那时还没养成搜索的习惯。

C语言公认的难学、难用,用途比较单一,大概只有毕业没多久理工科生的才会带着学校课程表的惯性给新手推荐先学C语言。

正确答案是:Java、Python、JavaScript,随便选一个吧。

第二难:选择什么教程

上面说我学编程的第一步是买书。这是我犯的第二个错误。书籍中的内容更新滞后,远远比不上现代的编程语言。书籍的内容偏重理论,而编程是一个注重实操的手艺。而且不是每个人都适合跟着书学习,视频的互动更强一些。书不会照顾一个新手,而视频课程的设计者会考虑新手的学习曲线,会把教学和练习相结合,会根据编程学习的特点强调实践。另外,编程书一般都非常厚,里面不是文字就是代码,真的让人望而却步,尤其是对于战战兢兢的新手来说。

正确的选择是:靠谱的视频课程,推荐Udemy这种大平台的热门课程。不要选大学课程,那也是偏理论的。

第三难:如何面对报错

我已记不清有多少次了,百度我的报错文本根本没有结果。为什么?因为没有人出过这个报错。只有我,只有纯新手,才会因为种种奇葩的原因,发现全新的报错。而根据我的经验,这个报错的原因一般是一个低级错误。

前两天,Xcode就无法预览某一个View。我有什么办法?没办法,我跳过了。

我觉得对于无关紧要的问题或者报错,一个核心态度就是打不过就跑,认怂。不要在上面浪费无谓的时间和精气。同理,对于那些一时不能理解和掌握的概念,留给时间,留给后面的学习。

第四难:如何练习

初学编程时,我以为练习就是要去codewars这样的网站完成一个个小任务,一个个代码片段,对基本的编程语法做练习。

但这样的练习做一万遍,还是徒劳。正确的做法是以项目为导向。练习一开始的目标就是完成一个项目。项目可大可小,但项目有明确的用途。在完成项目的过程中,你会学习从整体看问题,会学习试着解决任何一个出现的小问题。

正确的做法:从项目学习,用项目练习。

第五难:如何坚持

对于新手来说,很多概念都是闻所未闻的。每一个闻所未闻的概念,都是似懂非懂的。就是这种似懂非懂的状态下,持续往下学习。累积的似懂非懂越多,就越心虚,越决定自己不行。

同时,越深入学习,越觉得编程中有太多的细枝末节需要考虑,太多的库需要学习,太多的弱点需要强化。胡适会说,进一寸就进一寸的欢喜。但霸王别姬里的小豆子,却哭着喊“这得挨多少打啊”。不是所有人都能面对重压。

对自己的怀疑,加上对编程学习本身的质疑,放弃真是一个诱人的选择。

这里的建议是,不要对自己太苛求。累了就休息,休息好了就继续。别有完美情结。

第六难:学习编程为什么

千辛万苦学会了一门编程语言,做了一两个小项目。然后呢?转行基本没门。本职工作好像也不怎么用得上。那这个新学的手艺就撂这儿啦?只要3个月不写代码,再捡起来就又得重新复习那些本就基础不牢的语法。捡起来后也还是不知道能拿这个来干什么。

所以,如果你想能够持续地学下去,你得知道自己想用编程做什么。仅仅是喜欢?这是一个不错的答案。不管什么答案,都一定会有一个与之匹配的结局,种瓜得瓜种豆得豆而已。

祝你学有所得,学有所成。