免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 43266 | 回复: 146
打印 上一主题 下一主题

每个程序员都应该学习使用Python或Ruby,你怎么认为? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-26 15:40 |只看该作者 |倒序浏览
本期小话题:每个程序员都应该学习使用Python或Ruby,你怎么认为?

话题奖励:《梦断代码》五本。

如果你是个学生,你应该会C,C++和Java。还会一些VB,或C#/.NET。多少你还可能开发过一些Web网页,你知道一些HTML,CSS和JavaScript知识。总体上说,我们很难发现会有学生显露出掌握超出这几种语言范围外的语言的才能。这真让人遗憾,因为还有很多种编程语言,它们能让你成为一个更好的程序员。

■跟C/C++/Java相比 — Python/Ruby能让你用少的多的多的代码写出相同的程序。有人计算过,Python或Ruby写出的程序的代码行数只相当于相对应的Java代码的行数的五分之一。如果没有绝对的必要,为什么要花这么多时间写出这么多的代码呢?而且,有人说,一个优秀的程序员能维护的代码量最多是2万行。这不区分用的语言究竟是汇编,C还是Python/Ruby/PHP/Lisp。所以,如果你用Python/Ruby写,你一个人干的,不管是干什么,如果换用Java/C/C++,那都需要一个5人的小团队来干。
■跟VB/PHP比较 — 跟PHP/VB相比,Python/Ruby的是一种从设计上讲比它们好的不知多少倍的语言。PHP和VB分别是在开发网站和桌面应用程序上非常流行的语言。它们流行的原因是非常的易学。不懂计算机的人也很容易的上手。如果你用这些语言开发过大型的项目,你就会发现这些语言的设计是如此的糟糕。是朋友,他就不会劝你使用PHP/VB。
■跟Lisp/Scala/Haskell/Closure/Erlang相比 — Python/Ruby跟它们比起来显得相当的“主流”。确实,这些语言每种都有其很酷的特征,对于高级编程人员,了解这些语言能给他们对编程的思考带来实际的提升。但这些应该在你以后的职业生涯中才去决定学哪一两种。对于现在,Python/Ruby是在语言功能和实际运用之间平衡后的更好的选择。
■跟Perl相比 — Python和Ruby都受恩于Perl,在这两种语言异军突起前,Perl是最好、最大的一种动态语言。但现在,Perl已是明日黄花,越来越多的人转向Ruby/Python。我感觉Perl的面向对象机制有点做作,很不好用。通常认为,Perl一种比较难学的语言,因为它提供你了太多不同的方法去完成同一个任务,它的语法有点像密码,非常不直观 — 除非你对它掌握的非常好。总之,我感觉Perl是一种对于学生来说不是很合适的语言—除非你有特殊的理由去学它(例如,你有很多正则表达式要处理,这是Perl的闪光点)。
■跟sh/sed/awk/bash相比 — 如果你使用Linux/Unix,你可能需要做一些shell编程,甚至会编写一些不小的程序。但是,对于这些语言,一旦程序达到一定的行数,事情就会开始变得让你痛苦不堪,你最好是用Python去做这些事情。当然,做这种事情,Perl是最好的选择,Python排第二。(Ruby对于系统shell脚本不是很合适)。

你可以在Google上搜一下“为什么X比Y好” — 其中把X换成Python或Ruby,把Y换成另外一种语言 — 你就会发现,有无数的文章来说明它们为什么这么好。

如果你有选择你的毕业设计使用的编程语言的自由,你应该选择Python或Ruby,它们能让你在开发项目的过程中节省一半的时间(除非你要开发的是移动应用,这样你必须要使用Java或Objective-C)。

下面是xkcd上的一幅漫画,告诉你掌握Python后你会变得多么的强大:



文章转自:外文IT评论

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2012-04-26 15:42 |只看该作者
除了 asm / c / c++ 其它都不会,也不想会

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
3 [报告]
发表于 2012-04-26 15:56 |只看该作者
应该会一门比较陈手的脚本语言,python和ruby都是不错的选择,但不见得一定是这两个里面选一个。

论坛徽章:
0
4 [报告]
发表于 2012-04-26 16:03 |只看该作者
支持ruby,它的语法的确不错。

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
5 [报告]
发表于 2012-04-26 16:31 |只看该作者
python吧,很强大。

论坛徽章:
0
6 [报告]
发表于 2012-04-26 17:02 |只看该作者
正在打算学学python,不知怎么入手,望各位牛人指点。。。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
7 [报告]
发表于 2012-04-26 17:34 |只看该作者
回复 2# bruceteen


平时日常电脑使用中偶尔需要自己写程序来解决问题,这时会一两种脚本语言就很爽了。

论坛徽章:
6
寅虎
日期:2013-10-10 21:59:16狮子座
日期:2013-11-12 09:24:41金牛座
日期:2013-12-14 17:02:23酉鸡
日期:2014-01-16 12:34:37技术图书徽章
日期:2014-02-15 12:52:31巨蟹座
日期:2014-05-17 14:09:52
8 [报告]
发表于 2012-04-26 17:58 |只看该作者
已经给c++折磨的死去活来了,真的要学习python吗?
都说语言的本质是共通的,如果python能清晰地反衬出c++的一些基础概念,我倒是很愿意去学它。
但是,对于一些声称易学易用的语言,我是常怀戒心的,simple & easy 的表面下,其实是暗示你要具备了大量而必须的基础。想当年C语言也是“优雅而简洁”而著称的,但是后来如何?“拿着剃刀在滑冰场上跳舞” “拿着绳子去上吊” “到处充满陷阱"... 嘿嘿,现在还有人说C语言好学、容易的吗?
           

