它总是说,你编程的越多,你就越好。听起来不错,很真实。但我想知道是否有一条经过验证的途径可以成为一名更好的程序员。
就像是:
- 学习一个
- 学习 b
- 学习 c > '现在你可以燃烧引擎了'
- 根据你的学习尝试周围的东西。
答案可能类似于 CS 课程路线图,但我想听听成功的程序员可能想要投入一些值得注意的东西。
谢谢
它总是说,你编程的越多,你就越好。听起来不错,很真实。但我想知道是否有一条经过验证的途径可以成为一名更好的程序员。
就像是:
答案可能类似于 CS 课程路线图,但我想听听成功的程序员可能想要投入一些值得注意的东西。
谢谢
熟能生巧是不正确的。
这是完美的实践,使完美。
如果您所做的只是一次又一次地重复相同的不良做法,那么您只会更快地创建不良代码。
一定要继续编码。但同时要对你所做的一切持批评态度。总是有一个黄疸的眼睛,寻找更好的方法。广泛阅读以获得新的想法。与其他人谈论他们是如何做事的。看看别人的代码,好坏。
没有“确定”的方法可以学习我所知道的任何东西。如果有的话,任何人都可以掌握这一点。
所有问题都是修辞性的,旨在激发思考。
技术部分:
工艺部件:
软技能:
我的主要建议是:不要害怕重写自己的代码。看看你一个月前写的东西,你会发现缺陷并想重写。
确保您了解一些基础知识:集合、相等、哈希码等。这些在几乎所有现代语言中都很有用。
根据您使用的语言 - 使用 lint 和 metric 工具并在您的代码上运行它们。并非他们的所有建议都适用,但学习哪些重要哪些不重要很重要。例如用于 Java 的 FindBugs、PMD 等。
最重要的是完善并不断完善您的工作。不要将您的工作视为废弃软件!
诀窍是知道首先要学习什么:
在那之后,天空是极限。
我会按照这个顺序大致改进,在每个构建在前一个的基础上进行迭代:
学习编程语言在很多方面类似于学习口语。擅长它的唯一方法是尽可能多地这样做。在其他作品中
练习,练习,阅读,然后再练习
花时间学习各种编码技术、工具和编程智慧。我发现这对我的发展至关重要。编写代码并感觉富有成效是很容易的。如果您只是掌握了更多知识/武器来破解下一个小部件,那会怎样呢?
知识/知道如何是我们的真实货币。我们知道的越多,我们就越能更好地决定应该如何做某事,并且做得更快。
例如,了解:
•开发实践、软件设计、估计、方法论 业务分析 数据库设计(那里有很多很棒的书籍和在线资源)
•阅读代码- 开源项目是一个很好的地方。阅读编程博客
•尝试参与开源项目。
•寻找您所在城镇的编程用户组和/或可以指导您的人。
是的,正如提到的做法。不要只是阅读,做并观察你将如何改进。:)
当然,严格来说,你练习编程的次数越多,你就越擅长解决这类问题。但这真的是你想要的吗?
从本质上讲,编程是一项人类活动,而不是一项技术活动。提高你的计算机技能很容易,提高你的人际交往能力并不难。
阅读 Hohmann 的“软件专业人员之旅”。Hohmann 描述的概念之一是“认知库”,其中包括编程技能和非编程技能。扩展你的认知库,你的编程技能也会提高。
也阅读很多非编程书籍,观察你周围的世界。创建有用的隐喻是成功程序员的一项基本技能。餐馆为什么要按他们的方式做事?当他们每隔几天而不是每天捡垃圾时,垃圾部门会做出什么权衡?扩展如何影响杂货店的经营方式?做一个好奇的人,才能成为一个更好的程序员。
练习,练习,练习。
一旦您克服了能够编程的基本障碍,您还可以阅读有用的书籍(即 Code Complete、Effective Java 或等效书籍等),以获得有关如何改进代码的想法。
首先是编写代码。尽可能多地写。解决难题。如果你想成为一个真正优秀的程序员,你需要深入了解你正在做的事情。花大量时间在调试器中查看事情是如何工作的。如果您想成为一名真正了解正在发生的事情的优秀程序员,您需要深入了解并编写高度异步的代码,了解处理器的工作原理以及 SSE 为何如此出色。了解线程原语并能够编写它们以及描述处理器中实际发生的事情。我可以继续在这里,但你明白了。
其次,找一个比你懂的人多学习。如果你已经深深沉浸在编写大量代码中,这种关系会更好。
第三,花一些时间在大型高质量的开源代码库中。我从 Quake I 和 Quake II 代码中学到了很多东西。帮助我成为一个更好的程序员。
四是解决难题。挑战你的极限。建造你认为不可能的东西。现在我正在编写一个专门的编译器。在过去的几个月里,我学到了很多东西。
这些好答案的一个小补充。当我处理别人的代码时,我通常会选择一些新的东西。如果您有机会与具有同等或更高技能的其他人一起工作,那么注意他们的编程风格可以教给您很多东西。
例如,在 C++ 和 Javascript 中,我不再使用没有大括号的 if() 语句。原因是太容易错误地输入:
while (true) {
if (a > b)
print a
print b
}
这是一个明显的错字,但很容易引入,尤其是在您编辑现有代码时。在我看来,我只是把它称为防御性编程,但是像这样的小技巧对于让你变得更好很有价值。
所以,找一个同行或导师,并在他们的代码上工作。
你已经学到了一些东西,试着更努力地学习一些东西。阅读和练习很多第一次看起来令人困惑的事情(lambda 函数、线程、数组操作等)。这需要时间,但是一旦你练习得足够多,一开始看起来很混乱的东西就会变得熟悉和容易。
有两种学习方式 - 1. 非正式的(比如你如何学会如何在社会中发挥作用——通过与同龄人和家人的互动) 2. 正式的(比如你的高中培训——通过有计划的指导)
如果你想要一份入门级的编程工作,那么通过本科计算机科学/工程学位进行正规培训是不错的选择。然而,如果你想成为一名摇滚明星开发者,最好通过非正式培训来完成——犯无心之失,让资深开发者骂你,学习设计模式,因为你正在更新的应用程序使用它,差点因为糟糕而哭泣开发人员编写了一个巨大的混乱程序,缺乏文档和最佳实践,现在您必须尽快对其进行多次更新;这些性质的东西。
任何人都很难给你一份你需要知道的所有事情的清单。它因地区而异(例如,Web 开发人员与桌面开发人员),并且因公司而异(例如,销售软件的微软与主要在汽车中使用软件的通用汽车。) 非正式培训和参与尝试学习在我看来,更好地完成你的工作并获得晋升是你最好的选择。
为了证明我的观点,这里的每个人都有很好的答案,但他们都不同。询问一位摇滚明星开发人员他是如何学到东西的,或者何时,为什么;他们可能不知道——事情就这样发生了。
除了这里已经给出的其他重要建议之外,不要害怕阅读有关编码和良好实践的内容,但也要对所有内容持保留态度,看看什么最适合您。很多建议都是意见。
值得阅读的好网站:-thedailywtf.com -joelonsoftware.com -codinghorror.com -blogs.msdn.com/oldnewthing
一个练习的好地方是编程竞赛网站。这些将帮助您学习如何编写好的算法,不一定是可维护的代码,但它们仍然是开始学习的好地方。我曾经使用的(有时间的时候)是: http ://uva.onlinejudge.org/
学习不止一种语言。一次一个,当然,但最终你应该能流利地讲一对。我认为这将为您提供更好的视角,并帮助您成为编程专家,而不是成为某种语言的专家。
了解各级计算机、硬件、操作系统等的来龙去脉。理想情况下,您应该能够构建自己的系统,在其上安装多个操作系统,并诊断几乎所有可能出现的问题。我认识许多不是“计算机技术人员”的程序员,他们无法理解每个级别发生的事情成为诊断和修复异常错误或性能问题的主要障碍。
除了查看“上周代码”之外,在交付后与您工作的用户交谈——如果可能的话,做一个自己。
它不是我的包,但我认识的一些最好的编码员已经花时间支持应用程序。我敢肯定,这种体验改进了他们的产品。
吃呼吸梦想你使用的编程语言(不认真,它有帮助)
找一个让你感兴趣的程序,一个解决问题的程序,或者一个可以简化你的许多任务的程序。试着写一些类似的东西。你会很快上手,同时玩得开心。
您可以尝试真正很好地学习一件事,然后扩展到与您所学内容相关的编程领域,这样您就可以为客户提供完整的解决方案。
同时,花一部分时间探索舒适区之外的事物。
单独和集体练习
保持开放的心态,始终学习新事物,不要局限于熟悉的事物。不只是从技术角度来看,用户界面设计,人际交往能力,......不要害怕什么是新的
同行评审,与他人讨论您的代码,让人们与您讨论他们的代码,每个人都有独特的看待问题的方式,您将从同行那里学到很多东西
喜欢编码。如果你热爱你正在做的事情,投入大量时间似乎毫不费力。每个编码器都需要驱动器!
对我来说,学习新东西一定是有原因的……也就是说,除非我有一个项目或者我需要解决的问题,否则就没有希望。如果满足了这个先决条件,那么我通常会尝试让“Hello, world”正常工作,然后天空就是极限。这些天的大部分开发只是学习新的 API。偶尔会有某种范式转变让你大吃一惊,但这并不像人们想象的那么普遍,恕我直言。
我不确定 OP 是否正在寻找关于如何成为一名优秀程序员的一般建议,而是寻找更具体的建议。
我知道我正在恢复这个线程,但我发现它是因为我想看看是否有人已经问过这个问题。
我的想法是,我们能不能想出一个类似于可汗学院使用的地图的编程概念的“知识地图” 。
作为一名程序员,我希望能够将不同想法之间的依赖关系和关系可视化,以便了解自己目前处于什么水平;在处理具有挑战性的主题之前我需要知道什么;并能够想象我的进步。
对路线图存在的信念阻碍了通往完美的道路。