最近,看到有很多人在问,怎么学习编程?从什么语言开始学起?作为一个十几年的老码农,我也只能是分享一点我的经验。至于具体要学什么语言?我也不好妄加评说,毕竟每个语言都有其存在的价值。不管是传统的Web开发,还是现在流行的小程序开发,都离不开JavaScript;Java在互联网服务领域的风头依然强劲;iOS的开发离不开Objective-C和Swift的原生支持;Python在大数据、人工智能的开发中有着巨大的优势……
几年前,由于项目原因,我开始iOS开发的学习。以前一直是做Java,没有机会、也没有动力去看iOS的项目开发。听说iOS应用是用Objective-C写的,貌似很不好学,所以也不曾动手。这次赶鸭子上架,也实属无奈,但好在有了Swift,让我的尝试之路少了些许的辛苦!今天有机会,将我的一些学习经验分享一下,与有志之士一起共勉!
第一阶段,当然是先看官方文档了,这些是最权威,也最实惠的东西。拿到Swift,我先把官方的介绍和文档花两天时间过了一下,感觉它跟Java在有些地方很像,所以不自觉的对照着Java去想、去学,倒也没遇到什么特别的难处。在看文档时,发现在Github上有中文翻译,也是帮了我的大忙。一边看原版,一边看翻译,即能明白有些英语的表达,又能更深刻的理解,相得益彰!
其实,我还是鼓励程序员能够看一些简单的英文文档的。
一是我们公司以前做欧美的外包项目,偶尔也会有英文邮件沟通,能借助词典勉强看懂。
二是需要经常在Google里面查一些东西,计算机专业类的词汇还是积累了一些,有时候就觉得中文翻译过来反而没有英文的那层意思了。
三是写代码的时候,各种命名,都需要尽可能的用准确的单词,也还是做欧美外包给闹的,那时候经常因为命名不规范而挨批。现在想想,也还是受益匪浅的。
面对一门新的语言,首先要明白的无外乎两点:语法和语义。
也就是说,首先,我们要搞清楚这门语言的基本的语法结构,其次,要搞清楚它的语法规则和使用规则。
所以,对于第一阶段文档的学习,我主要从以下两方面学起:
第一、有哪些数据类型?
第二、该怎么样去定义?
这一阶段主要以阅读为主,花费时间较短,大概2、3天左右。很多地方只是大概的过一下;同时也跟Java中的一些语法、语义作比较,着重看一些新颖的东西。
第二阶段,老生常谈,当然是动手实践了。由于iOS的开发和以前的Java开发的差距太大,所以先得摸清楚它的开发过程,环境搭建也还好,一个Xcode就够了!(但是其它的语言学习可能没有这么幸运,需要先搭起开发环境,不过在官方文档里应该都有,按部就班就行了。)
动手实践的过程可以分为两部分:
第一、是看别人怎么写:找一些示例去看看,或者跟一些教学视频跟着学。
第二、是自己动手写:眼过千遍,不如手过一遍,自己敲过的代码自己心里最有数。
学习Swift,正好看到了斯坦福大学Paul Hegarty教授的视频,讲的比较详细,还有很多遍讲遍写的示例,而它的代码风格又是我喜欢的类型(跟Java很像),所以对我的帮助很大。后来,自己写得代码不自觉的就是他的风格(虽然被一些从Objective-C转Swift的同事疯狂吐槽!但我觉得还好,很多人写的OC代码就像一锅粥,让人满意兴趣往下看。)
刚开始跟视频学习的时候,经常会停下来,根据记忆,自己去尝试。久而久之,心里面就有了一些概念,在想他为什么这样处理,有没有更好的方法(比如他的视频中经常会用到对weak、unowned的处理,虽然是记在心里了,但也没有太在意,后来自己做项目的时候,发现对内存的影响还是挺大)。
第二阶段,主要以练习为主,寻找DEMO反复演练,或是根据视频练习,但一定要自己动手写一些东西。毕竟现成的东西,看过去就过去了,虽然理解了,但不一定就能写出来。
这个阶段,我断断续续的花了快1个月的时间。如果时间不够,也可以有选择性的去看,按照项目的需求,先着重看一些重要的知识点,加强练习。至于其它的一些,可以只做了解,毕竟要精通一种语言开发,光靠学习是不够的。
第三阶段,项目实战。通过前两个阶段的学习,你已经算入门了,但要想真正的掌握,必须要靠项目实战。因为真实的项目中会有各种不同的需求,会涵盖很多你不曾了解的知识点,会用到各种各样不同的框架,每一样都要花时间去了解,所以你的学习之路才刚刚开始。
项目的开发不是一朝一夕,考虑的事情也会较多。不但要考虑怎么去完成,还要考虑这样做是不是合理,会不会给自己挖坑?因为以前有多年的Java开发经验,在思维逻辑上不存在太大的问题,难的是对整个iOS开发框架的理解,再说了这也不是一时半会儿就能整清楚的。语言的掌握,只是一个基础,真正的开发可不是会了一门语言就行。
在这一阶段,已经投身开发了,或是改BUG、或是开发新功能,还是要多想,多总结。遇到难点,认真的思索或是排查,如果时间允许,及时的记录下来。从界面到功能,从文件到内购,从UIKit到Metal,以后的路还很长……
如果有空,还要多看看对系统新特性的介绍。想一想,这个功能是怎么实现的?有没有开放的API?每年的WWDC,都会聚集那么多的开发者,是为什么?新系统又带来了哪些新特性?新产品又增加了哪些新功能?
学会不难,难的是精!掌握了一门语言,只是打开了通往天堂的大门,能否到得了天堂,还是要不断学习!毕竟语言只是最基础的东西,而真正投身开发,仅靠基础是不够的。
Java也好,Swift也好,其它语言也好。每一种语言都有其存在的价值,都在其特定的领域内发挥着巨大的价值。不管怎样,他们在计算机的世界里还是有一定的共性的,学会思考,学会纵向比较,你也能做到更好!