【编者按】唐巧,是国内移动开发黄金时代几乎所有iOS工程师都知道的名字,众多的程序员从他这里走上了iOS之路。而于唐巧本人而言,他编程二十余年,从最初的服务器端研发,到客户端研发,再到现在软硬件、供应链,一直在不停地尝试新的职业挑战,《新程序员004》带你走进唐巧的程序人生,希望他的程序人生能给大家不一样的参考。

作者 | 唐巧        责编 | 唐小引

出品 | 《新程序员》编辑部

我是移动互联网时代兴起时的第一批开发者,见证了移动互联网将传统的PC互联网颠覆的过程。也有幸参与其中,推动移动互联网行业的发展。

本文介绍了我从接触计算机到选择职业开发道路,最后再承担起更多非技术工作的过程。希望我的程序人生能够帮助到大家,在面对新的时代机遇时抓住机会,与时代共舞。

1.接触计算机

我的计算机之旅开始于1999年,那时我15岁,正在读初中。在我舅舅家里,第一次看到Windows 98电脑就被深深地吸引了。但那个时候,我对计算机完全没有概念,也不知道能做什么。我去学校对面的书刊亭,试图购买计算机入门的科普读物,但能够找到的只有《电脑报》。

2000年,我升入高中,因为成都石室中学开设了NOI(全国青少年信息学奥林匹克竞赛)课程,有幸得以学习计算机编程相关的知识。我还记得当时学的第一门语言是Pascal,教材很难买到,于是老师自行复印了几本让我们学习。

那是一个让人热血沸腾的年纪!每天晚上做完作业后,我就会翻开编程教材,一句一句地读着那些晦涩的代码,希望参透其背后的算法逻辑。这可能是我这辈子学习知识最艰难的时候了,因为全年级参加这个课程的只有不到5个人,几乎没有交流,老师刚开始指导,也不太会讲,所以只能靠自己看书琢磨。

但现在回想起来,这真是一段“打鸡血”的日子。第一天看不懂就第二天接着看,差不多花了一个月的时间,终于把搜索算法看明白了。由于算法的原理大同小异,学完后再学其它的算法突然就容易多了。

也是在那个时候,我发现计算机相关的杂志变得更多了。《程序员》杂志在 2000 年创刊,我是它的第一波读者。那个时候,每个月我都会去报刊亭买《程序员》。其实好多内容我也看不太懂,但是它就有一种魔力,让我想读懂它。读着读着,好多也都懂得八九不离十了。

2002年,我参加全国青少年信息学奥林匹克竞赛,由于太过紧张,平时能做对的一道题目写错了一个条件,本来是应该“小于等于”,我写成了“小于”。于是程序虽然通过了样例,但在更复杂的测试用例上都错了,最后得了一个省二等奖。如果当初这道题做对,我就可以拿到省一等奖,进而拥有保送资格。

虽然没有了保送资格,但因为备赛的原因,我早早就买了电脑,也接入了互联网。我在网络上查到北京师范大学对于省二等奖的学生,提供了报考自主招生的机会。于是,在2003年的非典时期,我自行从四川到北京,参加了北京师范大学的自主招生考试,并且通过了!我只需要上重点线即可被北师大录取。因为这件事情对我来说过于简单,所以高考整个过程心态都比较放松,最终超了重点线 100 分。

就这样,计算机改变了我的整个中学生涯,帮助我进入了北京师范大学。

2.玩转计算机

大学开始后,我就继续参与计算机相关的竞赛和社团。竞赛上,我最终获得了 ACM-ICPC 国际大学生程序设计竞赛的亚洲区金奖(如图1)。而社团上,我则参与创建了北师大最大的民间BBS蛋蛋网。

图1 2004年唐巧代表北京师范大学参加ACM-ICPC

