我是霖哥,一个因兴趣入行的商学院毕业的程序员。霖哥一直觉得,编程做软件,就像造房子。所以,我想把我自学编程的经历,毫无保留的分享出来。
毕业了,却不会造软件
有很多的大学计算机专业的毕业生,到他们毕业的那一刻,却还是搞不懂,怎么样去开发一个软件。
可是,他们明明在学校里面的成绩就不错啊,什么C语言、Java语言等编程语言课程,数据结构啊,编译原理啊这些,都学的还不错,甚至还拿过奖学金,可是很多为什么依然没有动手能力,去完成一个软件开发呢?
我们,先从一个造房子的故事来开始说起。
造房子
在上一篇文章里面,霖哥把“函数”比喻成“砖头”,把“架构”比喻成“建筑结构”,说编程就像造房子。
为了说明这个问题,霖哥专门斥巨资买了一个房子的玩具。
就是这一个玩具房子,霖哥从网上买来的,除了一个房子,还有家具,布娃娃,你可以自由地把它们组合摆放。
(图:复杂多样的零配件)
拆开长长的包装盒,会发现,这个玩具房子会有各种各样的零件,并且它会有一个说明书。霖哥把零件出来,然后根据说明书,一件一件的把零件给组装起来,它就变成了一个完整的房子。
这可能对大家来说,会觉得,这不是很正常吗?
可是我们往深里想一些细节:
这个椅子是用什么材质做出来的?
里面的娃娃,用什么材料制作的?
上色的颜料,是用的什么牌子的?
这个玩具的,整体是怎么设计出来的?
作为消费者,你不需要知道,你也不想知道,你恨不得买回来的,一整个玩具房子帮你装好了。
我们回到现实生活中,所有的房子的建造,不都是这样的吗?
房地产开发工人,他们去买不同牌子的水泥,不同牌子的钢筋,不同牌子的管道等等等等。在造房子的过程中,无数的零配件都是通过第三方购买而得来的。
没有人说为了造一个房子,自己去生产水泥,自己去生产钢筋,这不太可能,对吧?
用造房子的思维,自学编程
很多自学编程的同学都来问我,自己在学习Java语言、C语言一段时间了,感觉距离要做项目、找工作,还遥遥无期。
有这么一个人,觉得高楼很宏伟、很漂亮,他从小有一个梦想,去建造一栋超级高楼,然后他就学习搅拌水泥,学习粉刷墙面,学习打钉子等等。
可是,学会了这些,距离他建造一栋高楼的梦想,还有非常遥远的距离啊。
现实生活里面,我们不会遇到这种人吧?如果有一个人真的有一个梦想去造高楼,他绝对不会去学习打钉子,相对的,他更可能会去建筑学院,去学习建筑设计,CAD制图等等。
而在霖哥看来,这种学打钉,学刷墙,有点像学习编程的时候,大把大把的时间,学习计算机运行、硬件机制等一些基础的东西。大学课程,花去我们大量的学习时间去学习的这些知识,距离我们最初的梦想,去做一个软件,还有很远很远的路。
这样一个比喻,我们可以大概看出,跟想造房子的人会去读建筑设计的人不一样,现在的学习编程课程,很少人说会像学建筑那样,先学软件开发整体设计,而是一上来先学习怎么“打钉”,“刷墙”。
拿霖哥自己来说吧,霖哥最初只是想实现一个自己的想法,做出一个社交网站,可以被很多人使用,这就是霖哥最初的梦想。只是在实现这个想法的过程中,不小心地学习了编程,自学得越来越深,不小心进入了这个行业。
在上两篇文章里面,霖哥都提过一个思想叫做,函数思维。我说过了一个软件程序,90%都是通过各种各样的函数给堆砌起来的。
我们在学校里面学习的编程语言、数据结构。构成了函数的基础。但是,要做出一个完整的软件,我们更重要的一点是,我们要知道,有什么函数来给我们服务。
这些函数就像我们上面这个房子玩具里的配件。
在实际的软件开发过程中,我们就像造一个房子一样。去找出各种各样不同的函数来为我们服务。
而学校里面偏偏没有教这样的技能,所以很多的毕业生,到毕业为止,他们只知道了基础的编程语言语法,基础的知识。
要真正的去完成开发一个软件程序,则还需要大量的“函数”知识,知道要完成某一个模块,需要什么样的“函数”和第三方库,
还有各种各样的的工具、框架,光学习编程语言,可学不到这些东西。
比如说你要进行网络通讯吧,我们要用socket,socket是怎么做出来的呢?你不需要知道。
比如说实际的开发过程中,常用到map这个数据结构。职业程序员工作中,很少会自己重新去实现一个,都是拿现成的过来用的。
所以很多人学完一门语言,觉得没用,那是理所当然的。
霖哥推崇的,是一种至上而下的学习方法,先定一个小目标,宏观地学习软件设计,学习框架,伴随着学习的深入,再注重具体的技术实现细节。
爬虫
霖哥有一个朋友,他并不懂编程,他是金融行业的,想做一个爬虫程序,可以去搜集一些的股票数据,自己做数据分析。
他花了不少的钱,报名网上自学编程的课程学习。他觉得花了很多的时间,好像课程一直都上不完了,距离自己的那一个目标遥遥无期,感到非常的沮丧。
霖哥就告诉他,编程开发就像造房子,为了造房子得找到各种零配件;既然你想做一个爬虫,你就要去找到实现爬虫的工具。
因为他是学习Python的,霖哥就介绍他一个Python的爬虫框架,叫做scrapy,一个Python开发的专门用来爬去网络数据的应用框架工具,使用它你可以非常方便地抓取网络数据,不需要关注很多技术的细节,他都帮你处理好了,你只需要直接用就好了。
他说,他还没学习Python的网络编程,也能做爬虫?霖哥说,哈哈,使用scrapy完全不需要考虑这方面,它都帮你做好了!你让它“抓”,它就去“抓”,怎么“抓”,你不需要理会,你只需要告诉他“抓”什么就好了。
总结
今天我们讲了,造房子,是通过各种各样的零配件和第三方组件来构成的。根据这个故事作类比,在自学编程的过程中,我们也要像造房子那样,想开发一个软件,就应该先去了解有什么样的“零配件”、第三方开发组件,来让我们做成一个软件。
可能这对很多科班出身的人来说,会觉得三观尽毁。编程,就应该慢慢地,学好基础的东西,稳扎稳打,才是学好编程的最好方法呀。
别急,霖哥就是这样一种学习方法的过来人。伴随着做软件的过程中,霖哥也慢慢地根据开发需要,把一些基础的知识学习回来。在霖哥后面的文章里面,将会详细的讲述这些经历。
霖哥希望把自己的学习方法分享出来,因为,霖哥认为这些经验对自己很有用,这就意味着对其他的很多人都会有用!只要是对人有用的,那么霖哥就相信它是有价值的,它能够帮助到你。
如果觉得有用就分享给你的朋友,转载请注明出处《商学院毕业的程序员》。
如果在了解或学习编程的过程中有迷惘、或对一些生涩的科技概念的不解,评论里留下你的疑惑!