原文作者是在日韩国人HyunwookPark先生,最初发表于Qiita,由mfabian转换成中文贴在黑客派。 HyunwookPark 先生在大阪经营着一家软件公司,留日 30 年,有 15 年编码经验,在公司上过班也体验过自由职业,曾长期从事 Java 业务编码,也涉猎过微服务、物联网、机器学习、游戏开发等领域,现 ..

【译文贴】Java 界的我转向 Python 的原因

原文作者是在日韩国人HyunwookPark先生,最初发表于Qiita,由mfabian转换成中文贴在黑客派
HyunwookPark 先生在大阪经营着一家软件公司,留日 30 年,有 15 年编码经验,在公司上过班也体验过自由职业,曾长期从事 Java 业务编码,也涉猎过微服务、物联网、机器学习、游戏开发等领域,现如今专注于用 Python 做开发。Planaria Inc.是一家从事 Web 应用开发兼编码培训的机构。

关于本文

这是在一次学习讲座上被委托就 Python 发表点意见而整理出来的材料,明明不是很熟悉 Python 这门编码语言,偏偏听众对 Python 的呼声很高。
第一次写这种长文章,行文不连贯的地方还请见谅。

转向用 Python 做开发的契机

满打满算用 Java 有 15 年了,一直很在意 Java 在环境和构建方法上费时间。
本来在小公司接包做开发需要尽快低成本实现,而单单准备构建环境就要花费不菲的成本,觉得很没效率。

全部都用 Java 来实现没有意义

我们技术人员就是要用自己掌握的技术栈来应付眼前的问题。
编码语言的选择对问题的解决有很大影响。
不只限于大型系统的架构,哪怕是简单的功能,也要用现有的开发环境和熟悉的语言来实现。
确实有一定的道理,在 Java 工程师泛滥的今天,我们能够轻松地找到相关技术人员,再者使用统一的技术也有易于维护的一面。
还有,由于使用了静态模型,尽量减少了执行时的报错而被用在大型系统上也算是一个理由。
但是只因为你目前会写 Java 代码而选择用 Java,这有没有道理呢?
仅仅因为你会写,就应该用 Java 来构建客户的系统吗?

即使这样也理应用 Java 来写吗?(我讨厌 Java 的地方)

开发环境复杂

虽然有 ant、maven、gradle 等构建工具,但是由于难懂的定义文件使得系统越庞大就越复杂。
虽然知道是为了解耦的工作机制,但是越解耦就越复杂。
我都干了十几年了,知道现在比 Struts 全盛时期方便很多。
但是项目的全貌并不是容易弄懂的东西。

笨重

对于 Web 应用,当部署 Tomcat 和 Weblogic 等应用到服务器上的时候,依赖库转为 jar 和 war 全部跑到内存上。
在 Java 中实现高并发的场景下,作为单进程来运行就变得很困难。
如果每个进程使用千兆字节大小的内存,即使分批来处理也需要服务器去扛。
在并发级的大型系统中,考虑每个分批的依赖关系,通过执行来减少 jar 依赖这种节省内存的方法也很难办吧。

验证功能实现费时间

哪怕只修改一个地方,就需要花费时间来构建和部署。
很多工程师在实现功能的时候会反复构建、验证,几秒钟到几十秒的构建部署时间累计起来也是不少的工时。
把工时耗在等待的时间上很浪费。
再者这样耗费时间会造成工程师的压力。
展开部署的话会稍微快一点,但是这样就与发布时的状态不一致会导致出现其他问题。

对脚本语言实现方式的期待

想起了以前用 PHP 开发系统时能够快速调试的情况。
如果是脚本语言的话,就可以更顺畅地进行开发了,就是以这个想法为契机开始的。

因此要比较的编码语言就压缩为下面这几种。

各种编码语言的特点(Java 开发者视角)

Java

PHP

没毛病。但是。。给人以网页的扩展这样的印象。
除了生成 HTML 以外根本不想用它。
PHP: 全称是 Hypertext Preprocessor 没错吧。
没毛病。。

<?php
// 有点排斥这种代码,这个代码块封闭写法看起来像是HTML元素的逻辑。
?>

(附赠)PHP 健在的原因

有 WordPress 这个在 CMS 领域最强大的库。

JavaScript

最初是作为主力候选项。Web 系统的咒缚?虽说是 JavaScript,但是如果熟练掌握它的话就能只用一种编码语言做出 Web 系统来。只是,既不想写也不想读。

Python

现在最喜欢的编码语言。最看中它的易读性。
因为程序员读代码的场景比写代码要多得多。
除此之外,它在现下流行的机器学习领域的优势也很不错。

Ruby

把 Ruby 作为 Python 的同级别候选项研究了下,越探究越觉得微妙。

=begin
这是注释吧・・・
这么以为的
用IDE的话,一个快捷键能实现吗?
=end
list.times{|num|
  p "test"
}
list.times do |num|
  p "这样的写法也OK"
