微信号:programmer_club

介绍:程序员第一自媒体,与你探讨码农人生路上遇到的各类泛技术话题,定期为你推荐码农人生思考、感悟以及启迪!

为什么学了那么多门语言,我还是编不好这段代码

2018-01-17 20:00 程序员之家

虽然说语言学得好,Bug 修到老。但是行走技术江湖,学习多门语言防身,依然是每个奋战在一线程序员的必备功课。

那么,编程语言究竟应该怎么学?这个问题大概比“救女友还是救老妈?”更值得关心,毕竟一门编程语言会一直伴随你,在你身处代码前线之中,帮忙提刀挽弓,冲锋陷阵。

为此,我们采访了一些程序员,获得了一些问题。

  • 我是初学者,应该先学哪门语言,从哪门入手比较好?

  • 我比较懒,学哪门语言可以毕生通用?

  • 学习哪一门语言更容易获得大厂面试机会?

  • 大厂面试上机时,用哪门语言更方便?

  • 我是后端工程师,有必要学习一门前端语言么?

  • 学习一门语言,应该具体深入到什么程度?

  • 新语言层出不穷,要不要每一个都掌握?

*** ***

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

1、初学者不要纠结“先学哪种语言”,这种时间花得很不值得,还不如随便挑一个语言,跳进去游几圈试试。对于工程师来说,学习第一门编程语言只是万里长征的第一步,只要你还在这个领域,就不可能只学一种语言,只会一种语言的工程师根本就不能称之为工程师。

2、如果你不能用一种编程语言的基本特性写出好代码,那换成另外一种语言也无济于事,你会写出同样差的代码。比如,你的 Java 代码写得很糟糕,那么换成 Go、Ruby,你的代码也会一样糟糕,甚至更差。

所以,基本掌握了一门语言的功能和语法特性之后,要去做实践和练习,能写生产代码了,再回过头来去看编程语言的本质,了解这门编程语言的设计原理,能力边界和高级功能,这样有助于你更快更好掌握其他编程语言。

3、很多人觉得不要用脚本语言入门,我觉得不一定,尤其现在就着人工智能浪潮搞机器学习的人,用 Python 入门就很好。另外,脚本语言在面试中绝对占优势。平时工作中我对 Ruby、Python、C++、和 Java 的熟练程度差不多,但是面试中使用 Ruby 或者 Python 答题,写代码的时间估计是那两者的一半。

如果让我推荐一门脚本语言,那就是 Python,关于 Pythond 的历史和语言特性,可以参考池老师之前写过的“人生苦短,我用 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 等)。学习每一种语言,都应该去深入了解它的并发模型,在这个多核的时代,不懂并发的程序员不可能是个好工程师。

公众号内回复“1”带你进粉丝群!

 
程序员之家 更多文章 程序员携机器人求婚被拒:去和机器人过日子 女程序媛与男程序猿的一天,萌萌哒! 每天有2800万人在看片 程序员高手和菜鸟究竟差在哪里? 程序员是这么玩冲顶大会的
猜您喜欢 CODING 收购 Gitcafe,合力做最适合中国开发者的 Git 工具 【PHP专题4】8数据类型讲解 论文导读 | DeepXplore:深度学习系统的自动化白盒测试 这些储物产品设计,让收纳变得有趣起来 微服务模式系列之四:客户端服务实现