2023年7月18日发(作者:)
mfc画图程序源代码_我的程序员⼊门之路我⼤学的专业是软件⼯程。那个时候(我09年毕业),ACM等各类算法竞赛在⼤学还不是特别地流⾏。专门搞算法的同学不多,我也没有特地去训练和参加算法竞赛,所以我有很多的时间。然后这些时间都被我花在了⾃娱⾃乐的项⽬和看各种系统的源代码上了。我看得最多的源代码是linux 内核。看linux内核源码,于我算是件很享受的事情。我天真地以为内核⼏乎包含计算机⼯程所拥有的全部知识和技巧,觉得只要能看完并学会内核的全部,就可以天下⽆敌。虽然⽐较天真,不过这种天真却带来了极⼤的兴趣。⼀开始接触内核,是因为在逛图书馆的时候,⽆意中发现了 ⽑德操 ⽼师的 《Linux内核源代码情景分析》, 厚厚的⼀本书。记得书的开篇,讲了linux 内核⾥⾯,⽤C的宏,巧妙地封装了⼀套链表的操作。当时觉得很神奇,然后就借回去宿舍看了。⼀开始看得云⾥雾⾥,连linux 是个啥都不知道。后来慢慢了解了linux , 还知道了 linus 这个传奇⼈物,特地去看过他的⼀些历史事迹。从他的各种访谈中,⼜发现了 minix, 还有⼀本由Andrew aum 教授写的《操作系统设计与实现》。 当年linus , 就是受到 minix 的启发,开始了linux 项⽬,如今linux 却⼏乎统治了服务端。少年虽然天真,但却满怀梦想。当时的我,对linus的事迹,对linux 操作系统和minix ,真是到了超级崇拜的地步,所以脑⼦⼀热,就有了⼀个神奇的想法,⾃⼰也要写个操作系统。不过,⾃⼰知道,操作系统是个很复杂且庞⼤的东西,不是⼀时半会就能写出来的。那时候,⾃⼰也不急,⼀有空,就看看 《Linux内核源代码情景分析》,或逛逛 minix 的⽹站,或瞄瞄linux kernel 的源代码,没有什么规划,也没有什么压⼒,就这么看着。⼀段时间后,开始知晓,写个操作系统,除了需要会C语⾔,还要会汇编语⾔。后⾯就找了⼀本 《汇编语⾔程序设计》开始看,边看也边照着书上的例⼦抄。汇编学起来,⽐C要枯燥,特别是⼀个简单的操作,⽤C语⾔,⼀句就搞定了,汇编还要写⼀堆,不过还是慢慢学了下来。再后⾯,发现只会⼀般意义的汇编还不⾏,那样只能让你的内核跑在实时模式下⾯,⽽⽆法跑在保护模式下。(这两个概念,感兴趣的⾃⼰查查吧 :) )然后,⼜开始找了相关的书和资料,开始学保护模式的汇编,这个在我印象中应该是最蛋疼的东西,即使现在来看也是。在这过程中,⽆意中发现了⼀本神奇的书 ,于渊 的《⾃⼰动⼿写操作系统》,发现⾥⾯的内容跟⾃⼰想要做的事情相当的接近。当时,有过⼀段时间的犹豫,要不要看这本书,因为当时想要完全⾃⼰来的,不过后⾯实在是太困难,就参照了不少这本书上的实现。写操作系统的过程和看linux kernel 源代码的过程交叉进⾏,还是那种没有明确⽬的,⾃娱⾃乐的项⽬。持续的时间很长,有三年多的时间,不过整个过程都挺开⼼的。所以,当我回过头来,我觉得⼤学,是我⼈⽣最开⼼和充实的阶段。当然这中间还穿插了很多其他的事情和项⽬。⽐如,⾃⼰去⽹上找了拳皇的素材,做了个格⽃游戏的demo,学了点windows 的 MFC ,COM, DirectX ,全平台的OpenGL, 尝试过做3D游戏等等。不过确实也奇怪,我对微软的东西⼀直不太感冒,甚⾄有点反感,可能也是受到不少linux 开源思想的感染吧,对闭源的windows 感冒不起来。操作系统做到后⾯,实现了键盘驱动,内存管理,进程创建,调度,系统调⽤接⼝,还有⾃⼰写得⼀个简单的⽂件系统。当时本想再写个窗⼝系统的(类似Linux 下的 X window)。把⾃⼰的想法说给了隔壁宿舍的⼀个同学听,他很感兴趣,想加进来⼀起搞。我超级开⼼,觉得项⽬踏出了⼀⼤步,终于不再是⼀个⼈了。没过多久,就到了找实习的时候,后来那位同学忙着找实习,也就没有再理会了。⼤三的时候,腾讯来⼤学城招实习⽣。⾃⼰投了简历,参加了笔试,但在笔试环节就被刷了。后来很不⽢⼼,就去霸⾯,结果凭着⾃⼰做的那个操作系统,直接过了两轮的技术⾯试,最后成了腾讯⾸批实习⽣的⼀员。我现在去总结那时候的情况。可以这么说, ⼤学时期的学习⽅式太野,全凭兴趣。虽然⾃⼰的涉猎⾯很⼴,对于感兴趣的部分,也学得深⼊,但是没有做专门的训练,⽐如算法训练,代码训练,导致⼀旦遇到这部分,就容易被卡死。当然,像算法素养,编码素养,这些词,我也是后⾯才听说的。后来才意识到,算法厉害,代码写得规范的⼈,都不是天⽣的,⽽是刻意训练的结果。⼯作后,也花了不少时间去弥补,不过终究还是不能跟专门搞过ACM的同学相⽐。⼤学时期,因为看了不少源代码,包括linux kernel, mysql,tcp/ip ,所以我后⾯做基础架构的时候,对系统的理解要⽐⼀般⼈深⼊,⼯作起来也⽐较游刃有余,这也算是歪打正着了吧 。现在回过头来总结,觉得做⼯程技术的同学,有三⽅⾯的基础素质是必须要打牢固的,不然就容易在某个点上卡住。基础部分这⾥除了我们常说的各种基础知识,⽐如操作系统,⽹络,数据库等的概念,知识外,还包括实际依赖系统的实现机制。⽐如,你是在linux 系统上进⾏服务器开发或维护,你对linux 的内部实现机制不熟悉,肯定要栽跟头的,⽽且路会越来越难⾛。再⽐如,你⽤java, 如果对JVM 的内部实现机制完全不懂,或所知甚少,要往深,往专了做,也是很难。 andriod 开发,也需要理解andriod 系统本⾝的实现机制。所以这⾥是包括了书本知识和实际依赖系统的具体实现机制。书本知识的掌握,⼀般靠看书,看⽂档视频等。依赖系统的具体实现机制,如果是⼯程经验丰富的同学,可能从相应的书或者⽂档也能⼤概推导出对应的代码实现,如果时间不⾜够,可以只看书,不花费太多时间去看源码。不过,如果是⼯程经验不丰富或者刚毕业没多久的同学,还是建议边看书边看源码。这种情况,只看书很容易看得云⾥雾⾥,看完很快就忘了。如果边看书,边看代码,就能从原理到实现都完整地过⼀遍。知道了代码的实现,就相当于是把⼀个思路变现了出来,不容易遗忘,⽽且清楚更多的细节。算法基本功这部分⼀直是我的短板,后⾯断断续续去弥补过⼀些,不过还是太过于业余,应对⼯作算是没有什么问题了。我在学校时候,是认认真真学过算法的。虽然基础的数据机构,基本的算法,细节不⼀定都记得清,但⼤概印象是有的,所以我是直接就刷题,从简单的刷起,对⼀些概念,⽐如⼆叉树,堆等的概念记不清的时候,就翻翻书,复习⼀遍后再刷。但对于没有学过基础数据结构和基本算法的同学,建议不要⼀来就刷题,还是买⼀本算法书,先好好看看,可以避免很多的弯路。刷题很枯燥,有时我也不太喜欢,不过后来我学会沉下⼼来,不贪多求快,我就慢慢地,⼀题⼀题刷,时间不够就不刷,时间够就多刷点,时间长了之后,就慢慢顺起来了。编码素养编码素养的培养,这⾥建议多看⼀些软件⼯程,代码质量⽅⾯的书,类似《代码整洁之道》,还有就是多看⼀些好的开源项⽬的源代码,单纯不断地写代码,编码素养是很难提⾼的。这个是习惯和意识问题,如果你不知道怎样的代码是好的, 你写得再多,也很难写出好的代码来。要有意识的培养这部分。结尾⼤学校招的时候,我误打误撞的进⼊了腾讯,刚开始做过QQ,后来参与微信,⼀待就接近⼗年了,中间也发⽣过很多事情,有空再说说。后⾯,我去总结⼤学时期,学习的情况,发现⾃⼰“偏科”了,漏了算法和编码⽅⾯的训练,这也导致后来栽了不少跟头,希望有缺失的同学,可以重视起来。基础知识⽅⾯,⽂档或书,结合源代码看,带来地效果更好,本⼈亲测,效果杠杠的。有兴趣的同学可以试试。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689610785a270392.html
评论列表(0条)