end
puts "hello"
puts "行尾加分号也可以";
for i in 0..4 do
  puts "for文"
end
for i in 0..4
  puts "do可以省略吗"
end

编码语言比较(Python 视角)

编码语言排行

那么就来看看编码语言的排行。

编码语言比较

使用 Python 的缺点

用 Python 做过的实例

micro web-framework (RESTful framework)

使用 bottle 做的 Web 应用。
数据库使用 SQLite。
前端用 vue.js 实现。

打字游戏

o1.jpg

呼噜呼噜的打字指法游戏这边请

游戏

使用 pygame 做出来的游戏。
为了教小朋友们制作游戏,自己先做出来看看。
按照下面这篇博文的做法实现的。

太空侵略者游戏

o2.jpg

导出数据到 Excel

使用 xlsxwriter 将账单导出到 Excel。

账单

o3.jpg

关于业界动向的思考

Java 开发者以后会减少是?

(顺便说一下)新手当中用 Ruby 的人很多

因为 Rails 很棒,所以才使用 Ruby 的感觉。

Web 系统的今后发展(个人看法)

编码语言技术一览

PHP 跟 Ruby 的信息太少请见谅 (编者注:原文评论中有网友补充了关于 Ruby 和 PHP 的信息,作者采纳修改后故将这句话加了删除线效果)
已按评论中的指导意见做了补充,感谢各位的建言。

- PHP Python Ruby Java
CMS WordPress, Drupal Mezzanine, django-cms Refinery, 島根県CMS,浄瑠璃, ぞめき,白鷺 Liferay
Web Framework Laravel, CakePHP django, Bottle, Flask Rails, Sinatra Play, Jersey, Spring
package manager composer pip, Pipenv gem maven, gradle
IDE PhpStorm PyCharm 哪个比较有名? Eclipse
code checker PHPStan pycodestyle, autopep8 哪个比较有名? CheckStyle(in Eclipse)

仍然是 Python 新手,关于“Python 怎么样?”的看法。

因为才刚开始使用 Python,所以有成堆的搞不清楚的问题。

其他在意的编码语言

Go 语言

擅自评分表(满分 5 分)

※加入了其他在意的 Go 语言

- Python Ruby PHP Java Go 备注
运行速度 3 1 3 5 5 Go 语言的速度跟 Java 并列?
代码可读性 5 4 1 3 3 Python 代码易读,PHP 代码根本不想维护好吗
学习难易度 5 4 4 3 2 Go 语言稍微有点难
面向对象 3 5 4 5 2 纯面向对象的话是 Ruby。Go 语言是结构体。
机器学习 5 2 2 3 2 除了 Python 之外就是 R 语言
全球人气排行 5 2 4 5 3 Go 语言极速飙升中。
日本人气排行 2 4 5 5 1 日本市场还是打算使用 PHP 的样子。
年收入 4 3 1 4 5 机器学习的项目收入高。Python 跟 Go 语言的 Web 项目很少。
项目区域 都在东京 都在东京 大阪也有 大阪也有 都在东京 大阪没有用新技术的动力。
分数统计 32 25 24 33 23 并不是简单统计分数就能做出判断,而是作为一个参照指标来看。

总结

  1. 从热门度来看,Java 程序员接下来应该选择的编码语言毫无疑问是 Python
    • Java 已经会用了,所以只在需要用 Java 的场合才用 Java
    • 如果要选择第二编码语言的话应该是 Python 吧。
  2. 使用原生的 Python 速度不够快
    • 期待 pypy 的表现
  3. 目前 Ruby 在日本市场很热门,但是如果没有 Rails 的话价值就会减半,所以很微妙
    • 乘着周遭同行都在盯着 Ruby 的时候发力甩开他们吧(我是这么想的)
  4. 在 CMS 领域无法战胜 WordPress 吗?
    • 如果诞生出用 Python 实现的极赞 CMS,毫无疑问 Python 在 Web 领域也会成为 No.1
  5. 考虑到开发速度,Ruby 作为一个可选项
  6. 最终理应变成“不是选择某一门技术,而是要做技术选型”这样吗?

原文链接:https://qiita.com/HyunwookPark/items/68d029dd33807fc69ca4

  • Python

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库,能够轻松完成很多常见的任务。它的语法简捷和清晰,尽量使用无异义的英语单词,与其它大多数程序设计语言使用大括号不一样,它使用缩进来定义语句块。

    360 引用 • 512 回帖 • 607 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2473 引用 • 7880 回帖 • 865 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    467 引用 • 1020 回帖 • 830 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 53 关注
5 操作
soulfight 在 2019-09-25 22:27:56 更新了该帖
soulfight 在 2019-09-30 10:38:10 更新了该帖
soulfight 在 2019-09-30 11:33:17 更新了该帖
soulfight 在 2019-09-30 11:34:23 更新了该帖 soulfight 在 2019-10-13 13:01:26 更新了该帖
1 回帖
请输入回帖内容...
  • Peiel

    Python 确实不错trollface