作为Python的初级程序员,在跳到包含所需功能的高级第三方库之前,先构建并了解我自己的库是个好主意吗?
对于这种方法,某些项目(例如Django之类的Web框架)可能太大。但是其他项目(例如Web Crawlers,图形库,HTML解析器)似乎是可行的。
我担心过早依赖第三方库会阻碍我的成长。
注意:这个问题和这个问题似乎更侧重于经验丰富的程序员,他们可能更注重重用的效率,而不是学习的好处。我认为我的问题是针对初学者的。
作为Python的初级程序员,在跳到包含所需功能的高级第三方库之前,先构建并了解我自己的库是个好主意吗?
对于这种方法,某些项目(例如Django之类的Web框架)可能太大。但是其他项目(例如Web Crawlers,图形库,HTML解析器)似乎是可行的。
我担心过早依赖第三方库会阻碍我的成长。
注意:这个问题和这个问题似乎更侧重于经验丰富的程序员,他们可能更注重重用的效率,而不是学习的好处。我认为我的问题是针对初学者的。
Answers:
这始终是一个权衡。
作为一名初学者,在考虑重用代码与重塑方形齿轮时,您应该问自己两个问题:
如果您不必完成项目,那么可以将精力集中在其他人已经解决的复杂问题上,因为您会学到一些东西。但是在“完成”之前,您可能会继续进行其他操作,这可能与您无关紧要。当您进入一个看起来很简单的复杂域时,其他项目将开始显得光鲜亮丽,直到您开始尝试自己解决它为止。
不要痴迷于放弃控制权,因为您会屈从于他人的思维方式。更多地专注于您要完成的工作。
如果您的目标是因为要了解解析器的工作原理而编写HTML解析器,请继续尝试。如果您的目标是编写HTML解析器是因为您想清理用户输入或转换HTML的一些随机位,则您可能专注于错误的事情,因为您可能对解析的应用更感兴趣,而不是对解析本身感兴趣。如果您因为不想花时间去理解别人的库而想编写HTML解析器,那可能是在浪费时间,因为至少在这种情况下,我保证别人会花更多的时间来弄清楚如何可以比您有效地解决此问题。在非常琐碎的情况下,您可以不重用代码来节省时间,而在复杂的情况下,除非您使用的库很烂或者您无法阅读文档和代码示例,
另一方面,我想说的是值得编写自己的图形库,因为您将更加专注于可转移的基本算法和数据结构,即使最终使用它们,它们也可以应用于其他领域。解决这些问题时,其他人的图书馆。
大多数入门程序员都大大低估了问题的复杂性。这导致了许多不愉快的情况,但我仅关注一种情况:他们因为“ for肿”或“过于复杂”而忽略了许多第三方库。然后,他们尝试编写自己的代码来完成相同的工作,并且完全搞砸了,因为他们没有预料到必须处理的所有内容。
进行网络爬网和解析HTML。您似乎对这些任务有一种很随意的态度-这使我相信,除了很小的规模外,您从未尝试过执行这些任务。这只是真正的Web爬网程序需要处理的潜在问题的简短且不全面的列表:
我担心尽早依赖第三方库会阻碍我的成长,使我成为图书馆集成商而不是程序员。
错了
早期依赖第三方图书馆将教好图书馆如何运作。
过早的发展总是浪费时间。在没有仔细研究(即使用)现有库的情况下编写自己的库注定要在整个职业生涯中重新发明轮子,这很糟糕。
我花了许多可计费的时间清理这些混乱。
这句话是第一句话,对我来说在逻辑上是有问题的:
作为Python的初级程序员,在跳到包含所需功能的高级第三方库之前,先构建并了解我自己的库是个好主意吗?
您如何相信自己可以像初学者一样有效地编写高级 (按您的说法)功能库,使其与现有库一样正确,功能完整并经过测试?
这甚至都没有提到您会花费大量时间来重新发明一个初学者不了解的车轮,如果幸运的话,您会意识到自己已经头顶脑袋,必须学习,反正退出图书馆。
以HTML解析为例,您提到这是可行的,没有比初学者Beautiful Soup更好的工作了。简单明了的你会失败。您认为可行的事情没有考虑到巨大的复杂性问题,您没有足够详细地了解问题域以了解复杂性,因此注定要失败。
我的观点是了解别人做了什么,并且已经为您解决了您的问题,直到您找不到解决您问题的方法为止。