一个更好的程序员的路线图

时间:2009-10-09 21:30:04

标签: programming-languages

它总是说你编程越多,你就越好。听起来不错,真实。 但我想知道是否有一条成熟的程序员可以找到路径。

类似的东西:

  • 了解
  • 学习b
  • 了解c> “现在你可以燃烧发动机了”
  • 根据您的学习尝试一下。

答案可能类似于CS课程路线图,但我想听听成功的程序员,他们可能想要提供一些值得关注的东西。

由于

22 个答案:

答案 0 :(得分:38)

练习完美无缺。

完美的完美练习。

如果您所做的只是一次又一次地重复相同的不良做法,那么您只能更快地创建错误的代码。

一定要保持编码。但同时要批评你所做的一切。总是有一个黄疸的眼睛,寻找更好的方法。广泛阅读以获得新的想法。与他人讨论他们如何做事。看看其他人的代码,无论好坏。

没有“确定”的方式来学习我所知道的任何事情。如果有,任何人都可以掌握这一点。

答案 1 :(得分:27)

所有问题都是修辞性的,旨在激发思想。

技术部分:

  • 设计模式 - 可能有一些特定于域但通常这些是启动应用程序部分的有用方法。你知道MVC还是MVP?
  • 基本算法起点 - 划分和征服,动态编程,递归,创建特殊数据类型,如堆,贪婪等。
  • 解决问题的能力 - 你能多快轻松地找到错误的位置?你能想到这个问题的多种解决方案吗?
  • 抽象建模 - 当有人描述问题时,你能用多少代码或类来描绘你的想法?
  • 高水平与低水平 - 当你想要高或低的东西时,你有多了解?这只是我要抛弃的东西,因为这些术语经历了很多,比如高级别的某种东西或低级语言。

流程部分:

  • 敏捷 - 你知道Scrum,XP和其他管理软件项目的新方法吗?像YAGNI,DRY和KISS这样的原则怎么样?或像SOLID这样的原则?像破窗户这样的想法?
  • 开发人员环境 - 您对使用的IDE的了解程度如何?源控制?持续集成?你知道你的机器上的瓶颈是否有效?
  • xDD - 你知道TDD,BDD以及其他一些范例推动的发展吗?
  • 重构 - 您是否重新使用旧代码并使其更好,或者您是否倾向于编写一次然后放弃代码?

软技能:

  • 情绪智力 - 主要用于演示和与他人合作。
  • 激情/动机 - 你知道什么让你的果汁流动,只是在生产力方面踢出了屁股?你知道多年来你想做什么吗?

答案 2 :(得分:12)

我的主要建议是:不要害怕重写自己的代码。看一下你一个月前写的东西,你会看到缺陷,并想重写一些东西。

确保您了解一些基本原则:集合,相等,哈希码等。这些在几乎所有现代语言中都很有用。

根据您使用的语言 - 使用lint和metric工具并在代码上运行它们。并非所有他们的建议都适用,但学习哪些是重要的,哪些不重要。例如,Java的FindBugs,PMD等。

最重要的是改进并不断完善你的工作。不要把你的工作视为放弃用品!

答案 3 :(得分:5)

  1. 将您的第一种编程语言学习为新的编程范例或
  2. 找一位你可以学习的导师
  3. 应用您在现实世界项目中学到的知识
  4. 从错误和成功中学习并转到第一步
  5. 诀窍是先知道要学什么:

    • 编程语言 - 这是一个开始的地方因为你不能在不知道其中一个的情况下编写软件。在掌握了一种语言后,尝试学习另一种语言。
    • 编程范例 - 即面向对象,动态/函数式编程等。尝试用每种新语言学习一种新的语言。
    • 设计概念 - S.O.L.I.D,设计模式以及建筑概念。
    • 人员技能 - 学会传达你的想法。
    • 团队领导 - 学习如何扫除他人以及如何成为团队或技术领导者。

    之后天空就是极限。

答案 4 :(得分:3)

练习,练习,练习。

一旦你完成了能够编程的基本能力,你还可以阅读有用的书籍(即代码完整,有效的Java或等价物等),以获得有关如何改进代码的想法。

答案 5 :(得分:3)

