给刚学编程的朋友们

原本从不在csdn写blog的,最多回帖而已。 但是今天当我想要回贴的时候, 发了n次都说验证码错误,而我确定验证码肯定无误。 那帖子说的是建议大家在初学c/c++时都是有vc什么的,我强烈反对,由于这对于新手来说影响可能非常大,我就曾经受到会vc/mfc的毒害,所以把我要说的话写在这里,希望能给你些前车之鉴。

刚学c/c++的时候,使用vc并不好,因为那时候你要学习的是怎么使用c/c++语言,怎么使用标准库,使用它们来编程。另外,如果能够学会怎么写makefile那就更好了。这些才是真正的程序员应该知道的东西,懂了这些之后,使用哪一个ide都可以轻松上手。

而vc或者其中的mfc类库并不值得学习,即使从学习OOP的角度来讲,mfc也是设计极差的类库,充其量是反面教材。并且,不使用makefile而直接使用vc的后果是,程序员都变成傻瓜了,只知道“项目文件”,却不知道后面到底发生了什么,不知道代码是怎么编译和链接的,危害极大。

在你把一个学期的c/c++学完之后,就应该抓紧时间多写一些程序了,没必要写什么GUI,图形用户界面的,重要的是你要实现什么功能。 个人认为在gui上面花时间也是浪费。可以多上sourceforge看看,那里有很多优秀的开源项目,你可以和几个同学一起找一个来做,哪怕实现同样的功能都好,重要的是你要多实践。另外,找一个优秀的开源项目(比如apache, berkeley db, mysql等),读一下里面的源代码。即使读不完, 对你的影响也是很大的,你可以看到别人怎么高效的使用这个语言,要知道,学好编程最重要的就是自己多写代码以及多读别人的优秀的代码,这和学习英语类似。

对于开发工具,强烈建议使用开源的工具链(gcc, make, gdb),只有你用过了这些工具链,自己写过makefile,你才知道大一点的软件是怎么编译、链接的, 那些IDE会把你变成傻瓜的。你可以看看那些优秀的开源软件的创建(build)流程, 如何configure, 如何make, makefile是怎么写的。

经过这样的实践,你应该学会怎么使用c/c++(对其他语言也适用) 编程, 怎么编译、链接、怎么make,怎么写makefile, configure和make是在干什么,等等。我有个同学在zx工作,说他们部门现在已经很少有人精通写makefile了,他们的产品的makefile只能略微修改,没人懂全部内容,不敢大改动。也许这就是诸如vc这类ide带来的恶果。

不要急着学windows编程,不要急着用vc/vb这类东西。windows世界只是软件世界里面的冰山一角, 你进入了这里之后, 眼界和能力都很大大受限; 装上linux,进入开源的世界,你会发现,原来软件世界可以如此精彩, 最优秀的操作系统、数据库、web服务器、浏览器、播放器,甚至视频服务器, 甚至各种算法(图像识别、人工智能)等等, 都在这里。 在这里学习, 你会发现你可以知道你想知道的一切, 因为你总是有源代码和丰富的文档可以看, 相关的产品论坛上有很多热心人帮助你,你可以知道里面发生了什么, 自己哪里犯了错误怎么改正等等。

你要知道, 当今世界上开源软件在各个领域都有最优秀而杰出的代表,它们已经形成了一个软件生态系统,从操作系统(linux系列)到数据库(postgresql, berkeley db, mysql, sqlite)到web服务器(apache, tomcat)到网页浏览器(firefox),到上层的应用系统,比如ERP, CRM, SCM等等, 开源软件都有举足轻重的作用。事实上,这些开源软件在很多方面远比同类型的不开源软件要好。因为全世界的软件开发人员都可以参与其中,对它进行测试、找bug,改bug, review源代码并提出意见, 所以其生命力极强-----他们不是一个人在战斗。这个世界上就是有那么多人对开源事业着迷(有很多也是有实际的工作、业务需要),愿意免费做上面那些工作。 相比而言,不开源软件只有开发团队的少数人在设计、编码、测试,能力要差的多。 所以,想要在软件领域有所作为的话,务必拥抱开源,远离以微软为首的毕源组织。

我写上面的文字的时候,满激动的,因为我本人是在工作之后,才进入开源的世界,感觉和开源社区相见恨晚。上面所言都是我的切身体会和亲身经历。不是我憎恨微软, 我是在实事求是的说话, 目的只有一个, 希望师弟师妹们能够不走前人的弯路, 毕竟青春时光宝贵, 高效的学习之后, 剩下的时间可以谈恋爱, 享受美好的大学生活,而不是把时间浪费在学会windows、vc编程上面。 跟着微软跑没有前途的。 另外,当你工作后不得不用vc,不得不用mfc的话,有你在开源世界摸爬滚打的经验, 用到的时候再学一点不迟。 有人说vc、mfc很高深,其实不是, 而是vc易用性方面很差(vc8有所改进),mfc设计很差罢了。另外,即使你要学的不是c/c++而是其他,比如java, 上面的话同样适用。


你可能感兴趣的:(程序员,学编程,C++语言)