学习Python的经历教会了我很多东西,可以说,它深深地改变了我的人生轨迹。这段学习经历告诉我:关注自己能掌握的东西,通过开源站在巨人的肩膀上,一个人可以通过小预算,甚至是零预算的项目产生很多价值,大项目也会在不久之后到来。
我既不是成功学的教练,也不是专业的开发人员,我在自己的环境中取得成功的方法可能对你来说并不合适。但是,我曾帮助许多同事开始他们的编码之旅,并且这样的模式都获得了成功,希望这个模式也可以帮助各位读者入门。
梦想
我从小就会被科技吸引,早年记忆之一就是摆弄一台旧收音机,拆开、检查电路、再重新组装。十几岁的时候,我迷上了游戏机和电脑。我一直热衷于学习编程,但是大多数尝试都限于重复教程。
上大学时,我写了许多小应用程序,但它从来没有真正成为一种习惯。大学一毕业我就被聘为金融经济估值分析师。但我的梦想是写代码,成为一名开发人员,用技术解决问题。我希望把这个想法告诉经理和同事,得到正式的授权后继续代码之旅。
这听起来像是妄想,如果无法证明我能够做到,人们怎么会相信我呢?更何况写代码并不是我被雇佣的理由。
大任务从来没有来过,我的第一份工作已经过了三年了。我一直在收听技术会议的广播,阅读相关博客,看看蓬勃发展的开源社区发展出了怎样了不起的产品,我想成为开发者的愿望越发强烈。
不能说第一份工作毫无价值,我学到了很多关于金融建模和经济框架的知识,但是在内心深处,我渴望的是硅谷的技术。只是等待完美的任务落到自己身上是一个美好的梦想,但这不太可能,也不受自己的控制。
旅程开始
大学时,我选择了具有C#基础的.NET框架作为技术栈。直到今天,我仍然喜欢c#语言的优雅和表现力。然而在工作中,我那时的主要任务是处理数据。.Net库并不太适合处理数据科学问题,所以我把注意力转向了Python。
我接受了一个挑战:在空闲时间里无理由地连续写100天Python代码。有的日子会很愉快,我一连几个小时都停不下来,有的日子就很懒,只写几行。但我最终坚持了下来,在100天后,我在想自己的下一步是什么。
当时在工作中遇到一个任务,需要反复执行一些财务报告的数据验证。一开始这个任务挺有趣的,但是第五次之后,我厌倦了一次又一次在Excel中创建10个数据透视表。那时,我迫切地想把新掌握的Python技能付诸实践。
具有Pandas包的Python提供了Excel所能提供的所有数据处理功能。Excel提供了对每个单元格的控制,而通过Pandas可以操作列向量。假设将两列相加,在Excel中需要在第一行定义一个公式,然后向下拖动。
而对于Pandas,需要引用的量是列名——在后台操作一次性应用到整个列。一旦产生更多的行,不需要调整逻辑,只需要一行代码就可以实现两行的相加。
这个功能非常适合我的任务,我执行的大多数检查都是简单的聚合比较。或许你会觉得我在100天的练习后已经准备好了,然而这练习并没有教会我如何解决问题。遵循教程是一回事,将问题转化为可管理的步骤又是另一回事。
我一步一步地浏览博客和StackOverflow之类的问题,知道我能将需要解决的问题转化为代码。虽然速度并不快,但我还是完成了检查任务的自动化。手动执行的检查验证被我转化成了几秒钟的代码运行。
学习教程是一个很好的起点。然而,要正确地学习一门编程语言,必须找到自己的问题并解决它。
分享,学习,帮助
第一次的成功给了我动力。那时团队中没有人在工作中使用Python,大多数人都只知道Excel VBA,PowerQuery和Access。我对Python介绍引起了很多人的兴趣,他们认为Python易于理解,很多同事也受到了学习这门语言的启发。虽然我还是个初学者,但是突然就变成了一个可以给人建议、帮人起步的人了。
这也就带来了一些全新的问题。通过与同事的讨论,并合作实现许多想法,我学到了很多关于Python的知识,也有了一些很好的实践经验。与团队合作解决复杂的问题,促使我在版本控制、单元测试和持续集成/持续部署方面扩展了自己的视野。
展示自己的产品,你身边的人可能会面临类似的挑战。在最坏的情况下,身边的人可能并不会感兴趣,但是即使如此,展示也不会让你失去任何东西。在最好的情况下,身边的人会促进工作,也会给你提出新的问题,提高你的技术。
接受新的挑战
从那之后,我们面临的挑战也越来越大。意外之下,一个遗留的财务应用程序没法使用了,我们的部门曾经依靠这个程序来发布财务结果。
接受Python的挑战原本只是想想而已,但现在却成了必然选择。我被要求组建一个团队并领导一个Python程序的开发,时限两个月。意料之中,我们这个小团队按时完成了这个任务。
这个挑战非常伤脑筋,但并非不可解决。我如果只是一直妄想获得一个这样大任务的机会,当这个机会真正来临时我也会悲惨的失败。而我选择了慢慢地提高我和团队的技能,这使我们逐渐走向成功。
后来的事情便不再受我控制。由于这个项目开发的成就,我获得了第一次晋升和加薪。一年之内,我找到了一份新的工作。我现在负责一个拥有金融功能的数据集成。我使用最先进的数据平台和分布式,解决了一些在几年前无法想象的问题。
从细微之处开始提升,当更大的挑战来临时,就能够做好准备,成就也会随之而来。
学习Python是一段艰难的旅程。开源社区创造了许多神奇的工具,和培训的材料,也为众多问题提供了答案,它是我学习之路上的最大帮手。在过去几年中,我一直从这些内容中获益。而如今,我有能力去在技术上帮助别人了,有更多的事情等着我去完成。