热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

改变程序员开发方式的15个技术

概述:相比起过去简单而安逸的编程生活,程序员不得不面对复杂的语言、代码、编辑器和人际关系,那么是什么让程序员的生活发生了如此巨大的改变呢?让我们来看一看这改变程序员开发方式的15个




概述:相比起过去简单而安逸的编程生活,程序员不得不面对复杂的语言、代码、编辑器和人际关系,那么是什么让程序员的生活发生了如此巨大的改变呢?让我们来看一看这改变程序员开发方式的15个技术吧!



很久以前,那些传说中的“古董级”程序员和他们的汇编语言过着简单而安逸的生活。当经费宽松的时候,程序员们会花钱雇佣人来帮他们拨动连接在机器上用于存储代码的纸带(参见穿孔纸带);当经费紧张的时候,程序员们则会自己亲自动手。那段时间的编程过程很简单:软件加载内存数据,做一些算法,然后发送出来。这些就是全部的工作了。

时至今日,程序员们需要跟世界各地使用不同编程语言的人打交道并且还得忍受不同版本的编译器。而陪伴程序员生活的代码也变得不再单纯了,有的代码才诞生不久,有的则在旧函数库里躺了几十年了,而有的甚至连源代码都不知道。团队协作机制和多样复杂的开发特性是如今程序员开发的大环境。

那么,是什么改变了程序员曾经简单而安逸的生活呢?让我们来看看这15个改变程序员开发方式的技术吧。

1. ?持续性集成



连接加载代码库的时候,在以前你能够用这段时间休息、喝咖啡甚至去吃个午饭。而现在呢,你可没有这么悠闲的时间了。代码库现在与持续构建的系统紧密相连,编译你的代码、检查当前构架、启动数以百计测试并随时在你萎靡不振的时候提醒你每一个潜在的错误。在你准备离开办公桌去休息的时候,它都在随时提醒你:快回到工作上来,这儿有些东西需要处理——你已经彻底成为了它的奴隶了。

2. ?框架



重用他人的工作成果就好比是站在巨人肩膀上,这并不是一个新的概念,但在今日这种方式已经成为了应用开发的绝对主流。人们极少选择重头开发,而是将选择自认为最好最适合的框架,研究其应用接口并编写连接到这些接口的代码来当作是最有意义的工作。网站页面离不开HTML和CSS;而代码部分则会以Ext JS、ExpressJS等为基础。

当然,你可以选择抛弃一切,重头开发,但是那意味着你是在自寻死路,因为你一个人的工作始终无法与一大群人相比。你需要明白,成为一个框架改良者才是你要做的事,如果你想编写代码的话,你要做的就是停止重头开发找到一个现成的好框架去改良它。

3. ?库



库是框架的近亲,是常用代码的集合,程序员的开发离不开它。有谁可以在不使用jQuery库的情况下编写浏览器的代码?有谁能记住内置函数GetElementByID写的是什么?也许极少有人能够做到吧,jQuery这样的库已经广泛的管理着各个层面的堆栈了。

人们经常谈论他们最喜欢的语言,却很少谈论这些语言是如何工作的。如果你打算雇佣程序员,你应当了解他对库方面的了解情况。比如,Javascript程序员了解jQuery和 Dojo tribe这一类库么?会使用C++的程序员知道Allegro、Unity、Corona和其它的库么?对库的了解和对程序语言来龙去脉的了解同样重要!

4. ?API



在以前,程序员们会很担心数据结构,他们将信息包装成位元组块,并挨个逐一统计位元组个数,以确保指针中的值能安排正确的间隔。如今,谢天谢地,编译器帮我们帮处理了这一麻烦的事。

目前,我们使用更加严谨的接口来处理这个工作,它有一个动听的好名字:API。它们被安装在完全不同的机器上,由完全不同的公司管理着,处理着我们的每一次请求。当你需要将一个街道地址和一个邮政编码转化成经纬度时,只需要一点钱,购买一个API就可以帮你完成关于这个问题的所有答案。

在大多数情况下,数据不需要被紧密包装,那些清点位元组的老游戏已经被JSON、XML等可分析的数据结构所代替了,当你需要在某个位置插入正确的标点的时候,已经有一个程序库在等着帮你处理了。

5. ?PaaS



现在也许再也用自己来构建网站了。我们可以在别人的网站上创建一个账户并进行定制。需要的只是网页表单上的一些字段,你的新网站就可以拥有所有你想要的功能了,比如上传一个关于猫的视频到YouTube上或者在eBay上为一个糖果盒出价。

