经常发现有人在网上提出这样的问题,现实中也确实有不少人在经历了3-5年的Windows开发之后就开始迷失方向,每天浑浑噩噩混日子,可能是因为这个问题粒度太大,没人愿意花时间回答,希望本文可以抛砖引玉,给大家节省些时间,同时也希望园子里面的兄弟们能尽力的补充,从而使这篇文章可以帮助更多的后来人。
Windows开发首先必须学习的就是操作系统的API,因为其他的一切都是构建于OS之上,所谓九层之台,起于垒土,如果你对linux的系统调用很熟悉就会发现其实他们大同小异,都是应用程序在使用系统提供的功能。
接下来是MFC,有了MFC你才真正的可以干点开发,因为MFC实在是太全了,几乎封装了所有的Windows API, 消息循环,COM实现…
到了此地,你可以开始学习调试技术了,熟悉了调试的各种技巧才可以做到事半功倍,得心应手。
接下来是组建对象模型COM,作为windows的基石,不懂COM,很难说自己精通windows编程,因为即使现在的.NET framework也是构建于COM之上,很多问题还是需要SOS到底层去调试。
当你懂得了COM的精髓,你应该开始学习ATL了,这个类库可以使你的COM开发更加得心应手。
说到ATL就不能不提到他的前辈STL,这个出自于标准C++的类库在windows上同样也得到了很好的支持,有了STL在你有一天想转linux开发也同样会用得上。
Windows 8中的WinRT现在还没有应用于实际开发,现有的技术中.NET 是非常值得学习的,因为.NET 的主旨是提高程序员的开发效率,在这个浮躁的世界,开发效率有时候能够代表一切。
从COM到.NET只有一步之遥,.NET 其实是从COM+演化而来,具体细节请参看 Don Box的《.NET 本质论》了解了这些会使你对.NET的认识上升到一个新的层面。
接下来是C# 因为这家伙是.NET的嫡系部队,除了IL,这家伙可以说和.NET 的关系最为亲近,大部分的新功能都会最先在其中加以体现。当你熟悉了C#, BCL,《CLR via C#》可以说这个时候你已经可以胜任基本的C#开发了,可以很快写出一个小工具,完成一个相关的task。
接下来是WCF和WPF,做分布式开发少不了WCF,同样华丽的界面少不了XAML,WPF。
大概罗列了一些,其实每个主题仔细探究下去都很有韵味,还有需要说的是,其实Windows上面好多的东西都和UNIX很像,比如PowerShell明显是为了像UNIX一样,给开发者提供一个更强大的shell, 如果有兴趣,触类旁通一下,也很是有趣。
还有:
LINQ改变了我们的数据操作方式,统一了数据操作模型,经常操作数据的兄弟,你值得拥有。
F#作为一种函数式编程语言也很值得研究,由于本人使用不多,在此不作评价。
另外:
作为基础的算法;
作为提升功力的设计模式,UML;
作为改善系统性能的重构;
作为大部分分布式核心的TCP/IP;
等等主题也是值得大家研究的。
最后借鲁迅的话收尾:其实地上本没有路,走的人多了也便成了路,希望大家不要把时间都浪费了,原来还有好多东西可以去钻研。
不当之处望大家批评、指正、拍砖, 并提出您的宝贵的意见和补充。
评论列表
对于大多数人来说,我反对这个路线:
当你懂得了COM的精髓,你应该开始学习ATL了,这个类库可以使你的COM开发更加得心应手。
说到ATL就不能不提到他的前辈STL,。。。。
如果任何人有这种想法,那么他会成为学完少林72绝技的达摩院长老。
却永远出不了藏经阁。
应该会和照顾韦小宝的那个武痴高僧一个德行。
并且很多技术在缺乏场景的情况下,要想学到精髓是很难的。
一定是一个事倍功半的努力。
懂得了COM的精髓?
有多少人敢于凭良心说自己有这个能力?
100个使用C\C++的程序员里会有10个么?
因此是不是就是说剩下90个不应该开始学习ATL?
适合大多数人的学习路线是:
学以致用,因用而学
所以楼主后面的一些推荐我还是赞同的
那就是永远拥抱主流技术,而不是所谓的经典技术
学习的真正目的是:
学其神而忘其形
当你能把COM的精髓使用到C#代码的架构设计的时候
你才算真正懂得什么是COM
此时,你会把你曾经的所有各种方面的经验,在未来不可知的技术领域发扬光大。
而如果因为精通了COM但只会按照best practice去使用COM。
那只是学会了“术”而没有学会“道”
那么,未来的路就是很漫长的
COM,ATL,STL,再往下还有汇编,甚至是CPU微代码
.NET,WPF,WCF,WFF
同步处理框架,验证框架...
.NET类库及其官方扩展已经足够写N本砖头了
在加上系统部署,服务器家族的配置和整合应用
总之,哥不想老死在达摩院里
如果说学IT技术如同学武功,九阳神功才是大家最应该去追求的,用经验去快速获取经验的能力才是真正的能力。
江湖上应该有哥的传说
当你懂得了COM的精髓,你应该开始学习ATL了,这个类库可以使你的COM开发更加得心应手。
说到ATL就不能不提到他的前辈STL,。。。。
如果任何人有这种想法,那么他会成为学完少林72绝技的达摩院长老。
却永远出不了藏经阁。
应该会和照顾韦小宝的那个武痴高僧一个德行。
并且很多技术在缺乏场景的情况下,要想学到精髓是很难的。
一定是一个事倍功半的努力。
懂得了COM的精髓?
有多少人敢于凭良心说自己有这个能力?
100个使用C\C++的程序员里会有10个么?
因此是不是就是说剩下90个不应该开始学习ATL?
适合大多数人的学习路线是:
学以致用,因用而学
所以楼主后面的一些推荐我还是赞同的
那就是永远拥抱主流技术,而不是所谓的经典技术
学习的真正目的是:
学其神而忘其形
当你能把COM的精髓使用到C#代码的架构设计的时候
你才算真正懂得什么是COM
此时,你会把你曾经的所有各种方面的经验,在未来不可知的技术领域发扬光大。
而如果因为精通了COM但只会按照best practice去使用COM。
那只是学会了“术”而没有学会“道”
那么,未来的路就是很漫长的
COM,ATL,STL,再往下还有汇编,甚至是CPU微代码
.NET,WPF,WCF,WFF
同步处理框架,验证框架...
.NET类库及其官方扩展已经足够写N本砖头了
在加上系统部署,服务器家族的配置和整合应用
总之,哥不想老死在达摩院里
如果说学IT技术如同学武功,九阳神功才是大家最应该去追求的,用经验去快速获取经验的能力才是真正的能力。
江湖上应该有哥的传说
MFC过时了,COM如果你真的研究过我相信你就不会早早把它说出来,因为COM的精深犹如metaprogramming,随随便便说会玩的不是智商260就是懂了ABC就说自己英语精通的。
WCF和WPF技术点面向受众不同,做WPF可能一辈子也不需要用到WCF,反之亦然。当然在中国这种老板找人恨不得你是奥特曼的条件上,一切“奇迹”都有可能发生。
我没有任何恶意也不针对博主,只是想说,全文只是把很少数的一些基于windows platform的技术罗列而已。
我先发表下我的看法,作为一个windows程序员,你有追求的前提下,理解OS工作方式,看看发布的学术代码,看看文件系统,EXE怎么执行,很基础的windows技术,这些才是最重要的,知识需要整理,一味的去最新潮技术,把流行技术挂在嘴边,看起来很牛逼,对自己内功没有什么太大帮助。
WCF和WPF技术点面向受众不同,做WPF可能一辈子也不需要用到WCF,反之亦然。当然在中国这种老板找人恨不得你是奥特曼的条件上,一切“奇迹”都有可能发生。
我没有任何恶意也不针对博主,只是想说,全文只是把很少数的一些基于windows platform的技术罗列而已。
我先发表下我的看法,作为一个windows程序员,你有追求的前提下,理解OS工作方式,看看发布的学术代码,看看文件系统,EXE怎么执行,很基础的windows技术,这些才是最重要的,知识需要整理,一味的去最新潮技术,把流行技术挂在嘴边,看起来很牛逼,对自己内功没有什么太大帮助。
学无止尽。
初学者应该学好算法,数据结构,语言知识,数学知识等基础,因为你不知道将来工作是面向什么方面,所以你要学习将来能派上用场的基础知识。
如果你是要开发应用程序,偏重数据管理的,就要学好SQL语言,偏重算法的就要学好相关行业的算法。
如果你是在windows下面开发应用程序,而且要求性能高,通用性高的,学c++是比较有意义的,如果是商务方面的,辅助性工具的,学c#等会比较合适。
如果你学网站开发,那么html,xml,css,javascript都是必须要学习的。然后还要学习美工知识,和作图软件。
如果你是做企业开发,c# + aps.net还是不错的。
如果是一般的游戏开发,c++是必要的。
如果是嵌入式,c语言是很必要的。
如果你要用面向对象,那么c++,c#是一个很好的基础,设计模式,敏捷开发之类的是很好的扩展。
如果是游戏开发,算法和数学是很重要的。
总结:
1。训练编程基础是永恒的主题
2。相关行业的背景知识,基础知识,和相关的辅助工具
3。特定情况下需要的附加成本,比如交流的技巧,团队开发的知识,项目管理的知识,人际关系等
4。不停更新换代的编程框架
5。新锐的编程视点,新奇的模式等
初学者应该学好算法,数据结构,语言知识,数学知识等基础,因为你不知道将来工作是面向什么方面,所以你要学习将来能派上用场的基础知识。
如果你是要开发应用程序,偏重数据管理的,就要学好SQL语言,偏重算法的就要学好相关行业的算法。
如果你是在windows下面开发应用程序,而且要求性能高,通用性高的,学c++是比较有意义的,如果是商务方面的,辅助性工具的,学c#等会比较合适。
如果你学网站开发,那么html,xml,css,javascript都是必须要学习的。然后还要学习美工知识,和作图软件。
如果你是做企业开发,c# + aps.net还是不错的。
如果是一般的游戏开发,c++是必要的。
如果是嵌入式,c语言是很必要的。
如果你要用面向对象,那么c++,c#是一个很好的基础,设计模式,敏捷开发之类的是很好的扩展。
如果是游戏开发,算法和数学是很重要的。
总结:
1。训练编程基础是永恒的主题
2。相关行业的背景知识,基础知识,和相关的辅助工具
3。特定情况下需要的附加成本,比如交流的技巧,团队开发的知识,项目管理的知识,人际关系等
4。不停更新换代的编程框架
5。新锐的编程视点,新奇的模式等
转自:http://www.cnblogs.com/pugang/archive/2011/11/26/2264107.html
看来楼主学习了不少东西!~
我走webForm开发路线,所以一直没有学习WCF和WPF,不过其他的对于走微软路线的开发人员应该学习的东西都是一样的吧!
特别市内功的锻炼尤为重要!