2013第1周四雪

今天带人看了雪西湖后将其送走,现在到家里,打开电脑有点无所事事,想睡觉又感觉有点早,想做事又感觉很多是琐事,知道哪些是重要的,但为什么不能持续的把精力和时间花费在哪些事情上呢?摘录一些阅读文章应付今天的任务吧:

我的道路:如何成为一名程序员

  1. 建立一个博客

 注册一个域名,买一 个空间。你会惊奇的发现有很多可写的东西。你可以记录下你成为一名程序员的过程,或写一下你感兴趣的技术方面的东西。我一直以为没什么好写的,可当真正思 考这些问题时,却发现有很多值得写的。最重要的事情是开始去做。

  2. 开发一些东西

直接开始学一种语言,事实上最重要的 是学习编程语言的基础知识,而不是劳神费力的去选择一种"最好的编程语言"。

  3. 注册你的 GitHub 帐户

  我已经在 Bitbucket 上有了一个代码库。我最初选择注册 Bitbucket 是因为它能提供 5 个免费的私有库。后来我决定在 GitHub 上注册。事实上,我丝毫没有拖延,看看我的成果吧。

  4. 向开源项目捐赠代码

  向开源项目捐赠代码,这是一种很好的学习别人如何编程的方法,并且能把自己的代码公开。我今晚的就要去列一个准备去参与的开源项目的清单。

  5. 热心参与

  这也是我需要改进的方面。我应该到 stackoverflow 网站上去回答更多的问题,在一些博客,科技网站上分享自己的东西。去那些网站,让大家看到你。不在网上露面,就相当于待在屋里不出门却想找一份做巴黎导游的工作。

  重复做第2,4 和 5 点

  其它一些事情

  很明显,每一个有志向的程序员都应该每天阅读 Hacker News 和其它开发/科技/编程类的博客文章。

  找一些能和你讨论你的 web 开发/技术/编程想法的人和群体。如果我做了更多的第 5 项,我可能找到了更多的这样的人。

  认真过好你的二十几岁

"别活得太认真,你逃不出你的命运。" – Van Wilder

   一个朋友最近推荐我一本书,《The Definining Decade: Why your twenties matter – and how to make the most of them now》.读完之后,我前所未有的认识到了我 20 几岁这段时间的重要性,它改变了我如何度过 20 几岁余下这最后几年的人生计划。

  出自一位临床心理学家之手,这本书触及到了我们生活的各个关键点:工作,爱情和我们的身体。里面有很多的思想都是非常宝贵的,但最触动我的是下面这三个:

  1) 你的 20 几岁为你之后余下的人生事业打下了成功的基础。

  无论你做多长时间的酒吧招待或餐厅服务员,用多长时间在你家后院想你的"创业想法",你都是在浪费生命,阻挡自己朝着未来更成功、更幸福的生活前进。

  也许在星巴克当服务员的日子很快乐,但你的收入能养活你未来的孩子吗?更重要的,你真的打算今后 10 年仍然干这个吗?如果不是,那你目前的工作是否有助于你迈进你想要的工作的门槛吗?如果你不是 Facebook 的创始人,也许你应该考虑到一家创业公司开创自己的职业道路,而不是做一个永远都飞不起来的雏鸟。

  人都是一步一步走出来的。从刚开始去做那些辛苦的低收入的,能力上绰绰有余的工作,慢慢得到越来越多的机会。我有硕士学位,仍然需要抽出时间来 去实习,才能进入科技界的大门。实习工作让我在一家创业公司找到了全职工作,公司的创始人向我引荐了 Hiten Shah,他成为了我的导师,现在,我给他的公司开发产品 KISSmetrics。他是我见到的最成功的经营自己事业的人,他总是从小事做起。

  经验:不要拖延开展自己的事业。越早进入一个行业或成为你希望的角色,越早你能获得你满意的职业生涯。

  2) 据统计,女人应该在 35 岁之前生孩子。

  经验:如果组建一个家庭是你的人生目标,那你的时间会比你想象的要少。如果你是一个男的,想娶一个和你年纪相当的女人,时间的脚步走催促着你,同样也在催促着她。

  3) 你的大脑中 20 多岁时成熟定型。

  我一直以为人的大脑在孩子时就已经定型,从 10 几岁到三四十岁之间不会有多少变化,40 四十以后开始萎缩。但事实证明,人的前大脑皮层会在 20 几岁时发生巨大的变化,30 几岁时趋于稳定。维基百科上说:

额叶(frontal lobes)职能涉及到从当前的活动中认识将来的后果,影响你在好的活动和不好的活动之间做出的选择,忽视或制止不可接受的社会反应,在一些事情和事件间辨别它们的相似或不同。

  作为一个有志向开创一个大型公司的人,我认识到现在就需要培养大量的用来领导这样一个公司的各种技能,因为再过几年你就很难或者根本不可能像现 在这样学习知识。我听到很多的创业者在公司做到一定规模后就没有能力(或不想)管理这个公司,我现在正面临着提高自己和培养自己的巨大挑战。

  经验 不管你有什么样的人生或事业目标,你需要认识到,20 多岁时获得的技能和人格特性将会决定着你余生的众多能力。

 程序员的职业素养

  首先,保持对未知领域的好奇心,尽力开阔视野。

 从不同的视角去看待过去的问题。

 保持单纯的好奇心。

  其次,把握各个层次上的细节。

  尽可能向人解释清楚系统每个层面的运行。硬件如何调度机器指令;数据在硬盘、内存、缓存、CPU 间的流向;代码如何被编译链接,代码经历了何种过程被加载到内存,JIT 怎样加速字节码的运行;操作系统怎样管理线程、处理 IO ;软件用到的第三方模块和工具如何在处理数据;在网络环境中,数据流的通讯协议;你的代码中每个模块逐个层次中的相互关系……

  对细节掌握的越多,思路会越清晰。在每个层次上,你会看到不同层次的设备对上一层业务逻辑的抽象方式,直到最终你直接面对的业务。对业务的抽象能力,不仅仅来至于你对业务的熟悉程度。这种能力是随同细节把握能力同时俱备的。了解的越多,就越能知道你经手工作的合理性。

  第三,对代码的直觉。

  优秀的程序员能很快的发现性能热点、找到系统崩溃的原因、找出不合理的代码…… 准确的估算能力非常重要,快速心算出每个模块的开销和输入的数据量之间的关系;在写下每行代码时能够判断其对性能的影响、以简洁去挑战各个层次模块间的耦合复杂度。

  培养这种能力,以我个人浅见,除了不停不断的编写代码,别无良方。在写代码的同时,时刻保持着思考,对坏味道的地方零容忍。只要在最早的时刻动手,任何推倒重来的代价都不会太大;而放任它们在那里只会让局面演变到不可收拾。

  保持自己总有代码可写,不断的去发掘自己新的兴趣点,拓展新领域。单纯一些,编程本身就是一件有趣的脑力活动,而不必仅仅为了解决一些问题而写程序。

10步让你成为更优秀的程序员

  1. 永远不要复制代码

  不惜任何代价避免重复的代码。如果一个常用的代码片段出现在了程序中的几个不同地方,重构它,把它放到一个自己的函数里。重复的代码会导致你的 同事在读你的代码时产生困惑。而重复的代码如果在一个地方修改,在另外一个地方忘记修改,就会产生到处是 bug,它还会使你的代码体积变得臃肿。

  2. 留意你开始分心的时候

  当你发现自己在浏览 facebook 或微博,而不是在解决问题,这通常是一种你需要短暂休息的信号。离开办公桌,去喝一杯咖啡,或去跟同事聊 5 分钟。尽管这样做看起来有点反直觉,但长久去看,它会提高你的工作效率。

  3. 不要匆忙赶任务而放弃原则

  当带着压力去解决一个问题或修改一个 bug,你很容易失去自制,发现自己匆匆忙忙,甚至完全忘了一直坚持的重要的测试过程。这通常会导致更多的问题,会让你在老板或同事眼里显得很不专业。

  4. 测试你完成的代码

  你知道你的代码能做什么,而且试了一下,它确实好用,但你实际上需要充分的验证它。分析所有可能的边界情况,测试在所有可能的条件下它都能如期的工作。如果有参数,传递一些预期范围外的值。传递一个 null 值。如果可能,让同事看看你的代码,问他们能否弄坏它。单元测试是到达这种目的的常规方法。

  5. 代码审查

  提交你的代码之前,找个同事一起坐下来,向他解释你做了哪些修改。通常,这样做的过程中你就能发现代码中的错误,而不需要同事说一句话。这比自己审查自己的代码要有效的多得多。

  6. 让代码更少

  如果你发现写了大量的代码来解决一个简单的问题,你很可能做错了。下面的 boolean 用法是一个很好的例子:

  代码越少越好。这会使 bug 更少,重构可能性更小,出错的几率更小。要适度。可读性同等重要,你可不能这样做而使代码丧失可读性。

  7. 为优雅的代码而努力

  优雅的代码非常的易读,只用手边很少的代码、让机器做很少的运算就能解决问题。在各种环境中都做到代码优雅是很难的,但经过一段时间的编程,你 会对优雅的代码是个什么样子有个初步的感觉。优雅的代码不会通过重构来获得。当你看到优雅的代码是会很高兴。你会为它自豪。例如,下面就是一个我认为是优 雅的方式来计算多边形面积的方法:

static
				public
				double GetConvexPolygonArea (Vector2[] vertices)

{


					double area = 0;


					for (int i = 0; i < vertices.Length; i++)

    {

        Vector2 P0 = vertices[i];

        Vector2 P1 = vertices[(i + 1) % vertices.Length];

        area += P0.Wedge (P1);

    }


					return area / 2;

}
			

  8. 编写不言自明的代码

  勿庸置疑,注释是编程中很重要的一部分,但能够不言自明的代码更胜一筹,因为它能让你在看代码时就能理解它。函数名变量名要慎重选择,好的变量/方法名字放到语言语义环境中时,不懂编程的人都能看懂。例如:

void DamagePlayer (Player player, int damageAmount)

{


					if (!player.m_IsInvincible && !player.m_IsDead)

    {

        player.InflictDamage ( damageAmount );

    }

}
			

  能自我说明的代码不能代替注释。注释是用来解释"为什么"的,而自我说明的代码是来描述"是什么"的。

  9. 不要使用纯数字

  直接把数字嵌入代码中是一种恶习,因为无法说明它们是代表什么的。当有重复时更糟糕——相同的数字在代码的多个地方出现。如果只修改了一个,而忘记了其它的。这就导致 bug。一定要用一个命名常量来代表你要表达的数字,即使它在代码里只出现一次。

  10. 不要做手工劳动

  当做一系列动作时,人类总是喜欢犯错误。如果你在做部署工作,并且不是一步能完成的,那你就是在做错事。尽量的让工作能自动化的完成,减少人为错误。当做工作量很大的任务时,这尤其重要。

  11. 避免过早优化

  当你要去优化一个已经好用的功能代码时,你很有可能会改坏它。优化只能发生在有性能分析报告指示需要优化的时候,通常是在一个项目开发的最后阶段。性能分析之前的优化活动纯属浪费时间,并且会导致 bug 出现。

 给自己一句话:如果你认为公司的命运决定着你的命运,那么只能说明你太弱小。

2012总结

去年我的总结是有关我的选择器发展史。2012年我把精力放在三个方面,加载器,动画引擎,MVVM,这都是与我的框架有关的。基本上,得益于这三方面的着力,我的框架已经非常成熟。2013年我就可以挥军指向UI库了。

2012年算是在打桩,2013年开始建大厦了。

2012总结,一个6年CODER的挣扎之年

 2012经过了一个比较失败的项目(捕鱼项目),成功了一个项目(跑灯,最少所有功能开发完成了,就差生产成产品经过市场的检验了)这两个项目对个人的成长还算是比较有帮助的。

  首先分析一下第一个项目为何会失败:第一,是个人的管理能力久缺的,一下子就要面对不同性格的人,再加上自己有一些个性,心中想的是。要是你几 爷子不给力,我自己也不给力,到最后交不出工作。那黑锅就只能我去背了。那只好我自己多做点了,把你们做不好的事也给一起做了。

第二,自己的定力不够,心中想着。只要是出自我之手。就一定是精品,所以,对所做的项目在开发阶段就去做了过多有优化,到最后只能完成一部分功能的开发,还有一块大头没有足够的人力物力去支撑开发。

  第三,没有合理的利用团队成员的潜力,过于仁慈,面对对项目不热心的同志,不能及时的纠正团队成员的扭曲心理,造成团队恶化下去,到最后能在项目中发挥作用的人力渐渐减少。

  第四,没有正确的评估成员的流失影响力以及成员的能力!没能把功能时间计划强制执行下去。都以为时间还多,已经很紧了!

还有一个成功的跑灯项目:这个项目的成功。有一大部分还得取决于老板的认可,才能把我的一些不算先进的思想融入进去。这个项目也算是对我这两年来的 技术沉淀的一个总结,对这个些经验的东西没什么好分享的。都是仁者见仁。智者风智的东西。做过架构的人都知道~没有什么可比性。就是对知识点的一个提炼。

 2013年。我没有什么远大的理想。也没有拯救世界和平的远大抱负,我只希望父母,老婆,女儿身体健康,然后我能再把我的这个游戏框架再提炼一 下,做成一个能发布的游戏框架,尽管大家都说这个技术已过时,我还是会继续下去。或许2013的有许多的变化,那也没什么,做好当前的事,做好当前的分分 秒秒,那就是对自己生命的负责。已CODER6年,别无所求,不想做管理是骗人的,等了有管理之才,水到渠成!

存储过程详解

什么是存储过程:存储过程可以说是一个记录集吧,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用他就行了。

存储过程的好处

1.由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比T-SQL语句高。

2.一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。

3.通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全。

小结:总之存储过程是好东西,在做项目时属于必备利器,下面介绍存储过程的基本语法。

存储过程的语法和参数讲解

存储过程的一些基本语法:

--------------创建存储过程-----------------

 

CREATE PROC [ EDURE ] procedure_name [ ; number ]

[ { @parameter data_type }

[ VARYING ] [ = default ] [ OUTPUT ]

] [ ,...n ]

 

[ WITH

{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

 

[ FOR REPLICATION ]

 

AS sql_statement [ ...n ]

 

--------------调用存储过程-----------------

 

EXECUTE Procedure_name '' --存储过程如果有参数,后面加参数格式为:@参数名=value,也可直接为参数值value

 

--------------删除存储过程-----------------

 

drop procedure procedure_name --在存储过程中能调用另外一个存储过程,而不能删除另外一个存储过程

创建存储过程的参数:
1.procedure_name :存储过程的名称,在前面加#为局部临时存储过程,加##为全局临时存储过程。
2.; number: 是可选的整数,用来对同名的过程分组,以便用一条 DROP PROCEDURE 语句即可将同组的过程一起除去。例如,名为 orders 的应用程序使用的过程可以命名为 orderproc;1、orderproc;2 等。DROP PROCEDURE orderproc 语句将除去整个组。如果名称中包含定界标识符,则数字不应包含在标识符中,只应在 procedure_name 前后使用适当的定界符。

3.@parameter: 存储过程的参数。可以有一个或多个。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。存储过程最多可以有 2.100 个参数。
使 用 @ 符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个过程的参数仅用于该过程本身;相同的参数名称可以用在其它过程中。默认情况下,参 数只能代替常量,而不能用于代替表名、列名或其它数据库对象的名称。有关更多信息,请参见 EXECUTE。
4.data_type: 参数的数据类型。所有数据类型(包括 text、ntext 和 image)均可以用作存储过程的参数。不过,cursor 数据类型只能用于 OUTPUT 参数。如果指定的数据类型为 cursor,也必须同时指定 VARYING 和 OUTPUT 关键字。有关 SQL Server 提供的数据类型及其语法的更多信息,请参见数据类型。
说明 对于可以是 cursor 数据类型的输出参数,没有最大数目的限制。
5.VARYING: 指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。仅适用于游标参数。 

6.default: 参数的默认值。如果定义了默认值,不必指定该参数的值即可执行过程。默认值必须是常量或 NULL。如果过程将对该参数使用 LIKE 关键字,那么默认值中可以包含通配符(%、_、[] 和 [^])。

7.OUTPUT :表明参数是返回参数。该选项的值可以返回给 EXEC[UTE]。使用 OUTPUT 参数可将信息返回给调用过程。Text、ntext 和 image 参数可用作 OUTPUT 参数。使用 OUTPUT 关键字的输出参数可以是游标占位符。 

8.RECOMPILE: 表明 SQL Server 不会缓存该过程的计划,该过程将在运行时重新编译。在使用非典型值或临时值而不希望覆盖缓存在内存中的执行计划时,请使用 RECOMPILE 选项。

9.ENCRYPTION: 表 示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 语句文本的条目。使用 ENCRYPTION 可防止将过程作为 SQL Server 复制的一部分发布。 说明 在升级过程中,SQL Server 利用存储在 syscomments 中的加密注释来重新创建加密过程。 

10.FOR REPLICATION :指定不能在订阅服务器上执行为复制创建的存储过程。.使用 FOR REPLICATION 选项创建的存储过程可用作存储过程筛选,且只能在复制过程中执行。本选项不能和 WITH RECOMPILE 选项一起使用。 

11.AS :指定过程要执行的操作。

12.sql_statement :过程中要包含的任意数目和类型的 Transact-SQL 语句。

原文地址:https://www.cnblogs.com/doit8791/p/2843245.html