我的“第二”编程语言

我们是程序员,但我们不必只是某一门语言的程序员。

编程语言

今天跟大家聊聊编程语言这个东西,“第二”只是个泛指,想必多数开发者也都掌握了不止一门编程语言。

我真正开始编程是在大四实习的时候,开发主要用的是Java,Web方向。但那会公司比较小,既要学着写后端又要学着写前端,所以JavaScript用的也算熟悉。但在那会的我看来,这两者并没有太大差别。也没有太多关于面向对象、函数式这些编程范式的概念。后来我开始做Android,对Java和面向对象编程的理解日益加深。

后来我接触到了爬虫,从正则表达式到jsoup,再后来我开始用Python来写。对于Python,用的越久,我对它越是喜欢。Python的代码总是看起来很像伪代码,可以用很少的代码实现我们想要的东西,爬虫、数据分析、网站、脚本,都可以用Python轻易实现。

随着学习的深入,我开始思考我学过的编程语言们。它们有的大开大合,有的简洁明快,有的深沉厚重。它们有解释型和编译型之分,也有无类型、强类型、弱类型、动态类型和静态类型的区分。编程范式也各有不同,命令式、函数式、面向对象等等。但它们也有相同的部分。所以,用合适的编程语言去做它适合的事情。

我的小确幸

我庆幸自己遇到我熟悉的那些编程语言们,他们带给了我很多。

先说我的老朋友,Java。Java是我最先用熟的编程语言,也因为对Android的喜欢,Java是我使用时间最长的编程语言。我更多的是用它来写一些好玩的App,好玩的动画效果,当然也靠它吃饭。

然后是JavaScript,靠着它我做了一些小东西,比如我的主页,我的blog,我的瞎编名人名言motto。靠着它我做了一些工作之外的,我喜欢的东西。

最后说说Python。用Python写的最多的是爬虫,比如我比较喜欢看小说,我用Python爬了N多本某网站的5星小说。在工作中也有一些特殊的场景需要用到爬虫的小知识,如果想偷懒的话。我维护blog的脚本也是用Python写的。偶尔我也会用Python做一些简单的数据处理和分析。Python在工作上和工作之外都帮了我很多。

和编程语言做朋友

我不是某种语言的死忠粉,比如不会高呼“PHP是世界上最好的语言”,对我有用的我都可以去学。学的编程语言越多,越能快速的学会其他任意一门新的编程语言。

之前同事推荐过一本书叫《代码之髓》,这本书从编程语言的衍生发展以及主流编程语言之间的对比等角度梳理了编程语言的“特性”,这些特性通常是所有编程语言必须的,不管是编译型还是解释型,也不管它是动态类型还是静态类型。王垠也在如何掌握所有的程序语言中讨论过这个问题。

通常在我们学习一门新的编程语言的时候,更多的应该去关注这些“语言特性”:

变量以及运算

流程控制

函数

作用域

类型

容器和字符串

错误处理

并发

垃圾回收

编程范式

我们应该关注编程语言对这些特性的实现,然后对比我们已经学过的其他语言。

拿Java和Python的面向对象来讲,首先我们要关注这两门语言各自对面向对象的定义以及各自的规则。然后可以对比一下它们的不同。比如如果我们要实现一个可以显示内容的窗口,同时希望这个窗口具有可滚动的特性。在Java中,我们一般会定义一个窗口类,然后定义一个具有滚动特性的接口来实现。但在Python中我们可以完全可以定义一个窗口类和一个滚动类,使用多重继承来实现。

那么为什么会存在这种差异呢?Java为什么不支持多继承呢?其实这仅仅是不同语言针对多继承中菱形继承所造成冲突的不同解决方案而已。至于菱形继承相关问题不是本篇重点,大家自行搜索即可,这里只是举个例子。

如果我们能用一种语言的基本特性写出来很棒的代码,那么换一种语言同样可以。

如何选择“第二”编程语言

