字节跳动青训营感受
(其实还没有结束,但这是第六篇笔记,所以决定写一写参加青训营的感受。)
最初我对抖音和字节跳动公司都没什么了解,甚至对于程序开发的认识也很粗浅。但是作为物理专业的学生,编程是绕不开的命题。虽然平时对于编程技能的需求仅限于数据处理和数学建模计算方面(换言之,我成了Scipy忠实用户),但是不止一次碰到过我毫无头绪的问题。这些问题被我以从各种官方文档和论坛中给出的现有解法解决,但是背后的原理我依旧一窍不通。
青训营则为我提供了一个揭开计算机”黑箱“的机会。这一次,能够站在开发者而非用户的角度,真切地学到了一个成熟的服务在每一环节究竟发生了什么。此外,我先前只学过python和一些dart语言,对于以C为基础的语言没有什么认识。之前在学校里学过面向对象编程,那时候只知道怎么使用,并不知道对象的概念在存储、调用等环节究竟会给一个程序带来怎样的效果。在学习了Go语言之后,对于对象和程序构成的概念终于有了实感。
在未来,我将利用在青训营学到的技能,完善之前和伙伴们开发的小软件。(现在回过头看,当时开发的过程可以说是兵荒马乱。框架、数据库、依赖管理、网络安全,这些方面上的选择和措施我没有投入太多思考。)
接下来是给未来学习编程语言/程序开发的新手同学们的一些基本建议:
- 一定要动手! 哪怕有很多自己改不出来的bug。否则你不可能理解这个函数的真实使用方式。(就像你不能光看课本上的公式不做题一样)就算写出来不一定能成功运行,也要尝试着把一个完整的程序写下来。
- 多看官方文档和官方教程。 有时候在论坛上查到的代码/解决方式不一定正确。在你和作者环境配置不同、项目的目标功能、甚至是使用时间不同,这种情况下,他的代码/解释不一定对你就是正确有效的。
- 不要把函数、第三方组件当作黑箱来使用。(这是我经常犯的错误)如果这么做,下一次遇到同样问题再照搬上次的代码时,你可能就又多了一个莫名其妙的bug。去了解一下它们背后的原理,比如GO语言有的函数(db.Migrate())其实是调用多个API的结果。参考它原本的写法,明白它是如何实现功能的。
- 不要直接开始写一个项目: 写完之后发现所有的功能混合在一起不知道如何测试是很痛苦的。另外,将各个功能分开设计,再开始写,会有效降低思考难度。(另外,这样也能让帮你改代码的人更快明白你到底写的是什么。)
- 一个切实有效的方法(适合像我一样不那么经常编程但是又很需要的人):给自己整理一份文档,将经常使用的函数放进去,写上需要的参数和简单的功能说明。每次写的程序中,如果有很好的逻辑或者有很普适的问题的解决方法,也放入文档中。这样每次遇到不确定的问题,首先可以在自己的文档里迅速检索。
最后,祝各位青训营同学顺利完成大作业。未来看到这篇文章的新手同学,不要灰心,冲鸭!!! 以及,非常感谢字节跳动官方提供的这次机会!