首先,欢迎来到程序员的世界。在这个世界上,不是有不少人想创造软件并解决问题。你是一名hacker,属于那些愿意作一些有挑战性的事情的人。php
“当你不创造东西时,你只会根据本身的感受而不是能力去看待问题。” – WhyTheLuckyStiffhtml
对于下面的文字你没必要彻底接受,全部这些来自一个其貌不扬的程序员。我喜欢把事情作到最好,而不是对原来的东西修修补补。linux
仅仅是由于爱好开始作一些创新,这是一个很好的开始!若是你说“我要先学习一下再开始作”那么你永远不会真正开始。每一个人都须要从某个地方开始,因此如今打开你的编辑器开始写代码吧。程序员
下面是一些很重要的建议,虽然有人并不认同,但我保证你看完个人分析之后会站在我这一边。一开始,先不要管算法和数据结构。大多数简单的程序不须要用到算法和数据结构,因此当你真正须要时再去学习。编程一段时间之后,你就会知道在哪些地方用到他们。这时知道算法的名字并了解它们的功能,而后找一些相关的论文去理解算法并动手编程实践。若是没有现成的函数库(其余程序员提供的可重用代码),你用本身喜欢的编程语言来实现它。web
0. 选择一门好的编程语言,一门你自认为能够用它快速地作出一些有用东西的语言。算法
不要选择C语言做为你第一门编程语言。也许选择C语言会给你一种过期的知足感。虽然它比早期的汇编语言提供了更好语法描述,可是今天C(或者C++)不是可以快速编写软件的语言。绝不偏袒的说,我建议你学习一种动态语言。选择一种你以为语法(文档)让你使用起来更舒服的编程。为此,你可能须要花费一些时间来在几种不一样的语言之间进行比较。这么作目的不是为了让你感受更好或者让编程更容易。更快地完成本身的做品而且可以看到成果,才是激励你编程的源动力。不要选择一门须要某种重量级的IDE(IDE是一种可以帮助你编写并运行代码的工具)才能轻松编程的语言。你所须要的仅仅是一个文本编辑器。(注:原文并无标号,是咱们加上的,请你们别忘记了哦,咱们是从零开始数数的。:) )编程
1. 选择一个好的编辑器。小程序
编辑器对程序员而言,就是像是弓对弓箭手同样重要。这里有一些推荐的编辑器:服务器
- SublimeText 2 – 若是你刚开始编程,推荐使用SublimeText 2
- Emacs – 学习曲线陡峭,快捷键复杂。若是你想定制本身的使用习惯,须要学习Emacs Lisp.
- Vim – 不只操做简洁并且它默认包含在linux的发行版中,因此深受你们欢迎。我开始使用了2年Emacs。因为Emacs的快捷键操做过于复杂,个人双手开始常常疼痛,这迫使我转向了Vim阵营。了解Vim的快捷键是很是有必要的。当你在远程的服务器上编辑代码时,你惟一不须要安装的编辑器就是Vim。
注意!Emacs和Vim可能已经成为成为古董了。可是,它们都具有一些现代编辑器多不具有的功能。数据结构
2. 选择一个你能够从中学到东西的操做系统
Windows不会教会你任何东西。使用Windows你惟一学会的就是打开一个exe(可执行)文件来安装软件和使用它。可能刚开始的时候你会以为很酷,可是长远来看,若是你立志成为一个web开发人员,可能仍是要具有基本的linux知识,尤为是当你要发布程序的时候。Linux也容许你根据本身的要求来定制程序。Macs也很酷,可是我认为你如今经济上还负担不起。
3. 不要经过复制粘贴来作备份
一个新手程序员一般会把文件复制粘贴到一个临时目录下面来进行备份。这也许也是他们惟一知道的方法。不要那么作!你须要使用版本控制软件。我强烈推荐使用Git,它是个目前很流行的版本控制工具,并且使用起来很是简单。对一个Git新手,有一个良好的社区和不少参考资源来学习。(除了Git以外,还有mercurial, darcs, fossil等等。可是我仍是建议从Git开始,我有不少的理由来支持Git,这里就很少费口舌了。)
4. 知道去哪里寻求帮助
参加一个和你相关的(你使用编程工具相关的)程序员社区。好比StackOverflow就是程序员的Facebook。那里没有消息状态和回复,取而代之的是问题和答案。除此以外还要学会使用IRC。IRC是一种老式的聊天室,如今还在被大多数开发人员用来分享技术信息和帮助解决问题。
5. 培养你的礼仪
知道何时问问题。你遇到的大多数问题都是别人碰到过而且在Internet上可以找到解答的。在IRC或者任何论坛里发问以前,先搜索一下google(或者blekko)来看看是否是有现成的答案。在IRC上问问题须要有耐心。永远记住,人们只是处于好心来免费帮助你。有时你发问之后须要几个小时才能有回复。因此,耐心等待。除此以外,记得问问题的时候要礼貌。世界很小,你怎么对待别人,别人就会怎么对待你。
6. 结交朋友,技术书籍只能教你解决常见的问题(他们说:书是死的)
当你在捣鼓一些程序或者从程序的做者那里学习,你能学到一些书本上没有的东西。当你散步的时候,请和遇到的朋友打招呼。你确定不是惟一的程序员。和其余的程序员一块儿交朋友一块儿工做。你会注意到,当一群技术爱好者在一块儿的时候,不论话题是从什么地方开始,最后老是以技术话题收尾。这是必然的现象。因此你能够尽情参与。在你的黄金年龄努力编程,我能告诉你的是,我在开始6年前寻找朋友并开始讨论编程,从那时起才学到那些书本和文章不会个人东西。因此我老是说,个人编程经验有6年,由于只有那个时候开始,我才开始与人交流并开始感受真正地开始学习编程。
7. 参加开源项目
为开源项目编写代码能带来回报。这不只仅是帮助别人,你留下的代码会被其余人使用或(可能)改进。当别人给你的代码添加功能或者提出修改意见时,也是在提升你的编程水平。开源软件项目不必定要是一个大工程,编写一个下载youtube视频的小程序也是颇有用的。更重要的是,你会惊奇地发现你编写的代码会成为与他人有效沟通的桥梁。
最后,若干年以后若是本文的内容曾经对你有一点点的帮助,做为回报请写一封相似的信给但愿开始编程并不知如何入手的朋友,有可能的话请纠正本文中过期的内容。
智者说过,掌握某个东西须要10年或10000个小时,也就是汉语中的“十年磨一剑”,因此不用着急。
英文原文:An open letter to those who want to start programming
中文翻译:伯乐在线