【转载】编程目标:开发人员如何提高能力

原文地址:http://www.jobbole.com/entry.php/1420-%E7%BC%96%E7%A8%8B%E7%9B%AE%E6%A0%87%EF%BC%9A%E5%BC%80%E5%8F%91%E4%BA%BA%E5%91%98%E5%A6%82%E4%BD%95%E6%8F%90%E9%AB%98%E8%83%BD%E5%8A%9B

注:本文由敏捷翻译 - 唐小娟编译自 Jason Rudolph 的博文《Programming Achievements: How to Level Up as a Developer》。如需转载,请参见文后声明。

  一个优秀的程序员如何能练就成一个卓越的程序员?

  先等等,暂时不谈卓越,先谈谈如何成为一个优秀的程序员。

  从第一步到第N步并没有明确的路线图。事实上,第N步到底是什么还不确定。就像逻辑型思维的开发者一样,缺乏明确的目标会让从入门到精通的道路变得异常崎岖。

  过去的几年中,我花了不少时间来思索这个问题。我该如何从一名能力尚可的程序员修炼成一个真正优秀的程序员呢?

  成功是什么?

  当我对成功有清晰的目标、量化的标准的时候,我就能发挥我的最大潜力。比如,我想实现5分钟跑完一英里这个目标。好吧。这个路程很容易测量,成功的界限分明。我很容易知道跑一英里需要多久,网上也到处都是提高跑步速度的建议和训练计划。我可以选择一个计划并付诸努力,我深信我最终能够实现目标。这是一个神奇的可量化的计划,因此,每个星期我都可以检测到距离我的终极目标还有多远。

  但是如何界定你是否成为了“足够优秀的程序员”呢?一言蔽之,难以界定。这个目标从一开始就太主观,太模糊,太简单,无法量化。那么我们能找到能量化的东西吗?

  我们都有过一些提高我们技能的经验。我们可能曾经学过一门开启我们思路的新语言。我们也可能曾经有过一套完美的设计方案,但直到最终投入生产时才发现它漏洞百出,但我们因此而成长。有一些经验增长你的技能,有一些让你遇见反模式(注:反模式是指软件开发中经常被用到的但效率不高的模式。),并让你认知它们为什么是反模式。正是这些经验给你上了课,影响了你的思维模式,改变了你解决问题的方法,最终改善了你的设计。而你是否获得了某种经验,这是显而易见的。把经验当做是我们的收获或许很有趣。

  所以,虽然这需要付出时间,但我现在学会了适应成为“一个真正优秀的程序员”这一目标的不可量化性。如果一个程序员依靠经验取得了某些进展,那么我们就能有一个清晰的路线图来实现“成为真正优秀的程序员”这一终极目标。我想这个路线图应该是这样的:

  • 1.确定哪些技能能够帮助程序员进步
  • 2.着重积累某一个技能的经验
  • 3.直到这个技能完全掌握(成功攻关!)
  • 4.反复思考这个技能,直到融会贯通[A]
  • 5.重新回到第二步,选择一项新的技能

  如何更好的开始第一步呢?下面列出了一些编程目标,我粗略的分了一下类。[B]我会在本文的结尾和你一起讨论下想法。


  编程目标



  学习不同的编程语言范例

  • 用汇编语言写一个应用
  • 用函数式语言写一个应用
  • 用面向对象语言写一个应用
  • 用基于原型的语言写一个应用
  • 用逻辑编程语言写一个应用
  • 用Actor模型写一个应用
  • 用Forth语言写一个应用[C]


  扩宽对我们开发时使用的基本组件的了解:

  • 写一个网络客户端(如HTTP, FTP客户端)
  • 写一个设备驱动程序
  • 写一个B叉树数据库
  • 改进一个现有的库包,来获得更好的用户体验
  • 写一个提供插件模型的应用或框架
  • 写一个测试框架
  • 写一个程序语言


  更上一层楼:不断的练习,积累

  • 完成五个code katas (Kata是来自日本武术的概念,通过不断的重复和练习来提高技艺)
  • Koan编程来学习一种你想学的语言
  • 参加编程进修课程
  • 阅读SICP,完成所有的练习


  编写程序并开源:

  • 为开源项目贡献力量
  • 让别人接受你的补丁
  • 获得一个重要的开源项目的提交权限
  • 发布一个开源项目
  • 优化一个开源项目的代码,详细记录并分享出来


  通过教导别人来提高自己[D]

  • 做一个绘声绘色的演讲
  • 在一个本地用户组面前演讲
  • 在一个会议上演讲
  • 开设一个训练课程
  • 发布一个教程
  • 发布一个开源项目的有建设性代码审核
  • 写一本有关编程的书


  关于这些目标

  现在让我们来多说一点。注意这些目标都是可量化的。每一个都有个布尔值:你要么完成了,要么没有。例如,虽然很难界定你是否掌握了一门函数式语言,但是非常容易确定你是否用函数式语言写了一个应用。后者是可观测的,可量化的,布尔值。以上所有的目标都具有这一特性──可量化性。

  无可否认,这个可量化性并非无懈可击。就拿在一个会议上进行演讲来说,你当然可以做一个很烂的演讲,然后还可以拍拍胸脯说你实现了这个目标。不过既然你是我这篇博客的读者,我假设你想成为一个优秀的程序员,你是一个对自身要求很高的人,不会是仅仅完成了某个任务就沾沾自喜的人。


  既然我们在讨论改善,那么你对这份列表有什么改进意见呢?

  这个列表作为GitHub的有效依据,你们可以随意fork并添加更多的成绩。(确保它们是可量化的。)

  或者fork之后,你可以划分出你已经取得的成绩。你还可以为你正在努力的目标做上标记。(可以参考Justin Blake, Pierre Chapuis, Yann Esposito的分支)

  你也可以写评论,什么经验让你变得更为优秀,以及你希望下一步实现什么目标。


  注释

  [A]不得不强调下第四步。想要更出色的实现目标,你必须在你进行下一步之前停下来回想一下,问问自己到底学到了什么。花些时间写下些想法,更好的做法是,和他人分享,与其他完成同样任务的人作个对比,看看你的学习效果。
  [B]在coderwall.com这个网站,你可以更详细了解以目标为驱动的学习方法。
  [C]Forth本身就是一个语言范例。
  [D]我想起Paulo Freire 的一句名言:“传授知识本身就是在学习传授知识的艺术...”

原文地址:http://www.jobbole.com/entry.php/1420-%E7%BC%96%E7%A8%8B%E7%9B%AE%E6%A0%87%EF%BC%9A%E5%BC%80%E5%8F%91%E4%BA%BA%E5%91%98%E5%A6%82%E4%BD%95%E6%8F%90%E9%AB%98%E8%83%BD%E5%8A%9B

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习和模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 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、付费专栏及课程。

余额充值