编程语言学习之路:从Java到Swift的蜕变经验分享!

发表时间: 2019-01-22 17:30

最近,看到有很多人在问,怎么学习编程?从什么语言开始学起?作为一个十几年的老码农,我也只能是分享一点我的经验。至于具体要学什么语言?我也不好妄加评说,毕竟每个语言都有其存在的价值。不管是传统的Web开发,还是现在流行的小程序开发,都离不开JavaScript;Java在互联网服务领域的风头依然强劲;iOS的开发离不开Objective-C和Swift的原生支持;Python在大数据、人工智能的开发中有着巨大的优势……

几年前,由于项目原因,我开始iOS开发的学习。以前一直是做Java,没有机会、也没有动力去看iOS的项目开发。听说iOS应用是用Objective-C写的,貌似很不好学,所以也不曾动手。这次赶鸭子上架,也实属无奈,但好在有了Swift,让我的尝试之路少了些许的辛苦!今天有机会,将我的一些学习经验分享一下,与有志之士一起共勉!

官方文档

第一阶段,当然是先看官方文档了,这些是最权威,也最实惠的东西。拿到Swift,我先把官方的介绍和文档花两天时间过了一下,感觉它跟Java在有些地方很像,所以不自觉的对照着Java去想、去学,倒也没遇到什么特别的难处。在看文档时,发现在Github上有中文翻译,也是帮了我的大忙。一边看原版,一边看翻译,即能明白有些英语的表达,又能更深刻的理解,相得益彰!

其实,我还是鼓励程序员能够看一些简单的英文文档的。

一是我们公司以前做欧美的外包项目,偶尔也会有英文邮件沟通,能借助词典勉强看懂。

二是需要经常在Google里面查一些东西,计算机专业类的词汇还是积累了一些,有时候就觉得中文翻译过来反而没有英文的那层意思了。

三是写代码的时候,各种命名,都需要尽可能的用准确的单词,也还是做欧美外包给闹的,那时候经常因为命名不规范而挨批。现在想想,也还是受益匪浅的。

面对一门新的语言,首先要明白的无外乎两点:语法和语义。

  1. 语法(Syntax):变量、表达式、函数、对象等的结构,即怎么用定义它们。
  2. 语义(Semantic):变量、表达式、函数、对象等的意义,即它们所表达的意思。

也就是说,首先,我们要搞清楚这门语言的基本的语法结构,其次,要搞清楚它的语法规则和使用规则。

所以,对于第一阶段文档的学习,我主要从以下两方面学起:

第一、有哪些数据类型?

  • 基本数据类型(Primitive Type),如数值(Int、Float、Long、Double等)、字符串(String)、数组(Array)和集合(Map、List、Set等)。
  • 对象数据类型(Objective Type),如接口(Interface、Protocol等)、类(Class、Struct等)、枚举(Enum)。

第二、该怎么样去定义?

  • 了解标识符(Identifier)、修饰符(Modifier)、关键字(Keywords)等。
  • 了解多态:继承(Extend)、扩展(Extension)等。
  • 了解变量(Variable、Parameter)、表达式(Expression)等。
  • 了解方法(Operation、Method、Function)的声明、返回值(Return Type)、异常(Exception)处理等。

这一阶段主要以阅读为主,花费时间较短,大概2、3天左右。很多地方只是大概的过一下;同时也跟Java中的一些语法、语义作比较,着重看一些新颖的东西。

动手实践

Paul Hegarty(斯坦福大学教授,Swift和iOS开发教学)

第二阶段,老生常谈,当然是动手实践了。由于iOS的开发和以前的Java开发的差距太大,所以先得摸清楚它的开发过程,环境搭建也还好,一个Xcode就够了!(但是其它的语言学习可能没有这么幸运,需要先搭起开发环境,不过在官方文档里应该都有,按部就班就行了。)

动手实践的过程可以分为两部分:

第一、是看别人怎么写:找一些示例去看看,或者跟一些教学视频跟着学。

第二、是自己动手写:眼过千遍,不如手过一遍,自己敲过的代码自己心里最有数。

学习Swift,正好看到了斯坦福大学Paul Hegarty教授的视频,讲的比较详细,还有很多遍讲遍写的示例,而它的代码风格又是我喜欢的类型(跟Java很像),所以对我的帮助很大。后来,自己写得代码不自觉的就是他的风格(虽然被一些从Objective-C转Swift的同事疯狂吐槽!但我觉得还好,很多人写的OC代码就像一锅粥,让人满意兴趣往下看。)

刚开始跟视频学习的时候,经常会停下来,根据记忆,自己去尝试。久而久之,心里面就有了一些概念,在想他为什么这样处理,有没有更好的方法(比如他的视频中经常会用到对weak、unowned的处理,虽然是记在心里了,但也没有太在意,后来自己做项目的时候,发现对内存的影响还是挺大)。

第二阶段,主要以练习为主,寻找DEMO反复演练,或是根据视频练习,但一定要自己动手写一些东西。毕竟现成的东西,看过去就过去了,虽然理解了,但不一定就能写出来。

这个阶段,我断断续续的花了快1个月的时间。如果时间不够,也可以有选择性的去看,按照项目的需求,先着重看一些重要的知识点,加强练习。至于其它的一些,可以只做了解,毕竟要精通一种语言开发,光靠学习是不够的。

项目实战

第三阶段,项目实战。通过前两个阶段的学习,你已经算入门了,但要想真正的掌握,必须要靠项目实战。因为真实的项目中会有各种不同的需求,会涵盖很多你不曾了解的知识点,会用到各种各样不同的框架,每一样都要花时间去了解,所以你的学习之路才刚刚开始。

项目的开发不是一朝一夕,考虑的事情也会较多。不但要考虑怎么去完成,还要考虑这样做是不是合理,会不会给自己挖坑?因为以前有多年的Java开发经验,在思维逻辑上不存在太大的问题,难的是对整个iOS开发框架的理解,再说了这也不是一时半会儿就能整清楚的。语言的掌握,只是一个基础,真正的开发可不是会了一门语言就行。

在这一阶段,已经投身开发了,或是改BUG、或是开发新功能,还是要多想,多总结。遇到难点,认真的思索或是排查,如果时间允许,及时的记录下来。从界面到功能,从文件到内购,从UIKit到Metal,以后的路还很长……

如果有空,还要多看看对系统新特性的介绍。想一想,这个功能是怎么实现的?有没有开放的API?每年的WWDC,都会聚集那么多的开发者,是为什么?新系统又带来了哪些新特性?新产品又增加了哪些新功能?

总结

学会不难,难的是精!掌握了一门语言,只是打开了通往天堂的大门,能否到得了天堂,还是要不断学习!毕竟语言只是最基础的东西,而真正投身开发,仅靠基础是不够的。

Java也好,Swift也好,其它语言也好。每一种语言都有其存在的价值,都在其特定的领域内发挥着巨大的价值。不管怎样,他们在计算机的世界里还是有一定的共性的,学会思考,学会纵向比较,你也能做到更好!