23

它总是说,你编程的越多,你就越好。听起来不错,很真实。但我想知道是否有一条经过验证的途径可以成为一名更好的程序员。

就像是:

  • 学习一个
  • 学习 b
  • 学习 c > '现在你可以燃烧引擎了'
  • 根据你的学习尝试周围的东西。

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

谢谢

4

22 回答 22

41

熟能生巧是不正确的。

这是完美的实践,使完美。

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

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

没有“确定”的方法可以学习我所知道的任何东西。如果有的话,任何人都可以掌握这一点。

于 2009-10-09T21:39:40.290 回答
32

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

技术部分:

  • 设计模式 - 可能有一些特定于域的模式,但通常这些是启动应用程序部分的有用方法。你知道 MVC 还是 MVP?
  • 基本算法起点 - 分治法、动态规划、递归、创建特殊数据类型(如堆)、贪心等。
  • 解决问题的技巧——你能多容易地跳进去找到错误在哪里?你能想出多种解决问题的办法吗?
  • 抽象建模——当有人描述问题时,你能在多大程度上用代码或类来描述你脑海中的事物?
  • 高水平与低水平——当一个人想要高或低的东西时,你了解多少?这只是我要扔掉的东西,因为这些术语得到了很多,比如对某事的高级视图或低级语言。

工艺部件:

  • 敏捷——你知道 Scrum、XP 和其他管理软件项目的新方法吗?YAGNI、DRY 和 KISS 等原则怎么样?还是像 SOLID 这样的原则?像破碎的窗户这样的想法?
  • 开发人员环境 - 您对使用的 IDE 了解多少?源代码控制?持续集成?您知道您的机器在生产方面的瓶颈吗?
  • xDD - 你知道 TDD、BDD 和其他由范式驱动的开发吗?
  • 重构——你是回顾你的旧代码并改进它,还是倾向于编写一次然后放弃你的代码?

软技能:

  • 情商——主要用于演示和与他人合作。
  • 激情/动机——你知道是什么让你的汁液流动起来,而且在生产力方面只是踢屁股吗?你知道你多年来想做什么吗?
于 2009-10-09T22:07:45.080 回答
13

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

确保您了解一些基础知识:集合、相等、哈希码等。这些在几乎所有现代语言中都很有用。

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

最重要的是完善并不断完善您的工作。不要将您的工作视为废弃软件!

于 2009-10-09T21:34:41.530 回答
7
  1. 学习你的第一门编程语言新的编程范式或
  2. 找一个你可以学习的导师
  3. 将您学到的知识应用到现实世界的项目中
  4. 从你的错误和成功中吸取教训,然后转到第一步

诀窍是知道首先要学习什么:

  • 编程语言——这是开始的地方,因为你不能在不知道其中至少一种的情况下编写软件。掌握一种语言后,尝试学习另一种语言。
  • 编程范式 - 即面向对象、动态/函数式编程等。尝试用每种新语言学习一种新语言。
  • 设计概念 - SOLID、设计模式以及架构概念。
  • 人际交往能力——学会交流你的想法。
  • 团队领导——学习如何横扫他人以及如何成为团队或技术领导者。

在那之后,天空是极限。

于 2009-10-09T21:38:07.043 回答
5

我会按照这个顺序大致改进,在每个构建在前一个的基础上进行迭代:

  • 编程概念。了解内存管理、指针、堆栈、变量范围等。
  • 语言。努力掌握几种现代语言。
  • 设计理念。了解设计模式。练习使用它们。
  • 沟通。经常被忽视。只有能够与非技术人员进行有效沟通,您才能成为一名高价值的软件工程师。学会倾听和理解人们表达的需求,将其转化为一组需求和技术设计,然后用他们可以理解的方式向他们解释你理解(和设计)的内容,以便在你编码之前进行验证。这不是一个容易掌握的,但它是必不可少的。
  • 建筑概念。学习了解大型复杂系统的全局。
于 2009-10-09T21:39:01.233 回答
4

学习编程语言在很多方面类似于学习口语。擅长它的唯一方法是尽可能多地这样做。在其他作品中

练习,练习,阅读,然后再练习

于 2009-10-09T21:41:11.143 回答
4

花时间学习各种编码技术、工具和编程智慧。我发现这对我的发展至关重要。编写代码并感觉富有成效是很容易的。如果您只是掌握了更多知识/武器来破解下一个小部件,那会怎样呢?

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

例如,了解:

•开发实践、软件设计、估计、方法论 业务分析 数据库设计(那里有很多很棒的书籍和在线资源)

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

•尝试参与开源项目。

•寻找您所在城镇的编程用户组和/或可以指导您的人。

是的,正如提到的做法。不要只是阅读,做并观察你将如何改进。:)

于 2009-10-09T21:47:40.153 回答
3

当然,严格来说,你练习编程的次数越多,你就越擅长解决这类问题。但这真的是你想要的吗?

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

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

也阅读很多非编程书籍,观察你周围的世界。创建有用的隐喻是成功程序员的一项基本技能。餐馆为什么要按他们的方式做事?当他们每隔几天而不是每天捡垃圾时,垃圾部门会做出什么权衡?扩展如何影响杂货店的经营方式?做一个好奇的人,才能成为一个更好的程序员。