论坛徽章:
0
9 [报告]
发表于 2012-04-26 18:28 |只看该作者
本帖最后由 yahoon 于 2012-04-26 18:29 编辑

看用途了吧
web开发就国内而言肯定还是php最多
C,C++是系统级别的开发多
java是web service及企业级应用多
shell,powershell等脚本语言是运维用的多
至于perl,python,ruby 新兴的多用途胶水语言, 很热门,但是前途还很难说
正如现在的erlang 刚开始火,谁知道呢

至于学习应该不是门框,一通百通无非是变量,函数,类,库,框架如此而已

论坛徽章:
3
卯兔
日期:2013-08-15 13:17:31处女座
日期:2014-01-10 11:35:23双子座
日期:2014-01-25 02:16:06
10 [报告]
发表于 2012-04-26 21:16 |只看该作者
第一个正式学习的语言就是Python,这里的“正式学习”是指真正开始用一门语言做东西,在学校里开了《XXX程序设计》一门课并去上了但没自己做东西不算。

先发点牢骚吧。大环境所致,用Python做东西,别人会说你不“正统”:
情节1:
“我要用Python写程序”
——“厉害的程序都是C/C++写的,。。。(此处不宜显示,省略)”。
“做相同的事情,Python用的代码比其他语言要少,能节省时间”。
——“年轻人不要怕吃苦,光想着偷懒”。

情节2:
“我这是Python写的,来学吧,Python会节省大量的时间!”
——“哦,我看看,。Python安装哪个版本啊?”
“先用2.7的”
——“……@#¥%……(安装中)没有像C#一样的官方IDE啊?”
“IDE只是个工具,(解释。。。)”
——“Python用到的库都要自己配,怎么界面还不能拖出来,还有那么多“界面库”(某位同学是这么称呼的)工具,选哪个啊?”
“有Python自带的tk,还有wxPython、PyQt、PyGTK。这些都有各自的所见即所得的界面设计工具”
——“什么乱七八糟的,不玩了,去看我的C#去。。。”

情节3:
(碰到一个用Python的,先聊了一会。。。捧了下Python)
——“你是用什么框架的,Django?”
“我是用Python做桌面的”
——“Python的长处是做网络的啊,做桌面的速度多慢啊。”
“(沉默,不知道怎么回答)”

     当然,这跟我处的环境有关,我一般接触不到纯粹以写代码为工作的人。而是一些为了完成一些目标,用一些程序来实现,看这些目标能否实现。他们认为,无法快速“拖”出窗口的语言,就不是简单易学的语言(微软“害人不浅”啊)。

    接触到Python的人,都会听说Python的代码量少,尽管Python的教材上有了暗含的例子,可是并没有直观的印象。这里就贴一段比较代码吧(Wiki上找到的,根据“合理引用“规则引用,版权归Wiki所有)。
归并排序的,C++代码
  1. void Merge(int a[], int b[], int low, int mid, int high)
  2. {
  3.     int k = low;
  4.     int begin1 = low;
  5.     int end1 = mid;
  6.     int begin2 = mid + 1;
  7.     int end2 = high;
  8.     while(begin1 <= end1 && begin2 <= end2)
  9.     {
  10.         if(a[begin1] <= a[begin2])
  11.             b[k++] = a[begin1++];
  12.         else
  13.             b[k++] = a[begin2++];
  14.     }
  15.     if(begin1 <= end1)
  16.         for(int q = begin1; q <= end1; q++)
  17.             b[k++] = a[q];
  18.     else
  19.         for(int q = begin2; q <= end2; q++)
  20.             b[k++] = a[q];
  21. }

  22. void MergePass(int a[], int b[], int seg, int size)
  23. {
  24.     int seg_start_ind = 0;
  25.     while(seg_start_ind <= size - 2 * seg)
  26.     {
  27.         Merge(a, b, seg_start_ind, seg_start_ind + seg - 1, seg_start_ind + seg * 2 - 1);
  28.         seg_start_ind += 2 * seg;
  29.     }
  30.    
  31.     if(seg_start_ind + seg < size)
  32.         Merge(a, b, seg_start_ind, seg_start_ind + seg - 1, size - 1);
  33.     else
  34.         for(int j = seg_start_ind; j < size; j++)
  35.             b[j] = a[j];
  36. }

  37. void MergeSort(int a[], int size)
  38. {
  39.     int* temp = new int[size];
  40.     int seg = 1;
  41.     while(seg < size)
  42.     {
  43.         MergePass(a, temp, seg, size);
  44.         seg += seg;
  45.         MergePass(temp, a, seg, size);
  46.         seg += seg;
  47.     }
  48. }

  49. int main()
  50. {
  51.     int a[] = {3, 5, 3, 6, 4, 7, 5, 7, 4};
  52.     MergeSort(a, sizeof(a) / sizeof(*a));
  53.     //输出
  54.     for(int i = 0; i < sizeof(a) / sizeof(*a); i++)
  55.         cout << a[i] << ' ';
  56.     cout << endl;

  57.     return 0;
  58. }
复制代码
对应的Python代码:
  1. def merge(l1,l2):
  2.     final=[]
  3.     while l1 and l2:
  4.         final.append(l1[0] <= l2[0] and l1.pop(0) or l2.pop(0))
  5.     return final +l1 + l2
  6. def mergesort(List):
  7.     mid=int(len(List)/2)
  8.     if len(List)<=1:return List
  9.     return merge(mergesort(List[:mid]),mergesort(List[mid:]))
复制代码
代码量的多少一目了然。
正如同楼主所说,关于Python和其他语言做比较的文章在Google上一大把,这里就不细说了。
就那一句:Python的确能节省你很多时间!!!

最后,还有一个小小的希望:希望PyPy能火起来。。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP