代码之家  ›  专栏  ›  技术社区  ›  Ramiz Uddin

如何成为一名优秀的开源Python程序员?

  •  1
  • Ramiz Uddin  · 技术社区  · 15 年前

    我是Web应用程序的C程序员。

    几周前,我问了一个关于stackoverflow的问题 What should a software engineer (web) start by learning - Erlang, Haskell, Python, C++, F# . 感谢所有提出自己想法并帮助做出决定的人。我发现巨蟒应该是我应该开始期待的。我也对二郎感兴趣。我还将尝试在一个月内为Erlang管理一些时间,但Python是我重新开始的工作。我已经开始学习如何潜入到目前为止做得很好的python中。

    我之所以选择蟒蛇而不是其他许多选择。与我的职位(上面提到的)相比,我也在做一个调查。在这里提出这个问题之前我已经考虑过了。为什么大多数伟大的工程师(我不使用开发人员——他们应该得到更多的尊重称他们为工程师)都是/是开源项目的贡献者?开源项目也有自己的格式。所有伟大的软件都与开源有直接或间接的联系。他们创建了一个伟大的开源项目,在创建这个项目之前,他们为一个开放项目等工作。

    我也想要像他们一样。为了像他们一样,我必须相应地计划和做。所以,这是我选择Python胜过其他人的第一个原因。

    当我开始看到关于Python的事情时,它与C有着惊人的化学反应,而且它的大多数客户将他们的核心流程分层为C而不是Python。这让我好奇。我开始深入研究这个事实,发现了一些将python与c结合使用的大名称,甚至一些伟大的开源项目(企业)也是这样设计的。

    为什么所有的好名字都使用C作为进程的后端,并使用python作为脚本?python不够好,不能用于后端处理吗?如果这是保持设计方式的良好实践,那么为什么我们还没有看到关于这方面的任何好书呢?或者我们有?我必须把这个计划好,所以如果你有什么好的阅读材料,请在这里提及。

    我打算扩大我的学习范围。我们的目标是学习一种语言,现在它变成了开源平台上的合成语言。我有一个戴尔optiplex桌面,我想在上面用unix、vim、python建立一个开源环境。有很多开源专家正在研究一些伟大的开源东西。我见过 Sir Alex Martelli 在StackOverflow上。我希望我能从他那里得到一些关于如何设计一个开源开发环境的信息?但是,还有很多其他的英雄,我也喜欢他们在这方面的经验。

    他们现在学习的概念是成为一个优秀的开源开发人员(Unix、Python和C)。为此,我需要如何设置开发环境?开源开发环境的伟大发展是什么?请将答案与python放在一起。

    谢谢。

    4 回复  |  直到 15 年前
        1
  •  5
  •   Alex Martelli    15 年前

    哇,你问了很多问题。让我试着解决他们的问题…

    为什么所有的好名字都在后面 用C处理并使用python 脚本?巨蟒不够好 是否用于后端流程?

    我不知道你的意思。Python在后端工作中被大量使用;如果某些部分被证明是CPU瓶颈,则提取一个稳定的内核并使用C代码(或C++、FORTRAN等,它们都很好地与Python接口)在优化时是一个合理的第一次尝试。 Cython 通常也是一个可行的选择——正如在“最后”的方法中,我们可以深入研究特定于平台的汇编语言,以提取更高的性能(gmp,我介绍的主库) gmpy ,在有保证的情况下会这样做吗-真正好的组装部件实际上是特定于特定的CPU模型的,甚至不是“平台”)。为什么你认为(例如)拥有c or e do特定的程序集来进行全面的CPU优化意味着通用x86程序集“不够好”,或者拥有通用程序集意味着C“不够好”,等等?在(很少但并非闻所未闻的)情况下,压缩每个CPU周期对于它所处理的代码的一小部分来说是非常重要的。 重要的是,向下进入一个抽象层次是一个很好的策略,绝不意味着更高层次的抽象“不够好”。

    顺便说一句,这就是为什么我把“last”放在吓人的引号中的原因——因为即使是最具体的组件仍然需要更多的优化,人们(对于某些CPU)也可以使用微代码、fpgas或完全定制的IC。当然,这是强调 平均软件解决方案 不是 (一次使用正确的动词;-)足够好(满足剩下99.999%的需求):这意味着真正的工程师理解性能权衡…!-)

    如果这样 是保持 设计方式那么为什么我们没有看到 有关于这个的好书吗?还是我们 有吗?我得把这个计划好如果 你有什么好的读物吗 这里一定要提到。

    你在想什么主题,这些主题本身就值得一整本书?我不认为有一本关于(比如)如何和何时选择Python的部分在C中重新编码,C的部分在您选择的平台的通用汇编中重新编码,通用汇编的部分在CPU模型特定的汇编中重新编码,等等到微码,FPGA,定制IC的书有很大的潜在市场——这就是我不投入的动机(比如说)写这样一本书是我生命中的一年。我认为nutshell在概述非常基础的内容方面做得很好——你如何使用profile来挑选那些占用CPU的部分(如果有的话),在python级别对它们进行优化,并在需要的时候用较低级别的语言重新编码(没有提到cython——我上次重写nutshell的时候还没有)。当然,那部分是书的10%,或者更少。

    我打算扩大我的范围 学习。目标是学习 语言现在变成了 开源平台上的综合。 我有一个戴尔optiplex桌面 我正在考虑建立一个开放源码 使用unix、vim、python的环境。 有很多开源专家 正在开发一些伟大的开源软件 东西。我见过亚历克斯·马泰利爵士 在StackOverflow上。我希望我能 从他那里得到一些关于我该怎么做的东西 设计一个开源开发 环境?但是,还有很多其他的 英雄和我也喜欢他们的经历 对此。

    很难打败Ubuntu(虽然我个人使用的主要是Mac,这是因为Mac OS X仍然提供优越的笔记本电脑体验,而我的个人电脑现在大部分都是笔记本电脑——我的工作站,在工作中,运行Ubuntu)——尽管我很肯定其他的现代Linux发行版也会与之并肩作战。我个人的怪癖:我认为对我的(开源)工作至关重要的代码,我总是从零开始,从源代码(python,许多python扩展,gmp,svn,hg,cython)重新构建。我承认,最近我为操作系统本身、GCC套件、x11&friends、gvim做了一个例外——必须划一条线。 一些 哪里有多余的周期 一些 完成了有用的工作;-)。

    他们现在学习的概念 成为一名优秀的开源开发人员 (unix、python和c)。为了这个我需要 如何设置开发 环境?什么是伟大的 开源开发的发展 环境?请留下答案 与python的上下文。

    我觉得没什么大不了的。

    有些人对IDES发誓(例如,Eric使用pyqt——或者Eclipse加上pydev);我坚持使用gvim(虽然我偶尔使用i python,但普通的python仍然是我最常用的)。同样,对于SVN和HG等VCS,或者PostgreSQL等DBS,周围也有大量的GUI,但是我发现命令行工具更适合我的个人偏好。

    大多数情况下,我建议你选择一个你熟悉的领域(比如,在你的情况下,网络应用),研究并使用它来形成一个支持的观点,一旦你发现它缺少的东西(或者在它的追踪器上打开bug,等等),潜入并开始贡献。如果你在这方面做得很好,你最终会被接受为项目提交者。

    关键是挑选你真正的,个人的东西 照顾 关于——不管你是在Ubuntu,Gentoo,或者是在gvim,emacs,eric,等等,这都是一个很小的考虑。

        2
  •  1
  •   Beep beep    15 年前

    开始编码!说真的,创建一些示例应用程序。如果你遇到了痛点,那就是你要学习的地方。当你完成了一个,然后阅读最佳实践书籍,学习如何做得更好。否则你就不学习了,你只不过是在遵循一个食谱而已。

        3
  •  0
  •   richo    15 年前

    阅读大量代码。开发自己的编码风格,但要处理很多项目,以便:

    a)你的风格可以继承他们最好的部分

    b)你不会养成习惯,总是按照你第一次学到的方式做事(因为python在不断地变化,所以“best”成语有一个转换的习惯。

    问很多问题,祝你好运!!

        4
  •  0
  •   steveha    15 年前

    编写C代码而不是Python有两个主要原因:速度和粘合。

    Python比C慢得多。大多数情况下,这一点都不重要,但有时确实如此。如果您要用纯Python编写一个傅立叶变换函数,您将不会对速度感到满意;所以scipy的家伙提供了一个傅立叶变换的C实现,您可以从Python调用它。

    但是,除非您知道您正在处理一些非常复杂的事情,例如编码压缩视频或傅立叶变换,否则您应该从用Python编写开始。很多时候它会跑得足够快。如果是这样,你就完了!

    如果你编写了你的python原型,它看起来工作正常,但是速度很慢,你可以把它作为免费软件发布。慢的解决方案总比没有解决方案好,人们可能会为此感谢你。但是如果你有动力,你可以将你的python重新编码成c来加速它。( 措施 首先是您的python,这样您就知道哪些部分需要加速了。)另外,作为一个额外的好处,您已经正确地实现了算法一次(在python中),所以您对如何在c中处理这个问题有了一些好的了解。

    为python编写C模块的另一个主要原因是提供一个“粘合”层,使python能够使用一些外部资源。例如,在Windows版本的python中,您可以使用C模块来允许您使用COM对象。整个COM API是为C编写的,因此C模块是使COM适应Python的最佳方法。

    总之,我的建议就是写一些代码来解决你所遇到的问题,看看你是否认为这个结果有足够的价值与世界分享。

    P.S.这是启动Python程序员的一个很好的资源:

    http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html