当然,这有点夸张。如今许多PaaS选项需要程序员能够熟知每个网页表单需要放入什么。例如,Microsoft Azure平台需要你放入一些能够描述网站如何响应的Javascript函数,然后Azure就会把它们包装成正确的库并把它们运行在Node.js上。

6. ?浏览器



以前有段时间,程序员编写的桌面软件、服务器软件以及设备软件都是不同的。它们都有各自与用户沟通的方式。现在这些东西都通过浏览器了,当我在家里建立一个本地文件服务器用于保存音乐,我会将它放到网站上并定位一个URL地址。苹果的桌面小工具多年来一直使用Javascript和HTML。而许多跨平台的移动应用程序也都是从HTML和附带了Apache Cordova的Javascript开始的。

当然,也有一些例外。最好的游戏仍然使用自定义应用,不需要浏览器。但是这一切也在慢慢的改变,越来越多的Javascript开发人员找到了如何编写屏幕画布对象(可参见用CSS3绘制的汤普森一家)。而愤怒的小鸟等游戏已经运行在了浏览器窗口中。

7. ?应用程序容器



构建服务器在过去是一件艰苦的工作。程序员想要在其它地方运行他们的代码,需要向团队的服务器管理员发送关于哪些软件需要安装的备忘录。有些时候服务器调用了正确的库,但是有些时候却没有,这就需要重新再弄。

现在,象Docker这样的应用程序容器可以让我们只需一个按钮就可以将所有库正确的打包到可移植的容器中。如果它能够运行在我们的测试机上,那么它就几乎肯定可以运行在服务器上。由于所有的东西都是相互捆绑在一起的,所以大多数工作平台和服务器的兼容性问题将荡然无存。

8. ?IaaS



前面提到的服务器管理员到哪里去了?在过去这些人可都是悠闲的很啊。现在的服务器管理员你已经看不到了,他们已经被抽象出来放进了云层里,作为全球范围内的数据中心从事着过去服务器管理员的工作,管理着从云端这头到那头的不同公司。很少有程序员需要基础设施团队为他们的新项目构建一个新的服务器。大多数的人只需要登录一个网站,按一个按钮,使服务器运行就可以了。这一切都如此容易,这些IaaS管理网站让你无需再专门为服务器管理员开一份薪水,也将服务器管理员从整日围着服务器转的牢狱中拯救了出来。

9. ?Node.js和Javascript



在很多程序员都还没有诞生的时候,Web服务器只支持静态HTML。然后有人想到了如何创建与数据库交互的动态服务器。那个时候,每一个团队都需要一个人编写SQL数据库,一个人用PHP或者Java编写服务器代码,一个人去设计HTML模板。当客户端的AJAX和Javascript技术风靡的时候,网站还需要有人会使用这些语言。

现在,这些都是由Javascript技术来完成了。在浏览器方面使用的是Javascript,而在服务器层和数据库层则分别是由Node.js和MongoDB/CouchDB来完成。甚至对于HTML页面,都可以使用Javascript代码在Ext JS或者jQueryMobile框架上进行客户端生成来完成。

10. ?二级市场



如果你正在做一款游戏,你可以请设计师来为你设计令人惊叹的模型,甚至可以请几个程序员来帮你添加视觉效果使游戏看起来更酷。当然你也可以选择去二级市场购买开发需要的东西,这跟去实体零售店去购买需要的物品一样。当我在写这篇文章的时候,二级市场的一个下水道场景拼图工具包正在打折,这是一个用于构建不同尺寸的下水道游戏场景的模块化工具包。但即使是恢复原价,这个工具包的价格也不会超过45美元。如果换作是设计师或者程序员,你开这个价格他肯定不会做了。

这些出售插件、扩展包、库和其它附件的二级市场现在变得越来越火爆了。与前面所说的库和框架一样,通过合适的价格购买需要的部件,无需过多的编程就可以融入开发项目中。在国内,这一类二级市场通常被称为控件网。

11. ?虚拟机



为硅片写代码的日子已经离我们远去了。现在我们的大部分代码都运行在虚拟机上,它能够把你的指令转化成芯片能够理解的语言。Java虚拟机、C#/.Net虚拟机以及现在的Javascript引擎成为了编写代码的最主要对象。