我会按照这个顺序粗略地改进,在前一个建筑物的每个建筑物的迭代中:

  • 编程概念。理解内存管理,指针,堆栈,可变范围等内容。
  • 语言。掌握几种现代语言的工作。
  • 设计概念。了解设计模式。练习使用它们。
  • 通信。经常被忽视的。如果您能够与非技术人员进行有效沟通,您只能成为高度重视的软件工程师。学会倾听并理解人们所表达的需求,将其转化为一系列要求和技术设计,然后以他们能够理解的方式向您解释您理解(和设计)的内容,在编码之前进行验证。这不是一件容易掌握的事,但这很重要。
  • 建筑概念。学习理解大型复杂系统的大局。

答案 6 :(得分:3)

花点时间了解各种编码技巧,工具和编程智慧。我发现这对我的发展至关重要。只需编写代码就可以轻松实现高效工作。如果你只是拥有更多的知识/武器来敲打下一个小部件,那该怎么办?

知识/知道我们的真实货币是怎样的。我们知道的越多,我们就能更好地决定应该如何做某事并更快地做到这一点。

例如,了解:

•开发实践,软件设计,评估,方法商业分析数据库设计(有很多好书和在线资源)

•阅读代码 - 开源项目是一个很好的地方。读 编程博客

•尝试参与开源 项目

•查找编程用户组 你的城镇和/或可以指导你的人。

是的,如上所述。不要只是阅读,做,看看你将如何改进。 :)

答案 7 :(得分:2)

我不确定OP是否正在寻找关于如何成为一名优秀程序员的一般建议,而是更具体的一些建议。

我知道我正在复兴这个帖子,但我发现它是因为我试图看看是否有人问过这个问题。

我的想法是,我们能否提出类似于the map that Khan Academy uses的编程概念的“知识图”。

作为程序员,我希望能够可视化不同想法之间的依赖关系和关系,这样我才能理解我目前的技能水平;在解决一个具有挑战性的主题之前我需要知道什么;并能够想象我的进步。

答案 8 :(得分:2)

对我来说,必须有理由去学习新东西......也就是说,除非我有一个项目或者我需要解决一些问题,否则就没有希望了。如果满足这个先决条件,那么我通常会尝试让“Hello,world”工作,之后天空就是极限。如今,开发的大部分内容都只是学习新的API。有时会出现某种模式转变,这种转变会让你大吃一惊,但这并不像人们想象的那样普遍,恕我直言。

答案 9 :(得分:2)

这些好答案的一小部分补充。当我处理别人的代码时,通常我会选择新的东西。如果你有机会与其他技能相同或更高的人一起工作,注意他们的编程风格可以教你很多。

例如,在C ++& Javascript我不再使用没有大括号的if()语句。原因是它很容易被错误地放入:

while (true) {
    if (a > b)
        print a
        print b
}

这是一个明显的错字,但很容易介绍,特别是如果您正在编辑现有代码。我只是把它称为防御性编程,但是这样的小技巧对于让你变得更好是有价值的。

所以,找一个同伴或导师,然后处理他们的代码。

答案 10 :(得分:2)

  • 单独和集体练习

  • 保持开放的心态,不断学习新事物,不要局限于熟悉的事物。不仅仅是从技术角度,ui设计,人员技能,...不要害怕什么是新的

  • 同行评审,与人们讨论您的代码,让人们与您讨论他们的代码,每个人都有一种独特的方式来查看问题,您将从同行那里学到很多东西

  • 爱编码。如果你喜欢你正在做的事情,那么放入很多时间似乎毫不费力。每个程序员都需要驱动器!

答案 11 :(得分:2)

有两种学习方式 - 1.非正式(就像你学习如何在社会中发挥作用 - 通过与同龄人和家人的互动) 2.正式(如高中培训 - 通过计划指导)

如果您想要一个入门级的编程工作,那么通过本科计算机科学/工程学位进行正式培训是可行的方法。但是,如果你想成为一名摇滚明星开发者,最好通过非正式培训 - 做出无意识的错误,并让高级开发人员诅咒你,学习一种设计模式,因为你正在更新的应用程序使用它,几乎因为一个坏而哭开发人员写了一个庞大的杂乱程序,缺乏文档和最佳实践,现在你必须尽快做几次更新;这些性质的东西。

任何人都很难给你一份你需要知道的清单。它因地区而异(例如,网络开发人员与桌面开发人员不同),并且每个公司都有所不同(例如,销售软件的微软与通常在汽车中使用它的通用汽车公司不同。)非正式的交易和参与尝试学习在我看来,更好地完成工作并获得晋升是你最好的选择。

