哈喽,我是Python新人,刚学了十四天。昨天写完了一个出题工具,兴奋地发了朋友圈,结果被大佬朋友私信:“兄弟,你这代码……挺有特色的。”
他说的很委婉,但我听懂了——我的代码是屎山。。。

一、 能跑 ≠ 能看
我的工具:用Tkinter搞GUI,还能处理Word文档生成题目。听起来是不是还挺厉害的?毕竟大多数初学者连GUI都不敢碰。
但大佬一句话把我打回原形:“你这玩意能跑只是Python宽容,换其他语言早崩了。”
总结我的代码问题:
“结构混乱,耦合严重,命名随意,错误百出,一股刚学Python的‘骚味儿’。”
二、 GUI代码一锅炖
我的代码结构是这样的:
所有东西都塞在一个类里——数据、UI、业务逻辑全混在一起。写着爽,改起来要命。
正确做法应该是:
就像做饭,你不能在同一个锅里切菜、炒菜、装盘还刷锅吧?
三、 看似封装,实则糊弄
我在 create_widgets 里调用了 create_branding、create_settings 等方法,看起来挺“模块化”?
大佬说:“这是典型的刚学会封装就滥用。”
每个功能区应该写成单独的类:
这样清晰多了,每个部分管好自己的事。
四、 变量命名,随心所欲
看看这个:
大佬说:“你创建了但没用啊!典型的‘学了语法糖但不知道干嘛用’。”
还有我的变量名:folders、counts、count_vars、*_entry……一堆堆的,自己都分不清。
好名字应该是这样的:
一目了然,多舒服。
五、 低级错误,复制粘贴的锅
我代码里有这么一句:
大佬直接笑出声:“你这明显是复制粘贴没粘全啊!”
应该是 from datetime import datetime。这种错误IDE会直接标红,但我硬是没注意。
建议:用专业的IDE写代码(PyCharm、VS Code),红色波浪线别无视!
六、 连“入口”都没有
我的程序直接写代码,没有:
大佬说:“这就像写作文不写标题。你的代码只能直接跑,不能测试、复用、打包。”
七、 Tkinter?该换了
Tkinter学习成本低,但坑多、老旧、难扩展。现在连高中生都不怎么用了。
推荐替代方案:
Tkinter容易养成坏习惯,早点放弃比较好。
八、 Word文档处理,小心踩坑
我用的是 python-docx,大佬提前警告:
中文字体和格式容易出错
插入图片路径错了直接崩
文档样式控制不精细
建议先研究明白docx.styles 结构,不然输出就是“排版灾难”。
九、 到底是不是屎?
大佬说了一段让我沉思的话:
“屎不屎是阶段性的。如果你现在觉得不是,以后看一定觉得是。”
“写出屎是进步的标志,意识到屎才是真觉醒。关键是写完要回头看,学会‘重构’而不是‘堆代码’。”
我能把Tkinter界面写出来,至少敢动手、敢尝试。剩下的,就是学会拆逻辑、分责任,写得干净点。
十、 下一步该怎么做?
大佬给了具体建议:
重构项目,拆成三层:
UI层(Tkinter)
核心逻辑层(题目生成、Word导出)
配置数据处理层
学写测试,用 unittest 写几个测试用例,尤其是出题逻辑
每学新模块,就“写demo + 重构”,而不是一味追新
上GitHub,把项目传上去,写注释,哪怕没人看
写在最后
大佬的最后一句话让我释怀了:
“写得再屎的代码,只要能跑、能学,都是值得骄傲的第一步。”
“写出屎山不可怕,最怕的是——你不自知、不回头、不优化。”
“你现在知道自己写得屎,那你已经比我当年强了。”
所以,我决定:
继续写,继续学,每个月重构一次代码。
半年后我再回头看这个项目,说不定会骂:“这谁写的?真想打人!”
但那时候,我应该已经写出不那么“屎”的代码了。
本文基于真实经历改编,献给所有在Python学习路上挣扎的新手们。
【记住:每一个优雅的程序员,都曾经写过屎山。 🚀】