另外,我和室友也不断地接网站制作的外包工作,他负责设计,我负责开发,两个人在大学时期挣了不少钱。我自己还给中学生做竞赛培训的家教,这块其实收费很高,在2000年,一般的学科家教才收费50左右1小时,计算机竞赛的家教能收费200一小时。

所以,到了大学的第二年我就可以不用家里给钱,自己负担学费和生活费了。

到了研究生阶段,我进入了IBM、网易这样的企业实习,每月的收入更加丰厚。那个时候IBM的实习工资一个月有4000元,加上研究生本身还有补贴,所以我还存了不少钱。

就这样,在大学里,计算机就让我深刻地感受到了它的力量,既满足了经济需求,也收获了足够的社会实践经验。

3.走上职业开发道路

2010年,我研究生毕业,拿到了百度、IBM、网易有道的研发工程师Offer,最终选择了变化较多的网易有道,开始了职业开发的道路。

在网易有道,我先做了一年多的服务器端开发。当时正值国外Twitter火热,我有幸参与了网易微博的服务器开发。当时,我负责的是网易微博的搜索服务,为了支持海量的用户发贴能被实时检索到,我们基于Lucene开发了多级索引。整个研发过程对我帮助很大,让我知道了企业级的服务是如何被模块化拆解,并最终完成组合的。

2011年,iPhone 4S进入中国,我预感到移动端才是未来的行业发展机会,在咨询了很多朋友之后,果断申请转做iOS端开发。

当时的情景很像十多年前我刚学编程的时候。iOS技术太新,基本上没有任何可以阅读的资料,公司内的同行也没几个,大家也都不精通,所以只能靠自己。但和初中不一样的是:工作和排期已经安排下来了,我只有1-2周的时间,需要完成自学并交付相关的工作。

又是一段打鸡血的时间,那个时候没有中文资料,我找到了斯坦福大学以及WWDC的视频,结合苹果官方的文档,每天用上下班坐地铁和周末的时间来学习。我从来没有这么高强度地学习英文资料,一段时间下来,不仅掌握了iOS知识,还把我的英文听读能力也练过关了。

为了让后来者们不像我学习起来这么难受,我从那个时候开始写iOS的博客和公众号,也由此结交了许多同行。一年下来,我认识的iOS开发者就遍布了几乎所有的互联网公司。

写博客的积累也让我有机会将自己的知识慢慢梳理出来,最终我出版了《iOS开发进阶》,该书重印了5次,风靡一时。

4.从开发者到更多角色

2012年,我在网易的上司郭常圳邀请我加入猿辅导,作为核心员工参与在线教育行业的创业。在线教育行业在2014年开始火爆,而猿辅导的估值也以每年翻番的速度在增长。

在猿辅导,我的身份角色不停地在变化。

  • 刚开始我是iOS开发的负责人,指导并招聘了很多iOS工程师。

  • 2014年,小猿搜题立项时,我成为它的产品技术负责人,开始接触产品工作。

  • 2019年,开始接触投放和运营的工作。

  • 2020年,组建了智能硬件团队。

  • 2021年,开始接触供应链的工作。

每一次角色的变化,对我来说都是一段似曾相识的“打鸡血”的日子。我会夜以继日地努力学习新领域的知识,希望自己的成长能够快速跟上业务的需求。有些时候,我做得还不够好,但好在公司一直给我机会,让我持续累进。

在从工程师成长为技术管理者的时候,我一边思考一边实践,慢慢形成了自己的方法论,即:将管理工作拆解成为管理业务、管理团队和管理技术。

  • 管理业务时,我通过Scrum敏捷开发将整个业务开发流程管理起来。

  • 管理团队时,我主要关注人的招聘、一对一指导,以及打造积极向上的团队工作气氛。

  • 管理技术时,我主要思考业务发展与技术方案是否匹配,是否需要做及时的技术储备以应对业务增长。

