phper – 苏demo的别样人生 https://www.libaocai.com 行走于凡尘俗世,活得别样人生 Sun, 04 Jan 2015 07:01:26 +0000 zh-CN hourly 1 https://wordpress.org/?v=6.2.4 程序员达到高效率的一种境界 https://www.libaocai.com/1405.html https://www.libaocai.com/1405.html#respond Sun, 04 Jan 2015 07:01:26 +0000 http://www.libaocai.com/?p=1405 跟程序员相处你一定会有很多的挫折感。比如,程序员会把能让他们达到最高效率的那种神奇的境界叫做“那里”。

“那里”是真实存在的。至少对于我是这样的,很有可能你也很熟悉那里,只是情形不一样。对于非程序员的人来说,跟程序员的这种境界相对应的情形是, 当你完全投入进一本书或一场电影,你感觉整个世界都消失了,唯一留下了的只有你正在关注的东西。如果你有丰富的创作力,那有可能是在你写一本书或绘一副画 时候。

当你正全神贯注的读一本书上,有人打断了你,通常这会需要你花很长的时间重回到那种状态。通常,当我在读一本书,有人或什么事情(电话!)打断我, 他需要重读刚才那一页,试图接上刚才的思路。甚至一章的结束也会造成思路的打断,需要你花一段时间才能重新进入你刚才的那种阅读状态中。

我第一次进入这种境界是我深深的陷入了编程的状态,当时很年轻,大概17岁。我想写一个程序,在计算机屏幕上进行音乐合成。那是我第一次使用”结构 化编程“,是从一个朋友那里听来的。我在晚饭后开始干活,之后完全忘掉了时间,当我回过神来后,发现已经是早晨,鸟儿在树上鸣叫着向朝阳打招呼,到上班时 间了。我的第一反应是:”哇!,不会这么晚了吧!“我的感觉好像只忙了几个小时,但事实上已经过去将近10个小时了。

这次之后,这种状态出现了很多次,每次我都进入了一种忘我的境界,做事情比平时注意力不能集中或不能真正专注时又快又好。

一旦我知道了这种状态,我试图能重复它,进入它,试图能让这种状态保留更长的时间,获得更大的工作效率,或者能进入这种状态解决难题。很显然,对于 我,这种情形产生在绝对安静的环境里,在我面前的屏幕上只有一种东西(通常是文本编辑器)时,而且需要一个专用的时间,让我意识到不会被什么事情打搅。

数年过去了,生活越来越忙,如今更忙,我进入这种境界的频率越来越少。是否需要进入这种状态另说,现在进入这种状态可以做的大概就是闭上双眼,背着手想事情,如果遇到真正困难的问题或完全不熟悉的新任务,那会更好。

另一件让我印象深刻的事情是,当我处在这种状态里时,有人打断了我,我通常会表现的不太和蔼。我通常需要极大的忍耐不去发火(ok,我说实话,当我被打断时,我会发驴脾气,我的第一反应是发火,我怎么也忍不住。这方面需要多下功夫)。

原因很难说清楚,但我想改正这个毛病。当编写很复杂的程序时(有些问题会挑战我的能力的极限,但对你也许不是难题,而对我却是)我力图保持大脑里这 种我一直想达到的思维状态。一个打搅——不管多么的轻微和细小——整个心境都跌落到地上摔的粉碎。我必须重新构建整个状态才能工作下去,至少需要15分钟 甚至超过1小时。所以,30秒的打搅对于我的实际作用会延长至数十倍的时间,前提是我还能重回的之前的状态,而很多情形下是回不去了。

这种状态下效率的提高是如此的显著,以至于当想真正的干一件事时,我的办法是特意的为这种状态创造一种环境,我会等所有人都睡了,泡一壶新茶,把所有能造成分心的东西都关了(手机,辅助显示器等。)这样把可能的打搅降到最小。通常在这几个小时(2或3个)里,我把最困难的事情解决掉。其它较容易的事情在平时解决。

完全的专注具有强大的力量,它能让你完成你日常生活中或平时状态下不能完成的任务。

如果你总是处在一个噪杂和易分心的工作环境中,有时发现一些难关怎么也翻越不过去,你可以试试进入这种状态,当你真正的集中精力时你才会发现你究竟具有什么样的能力。

处在那种境界里并不是没有代价的,我通常需要好一段时间才能恢复,但终究收获大于损失,特别是它能让我解决在其它状态中不能解决的问题,以及能更快速的解决问题。

如果你也是一个生活在这种境界里的人,我真的想知道你的体验如何,请在评论里告诉我。谢谢。

后记:好几个人都推荐我看这个维基百科链接:意识流(心理学)

原文出自:Living in the zone

转载请注明:苏demo的别样人生 » 程序员达到高效率的一种境界

]]>
https://www.libaocai.com/1405.html/feed 0
好的代码里只需要一个return语句 https://www.libaocai.com/1385.html https://www.libaocai.com/1385.html#respond Sun, 04 Jan 2015 06:57:46 +0000 http://www.libaocai.com/?p=1385 别再这样写了:

public boolean foo() {

if (true) {

return true;

} else {

return false;

}

}

每次当我深入某个开源项目,看到大概是某个专家写的、并被有经验的专业人士审查过的这样的代码,我都会惊讶不已,竟然没有人去阻止这个开发者在这个方法里胡乱的放置返回语句。

请告诉我,把代码写成下面的样子很难吗?

public boolean foo() {

boolean flag = true;

if (true) {

flag=true;

}

else {

flag=false;

}

return flag;

}

这是Java基本常识。实际上,这不仅是Java基本常识,这是小学水平的Java知识。如果你的方法返回一个值,你应该在方法的开始处把它声明做 一个变量。然后再去做一些赋予这个变量正确意义的操作。然后,在你的最后一行,把这个变量返回给调用程序。这样做不仅仅是为写出好的代码,这是一种有教养 的表现。

你是否曾试图修改过一些在方法里到处都是返回语句的程序代码?无从下手。事实上,去维护这样的代码,你第一要做的是重新组织它的结构,让它里面不再有一大 堆的返回语句。这样才能把事情做好。没有任何一个方法是不可以写成只在末尾处有一个的、单一的、易于找到的返回语句的形式的。

的确,烂程序员总有一万个理由来说明他们为什么编写出这样糟糕的程序代码。“我只是为了避免在返回时一堆的多余的条件判断语句。”那好,首先,我告诉你, 计算机中执行一些条件判断语句时是该死的快,你用短路一个方法来节省CPU的一两个指令操作不是显的太荒诞了吗。此外,如果这些所谓多余的条件判断语句最 终没有派上用场的话,这是否是一个有用的信号来说明你的“多余”的代码可能需要重写,也许可以把它们重构成另外一个方法,让它们显的不多余?

关键要说的是,没有任何理由可以为写糟糕的代码或当懒惰的程序员做托辞,特别是当写出好的代码并不是那么困难的情况下。不要在写出里面有成百上千个返回语句的方法了。Java里的方法只可以返回一个值,相应的,一个方法应该有且只有一个返回语句。

转载请注明:苏demo的别样人生 » 好的代码里只需要一个return语句

]]>
https://www.libaocai.com/1385.html/feed 0
程序出错后,程序员给测试人员的20条高频回复 https://www.libaocai.com/1383.html https://www.libaocai.com/1383.html#respond Sun, 04 Jan 2015 06:57:24 +0000 http://www.libaocai.com/?p=1383 程序员和软件测试员之间的关系无须多言。这些经典回复是国外程序员总结分享的,“全球通用”。

20. “That’s weird…”很奇怪……

19. “It’s never done that before.” 以前没这样过的。

18. “It worked yesterday.”昨天还好好的。

17. “How is that possible?”那怎么可能?(怎么会出问题?)

16. “It must be a hardware problem.”这一定是硬件问题。

15. “What did you type in wrong to get it to crash?”你输入什么东西后才崩溃的?

14. “There is something funky in your data.”你的数据有问题。

13. “I haven’t touched that module in weeks!”我好几个礼拜没动那个程序了!

12. “You must have the wrong version.”你一定在用错误的版本。

11. “It’s just some unlucky coincidence.”这只是凑巧。

10. “I can’t test everything!”我无法测试所有东西。(我的机器环境下,无法测试所有的可能情况。)

09. “THIS can’t be the source of THAT.”“这”不可能是问题的原因。

08. “It works, but it hasn’t been tested.”程序能用,不过还没有测试。

07. “Somebody must have changed my code.”一定有人改了我的代码。

06. “Did you check for a virus on your system?”你的电脑扫描病毒了么?

05. “Even though it doesn’t work, how does it feel? 即便程序不行了,(你觉得)程序写得如何?

04. “You can’t use that version on your system.”你不能在你系统上使用那个版本的程序。(程序版本和系统有冲突。)

03. “Why do you want to do it that way?”你怎么会想着那样操作啊?

02. “Where were you when the program blew up?”程序崩溃时,你在做什么呢?(做了哪些操作?)

第1条会是什么?猜猜看吧!

01. “It works on my machine”在我机器上好好的!!!(潜台词:怎么在你那就出问题了呢!!!

转载请注明:苏demo的别样人生 » 程序出错后,程序员给测试人员的20条高频回复

]]>
https://www.libaocai.com/1383.html/feed 0
向中级程序员转变必备的10个秘诀 https://www.libaocai.com/1379.html https://www.libaocai.com/1379.html#respond Sun, 04 Jan 2015 06:56:40 +0000 http://www.libaocai.com/?p=1379 在一封与TechRepublic会员交流的邮件当中,提到了面向程序员的博客、文章及杂志分成两类:面向初学者类以及面向专家类。这个观点很好,有关程序员如何从初级跃升到中级的信息极少。以下是为了实现这种转变需要你去做的10件事。

1.学习另一门语言 其 实你学的是哪一门语言并没有关系,但是学习另一门语言(不管你已经了解多少种语言)将把你打造为更好的程序员。能学会一门与你日常使用的语言风格迥异的 语言则更佳。打个比方,如果你是C#程序员,学习VB.NET或者Java对你的帮助就没有学习Ruby或者Groovy大。 我说“学另一门语言”的意思是要真正学会它。学习一门语言包括三个领域的知识:语法、内置操作符和库,以及“如何使用”。前面两个简单;我认为一名有经验 的程序员,根据语言的不同,能在半小时到几小时内掌握足以维护代码的语法知识。操作符和库只不过是知识逐步积累的过程,你什么时候想清楚要了解什么了,再 去查阅参考材料也不迟。只有第三项,“如何使用它”-要花上你几个月的时间去跟这门语言打交道,真正的奇迹就在此发生。我建议用这门语言的风格去做一个适 合该语言的项目。 真正学会了另一门语言之后,我敢保证你的程序员水平一定会突飞猛进。

