我是霖哥,一个因兴趣入行的商学院毕业的程序员。最近有不少人,来问我,想学编程,但是又不知怎么开始。所以,我想在我的公众号“商学院毕业的程序员”中,把我自学编程的经历,毫无保留的分享出来。
现在的世界,是互联网科技的世界,人一天生活下来,从玩手机、购物、看新闻、听音乐,无处不在的都是编程代码所编织出来的世界。
不论是工作中的人,还是学生,很多人都有自学编程的想法,但是却不知道从哪里开始。
上网搜集相关自学编程的学习资料,什么C++、Java、Python一堆又一堆的术语,根本让人无从入手。
如果去问相关的计算机的朋友:“学编程该学啥呢?”
得到的答复,一般是先学一门编程语言吧,说学习C++或者Python吧。
接着,你就跑去买了一本C++或者Python的语言书。
才翻了没几页,完全看不懂,整本书都没一点人话,又碍于面子,不知道怎么问别人,担心别人说自己笨。
最后,一本厚厚的编程语言书,就这样成为了家里的装饰品。
霖哥没有接受过传统学校的编程教育,通过自学编程,用过11种编程语言做过项目。
总结多年的自学经验,建议自学编程,先学习的编程语言——JavaScript!
JavaScript不是Java!
(图:美国的Jordan品牌和中国的乔丹品牌,是没有关系的)
JavaScript(简称JS)跟Java,从编程语言技术上,没有半毛钱关系,别被她的名字欺骗了。
之所以叫JavaScript,是因为90年代Java大火,当年JavaScript的发明者网景公司把自己发明的脚本编程语言,带上“Java”的名号,让它更容易传播。
这就好比我们中国的乔丹,山寨了美国的Jordan品牌名气,其实它俩压根没关系......
在最初的十几年里,JavaScript一般是用于做网页上的动态效果的。而最近几年,有一个叫NodeJS的工具出现,它赋予了JavaScript全方位的应用能力,不论网页、App、后台服务器......总之,JavaScript语言几乎无所不能。
当然了,今天我们探讨的是,新手自学编程的第一门编程语言,我们不多介绍NodeJS,来关注用JavaScript用来做网页的部分。
奥巴马学编程
2015年的时候,奥巴马参加了一个“编程一小时”活动,呼吁世界上的所有人都应该学习编程,并以身作则,编写了一段很简单的计算机代码,在屏幕上画了一个正方形。
这也让他成为了美国历史上首位编写计算机程序的总统!
那么,那时候,奥巴马学习使用的,是什么编程语言?
答案是:JavaScript!
奥巴马写了啥?
据说,当时奥巴马学编程,曾写了这么一段代码。
moveForward(100);
在上一篇霖哥自己的经验,「我是如何用10天自学编程,改变一生」里,霖哥提及过,英语能力不能太差。因此,只要你英语不差的话,看到奥巴马的这一句代码,你应该能明白它的意思:
移动向前(100);
(图:奥巴马的编程学习网站)
没错,他执行了一个函数,叫moveForward(100)。 因为奥巴马当时使用的是code.org编程学习网站,它使用这个函数,促使屏幕上的卡通人物,向右(卡通人物的前方)移动了100像素!
理解「函数」
这里提及了霖哥认为编程中最最最最重要的概念——函数。
函数,很多时候,又会被叫着“方法”。所以要注意了,跟别人沟通时,“方法”、“函数”,很可能是同一个意思,它们英文是Method和Function。 (两者严格学术定义有一点差别,这里先不追究,认为一样的就好了)
所谓函数,学术上来定义,是一个统一的代码块;而霖哥的理解,函数就像一个别人生产好的工具。
看看你现在桌子上的杯子,我们知道,喝水要用杯子喝,杯子是别人生产好,我们买回来的。“函数”,就像是一个生产好的杯子,我们拿过来直接用。
上面,是站在“喝水者”的角度来说的,假如换个角度来说,“我”是杯子的生产商呢?那么,要做一个杯子,我们还需要各种各样的“函数”——比如,陶瓷、玻璃、包装盒...等等等。如果我是包装盒生产商呢?我还需要纸皮、绑绳等等等。
你想要生产某个商品,但是不可能说,所有的零配件都是自己生产的,部分零配件需要从外部获取。 而零配件,就是“函数”。 同理,你要开发一个软件,不可能所有函数,都是自己写的,大部分(甚至是绝大部分)的函数,也是需要从外部获取的。
所以,霖哥建议自学编程的第一课,一定要搞清楚“函数”的意义! 编程的本质,大部分时候,就是对“函数”的操控;而对函数的操控,它就像我们的生活那样,商品是从别人那里获得的!
这引申出霖哥自学编程的第一定律:
任何编程技术,都可以从生活中找类比!
搞清楚“函数”的意义,你就能理解大部分的软件工程了。
你要做一个网页,你需要调用“浏览器”的函数;你要做一个浏览器,你需要调用“网址解析”的函数;你需要做一个游戏,你需要调用“游戏引擎”的函数;你需要做一个游戏引擎,你需要调用“显示器显示画面”的函数;.....................无数的“函数”,一环扣一环的,组件了我们各种各样的计算机软件。
这又回到「我是如何用10天自学编程,改变一生」里谈到的话题了:自上而下的学习过程。这里对软件工程的思考,也是一个自上而下、从高到低的思考过程,先思考要做一个这样功能的程序软件,然后再思考,使用什么“零配件”去堆砌我们软件。
为什么霖哥推荐JavaScript作为初学编程语言?
开发环境到处都是
JavaScript的开发环境很容易弄起来,同时它是一只易入门的编程语言。
它是唯一能运行在浏览器网页的编程语言。因此只要有浏览器运行的地方,它就可以运行起来,试问一下,现在还有哪一台电脑或者手机是没有浏览器的吗?
而常见的Java、C++语言,就没有这样的好处。要学习他们,你就必须经过复杂的安装、编译过程,好不容易地才能运行一个小小的程序。这对初学者来说是一个不小的门槛。很多的初学者光在安装开发环境,就被折腾得半死。
JavaScript用途广
我们也经常看到,微信里经常出现的各种各样的所谓H5的活动网页,其实,就是用JavaScript开发的。
不论是做活动宣传、企业宣传、企业网站,经常需要工程师来做网页。做网页需要用到什么编程语言?就是JavaScript。
随着这几年JavaScript的发展,JavaScript已经不单只局限于网页前端了,现在还可以使用JavaScript来开发后端服务器、手机App甚至游戏。
它是目前编程语言中应用最全能的编程语言,并且普及程度还在上升趋势。
JavaScript职业需求量大
有一个职位,叫Web前端工程师。说白了,就是JavaScript工程师(另外还要有HTML、CSS知识)。
直到今天,2017年,前端工程师的岗位还是有很大的需求。
为什么呢?
霖哥觉得,因为大学计算机学科里,一般都是让你学Java和C++,就认为JavaScript一个搞网页的脚本编程语言没有前途。然而,时代早就在变化了。
教育供应跟不上,市场需求大,结果就是导致前端工程师工资水涨船高。
霖哥发现,很多学了几手JavaScript的前端工程师,比不少寒窗苦读几年、科班出身的C++技术大牛工资还要高。没办法,供求关系决定了薪资。
来一点实战
为了让准备自学编程的小白,加深对编程和“函数”理解,我们尝试来一段超级简单的代码,作为JavaScript的入门实战吧。
在以往的计算机语言中,我们经常会看见一个Hello World例子,其本质就是使用“屏幕打印函数”,然后输出“Hello World”文字。霖哥这里想弄个更复杂的例子,然后用拟人化的语言,来描述一遍机器的执行。
以下代码中,出现的英语单词都比较简单,能读懂英语单词,就能大概读懂意思了。
你也可以自己动手试一试,创建一个文件,叫test.html,把这些代码放进去,然后双击,就会看到浏览器的执行结果,输出了“300”。
<script>
function add(a, b) {
return a + b;
}
document.write( add(100, 200) );
</script>
它具体是怎么运行的呢?
我们首先把它翻译成中文方便理解:
<这里是代码(开始)>
函数 加法 (参数a, 参数b) {
返回结果 a + b;
}
网页.写上( 加法 (100, 200) );
</这里是代码(结束)>
我们再用拟人化的语言,来模拟这些代码的操作:
你是一个上帝,
你创建了一个函数,叫add(加法);
你手下有一个家伙,叫document(网页);
你说:document啊,执行你的write(写) 函数! 稍等,add(加法)函数会告诉你怎么执行的!
你说:add函数,给你100和200,把它们相加,完了告诉write!
add函数说:JavaScript语言机,把100和200加起来,返回结果!
write函数说:输出结果!
这段代码里,出现了两个“函数”,它们分别是add和write。
编程的本质就是操纵代码,也就是说程序员是代码的上帝。所以很多时候编程只是使用英语,对一系列的“函数”进行操作,各种各样的的“函数”,是程序员们的千军万马。
所以霖哥会说,英语很重要,因为只要懂得英语单词,并且愿意看,就能很容易看得懂很多的程序代码执行。
理解“函数”至关很重要,程序开发当中,几乎90%的代码都在不断地调用函数。当程序员想做一件事的时候,第一个要想到的,是“找函数”,而不是写具体的函数。
所谓的大牛,就是那些知道很多各种各样“函数”的人,他们利用各种自己所知道的“函数”,来满足自己的需求。
究竟怎么系统的学习JavaScript呀?
听霖哥说了这么多,霖哥更着重的,是希望自学编程的人,能先理解“函数”思维这一编程的本质。
如果现在就想具体地学习JavaScript,还是建议使用霖哥上一篇文章所说的《W3School:JavaScript》,快速学习、快速试验、快速理解。
往后的日子里,霖哥也会更多地讲解一些编程概念,希望把一些抽象化的编程理论,用具象化、拟人化的方式叙述出来。
下一篇文章,霖哥想说说建房子与编程的关系,能让你更好的理解“函数”思维。
作者相关系列文章:
我是霖哥,一个商学院毕业的程序员,通过自学编程成为一家大型上市公司的资深软件工程师。
在《商学院毕业的程序员》专栏中,我想持续分享我自学编程的经验和心法,用通俗的话提炼我的技术思维和对科技世界的理解,希望可以帮助到你。
如果觉得有用就分享给你的朋友,转载请注明出处《商学院毕业的程序员》。
如果在了解或学习编程的过程中有迷惘、或对一些生涩的科技概念的不解,用力留言!