从技术管理者到产品管理者,我主要学会了一些产品的核心方法论,主要为用户思维和数据思维。

  • 用户思维是指能够将自己代入到用户场景中,思考解决方案的优劣性。在这个方向上,我学习了大量MVP(最小可行性产品)的构建和测试方法。

  • 数据思维是指一切以数据导向来评估产品方案。NPS、A/B测试、用户研究是数据思维的具体实践方法。

从产品负责人到业务负责人转变时,我更加关注商业模型的重要性,进而对市场端的获客工作有了大量的思考和实践。

在负责硬件和供应链团队时,我感受到了实体产品交付的挑战,对硬件产品在产品创新、供应链管控、渠道、品牌建设上的竞争局势有了更深刻的认识。

创业的这十年也是移动互联网高速发展的十年,我见证了抖音、滴滴、拼多多、美团的高速崛起,也见证了技术对于行业的变革。这也是技术开发者黄金的十年,很多开源的技术或社区能够在商业层面上带来巨大的回报。比如:

  • 2017年,MongoDB上市,现在市值超200亿美元;

  • 2018年,GitHub被微软以75亿美元收购;

  • 2019年,Elasticsearch上市,现在市值超80亿美元;

  • 2021年,国内的开源分布式存储公司PingCAP完成新一轮融资,估值超过30亿美元。

这也是人工智能颠覆行业的一年,我们见证了围棋、德州扑克被AI统治,L2级自动辅助驾驶已经广泛应用,信息流推荐和广告投放领域也早已被深度学习统治……各种商业化领域,都开始用深度学习进行功能改造。在教育领域,我们用AI来做:

  • 语音识别,帮助学习者纠正不正确的发音;

  • 语义理解,帮助学习者批改中文和英文作文;

  • 图像识别,帮学习者检查口算作业;

  • 自适应学习,给学习者推荐难度适中的题目,提高练习效率。

这黄金的十年给了我们太多的商业机会,锻炼了很多程序员成为行业专家,我个人也是这行业十年红利的受益者。

5.未来的机遇与挑战

我是幸运的,赶上了移动互联网的红利,成为第一批的移动开发者。那个时候移动开发刚刚兴起,资料匮乏,而我抓住了这样的机会,在为行业分享移动开发心得的同时,也收获了技术的成长与行业的红利。

中国发展太快了,随着全球格局的变化,未来面临的发展机会和挑战都会越来越多。对于我们这一代技术人来说,只要顺应时代的变化,未来的机会只会更多。

对于新一代的开发者来说,我认为未来的领域会更加集中在用技术和算法进一步改造各种传统的行业,例如:汽车、物联网,以及用技术将人类社会朝着数字化的虚拟世界发展。所以,我推荐大家关注自动驾驶、人工智能、产业互联网、推荐系统、虚拟现实等领域,可能会有新的行业红利出现。

期待大家与时代共舞。


作者简介:

唐巧,中国最早的一批 iOS 开发者,《iOS开发进阶》《iOS面试之道》作者。现就职于猿辅导斑马事业部,负责斑马的早教业务、智能硬件研发以及供应链。