2.学习先进的搜索技术、手段和及策略 作 为一名好的程序员,不仅仅是技能的问题了,而是你寻找信息的技巧,这个趋势越来越明显。对大部分人而言,仅仅输入“现代语言及开发框架”,这都是泛泛之 谈,记不住多少的。因此,你完成工作的能力通常取决于你的检索能力。不幸的是,了解到如何找到准确而高质量的信息可不仅仅是跑到TechRepublic 来找答案,或者在你选好的搜索引擎上敲几个字那么简单。 “技术(Techniques)”、“手段(tactics)”和“策略(strategies)”看起来是一回事,实际上并非如此。你需要学会的技术是 掌握你喜爱的搜索引擎的高级搜索系统;你需要了解诸如布尔操作符,如何过滤结果(像“非”关键字,域限制等等),关键字的词序扮演什么角色,等等。一句 话,RTFM(Read The Fucking Manual,读那些他妈的手册)吧。 你应该学会这些手段,诸如如何接近特定的搜索,以及了解自己实际上想查些什么。查错误很容易—只需查出错代码即可—但是许多搜索的关键字选择要困难得多。 至于策略,你需要学会的东西,包括像应该使用哪种搜索引擎(提示:普通的搜索引擎不一定就是最佳选择),使用普通搜索引擎前应该访问哪个网站,甚至是应该 到哪个论坛去寻求帮助,等等。

3.帮助别人 教 别人始终是学习一切东西的最好方法之一。相对而言,由于你在开发领域还是个新手,认为自己没什么可教给人家的,这可以理解。但这毫无意义。记住,你所学 到的一切都是你从别人或别处学到的;因此请尝试一下,成为另外一个人要请教的“别人”。每天尽量花一点时间试着回答TechRepublic上的问题,其 他网站的亦可。读读其他会员的回答,你也可以学到很多东西。

4.有耐心,常练习 研 究表明,要成为一名“专家”,需要花费10年,或者10000到20000小时的刻意练习时间。真的很久。还有,成为专家不尽然就是执行10年同样的任 务;通常这意味着要在特定领域内执行广泛的任务。需要花费大量的时间和精力才能成为“专家”;做几年程序员是不够的。想在30岁左右成为一名高级软件开发 工程师?要么尽早接受教育/培训,要么你得愿意在闲暇时间进行大量的工作、阅读和练习。我从高中开始编程,还牺牲了许多休息时间去跟踪行业发展、学习新技 能等等。结果,我获得中级和高级程序员的时间就比我的大部分同事都要早得多,随着时间的推移,这些就转化成为很多的金钱。

5.对教条拒之门外 是 时候开诚布公了:也许初级程序员了解的东西还不足以说出做某件事情有一种最好的方式。尊重朋友或者权威的观点是好的,但直到你更有经验之前,不要把他们 的观点说成是你自己的。很简单,如果你所了解的不足以让你独立地找出这些东西来,你又怎么会认为你知道哪一位“专家”是对的呢?话是难听了点,不过请相信 我;由于受某些愚蠢建议的蛊惑,或者追随某些根本不知道自己在说些什么的所谓专家,白白把自己的职业生涯耽搁了几年,这样毛头小伙程序员,我见过多了。这 一点有一个很好的例子,就是面向对象结构的滥用。比如说,许多初级者读了一些有关面向对象的信息后,突然间,他们那简单的应用程序的类图看起来就像埃菲尔 铁塔一样了。

转载请注明:苏demo的别样人生 » 向中级程序员转变必备的10个秘诀

]]>
https://www.libaocai.com/1379.html/feed 0
成为优秀PHP开发人员做到的5件事 https://www.libaocai.com/1371.html https://www.libaocai.com/1371.html#respond Sun, 04 Jan 2015 06:54:51 +0000 http://www.libaocai.com/?p=1371 Php是当今互联网开发语言中的中流砥柱,大约有2000万个域名(网站)使用的语言的都是php语言。因其巨大的优势和极度的弹性,php语言已经成为一门非常流行的语言。作为一个phper,如果你想更加优秀,请浏览下面的内容并记住。

第一:使用php核心函数和类

在准备创建函数之前去查一下php手册吧,也许你想要的函数别人已经构建好了。这些函数和类不仅可以简化开发效率和流程,更重要的是他们往往有更高的执行效率。

第二:创建一个配置文件

散乱的配置通常会让你手忙脚乱。为了更加容易的组织和连接数据库,你应该创建一个主要的便于php操作的配置文件。配置文件就像一个函数一样方便使用,而不是在不同的文件进行配置。

第三点:确保没有过多的做注释

大家都知道在编程的时候做注释是一个好习惯,但并不是注释越多越好。你没有必要为每一行代码做注释。注释只是为了用来帮你下次阅读代码的时候能够更好的理解代码。

第四点:优秀的源码编辑器有助节省时间

在web开发当中,你的大多数时间都是用来编写代码。所以说好的源码编辑器是重要的,好的源码编辑器不仅仅可以帮你节省时间,还可以提供一些你需要的特性,比如说,语法高亮、代码补全、调试等等。

第五点:和其他php开发人员建立人际关系网

你不可能永远都做到完美,让你不断提高自己的一个方法就是和其他同行建立关系网。没什么比学习和分享更加高产。

