这个阶段主要是寻找到达目的地的人(导师/贵人)、技能(是否具备转型所需的技能)和机会。多与自己仰慕的人交流,听取他们的建议;做一些调查;填补技能短板;明确怎样的机会是自己最想要的;适当地加强社交圈,增加曝光度。
这个阶段多想想我能提供什么?有哪些需要被解决的问题?同时让自己处于可被发现的状态(就像蓝牙设备一样),通过写作、作品、分享扩大影响圈,这样才能让机会找到你。
在寻找项目的过程中,多想想为什么要做这个项目?想要达到什么目标?想要影响哪些人?应该做些什么才能最大化自己的价值?
发展自己的社群
这需要时间,但是值得。通过在 20% 的业余时间建立的良好口碑,离职后依然有人持续地来咨询。
尽可能地在工作之余抽出时间来经营自己的项目。验证过程中,多想想哪些是可行的,哪些不可行,需要做出哪些改变。
2. 使用邮件来进行信息管理,顺便介绍最近写的一个小 app - Mail Me
3. Swift 的强大之处
<1> Optionals 让我们能够应对有可能存在也有可能不存在的值。
<2> Swift 不允许nil被传入。
<3> 使用 optionals 一段时间之后你会发现你只需要阅读类型而不用再去看文档了。
<4> 如果你有一个函数会因为一个明显的原因失败你可以返回一个 optional。
Enums
在函数式编程当中,在你想表示两件事情之间的选择时候你会经常用到Either类型。举个例子:如果你有一个函数返回一个整数或者一个错误,你就可以用Either。如果你想在一个字典中储存布尔值或者字符串,你就可以使用Either作为键。
拓展Currency遵循CurrencySymbol协议
类型安全
一个是optional,一个是struct
4. 结构体和值类型
结构体是值类型(复制)的,而类是引用类型(多所有者)的,这一行为上的细微区别造就了架构上的无限可能。
5. Swift 方法的多面性
方法是与某些特定类型相关联的函数。类、结构体、枚举都可以定义实例方法;实例方法为给定类型的实例封装了具体的任务与功能。类、结构体、枚举也可以定义类型方法,类型方法与类型本身相关联。类型方法与 Objective-C 中的类方法(class methods)相似。
一句话:函数是独立的,而方法是函数封装在类,结构或者枚举中的函数。
Swift 和 Objective-C 之间其中一个巨大的差别就是当 Swift 函数被调用的时候参数工作方式。
`外部参数名称`
调用方法
方法的第一个参数名不被外部包含,最佳实践是在方法名里包含第一个参数名。添加`_ `来解决调用需要包含名称(慎用)。
实例方法
helloWithNameFunc是MyHelloWorldClass -> (String) -> String类型,这个函数接受我的类的实例并返回另一个函数。新函数接受一个字符串值,并返回一个字符串值。
初始化
初始化方法的第一个参数必须在实例时必须是外部的。最佳实践是添加一个不同的外部参数名。也可用`_`避免。
参数
<1> 可选 -- optional - ?
<2> 默认值 -- 最佳实践 -- 放在参数列表的最后
<3> 可变参数 -- name : String... -- 可变参数必须是在函数列表的最后一个!
<4> 输入输出参数 inout -- 经过引用来操纵外部变量
<5> 泛型参数类型 -- T
<6> 作为参数的函数 -- func + instance.method + typealias
Public + Internal + Private -- // MARK: Private Helper Methods
返回类型
<1> 可选 ? -- 拆包 \(someString)
<2> 多返回值 -- let range - \(range.min) - \(range.max) + let(min,max) - \(min) - \(max)
<3> 返回一个函数
<4> 嵌套函数 -- 在函数中定义函数
6. Facebook、微信团队、Twitter、微软开源软件列表一览
网络模拟测试工具:ATC
Augmented Traffic Control(ATC)能够利用Wi-Fi网络模拟2G、2.5G(Edge)、3G以及LTE 4G移动网络环境,测试工程师们可以快速在各种不同的模拟网络环境中切换,从而实现对智能手机和App在不同国家地区和应用环境下的性能表现进行测试。ATC是Facebook内部团队在2013年的一次Hackathon活动上开发出来的工具,其原理实际是利用了Linux流量控制系统,通过纯Python的网络库pyroute2调用netlink的API控制,而开发其的目的是为了确保更多的用户获得最好的应用体验。
GitHub主页:https://github.com/facebook/augmented-traffic-control
代码审查工具:Phabricator
代码审查方面,Facebook开源了可视化工具Phabricator。工程师可以在页面上非常方便的针对每一段(单行或者多行)代码进行交互讨论;负责审查的工程师可以接受代码改变,可以提出疑问要求原作者继续修改,可以提出自己不适合以推出该代码审查,等等。只有代码被明确接受之后才能被工程师提交到服务器端的代码库,这一点集成到提交工具中强制执行。
GitHub主页:https://github.com/phacility/phabricator
开源动画库:Pop
Pop是Facebook推出的一个可扩展的iOS 和OS X动画库,其新闻聚合阅读应用Paper背后的核心技术就是由Pop支持。除了增加基本的静态动画外,还支持Spring和衰变动态动画,可非常方便的构建现实的、基于物理的交互。Pop动画库的动画效果非常流畅,因为它使用了CADisplayLink来刷新画面(帧),一秒钟刷新帧数为60帧,接近于游戏开发引擎。Pop动画的自成体系,与系统的CoreAnimation有很大的区别,但使用上非常相似。
GitHub主页:https://github.com/facebook/pop
静态代码分析工具:Infer
Infer是Facebook的开发团队在代码提交内部评审时,用来执行增量分析的一款静态分析工具,在代码提交到代码库或者部署到用户的设备之前找出bug。由OCaml语言编写的Infer目前能检测出空指针访问、资源泄露以及内存泄露,可对C、Java或Objective-C代码进行检测。Facebook使用Infer自动验证iOS和安卓上的移动应用的代码,bug报告的正确率达80%。Infer通过捕获编译命令,把要被编译的文件转换为可用于分析潜在错误的中间语言格式。整个过程是增量进行的,意味着通常只有那些有修改过并提交编译的文件才会被Infer分析。Infer还集成了大量的构建或编译工具,包括Gradle、Maven、Buck、Xcodebuild、clang、make和javac。
GitHub主页:https://github.com/facebook/infer
JavaScript静态类型检查工具:Flow
Flow是Facebook出品的一个JavaScript代码的静态类型检查工具,该工具采用开放源码的OCaml(Objective Caml)语言开发,。Flow能够帮助开发人员查找出JavaScript代码中的类型错误,从而提高开发效率和代码质量。Flow已经能够捕获JavaScript代码中的常见问题,如静态类型转换不匹配、空指针引用等问题。同时,Flow还为JavaScript新增了类型语法,如类型别名。
GitHub主页:https://github.com/facebook/flow
Web应用架构:Flux
Facebook认为MVC无法满足他们的扩展需求,因此他们决定使用另一种模式:Flux。由于Facebook非常巨大的代码库和庞大的组织,所以MVC真的很快就变得非常复杂,于是他们得出结论,认为MVC不适合于大规模应用。
每次Facebook工程师努力增加一项新特性时,系统的复杂性成级数增长,代码变得“脆弱和不可预测”。对于刚接触某个代码库的开发人员来说,这正成为一个严重的问题。Flux是一个Facebook开发的、利用单向数据流实现的应用架构,用于 React。Flux应用有三个主要的部分组成:调度程序、存储和视图(React 组件)。
GitHub主页:https://github.com/facebook/flux
终端跨平台网络组件:Mars
Mars是微信官方的终端基础组件,是一个结合移动应用所设计的基于Socket层的解决方案,在网络调优方面有更好的可控性,采用C++开发。目前已接入微信 Android、iOS、Mac、Windows、WP 等客户端。
在微信中,任何网络实现的bug都可能导致重大事故。例如微信的容灾实现,如果因为版本的实现差异,导致某些版本上无法进行容灾恢复,将会严重的影响用户体验。微信研发了统一的跨平台的网络基础库Mars来满足发展的需要,一方面,基础组件可以提高研发效率,另外一方面,也可以提高系统的稳健性。
在设计上,Mars以跨平台、跨业务为前提,遵从高可用,高性能,负载均衡的设计原则。以网络的可用性为例,移动互联网有着丢包率高、带宽受限、延迟波动、第三方影响等特点,使得网络的可用性,尤其是弱网络下的可用性变得尤为关键。Mars 的STN组件作为基于 socket 层的网络解决方案,在很多细节设计上会充分考虑弱网络下的可用性。
GitHub地址:https://github.com/Tencent/mars
JavaScript库:Twemoji
Twemoji是Twitter于2014年开源的完整的Emoji表情图片,Twemoji包含872个表情,兼容最新的Unicode 7.0。Emoji,来自日本的小巧符号,通过图像表达感情,已经征服了移动互联网的信息世界。现在,你可以在虚拟世界中随处使用它们。开发者可以去GitHub下载完整的表情库,并把这些表情加入到自己的应用或网页中。
GitHub主页:https://github.com/twitter/twemoji