【在大学写过不少的文章,最值得留恋的三篇写给科协的关于技术的文章】【一】
【大二的时候负责学校学生科协的技术工作,有机会写这样一篇文章。现在看看,正所谓无知者无谓,颇有一种大言不惭的感觉。不过现在去看这篇文章,会心一笑,暗自佩服一下自己的勇气,想想以后也许再也不会写出这样的东西了。】
写给希望在编程上更进一步的大一学弟、学妹
因为在科协技术部工作,举办如编程俱乐部、C++试点班、ACM/ICPC培训等活动,有了更多的机会和大一的学弟、学妹们交流的机会,感到十分的幸运。在平日的聊天中,很多人说他们虽然上学期学了C语言,这学期又在学C++,有些也参加了我的C++试点班,但感觉好像写不了一个像样的程序,希望我能给他们一些建议。首先,非常感谢大家相信我。不过先说一句,我也只是一个学生,只有比你们大一届而已,所以不敢说能给你们很有价值的建议。但从进大学到现在,自觉得也学了不少东西,中间也走过些弯路,到现在总算能做一些简单的小游戏、小软件和小网站。我总结了一下,希望能给想在编程上更进一步,但有些迷茫的学弟、学妹们一点点启示吧。(如果不同意我的观点,或有更好的意见,可以找我探讨,谢谢!)
首先,我觉得应该搞清楚两件事。
一个就是你所谓的一个像样的程序到底是怎样的程序?是一段超过百行或千行的代码、或是一个能完成复杂算法的程序、抑或是一个WINDOWS下的一个窗体?这里想说明一下,一个好的程序,不一定是代码量非常大的,现在很多程序和编译环境都在追求减少代码量(如VS2005相对于VS2003,功能更强大了,但代码却写得越来越少了)。更多人可能觉得所谓软件,就应该是在一个窗体上按按按钮,点点鼠标就能实现所需功能的东西。其实这也不对,比如LINUX下就有很多功能非常强大,而且十分重要的程序都是运行在控制台上的。
第二点比较重要,就是你的兴趣是什么,你到底要学什么?现在计算机技术分类十分繁复。在大学期间,你不可能什么都学会,能够精通一两门就十分不错了。所以必须要给自己一个方向,朝着这个方向不停努力,只要有一门出类拔萃,你也就是最好的了。我们还有很多课程,很多其他事要做,所以大学能精通一门是很不容易的。请注意“精通”一词,不是说会了就行了,就拿C++来说,也许很多人也觉得学完C++也做不了什么东西的感觉。不客气的说,可以说你们连C++语法也没学会,你们知道C++所有的关键字吗?知道asm关键字怎么用吗?知道template<class T>和template<typename T>的区别吗?知道四种C++风格的类型转换的用法吗?其他的,你们会STL(Standard Template Library)吗?你们会里面所有的算法、容器、迭代器吗?有没有看过《Effective C++》和《More Effective C++》、《C++标准》等C++必读书。即使你全看了,你也写不了程序。想写一个像样的程序,还要学数据结构、算法设计。如果你要在一个平台上写程序,比如你要写一个WINDOWS程序,你必须要学WINDOWS的API,当然,你也可以学MFC(其实是API的封装),如果要写LINUX程序,你要学LINUX的API(因为开源的缘故,可能要学很多类库)。如果想写出优秀的代码,完美的程序,你还得看关于编程思想、软件工程等书籍。如果你想用C++做游戏,那你还得学其他的更多东西。所以说,“会”很容易,而“通”却很难。当然,也不用觉得太难,起码我们也不指望在大学就成为一门学科的大师,只要能在该领域有所成就就可以了。说这么多话,无非就是想说明一点,想要在大学在技术上有些成就,用我们技术部另一位搭档开玩笑的话,就是:一路走来,始终如一。
认准一个方向十分重要,接下来就是到底要学什么了,我可以给一个小小的建议。我们技术部也有学各个方向的,总的来说分为两个方面:软件和网络。
软件方向,现在主要是JAVA、C++、C#(C++/CLI)等。就这三门语言来说,最难的应该是C++,不仅是C++语法难,而且在写程序过程中,也最烦琐和容易出错。如果要写窗体,无论是MFC还是API都不是很容易上手的东西(相对而言,MFC比API简单很多)。还有就是虽然网络上也有一种叫CSP(C++ Seaver Pages)的技术,但C++总归不是写网站的语言,学C++,就不要指望用它来写一个网站。当然C++也有好处,就是效率高,如果你写程序十分讲究效率,比如喜欢研究算法(建议学C语言就够了)或想写游戏的,建议学C++。接下来就是JAVA和C#(C++/CLI是一门和C#类同的语言),这两门语言十分相似,所写程序都运行在虚拟机上,所以效率相对较低(说句心里话,一般是感觉不出来的)。这两门语言是纯面向对象语言,易用且比较安全,而且可以直接用来写网站。这两个的区别大概是它们的创造者吧。JAVA是SUN公司的产品,跨平台性强,如果你以后希望在各个平台间写程序,比如你希望在LINUX下写程序,在非WINDOWS系统的手机上写手机游戏,那么学JAVA是你的最佳选择。如果你是微软的忠实用户,喜欢WINDOWS,并希望在WINDOWS(包括智能手机等其他WINDOWS平台)下开发程序,那么非常建议你学C#,这门语言很有可能将成为WINDOWS下的第一语言。当然,也有些人说想当黑客,这个我从没想过,不过稍微了解一点,我想要做那个,精通汇编语言和C语言是必不可少的,可能还要学会LINUX系统,以及一些底层的东西。总的来说,学C++或当黑客会更累一些,不过想要学好,都是很累的。
网络方面,其实在上一段也提到了,学JAVA或C#。不过想写好,像JAVASCRIPT这些脚本语言也是要学的(其实学完脚本语言就可以做网站的,但建议学一门面向对象语言,这样才能写出功能强大的网站)。如果想一个人做好一个网站,可能还要学flash、photoshop等动画、图像处理。一个好的网站,界面设计占了一大半功劳。
确定好方向后,接下来就是怎么学了,其实怎么学我也不好说,个人学习习惯不同嘛,但有一点是肯定的,就是要下功夫。而且很有可能会有一段时间非常枯燥。我发现一般学技术的人,开始很容易,非常有激情,但坚持却非常难。一般看技术类书籍也是这样,书的前言或序让你看了会十分想学,刚开始没什么难的,就得自己挺不错,但技术在学习过程中总归是枯燥的,而且好的技术当然不是很容易就学会的,于是1000页的书,能坚持到100页的也不会很多。但如果你逼着自己,学到500多页了,你想放都放不下了,因为你能做东西了或是你已经能够看懂这本书了,还有就是你比别人强了,这种成就感和优越感会支持你学完的。所以这里只想说一句,试着坚持下来,学技术不可能轻松的,除非你是天才。当你能勉强自己看完一本、两本、三本……当你在你选定的方向上有所突破了,别人让你放弃你也不干了,你会有一种凡是这方面的书都想买下来看,并在看的过程就觉得是一种享受。接下来,我也没什么好说了,你成功了。
那么开始应该看什么书呢?当然首先是语法,接着要会一个平台,比如学C++,你必须会VC或GCC等编译环境,然后是一套类库,有些语法和类库是一起的(如JAVA和C#),一些平台和语法是一起的(如MFC),有些是要另外学的(如API)。这个期间会比较枯燥,不过你可以通过写一些有趣的程序来学习语法或平台。当你熟悉了语法和平台及类库后,你基本能够写某些方面的软件了,这个时候只要你想写,就能写出来,如果你是一个有追求的人,我想这个时候你的成就感和求知欲会自动拉着你不断的深入,不断地去学习新的东西,那时也不用别人告诉你应该去学什么了。
不知觉的写了这么多,也许有很多话重复累赘了,希望见谅。最后,还是唠叨着总结一下最重要的吧。两句话:“一路走来,始终如一”,“坚持到你再也不能放弃为止”。