自学编程真的很难吗?有多难?难在哪里?

自学编程真的很难吗?有多难?难在哪里?

“编程难吗?”这是很多人想转编程,或者是想学编程的都会问到,都会考虑到的问题。那这篇文章就来说说编程难,有多难?难在哪里?

编程难,首先入门就难。

“Hello,world”,其实并不像你想象的那么简单。

某虽不才,小学稀里糊涂的拿过县里奥数三等奖,95年就能用小霸王学习机(Basic)打出杨辉三角形,高中理科,98年能考进重点大学(专业悲催的国际贸易),大学期间还过了计算机二级(FoxBase),另外还参加自考拿到了法学学位和司法资格证书……说这些不是为了吹牛逼,而是为了让你知道我真正正儿八经的学开发的时候有多惨啊有多惨!!!

/(ㄒoㄒ)/~~

然后,我关了公司,卖掉了汽车,背起了书包,和一大帮毛头小子坐在一起,开始了我的编程之路。

真 心坑爹啊!说起来都是泪……我一个文科生,从中间开始学编程,这是一种神马体验?是“坐飞机”的体验呀!我26年的人生中,第一次体会到什么叫“上课坐飞 机”:老师讲的每一个字我都听得懂,但连在一起我就什么都不懂,完全不懂他在说什么。上机好一点,我TM至少知道开机。当然,除了开机我其他什么都不会 了。

你可能会奇怪,那我之前学过的 if...else 呢,我之前学过的select呢?

我TM的怎么知道?!谁让老师一来就给我讲什么“面向对象”——面向,面向是个什么鬼;对象,你说娟儿,我们马上就要结婚了……

印象最深的就是开头那几课,讲什么猫啊狗啊四条腿之类的

你以为挺过了这个阶段,能做出一个什么“图书管理系统”之类的玩意就OK了么?

培训班是从非常实用的角度出发的,有点像速成鸡,个头看起来好像不错,其实生存能力还完全不行。

在实际的学习工作中也发现了自己的不足,……,所以我要想提高的话,最好能去参加一次软考,过了软考怎么怎么牛B之类的。

和司法考试一样,软考也是有指定教材的;和司法资格考试不一样的是,这个教材是根本看不懂的!我又在网上下载了视频,没用,吧啦吧啦讲的些什么东西啊?本来热情高涨的信心被哗的泼了一瓢冷水,看着那些什么树啊、图啊、状态机之类的东西,一种无力感悄悄的从心里升起,随之而来的就是困顿彷徨。

……

我慢慢的明白,我之所以看不懂软考教材,是因为这教材里的每一个章节,都是大学计算机专业里的一门课程。这个教材,更像是一个大纲一个提炼总结,是给那些已经学过了《计算机基础和原理》、《编译原理》、《数据结构和算法》……的大学毕业生作为考前复习资料看的。所以,我要做的,就是先把这些所有的课程学一遍。

所以就有这个高潮部分了。

我来到图书馆,因为这里的书够多。比如数据结构,这本书我看不懂, 我就再找一本,还看不懂,我就再找一本……总有一本书,能用我懂的语言,告诉我这究竟是怎么一回事!一本不行就两本,两本不行就三本……空荡荡的图书馆里,我有一种进入了金庸武侠世界,博采众长,修炼高深武学的感觉。这种感觉不断的刺激着我的肾上腺素分泌,那种日夜不止的亢奋,直到今日,我都再也没有能体验到过。

……

在没有任何基础的情况下,我用4个月的时间,完成了大学四年的教程,一次性的通过了据说很多计算机专业毕业生都通不过的软考!我像狼一样的嚎叫,我泪流满面咬牙切齿的叫嚣,“就算我以后一辈子都是个笑话,我有这一次证明就够了!就够了!”

有了实战经验,夯实了软件基础,从此就走上了人生巅峰?

NO, NO, NO! too young too simple,

接着花式虐狗:

注意:不是装孙子。我就真是一个孙子!

正式上班的第一天,老大就甩给我一个100多页的文档,纯英文的,让我“先看看”。“先看看”是什么意思?不懂啊,更不敢问……

于是我就从第一页开始看吧。真心看不懂,不是英文看不懂,是里面的逻辑搞不懂……反正我就是不停的打瞌睡。睡又不敢睡,看又看不懂,问又不敢问,每天真的是如坐针毡如履薄冰。

……

老大的第二句话砸得我眼冒金星,“你先写个设计文档,给我看一下,然后我们就开工吧”!

如果可以自由表情的话,我的眼里一定满是泪水。设计文档?传说中的设计文档?长什么样的?但现实是,我的眼神柔和而平静,轻轻点头,“好的”。

但接下来写代码就惨了。因为多人合作,所以公司用的是源代码控制工具TFS,这东西我根本就没听说过,更不知道怎么用。小心翼翼的问了下同事,听得迷迷糊糊似懂非懂就只好硬着头皮上了。