大受欢迎的虚拟机不断地将许多东西吸收进堆栈里。在过去,如果你想创建一个新的语言,你需要构建从预处理器到寄存器分配器的整个堆栈。现在新的语言站在了虚拟机这个巨人的肩膀上。Clojure、Scala、Jython、JRuby等语言都使用了Sun公司(现在已经Oracle公司的一部分了)的伟大虚拟机技术。

浏览器的世界与上面所述很相似。你可以选择创建自己的浏览器和语言,或者在 Javascript上作为模拟进行交叉编译。这就是人们构建CoffeeScript这样的清理工具想要完成的事。如果你觉得这样很容易混淆,谷歌产品GWT(Google Web Toolkit)还可以帮你把Java转换成Javascript。

12. ?社交媒体网站



在早期的互联网,当你建立网站的时候,你会交叉手指祈祷大家能够找到它,当大家找到它之后,如果需要再次访问这个页面则必须记住它的URL地址。

现在,越来越多的网页被放进了Facebook或者Salesforce这样的大容器里,如果你建立了自己的网站,可能只有很少的人来访问它,因为绝大多数用户都去点击访问Facebook或者Salesforce这样的社交媒体网站了。

而具体的解决方案就是建立一个Facebook或Salesforce的应用,它们会让你加入进来,然后将你的网页集成进来成为平台上的一个点。可是到头来,你的应用仍然会受到很大的限制和操控。可是,你还有什么办法呢?要么为选择大型门户网站服务,要么选择被互联网洪流所吞没。

13. ?开发工具



曾几何时,我们在服务器上安装的软件非常单一,现在我们租用大量服务器来满足成百上千台机器的需求,这些服务器为满足不同需求,需要更新多种最新软件,它们能够自动完成这些用手动不能胜任的工作。

进入“devops”模式,那些基础工具如Chef和Puppet可以帮助你完成服务器的维护。将最新的软件放置在云端,这些工具将会通过让每台机器运行相同的代码来处理这些工作,它们自动化的完成了我们过去在每台机器手动处理的事情。

某些服务项目如Google App Engine已经着手从内部处理这些工作了。你所要做的全部工作就是上传你的应用程序,然后它就会自动为你服务了。除了能够看到CPU的使用状况清单,你甚至在不知道后台都发生了什么的情况下就完成了软件的更新和维护。

14. ?GitHub、SourceForge等代码共享的社交平台



代码共享网站为开源世界作出了最大贡献,在SourceForge等出现以前,软件就是由你自己来编写并且只能与自己分享成果的东西,如果某人想要复制你的代码,在征求到你的同意后,他们需要从你这里接收一个tar压缩文件包。

现在代码共享已经成为社交网络的一部分。SourceForge和GitHub等网站会发布所有代码供大家观看和下载。它们将程序的维护、共享和代码注释合并到了一个易于访问的地方。你可以在同一个界面阅读代码并提出修改建议。这就是为什么许多项目在一周时间时间内有数万甚至数十万的访问次数,而这在以前是绝不可能出现的。

这种代码共享的主流模式被大多数专利项目推崇,象GitHub和BitBucket这样的网站都支持它们为出售非公开存储库而将项目代码共享给权限受限的用户群的做法。

15. ?性能监控



在最早的时候,代码跟踪是非常简单的事情。当编码开始时开始打印,编码结束时打印终止。如果你有了一些新的想法,那么你可以在原来的程序后面增加一些关于调整的运算。

但现在,这种方式已经过时了,许多问题都不仅发生在机器本身,就算添加一个代码分析器也并不能完全解决问题,因为故障原因还包括网络线路以及数据库缓慢等方面。现代工具追踪网络要求软件网络与独立模块的性能一致,这是辨别是否正常工作的唯一方法。

?

本文翻译自15 technologies changing how developers work?

关注开发,关注慧都控件网:www.evget.com


