月度归档:2017年08月

TIOBE 2017 8月编程语言排行榜,Java、C、PHP等前十名分数全部下滑,Crystal成黑马

TIOBE编程语言社区发布了 2017 年 8 月排行榜,和上个月相比,前五名没有变化,Java、C、C++、C# 和 Python 仍然稳定保持在前 5 的位置。不过比例都有不同程度的下降。

尽管 Java 仍然稳居第一,但最值得注意的是 Java 本月跌破13%,今年接下去能否还是能一如既往保住第一的宝座,我们拭目以待。

Go 语言和 7 月份相比从前 10 回落 第 16 名,但总体趋势还算平稳。自从谷歌宣布了安卓开发全面支持 Kotlin 之后,Kotlin 可谓风头正劲,自上个月首次进入前 50 名后,本月更是上升了 7 位,目前排名 41。

2017 年 8 月编程语言排行榜 Top 20 榜单:

在 21-50 名的排行中,本月上幅最为明显的是 Crystal(#32),从第 60 位跃升至第 32 位。Crystal 是一个开源的、类似于 Ruby 语法的编程语言,有开发者称其简直酷毙了。

本月上升趋势较为明显的还有:Clojure(#42),VBScript(#38)和 VHDL(#45)。

第20-50榜单:

Top 10 编程语言 TIOBE 指数走势(2002-2016)

怎么成为大神程序员?大神程序员给的建议

原文标题:我要成为大神程序员,别拦我

作者给每个想成为大神的程序员下面的一些建议:

  • 在数据科学上投入一些精力
    1. 尽量亲自动手去完成事情。你将会有一种直觉,知道如何去处理该事物。
    2. 积累案例,从Excel中标注着自己已获得的数据开始。
    3. 在找到通用办法之前,先找到一种能解决当前问题的办法。
    4. 让算法本身输出调试信息。你应该能够转储每一步的中间结果,并用文本编辑器或是 Web 浏览器手动检查它们。
    5. 不用那么着急写单元测试,因为很多时候连正确的行为自己还无法定义
  • 维护一些大型的,完全不同的项目
    1. 检查文件的大小,找出最核心的业务逻辑
    2. 从主循环调度开始单步调试程序。可以学到很多关于控制流的东西。
    3. 寻找数据结构,特别是做为参数传递到许多函数中的那些。大多数程序具有一个小的关键数据结构集合,找到它们,理解代码的其余部分会变得容易的多。
    4. 写单元测试。这是确认你所理解的代码与真实代码工作方式无误的最好方法。
    5. 移除一些代码,看看什么出问题了。(但不要 check in!)
  • 性能优先的思考
    1. 不要过早优化,除非用户开始抱怨它太慢了
    2. 设立性能指标,不漫无目的的进行评估
    3. 许多性能瓶颈都存在于多个系统交互的部分
    4. 多使用工作
    5. 少做无用功,尽量缓存计算结果,对不精确需求的东西可以进行估算
    6. 不要忽视现实世界的东西,很多算法评估并不理想,但是表现非凡
    7. 有时通过修改数据结构减少内存使用,会给你带来巨大的性能收益
  • 编码的技巧
    1. 做用户要用的功能
    2. 慎重选择依赖的代码库
    3. 小团队可以将问题积累起来,集中火力一次性解决,大型团队尽量不要积累代码问题,学会协作。

      原文链接https://www.ttalk.im/bookmarks/42

什么是CGI ,CGI与FAST-CGI 的区别

 

CGI

事物总是不 断发展,网站也越来越复杂,所以出现动态技术。但是服务器并不能直接运行 php,asp这样的文件,自己不能做,外包给别人吧,但是要与第三做个约定,我给你什么,然后你给我什么,就是握把请求参数发送给你,然后我接收你的处 理结果给客户端。那这个约定就是 common gateway interface,简称cgi。这个协议可以用vb,c,php,python 来实现。cgi只是接口协议,根本不是什么语言。

cgi在2000年或更早的时候用得比较多, 以前web服务器一般只处理静态的请求,如果碰到一个动态请求怎么办呢?web服务器会根据这次请求的内容,然后会fork一个新进程来运行外部c程序(或perl脚本…), 这个进程会把处理完的数据返回给web服务器,最后web服务器把内容发送给用户,刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本,那么web服务器又再次fork一个新进程,周而复始的进行。

CGI程序通过标准输入(STDIN)和标准输出(STDOUT)来进行输入输出。此外CGI程序还通过环境变量来得到输入,操作系统提供了许 多环境变量,它们定义了程序的执行环境,应用程序可以存取它们。Web服务器和CGI接口又另外设置了一些环境变量,用来向CGI程序传递一些重要的参 数。CGI的GET方法还通过环境变量QUERY-STRING向CGI程序传递Form中的数据。 下面是一些常用的CGI环境变量:

变量名 描述
CONTENT_TYPE 这个环境变量的值指示所传递来的信息的MIME类型。目前,环境变量CONTENT_TYPE一般都是:application/x-www-form-urlencoded,他表示数据来自于HTML表单。
CONTENT_LENGTH 如果服务器与CGI程序信息的传递方式是POST,这个环境变量即使从标准输入STDIN中可以读到的有效数据的字节数。这个环境变量在读取所输入的数据时必须使用。
HTTP_COOKIE 客户机内的 COOKIE 内容。
HTTP_USER_AGENT 提供包含了版本数或其他专有数据的客户浏览器信息。
PATH_INFO 这个环境变量的值表示紧接在CGI程序名之后的其他路径信息。它常常作为CGI程序的参数出现。
QUERY_STRING 如果服务器与CGI程序信息的传递方式是GET,这个环境变量的值即使所传递的信息。这个信息经跟在CGI程序名的后面,两者中间用一个问号’?’分隔。
REMOTE_ADDR 这个环境变量的值是发送请求的客户机的IP地址,例如上面的192.168.1.67。这个值总是存在的。而且它是Web客户机需要提供给Web服务器的唯一标识,可以在CGI程序中用它来区分不同的Web客户机。
REMOTE_HOST 这个环境变量的值包含发送CGI请求的客户机的主机名。如果不支持你想查询,则无需定义此环境变量。
REQUEST_METHOD 提供脚本被调用的方法。对于使用 HTTP/1.0 协议的脚本,仅 GET 和 POST 有意义。
SCRIPT_FILENAME CGI脚本的完整路径
SCRIPT_NAME CGI脚本的的名称
SERVER_NAME 这是你的 WEB 服务器的主机名、别名或IP地址。
SERVER_SOFTWARE 这个环境变量的值包含了调用CGI程序的HTTP服务器的名称和版本号。例如,上面的值为Apache/2.2.14(Unix)

 

FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。

一般情况下,FastCGI的整个工作流程是这样的:

  1.Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)

        2.FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。

        3.当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。 Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。

        4.FastCGI 子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时, 请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。

        PHP-FPM与Spawn-FCGI

  Spawn-FCGI是一个通用的FastCGI管理服务器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的管理工作。 但是有缺点,于是PHP-fpm就是针对于PHP的,Fastcgi的一种实现,他负责管理一个进程池,来处理来自Web服务器的请求。目前,PHP-fpm是内置于PHP的。