程序员英语学习三步曲

作为一名程序员,可以说每天都要和英语打交道,特别是浏览一些国外的技术网站的时候,许多人就感觉英语水平跟不上了,那么,程序员怎么学英语?现在请看程序员英语学习三步曲。

一、读文档不能只读代码

读文档只读代码,是很多程序员的习惯,也是导致程序员虽然读了很多英文资料,英文水平却没有相应提高的原因之一。以前曾在《程序员》上看到介绍阅读 技术图书方法的文章,提出过“先代码后文字”的方法,也就是“先看代码,看不明白再看文字”。这种阅读法能极大提高阅读效率,但如果技术图书只看代码就足 够,还要文字干什么呢?很多时候,代码只是冰山一角,代码背后的思维和逻辑才是真正的重头戏,只有写成文字才能解释,也只有阅读文字才能理解。

比如,代码都是“x = 5;”,有时的说明是x should be not more than five,有时的说明是x should be no more than five。不查词典,你能弄清楚两种说法的区别吗—前者是“x必须小于等于5”,后者是“x应当只有5”,意思不同,应用的方法与场合也不相同。

这些年来经常有希望翻译技术文档的程序员来找我讨论翻译问题,希望了解一些句子应该如何表达。一开始,我也认为这是中文表达的问题,但后来逐渐发 现,其实更多的问题出在英文阅读上,所以我的回答经常是:你觉得作者这里说的是什么意思?引导对方把原文的意思逐步表达出来,其实这时候,真正的译文已经 浮出水面了。

最近的例子来自这句话:“But as with any web-based system, atom-based solutions trade scalability for latency, making atom often inappropriate for very low-latency notifications”。这句话之所以难翻译,问题似乎在于,除去句子的主干,之前有一个But as…,之后又有一个making…。然而我最后发现,对这个句子有疑问的程序员其实根本没搞懂trade…for…的用法(翻译为“基于atom的解决 方案需要权衡延迟和性扩展性”),如果明白它是“牺牲xx换取xx”之后,整个句子就相当好理解,也非常容易翻译了:与所有基于web的系统一样,基于 atom的解决方案为追求可扩展性,增大了延迟,所以atom通常并不适用要求极低延迟的提示。

要解决这个问题,首先要做的是改变“只看代码不看文字”的习惯,至少要做到“阅读文字之后,认识到它的意思与代码是一致的”;其次是通过阅读纯文字的英文资料来学习某些新的知识(比如关于深入原理的细致讲解),这个方法我推荐给许多朋友,非常有效。

二、注意读音

以前总听人说,中国人学了很多年英语,其实是哑巴英语。不知道现在的情况有多少改观,但就我所见,不少程序员虽然阅读了大量英文资料,也会加入英文的讨论组,也敢开口说,但还会在读音上出现许多问题。这里说的“读音”,并不是字正腔圆的口音,而是一些术语的读音。

众所周知,计算机科学的术语来源非常广泛。例如设计模式里,有一种模式叫Facade,许多人往往直接读作,其实这个词来自法文,正确的读音其实是;再比如伪代码的“伪”pseudo,正确的读音是,但我很少遇到程序员能把它读对,许多人干脆不会发这个音。

也许有人说,这些问题不重要,大家“将错就错”,约定俗成就得了,但事情没有这么简单。最近我参加某个技术聚会,有一位嘉宾(技术高手)把框架名 chameleon(变色龙)读成了,而正确的读音是,因为没有文字资料,许多人听了半天才知道他说的是 什么,一些不熟悉chameleon的听众更是到结束也没明白。中国人聚会尚且如此,如果有机会参加中外技术交流,读错造成的问题就更大了。

要解决这个问题,有一个非常好的办法,就是学习美国大学的公开课,耶鲁、斯坦福等学校的计算机系都放出了许多高质量的公开课,学习其中的一些精品课 程,不但能夯实基础,还能顺带学会许多每天都要遇到但不会或者读错的术语。比如我就从中学到,数据类型char的读音是[kɑ:],而不是[t∫ɑ:]。

三、锻炼英文表达

如果你背过单词,大概听到过“被动单词”和“主动单词”的说法,前者是指“看到了能认出来”的单词,后者指“表达时能主动应用”的单词。据我观察,许多程序员掌握的大多数英语,都属于“被动英语”——看到了能认识,但要表达同样的意思,未必说得出来。

平时这样似乎没有问题,但如果要查阅资料,不会表达就造成了大的障碍。相比中文技术资料世界中“无责任/不负责转贴”泛滥的情况,英文技术资料的质 量要高得多,Google搜索资料的准确性也远高于百度;但要能够顺利应用英文资料,需要“主动”输入信息,描述问题,这时候“被动英语”就成了大问题。

我遇到过很多次这样的情况:即便答案近在咫尺,输入正确的关键词,Google的第一条结果就是答案,但程序员就是一筹莫展——因为他不知道计算机 的“嘟嘟”声是beep,不知道搜“多线程”资料应该用concurrency,也不知道“死机”是system halt,“黑屏”是blank screen……

要解决这个问题,最好的办法是在阅读资料时多用心,记住这些说法;另一方面,没事的时 候多浏览stackoverflow之类的网站,不要因为问题与自己无关而忽略,要多留心这些问题到底是什么,是如何表达的。这样,在自己遇到问题时,才 能迅速找到可能的解决方案,节省时间。

推荐阅读:

程序员接私单需要注意的几大问题

提高数倍工作效率的Android Studio技巧

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
应用背景为变电站电力巡检,基于YOLO v4算法模型对常见电力巡检目标进行检测,并充分利用Ascend310提供的DVPP等硬件支持能力来完成流媒体的传输、处理等任务,并对系统性能做出一定的优化。.zip深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络类型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据中的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络中用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值