转载请注明:苏demo的别样人生 » 成为优秀PHP开发人员做到的5件事

]]>
https://www.libaocai.com/1371.html/feed 0
代码演绎:一个程序员的爱情故事 https://www.libaocai.com/1303.html https://www.libaocai.com/1303.html#respond Sun, 04 Jan 2015 06:36:03 +0000 http://www.libaocai.com/?p=1303 //一个程序员的爱情故事
public class MyLoveStory    {
public static void Main(string[] args){
//The ForeStory
int result = 1;
bool love = false;//以前有个小男孩,没有爱情,孤孤单单一个人。
if (love)   //他认为如果是爱情。
result = AtOneTime();//那必须是两个人在同一个时间爱上彼此。
//But Now…
//但是现在长大了,有了爱情,却出现了第三者
if (args[0] == “Has” && args[1] == “Third” && args[2] == “One”){                 love = false;//爱情没了
result = DoPart();//分手,独自一个人。
//现在这个男孩的心情是:如果女生生活的很悲惨,自己会伤心。
//如果看到女生活的很幸福,自己更伤心,因为幸福不是自己给的。                   Console.WriteLine(GetNowHeartState.ToString());
}
}
//男生的心情
internal enum HeartState {            Sad,            MoreSad
}
//女生的生活状态
internal enum LifeState
{      Nice,            Poor,
}
//男生现在的心情
internal HeartState GetNowHeartState(LifeState girlLife){
//现在这个小男孩的心情是:如果生活的很悲惨,自己会伤心。
//如果看到女生活的很幸福,自己更伤心,因为幸福不是自己给的。
if (gilrLife == LifeState.Poor)
return HeartState.Sad;
else
return HeartState.MoreSad;
}
//爱情是在同一时间爱上彼此
internal static int AtOneTime(){
//1+1=2
return 1 + 1;
}
//分手
internal static int DoPart() {
// 2-1=1
return 2 – 1;
}
}
大家觉得这个类怎么样?

转载请注明:苏demo的别样人生 » 代码演绎:一个程序员的爱情故事

]]>
https://www.libaocai.com/1303.html/feed 0
程序员应知——循序渐进 https://www.libaocai.com/1300.html https://www.libaocai.com/1300.html#respond Sun, 04 Jan 2015 06:35:38 +0000 http://www.libaocai.com/?p=1300 作为程序员,我想每个人都对于提高和进步非常渴望,也期望自己有朝一日能够从菜鸟变成大师级的人物,能够做出很棒的系统,能够得到他人的尊敬和赞赏,当然还可以得到不菲的收入。

然而,想要达到那个层次,不可能一蹴而就,必须要踏踏实实,一步一个脚印,逐步提高。这在每个行业或者说每个人的成长过程中都是一样的,所以我们必须要把握每一个提高的机会,从一点一滴做起。古语云:不积跬步,无以至千里,道理也是一样的。

前几天一位医学专业的朋友谈到了医学上的微创新,他说,如果看医学上一两年的发展,似乎没有什么特别大的进步和创新,但是,这并不意味着医学上没有进步,当我们回头看十年前,再与当前的情况作比较的话,就会发现已经有了很大的创新,而这些创新并非是一下子就出来的,而是经过十年来一点一点的微小的创新积累出来的,其实也就是一个量变引起质变的过程。

再说一个程序员会非常熟悉的例子,大家一定都玩过游戏,比方说《暗黑破坏神》《魔兽世界》等等需要打怪升级的游戏,里面的设定并不会让玩家一下子从菜鸟成为超级高手,那样游戏的趣味性就大大下降了,玩家必须通过不断的积累,累计经验值,然后在一定的时候升级,在到达一定的级别的时候才能够学会某种技能。其实在这里面,每一次小的升级都可以对应行业中的一次微创新,而学到指定级别下的技能,则可以对应一次变革性的创新。

类似的例子举不胜举,只要稍微注意,就能够发现。

然而,作为程序员,想要成为高级程序员,想要获得架构师、系统分析师、DBA等等诱人的称号,有时候却会比较急躁,在自己的能力还没有达到的时候,就匆匆上马,接受自己的能力范围之外的工作,就为了那个“名”,结果却往往会得不偿失,一方面有拔苗助长的嫌疑,另一方面对于项目也是一种损害,做出了不好的架构,系统分析不到位而导致客户不满意,诸如此类的情况,在我们身边相信大家都见过吧。

所以,想要真正做好项目,做好程序员,我们还是需要循序渐进,然而到底应该怎么做呢?我的建议,仅供参考。

对于刚刚踏入软件行业的同学来说,当然就是多多编写代码,在参与的各个项目中学习并且积累经验。在这个阶段我们会感觉进步非常快,很快就感觉可以做很多具体的工作了,个人也会非常有成就感。但是,此时千万不可被胜利冲昏了头脑,不能觉得自己已经再也无法从项目中、从团队的成员那里学到东西了,觉得项目离开自己就做不下去了。相反,这个时候应该继续保持低调,以空杯子的心态努力学习更多的知识。

做了三年左右的程序员之后,我想大家都会有一个飞跃,积累出来的经验得到总结,也有了自己的思想,这个时候,很可能项目中所能够学到的东西已经无法满足需要了,所以就要找寻其他积累经验的方式。当然跳槽、换项目是一种方式,而另一种方式就是多多从各种渠道——包括网站、书籍等——学习知识,了解行业的动态,另外还要多多与其他人交流,那样会产生很多想法,从而更好地引起个人的思考。

到了七八年或者十年左右,可能会迎来另一次飞跃,做过的项目很多,积累的经验很多,思考的成果也很多,真正形成了自己的风格和思想,这个时候仍然不能放弃学习和交流,而另一方面,思考会变得更加重要,并且也是要确定自己发展方向的时候了。到底是做项目经理,还是架构师,还是系统分析师,或者DBA等等,在对自己有了比较清醒的认识之后,就可以确定自己的目标了,然后就要为之做各个方面的积累,准备迎接下一次质变。

上面的内容仅仅是我的建议,时间的长短和具体的做法会因人而异,在以后的我也无法给出建议,毕竟我也还在等待下一次升级。我想大家所要了解到的就是不能放弃学习和提高,而要不断进步,那样经过一段时间之后,一定会有变化的。

其实我们在工作的过程中,循序渐进不仅仅体现在个人的成长上,对于代码的修改也一样,特别是对于遗留代码,想要完善的时候,也需要使用循序渐进的方式。

之前曾经看过对于系统是要重构还是重写的讨论,更多人倾向于重构,毕竟那是一种循序渐进的方式,不断地对代码进行修改,质量一步一步提高,形成一定的积累之后,就会发现代码的质量会发生很大的改变。而重构本身,也提倡小步前进,道理是相同的。

如果进行的是重写,则进行的是一种革命式的修改,然而,一切重头开始,不可避免会因为没有积累,而导致所要耗费的人力物力财力都非常大。

总之,作为程序员,应该了解到这个很重要的原则——循序渐进,也希望能够听到大家的想法。

转载请注明:苏demo的别样人生 » 程序员应知——循序渐进

]]>
https://www.libaocai.com/1300.html/feed 0
程序员应知—善于借鉴 https://www.libaocai.com/1296.html https://www.libaocai.com/1296.html#respond Sun, 04 Jan 2015 06:34:43 +0000 http://www.libaocai.com/?p=1296 导读:作者侯伯薇曾在CSDN博客中写了一篇《程序员应知—循序渐进》,今天我们再来领略他写的一篇《程序员应知—善于借鉴》。在他看来,借鉴具有很强的力量。通过借鉴,我们能够创造出一些新的有自身特色的东西来。想要真正实现良好的借鉴,我们要时刻有借鉴的准备,因为机会总是留给有准备的人。

文章内容如下:

最近几天对D语言有了一些了解,据说能够具备和C、C++一样的高性能,语法类似于C#和Java,并且支持当前比较流行的语言——像Ruby和Python——的一些新特性,而且微软还提供了Visual D的插件,可以安装在Visual studio中,从而使用它来开发D语言的程序。

我们会发现,其实这门语言,在很大程度上是以往各种语言长处的结合(不知道是否实现了这一点,但目的应该是这样),与其说是一种新的语言,不如说是在借鉴了很多语言之后,组合出的一种语言。

由此我们可以发现,借鉴具有很强的力量。通过借鉴,我们能够创造出一些新的有自身特色的东西来。

说到借鉴,就不能不说创新,曾经有位朋友拿微软和苹果做过比较:微软最近几年来,在技术上一直没有非常明显的创新,似乎总是跟在别人的后面走,比方说云计算,比方说手机开发,再比方说服务式的web应用等等。而苹果的东西似乎每一种都具有很强的创新性,iPad、iPhone、手表式的ipod,还有传言中的裸眼3D功能的iPad等等,都让人能够眼前一亮。

的确,创新很棒!能够产生不错的效果。相比之下,借鉴似乎就要差一些,而且“山寨”和借鉴之间也有些搞不清楚。然而,我们也应该看到,创新其实也是建立在借鉴的基础之上,而且借鉴也能够产生很不错的效果。毕竟,创新力不是说说就能具备的,也需要长时间的积累和思考,而且还有一些天赋的成分在里面,试问世界上又能有几个乔帮主级别的人物。而借鉴往往更适合我们这些普通人,能够让我们从中受益。

作为程序员来说,也有很多地方都可以采用借鉴的方式来提升自己的能力。

比方说前几天我在百度Web app开发大会上的演讲中,谈到Web应用前端设计如何能够美观的时候,我就借鉴了版面设计的理论(来自于《写个大家看的设计书》),web应用的设计也应该遵循重复、对齐、对比、亲密性四种原则,那样就会达到美观的效果。而谈到设计需要规范的时候,我也借鉴了项目中经常会使用的代码规范,对于前端设计也一样要有相应的规范,那样才能够更利于开发和后期的维护工作。

再比方说之前的一篇blog中,我谈到了如果《以投资的观点学习编程》,这正是在听了公司投资部经理关于投资的一场讲座之后想到的,学习编程和投资一样,也有不少可以触类旁通的地方。

不仅仅如此,软件这个年轻的产业,本身很多方法都是从其他传统行业借鉴过来的,软件架构在很大程度上借鉴了建筑学的知识,而精益的理论更是来自于生产行业,我们能够看到,软件行业的发展与对其他行业的借鉴是分不开的。

而作为程序员,我们应该借鉴什么呢?

首先我想要借鉴已有的程序和项目,当我们想要完成一项任务的时候,不一定要从零开始,毕竟不是考试,我们完全可以先查看一下是否已经有类似的程序或者类似的项目,看看他们是如何完成的,而且在完成的过程中是否有相关的经验和教训,那些都是非常宝贵的财富。当然我们不是要完全地复制,而是要“批判地学习”,在理解了已有内容的基础上,加上自己的思考,从而创建出最适合我们自己的程序。在这个过程中,借鉴本身就是学习和提高的过程。

