新手程序员写项目疑问

2020-03-07 00:24:31 +08:00
 Leslie5205912

我现在大三,然后有在网上接到项目赚点外快,项目大概涉及的就是 linux 端 sdk 的对接使用,c/s 架构,用到的开发工具是 qt,linux 端语言也是 c++,以及用 python 当作胶水 其实这些我都是依样画葫芦做出来的,碰到啥不会,比如 qt 怎么创建一个 server 实例,怎么去继承 qtcpserver,怎么重写 incomingConnection 函数,以及现在做到的怎么对接阿里云,用到的 opencv 怎么去识别人脸,python 怎么去调用 c++.so ,这些都是网上直接找 demo,然后修修改改,现在就是做出来的东西稳定性不太行,会经常出来一些意想不到的错误,但是大多数都能解决,但是就是没办法一次写成那种 bug 很少的程序,以及很多东西网上找不到 demo 我就没办法自己创造了,想知道程序员是不是就是这个工作模式还是应该去学好基础一步一步向上?还是说这种东西做久了,有经验了,吃的苦头多了,以后写出来的程序稳定性也高了? 其实有时候也在想自己到底适不适合这个职业,其实我大学 3 年一直在想,一个是大家都在说的确实很累,但是想想其实哪个职业不累呢,一个是碰到 bug,碰到走不通的路,我有时候真的很想放弃,写程序兴趣是有的,实现一个功能,我都会很开心,相反,测试给我疯狂发 bug,这种时候心情就会差到极点 想知道你们的成长途径是怎么样的? 我现在定的方向是以后做音视频应用开发,在看雷霄骅写的 ffmpeg 相关博客,不怎么看的懂哈哈

4095 次点击
所在节点    程序员
29 条回复
rapiz
2020-03-07 00:34:00 +08:00
遇事不决看文档
Leslie5205912
2020-03-07 00:38:41 +08:00
@rapiz 只看文档的吗都?
felix021
2020-03-07 00:43:03 +08:00
建议
1. 把 算法、数据结构、操作系统、计算机网络、数据库 这几门核心课程吃透
2. leetcode 多刷题,200 道起
3. 阅读一些架构类的书籍,例如 headfirst 设计模式,大型网站技术架构
4. 刷一些面经
5. 找个实习(尽量是大厂),然后到大厂至少待两年
janus77
2020-03-07 00:43:18 +08:00
世界上没有无 bug 的程序,写多了就越来越少了。改过的 bug 要记住减少再出现的可能性
Leslie5205912
2020-03-07 00:54:56 +08:00
@felix021 算法刷过一年 acm,数据结构自认还学的不错,计算机网络不想看底层的什么链路层这些的,只想学应用层,操作系统和数据库一般,leetcode 应该有 200 了,架构类我确实可以去看看,第三点我基本都没听过,大二暑假在创业公司实习过,被坑了一天才一百还累,不过经验确实有积累
Leslie5205912
2020-03-07 00:57:38 +08:00
@janus77 确实,如果自己写的程序不会出现那种严重性的 bug 真的会好开心
aabbcc112233
2020-03-07 01:03:45 +08:00
基础打牢固,先用常规套路干活,不要自己想着乱来,多学习设计模式和项目架构。
tomczhen
2020-03-07 01:17:27 +08:00
软件工程是实践类型,虽然会包含技巧类型的算法,但是想把工程实践做好,还是需要实践经验。实践经验可以通过直接参与项目获得,也可以通过一些分享渠道获得,典型的比如设计模式等等,而练习算法对提高实践经验没有帮助,不如弄本≪代码大全≫看看,顺便吐槽下书名的翻译。

在实际项目中,代码结构不那么优雅,实现丑陋是很正常,很合理的结果。既然是工程,那么就要考量成本,在成本内实现可接受的结果就是成功的项目,提供超出预期的成果,比如可维护性等等,额外付出成本终归还是要有人承担。

