青青子衿, 悠悠我心, 但为君故, 沉吟至今
« 使用Google Analytics跟踪404页面某些开放平台就是个传销 »

写给新手程序员的一封信

  首先,欢迎来到程序员的世界。在这个世界上,不是有很多人想创造软件并解决问题。你是一名hacker,属于那些愿意做一些有挑战性的事情的人。

  “当你不创造东西时,你只会根据自己的感觉而不是能力去看待问题。” – WhyTheLuckyStiff

  对于下面的文字你不必完全接受,所有这些来自一个其貌不扬的程序员。我喜欢把事情做到最好,而不是对原来的东西修修补补。

  仅仅是因为爱好开始做一些创新,这是一个很好的开始!如果你说“我要先学习一下再开始做”那么你永远不会真正开始。每个人都需要从某个地方开始,所以现在打开你的编辑器开始写代码吧。

  下面是一些很重要的建议,虽然有人并不认同,但我保证你看完我的分析以后会站在我这一边。一开始,先不要管算法和数据结构。大多数简单的程序不需要用到算法和数据结构,所以当你真正需要时再去学习。编程一段时间以后,你就会知道在哪些地方用到他们。这时知道算法的名字并了解它们的功能,然后找一些相关的论文去理解算法并动手编程实践。如果没有现成的函数库(其他程序员提供的可重用代码),你用自己喜欢的编程语言来实现它。