推荐阅读
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 全面解析JavaScript代码注释技巧与标准规范
    在Web前端开发中,JavaScript代码的可读性和维护性至关重要。本文将详细介绍如何有效地使用注释来提高代码的可读性,并探讨JavaScript代码注释的最佳实践和标准规范。通过合理的注释,开发者可以更好地理解和维护复杂的代码逻辑,提升团队协作效率。 ... [详细]
  • 本文介绍了如何利用Struts1框架构建一个简易的四则运算计算器。通过采用DispatchAction来处理不同类型的计算请求,并使用动态Form来优化开发流程,确保代码的简洁性和可维护性。同时,系统提供了用户友好的错误提示,以增强用户体验。 ... [详细]
  • Python 伦理黑客技术:深入探讨后门攻击(第三部分)
    在《Python 伦理黑客技术:深入探讨后门攻击(第三部分)》中,作者详细分析了后门攻击中的Socket问题。由于TCP协议基于流,难以确定消息批次的结束点,这给后门攻击的实现带来了挑战。为了解决这一问题,文章提出了一系列有效的技术方案,包括使用特定的分隔符和长度前缀,以确保数据包的准确传输和解析。这些方法不仅提高了攻击的隐蔽性和可靠性,还为安全研究人员提供了宝贵的参考。 ... [详细]
  • 基于试题数据的智能化管理平台采用Java语言进行面向对象编程,旨在构建一个高效的试题信息管理系统。该系统在JDK 6.0和MyEclipse 10.6环境下开发,通过优化试题数据管理和处理流程,提升系统的稳定性和用户体验。平台支持多用户操作,具备强大的数据处理能力和灵活的扩展性,适用于各类教育机构和考试组织。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
  • 本文深入探讨了Java多线程环境下的同步机制及其应用,重点介绍了`synchronized`关键字的使用方法和原理。`synchronized`关键字主要用于确保多个线程在访问共享资源时的互斥性和原子性。通过具体示例,如在一个类中使用`synchronized`修饰方法,展示了如何实现线程安全的代码块。此外,文章还讨论了`ReentrantLock`等其他同步工具的优缺点,并提供了实际应用场景中的最佳实践。 ... [详细]
  • 在分析和解决 Keepalived VIP 漂移故障的过程中,我们发现主备节点配置如下:主节点 IP 为 172.16.30.31,备份节点 IP 为 172.16.30.32,虚拟 IP 为 172.16.30.10。故障表现为监控系统显示 Keepalived 主节点状态异常,导致 VIP 漂移到备份节点。通过详细检查配置文件和日志,我们发现主节点上的 Keepalived 进程未能正常运行,最终通过优化配置和重启服务解决了该问题。此外,我们还增加了健康检查机制,以提高系统的稳定性和可靠性。 ... [详细]
  • 在 Android 开发中,`android:exported` 属性用于控制组件(如 Activity、Service、BroadcastReceiver 和 ContentProvider)是否可以被其他应用组件访问或与其交互。若将此属性设为 `true`,则允许外部应用调用或与之交互;反之,若设为 `false`,则仅限于同一应用内的组件进行访问。这一属性对于确保应用的安全性和隐私保护至关重要。 ... [详细]
  • 在Conda环境中高效配置并安装PyTorch和TensorFlow GPU版的方法如下:首先,创建一个新的Conda环境以避免与基础环境发生冲突,例如使用 `conda create -n pytorch_gpu python=3.7` 命令。接着,激活该环境,确保所有依赖项都正确安装。此外,建议在安装过程中指定CUDA版本,以确保与GPU兼容性。通过这些步骤,可以确保PyTorch和TensorFlow GPU版的顺利安装和运行。 ... [详细]
  • 题目要求解决一个有趣的编程挑战,即计算由四个自然数 \( p, q, r, s \) 组成的分数序列的和。具体来说,需要编写一个 C# 程序来处理这些自然数,并通过特定的数学运算得出最终结果。该任务不仅考验编程技能,还涉及对数学公式的理解和应用。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 本指南详细介绍了如何在CentOS 6.6 64位系统上以root用户身份部署Tomcat 8服务器。系统环境为CentOS 6.6 64位,采用源码安装方式。所需软件为apache-tomcat-8.0.23.tar.gz,建议将软件下载至/root/opt目录。具体下载地址请参见官方资源。本指南涵盖了从环境准备到服务启动的完整步骤,适用于需要在该系统环境下搭建高性能Web应用服务器的技术人员。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • 七款高效编辑器与笔记工具推荐:KindEditor自动换行功能解析
    本文推荐了七款高效的编辑器与笔记工具,并详细解析了KindEditor的自动换行功能。其中,轻笔记QingBiJi是一款完全免费的记事本软件,用户可以通过其简洁的界面和强大的功能轻松记录和管理日常事务。此外,该软件还支持多平台同步,确保用户在不同设备间无缝切换。 ... [详细]
author-avatar
kkq--_771
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有