当前位置: 欣欣网 > 码农

给大二学弟的建议:技术不是用得越多越牛逼!

2024-05-17码农

大家好,我是程序员鱼皮,今天分享一个 90% 以上初学编程做项目的同学都会遇到的问题 —— 做项目时,盲目使用技术。

1

事情是这样的,编程导航里一位大二下的学弟前段时间找我做了好几次咨询,说自己已经学了很多微服务、中间件相关的技术,比如 Dubbo、Nacos、RocketMQ 等等,但是学完感觉没什么收获,很多知识和技术感觉并没有掌握。

这是很多初学初学编程同学的通病:学完技术不去用,结果过段时间就忘了。

所以我经常跟朋友们说,当你学完一个新技术后,要第一时间想着做项目,在项目中实践,知道怎么根据需求合理地运用技术,才算是掌握了。

因为他才大二下嘛,时间和机会还很多,所以就让他把主要的精力放在提升项目经验上,也让他去读了我的项目学习建议。

鱼皮项目学习建议:https://yuyuanweb.feishu.cn/wiki/Q4AdwjLDWiLZy0kAjHqcQinon8N

2

学弟很争气,过了没几天,就跟我说要作为队长参加中国软件杯大赛了,然后想问应该如何带领队友开始项目。

我一看,这是好事啊!我也非常鼓励大学生多参加竞赛,尤其是作为队长,可太锻炼人了。

结果让我有点意外的是,这位学弟想报名的赛题名称是 「涉诈 APP 智能识别分析系统」,赛题要求中涉及:APK 文件的解析、特征提取、训练基于 AI 的 APP 研判模型等。。。

然后我给了他几分钟的语音回复,学弟表示有点感动 hh。

我当时给出的核心建议大概是:参加比赛前首先要做的不是思考怎么具体去实现某个赛题,而是要先想明白参加比赛的目标和意义,比如为了获奖、为了提升自己,还是别的什么。参加比赛是好的,但是要选择和自己求职方向、擅长方向相关的比赛,目前这个赛题的核心难点不在于后端开发,会有更专业的学信安的同学来参加,获奖概率也不大,所以个人认为参与的性价比不高。更何况这位学弟的队伍只有 3 个人,还都是软件工程专业的,基本没什么竞争力了。如果实在要参加,就需要找到合适的队友,大家分工合作。

3

学弟很开窍,没过几天,就跟我说他们又换了一个赛题,这次要做一个结合 AI 大模型的 Java 应用。并且还参考我之前的建议,做了功能模块图和技术选型,现在想让我给点建议。

我看了他们的功能模块图,设计的简直太好了!功能简直太全了!

但也正是因为 「功能太全了」,给我的感觉是他们要开一家公司去做成熟的产品了,而不是要参加一个小比赛。

举个例子,他们要做的是一个 AI 工具,结果功能模块图里面有:用户素材库、数据可视化、多媒体提取、VIP 会员、消息通知、评论、热点发现等等。。。

于是我的第 1 个建议是:这么多需求,先做哪个后做哪个?有些功能真的有必要做么?

我大学时刚开始参加竞赛、包括刚开始做自己的产品时也是这样的,总想着功能越多越好,但是常常忽略了做新功能的意义,忘记了目标。比如现在这位学弟的目标是竞赛获奖,那么应该把重心放在能给比赛加分的、核心亮点功能的开发上,比如 AI 模块,像 VIP 会员、消息通知这些功能,都不是核心需求,也不影响核心业务流程,对竞赛来说都是可有可无的。

第 2 个建议是:找到你觉得最难实现的功能,并思考如何实现?有没有卡点?

我相信很多刚开始做项目的同学,是不会去做整体的方案设计和排期的,而是先把自认为简单的功能做出来,比如用户注册登录。但如果最后你才发现 AI 模块搞不定,你前面的 「一顿操作猛如虎」 还有什么意义么?起码对比赛获奖这件事来说,帮助没那么大了。

第 3 个建议是针对学弟的技术选型来说的。这个不涉及什么敏感信息了,都是主流的技术选型,就先给大家看一下吧:

大家看到这个技术选型图,是什么感受?

个人认为,虽然画的不错,技术也列举地很全面,但对于一个比赛来说实在是 「大可不必」!

因为我也是从这个阶段过来的,给大家看看我大学独立开发的、拿去参加竞赛的一个作品。一个在线刷面试题的项目,背后用了微服务、Redis 集群、甚至还搭了大数据集群和区块链节点!

结果去参加比赛的时候,人家才不管你背后用了什么技术,而是要看你是否符合比赛的要求,产品本身是否有亮点。

所以我让学弟思考:这么多技术,真的有必要用么?

做商业项目也是这个逻辑,技术是为业务服务的,应该先尽可能 减少 复杂技术的引入,完成核心功能,再去逐步引入新技术来优化系统和解决问题。不然只会把简单的事情想复杂。

而且即使你真的在比赛中用到了上面那些技术,也已经不是什么亮点了,微服务已经可以说是后端必学的技术。

4

万万没想到,学弟又来找我了,这次他梳理了一些功能模块,并且问我:系统是用单体还是微服务去完成?

首先我看了下比赛要求,没有强制要求使用微服务,也并没有关注后端架构,而是要求开发者必须完成某些功能。而且学弟团队只有几个人。

所以我的答案很明确:先单体再微服务,别把简单的事情做复杂。

结果学弟问我:单体再微服务,那为什么不直接微服务?

老实说,这次我有点哭笑不得,感觉他并没有理解我之前的建议。于是我反问他:你觉得有必要么?微服务的作用是什么?做产品的核心目标是什么?核心功能需要用到微服务来实现么?

思考清楚这几个问题,我想这位学弟之后参加比赛做项目的时候,能够少走很多弯路吧。


大学时期,我看过太多同学认为 「技术用得越多越牛逼」(包括我曾经也是这么认为的),结果比赛无法获奖;工作之后,也看过太多程序员把 「各种高大上的技术挂在嘴边」,结果业务需求都理解错了。

当然,如果是为了自己学习成长而做项目、运用技术,是完全没问题的。还是那句话,想清楚自己的诉求,并且针对诉求去设计和安排工作吧,共勉!

👇🏻 点击下方阅读原文,获取鱼皮往期编程干货。

往期推荐