为了证明我的观点,这里的每个人都有很好的答案,但他们都有所不同。问一个摇滚明星开发者他是如何学习某些东西的,或者何时,为什他们可能不会知道事情刚刚发生。

答案 12 :(得分:2)

吃口气梦想你使用的编程语言(没有认真,有帮助)

答案 13 :(得分:2)

除了查看“上周代码”之外,请在交付后与您的工作人员交谈 - 如果可能的话,请自己做一个。

它不是我的包,但我认识的一些最好的程序员花时间支持应用程序。我确信这种体验改善了他们的产品。

答案 14 :(得分:2)

除了这里已经给出的其他好建议之外,不要害怕阅读有关编码和良好做法的内容,而且还要把所有内容都花在盐上,看看什么最适合你。很多建议都是意见。

阅读的好网站: -thedailywtf.com -joelonsoftware.com -codinghorror.com -blogs.msdn.com/oldnewthing

获得练习的好地方是编程竞赛网站。这些将帮助您学习如何编写好的算法,不一定是可维护的代码,但它们仍然是开始学习的好地方。 我曾经使用的那个(当我有时间时回来)是: http://uva.onlinejudge.org/

学习多种语言。肯定是一次一个,但最终你应该能说一两个。这将为您提供更好的视角,帮助您成为编程专家,而不是成为某种语言的专家。

了解各个级别,硬件,操作系统等计算机的细节。理想情况下,您应该能够构建自己的系统,在其上安装多个操作系统,并诊断可能出现的每个问题。我知道很多程序员不是“计算机技术人员”而他们未能理解每个级别的情况都会成为诊断和修复异常错误或性能问题的主要障碍。

答案 15 :(得分:2)

当然,严格地说,你练习编程越多,你就越能解决这些问题。但那是你真正想要的吗?

编程是一项人类活动,而不是技术活动。很容易提高你的计算机技能,而不是很难提高你的人际交往能力。

阅读Hohmann的“软件专业人士之旅”。 Hohmann描述的概念之一是“认知库”,其中包括编程技能和非编程技能。扩展您的认知库,您的编程技能也会提​​高。

阅读大量非编程书籍,并观察周围的世界。创造有用的隐喻是成功程序员的基本技能。为什么餐馆会做他们做的事情?垃圾部门每隔几天而不是每天拿垃圾时会做出哪些权衡?缩放如何影响杂货店的业务?成为一个好奇的人才能成为更好的程序员。

答案 16 :(得分:2)

你学到了一些东西,试着更努力地学习一些东西。阅读并练习很多关于第一次看起来令人困惑的事情(lambda functins,线程,数组操作等)。它需要花费时间,但是一旦你练习了足够多的东西,一开始看起来很混乱,会很熟悉和容易。

答案 17 :(得分:2)

您可以尝试学习一件事,然后扩展到与您学到的东西相关的编程领域,这样您就可以为客户提供完整的解决方案。

与此同时,将您的部分时间用于探索舒适区之外的事物。

答案 18 :(得分:2)

找一个引起你兴趣的程序,一个解决问题的程序,或者一个可以简化你的许多任务的程序。尝试写类似的东西。你会很快加快速度,同时享受乐趣。

答案 19 :(得分:2)

首先写代码。尽可能多地写。解决难题。如果你想成为一名优秀的程序员,你需要深入了解你正在做的事情。在调试器中花费大量时间查看工作原理。如果你想成为一个真正理解正在发生的事情的优秀程序员,你需要深入了解金属并编写高度异步代码,了解处理器的工作原理以及SSE为何如此出色。理解线程原语并能够编写它们以及描述处理器中实际发生的事情。我可以继续前进,但你明白了。

第二,找到比你更了解并学习的人。如果您已经深深沉浸在编写大量代码中,这种关系将会更好。

第三,花一些时间在一个大型高质量的开源代码库中。我从Quake I和Quake II代码中学到了很多东西。帮助我成为一个更好的程序员。

第四,抓住难题。推动你的极限。建立你认为不可能的东西。现在我正在编写一个专门的编译器。在过去的几个月里,我学到了很多东西。

答案 20 :(得分:2)

学习编程语言在很多方面类似于学习口语。获得好处的唯一方法是尽可能多地做到这一点。在其他作品

  

练习,练习,阅读,然后练习更多

答案 21 :(得分:1)

对路线图存在的信念阻碍了完美之路。