开始之前
这份文档的目标读者
有困惑的软件开发人员
希望能写出别人容易读懂的代码,但不知道如何做的开发者
希望能够看懂别人代码的开发者
软件开发初学者
这是一份面向软件开发初学者的文档,所谓初学者,可以定义为:学过的语言不超过2种,在已经学过的语言技能方面,能够完成课程上的大部分习题。从高校教育的通常情况来说,基本能够完成老师布置的最后的课程大作业。如果要说学得很出色,大概谈不上,要想进一步提高,也很困难。
对于大学毕业(前后1~2年)的同学们来说,他们很难接触到真正较为复杂的项目,即使参与到复杂的项目之中,也会是其中非常细枝末节的部分。他们渴望快速地提升自己的软件开发能力,而恰恰最缺乏提升自身能力的机会。
因此,本文希望能够介绍一种较为合理的方法,帮助各位“同学”,以较为科学合理的方式,提高软件开发的实力。
开源软件的初次使用者
在软件开发这个领域,完全不接触开源项目,几乎是不可能的事情。在日常开发工作中,如何借助开源项目提高开发效率,减少重复劳动;如何从开源中受惠,而不是因开源而受害,也是一个很有意思的课题。简单地说:不读源代码,直接拿来使用,其实是有风险的(这和使用普通的闭源软件、闭源的类库,就没有区别了)。但如果我们能阅读、理解源代码,就能避免这种风险,同时理解得越是透彻,越是能够用好一个软件。开源软件正为我们提供了这种可能。
本文也希望能够通过分享过来人的经验,帮助那些初次接触开源、想要用好开源的朋友。
开源社区外徘徊的爱好者
想要成为开源社区的一份子,在享受到开源带来的好处之后,或许也能够回馈一些帮助给开源社区?开源社区到底是怎么一回事?有很多人对于开源有着天然的好感,希望能够加入进来,更快的融入开源社区,为开源做出更多的贡献,甚至启动一个自己的开源项目,拉起一支队伍来做些了不起的事情。有这样想法的朋友,应该也不少,希望本文的介绍能够起到一定的帮助。
由于这是一份开放式写作的文档,因此,当我写下这段话的时候,其实并没有特别确定的把握,这份文档将只有以上四类目标用户。也许,它能够对更多的人产生价值。
基本条件
一台能够上网的电脑
如果我说,以上就是全部的基本条件,似乎是太不负责任了。但是,真的也就够了。假设你只是研究JavaScript的开源项目的话,装一个FireFox/Chrome这样的对开发者友好的浏览器,基本上就可以开始学习了。
再进一步,当然可以有更多的考究。比如:究竟是选择Windows还是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~2年不接触技术最新的进展,你就OUT了!
还有,软件开发这个行当,真的未必就那么好找工作。就业前景什么的,也并非像那些传说的成功故事一样光明。
但是,真的有一些人,热爱这个行业,编程不但是他的工作,他的业余爱好也是Coding。
如果,你确信自己不仅仅是靠编程来维生,更是将编程作为自己最大的爱好,那么欢迎您,来到一个神奇而充满魅力的世界。这里有智慧、有乐趣、更有热心的朋友和充满前途的事业!(太像传销课了...)
你真的适合软件开发吗?
虽然,软件开发并非像传说中的那样,是一个需要高智商的Nerd的行业。但是,他的确需要一些品质和能力,如果你发现自己并不具备,或者要很辛苦才能做到,那么,你不适合这个行当。
懒惰:有一句名言这么说:“懒惰是程序员的美德”,因为真正的程序员,一定痛恨反复做同一件事情,至少他们会写一个函数来替自己完成。如果发现代码里重复出现相同的段落,他们会无法抑制地想要消除这种重复。
条理:如果这是一个复杂的事情,那么我可以分成三个阶段来着手去做它。如果仔细想想,第一个阶段,还可以分为5个部分。在开始第一阶段之前,还有4个准备工作,必须首先考虑。
耐心:很多时候,程序里的麻烦会来找你,如何解决?解决“bug”需要洞察力,需要细心,而最需要的,则是耐心。有些时候,我会非常享受这种“破案”的过程。
好奇心:值得好奇的事情太多了,永远学不完的新技术,最近的进展和最佳实践,甚至其他行业和领域的究竟,我们都有充沛的好奇心,因为无论哪个行业,他们早晚都会来找到我们帮他们编写代码的。
较真:很多事情,据说都差不多就可以了。但是,计算机是那么严格,快百分之一毫秒,也是快了。一个万分之一概率下会出的bug,还是bug。如果你不是一个足够较真的人,就会放过很多问题,而那些问题,往往就会酿成大祸。
OK,闲话少叙,咱们开始吧!
Last updated