写给新手程序员的一封信

  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

  中文翻译:伯乐在线



  除非注明,月光博客文章均为原创,转载请以链接形式标明本文地址

  本文地址:http://www.williamlong.info/archives/2700.html
  • 文章排行:
  • 1.夜风过耳
  • 请问Mac又如何呢
    FrostWong 于 2013-3-27 0:06:49 回复
    Mac很不错,但本质上是Unix加了一个marvelous的图形界面还有一些实用的工具。
  • 2011/6/15 13:32:01   支持(94)反对(35) 回复
  • 3.诸葛晓
  • 基础入门级的编程要先了解什么
  • 2011/6/21 15:53:36   支持(29)反对(13) 回复
  • 4.primewaywheel
  • 诶 我第一门学的就是C
  • 2011/6/14 15:12:30   支持(30)反对(17) 回复
  • 5.ares
  • 学到知识了,我就是c入门的,一路从C/C++/C#(数据结构) java/javascript/(期间还学SQlserver)再到后来的PHP等等。这一路走来,真的不容易啊。呵呵,不过生活还是如此的美好。充满正能量了
  • 2015/8/14 17:09:01   支持(11)反对(1) 回复
  • 6.脑残
  • 这种文章都是Win黑。那些开源粉就这么有优越感?
    jacob 于 2012-12-26 20:20:28 回复
    如果你不是程序员,win毫无疑问是最好的选择!如果你是一个win程序员,win毫无疑问是唯一的选择!如果你是其他,那么毫无疑问linux/unix才是最能让人进步的选择。
  • 2011/6/13 0:13:21   支持(29)反对(20) 回复
  • 7.sdfsdhnvgb
  • 今天C(或者C++)不是能够快速编写软件的语言?荒谬!快速开发依赖于你使用的框架和库,跟语言本身没什么关系。Java号称开发快,可是调试呢?VM内部机制能把你搞疯,因为动态语言做了很多你不知道的事情,不像C/C++一切都明摆着,一看内存就清楚了。我建议就要从C++开始,学QT这样的框架,快速开发就是小菜。后面更让人崩溃的是居然推荐emacs和vim给初学者。。。这不是跟前面的“快速开发”南辕北辙自相矛盾吗?
  • 2013/4/20 16:56:42   支持(18)反对(9) 回复
  • 8.mize
  • 刚刚接触编程了一年。说的都挺对的。
  • 2011/11/29 20:10:14   支持(19)反对(12) 回复
  • 9.gtd实践者
  • 文章不错。Eric S. Raymond的《如何成为一名黑客》写得也不错。
    显然‘这里所指的“黑客”一词并非现在网络上很热的“黑客”。
    和本文一样提出的观点有:0、编程语言的选择,1、linux操作系统。2、开源3、...
    言无不尽。希望中国的程序员真正能够“创造”出来一些大牛的软件。gtd实践者为此不懈努力。
  • 2011/6/14 13:51:23   支持(21)反对(15) 回复
  • 10.Luyefar
  • 不学c。。不是说要从c入门吗。。。
  • 2011/6/13 0:05:37   支持(21)反对(16) 回复
  • 11.Dante
  • 身为一个菜鸟,楼主写的经验之谈,让我有种豁然开朗的感觉。我会谨记某些细节。
  • 2013/4/17 19:40:51   支持(11)反对(7) 回复
  • 12.hiall
  • 0. 选择一门好的编程语言
    我觉得一开始真的不应该选择动态语言,这些语言不会教懂你任何东西,除了调用api和框架。真正对一个程序员成长有帮助的应该学C,不是C++,也不要学微软的那些语言(什么c#,vb.net,...都是坑爹的),然后再学java或者动态语言(python等)。这样的学习过程能少走很多弯路。如果一开始不是定位专业程序员,那么学php也可以。文中说不要学习依赖IDE的语言,其实就是说不要学微软的visualstudio那一套,这话是真的,这种语言对程序员的发展有很大的害处。

    2. 选择一个你可以从中学到东西的操作系统
    严重支持!!linux系统本身就是一本百科全书。
    饺子 于 2011-6-13 16:51:05 回复
    我也是这么觉得~~
    不管用不用的到 C 都是要学的~ 并且有很大的好处~
    PHP 就电驴上有一套高洛峰的免费视频
    细说PHP~ 都免费更新了103集~ - -
    另外:开源系统linux必须支持~
  • 2011/6/13 11:16:35   支持(25)反对(23) 回复
  • 13.Kouga
  • 部分认同,一开始做出来点东西的确会振奋人心,但是不要忘记算法和数据才是目前冯·诺依曼计算体系滴核心(谁来和咱一起推翻这家伙喵?
  • 2011/6/14 18:07:08   支持(18)反对(16) 回复
  • 15.xixi
  • 天哪,有点国情概念好不好。
    在这里我们的学习环境要差得多,建议学多人用的语言,这样帮助文档和在线问答会帮你很大的忙。
  • 2011/6/13 16:38:22   支持(18)反对(17) 回复
  • 16.阿木
  • 看完这个是不是该有点悲哀:我在Windows上编程,用的C++,编辑器我是属于其它的;
    文件备份怎么没有提到SVN,这个也挺好使的。
  • 2011/6/14 21:22:23   支持(16)反对(15) 回复
  • 17.溯梦
  • 三百六十行,行行出状元,计算机语言也是一样,而且懂其一便可知其二。
  • 2013/1/22 21:41:44   支持(11)反对(10) 回复
  • 20.现代人
  • 看着这每句话都让我不禁和自己的经历去对应,去反思,感觉写出这些话真是一个前辈由衷的对后来者的一种关爱,最后那句话让我感到博主超然的姿态,“最后,若干年之后如果本文的内容曾经对你有一点点的帮助,作为回报请写一封类似的信给希望开始编程并不知如何入手的朋友,有可能的话请纠正本文中过时的内容。”这是一种传承,一种传递,向前辈学习!
  • 2015/6/15 10:26:19   支持(7)反对(7) 回复
  • 21.xusiwei
  • "更快地完成自己的作品并且能够看到成果,才是激励你编程的源动力"说的很好!
  • 2015/9/2 18:43:37   支持(4)反对(4) 回复
  • 23.创新捕手
  • 过来人觉得这些东西很靠谱
  • 2011/6/13 12:56:51   支持(15)反对(16) 回复
  • 25.建湖
  • 学习了呵呵每天看一篇对大脑有益呵呵
  • 2011/6/15 16:35:31   支持(15)反对(16) 回复
  • 26.永在路上
  • 非常感谢您的分享,我是上大学才开始接触计算机的,起步可谓很晚了.我的第一编程语言是c语言,这是学校课程安排的,感觉还可以.
  • 2012/10/6 18:15:33   支持(15)反对(16) 回复
  • 27.保健品招商
  • 现在程序员越来越难发展了,可怜啊!
  • 2011/6/12 22:12:57   支持(17)反对(19) 回复
  • 28.时光
  • 以前在微博上看到过,似乎大家都反感微软的非开源家属,还有有重量性的编辑器和windows!
  • 2011/6/13 5:38:20   支持(14)反对(16) 回复
  • 29.汶海洳
  • 从js入门的,算不算?
    ejacky001 于 2011-6-16 22:23:46 回复
    个人觉得js绝对是好东西
    blue 于 2011-6-21 15:52:52 回复
    js 居然不是简单的脚本语言, 她是一个优美的代名词。 从js开始吧 。 你会发现原来世界如此的美妙和惬意。
    碌木 于 2011-6-23 16:22:14 回复
    我从js→php
  • 2011/6/13 9:38:54   支持(12)反对(14) 回复
  • 30.bush
  • 我認為這篇文章還是比較偏。
    說 Linux 下的編程新手入門還差不多。
  • 2011/6/13 21:18:25   支持(17)反对(19) 回复
  • 31.冷凍車
  • 我都30歲了,學編程還晚嗎,一直想學,可是就沒有耐心。
    wangjie 于 2011-8-19 11:57:02 回复
    晚了 程序员基本上最多也做到30岁 就没人做了
    Kory 于 2011-8-24 14:21:55 回复
    30岁还在编程的人多了去了
    vinC 于 2016/3/7 9:27:43 回复
    大把人30岁在编程的....
  • 2011/6/16 13:54:35   支持(18)反对(20) 回复
  • 34.流星侠
  • 我的编辑器就是记事本,十多年前是手写。
  • 2012/9/13 16:58:06   支持(9)反对(11) 回复
  • 37.百度非官方
  • 程序员工作强度大不说,薪水还很低。
  • 2011/6/12 23:49:36   支持(20)反对(23) 回复
  • 38.电子书
  • 我是新手,英文不好,学起来不容易
  • 2011/6/13 11:43:47   支持(18)反对(21) 回复
  • 41.小王347
  • 文章挺好的,最近也确实困惑,没有像样的产品来涵盖技术.
  • 2013/8/28 16:00:26   支持(5)反对(8) 回复
  • 44.铂金骑士清毒烟
  • 我还是程序小白呢,感觉电脑语言很神秘
  • 2011/6/14 14:16:12   支持(14)反对(18) 回复
  • 45.加油
  • 呵呵,跟着你能学到好多东西
  • 2011/6/23 22:59:12   支持(18)反对(22) 回复
  • 46.foreverzeus
  • 只能认同某些观点:
    我觉得入门语言c是比较合适的,大多数的动态语言,类似于python都封装了很多良好的东西,不利于的你一开始的打好基础,对基本原理的理解。所以类似与py这样的动态语言,我觉得应该是先打好基础再学的。
    上帝之死亡翻滚 于 2016/5/30 8:51:41 回复
    楼主的意思应该是说选择一些相对容易做出点东西,至少入门门槛比较低的语言。不至于要学个一年半载才能入门的那种。这也是给自己提升信心,成就感的路径吧。
  • 2011/6/13 10:07:21   支持(15)反对(20) 回复
  • 47.长沙门面装修
  • 虽然不是很了解,支持一下。。。
  • 2011/6/14 11:15:11   支持(15)反对(20) 回复
  • 48.rteta
  • 0. 选择一门好的编程语言,一门你自认为可以用它快速地做出一些有用东西的语言。



    楼主能不能推荐一门这样的语言?多谢!
  • 2011/6/13 15:45:27   支持(10)反对(18) 回复
  • 49.紫紫
  • 作为一个完全技术及程序没有半毛钱关系的外行人表示,虽然技术改变生活,却常常被geek们炫技的app搞得晕头转向.
    程序员们,在开发大众应用的时候可以考虑一下大众们的使用习惯么?
    dav 于 2011-6-17 8:41:01 回复
    这个是策划者考虑的问题。。。
    FrostWong 于 2013-3-27 0:08:34 回复
    看到现在有些(可能还是多数)招聘时有一条要求就是服从领导要求。他们才不管用户体验呢,重点是钱
  • 2011/6/17 8:26:28   支持(14)反对(22) 回复
  • 50.哈尔滨百度代理
  • 我不懂编程语言,呵呵,属于会改改东西的人;
  • 2011/6/13 22:29:31   支持(19)反对(29) 回复
  • 51.亦森蓝
  • 写得不错,即使不是编程爱好者,我也从中学习到了一些,感悟出有价值的思想~
  • 2011/6/15 8:46:08   支持(16)反对(26) 回复
  • 52.laywl
  • 话说我正在学C啊,虽然不容易但是我还是挺喜欢它的,看到大量不认识的代码会觉得兴奋,但是又不喜欢一天编一个程,编的我恶心,哎,爱恨参半啊
  • 2011/6/20 21:56:38   支持(13)反对(23) 回复
  • 53.飞仔网
  • 伯乐在线现在很活跃啊。。。。。。
  • 2011/6/12 22:18:15   支持(14)反对(26) 回复
  • 54.will
  • 程序员也就是一个职业,没什么特别的,和其它行业是一样的,只是比较新受到的关注多点
  • 2011/6/13 23:14:51   支持(12)反对(24) 回复
  • 55.大雄
  • 写的都是经验之谈,如果你用心做了,有种豁然开朗的感觉
  • 2011/6/15 10:59:44   支持(21)反对(39) 回复
  • 56.笑岷
  • 计算机专业,大一开始接触编程,做过几个所谓的商业项目,大四毕业,工作几乎与编程无关了,从此远离了编程。对程序员这职业,真是又爱又恨啊。
  • 2011/6/13 1:24:40   支持(8)反对(29) 回复

发表评论:

 请勿发送垃圾信息、广告、推广信息或链接,这样的信息将会被直接删除。

订阅博客

  • 订阅我的博客:订阅我的博客
  • 关注新浪微博:关注新浪微博
  • 关注腾讯微博:关注腾讯微博
  • 关注认证空间:关注QQ空间
  • 通过电子邮件订阅
  • 通过QQ邮件订阅

站内搜索

热文排行


月度排行

本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.