于 2009-10-09T22:07:41.400 回答
3

练习,练习,练习。

一旦您克服了能够编程的基本障碍,您还可以阅读有用的书籍(即 Code Complete、Effective Java 或等效书籍等),以获得有关如何改进代码的想法。

于 2009-10-09T21:33:51.153 回答
3

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

其次,找一个比你懂的人多学习。如果你已经深深沉浸在编写大量代码中,这种关系会更好。

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

四是解决难题。挑战你的极限。建造你认为不可能的东西。现在我正在编写一个专门的编译器。在过去的几个月里,我学到了很多东西。

于 2009-10-09T21:45:07.680 回答
2

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

例如,在 C++ 和 Javascript 中,我不再使用没有大括号的 if() 语句。原因是太容易错误地输入:

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

这是一个明显的错字,但很容易引入,尤其是在您编辑现有代码时。在我看来,我只是把它称为防御性编程,但是像这样的小技巧对于让你变得更好很有价值。

所以,找一个同行或导师,并在他们的代码上工作。

于 2009-10-10T07:24:14.223 回答
2

你已经学到了一些东西,试着更努力地学习一些东西。阅读和练习很多第一次看起来令人困惑的事情(lambda 函数、线程​​、数组操作等)。这需要时间,但是一旦你练习得足够多,一开始看起来很混乱的东西就会变得熟悉和容易。

于 2009-10-09T22:06:04.050 回答
2

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

如果你想要一份入门级的编程工作,那么通过本科计算机科学/工程学位进行正规培训是不错的选择。然而,如果你想成为一名摇滚明星开发者,最好通过非正式培训来完成——犯无心之失,让资深开发者骂你,学习设计模式,因为你正在更新的应用程序使用它,差点因为糟糕而哭泣开发人员编写了一个巨大的混乱程序,缺乏文档和最佳实践,现在您必须尽快对其进行多次更新;这些性质的东西。

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

为了证明我的观点,这里的每个人都有很好的答案,但他们都不同。询问一位摇滚明星开发人员他是如何学到东西的,或者何时,为什么;他们可能不知道——事情就这样发生了。

于 2009-10-09T23:06:50.780 回答
2

除了这里已经给出的其他重要建议之外,不要害怕阅读有关编码和良好实践的内容,但也要对所有内容持保留态度,看看什么最适合您。很多建议都是意见。

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

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

学习不止一种语言。一次一个,当然,但最终你应该能流利地讲一对。我认为这将为您提供更好的视角,并帮助您成为编程专家,而不是成为某种语言的专家。

了解各级计算机、硬件、操作系统等的来龙去脉。理想情况下,您应该能够构建自己的系统,在其上安装多个操作系统,并诊断几乎所有可能出现的问题。我认识许多不是“计算机技术人员”的程序员,他们无法理解每个级别发生的事情成为诊断和修复异常错误或性能问题的主要障碍。

于 2009-10-09T22:40:41.617 回答
2

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

它不是我的包,但我认识的一些最好的编码员已经花时间支持应用程序。我敢肯定,这种体验改进了他们的产品。

于 2009-10-09T23:01:14.220 回答
2

吃呼吸梦想你使用的编程语言(不认真,它有帮助)

于 2009-10-09T23:02:23.723 回答
2

找一个让你感兴趣的程序,一个解决问题的程序,或者一个可以简化你的许多任务的程序。试着写一些类似的东西。你会很快上手,同时玩得开心。

于 2009-10-09T21:54:07.247 回答
2

您可以尝试真正很好地学习一件事,然后扩展到与您所学内容相关的编程领域,这样您就可以为客户提供完整的解决方案。

同时,花一部分时间探索舒适区之外的事物。

于 2009-10-09T22:04:34.487 回答
2
  • 单独和集体练习

  • 保持开放的心态,始终学习新事物,不要局限于熟悉的事物。不只是从技术角度来看,用户界面设计,人际交往能力,......不要害怕什么是新的

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

  • 喜欢编码。如果你热爱你正在做的事情,投入大量时间似乎毫不费力。每个编码器都需要驱动器!

于 2009-10-10T00:14:21.493 回答
2

对我来说,学习新东西一定是有原因的……也就是说,除非我有一个项目或者我需要解决的问题,否则就没有希望。如果满足了这个先决条件,那么我通常会尝试让“Hello, world”正常工作,然后天空就是极限。这些天的大部分开发只是学习新的 API。偶尔会有某种范式转变让你大吃一惊,但这并不像人们想象的那么普遍,恕我直言。

于 2009-10-09T21:33:31.373 回答
2

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

我知道我正在恢复这个线程,但我发现它是因为我想看看是否有人已经问过这个问题。

我的想法是,我们能不能想出一个类似于可汗学院使用的地图的编程概念的“知识地图” 。

作为一名程序员,我希望能够将不同想法之间的依赖关系和关系可视化,以便了解自己目前处于什么水平;在处理具有挑战性的主题之前我需要知道什么;并能够想象我的进步。

于 2012-03-25T02:34:10.577 回答
1

对路线图存在的信念阻碍了通往完美的道路。

于 2009-10-09T21:52:11.113 回答