XY

没有任何借口!!!
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

技术学习杂谈——摘自论坛网友评论

Posted on 2008-02-20 21:59  路缘  阅读(255)  评论(0编辑  收藏  举报
//*******************************************************************************************************
一、
呵呵,看楼主这么有志气,看来后继有人了,偶从底层转出了一段时间了,现从事JAVA,不过还是很怀念当年用汇编和C操纵底层硬件的,一切尽在掌握中的感觉---爽啊,现在的JAVA代码写得偶都要睡着了...。
在这里给楼主点建议:
1.关于c++:对于底层来说c++基本可有可无,主要还是C,不过OO的思想还是每个CODER的基本功,还是得了解了解滴,偶个人不推荐学C++去了解OO,c#和java才是面向对象的典范语言。

2.关于C:楼主要搞底层的话,光看看老谭的入门C是没有用的,C必须相当的精通,要精通的什么程度呢,举个2例子说吧:楼主知道C怎么处理浮点数变量赋值为0的细节吗,知道怎样不写main函数而生成可执行的C程序吗?如果你能不查资料一下子说出了答案来,那你的C才算过关。

3.关于汇编:8086下的汇编只是入门而已,必修罗云彬的《win32汇编》(具体名字我忘了,可以到他的网站上看看,他的书都是底层开发的圣经),一定要在大学期间把这本书吃透。

4.关于逆向:也就是所谓的破解,有兴趣就搞搞,不是十分推荐。因为绝大多数破解的软件的汇编代码非常以读懂,当然了如果你破解水平高的话也能搞出非常经典的代码出来。我有段时间也凑过逆向的热闹,可能因为水平原因反编译出来的代码可读性非常差。

5.底层的的分类是比较多的,主要有嵌入式开发,开源操作系统内核编写,BIOS开发(中国会这个的没有几个),驱动开发,病毒编写(也算是吧),主要是驱动开发和嵌入式开发为主。对于嵌入式:起码掌握一个实时操作系统,我当年做的时候是UC-OS/2火爆(3,4年前,因为免费),现在不知道是什么了最盛行,VxWorks这类高级的等楼主工作才有条件接触。对于驱动的话,硬件电路一定要过关,最起码能熟练的分析电路时序图,而且得知道WIN底层细节如ring0,Linux内核,VxD一定要懂,can总线,USB,1394火线等接口一定要会,当然了接口根据工作的情况而定啦,但最起码要会USB吧。

6.要学底层开发是件痛苦的事情,如过搞驱动的话(本人的老本行),起码要准备精通硬件和软件的两个方面,不容易啊,要学的东西太多了,最最关键要奈得住寂寞,还要忍受许许多多光离陆怪的BUG的考验和无数次死机的打击。学嵌入式,得破点费买点学习工具。

呵呵,最后,祝楼主学习一帆风顺!

顺带补充一下:逆向工程对楼主现阶段帮助意义不大,学习逆向也是非常耗精力的事情,你必须了解工具的使用工具的使用,PE格式,脱壳的技巧,密码学等等等等,它更接近黑客的行为,而不像开发。。。不如楼主把有限的时间投入到有用的事情上。
//*******************************************************************************************************
楼主若问哪本教程,我还真答不上来。我只能说,学编程没有说光看教程、光听课就能精通的一门技术的事情,真的还是动手实践是最关键的;计算机科学是项实践大于理论的科学技术。实践出真知。要学C,我的建议是:看完一本教程就足够了,然后的事情就是要多去动手做点东西,在做的过程中,会不断的积累代码技巧,会领悟到书上的知识点,只有通过动手的过程才能把书上的知识变为自己的知识;2.多上些技术论坛看看别人的文章,别人的问题,自己尝试着解答,尝试着与别人讨论,交流,这样才能提高快速;3.多看看一些高手写的程序源代码,学习别人的构架,吸收别人的代码的精华,为自己所用,CSDN上关于C的源代码多的是,楼主下载了去看就成了。

能做到三点,持之以恒,就足够了。
一般大学刚毕业的学生,一般很难找到底层开发的工作。都是工作一两年后有一定商业项目开发经验了,才转向底层开发的。所以楼主如果对底层开发有兴趣的话,需要大学中把基础学扎实,然后先找个做C/C++的公司锻炼一两年,然后在转入底层开发(我以前同事都是这么过来的,我自己包括我认识的做底层开发的圈子的人都是如此),毕竟大学中学的、做的东西远远够不上商业项目的要求。
底层开发的人员淘汰率很高,许多人因为跟不上知识的更新而离开,毕竟它需要掌握两个领域的知识,而这两个领域都是飞速发展的行业,一年一个样啊。。。
以上是我的一点浅见,供楼主参考。
//*******************************************************************************************************
底层开发范围太广。不过看开源项目肯定能提高很多
1.如果想学习数据库原理   看mysql的源代码
2.如果想学习操作系统,   linux的源代码
3.如果想学习网络,看ace源代码   加上tcp/ip那3本书不错
4.如果想学习图形编程,   ogre源代码,第二人生源代码
5.如果想学习编译器,     看lcc源代码和python源代码
不要光看,要多写代码,即使你觉得自己写出来的代码很垃圾也要不停的写代码,当你代码写到一定的量的时候,你的代码
质量肯定会好很多
不建议去找c++的书籍狂看,因为c++对于初学者来说实在太复杂.其次,c++复杂的部分,比如模板,除非你去写stl或者boost库才可能要熟练掌握,对于开发只需要会使用就可以了