来自一个“不该给建议”的人之口
最近有人问我,对于刚入行的程序员有什么建议。一开始,我觉得这问题有点儿可笑。毕竟,我才工作十年,而我的一些订阅者编程的经历甚至比我这辈子还长!
后来,我读了些“给新手程序员的建议”文章,发现他们漏掉了不少东西。因此,我整理了十三条给新手程序员的建议,虽然有些看起来似乎互相矛盾。
-
人们听我的,不是因为我编程厉害,而是因为我写作不错。你读到的大多数人也是这样。这不意味着你得对所有内容一概否定,但你需要仔细思考,看看这些对你有没有帮助。对于那些关于“客观真理”的争论,你得持保留态度:软件领域里很少有经过科学验证的内容,而且大多数研究结果都是模棱两可的。
-
同时,也不要过分担心会被“误导”或者学到“错误的东西”。如果你对某个观点感兴趣,不妨实践一下!只要你的行为不是在明目张胆地破坏同事的工作,通常都能有个好结果。即便事后你回头看,觉得“我当时应该另辟蹊径”,这也是学习的一部分。
-
推荐你读一本书,叫《Debugging: The 9 Rules》。可以从图书馆借来,或者让公司买一份。这本书读起来很轻松,而且教授了一个很重要的技能,其他“初学者编程”书籍几乎都没怎么涉及。
-
有那么一天,你会突然发现一种编程的“正确方法”,这种方法似乎让一切都
“豁然开朗”。你会坚信,如果大家都采用这种方法编程,整个领域都会更好。对我来说,这种方法是测试驱动开发;而对你来说,可能是函数式编程、Lisp、形式化方法,或者其他无数种可能。
我不会告诉你不要对“正确方法”着迷,因为这几乎不可能。而且,坦白说,发现这种方法的感觉很棒,人生苦短,何乐而不为呢。但你需要意识到自己正在被这种方法吸引,尽量不要让自己沦为“一切皆正确方法”的代言人。随着时间的推移,你会发现,无论采用哪种“正确方法”,编程总会让人感到挫败和混乱,而且你也可以不按照那种方法,依然能开发出优秀的软件。你会逐渐了解到五十种其他的“正确方法”,并学会根据具体问题灵活运用它们。
-
当你第一次遇到“正确方法”,很可能是从一个完全沉迷其中的人那里了解到的。但别对他们抱有偏见。也尽量不要把这个方法的本质和那些人的宣扬方式混为一谈。大多数观点都需要从最纯粹的形态上做些调整,才能和其他观点更好地融合。
-
Julia Evans 曾经提到,“每个最佳实践背后都有一个恐怖故事。”如果你不理解某个最佳实践,试着找出激发它的那个恐怖故事。这可能会让你对这个最佳实践有更深的理解。也可能你会发现,这和你毫不相关,那你就可以放心地尝试其他做法了。
-
接着上一个建议说:很多最佳实践和惯例都是“路径依赖”的,它们是由历史和文化因素共同作用的结果。我们之所以采用某些做法,是因为我们的导师这么做,他们这么做是因为他们的导师这么做,后者则是为了解决现在已经不那么重要的问题。如果你听到的某个做法听起来像是个“恰到好处”的故事,它很可能就是。如果你愿意,通常可以追溯到整个做法的发展历程。
-
多散散步。
-
你使用的每个工具都有其不为人知的深层次,无论是编程语言、git 还是 JIRA。你不必成为每一项工具的专家,但值得花 5-10 分钟去深入了解它们的更多功能。
-
尝试和公司其他部门的人交流,比如客户支持、业务领域、销售等。如果有时间,可以考虑跟他们学习一下(当然,前提是你乐意这么做)。你会惊讶于自己能学到什么!
-
如果可能,试着在职业生涯的早期尝试几种不同类型的编程。这并不意味着你得换工作:大多数公司同时进行着多种编程工作。比如,你在一家 Web 开发公司开始工作,可以尝试前端、后端、运维、数据库等不同领域。这不仅有助于你的学习,更重要的是,它能提高你找到真正喜欢的软件工作类型的机会。我第一份工作是做前端开发,那时候我很不开心。后来,我转到后端开发,不仅自己更快乐了,那些更热衷于前端的同事也更满意了。
-
你可能已经听说过,软件领域一直在变化,并且不应该盲目追随技术流行趋势,而是应该专注于学习基本技能。这个建议没错,但它没有解释“为什么”。由于结构原因,软件领域的信息传播速度极快。这主要是由互联网、开源项目、会议等因素造成的,总的来说,软件领域中分享想法的障碍较低。因此,即使只有一个人使用某个项目,也很容易让很多人了解到这个项目。
这就是为什么你听说的许多技术,实际上用户基础非常小,而且可能永远不会广泛流行,但从它们的传播方式来看,你可能会有完全不同的感觉。因此,保持一定的保守态度是明智的。如果你听说了某个让你兴奋的新技术,不妨成为早期采用者;否则,等上几年,看看这个技术是否真的有实用价值也是个不错的选择。
-
归根结底,我们谁都无法预测未来,就像我们无法预测当前一样。尽你所能做得最好,按照自己的价值观生活,享受这一路的历程。
今年的建议就到这里,我休假归来会公布新的研讨会日期。2024 年再见!