其次我想可以借鉴在非计算机领域解决问题的方式。我们知道,计算机真正广泛应用在解决问题上,也就是几十年间的事儿,之前遇到问题,传统的行业中一样可以解决,也都形成了不少方法论。那正是我们需要借鉴的地方,不一定在解决问题的时候完全要依赖于计算机,先从非计算机的方式入手,放宽一下自己的视野,可能会有更好的效果。

想要真正实现良好的借鉴,我想我们要时刻有借鉴的准备,机会总是留给有准备的人的,当我们在平时的生活中,或者是在各种书籍中,发现好的解决问题的方法时,就可以试着思考一下,是否可以借鉴到计算机领域中,这样,在以后编程解决问题的时候,可能就会不自觉地使用了。切不可把自己处于一种封闭的状态,对外界的事情不闻不问,更可怕的就是完全排斥了,根本就不接受外界的思想,那样“闭关锁国”的话,如何才能发展呢?

转载请注明:苏demo的别样人生 » 程序员应知—善于借鉴

]]>
https://www.libaocai.com/1296.html/feed 0
如何成为高效的 Web 开发者 https://www.libaocai.com/1240.html https://www.libaocai.com/1240.html#respond Sun, 04 Jan 2015 06:18:32 +0000 http://www.libaocai.com/?p=1240 要成为高产、高效的Web开发者,这需要我们做很多工作,来提高我们的工作方式,以及改善我们的劳动成果。

下面是10个提高效率的步骤,虽然不能保证解决你在开发中的所有问题,但至少是非常实用的,可以简化你的Web开发流程,使开发的每一个环节快速、流畅。还可以帮助你节省大量的时间,以便开发更多、更好的项目。

1. 使用Web开发框架

 

一个良好的Web开发框架,可以帮助你

解决常见的Web开发问题,如标准的Web页面布局、Web表单处理、浏览器兼容性解决等)。

测试Web开发的bug、安全和性能。

使代码重用更容易,因为有一个统一的API。

社区开发的插件和工具,可以进一步增强开发(jQuery有很多非常棒的插件,比如用户界面、图像和网页排版等)。

遵循编码的最佳实践和伟大的编程设计模式,你甚至不用去思考。

有开发社区和用户的支持,你可以获取帮助以及进行协作。

初学者使用起来非常容易。

有很多Web开发框架你可以选择

完整的Web应用程序框架,如Ruby on Rails或CakePHP。

JavaScript框架,如jQuery、MooTools和其他许多鲜为人知但很优秀的用于处理用户界面、客户端逻辑和Ajax的JavaScript框架。

如果你想加快视觉层设计,你可以使用一个CSS框架(如,Toast),或者网页布局框架(如,960 Grid System)。

专门的框架,如用于内容管理系统开发的WordPress主题框架。

现在还有移动Web应用程序开发框架。

2. 建立一个代码片段库

IT界的名言“不要重复发明轮子”。回收你的代码,创建一个你最喜欢和经常使用的代码片段集,并确保代码组织良好,可以被轻易搜索到。

最简单的方法是,你可以在硬盘中建立源代码目录。但这未必是最好的方式。

一种方法是使用允许保存代码片段的源代码编辑器或IDE。例如,Notepad++的SnippetPlus插件和Dreamweaver内置的片段面板。

 

Adobe Dreamweaver的片段面板

另一种方法就是使用专门的片段工具,如Snippet或Snipplr.。

你甚至可以使用自己喜欢的代码库/版本控制系统,像Git,来更好地管理你的源代码。

3. 使用正确的工具

这应该是显而易见的,确保你拥有一些优秀的、你知道如何更有效地使用的工具和装备。

如果你是一个网页设计师,你可能需要Photoshop和Illustrator。如果你是一名开发人员,你需要一些优秀的Web开发应用程序,以帮助你完成工作。

当然,各领域之间、开发者之间的工具集是不同的。重要的是你的工具应该可以帮助你尽可能地高效完成工作。

 

4. 收集和整理免费设计资源

在网络上有许多网站放出免费设计资源。你可以将这些网站添加到你的RSS阅读器,它们每发布一个免费软件或资源,你就可能了解到。

对于一个设计师来说,这样可以得到大量的图标、PSD模板、矢量插图、风景图像、按钮、GUI元素、Photoshop笔刷、字体库和各种其他的设计元素。

 

5. 冲刺式工作(短时间高效工作)

不要连续工作几个小时,这样你的效率可能会下降,随着时间的推移,你的工作品质也会下降。每次连续工作10~20分钟,可以保持你大脑活跃,可以更好地产生新的想法。

在短时间的工作,意味着你总是有一个新鲜的开始。

6. 休息

冲刺工作最重要的部分是休息。让你的头脑休息至关重要。利用这些休息时间将自己的工作区分开,干些其他工作或运动一下。

另外,除非有必要,否则不要计划你的时间。你不必每次都工作15分钟,然后休息5分钟。要选一个好的休息点,有一个舒适的休息。

你可以参考番茄工作法。

 

7. 在学习上投入时间

短期内,不断学习、跟上行业形势并保持领先是很费时间的。

然而,通过在自我提高上投入时间,你可以在工作的其他方面节省时间,可以增加你的劳动成果并提高工作质量。

8. 不要过度规划

你不应该严格规划你的每一天。你的头脑需要有一定的灵活性,需要有时间去认真思考。

请一定要保持你的时间表灵活变化。我发现,超过规划的工作,我可能会一拖再拖。

9. 不要急于直接开始

这和过度规划是两个极端。虽然你不应该过度规划,但你需要计划下。

每当你开始一个项目的工作,确保知道你对这个项目的期望。做网页设计项目时,需要了解客户期望做的、首页内容、颜色设置等工作。

了解有关项目的某些内容,可能会使你工作在正确的方向,而不至于在黑暗中摸索。

在我开始客户的网站项目工作时,我需要先确定:

颜色方案

网站的目标

他们能够提供的任何内容

他们已经拥有的任何设计思路

 

10. 不要使事情复杂化

这可能是所有这些最重要的一条:不要使你的工作复杂化。不要做更多的工作,不要在给定的时间内为自己分配过多的工作。我不主张给你的客户提供最少的交付时间,但你肯定也不能提供最长的时间。 要明白客户他们需要什么,不能多也不能少。 另外,不要制定过于复杂的开发战略。让事情简单一些。

转载请注明:苏demo的别样人生 » 如何成为高效的 Web 开发者

]]>
https://www.libaocai.com/1240.html/feed 0
惹恼程序员的10件事 https://www.libaocai.com/1215.html https://www.libaocai.com/1215.html#respond Sun, 04 Jan 2015 06:09:43 +0000 http://www.libaocai.com/?p=1215 程序员是一个比较特殊的群体,他们因为长期和电脑打交道所养成的性格和脾气也是比较相近的。当然,既然是 人,当然是会有性格的,也是会有脾气的。下面,让我来看看10种能把程序惹毛了的事情。一方面我们可以看看程序员的共性,另一方面我们也可以看看程序员的 缺点。无论怎么样,我都希望他们对你的日常工作都是一种帮助。

第十位 程序注释

程序注释本来是一些比较好的习惯,当程序员老手带新手的时候,总是会告诉新手,一定要写程序注释。于是,新手们当然会听从老手的吩咐。只不过,他们可能对程序注释有些误解,于是,我们经常在程序中看到一些如下的注释:

代码:

  1. r = n/2; //r是n的一半
  2. //循环,仅当r- n/r不大于t
  3. while ((r-n/r) <=t){
  4. r =0.5* (r-n/r); // 设置r变量
  5. }

每当看到这样的注释只注释是什么,而不注释为什么,相信你一定会被惹火,这是谁写的程序注释啊?不找来骂一顿看来是不会解气了。程序注 释应该是告诉别人你的意图和想法,而不是告诉别人程序的语法,这是为了程序的易读性和可维护性,这样的为了注释而注释的注释,分明不是在注释,而是在挑 衅,惹毛别人当然毋庸置疑。

第九位 打断

正当程序沉浸于编程算法的思考,或是灵感突现正在书写程序的时候,但却遭到别人的打断,那是一件非常痛苦的事情,如果被持续打断,那可能会让人 一下子就烦躁起来。打断别人的人在这种情况下是非常不礼貌的。被打断的人就像函数调用一下,当其返回时,需要重新恢复断点时的现场,当然,人不是电脑,恢 复现场通常是一个很痛苦的过程,极端的情况下可能需要从头开始寻找思绪,然后一点一点地回到断点。

因此,我看到一些程序员在需要安静不被打扰的时候,要么会选择去一个没人找得到的地方,要么会在自己的桌子上方高挂一个条幅以示众人本人正执行 内核程序,无法中断,请勿骚扰,谢谢!可见正在沉浸于工作的程序被打断是多么大的开销。自然,被打断所惹毛了的人也不在少数了。

第八位 需求变化

这个事情估计不用多说了。只要是程序员,面对需求变化的时候可能总是很无奈的。一次两次可能还能接受,但也顶不住经常变啊。据说敏捷开发中有一 套方法论可以让程序员们享受需求的变化,不知道是真是假。不过,今天让你做一个书桌,明天让你把书桌改成餐桌,后天让你把餐桌改成双人床,大后天让你把床 改成小木屋,然后把小木屋再改成高楼大厦。哎,是人都会被惹毛了的。那些人只用30分钟的会议就可以作出任何决定,但后面那几十个程序员需要搭上几百个小 时的辛苦工作。如果是我,可能我也需要神兽草泥马帮助解解气了。

不过,这也正说明了,程序员并不懂得怎么和用户沟通,而用户也不懂得和程序员沟通,如果一个项目没有一个中间人(如:PM)在其中协调的话,那 么整个项目可能就是鸡同鸭讲,用户和程序员都会被对方所惹毛了。如果要例举几个用户被惹毛的事情,估计程序员的那种一根筋的只从技术实现上思考问题的方法 应该也能排进前5名。

第七位 经理不懂技术

外行领导内行的事例还少吗?领导一句话,无论对不对,都是对的,我们必需照做,那怕是多么愚蠢多么错误的决定,我们也得照做。程序员其实并不怕 经理不懂技术,最怕的就是不懂技术的经理装着很懂技术。最可气的是,当你据理力争的挑站领导权威的时候,领导还把你视为异类。哎,想起这样的领导别说是骂 人了,打人的冲动都有了。

其实,经理只不过是一个团队的支持者,他应该帮助团队,为团队排忧解难。而不是对团队发号施令。其实管理真的很简单,如果懂的话,就帮着做,如果不懂的话,就相信下属,放手让下属做。最怕的就是又不懂技术,还不信任下属的经理了。哎,这真是程序员的痛啊。

第六位 用户文档

用户文档本来不应该那么的令人害怕。这些文档记录了一切和我们所开发的软件有关的一些话题。因为我们并不知道我们所面对的用户的电脑操作基础是 什么样的,所以,在写下这样的文档的时候,我们必需假设这个用户什么也不懂。于是,需要用最清楚,最漂亮的语言写下一个最丰富的文档。那怕一个拷贝粘贴的 操作,可能我们都要分成五、六步来完成,那怕是一个配置IP地址的操作,我们也要从开始菜单开始一步一步的描述。对于程序员来说,他们在开发过程中几乎天 天都在使用自己开发的软件,到最后,可能都有点吐了,但还得从最简单的部份写这些文档,当然容易令他们烦燥,让程序员来完成这样的文档可能效果会非常不 好。所以,对于这样的用户文档,应该由专门的文档人员来完成和维护。

第五位 没有文档

正如上一条所说的,程序员本来就不喜欢写文档,而因为技术人员的表达能力和写作能力一般都不是太好,所以,文档写的也很烂。看看开源社区的文档 可能就知道了。但是,我们可爱的程序员另一方面最生气的却是因为没有文档。当然,上面说的是用户的文档,这里我们说的是开发方面的文档,比如设计文档,功 能规格,维护文档等等。不过,基本上都是一样的。反正,一方面,我们的程序员不喜欢写文档,另一方面,我们的程序又会被抱怨没有文档,文档太少,或者文档 看不懂。呵呵。原来在抱怨方面也有递归啊。据说,敏捷开发可以降低程序开发中的文档,据说他们可以把代码写得跟文档和示图似的,不知道是真是假。不过,我 听过太多太多的程序员抱怨没文档太少,文档太差了,这个方面要怪还是怪程序员自己。

第四位 部署环境

虽然,程序员们开发的是软件,但是我们并不知道我们的程序会被部署或安装在什么样的环境下,比如,网络上的不同,RAID上的不同,BIOS上 的不同,操作系统的不同(WinXP和Win2003),有没有杀毒软件,和其它程序是否兼容,系统中有流氓软件或病毒等等。当然,只要你的软件出现错 误,无论是你的程序的问题,还是环境的问题,反正都是你的问题,你都得全部解决。所以,程序员们并不是简单地在编程,很多时候,还要当好一个不错的系统管 理员。每当最后确认问题的原因是环境问题的时候,可能程序员都是会心生怨气。

第三位 问题报告

我的软件不工作了,程序出错了,每当我们听到这样的问题报告的时候,程序员总是感到很痛苦,因为这样的问题报告等于什么也没有说,但还要程序员 去处理这种错误。没有明确的问题描述,没有说明如何重现问题,在感觉上,当然会显得有点被人质问的感觉,甚至,在某些时候还掺杂着看不起,训斥的语气,当 然,程序员基本上都是很有个性的,都是软硬不吃的主儿。所以,每当有这样的语气报告问题的时候,他们一般也会把话给顶回去,当然,后面自己然发生一些不愉 快的事情。所以,咱们还是需要一个客服部门来帮助我们的程序员和用户做好沟通。

第二位 程序员自己

惹毛程序员的可能还是程序员自己,程序员是相轻的,他们基本上都是恃才傲物的,总是觉得自己才是最牛的,在程序员间,他们几乎每天都要吵架,而且一吵就吵得脸红脖子粗。在他们之间,他们总是被自己惹毛。

技术上的不同见解。比如Linux和Win,VC++和VB,Vi和Emacus,Java和C++,PHP和Ruby等等,等等。什么都要吵。

老手对新手的轻视。总是有一些程序员看不起另一些程序员,说话间都带着一种傲慢和训斥。当新手去问问题的时候,老手们总是爱搭不理。

在技术上不给对方留面子。不知道为什么,程序员总是不给对方留面子,每当听到有人错误理解某个技术的时候,他们总是喜欢当众大声指证,用别人的错误来表明自己的博学,并证明他人的无知。

喜好鄙视。他们喜好鄙视,其实,这个世界上没有一件事是完美的,有好就有不好,要挑毛病太容易了。程序员们特别喜欢鄙视别人,无论是什么的东西,他们总是喜欢看人短而不看人长。经常挂在他们嘴上的口头禅是太差、不行等等。

程序员,长期和电脑打交道,编写出的代码电脑总是认真的运行,长期养成了程序员们目空一切的性格,却不知,这个世界上很多东西并不是能像电脑一样,只要我们输入正确的指令它就正确地运行这么简单。程序员,什么时候才能变得成熟起来

第一位 程序员的代码

无论你当时觉得自己的设计和写的代码如何的漂亮和经典,过上一段时间后,再回头看看,你必然会觉得自己的愚蠢。当然,当你需要去维护他人的代码 的时候,你一定要在一边维护中一边臭骂别人的代码。是否你还记得当初怎么怎么牛气地和别人讨论自己的设计和自己的代码如何如何完美的?可是,用不了两年, 一刚从学校毕业的学生在维护你的代码的过程当中就可以对你的代码指指点点,让你的颜面完全扫地。

呵呵。当然,也有的人始终觉得自己的设计和代码就是最好的,不过这是用一种比较静止的眼光来看问题。编程这个世界变化总是很快的的,很多事情, 只有当我们做过,我们才熟悉他,熟悉了后才知道什么是更好的方法,这是循序渐进的。所以,当你对事情越来越熟悉的时候,再回头看自己以前做的设计和代码的 时候,必然会觉得自己的肤浅和愚蠢,当然看别人的设计和代码时,可能也会开始骂人了。

转载请注明:苏demo的别样人生 » 惹恼程序员的10件事

]]>
https://www.libaocai.com/1215.html/feed 0