引言
在数字化时代,软件行业经历了前所未有的快速增长。从移动应用到企业级解决方案,从开源工具到商业软件,软件的价值和影响力呈指数级上升。这种“软件暴涨”现象不仅体现在市场规模的扩大,更体现在软件开发成本、复杂度和人才需求的激增。本文将全面解析软件暴涨背后的深层原因,并探讨由此带来的现实挑战。
一、软件暴涨的深层原因
1. 技术驱动的创新加速
1.1 云计算的普及
云计算是软件暴涨的核心驱动力之一。通过云计算,企业可以以极低的成本快速部署和扩展软件服务。以AWS(Amazon Web Services)为例,企业无需自建数据中心,只需按需付费即可使用弹性计算资源。这种模式极大地降低了软件开发的门槛,使得初创公司也能快速推出产品。
# 示例:使用AWS SDK(boto3)在Python中启动EC2实例
import boto3
# 初始化EC2客户端
ec2 = boto3.client('ec2', region_name='us-east-1')
# 启动一个EC2实例
response = ec2.run_instances(
ImageId='ami-0c55b159cbfafe1f0', # Amazon Linux 2 AMI
MinCount=1,
MaxCount=1,
InstanceType='t2.micro'
)
print("实例ID:", response['Instances'][0]['InstanceId'])
1.2 人工智能与机器学习
AI和ML技术的成熟使得软件能够处理更复杂的任务,如自然语言处理、图像识别和预测分析。这些技术的应用不仅提升了软件的功能,也增加了开发的复杂度和成本。
# 示例:使用TensorFlow构建一个简单的图像分类模型
import tensorflow as tf
from tensorflow.keras import layers, models
# 构建卷积神经网络
model = models.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.Flatten(),
layers.Dense(64, activation='relu'),
layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 这里省略了数据加载和训练的代码
# model.fit(train_images, train_labels, epochs=10)
1.3 开源生态的繁荣
开源软件的兴起极大地加速了软件开发进程。开发者可以基于现有的开源项目快速构建应用,而无需从零开始。例如,React、Vue.js等前端框架,Django、Flask等后端框架,以及Kubernetes、Docker等容器化工具,都极大地提高了开发效率。
2. 市场需求的爆发式增长
2.1 数字化转型
传统行业(如金融、医疗、制造)的数字化转型产生了对软件的巨大需求。企业需要定制化的软件来优化流程、提升效率和改善客户体验。例如,银行需要移动银行应用,医院需要电子病历系统。
2.2 疫情加速在线化
COVID-19疫情迫使全球加速向线上转移。远程办公、在线教育、电子商务等领域的软件需求激增。Zoom、Slack、Microsoft Teams等协作工具的用户量在疫情期间爆炸式增长。
2.3 消费者期望提升
现代消费者对软件的期望越来越高。他们要求软件不仅功能强大,还要界面美观、响应迅速、安全可靠。为了满足这些期望,软件开发者必须投入更多资源进行设计、测试和优化。
3. 商业模式的演进
3.1 SaaS模式的流行
软件即服务(SaaS)模式成为主流。企业不再一次性购买软件许可证,而是按月或按年订阅。这种模式虽然降低了客户的初始成本,但要求软件提供商持续维护和更新,增加了长期开发成本。
3.2 平台化战略
大型科技公司(如Google、Microsoft、Amazon)通过构建平台(如Google Cloud、Microsoft Azure、AWS)来锁定用户。这些平台提供了丰富的API和服务,使得开发者依赖于这些平台,进一步推动了软件生态的扩张。
二、软件暴涨带来的现实挑战
1. 技术债务的累积
1.1 定义与影响
技术债务是指为了快速交付功能而采用的短期解决方案,长期来看会增加维护成本和风险。随着软件规模的扩大,技术债务会迅速累积,导致代码难以维护、bug频发。
1.2 代码示例:技术债务的体现
以下是一个简单的技术债务示例:为了快速上线,开发者使用了硬编码的配置,而不是使用配置文件或环境变量。
# 技术债务示例:硬编码的数据库连接字符串
def get_db_connection():
# 硬编码的连接字符串,难以维护和更新
return psycopg2.connect(
host="db.example.com",
database="mydb",
user="myuser",
password="mypassword"
)
1.3 解决方案
- 代码审查:定期进行代码审查,识别和重构技术债务。
- 自动化测试:编写单元测试和集成测试,确保重构不会破坏现有功能。
- 技术债务管理:将技术债务纳入项目管理,分配时间进行偿还。
2. 安全与隐私问题
2.1 安全威胁增加
软件暴涨意味着更多的攻击面。黑客利用软件漏洞进行数据窃取、勒索软件攻击等。例如,2021年发生的SolarWinds供应链攻击影响了多个政府机构和企业。
2.2 隐私法规的合规挑战
GDPR、CCPA等隐私法规要求软件必须严格保护用户数据。合规不仅需要技术上的调整(如数据加密、匿名化),还需要法律和流程上的配合,增加了软件开发的复杂度。
2.3 安全编码示例
以下是一个安全编码的示例:使用参数化查询防止SQL注入。
# 不安全的代码:SQL注入风险
def get_user_insecure(username):
query = f"SELECT * FROM users WHERE username = '{username}'"
cursor.execute(query)
return cursor.fetchone()
# 安全的代码:使用参数化查询
def get_user_secure(username):
query = "SELECT * FROM users WHERE username = %s"
cursor.execute(query, (username,))
...
3. 人才短缺与技能差距
3.1 人才需求激增
软件暴涨导致对开发者的需求远超供给。根据LinkedIn的数据,全球软件开发岗位缺口在2023年超过100万。
3.2 技能差距
新兴技术(如AI、区块链、量子计算)要求开发者不断学习。然而,教育体系和企业培训往往跟不上技术发展的速度,导致技能差距。
3.3 解决方案
- 内部培训:企业投资于员工培训,如在线课程、工作坊。
- 招聘策略调整:更看重学习能力和潜力,而非特定技术栈。 暴涨背后的深层原因全面解析与现实挑战探讨
软件暴涨背后的深层原因全面解析与现实挑战探讨
引言
在数字化浪潮席卷全球的今天,软件行业正经历一场前所未有的“暴涨”。从个人开发者到科技巨头,从初创企业到传统行业,软件的需求、复杂度和价值都在呈指数级增长。这种现象不仅体现在代码行数的激增,更体现在软件开发成本的攀升、技术栈的快速迭代以及人才市场的激烈竞争。本文将深入剖析软件暴涨背后的深层原因,并探讨由此带来的现实挑战。
一、软件暴涨的深层原因
1. 技术驱动的创新加速
1.1 云计算的普及
云计算是软件暴涨的核心驱动力之一。通过云计算,企业可以以极低的成本快速部署和扩展软件服务。以AWS(Amazon Web Services)为例,企业无需自建数据中心,只需按需付费即可使用弹性计算资源。这种模式极大地降低了软件开发的门槛,使得初创公司也能快速推出产品。
# 示例:使用AWS SDK(boto3)在Python中启动EC2实例
import boto3
# 初始化EC2客户端
ec2 = boto3.client('ec2', region_name='us-east-1')
# 启动一个EC2实例
response = ec2.run_instances(
ImageId='ami-0c55b159cbfafe1f0', # Amazon Linux 2 AMI
MinCount=1,
MaxCount=1,
InstanceType='t2.micro'
)
print("实例ID:", response['Instances'][0]['InstanceId'])
1.2 人工智能与机器学习
AI和ML技术的成熟使得软件能够处理更复杂的任务,如自然语言处理、图像识别和预测分析。这些技术的应用不仅提升了软件的功能,也增加了开发的复杂度和成本。
# 示例:使用TensorFlow构建一个简单的图像分类模型
import tensorflow as tf
from tensorflow.keras import layers, models
# 构建卷积神经网络
model = models.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.Flatten(),
layers.Dense(64, activation='relu'),
layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 这里省略了数据加载和训练的代码
# model.fit(train_images, train_labels, epochs=10)
1.3 开源生态的繁荣
开源软件的兴起极大地加速了软件开发进程。开发者可以基于现有的开源项目快速构建应用,而无需从零开始。例如,React、Vue.js等前端框架,Django、Flask等后端框架,以及Kubernetes、Docker等容器化工具,都极大地提高了开发效率。
2. 市场需求的爆发式增长
2.1 数字化转型
传统行业(如金融、医疗、制造)的数字化转型产生了对软件的巨大需求。企业需要定制化的软件来优化流程、提升效率和改善客户体验。例如,银行需要移动银行应用,医院需要电子病历系统。
2.2 疫情加速在线化
COVID-19疫情迫使全球加速向线上转移。远程办公、在线教育、电子商务等领域的软件需求激增。Zoom、Slack、Microsoft Teams等协作工具的用户量在疫情期间爆炸式增长。
2.3 消费者期望提升
现代消费者对软件的期望越来越高。他们要求软件不仅功能强大,还要界面美观、响应迅速、安全可靠。为了满足这些期望,软件开发者必须投入更多资源进行设计、测试和优化。
3. 商业模式的演进
3.1 SaaS模式的流行
软件即服务(SaaS)模式成为主流。企业不再一次性购买软件许可证,而是按月或按年订阅。这种模式虽然降低了客户的初始成本,但要求软件提供商持续维护和更新,增加了长期开发成本。
3.2 平台化战略
大型科技公司(如Google、Microsoft、Amazon)通过构建平台(如Google Cloud、Microsoft Azure、AWS)来锁定用户。这些平台提供了丰富的API和服务,使得开发者依赖于这些平台,进一步推动了软件生态的扩张。
二、软件暴涨带来的现实挑战
1. 技术债务的累积
1.1 定义与影响
技术债务是指为了快速交付功能而采用的短期解决方案,长期来看会增加维护成本和风险。随着软件规模的扩大,技术债务会迅速累积,导致代码难以维护、bug频发。
1.2 代码示例:技术债务的体现
以下是一个简单的技术债务示例:为了快速上线,开发者使用了硬编码的配置,而不是使用配置文件或环境变量。
# 技术债务示例:硬编码的数据库连接字符串
def get_db_connection():
# 硬编码的连接字符串,难以维护和更新
return psycopg2.connect(
host="db.example.com",
database="mydb",
user="myuser",
password="mypassword"
)
1.3 解决方案
- 代码审查:定期进行代码审查,识别和重构技术债务。
- 自动化测试:编写单元测试和集成测试,确保重构不会破坏现有功能。
- 技术债务管理:将技术债务纳入项目管理,分配时间进行偿还。
2. 安全与隐私问题
2.1 安全威胁增加
软件暴涨意味着更多的攻击面。黑客利用软件漏洞进行数据窃取、勒索软件攻击等。例如,2021年发生的SolarWinds供应链攻击影响了多个政府机构和企业。
2.2 隐私法规的合规挑战
GDPR、CCPA等隐私法规要求软件必须严格保护用户数据。合规不仅需要技术上的调整(如数据加密、匿名化),还需要法律和流程上的配合,增加了软件开发的复杂度。
2.3 安全编码示例
以下是一个安全编码的示例:使用参数化查询防止SQL注入。
# 不安全的代码:SQL注入风险
def get_user_insecure(username):
query = f"SELECT * FROM users WHERE username = '{username}'"
cursor.execute(query)
return cursor.fetchone()
# 安全的代码:使用参数化查询
def get_user_secure(username):
query = "SELECT * FROM users WHERE username = %s"
cursor.execute(query, (username,))
...
3. 人才短缺与技能差距
3.1 人才需求激增
软件暴涨导致对开发者的需求远超供给。根据LinkedIn的数据,全球软件开发岗位缺口在2023年超过100万。
3.2 技能差距
新兴技术(如AI、区块链、量子计算)要求开发者不断学习。然而,教育体系和企业培训往往跟不上技术发展的速度,导致技能差距。
3.3 解决方案
- 内部培训:企业投资于员工培训,如在线课程、工作坊。
- 招聘策略调整:更看重学习能力和潜力,而非特定技术栈。
- 远程工作与全球化招聘:通过远程工作吸引全球人才。
4. 环境与可持续性问题
4.1 能源消耗
数据中心和云计算的能源消耗巨大。根据一些研究,全球数据中心的能耗占全球电力消耗的1-2%。软件暴涨意味着更多的服务器和更高的能耗。
4.2 电子废物
软件的快速迭代导致硬件更新换代加速,产生大量电子废物。例如,智能手机的平均使用寿命仅为2-3年。
4.3 可持续性解决方案
- 绿色计算:优化代码以减少计算资源消耗。
- 延长硬件寿命:开发轻量级软件,支持旧硬件。
- 碳中和承诺:科技公司承诺使用可再生能源。
三、未来展望
1. 技术趋势
1.1 低代码/无代码平台
低代码平台(如OutSystems、Mendix)允许非技术人员通过拖拽构建应用,将进一步降低软件开发门槛,但也可能加剧技术债务和安全问题。
1.2 边缘计算
随着物联网设备的增加,边缘计算将成为趋势。软件需要在边缘设备上运行,对性能和资源优化提出了更高要求。
1.3 量子计算
量子计算虽然仍处于早期阶段,但一旦成熟,将彻底改变软件开发模式,尤其是在加密、药物发现等领域。
2. 行业变革
2.1 软件开发的民主化
随着工具和平台的成熟,软件开发将不再局限于专业开发者。设计师、产品经理甚至业务人员都能参与软件构建。
2.2 AI辅助编程
AI工具(如GitHub Copilot、Amazon CodeWhisperer)已经能够自动生成代码片段,未来可能接管更多编程任务,改变开发者的工作方式。
3. 社会与伦理考量
3.1 数字鸿沟
软件暴涨可能加剧数字鸿沟。技术资源集中在发达地区,而欠发达地区可能被进一步边缘化。
3.2 算法偏见
AI软件的决策可能带有偏见,影响招聘、信贷等关键领域。确保算法公平性将成为重要议题。
3.3 就业影响
自动化和AI可能取代部分编程工作,但也会创造新的岗位。社会需要重新思考教育和职业培训体系。
结论
软件暴涨是技术、市场和商业模式共同作用的结果。它带来了巨大的机遇,也伴随着技术债务、安全风险、人才短缺和环境影响等挑战。未来,软件行业需要在创新与可持续性之间找到平衡,通过技术手段(如绿色计算、AI辅助)和管理策略(如技术债务管理、人才培养)来应对这些挑战。只有这样,软件行业才能在暴涨中保持健康、可持续的发展。
参考文献:
- AWS Documentation. (2023). Amazon EC2 User Guide.
- TensorFlow Documentation. (2023). Keras API Reference.
- Gartner. (2023). Forecast: Public Cloud Services, Worldwide, 2021-2027.
- LinkedIn. (2023). Global Talent Trends Report.
- GDPR.eu. (2023). General Data Protection Regulation (GDPR).# 软件暴涨背后的深层原因全面解析与现实挑战探讨
引言
在数字化浪潮席卷全球的今天,软件行业正经历一场前所未有的“暴涨”。从个人开发者到科技巨头,从初创企业到传统行业,软件的需求、复杂度和价值都在呈指数级增长。这种现象不仅体现在代码行数的激增,更体现在软件开发成本的攀升、技术栈的快速迭代以及人才市场的激烈竞争。本文将深入剖析软件暴涨背后的深层原因,并探讨由此带来的现实挑战。
一、软件暴涨的深层原因
1. 技术驱动的创新加速
1.1 云计算的普及
云计算是软件暴涨的核心驱动力之一。通过云计算,企业可以以极低的成本快速部署和扩展软件服务。以AWS(Amazon Web Services)为例,企业无需自建数据中心,只需按需付费即可使用弹性计算资源。这种模式极大地降低了软件开发的门槛,使得初创公司也能快速推出产品。
# 示例:使用AWS SDK(boto3)在Python中启动EC2实例
import boto3
# 初始化EC2客户端
ec2 = boto3.client('ec2', region_name='us-east-1')
# 启动一个EC2实例
response = ec2.run_instances(
ImageId='ami-0c55b159cbfafe1f0', # Amazon Linux 2 AMI
MinCount=1,
MaxCount=1,
InstanceType='t2.micro'
)
print("实例ID:", response['Instances'][0]['InstanceId'])
1.2 人工智能与机器学习
AI和ML技术的成熟使得软件能够处理更复杂的任务,如自然语言处理、图像识别和预测分析。这些技术的应用不仅提升了软件的功能,也增加了开发的复杂度和成本。
# 示例:使用TensorFlow构建一个简单的图像分类模型
import tensorflow as tf
from tensorflow.keras import layers, models
# 构建卷积神经网络
model = models.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.MaxPooling2D((2, 2)),
layers.Conv2D(64, (3, 3), activation='relu'),
layers.Flatten(),
layers.Dense(64, activation='relu'),
layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 这里省略了数据加载和训练的代码
# model.fit(train_images, train_labels, epochs=10)
1.3 开源生态的繁荣
开源软件的兴起极大地加速了软件开发进程。开发者可以基于现有的开源项目快速构建应用,而无需从零开始。例如,React、Vue.js等前端框架,Django、Flask等后端框架,以及Kubernetes、Docker等容器化工具,都极大地提高了开发效率。
2. 市场需求的爆发式增长
2.1 数字化转型
传统行业(如金融、医疗、制造)的数字化转型产生了对软件的巨大需求。企业需要定制化的软件来优化流程、提升效率和改善客户体验。例如,银行需要移动银行应用,医院需要电子病历系统。
2.2 疫情加速在线化
COVID-19疫情迫使全球加速向线上转移。远程办公、在线教育、电子商务等领域的软件需求激增。Zoom、Slack、Microsoft Teams等协作工具的用户量在疫情期间爆炸式增长。
2.3 消费者期望提升
现代消费者对软件的期望越来越高。他们要求软件不仅功能强大,还要界面美观、响应迅速、安全可靠。为了满足这些期望,软件开发者必须投入更多资源进行设计、测试和优化。
3. 商业模式的演进
3.1 SaaS模式的流行
软件即服务(SaaS)模式成为主流。企业不再一次性购买软件许可证,而是按月或按年订阅。这种模式虽然降低了客户的初始成本,但要求软件提供商持续维护和更新,增加了长期开发成本。
3.2 平台化战略
大型科技公司(如Google、Microsoft、Amazon)通过构建平台(如Google Cloud、Microsoft Azure、AWS)来锁定用户。这些平台提供了丰富的API和服务,使得开发者依赖于这些平台,进一步推动了软件生态的扩张。
二、软件暴涨带来的现实挑战
1. 技术债务的累积
1.1 定义与影响
技术债务是指为了快速交付功能而采用的短期解决方案,长期来看会增加维护成本和风险。随着软件规模的扩大,技术债务会迅速累积,导致代码难以维护、bug频发。
1.2 代码示例:技术债务的体现
以下是一个简单的技术债务示例:为了快速上线,开发者使用了硬编码的配置,而不是使用配置文件或环境变量。
# 技术债务示例:硬编码的数据库连接字符串
def get_db_connection():
# 硬编码的连接字符串,难以维护和更新
return psycopg2.connect(
host="db.example.com",
database="mydb",
user="myuser",
password="mypassword"
)
1.3 解决方案
- 代码审查:定期进行代码审查,识别和重构技术债务。
- 自动化测试:编写单元测试和集成测试,确保重构不会破坏现有功能。
- 技术债务管理:将技术债务纳入项目管理,分配时间进行偿还。
2. 安全与隐私问题
2.1 安全威胁增加
软件暴涨意味着更多的攻击面。黑客利用软件漏洞进行数据窃取、勒索软件攻击等。例如,2021年发生的SolarWinds供应链攻击影响了多个政府机构和企业。
2.2 隐私法规的合规挑战
GDPR、CCPA等隐私法规要求软件必须严格保护用户数据。合规不仅需要技术上的调整(如数据加密、匿名化),还需要法律和流程上的配合,增加了软件开发的复杂度。
2.3 安全编码示例
以下是一个安全编码的示例:使用参数化查询防止SQL注入。
# 不安全的代码:SQL注入风险
def get_user_insecure(username):
query = f"SELECT * FROM users WHERE username = '{username}'"
cursor.execute(query)
return cursor.fetchone()
# 安全的代码:使用参数化查询
def get_user_secure(username):
query = "SELECT * FROM users WHERE username = %s"
cursor.execute(query, (username,))
...
3. 人才短缺与技能差距
3.1 人才需求激增
软件暴涨导致对开发者的需求远超供给。根据LinkedIn的数据,全球软件开发岗位缺口在2023年超过100万。
3.2 技能差距
新兴技术(如AI、区块链、量子计算)要求开发者不断学习。然而,教育体系和企业培训往往跟不上技术发展的速度,导致技能差距。
3.3 解决方案
- 内部培训:企业投资于员工培训,如在线课程、工作坊。
- 招聘策略调整:更看重学习能力和潜力,而非特定技术栈。
- 远程工作与全球化招聘:通过远程工作吸引全球人才。
4. 环境与可持续性问题
4.1 能源消耗
数据中心和云计算的能源消耗巨大。根据一些研究,全球数据中心的能耗占全球电力消耗的1-2%。软件暴涨意味着更多的服务器和更高的能耗。
4.2 电子废物
软件的快速迭代导致硬件更新换代加速,产生大量电子废物。例如,智能手机的平均使用寿命仅为2-3年。
4.3 可持续性解决方案
- 绿色计算:优化代码以减少计算资源消耗。
- 延长硬件寿命:开发轻量级软件,支持旧硬件。
- 碳中和承诺:科技公司承诺使用可再生能源。
三、未来展望
1. 技术趋势
1.1 低代码/无代码平台
低代码平台(如OutSystems、Mendix)允许非技术人员通过拖拽构建应用,将进一步降低软件开发门槛,但也可能加剧技术债务和安全问题。
1.2 边缘计算
随着物联网设备的增加,边缘计算将成为趋势。软件需要在边缘设备上运行,对性能和资源优化提出了更高要求。
1.3 量子计算
量子计算虽然仍处于早期阶段,但一旦成熟,将彻底改变软件开发模式,尤其是在加密、药物发现等领域。
2. 行业变革
2.1 软件开发的民主化
随着工具和平台的成熟,软件开发将不再局限于专业开发者。设计师、产品经理甚至业务人员都能参与软件构建。
2.2 AI辅助编程
AI工具(如GitHub Copilot、Amazon CodeWhisperer)已经能够自动生成代码片段,未来可能接管更多编程任务,改变开发者的工作方式。
3. 社会与伦理考量
3.1 数字鸿沟
软件暴涨可能加剧数字鸿沟。技术资源集中在发达地区,而欠发达地区可能被进一步边缘化。
3.2 算法偏见
AI软件的决策可能带有偏见,影响招聘、信贷等关键领域。确保算法公平性将成为重要议题。
3.3 就业影响
自动化和AI可能取代部分编程工作,但也会创造新的岗位。社会需要重新思考教育和职业培训体系。
结论
软件暴涨是技术、市场和商业模式共同作用的结果。它带来了巨大的机遇,也伴随着技术债务、安全风险、人才短缺和环境影响等挑战。未来,软件行业需要在创新与可持续性之间找到平衡,通过技术手段(如绿色计算、AI辅助)和管理策略(如技术债务管理、人才培养)来应对这些挑战。只有这样,软件行业才能在暴涨中保持健康、可持续的发展。
参考文献:
- AWS Documentation. (2023). Amazon EC2 User Guide.
- TensorFlow Documentation. (2023). Keras API Reference.
- Gartner. (2023). Forecast: Public Cloud Services, Worldwide, 2021-2027.
- LinkedIn. (2023). Global Talent Trends Report.
- GDPR.eu. (2023). General Data Protection Regulation (GDPR).