然后就闯祸了,一天下午,听到同事叫了一声,“咦?(代码)怎么跑不过了?编译都不行啊?”我的心里一紧。然后很快,就听到诺大的办公室此起彼伏的惊叫应和,一会儿就像一锅粥一样。

“老叶,是你提交的代码出了问题?”

“啊?应该不会吧?”我后背开始冒汗。

“怎么不是?你看你看……”晕死!这MB的源代码一条条记录清清楚楚,捉贼捉赃,被抓现行了!

“快点把它fix掉,别人(的代码)都不能跑了”,见我还傻愣着,我们同事提醒我。

“fix掉?怎么fix掉?”我在心里悲鸣。装不下去了,只好硬着头皮承认原来自己不会。

“啊?”同事看了我一眼,还是过来帮忙吧。结果他也搞不定,“老叶,你究竟干了些什么呀?”

“啊,嗯,那个……”我支支吾吾,我哪知道我干了些什么?我要知道,会是现在这个样子么?

……

日复一日,我悲惨的境遇没有任何改变,不知道这种日子什么时候是个头。

以上引用全部都在《折腾》三卷:孕育 (初稿)哪里可以看到?有兴趣的同学可以自己去看。很多人觉得很热血很励志,但只是因为这是“事后吹牛逼”。

其实每一步都是一个坎。

很多人想学开发,买了一两本书,听了一两节课,天书一样,望而生畏,也就算了。这种人“连庙门都摸不到”,估计要占到一半?

剩下的下了狠心,死活硬撑着把培训班之类读完了(或者自学到一定阶段吧),但没有文凭没有工作经验,找不到对口的工作,只好先将就着找一份“相关的”工作,慢慢的渐行渐远,也再也回不了头了。

就算好不容易找到了工作,开头那段苦日子,也不是人过的。说句不好听的话,现在大多数90后,从小娇生惯养,受不得气,前几份工作换得走马灯似的……换着换着很多人就放弃了。

我上的培训班,二十多个同学,毕业的时候只有十来个了,毕业后做开发的五六个,一直到现在还做开发的……我知道的就两个。

好了,讲到这里,其实我还是在说“很难”,“万事开头难”,本来如此。但具体到编程,到底哪里难?还是不能回避这个问题啊,我总结一下吧:

1、理解难。

不知道是不是因为计算机还刚刚发展的原因,软件开发相关的书籍本身总量就很少,而且更麻烦的事,能称之为“精品”的就更少。这里所谓的“精品”,是指能深入浅出、通俗易懂的把道理说明白,说白了,面向初学者的书。

说都说到这里来了,多说几句吧。我发现很多人喜欢推崇“经典”(≈陈旧)的、“大部头”(≈学究式)的书籍,感觉好像要“一般人都看不懂”的书才是好书。我始终觉得这很荒谬,当然,也可能是我境界还达不到。我对于这一类知识性的教科书,就一个要求,让我以最快的时间获取到正确的知识。不要和我绕弯子,又不是看《红楼梦》;甚至不需要太精确,先给我一个大致的轮廓和印象都行。这样的书屈指可数!

所以,确实没办法,我只有硬啃啊。“这本书我看不懂, 我就再找一本,还看不懂,我就再找一本”,这其实是挺无奈的。

而且计算机的很多底层的东西,非常复杂。什么编译原理,数据结构和算法,我当时学这些东西的时候,就一个感觉:是不是世界上最聪明的人都来搞计算机了?他们的脑袋是怎么把这些东西想出来的?

以我涉猎的些许学科来说,其中的很多知识理解起来,需要的其实都是“常识”。比如法律,公平正义;比如经济学,需求供给理智人;比如建筑,构造力学……唯独这个计算机底层相关的东西,究竟是些什么鬼?!

烧脑啊!

就最简单的排序为例。我能完全理解的就一个冒泡,勉强能理解的有一个好像叫“二分排序”,然后其他的各式各样的排序算法,完全是……算了,都是泪,坏名头,不说了。

2、实践难。

有一些同学非常具有挑战精神。难是吧?越难我越有劲!

于是抱着书本就开始硬啃。

结果大家当然能想得到了,然并卵。

计算机本质上是一个“实践科学”。仅仅有理解,那是绝对不够的。是骡子是马,得牵出来遛遛。

这就是很多计算机专业的同学毕业后找工作很难的原因。

所谓“上不了手”啊。最简单的,连一个开发环境都搭建不起来,代码一报错就傻眼,断点调试全不会……实际开发中出现的问题是千奇百怪的,绝对不是你在学校机房,按照书本一点一点敲出来就OK的。

