程序员如何进步

  • 对所做的事情的理解越深,你就会做的越好。
  • 把自己归零,先抛弃成见。无论在做什么事,先理解本质是什么,物理上的现实是什么。总是去质疑,为什么是这样?我有真正理解吗?即使看起来理所当然,即使用了很久的东西 不要说 “可能”,“大概”,“差不多”,是就是是,不知道就是不知道。
  • 不要陷入“孤岛”状态,去了解别人在做什么。一个真正优秀的产品往往是多个人共同协作完成,孤胆英雄的年代已经过去
  • "我没有时间写一封简短的信,所以我写了一封长的。(I didn’t have time to write a short letter, so I wrote a long one instead.)" 简短的文字与代码相同,都需要耗费更多的脑力才能完成,并可以成功的运作。简单、经验与理解让你写得越来越少
  • 关心业务,关心使命. 强烈的商业和产品意识。 在功能开发过程中,开发人员通常需要做出规范中未涵盖的产品决策。他们做出正确选择的能力取决于对为什么某个功能对业务有益以及应该如何构建产品的理解。
  • 花更多时间阅读代码 关注维护成本关注可读性,像作家一样编程
  • 代码提交一定要拆得碎,每个commit只专注一件事情,并且附带上测试用例
  • 重构:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。消除 Bad Smell;不破坏现有的功能;可以持续交付、随时停止/开始重构;不改变旧的,创建新的,切换后再清理;它应该作为一系列小的迭代来完成,而不是再次重写整个系统。每次迭代都应该负责稍微改进代码,同时让系统保持正常工作状态。
  • 首先当然是要有一个好的身体。此外需要培养一个编程之外的爱好,这样可以让你活的像一个正常人。
  • 程序员是一个需要不断学习的职业,在学习的过程中,英文能力可以帮助你学的更快,更有效。
  • 另外正确的应对工作过程中必然会犯的错误,并将每次错误都当成学习的机会。
  • 开发只是软件开发流程中的一环,程序员需要拓展自己的视野,和其他角色一起配合才能保证产品的交付。在日常的开发中,程序员还需要快速、准确的将自己的想法和创意表达出来。最后,更快速的完成手头的工作可以让你有更多的时间来思考,来改进那些低效的工作方式。
  • 不要贬低你的工作:无论如何,你的工作都是有价值的。一些最好的想法正是来自于新手程序员,他们能看到现有技术的可改进之处,而那些已经形成固有观念的人却看不到。
  • 不用总是在压力下工作:那些每天不断发布的内容大部分都是一些现有想法的翻版。真正革命性的东西只会每几年才发生一次。
  • 我们应该解决问题,而不是创建功能。 花更多的时间陈述问题,理解问题,然后设计和分析解决方案,而不是立即进行编码。
  • 忽略没营养的东西 更好的最佳方法之一就是忽略掉那些实际上对提升技能没有帮助的没营养的东西
  • 挖掘过去的研究成果 如果一个想法让你感到很兴奋,你可能很想立刻就展开工作。但是在那之前,你应该先粗略研究一下前人是如何解决这个问题的。花上几天时间研究要解决的问题*总能*彻底改变我的思路。学习如何阅读学术论文是很有意义的。 如果你在找一些论文来读,那么你可以从我们喜欢的论文这个GitHub仓库开始
  • The ability to solve difficult problems is directly correlated with the amount of time spent thinking about those problems.
  • Analysis and design is about understanding and solving the problems we're facing, not the actual implementation of solutions.
  • Solve problems, don't build features.
  • There is technique and skill involved with solving problems. It is something that can be learnt and improved. By practicing problem solving you will get good at it.
  • Problem-solving is one of the most leveraged skills you can acquire (more so than any tool, technology or framework)
  • Able to balance pragmatism and perfectionism - Great programmers have the ability to make both masterful/quick/dirty hacks and elegant/refined/robust solutions, and the wisdom to choose which is appropriate for a given problem. Some lesser programmers seem to lack the extreme attention to detail necessary for some problems. Others are stuck in perfectionist mode.
  • Not averse to debugging and bugfixing - Mediocre programmers often fear and loathe debugging, even of their own code. Great programmers seem to dive right and drill down with Churchill-esque tenacity. They might not be happy if it turns out that the bug is outside their code, but they will find it.
  • Healthy skepticism - A good programmer will get a solution that appears to work and call it a day. A great programmer will tend to not trust their own code until they've tested it extensively. This also comes up a lot in data analysis and system administration. An average programmer might see a small innocuous-looking discrepancy and ignore it. If a great programmer sees something like that they will suspect it could be a hint of a greater problem, and investigate further. Great programmers tend to do more cross-checking and sanity checking, and in doing so discover subtle bugs.
参考文档:
https://insights.thoughtworks.cn/excellent-developer/
https://loveky.github.io/2017/04/18/translate-how-i-became-better-programmer/
https://stokoe.me/summary-hammock-driven-development/