第一批做移动开发的程序员,现在怎么样了?相关推荐

  1. 做了8年游戏开发的程序员对未来的忧虑

    编者按:这位做了8年游戏开发的程序员的忧虑或许不是个例,也可能是我们许多人正在经历或者将要经历的一个人生迷茫期.鉴于此,希望他的忧虑和对未来的思考也能对你在现在或者将来的选择上有所帮助. 我 22 岁 ...

  2. 我真的要做一辈子的Android程序员吗?,含面试题+答案

    在这里,X 先生带来一个海龟码农成功转行产品经理的故事,2009 年毕业于美国工程类名校普渡大学,而后回国在一家外企担任开发工程师,一做就是 5 年,2014 年一个幸运的机会加入了腾讯,当时腾讯面试 ...

  3. 做靠谱的程序员--《程序员修炼之道》读书报告

    这两天花了点时间把<程序员修炼之道>这本书读了,本来估计要一周时间才能读完,读了才发现作者绝对是人才啊,书写的生动有趣,一口气就读完了.随便摘录一下. 1.做一个靠谱的程序员,纯粹的程序员 ...

  4. 如何做一个高效率的程序员,对程序员也是很重要。。

    如何做一个高效率的人,对一个人的成功很重要,如何做一个高效率的程序员,对程序员也是很重要.大家好,我是:OpenEIM,下面与大家交流一些经验. 这是一则笑话.Shlemiel是一位油漆工,他找了一份 ...

  5. java性能瓶颈分析_Java性能优化技巧整理,做一个深度的程序员

    原标题:Java性能优化技巧整理,做一个深度的程序员 在我们身边是一大批的程序员,层次不一,但是放眼观,我们很容易就可以看到那些是业务型程序员,那些是有层次的程序员.注重细节,注重性能,做一个有深度的 ...

  6. 识别喜欢开发的程序员

    识别一个程序员是否喜欢开发,在你遇到下面的情境时特别重要: 你要招募小伙伴 你要选择结对的开发人员 你想变得更好更强大(与优秀的人在一起事半功倍) 研发新产品,你要从公司内部抽调人手组建团队 你想判断 ...

  7. 2020,最大的愿望是做个佛系程序员

    2020,最大的愿望是做个佛系程序员 忙忙碌碌又一年过去了,头发又少了一点,手头的工作却一点没少.真想让老板听到内心不断呼喊着的"不要加班!不要on call!不要裁我!". 20 ...

  8. 做了十年程序员的苏明哲被裁掉的真正原因!

    作为一个程序员,在看<都挺好>这部剧的时候可能关注的点不太一样.别人关注的是家长里短和每个人的好坏,我却更关注做了十年程序员被开除的名校毕业生苏明哲.   清华斯坦福双名校加持 <都 ...

  9. 使用瑜伽改造自己 做个优秀的程序员

    "瑜伽,只是一个工具,你想用它来做什么,完全取决于你.瑜伽的内容和意义很广泛,本文主要基于「瑜伽的改造身心的功能」进行描述,而瑜伽的其它意义就在此忽略." 本文目的是提供改造&qu ...

最新文章

  1. Python3学习笔记(二):基本数据类型
  2. python中setup什么意思_Python unittest中setUp()和setUpClass()有什么区别?
  3. NTU 课程 7454 (5) CNN进阶
  4. exec 执行结果_php执行系统外部命令的4种方法
  5. CSS3透明背景表单
  6. Eclipse中部分快捷键
  7. F5 BIGip 负载均衡 IP算法解密工具
  8. SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.解决方法
  9. 将网站转换为应用程序的软件—“Unite”
  10. dw选项卡代码_Dreamweaver中js实现竖向选项卡或滑动门代码!急!!!
  11. 用matlab实现傅里叶变换,matlab实现傅里叶变换
  12. ttest求pvalue_.net 调用R语言的函数(计算统计值pvalue 对应excel :ttest)
  13. 解读《西厢记》——基于人脑的句法分析
  14. VSFTPD 上传文件 200 227 553错误
  15. Windows利用WTS API获取锁屏状态
  16. Visio画出简单的拓扑图
  17. ISO3834认证所需的部分标准
  18. chromeDriver下载地址
  19. 推荐一个开源的LMS系统ILIAS
  20. 操作系统作业之银行家算法(c语言实现)

热门文章

  1. Python中Permission denied怎么解决
  2. 循环赛日程安排(构造、分治)
  3. java中的枚举类型
  4. stm32单片机OLED显示图片 位图转换 Image2Lcd使用
  5. Java基础复习——访问权限
  6. 【语义分割】数据增强方法(原图与标签同时扩增)
  7. Redis系列(七)--Sentinel哨兵模式
  8. python制动化之路
  9. linux档案与文件的的压缩与打包
  10. 二、UI线程和界面卡死