同样的,这方面的教材也非常非常的少。基本上只能靠大家自己摸索,或者运气好的,单位上有老鸟带一带。所以才有这种说法:“上一个月的班,比你自己看一年的书都强”。这种实践能力,确实是看书很难获得的。

+++++++++++++++++

呵呵,得顺便安利一下这个东东:倡议:我们“一起帮” - 自由飞 - 博客园。

希望能或多或少的解决一点这方面的问题。

+++++++++++++++++

好的,说完了入门,我们接着说:编程难,提高更难。

其实想想这话像白说的一样,因为任何一个行业做到一定程度再想要提高都很难。

一般来说,在这个行业待上两年,再多也就三五年,就应该能入门了。(我个人觉得,入门的标准就是能独立实现,自己岗位范围内的,大部分的功能)

以我有限的阅历来看(加这么一句定语,不是谦虚,是心虚了),编程其实是一个很大的概念,但我喜欢把它分成两种(简单重申,以前回答/文章都反复说过):

1、基础类的计算机科学。大概就是编译、算法,数据结构之类的,个人觉得确实是拼智商的。我承认,我一直没怎么搞明白这些人是怎么想出这些鬼主意的,我连弱爆了的排序都要掰着手指头算,他们搞什么树啊图啊之类的……没办法,只有膜拜!AlphaGo大战李世石现场直播我一集没拉下,心情一直不好了好几天——总感觉自己就是或者很快就会是一个废物一样。

2、应用类的软件工程。首先感谢主,赞美主,还是给了我这种傻子一条活路。在智商被碾压之后还能看到一些不那么需要智商的工作:IT民工——这不就是给我这个“包工头”量身打造的么?你看,连名字都这么像。我以前干的是建筑工程装饰工程,现在叫软件工程。

这一类型的开发工作,对于已经入门的开发人员而言,看上去非常简单:后台“无非就是数据库增删改查”,前台就更简单了,数据的显示和传递而已……就算要点什么新技术,“google+英语”就可以“卓越”,“百度+中文”就可以“应付”,一天到晚复制粘贴,修修补补,所以都说自己是个“搬砖的”。

怎么突破这种日常的、平庸的、琐碎的、繁杂的工作?

  1. 有的同学说,“往上爬,做管理吧”;有的同学觉得管理玩不转,“还是做技术吧,争取做架构师”;有的同学回头啃以前懒得啃没啃透的数据结构和算法,“不要在做码农了,我要做程序员”;有的同学觉得楼下贴膜小哥的生意不错,准备转行了……

我个人觉得:1和4都转行了,不在我们的讨论范围之类;3其实一开始就没搞懂我之前说的“计算机科学”和“软件工程”的区别;我们着重说一下2,“继续做技术,做架构师”这条路。

其实写代码写到一定的时候,你就会发觉:写代码就像写文章。本质上,编程无非就是告诉计算机要怎么怎么的做,就像一个说明书或者命令集,给计算机下一道一道的命令,如果怎么怎么,就怎么怎么……

这里有一道分水岭:“会”和“好”的分水岭。之前,是要“会”,比如语法正确、逻辑严密,要能和计算机正确沟通;但之后,是要“好”,这些命令要组织得“好”……

但首先怎么个好法,这就很难讲;接着,我要怎么样才能写得这样好,简直没法教。

最重要的是,选择A还是选择B,靠的是一种“权衡”。几条路摆在面前,怎么选?这就非常头痛。

尤其是做着ABCD单选题长大的孩子来说,这简直就是一场灾难。因为是这样也可以,那样也可以,都可以,都对!你怎么选?

你说既然都可以那我随便选,天马行空,想怎么来就怎么来!

但恰恰是你还不能这样乱来,因为后面会出问题。不是电脑出问题,是人脑出问题。随着项目代码体量的加大,复杂度的加深,之前不是问题的问题都会一个接一个的冒出来,各个问题之间盘根错节,牵一发而动全身,让你顾此失彼疲于奔命……

写不下去了,呵呵。

因为这些东西,你经历了才会懂,没经历我说了也是白说,你很难理解。

对于目前绝大多数的软件工程而言,最难的其实就是“驾驭复杂度”,因为现在的软件太复杂了!

+++++++++++++++++++

收藏于:

编程那些事:菜鸟入门·一起帮​

17bang.ren

欢迎访问关注,o(* ̄︶ ̄*)o

++++++++++++++++

自学编程真的很难吗?有多难?难在哪里?

最后很煞风景的加个推广,为了混口饭吃呀O(∩_∩)O哈哈~

飞哥办了一个IT培训班,http://ASP.NET全栈开发,线上全程直播,可以免费收看;线下拎包入住,按周收费。如果你是码农或者是有兴趣了解编程的可以加QQ群:729600626(一起帮·源栈·有意向)大家相互学习交流O(∩_∩)O哈哈~


分享到:


相關文章: