跳到内容

文章类别:编程

程序员:开始编程生涯的5个建议

如果想成为一名程序员,你需要通过一些有创造性的方式来获取经验并且并推销自己。本文作者分享了一些引导性的实用对策。


有位会员在我们的论坛上提交的一个问题,问到他是否可以开始他的程序员生涯了。他已经花了大量的时间自学C#。他现在在学习WPF。此外,他是从事互联网领域的工作,因此,他对IT业已有了解。根据他的情况,我想,他已经准备好了去挑战职业开发生涯。就他如何实现目标,我有如下建议。
1. 基础学习

当涉及基础学习时,很多自学编程的朋友都有一个错误的认识。促使某人自学编程的心态是一种“现在就做些事”的动力和渴望。有这种心态非常好!但不幸的是,在学习新东西时,一旦涉及基础,很多人都急于求成(还没学会走路就想跑)。这是我的个人经验。这也就是为什么自学的程序员有时候名声不大好的原因。

确信你学到了编程基础。这包括变量名、合适结构体、有时候需要查找库而不是应用程序等等。《如何学习用某某语言编程》,这类典型的书籍往往忽略了成为一名编程高手所具备的能力:解决问题的能力。在这里,我向大家推荐Abelson和Sussman的《计算机程序设计与解释》一书,此书对你快速提升能力大有帮助。

编者注:《计算机程序设计与解释》一书于1984年出版,成型于美国麻省理工学院(MIT)多年使用的一本教材,1996年修订为第2版。在过去的二十多年里,此书对于计算机科学的教育计划产生了深刻的影响。

2. 多参与项目

编程经验,多多益善。我推荐你加入一个开源项目,或者加入当地非盈利组织,帮他们编写软件。

你将有如下收获: 阅读更多 »

是什么造就了伟大的程序员?

回想起来就像是在昨天。那是2000年,在数据结构课程的课堂上,Pargas博士站在前面给我们讲一些关于数据结构的话题,一个SSH的画面投影在我们前 面的墙上。有人问了一个问题,他说了一些东西,差不多是这样的话“是这样,如果你想成为一个真正的计算机科学家,你需要从现在开始就使用vi编辑器”。

 

我想他是在笑谈,课后感觉他说的话并不是完全的正确,但作为年轻且容易被感染的我,回到寝室立刻就开始学习如何使用vi。学习过程不容易,花费了不 少时间,但一旦掌握了其中的窍门,我发现,使用vi的确可以更快的做事情。

时间推到6年前,那时我对TextMate十分的着迷。我的工作是做Java开发,但同时我学习Rails,在业余时间开发一些Rails项目。那 时几乎所有我读的文章和观看的视频都是说明和演示如何使用TextMate来完成文本编辑工作的方法技巧的。事实上,我每天都在使用的Eclipse想要 把我变成一头蠢猪。于是,我买了一台Mac电脑,开机后十分钟内我就买了一套TextMate装了上去。

说老实话,这两种编辑器没有一种使我成为一个更好的程序员。

 

优秀的工具并不会把你变得更优秀。你使用的工具确实很重要。事实上,它们非常棒。但老虎伍兹即使用几根树枝也能把我们全部打败,梅西即使不穿鞋也能 把我们踢的很惨,拉斐尔-纳达尔即使使用一个60年代产的老式木质网球拍也能把我们任何一个人打败。该死,他即使用乒乓球拍也能打败我们。技术,知识,以 及锻炼出来的经验是你在与人对比中最重要的部分。 阅读更多 »

你的老板会因为你拼命编写代码而感谢你吗?

程序员热衷于长时间地工作。我想说的是,你就承认吧,你的工作/老板并没有让你这样做,你自己要这样做而已。当然,我知道,也许并非所有程序员都喜欢长时间的编程。不过肯定的是,随着加班成为业内的普遍现象,至少一半的程序员必须喜欢加班,不是吗?

我早已听到以下这类借口。“不,不是那样的,我们只是喜欢炫酷的技术活,而且不想遗留未解决的问题。实际上,加班是一件好事,它让我们变得出色!”

我认为,你不能只见树木,不见森林。从某个角度来说,你这样做并非为了自己,而是为了“某个人”。无须质疑,他也许是个高尚的人,但你并不是他的奴隶。从其他角度来说,你有多少次加班,是为了解决问题,研究新技术,编码实现某些东西,以及在截止时间之前完成任务?但是,你在业务上是机智过人的程序开发者,你在帮助公司获得成功。公司管理者已经向你说明了公司的经济状况——必须这样做,公司依靠你。我想说的是,除非这个管理者现在就在你旁边,半夜2点还在陪你聊天,否则他的话将一文不值。

让我来讲述一个朋友曾经跟我说过的故事。这个故事是关于一个天才程序员的,姑且叫他John吧。 阅读更多 »

程序员的七大坏毛病

1.- 所有的程序都写的很烂,除了我的。
我要告诉你一个坏消息,兄弟,所有的程序都写的很烂,包括你的。无论你在上面花多少功夫,其他大多数程序员总是会认为你写的代码很烂、他们能写出比你好10倍的程序。

如何纠正:不要挑剔别人的程序,有一天也许你的程序会被人放在聚光灯下挑剔。要保持客观和专业的评论,不要轻易判断。要谦虚,从周围人哪里学习经验,警戒自己不要写出这么糟的程序。

2.- 我几秒钟就能把它改好,不用走变更流程了。
抄捷径充满诱惑,每个人都想抄捷径。有时候抄捷径是必要的,但总的来说,抄捷径是危险的,非常危险,应该避免这样做。走捷径也许会节省你数小时的时间,但如果走错了,它可能会给你带来数月的麻烦。

如何纠正:遇到需要慎重处理的事情时不要太过自信。让其他人来复查你的所作所为。如果你计划要走捷径,请确保让你的负责人知道这样做的理由以及其中的风险。每次在走捷径时最好都让你的经理来确认实施成功,也就是“让他给你擦屁股”。

3.- 这是个几分钟就能搞定的事。
在我的家乡Barcelona,那里的圣家族大教堂让我非常的自豪,它的举世闻名来自于它的美丽,也来自于它的建筑完工日期的规划(它动工于1882年,目前仍未完工),但这可能是因为他们没有让一个程序员去估计这个完工时间,否则的话,估计出的完工所需的时间很可能2周。

如何纠正:从一开始,你就必须严肃的认识到,对于一个有一定规模的软件开发过程来说,进行精确的时间评估是不现实的,我们能做的只是猜测。同样要记住的非常相似一点是,我们通常会发现有很多事情根本不能预见到它们会花去我们数倍于我们初始估计的时间,我通常的做法是把估计的时间乘上1.5或2。

阅读更多 »

Javascript的匿名函数

一、什么是匿名函数?

在Javascript定义一个函数一般有如下三种方式:

  1. 函数关键字(function)语句
    function fnMethodName(x){alert(x);}
  2. 函数字面量(Function Literals)
    var fnMethodName = function(x){alert(x);}
  3. Function()构造函数
    var fnMethodName = new Function('x','alert(x);')

上面三种方法定义了同一个方法函数fnMethodName,第1种就是最常用的方法,后两种都是把一个函数复制给变量fnMethodName,而这个函数是没有名字的,即匿名函数。实际上,相当多的语言都有匿名函数

二、函数字面量和Function()构造函数的区别

  1. 虽然函数字面量是一个匿名函数,但语法允许为其指定任意一个函数名,当写递归函数时可以调用它自己,使用Function()构造函数则不行。
    var f = function fact(x) {
      if (x < = 1) return 1;
      else return x*fact(x-1);
    };
  2. Function()构造函数允许运行时Javascript代码动态的创建和编译。在这个方式上它类似全局函数eval()。
  3. Function()构造函数每次执行时都解析函数主体,并创建一个新的函数对象。所以当在一个循环或者频繁执行的函数中调用Function()构造函数的效率是非常低的。相反,函数字面量却不是每次遇到都重新编译的。
  4. 用Function()构造函数创建一个函数时并不遵循典型的作用域,它一直把它当作是顶级函数来执行。
    var y = "global";
    function constructFunction() {
        var y = "local";
        return new Function("return y");  //  无法获取局部变量
    }
    alert(constructFunction()());  // 输出 "global"
    

和函数关键字定义相比Function()构造器有自己的特点且要难以使用的多,所以这项技术通常很少使用。而函数字面量表达式和函数关键字定义非常接近。考虑前面的区别,虽然有消息说字面量的匿名函数在OS X 10.4.3下的某些webkit的引擎下有bug,但我们平常所说的匿名函数均指采用函数字面量形式的匿名函数。更多详细内容可以阅读《JavaScript: The Definitive Guide, 5th Edition》的Functions那章。 阅读更多 »