吐槽端由
最近又看到几篇文章里的各路程序豪杰描述自己的工作流,OS X + Terminal(zsh) + Vim + Emacs,Linux……,这又让我想到“Windows坑人论,真正的程序员都是Linux的”那一系列的讨论。确实很少看到有人描述自己在Windows上的工作流,难道我们每天使用Windows的开发者就该觉得自己很low吗?
呵呵。
说实话,我前两年刚接触Linux系的操作系统时,感受到它那强大的气场之后,确实有过很长时间,在心底里看低Windows,也几乎很肯定自己的技术生涯迟早会走向Linux系。有过几年编程经验和对程序员这个职位的了解之后,我只想对那时候的自己说这句话:
“呵呵”。
就跟编程语言只是个工具一样,操作系统和开发工具也是个工具。工具的职责在于能辅助人搞定他的目标,如果你追求做事效率,那么就该使用专业的工具来做专业的事情,我如果写Windows桌面程序,那么使用VS+VA插件无疑是一个好的选择,VS的强大调试能力和VA的代码补全、重构、代码导航等功能会极大提升我的效率。如果对代码编写要求较高,可以装个VsVim插件,或者在Vim或Emacs里编辑代码,然后回到VS里进行调试。如果我写Linux服务器程序,那也要选择适合Linux环境的服务器开发的专业工具。在完成我的目标的过程中,真正有意义的是我对问题的正确认识和解决问题的思路,在我完成任务之后没人会在意我用的是什么工具,关键的是我能按时正确的完成任务。
这篇文章是为了提醒自己,别在工具上花费过多精力,在正确的时间做正确的事。同时要表达一下对Windows的感恩,因为它带我走进程序的世界,它能让我一个编程菜鸟对编程这件事情产生兴趣和信心,感谢给Windows上写出优秀软件的程序精英们,Total Commander, VS, Vim, Emacs, Mingw, Cygwin, Eclipse, Intellij Idea, PyCharm, Cocos2d-x….. 你们让我的程序生活丰富多彩,让我节省下很多时间来学习新东西,享受技术生活。
初识Visual C++
还记得刚上大学那会,使用的第一个开发工具是Windows上的Turbo C 2.0,使用它我们完成了第一门程序设计语言:C语言的大大小小的作业,第一个“hello world”,第一个for循环,第一个冒泡排序, 第一个链表……
TC2.0不支持鼠标操作,我们通常是在记事本里写好代码再导入TC。别扭的使用了TC2.0半个学期之后,大一下学期开始学习C++。这下TC傻眼了,它搞不定C++。于是在计算机实验室我们第一次认识了VC++6.0这个神奇的东西,我们可以像记事本一样,键盘鼠标同时操作,还带语法高亮,自动对齐,C,C++通吃。这下好了,在这之后的所有程序设计作业和课程设计我都开始用VC++6.0来做了,自己也买电脑了,装一个VC++6.0,再备份一个.iso安装文件到software文件夹吧,这东西太好了。
初识MFC
学完C++之后,图书馆里最抢手的书就是《visual c++ 开发大全》之类的书。里面教怎么做Windows窗口程序,比如记事本,闹钟,音乐播放器,游戏等等。我们宿舍6个人吃完晚饭,各就各位坐在电脑前,开始接受老大的“教诲”,他教我们如何使用Visual C++做窗口游戏。坚持大概一周左右,我们每个人都做出了一款五子棋游戏,当时使用的类库其实就是现在名声臭到不行的MFC。接着我们又完成了一款战棋类的游戏,我自己则继续完成了俄罗斯方块、闹钟、GPA计算器、刷网络请求的小工具等,直到现在我都还很喜欢做桌面软件。
初识Visual Studio
第一次意识到Visual C++只不过是VS中的一个部分是在图书馆看到白头发老头那本《Visual C++ 2008入门经典》的时候,只读了一小部分,收获是认识并开始使用Visual Studio 2008。我的software文件夹下又多了一个.ios安装文件备份。我装过好多次Visual Studio,电脑重装系统的原因通常是Visual Studio和VC6.0不知怎么的冲突了,装完系统首先就是要把这俩哥们装上。我喜欢看着Visual Studio的安装界面,以前安装的时候都是“complete”,全都勾上,它在安装过程中会有新特性介绍的幻灯片在放映,看起来觉得特别高级。放假回家,我就会把新版的VS装到家里的电脑。
本文叫感恩Windows,感恩Microsoft,这里面最重要的原因就是VS这个开发工具对我的帮助。大学四年的后两年是它帮我完成一次次的课程设计和编程练习,它让我在学习编程的时候,不会因为开发环境而分心,把重点放在语言的学习和练习上。
C++ Primer与mingw
#
VS这样的IDE有错吗?
这些年经常会看到一些言论,说“xxx IDE是误人子弟,让初学者成为傻瓜,只知道写代码,不知道所以然”。经过我这几年的折腾体会,我严重不同意这个说法。
Linux是很优秀,但Windows也帮过你吧
在将近大学毕业的时候,开始了解Linux,我开始讨厌Windows,因为在论坛里面看到一些关于Windows和Linux孰优孰劣的讨论,里面有大量的抨击Windows“不自由”,“真正的程序员不屑于使用Windows”之类的话。我把它归纳为“Windows坑人论”。
当时刚巧学完“计算机操作系统”这门课不久。对于一个渴望了解和学习操作系统的构造和实现细节的人来说,Linux对你的诱惑是致命的,因为你能看到它的实现。为什么Linux受到程序员的追捧,我想最重要的一个原因就是因为它是开源的,你可以彻底的掌控你的计算机软硬件,只要你足够牛,这个系统在你眼前就是一丝不挂,任你摆布,没有“秘密”可言,也不会强X你的精神,对你有什么非分的要求。你是老大。加上有那么多的牛人前辈在这个系统上贡献着大大小小的补丁和工具,这让作为开发者的你觉得很爽,拿来就用,不爽还可以自己改,随便折腾,自由。
而了解了Linux之后再回过头来看Windows, 难免会觉得失望,它在自由度,开发者工具包数量和命令行友好性等方面被Linux甩的远远的。我也同意这个观点,在某些领域,Unix系操作系统更适合程序员,尤其是经常和操作系统打交道的开发者和服务器程序开发者,以及那些有志于深入了解整个操作系统和探究计算机体系结构的开发者们。
接下去的几年我断断续续使用了Ubuntu、OS X,目的有两个:1. 熟悉Linux开发环境、shell脚本和Linux的命令;2. 在”Linux系”系统上实践C++工程。我把大量的时间花在makefile的写法和GDB调试器的使用,以及努力把Vim打造成一个C++ IDE,补全插件从开始的omnicppcomplete到clang_complete
,再到YouCompleteMe;学习VimScript来定制一些自己的操作。而真正花在代码实践上的时间比例,较之于直接在Windows上使用VS+Visual AssistX则少之又少。虽然Linux上也有IDE,但是,既然我都故意来到Linux下玩了,再用IDE岂不是南辕北辙。
我慢慢觉得自己走歪了,我过于沉迷在工具上了。我知道“编程语言只是个工具”,却不愿承认“操作系统和开发工具更只是个工具”。
在正是学习专业知识的关键时期,把时间花费在与工具的磨合上无疑是舍本逐末的做法。虽然说工欲善其事必先利其器,但是也要适可而止,不要造成工具过盛的情况。
Linux确实优秀,但是又有多少人在刚一接触计算机的时候就使用Linux呢?作为一个编程初学者,他如果一开始就用Linux,并且不使用IDE来学习,写一个hello world然后用gcc来编译还好,如果要组织一个大一点的工程,那么他要花精力去学习构建系统,他要花费精力去寻找并适应GDB一类的调试工具,这会使多少人望而却步从而导致中途放弃呢?
但是,在过了那个年少轻狂的年纪之后,叛逆心理消失之后,我不禁开始觉得自己可笑。
虽然我现在对程序的编译和链接过程有了更深的体会,虽然我能够使用gcc+makefile或者CMake的方式,“手动”来构建一个复杂的工程,但是我依然不讨厌IDE,不认为IDE是误人子弟,也不认为IDE是“万恶的”,你理不理解程序的构建原理跟IDE有毛关系,是你自己不多读书,不多反思。经典的《C++ Primer》里面就有讲到怎么使用gcc去构建程序,如果你连这样经典或类似这样的书都不读,那你了不了解程序构建过程还有什么意义吗,你压根都不想用心。