从功能上讲,核心部分决定项目价值,以你的项目为例,核心功能应该是 OpenCV 的识别算法,至于 gui 那边,有 bug 很正常。因为如果 OpenCV 这块无法满足要求,其他部分再怎么完美也是不可接受的。
felix021
2020-03-07 01:22:58 +08:00
@Leslie5205912 基础还是要补一补,你不知道底层的大致原理,做应用层遇到问题,往往会没有思路,无法解决。到大厂历练两年,看看工业界的实践,无论是技术,还是方法论,都会让眼界开阔很多,到时候这些问题都不会困扰你了。
Leslie5205912
2020-03-07 01:43:47 +08:00
@felix021 好的谢谢你,我道路清晰很多
Leslie5205912
2020-03-07 01:46:11 +08:00
@tomczhen 好的,明白了,多吃点 bug 的苦,我会去研究研究设计模式,这个本来确实不在我的视野范围内,我本来定的就是研究熟悉 ffmpeg,然后做点相关的项目就去当个视音频应用开发工程师
cassyfar
2020-03-07 02:16:52 +08:00
找个大厂进 这样你复制粘贴得就是大神们的代码 然后抄作业抄熟了 你也就 bug free 啦
xdtr
2020-03-07 09:09:52 +08:00
“网上直接找 demo”,这个不怕,都是这么过来的,关键是得知其然也要知其所以然
“没办法一次写成那种 bug 很少的程序”,多写代码多 debug 就好了,这就是个经验问题
多做笔记,小黄鸭调试法,力扣刷题提升姿势水平,慢慢来不要急~
yangzhezjgs
2020-03-07 10:33:24 +08:00
给你几点建议:
1 补计算机基础,推荐你去看袁春风的《计算机系统基础》和袁老师在中国大学 mooc 上的网课,这门课是本土化的《深入理解计算机系统》,引用一下它的授课目标:通过本课程的学习,使学习者能从程序员角度认识计算机系统,能够建立高级语言程序、ISA、OS、编译器、链接器等之间的相互关联,对指令在硬件上的执行过程和指令的底层硬件执行机制有一定的认识和理解,从而增强在程序调试、性能提升、程序移植和健壮性等方面的能力,并为后续的“计算机组成与设计”、“操作系统”、“编译原理”、“计算机体系结构”等课程打下坚实基础。
2.补软件工程基础,推荐南京大学的教材《软件工程与计算》卷二,重点看看软件设计部分,会让你对软件可维护性,重用性等有更深入的理解。
3.视音频可以看 imooc 网的实战课 https://coding.imooc.com/class/415.html,我对这方面不了解,只是恰好之前看到过,就推荐一下
jinmaoi
2020-03-07 12:00:02 +08:00
只有写得多了,遇到的问题多了才能真正的明白这些玩意.我不推荐楼上这种直接让你看大部头书.只有写项目的时候发现自己薄弱点在这里然后有的放矢才能有效果,像我之前学网络原理的时候只是知其然,等到自己写 HTTP 服务器的时候反回去看才能做到真正的融会贯通.
lewinlan
2020-03-07 13:18:41 +08:00
抄别人的代码当然会『稳定性不行,经常出意想不到的 bug 』。
想要代码稳定,最好的办法就是选一门靠谱的语言,自己造轮子,这样每个细节你都清楚。然后发现大问题就重构,重构个三四五六遍绝对够稳定了。
当然,老板不会允许你这样做。所以实践中就是抄别人的然后不停地改 bug,习惯就好。
Leslie5205912
2020-03-07 13:19:10 +08:00
@xdtr 哈哈哈谢谢你我就想要点鼓励来着
Leslie5205912
2020-03-07 13:20:10 +08:00
@lewinlan 凭空写出来一项功能对我来说有点难,通常就是借鉴别人做好的 demo
Leslie5205912
2020-03-07 13:21:53 +08:00
@jinmaoi 确实,心态不同,而且总会想现在看的我到底用不用的到,反过来反而效率高点,我现在就是想确认我这样的走一条程序员的路对不对
Leslie5205912
2020-03-07 13:23:00 +08:00
@yangzhezjgs 谢谢我会借鉴的,第二点我会去看一下,计算机底层涉及到什么信号这类的我就头疼哈哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/650577

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX