经过了长达十年的编程生涯,我对于软件工程的理解和认识已经日趋成熟。在此,我想与大家分享一些对于编程的独到见解和心得体会,希望这些经验可以为你的编程之路提供一些参考。
首先,我发现有一个庞大而声音响亮的行业,致力于将复杂性加入到软件工程项目中。这种复杂性通常表现为无用的功能、繁琐的流程以及冗长的代码。这些都可能导致我们的软件过度复杂,难以维护和优化。因此,我建议尽可能避免这种复杂性,追求简洁、高效的设计和代码。
其次,我们需要明白,关于软件的 99% 的文字都是由那些尚未看到全貌,对此过于兴奋且信息不充足的人写的。这不仅包括一些技术博客,甚至也包括这篇文章。因此,在阅读这些资料时,我们应保持批判性思维,明确它们可能只是部分人的观点,不一定适用于我们的实际情况。
除此之外,我们需要尽量避免与编程相关但不涉及编写和测试代码的繁琐工作,例如过度的设计、无用的会议等。相反,我们应该更加专注于完成工作,编写可用的软件,并获取用户。
关于测试,我认为一旦代码库开始稳定,测试就变得非常重要。在这个阶段,通过测试可以有效地发现和解决问题,提高软件的质量。然而,在软件开发的试验阶段,我们可以暂时忽略测试,以便更快地进行试错和优化。
同时,你无法阻止某人"毁掉"你的代码库。但你可以责怪自己没有设计防护措施来阻止这种事情发生。因此,我们在设计和编程时,需要考虑到这种可能性,预先设置好防护措施。
我还发现,选择并坚持一个技术栈非常重要。我选择了 React(Web)、NodeJS(后端)、Postgres(数据库)和 React Native(移动端)。这套技术栈可以满足我几乎所有的需求。因此,我建议你找到适合自己的技术栈,并坚持使用。
另外,我建议大家多做辅助项目。这不仅可以提升我们的编程技能,还可以 帮助我们更好地理解和运用新的技术和工具。例如,你可以试着完善从数据库拉取的 JSON 数据列表的展示,这种练习将大大提升你的技能水平。
在编程范式的选择上,我认为函数式并不比命令式更优,它只是编写软件的另一种方式。因此,我们不应该成为任何一种编程范式的狂热者,而应该根据实际需求和情况,灵活选择适合的编程范式。
当然,我们也应该明白,并非所有的高级(及以上级别)软件工程师都是一样的。我们需要警惕那些只是凭资历而非真正技能和经验的工程师。同时,我们也需要明白,一分钟的规划等于一小时盲目编码的价值。因此,在开始编程前,我们应该花时间进行充分的规划和设计。
在我看来,所有好的软件都是在 70 年代编写的,从那时以来,软件的质量似乎一直在下滑。我想,这可能是因为我们过于追求新的技术和工具,而忽视了软件的本质和基础。因此,我建议大家在追求新技术的同时,也不要忘记软件的基础和本质。
在交流和合作中,我认为安静总比喧闹好。我们需要学会在合适的时机与他人分享我们的想法和成果,而不是随意地说出来。这样,我们的想法和成果才能得到真正的重视和尊重。
最后,我想说,在编程领域中,不应该轻易改变使用的技术栈或工具,只为了追求一些微小的好处或瞬间的满足感。同时,我发现,真正的好工程师都很谦逊,他们喜欢学习,喜欢分享,是我们值得学习和借鉴的榜样。
以上就是我在编程十年的一些心得体会,希望对你有所帮助。当然,每个人的经验和心得都会不同,我也期待你能分享你的见解和体验。
注: 本文根据 : https://adamfallon.com/programming/software-engineering/2022/09/09/some-thoughts-on-my-first-ten-years-of-programming.html 改编而来。