《借助开源项目,学习软件开发》——开始之前

目前开始了一个新的写作计划。文档放在teamhost上: http://www.teamhost.org/projects/learn-with-open-source/wiki/Wiki

到今天为止,写了第一部分:【开始之前】

1. 开始之前

1.1. 这份文档的目标读者

软件开发初学者

这是一份面向软件开发初学者的文档,所谓初学者,可以定义为:学过的语言不超过2种,在已经学过的语言技能方面,能够完成课程上的大部分习题。从高校教育的通常情况来说,基本能够完成老师布置的最后的课程大作业。如果要说学得很出色,大概谈不上。要想进一步提高,也很困难。
对于大学毕业(正负1~2年)的同学们来说,他们很难接触到真正较为复杂的项目,即使参与到复杂的项目之中,也会是其中非常细枝末节的部分。他们渴望快速的提升自己的软件开发能力,而恰恰最缺乏提升自身能力的机会。
因此,本文希望能够介绍一种较为合理的方法,帮助各位”同学”,以较为科学合理的方式,提高软件开发的实力。

开源软件的初次使用者

在软件开发这个领域,完全不接触开源项目,几乎是不可能的事情。在日常开发工作中,如何借助开源项目提高开发效率,减少重复劳动;如何从开源而受惠,而不是因开源而受害。也是一个很有意思的课题。本文也希望能够通过分享过来人的经验,帮助那些初次接触开源的朋友。

开源社区外徘徊的爱好者

想要成为开源社区的一份子,在享受开源带来的好处之后,也能够回馈一些帮助给开源社区?开源社区到底是怎么一回事?有很多人对于开源有着天然的好感,希望能够加入进来,能不能更快的融入开源社区,能不能为开源做出更多的贡献,甚至启动一个自己的开源项目,拉起一支队伍来做些了不起的事情。有这样想法的朋友,应该也不少,希望本文的介绍能够起到一定的帮助。

《由于这是一份开放式写作的文档,因此,当我写下这段话的时候,我并没有特别确定的把握。这份文档将只有以上三类目标用户。也许,它能够对更多的人产生价值……》

1.2. 基本条件

一台能够上网的电脑

如果我说,以上就是全部的基本条件,似乎的确是太不负责任了。但是,真的也就够了。假设你只是研究JavaScript的开源项目的话,装一个FireFox/Chrome这样的对开发者友好的浏览器,基本上就可以开始学习了。
再进一步,当然可以有更多的考究。比如:究竟是选择Windwos还是Linux/MacOS?Linux又应该选择什么发行版?等等等等,一旦深入,自然有无穷无尽的问题在等着你。

首选Ubuntu

首先解释为什么要选择Linux,因为开源软件,在很多情况下都是Linux的版本更加稳定可靠,在解决版本依赖问题的时候,也更加容易些。当然,在Windows下面,也有非常非常多靠谱的开源项目,因此选择Linux更多的是出于一种多多使用开源的偏好。
金庸先生的《神雕侠侣》中提到的寒玉床,可以用来解释这其中的奥妙。当你完全处在一个开源的环境,当你的各种操作都会接触到与开源相关的各种概念时,你就时时刻刻都在进步中,这样获得进步自然会更快一些。
再说为什么选择Ubuntu,这就更是个人偏好了,因为Ubuntu的易用性目前看来还是最好的。对于初学者来说,也更加友好一些。网络上的中文资源,也更多一些。
另外,网络上有一篇非常著名的文章叫做:《开发人员为何应该使用 Mac OS X 兼 OS X 小史 》,也写得非常有说服力,推荐阅读一下。

如果你真的喜欢Windows

必须承认,在Windows环境下,还是可以学习开源的。也有很多很多开源人,努力的在Windows平台下工作。很多环境的搭建工具,被一点一点的开发出来。比如:RubyInstaller;XAMPP;以及cygwin等等。(具体的名词这里不解释)
但是,很多时候,你会遭遇莫名其妙的报错,很多人会在某个深夜,突然抬头望天,破口大骂:“这个烂Windows!”不是没有道理的。

不会被阻隔的网络

是的,这篇文章如果有幸被翻译为英文,这一段话可以被完全删除。因为他们无法想象我们还会遇到这样的困难。而克服这种困难,对于学习软件开发,又是绝对必须的一种技能,所以……如果你真的发现目标网站无法访问,寻求帮助吧。(抱歉,无法在这份文档里提供帮助。不过,我留了email。)
Google在大多数时候,对于软件开发来说,都是更好的搜索引擎,所以,哪怕你费尽千辛万苦,也一定要用Google来搜索想要寻找的项目、文档和资料,必须的!

1.3. 你需要明确的一些事情

你真的想学习软件开发吗?

在正式开始学习之前,我实在是忍不住,我想一遍又一遍的询问你:你真的想吗?你真的想成为一个“码农”吗?你真的想掌握软件开发这门手艺,甚至以此来谋生吗?那么好,我得告诉你一些事实:

  • 软件开发绝非你想象中的事少钱多责任轻的那种高薪白领。很多程序员会自称“码农”,就是因为这份职业非常的辛苦,而且做好不易。
  • 另外,这是一份需要终生学习的行当,很多很多的其他领域,没有那么快的知识更新速度。但是软件开发这个领域,1~2年不接触技术最新的进展,你就OUT了。
  • 还有,软件开发这个行当,真的未必那么好找工作。就业前景什么的,并非想那些传说的成功故事一样光明。

但是,真的有一些人,热爱这个行业,编程不但是他的工作,他的业余爱好也是Coding。
如果,你确信自己不仅仅是靠编程来维生,更是将编程作为自己最大的爱好,那么欢迎您,来到一个神奇而充满魅力的世界。这里有智慧、有乐趣、更有热心的朋友和充满前途的事业!

你真的适合软件开发吗?

虽然,软件开发并非像传说中的那样,是一个需要高智商的Nerd的行业。但是,他的确需要一些品质和能力,如果你发现自己并不具备,或者要很辛苦才能做到。那么,你不适合这个行当。

  • 懒惰:有一句名言这么说:“懒惰是程序员的美德”,因为真正的程序员,一定痛恨反复做同一件事情,至少他们会写一个函数来替自己完成。如果发现代码里重复出现相同的段落,他们会无法抑制的想要消除这种重复。
  • 条理:如果这是一个复杂的事情,那么我可以分成三个阶段来着手去做它。如果仔细想想,第一个阶段,还可以分为5个部分。在开始第一阶段之前,还有4个准备工作,必须首先考虑。
  • 耐心:很多时候,程序里的麻烦会来找你,如何解决?解决“bug”需要洞察力,需要细心,而最需要的,则是耐心。有些时候,我会非常享受这种“破案”的过程。
  • 好奇心:值得好奇的事情太多了,永远学不完的新技术;最近的进展和最佳实践。甚至其他行业和领域的究竟,我们都有充沛的好奇心,因为无论哪个行业,他们早晚都会来找到我们,帮他们编写代码的。
  • 较真:很多事情,据说都差不多就可以了。但是,计算机是那么严格,快百分之一毫秒,也是快了。一个万分之一概率下会出的bug,还是bug。如果你不是一个足够较真的人,就会放过很多问题,而那些问题,往往就会酿成大祸。

OK,闲话少叙,咱们开始吧!