Products
GG网络技术分享 2025-03-18 16:13 0
人和人之间编程速度的差异还是很大的,有的程序猿写代码非常快,有的却常常是龟速。Jeffrey Ventrella最近在一篇文章里探讨了这种编程速度的差异,他是绝对的龟速派代表,来看看他对编程速度的看法:
我爸常跟我说的一句话是,慢一点码,才能快点把程序写完。
我在旧金山很多家互联网公司工作过,现在已经 52 岁了,对于程序猿这个职业来说,我的年龄算偏大的。我写代码的速度近乎龟速,事实上,我更像是一个会写代码的设计师。
以前有一次,我和一些比较年轻的程序猿一起工作,他们信奉的编程宗旨是“速度快、更迭少”。我们在同一个 codebase 里合作,就像在共同煮一大锅汤一样。如果我们每个人都持续不间断的贡献代码的话,未来这个工程应该就会很美很壮观的呈现出来。
但是并没有。
问题在于,这些年轻的程序猿们在心里其实有这么一种思想,他们觉得:1、每个人都是可替代的;2、没人应该对某一部分的具体代码负责;3、所有人应该都可以任意修改整个工程的代码。
他们觉得,现在已经有了github这种神器用来管理异步时间内的代码贡献,只要每个人都持之以恒的贡献代码,工程和产品就会顺理成章的出炉了。
事实不是这样的。编程从来就不应该是拿工具来减少软件开发的时间的。
编程应该是一项有节奏感有韵律的运动。我倾向于把工程依照不同的规模和时间度量分成不同的涂层,每一个涂层再从探索、实验、error、临时变量这些细小的东西开始做起。有点像建设脚手架的形式。每一个涂层最终完成的时候是一段可以部署和扩展的 implementation-ready 代码。这种开发过程有点像是从策略到设计方案最后到完成一栋真正的建筑。
有时候当这栋建筑完成之后,我还会推倒重来一遍,因为我觉得我有更好的建筑方法。这种新的方法有时候是对的,有时候是错的,事实上除非真正去再做一遍,不然你永远无法知道究竟哪一种方法更好。
回到最初那锅汤的问题:在软件开发生态圈里,关于对整个设计流程产生推动与支持的混合思考是很重要的,没有这一部分的工作,再快的程序猿又能做出多好的设计?很多神经系统科学家相信神经元信息的流动在大脑的传导过程中会有一个短暂的堵塞和混响,这对思维和感知会有很重要的作用。编程的设计也应该是这样,需要时间。
慢速编程运动在维基百科里的解释是这样的:慢速编程运动是慢速运动的一部分,这是一种强调谨慎设计、高质量代码、软件测试和思考的软件开发哲学,反对混杂组装、布满 bug 的代码,以及过于快速的发布周期。
世界上的软件开发团队都在寻找更具预测性的工程项目,希望能促成更多的程序员拥有可持续性的职业生涯。他们提议了一些可以切身操作的实践方法,比如结对编程、代码审查和代码重构,以开发更可靠更健壮的软件应用。
在旧金山海湾地区,风险投资支持的软件开发正呈现出一种高烧般的热度。利益正驱动着软件开发以一种完全不自然的不对拍的节奏感在运动,它打乱了设计进化(design evolution)原本应有的周期节律和生物钟。关于这一点,Rushkoff在Present Shock里说得很明白了。
另一个问题在于,人们对科技越来越诡异的迷恋,以及开发人员对工具异常的狂热。大家总在说,为什么有的软件和应用做得这么烂?没错,确实很烂。烂的原因在于,太多一味求快的程序猿在忙着建设工具,然后用这个工具去支持和适配另一个他们建好的工具,然后再用这个工具去支持和适配另另一个他们建好的工具,然后再用这个工具帮他们写出更快的代码。
这就是我为什么觉得软件开发需要更多的“人”,而不是“工具”的原因。并且,这些人不仅仅只是帮忙做做外面的 UI 艺术之类的而已,应该要有更多的人深入软件开发的内部——确保软件更多的与人文产生共鸣和回响。
编程不是打字。
所有的程序猿都明白这一点,但是大部分人都容易忘记这一点。
在电脑前噼里啪啦、弹指挥间的感觉确实很爽,这种键盘上啪啪啪的快感却很容易让人忘记编程是一项脑力活动,而不是体力劳动。编程的真正奥义在于,把人类的思维、设计、语言、逻辑和精神创造以一种计算机可以识别和储存的方式记录下来。
我妻子有时会跑到院子里问我,你在编程吗?我说,对,我在编程。事实上我可能正拿着钳子修剪花盆里的花草,或者做做施化肥之类的事情。
植物、土壤、钳子,这些都是编程的好工具,正如键盘、鼠标和双屏幕一样。
目前,我们正在经历一个经济产业的转型期,从新兴到可持续发展之间的一次过渡。新的软件产品和商业模式是需要发展,但为了互联网行业发展的可持续性,这种速度应该降下来一些了。撸代码不仅仅只是在撸当下用户的需求,撸的更是未来某个行业领域的架构基础。代码应该在程序员的关爱下慢慢的、茁壮的成长。Like good wine。Like a baby。
[本文参考以下来源:ventrellathing.wordpress.com]
和其他 PHP 系统一样,WordPress 会定义一些全局变量来方便数据的访问,基本上 WordPress 生成的所有数据都可以在全局变量中找到,那么WordPress程序如何获取和使用全局变量?
WordPress 中默认的全局变量
在循环中可以使用的全局变量
在 WordPress 循环中,全局变量已经被提前获取到了,我们可以直接使用。这些全局变量包含了循环中当前文章的信息。
$post (WP_Post) 当前文章对象$authordata (WP_User) 当前文章作者对象
$currentday (string) 当前文章的发布日期
$currentmonth (string) 当前文章的发布月份
$page (int) 当前文章被访问的分页,通过查询参数 page 定义
$pages (array) 当前文章的分页信息,每个分页元素包含了 <!--nextpage--> 标签分隔的部分
$multipage (boolean) 当前文章是否为多页文章,根据上面的 $pages 参数检测
$more (boolean) WordPress 是否执行 <!--more--> 标签的标记,如果为 true,WordPress 将不会执行 more 标签
$numpages (int) 返回当前文章的总页数,和上面的 $pages x相关
检测浏览器的布尔值
下面的全局变量存储着关于用户浏览器的检测信息,值为布尔值,可以用来用户用来访问网站的浏览器。
$is_iphone (boolean) iPhone Safari$is_chrome (boolean) Google Chrome
$is_safari (boolean) Safari
$is_NS4 (boolean) Netscape 4
$is_opera (boolean) Opera
$is_macIE (boolean) Mac Internet Explorer
$is_winIE (boolean) Windows Internet Explorer
$is_gecko (boolean) FireFox
$is_lynx (boolean)
$is_IE (boolean) Internet Explorer
$is_edge (boolean) Microsoft Edge
检测网站服务器的布尔值
下面的全局变量存储着关于网站服务器的一些信息,可以用来判断运行网站的服务器类型。
$is_apache (boolean) Apache HTTP Server$is_IIS (boolean) Microsoft Internet Information Services (IIS)
$is_iis7 (boolean) Microsoft Internet Information Services (IIS) v7.x
$is_nginx (boolean) Nginx web server
版本变量
下面的变量存储着 WordPress 中的一些版本信息。
$wp_version (string) 当前安装的 WordPress 版本$wp_db_version (int) 当前数据库的版本
$tinymce_version (string) TinyMCE 的版本
$manifest_version (string) 缓存 manifest 的版本
$required_php_version (string) 网站安装的 WordPress 版本需要的最小 PHP 版本
$required_mysql_version (string) 网站安装的 WordPress 需要的最小 MySQL 版本
其他全局变量
$super_admins (array) 拥有超级管理员权限的用户 ID, 此全局变量只对站点所有者注册$wp_query (object) Class_Reference/WP_Query 类实例
$wp_rewrite (object) Class_Reference/WP_Rewrite 类实例
$wp (object) Class_Reference/WP 类实例
$wpdb (object) Class_Reference/wpdb 类实例
$wp_locale (object) 本地化信息
$wp_admin_bar (WP_Admin_Bar) 管理工具条对象
$wp_roles (WP_Roles) WordPress 角色对象
$wp_meta_boxes (array) 已注册 metaboxes 的对象, 包含他们的 id, 参数, 回调函数、标题等信息
$wp_registered_sidebars (array) 已注册的小工具区域
$wp_registered_widgets (array) 已注册的小工具
$wp_registered_widget_controls (array) 已注册的小工具字段
$wp_registered_widget_updates (array) 已注册的小工具更新
后台全局变量
$pagenow (string) 在 wp-admin 中使用,同时参考 get_current_screen() 以了解 WordPress Admin Screen API$post_type (string) 在 wp-admin 中使用,当前页面的文章类型
$allowedposttags (array) 允许使用的文章标签
$allowedtags (array) 允许使用的标签
$menu (array) WordPress 的后台菜单数据
访问 WordPress 中的全局变量
我们可以通过下面的方式直接获取全局变量来使用,WordPress 的每个全局变量也都可以通过对应的函数来获取,WordPress 官方推荐的方式是用过函数的方式来获取这些全局变量。
global $wp_version;// 或者
$wp_version = get_bloginfo(\'version\');
echo $wp_version;
获取 WordPress 中的全局变量
除了 WordPress 内核注册的全局变量,一些主题和插件也有可能会注册一些全局变量,如果需要查看系统中已经注册的所有全局变量,可以通过下面的代码查看。
echo \"<pre>\";print_r($GLOBALS);
echo \"</pre>\";
Demand feedback