💠

💠 2024-11-22 11:50:47


博客

技术团队

个人博客网

搭建博客




专栏

经验之谈

很多时候工程师们争论的问题,不再是对和错、是与否的问题,而是每个人的观点应用到相关的场景中的时候带来的优劣比较。也就是说,是不是把合适的技术用到了正确的场景中。平衡是我们在这个阶段要着重考虑的,这种平衡有时候是时间复杂度,有时候是空间复杂度。

  1. 初学者不要纠结“先学哪种语言”,这种时间花得很不值得,还不如随便挑一个语言,跳进去游几圈试试。对于工程师来说,学习第一门编程语言只是万里长征的第一步,只要你还在这个领域,就不可能只学一种语言,只会一种语言的工程师根本就不能称之为工程师。
  2. 如果你不能用一种编程语言的基本特性写出好代码,那换成另外一种语言也无济于事,你会写出同样差的代码。比如,你的 Java 代码写得很糟糕,那么换成 Go、Ruby,你的代码也会一样糟糕,甚至更差。
    所以,基本掌握了一门语言的功能和语法特性之后,要去做实践和练习,能写生产代码了,再回过头来去看编程语言的本质,了解这门编程语言的设计原理,能力边界和高级功能,这样有助于你更快更好掌握其他编程语言。
  3. 很多人觉得不要用脚本语言入门,我觉得不一定,尤其现在就着人工智能浪潮搞机器学习的人,用 Python 入门就很好。另外,脚本语言在面试中绝对占优势。平时工作中我对 Ruby、Python、C++、和 Java 的熟练程度差不多,但是面试中使用 Ruby 或者 Python 答题,写代码的时间估计是那两者的一半。
  4. 后端工程师要熟练掌握一门前端语言,前端工程师也要熟练掌握一门后端语言。倒不是为了提倡全栈或多个能力储备,而是两者的编程思维模式很不一样。知己知彼,在架构设计和解决具体问题时,才会有更精确的判断。另外,现在大前端的概念也比较流行,也就是大前端工程师能够同时掌握 Web 编程语言、iOS 和 Android 编程语言,原生技术(iOS 和 Android)和 Web 的配合会越来越紧密。
  5. SQL 是一门非常非常重要并且应该熟练掌握的语言(虽然它不能被称为程序语言),我在这里用了两个非常,因为很多工程师有些过于轻视 SQL 了,并为此付出了惨重的代价。
    如果你平时的编程工作涉及到业务功能,而不是纯粹的技术架构,一定会使用到数据库。SQL 就是数据的语言,通过它你可以和数据建立连接和沟通。如果你的数据访问模式写得很差,轻则代码性能一塌糊涂,重则引发 Bug,而涉及数据的问题,Bug 等级都比较高,后果可能很严重。
  6. 无论使用什么语言,工程师都应该能够基于这种语言搭建测试框架,写好测试代码和写业务代码一样重要,甚至更重要。工作后你会发现,可能有时候我们只花五分钟写了一个程序,而为其写一个差不多能够覆盖所有功能路径的测试用例集却花了一个小时。
  7. 最后的,也是最重要的是:在任何时候都要用并发的、分布式的思维去看待你的程序。因为竞争条件或者并发中的不确定因素(比如调用顺序)导致的 Bug,仅仅理解语言的基本特性,根本不能解释。每种语言都有自己的并发编程模式(比如 Go 的 Goroutine,Java 的 ForkJoinPool,Swift 的 Swift Grand Central Dispatch 等)。学习每一种语言,都应该去深入了解它的并发模型,在这个多核的时代,不懂并发的程序员不可能是个好工程师。

最近几年我主要使用 Ruby 和 Java 编程,这两门语言的优缺点就不在这里说了,网上有很多类似的观点。如果你还不知道应该学习哪一门编程语言,那么就从 Java 开始吧。
编程语言,你看它是山,它就是山;看它是水,它就是水。你可以把它当做一门简单的编程语言,有语法,有特性,也有优缺点,但这样的语言也可以复杂到去实现和解释各种计算模型和理论。一门编程语言到底能做什么,完全和工程师怎么去用,在什么场景中用息息相关。

如何将脑海中的思维火花转化为代码

先把流程大致想清楚,在 main() 中写下大致的调用结构,不一定要实现每个细节,可以先用函数分装起来。实现最少的功能,之后再想怎么改进,加功能;这个过程也可以检验一开始写下来的代码是不是具备可拓展性。
比如用 js 做日历,可以先实现一个只能打印字符串日历的版本(这涉及到日期的计算,简单格式化输出),然后思考怎么把字符串适配到 html 上?或者服务端的话输出为 json ? 或者其实可以跳过序列化这一步?等等。
可以学习一下 TDD ,一边写代码一边写测试,切忌自以为思考完所有细节一气呵成实现完毕,这样的话基本上 写代码:调试找bug = 1:10


参考: 2018开发者技能报告,让你更了解自己的行业。


Tool


团队开发


毕业

生活

娱乐

玩机

华为全面屏手势

商业