作为一名iOS开发工程师,我这几年折腾了一大圈,学习了JavaScript、Python、Ruby等开发语言,甚至一度还想学习java和go。学习的类目比较多,但是内心总想着成为一个小资开发者,使用一门稳定可靠的编程语言,去完成自己想要或是朋友想要的事情。就目前来讲,I Can't 。
我所了解的iOS开发领域,至少我最常用的就是Objective-C,相信大多数人也是如此,按照招聘市场的需求估计应该是37开(swift3oc7)吧,我对OC很熟悉,像个熟练工,开发效率杠杠的,自夸一点来讲算是目力所及范围之内的顶点了,也是大多数和我有过交集的最好的iOS开发者了(自认为),如果有八级钳工之类的头衔,我也绝对是当仁不让的一位八级钳工了。当然就开发iOSApp的角度来讲,我觉得使用oc就足够了,在如此之高的开发效率面前,任何都是苍白的,除非其他技术能够做我无法企及的事情。UIKIT无论是搭配oc还是swift效果都是一样的。swift目前的现状其实我认为也是很可以的,生态(一些第三方框架的支持情况)对于开发App也算完备,我用swift上线过项目,相对于oc来讲精简不少,而且比oc更加安全,但是,纯swift项目很难做到,第三方的sdk、或者一些框架,让你或多或少都会做一些oc的桥接。之前的我是追求纯粹的swift project,我不想自己的项目里有oc代码,我仅仅用它做过小项目,没有做过大项目,我做到了,如果让我用swift重构我写的大型项目,我可不敢保证那么纯粹。swift语言的特性令我十分迷忙,看过官方一个关于面向协议的视频,看了之后觉得自己好像根本不会swift,而swift是有面向对象特性的,然而,函数又是其一等公民,你又可以进行函数式编程,从软件工程的角度,你该怎么办?继续面向对象?或是面向协议?再或者函数式编程?又或者混着来?一个项目3个类,这3个类还是框架遗留,一个struct走天下了,你敢想吗? 我其实仍然停留在面向对象的编程思想内,对oop的原则根深蒂固难以解除,离开了class我可能一行代码都写不出来了,如此跨越性的东西,我真是很难去理解和运用,我使用swift开发貌似也只停留在翻译OC代码的程度,甚至有些翻译不好,毕竟rxswift 我个人没有掌握,其协议拓展、枚举等特性我也仅仅是浅尝辄止。看过别人的源码,真是风格迥异,不知哪家是正统,我想适合自己的终归还是自己去实践摸索。这种感觉就像拿到一个精巧的工具一样,说明书表示,可以用各种方式干某件事,无论你是左撇子还是右利手,无论你习惯用脚踢的还是用拳头,你都能获得你想要的快乐。看到别人耍成什么样的都有,而我只会用右手机械地挥舞着这个哗楞楞作响的精巧机子,感叹道:"你们城里人真是会玩儿呐!"。
2019年是Flutter的元年,一个真正硬气的跨平台技术横空出世,dart+Flutter的组合足以撼动当下一种跨平台技术框架,安卓开发者、iOS开发者、乃至前端开发人员无不为之动容。跨平台是每个人所追求的,一套代码跑多个平台。但是,我接触了一些,总觉得并不适合自己,环境搭建及其依赖梯子,没有梯子甚至依赖一个package都十分费劲,一度让我甚至想去香港更新这个鬼东西,也许是我岁数大了不愿意折腾了,最终,我在自学了一段时间后,选择性放弃。对我来说这种糟糕的体验让我无法释怀,也许别人会说你用国内的镜像之类的,但是,我还是放弃了,谷歌的东西什么都好就是得翻得一手好墙才行。 随着iOS13而推出的SwiftUI让我眼前一亮,我仅仅需要做的就是安装xcode就能体验swiftUI,这多痛快。于是我迅速地收集了相关学习资料,准备好好学一把,但是,毕竟这是项技术仅仅支持iOS13以上的版本,但是其跨平台(苹果自己的平台)的特性让我觉得值得学习。开发app的我总是习惯于向下兼容两到三个版本,我不会直接把项目定义成最低支持iOS8,或者iOS9,在我看来这两个版本会给本来就繁杂不已的项目带来额外的开发负担,我在19年立项的时候,果断选择了最低支持系统是iOS10,iOS10剥离了推送模块而且第一次出现了刘海屏。对于我个人来讲,我习惯于第一时间升级系统,只要给我推送我一定会升级,xcode、macos、iOS我都会选择升级,而不是停滞不前,因为,迭代一定会解决之前的问题。到目前为止iOS13.5是iOS系统最新版本,我不知道低于这个系统版本的用户在iOS用户群中占比多少,或者说,仍然在用iOS8/9/10/11/12的人究竟有多少?是少数派还是大军?所在公司没有人理会这个,但我没有这个决定权,即便是他们完全不懂。我多么想使用swiftUI来进行日常工作啊,做第一批尝鲜的开发者。就目前的开发现状来讲,用不了多久,可能iOS13也会成为最低兼容版本,也许iOS14,或者iOS15出来了之后,当然他们也许再也不叫iOS了,未来的新技术、新思想注定会是将过去尘封的,即便是它满身荣耀。
说到未来,就不得不谈到我所想表达的主题了,就个人职业发展的角度,我必须保持学习,去拥抱新技术,新技术已经来临,旧技术不知可以支撑多久,虽然世界上总有一大批人在守旧,互联网的思维,我不一定具备,但是,尚处于浮尘般的自己而言,不变革注定会被淘汰了,我羡慕国外对新技术的包容,对技术人员的重视,但是,我目前享受不到。我很羡慕当年Uber的iOSAPP把oc转成swift的壮举。但是,我目前没有那个勇气与时间,我的工作在背负着业务不停奔跑,停不下来,一旦停下来,似乎公司也就走到尽头了。但是我还是想让自己能变得更好。我想去改变现状,我也想让我自己处于行业技术的龙头地位。曾经看过一个故事,一群搞java的人,看到火爆的移动开发市场垂涎欲滴,Java老鸟买了iOS开发的书籍赠与那些躁动的人们,他们坚持不懈掌握了iOS的开发技术,离开了自己的java岗位,经历高潮迭起的职业生涯,直至遇到资本寒冬,那些所谓的app创业再也无人问津,而此时此刻,Java老鸟喝着咖啡,悠闲的写着java代码,冷眼观瞧APP开发人员遍地哀嚎,然而其却能深藏功与名... JAVA在外人看来永远是那么坚如磐石。但是,这则故事错了,java也经历了技术升级,ssh过渡到springboot时代,然而真正在走在技术前沿的公司又有几家呢?我猜想投资人看到你们公司用java才不会关心你用ssh或者是ssm亦或是springboot呢,因为他们都叫java,而走俏的java又有几家是紧跟时代的呢?jdk都14了,又有多少人还在用jdk8的呢?我试着猜想一下,同样是java,可能都已经不是一种东西了。白鹿原有一段对白让我印象深刻,一个人高喊着改朝换代了,白嘉轩问:“新皇上叫什么?”那人道:“大总统!”,“年号呢?”,“民国!”。不要觉得可笑,我们就是这样,总用老思想,去套用新事物。
2020年6月,疫情仍然没有结束。这一年已经过去了一半,一年之计在于春,春天里我没能规划好自己的技术定位,走了一些弯路。但是,走全栈开发这条主路线是不会变得。我目前最需要的技术就是后端开发能力。针对后端开发,我可以说是做了大量功课,RubyonRails、Flask、.NetCore、Node.js,接触了这几项技术,没有考虑php,因为身边的phper貌似很狭隘,讨论的不是哪家技术强,而仅仅是php自身是否优劣,我不否认PHP在web开发领域的强势地位,也不否认java在后端开发的霸主地位,但是,我作为一个个人开发者,作为一个对自己代码有小小追求的开发者,我不想让自己陷入低效的漩涡中去,也不想让自己变得狭隘。我打算学习3门语言,Typescript、C#、Swift。我觉得这三门语言,在不停的进步,Swift是我从头到现在的有所见证的,我很后悔,没有在我现在的工作中用到它,去深入了解其内部优势与劣势。每当看到别人讨论各种编程语言的优劣时,我总像一个傻子般不知所措,不知道他们好在哪,他们不好在哪,因为,我根本不了解其特性,我也不懂语言的设计初衷,甚至我不懂为何将其设计出来,也许我就是一个小学生。
掌握一个前端开发框架,我已经心里默念好多年了,vue、react、angular遍布世界好多年了,我却没有迈出过一步去拥抱他们,仅仅是看了看,摸了一下。我应该去拥抱他们,这也是我要学习typescript的初衷。
掌握一门后端开发技术,一提到后端、高并发、数据库、各种名词就来了,其实我的初衷很简单我就想学会API开发。这个想法我从能够独立开发iOSAPP的时候我就有了,我当时初衷更简单,我想要什么接口提供什么数据结构,都是我自己说了算,我看过那些如leancloud的那种云的模式,但是那终归不是正途,况且那种技术带来的坑,令我难以忘怀。而真正扼住我喉咙的就是服务器端,那繁杂的部署技术与对linux的不了解。我买过服务器,但是,没有系统学习过,因为我本身好像就没作出过什么东西,曾经拿着一个heroku的博客教程,按图索骥在云服务器上部署了一个博客,觉得自己了解了一些了,但是现在想想,好像什么都不会。那些真正让我裹足不前的东西,就是那一团我所不了解,也不敢去触碰的东西、如webpack、docker、nginx之类的技术,可能是太在乎别人的说法了,他们本质上就是工具,就是让人用的,作为一个门外汉,面对被说得神乎其技的技术,我没有选择初生牛犊不怕虎的精神而是选择了望而却步。我要改变这种现状,我觉得,我最应该学习的就是后端技术,完整的开发到部署的全过程。我看中了.netcore,看中了他的高性能。而我上半年所想要学的ROR,众人却在诟病他的性能问题。结合我身边开发者对性能的要求,我决定去尝试一下.net core,毕竟微软最近表现还是不错的。
回到本源,swiftUI。还是要学的。看到2020wwdc的arm宣言,仿佛这个技术被放大了,我相信苹果不会不考虑老旧项目的问题,但是,拥抱新技术永远没错。
排个优先级吧。.NetCore 极高、SwiftUI 次之、Angular 再次(为啥选择他?因为想要深度的体验一下typescript)。如果这个目标实现了,我的技术栈基本全(除了安卓开发)了。当然,学习ts也可能是为了学习将来的vue3.0。
学习的次序,也是为了今年迸发出的一个想法而实施的。对了,做一款app,能够充分发挥iOS乃至整个苹果技术框架优势的APP。
种一棵树最好的时间是十年前其次是现在。
去做吧。winter is coming!
致敬 2020年那些最可贵的人
网友评论