最后说说如何选择“第二”编程语言的问题。这里我有几点建议:

选择一门和“第一”编程语言编程思想不同甚至是相反的语言。

比如如果已经学了一门静态类型语言,不妨选一门动态类型语言学一下,方便在对比中学习,体会不同编程思想的魅力。

选一门能拓展自己能力范围的“第二”编程语言。

比如A是一名Android开发,那么A可以选择学一下IOS开发和前端开发,拓展一下自己的能力圈。

选一门自己感兴趣的“第二”编程语言。

第一门语言用来“吃饭”,第二门当然可以选择一门自己感兴趣的。比如如果A是一个前端工程师,A对机器学习感兴趣,不妨学习一下Python和机器学习相关的算法。

当然,其实计算机编程一多半的功力不在语言上体现,而是解决问题的思路,也就是如何去运用程序语言解决问题的能力。这方面的能力也不仅仅是看看数据结构和算法能培养起来的,必须多写多练多学习开源,持之以恒才行。

本文来自企鹅号 - CoderTopia媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏领域驱动设计DDD实战进阶

关于领域对象业务逻辑中条件判断的最佳实践

这篇文章其实是大健康行业直销系统的番外篇,主要给大家讲讲如何在领域逻辑中,有效的处理业务逻辑条件判断的最佳实践问题。 大家都知道,聚合根、实体和值对象这些领域对...

32050
来自专栏好好学java的技术栈

选择排序算法,只需这篇文章就够了

一直想写一些简单易懂的文章,因为平时看的很多的书籍或者文章都是看着很难受的感觉,当然,这并不是说书籍写的不好,只是说对于一些没有太多基础或者基础不是很好的来说,...

13620
来自专栏程序员八阿哥

王老板Python面试(11):真实 Python 爬虫面试题

就在昨天我面试了,来到上海之后面试的第一家公司,面试过程挺顺利,不出意外今天下午就会收到 offer。面试完之后,我走在路上,整个人都是在傻笑的状态,路人一脸关...

36110
来自专栏Python小屋

图解Python多修饰器时哪个先起作用

修饰器本质上是一个函数,它接收一个函数作为参数并返回一个修饰过的新函数,一般来说不会改变函数的功能,只是在外围增加一些辅助性的检查或小功能。

11830
来自专栏Java学习网

优秀的程序员是懂指针和递归的

  上周还是什么时候,和老大的一次谈话,他提到,他觉得Java程序员只能是个半吊子(大概意思是这样)。当时,我反驳说,其实还是可以有牛人的。但元旦琢磨了下,觉得...

38150
来自专栏程序员宝库

如何掌握所有的编程语言

100本前端书籍下载|前端全套视频下载 对的,我这里要讲的不是如何掌握一种编程语言,而是所有的。 本文作者王垠,代表作《完全用Linux 工作》,著名软件工...

54880
来自专栏领域驱动设计DDD实战进阶

关于领域对象业务逻辑中条件判断的最佳实践

18640
来自专栏数据小魔方

关于数据地图的几个遗留问题解决方案

今天跟大家分享三个数据地图的遗留问题,包括以前因为技术手段限制无法解决的问题,以及读者吐槽最多的问题。 如何在一个版面上呈现不同行政级别的地理信息; 如何给版面...

35470
来自专栏编程

英语不好,能看懂编程吗?

学会编程不需要多高深的英语水平,想要学会编程,简单的英语水平足够了,现在的程序开发环境又很友好,基本上打开之后不需要怎么配置,直接写代码就行,程序语言无外乎顺序...

23600
来自专栏Cloud Native - 产品级敏捷

从面向对象到函数式编程: 我们正在构建更成熟的关注点隔离生态系统

2016.11.17, 深圳, Ken Fang 在谈论关注点隔离生态系统前, 我想,首先需要谈谈 Procedure Programming, Functio...

209100

扫码关注云+社区

领取腾讯云代金券