原文作者是在日韩国人 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 开发系统时能够快速调试的情况。
如果是脚本语言的话,就可以更顺畅地进行开发了,就是以这个想法为契机开始的。
因此要比较的编码语言就压缩为下面这几种。
- PHP (脚本语言)
- JavaScript (脚本语言)
- Python (脚本语言)
- Ruby (脚本语言)
各种编码语言的特点(Java 开发者视角)
Java
- 工作很多(现在是这样)。
- 大型项目很多。
- 无法避免派遣。
- 年轻人避开 Java。
- 以后年轻的 Java 工程师貌似要减少?
- 难以培养公司内部人才。
- 不喜欢包管理工具。
- ant, maven, gradle
- jEnv 的话可以吗?
- 调试麻烦
- 逐个打 war 包部署。
- 展开部署倒是还行。
PHP
没毛病。但是。。给人以网页的扩展这样的印象。
除了生成 HTML 以外根本不想用它。
PHP: 全称是 Hypertext Preprocessor 没错吧。
没毛病。。
<?php
// 有点排斥这种代码,这个代码块封闭写法看起来像是HTML元素的逻辑。
?>
- 写类的时候就像在 JSP 中声明类一样,有违和感。
- 需要 Scriptlet,有违和感。
- 标签跟处理混在一起的写法很多。
- 规范编码的意识薄弱(个人偏见)。
- “只要能运行就行”式的工程师很多(个人偏见)。
- 新手好像很容易入门,但是我实在是写得很吃力。
- 为什么这样呢?报酬低(做的事基本没什么变化)
- 报酬低所以要速战速决导致各种渣渣
- 不使用模板引擎吗?
- 我觉得意识高的人以及在场景需要时才会用。
(附赠)PHP 健在的原因
有 WordPress 这个在 CMS 领域最强大的库。
- 日本市场占有率 94%(2019 年 1 月)
- 全球占有率 72%(2019 年 1 月)
- 【压倒性的 WordPress 份额】彻底比较知名 CMS 在全球和日本的市场占有率!
- CMS 比较 | 从全球份额角度来看推荐工具介绍・入门前要考虑的事项
JavaScript
最初是作为主力候选项。Web 系统的咒缚?虽说是 JavaScript,但是如果熟练掌握它的话就能只用一种编码语言做出 Web 系统来。只是,既不想写也不想读。
- 制作 Web 应用几乎必不可少的编码语言。
- 以前用在前端处理上。
- 老实说很难读,不想写。
- 通过使用 Node.js 将前后端编码语言统一起来确实非常棒。
- 擅长通过大量的请求来处理硬件的 I/O。
- 针对每一个请求都持续占用 CPU 的情况,处理很糟糕。
- 通过 Electron 可以制作桌面应用。
- 基于 Chromium 和 Node.js,使用 Web 技术可以制作桌面应用。
- 实例:Atom(文本编辑器)
Python
现在最喜欢的编码语言。最看中它的易读性。
因为程序员读代码的场景比写代码要多得多。
除此之外,它在现下流行的机器学习领域的优势也很不错。
- 易读(易维护)
- 机器学习领域强势。
- 被选为编码学习的入门语言
- 在教育领域 Scratch 退休后 Python 接班
- Linux 标配
- centos(python 2.7)
- 极易制作自动化脚本
- 全球人气爆棚
- 2018 年项目全在东京(期待 2019 的表现)
- 没有 switch(这一点有些吃惊)
- 访问限制薄弱
- 不加保护
- 类的私有属性和方法只要写类名就可以调用
Ruby
把 Ruby 作为 Python 的同级别候选项研究了下,越探究越觉得微妙。
- Rails 真的很棒
- 多行注释有点微妙
=begin
这是注释吧・・・
这么以为的
用IDE的话,一个快捷键能实现吗?
=end
- 代码块末尾以 end 闭合很不喜欢
- 类似 lua 语言的 vb 风格
- 新手或许觉得这样更容易理解
- 有段时间拿来跟 Python 比较难以取舍,最后落选
- 日语博文・书籍很多(日本制造)
- 其中一个卖点是“日本人发明的编码语言”
- 只在日本市场使用率很高。
- 覆盖常量会出现警告。
- 英语大写字母开头会被当作常量
- 语法上跟其他编码语言顺序相反 (10.times do |num|)
- 写法多样(“这样写也可以”的写法很多)
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 视角)
- 最易读(个人看法)
- 报酬也很高?
- 预计往后 10 年会有更多的人用 Python
- 因为把编码当作基本素养来学习的人正在学习 Python 中。
- 排名第 1 或者第 2(在脚本语言中毫无疑问排第 1 位)
编码语言排行
那么就来看看编码语言的排行。
- 2018 年 Qiita 流行語奖
- Python 的突进遥遥领先
- qiita 标签・排行
- python 与 ruby 一决高下
- 趋势是哪门编码语言!?试总结 GitHub 用户使用的编码语言排行!
- 可以看到每年的动向
- Ruby 是单向衰退下降
- What Programming Language Does Your Country Like?
- 各个国家的热门编码语言(Ruby 只在日本有人气)
- 2018 年热门编码语言彻底比较!
- python 与 ruby 一决高下
- What are the most popular programming languages for 2018?
- 总之用 Java 和 Python 都 OK
- GitHut
- 总之用 Java 和 Python 都 OK
- TOIBE
- 总之用 Java 和 Python 都 OK
- 2017 年热门编码语言前三甲是 Python,C,Java
- Python 位居榜首(这篇博文令我很开心)
- 这篇是最新的 The 2018 Top Programming Languages - IEEE Spectrum
- PYPL PopularitY of Programming Language
- Python 位居榜首
- web framework benchmarks
- 但是在 Web 框架基准上没有名列前茅
编码语言比较
- 应该用哪个?3 大 Web 框架 Rails・Django・Laravel 彻底比较
- Django 生成的代码少,流畅的学习也能掌握基础,听起来不错!
- 最好的编码语言(以及我是如何停止焦虑,喜欢上编码的)
- 稍微有点老的博文
使用 Python 的缺点
- 速度慢(应该考虑利用 pypy 等来提高速度)
- 日语博文少(加油)
用 Python 做过的实例
micro web-framework (RESTful framework)
使用 bottle 做的 Web 应用。
数据库使用 SQLite。
前端用 vue.js 实现。
打字游戏
游戏
使用 pygame 做出来的游戏。
为了教小朋友们制作游戏,自己先做出来看看。
按照下面这篇博文的做法实现的。
太空侵略者游戏
导出数据到 Excel
使用 xlsxwriter 将账单导出到 Excel。
账单
关于业界动向的思考
Java 开发者以后会减少是?
- 选择 Java 以后,在大型项目中做苦力的可能性很大
- 远程工作几乎没有
- 这类事年轻人避之不及
- 有必要特意选择费时间的 Java 吗?只用一部分不就行了吗?
- 想要用 SVF 输出很多账单的话就用 Java
- 用脚本语言处理速度不够快的时候用 Java?(没有其他好的办法吗?)
- 其他没想到的点
(顺便说一下)新手当中用 Ruby 的人很多
- 因为日语文档很多,所以给人以看起来很容易的印象?
- 因为不用写 SQL 也可以?(有 Rails)
- 制作 Web 应用很容易?(有 Rails)
因为 Rails 很棒,所以才使用 Ruby 的感觉。
Web 系统的今后发展(个人看法)
- 快速制作的话用脚本语言
- 特别是做微服务
- 全球流行的 Python 热估计也会来到日本
- 东京的流行趋势会晚一年传到大阪来(个人主观意见)
- 在从事 Java 和 Ruby 开发的话以后会有忧虑
- Go 语言应该会追上来
- Python 跟 Go 语言有可能成为两强
编码语言技术一览
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,所以有成堆的搞不清楚的问题。
- 包的管理很简单?
- python 也能使用 nexus 吗?
- 现在流行的 Yarn 是 Pipenv?
- 总觉得 Anaconda 的用途不同
- 明明是要创建 Web 应用的开发环境,要安装 Anaconda 吗?
- 用哪个 IDE 好呢?(现在使用 Atom 实操)
- PyCharm
- 每月 $8.90 (至少 1,000 日元)
- 是因为能在 Django 中下断点的缘故吗?
- Jupyter
- Wing
- PyScripter
- Eclipse(导入 PyDev 插件)
- 启动居然需要 Java 环境,讨厌。
- PyCharm
- 日志输出有什么好处吗?
- 内存使用情况如何?
- Django,Bottle,Flask 等等,事件是线程?
- 编码规范检查器是这些?
- pep8 → 好像变成了 pycodestyle
- pep257 → 好像变成了 pydocstyle
- yapf
- autopep8
- pyflakes
其他在意的编码语言
Go 语言
- 速度快!
- 结构体・使用指针
- 多线程强悍
- 学习成本高(跟 C 语言并列)
擅自评分表(满分 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 | 并不是简单统计分数就能做出判断,而是作为一个参照指标来看。 |
总结
- 从热门度来看,Java 程序员接下来应该选择的编码语言毫无疑问是 Python
- Java 已经会用了,所以只在需要用 Java 的场合才用 Java
- 如果要选择第二编码语言的话应该是 Python 吧。
- 使用原生的 Python 速度不够快
- 期待 pypy 的表现
- 目前 Ruby 在日本市场很热门,但是如果没有 Rails 的话价值就会减半,所以很微妙
- 乘着周遭同行都在盯着 Ruby 的时候发力甩开他们吧(我是这么想的)
- 在 CMS 领域无法战胜 WordPress 吗?
- 如果诞生出用 Python 实现的极赞 CMS,毫无疑问 Python 在 Web 领域也会成为 No.1
- 考虑到开发速度,Ruby 作为一个可选项
- 最终理应变成“不是选择某一门技术,而是要做技术选型”这样吗?
原文链接:https://qiita.com/HyunwookPark/items/68d029dd33807fc69ca4
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于