【技术新闻】程序员不是包身工

程序员是活生生的人,他们有自己的情欲,兴趣和生活。老板们有了一个现实的愿望,想实现它,经过辛苦和几番努力让这个想法能够成形。要么是有了投资人,要么是自己的收入所得,你可以用这些钱来雇佣其他人帮助你。这些被雇佣的人把自己生活相当重要的一部分投入到帮助实现这个愿望中。静下来想想,这些人值得你去感激。 在大卫的这篇博客中,他说员工在下班后做业余项目对老板不利,对公司有害。这种思想太落后了。 首先,一个人在业余时间应该做什么、不应该做什么,别人不该说三道四,这是一种极大的侮辱,这是对他人无礼的个人评判。这是一种极其短视的行为。 老板应该鼓励员工做业余项目 尤其是对一些在创业公司工作的中坚(例如——设计和开发老板的产品的这些人),做业余项目对他们有格外的好处。下面就是一些: 试验:在建议公司使用某些新技术前可以先在业余项目上试验一下;做再多的理论研究也不比曾经使用过某个新框架能获得更真切的个人评价。 独立自主:这是一个他们能够独立自主做所有决定的地方(无论正确还是错误),而不是像在公司里通过各种商谈妥协才能出一套方案。你可以把这视作创造力的释放。 加强知识掌握:程序员有机会能在自己喜爱的方向上进一步研究某种技术,这比在公司上班的标准时间里学习要神速的多。 消遣解压:提供多样性的生活节奏,避免因为在公司长期从事某一种工作/项目而带来的疲倦的感觉。 专心:能够促使程序员更高效的完成工作,因为他们并不能把所有时间都放在工作上。有句老话说,“如果你希望快速的完成一个事情,那就去问问一个忙碌的人是怎么做的。” 为开源社区做贡献:如果不是因为有如此多的人在业余时间做项目,你将看不到这些优秀技术社区向开源项目捐赠代码。业余项目对此有很大帮助。 社交网络:程序员有机会经常和日常工作外的人群接触,这能帮助他们获取知识,扩大社交网络。也许某天他们能给你的创业公司介绍新的人才。 我相信还会有很多其它的好处。 如果我只是埋头在以前的那些工作上,我将不可能现在在KISSmetrics公司开发产品(我甚至不可能进入科技界,因为我的专业是电子工程)。对于目前的工作,我所有的技能都是来自例如Greenhorn Connect等业余项目,在业余时间去学习新技能,饥渴的阅读各种书籍,每个老板都希望能雇佣到对所做的事情有热情的员工,希望他们具有广泛的知识,精湛的技能。但这是有连带的附加条款的,你必须接受他们的业余活动。 做业余项目的程序员更容易辞职? 在回到大卫的那篇议论,他看起来认为,如果一个员工有了业余项目,他们很可能会辞职去自己创业。如果一个程序员真的准备好了去经营一个业务,那他真的应该立即辞职,但有很多原因他们不会这样做: 资金问题 他们缺乏资金,并且知道当一个创意成熟时去募资是愚蠢的。更重要的,并不是所有的业余项目都有清晰的盈利前景。 动机问题 很多的业余项目都是因为兴趣和爱好。有时这些项目可能会变成值得用全天时间去开发的业务,但通常,他们只是一种业余爱好,不值得投入所有时间。 生活稳定问题 公司工作很稳定。很多事情会影响一个人的生活,并不是所有程序员都喜欢去创业,同时也有时间因素。他们也许结婚了,也许会迁移到另外一个城市,很多事情都会导致他们不会把创业放在第一位考虑。 但所有的这些都不会阻挡他们把价值奉献到工作上。 现在是卖方市场,程序员是抢手货 如果你拥有很好的技能,比如设计,产品管理,技术工程,在创业公司工作是个不错的选择。各种公司一定会争相聘用你。除了薪水的扶摇直上,老板们会发现,吸引有才华的人,仅用钱是不够的。良好的公司文化,老板知人善用,尊重他们的自由,这都是重要的因素。 大卫的观点也许适合你,但我要告诫那些老板,抛弃你们那些对员工不信任的态度,支持他们做业余项目。你们从他们这些活动中获得的隐形好处远比大卫所说的那些损失要多的多,而且避免了阻拦有才华潜能的程序员的进步发展。 Jhonse技术博客说明: 来源于: 外刊IT评论

【技术新闻】编程从业五年句句朴实的十四条经验

排列不分先后: 1. 当性能遇到问题时,如果能在应用层进行计算和处理,那就把它从数据库层拿出来。排序和分组就是典型的例子。在应用层做性能提升总是要比在数据库层容易的多。就像对于MySQL,sqlite更容易掌控。 2. 关于并行计算,如果能避免就尽量避免。如果无法避免,记住,能力越大,责任越大。如果有可能,尽量避免直接对线程操作。尽可能在更高的抽象层上操作。例如,在iOS中,GCD,分发和队列操作是你的好朋友。人类的大脑没有被设计成用来分析那些无穷临时状态——这是我的惨痛教训所得。 3. 尽可能简化状态,尽可能局部本地化。适用至上。 4. 短小可组合的方法是你的好朋友。 5. 代码注释是危险的,因为它们很容易更新不及时或给人误导,但这不能成为不写注释的理由。不要注释鸡毛蒜皮的事情,但如果需要,在某些特殊地方,战略性的长篇注释是需要的。你的记忆会背叛你,也许会在明天早上,也许会在一杯咖啡后。 6. 如果你认为一个用例场景也许“不会有问题吧”,它也许就是一个月后让你在发布的产品中遭受惨痛失败的地方。做一个怀疑主义者,测试,验证。 7. 有疑问时,和团队中所有相关人交流。 8. 做正确的事情——你通常会知道这指的是什么。 9. 你的用户并不傻,他们只是没有耐心理解你的捷径。 10. 如果一个开发人员没有被安排长期的维护你们开发的系统,对他保持警惕。80%的血、汗、泪水都是在软件发布后的时间里流的——那时你会变成一个厌世者,但也是更聪明的“行家”。 11. 任务清单是你的好朋友。 12. 主动让你的工作更有乐趣,有时这需要你付出努力。 13. 悄无声息的崩溃,我仍然会为此从噩梦中惊醒。监控,日志,警报。清楚各种的假警报和不可避免的感觉钝化。保持你的系统对故障的敏感和及时警报。 14. 复杂是大敌。 Jhonse技术博客说明: 来源于:http://www.aqee.net/14-lessons-after-five-years-of-professional-programming/

【mysql】union用法(合并三张表的数据查询)

最近公司的项目,需要用到一个功能,就是要获得数据库中三张表的数据,并按时间的顺序显示出来。一开始想到的是jion,最后一分析,发现jion,只能把表的数据左右合并,而没有“叠加”的功能。所以就用到union来整合三张表的数据。 先来看下网上对union的定义: 一 UNION语法    SELECT …     UNION[ALL | DISTINCT]     SELECT …     [UNION [ALL | DISTINCT]     SELECT …]      UNION用于把来自许多SELECT语句的结果组合到一个结果集合中。    列于每个SELECT语句的对应位置的被选择的列应具有相同的类型。(例如,被第一个语句选择的第一列应和被其它语句选择的第一列具有相同的类型。)在第一个SELECT语句中被使用的列名称也被用于结果的列名称。    SELECT语句为常规的选择语句,但是受到如下的限定:  ·只有最后一个SELECT语句可以使用INTO OUTFILE。  ·HIGH_PRIORITY不能与作为UNION一部分的SELECT语句同时使用。如果您对第一个 SELECT指定了HIGH_PRIORITY,则不会起作用。如果您对其它后续的SELECT语句指定了HIGH_PRIORITY,则会产生语法错误。    如果您对UNION不使用关键词ALL,则所有返回的行都是唯一的,如同您已经对整个结果集合使用了DISTINCT。如果您指定了ALL,您会从所有用过的SELECT语句中得到所有匹配的行。    DISTINCT关键词是一个自选词,不起任何作用,但是根据SQL标准的要求,在语法中允许采用。(在MySQL中,DISTINCT代表一个共用体的默认工作性质。)    您可以在同一查询中混合UNION ALL和UNION DISTINCT。被混合的UNION类型按照这样的方式对待,即DISTINCT共用体覆盖位于其左边的所有ALL共用体。DISTINCT共用体可以使用UNION DISTINCT明确地生成,或使用UNION(后面不加DISTINCT或ALL关键词)隐含地生成。    如果您想使用ORDER BY或LIMIT子句来对全部UNION结果进行分类或限制,则应对单个地SELECT语句加圆括号,并把ORDER BY或LIMIT放到最后一个的后面。以下例子同时使用了这两个子句:  (SELECT a FROM tbl_name WHERE a=10 AND B=1)UNION(SELECT a … Continue reading “【mysql】union用法(合并三张表的数据查询)”

【mysql】join的使用

在查询中,连接的语法类似 SELECT select_expr FROM table_references table_references(对表的引用)的定义如下(也可以看成连接表达式): table_references: table_reference [, table_reference] … table_reference: table_factor | join_table table_factor: tbl_name [[AS] alias] [index_hint_list] | table_subquery [AS] alias | ( table_references ) | { OJ table_reference LEFT OUTER JOIN table_reference ON conditional_expr } join_table: table_reference [INNER | CROSS] JOIN table_factor [join_condition] | table_reference STRAIGHT_JOIN table_factor | table_reference STRAIGHT_JOIN table_factor … Continue reading “【mysql】join的使用”

【linux】通过ssh客户端下载文件

一般来说,linux服务器大多是通过ssh客户端来进行远程的登陆和管理的,使用ssh登陆linux主机以后,如何能够快速的和本地机器进行文件的交互呢,也就是上传和下载文件到服务器和本地;   与ssh有关的两个命令可以提供很方便的操作:       sz:将选定的文件发送(send)到本地机器       rz:运行该命令会弹出一个文件选择窗口,从本地选择文件上传到服务器(receive)   当然,还可以设置一下目录了: 设置一下上传和下载的默认目录 options–>session options–>file transfer 下可以设置上传和下载的目录 剩下的你只要在用SecureCRT登陆linux终端的时候: 发送文件到客户端:sz filename zmodem接收可以自行启动. 从客户端上传文件到linux服务端: 只要服务端执行 : rz 然后在 SecureCRT 里选文件发送,协议 zmodem   简单吧,如果你以前一直使用ssh,而又没有对外开放ftp服务,你就直接使用这种方式来传输你的文件。

【linux】命令之压缩解压缩

linux zip命令 1.zip -r myfile.zip ./* 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. 2.unzip unzip -o -d /home/sunny myfile.zip 把myfile.zip文件解压到 /home/sunny/ -o:不提示的情况下覆盖文件; -d:-d /home/sunny 指明将文件解压缩到/home/sunny目录下; 3.其他 zip -d myfile.zip smart.txt 删除压缩文件中smart.txt文件 zip -m myfile.zip ./rpm_info.txt 向压缩文件中myfile.zip中添加rpm_info.txt文件 要使用 zip 来压缩文件,在 shell 提示下键入下面的命令: zip -r filename.zip filesdir 在这个例子里,filename.zip 代表你创建的文件,filesdir 代表你想放置新 zip 文件的目录。-r 选项指定你想递归地(recursively)包括所有包括在 filesdir 目录中的文件。 要抽取 zip 文件的内容,键入以下命令: unzip filename.zip 你可以使用 zip 命令同时处理多个文件和目录,方法是将它们逐一列出,并用空格间隔: … Continue reading “【linux】命令之压缩解压缩”

【linux】命令之mysql备份和恢复

备份 比如我们要备份mysql中已经存在的名为linux的数据库,要用到命令mysqldump  命令格式如下:  [root@linuxsir01 root]# mysqldump -u root -p linux > /root/linux.sql Enter password:在这里输入数据库的密码  通过上面的命令,我们要明白两件事,首先备份数据库是要以数据库管理员的身份备份;其次:备份目的地是/root,备份的文件名是linux.sql。其实备份的位置和文件名,根据自己的情况来定。文件名可以自己来取,路径也可以自己来安排。 比如我想把linux的数据库备份到/home/beinan,数据库的文件名为linuxsir031130.sql,所以应该输入如下的命令。  [root@linuxsir01 root]#mysqldump -u root -p linux > /home/beinan/linuxsir031130.sql Enter password:在这里输入数据库管理员root的数据库密码  如果数据量大会占用很大空间,这时可以利用gzip压缩数据,命令如下:  #mysqldump -u root -p tm | gzip > tm_050519.sql.gz 这样我们到/home/beinan目录下就能发现mysql中名为linux的数据库的备份文件linuxsir031130.sql  综上所述,我们学习时要学会变通。  恢复 首先我们还是要操作上面几个过程,比如添加数据库管理员(如果您没有添加过mysql数据库管理员的话),创建数据库等。  比如我们要把在/home/beinan这个目录中的linuxsir031130.sql这个备份,导入名为linux的数据库中,应该如下操作;  [root@linuxsir01 root]#mysql -u root -p linux < /home/beinan/linuxsir031130.sql Enter password:在这里输入密码  如果机器好,数据库比较小,几分钟就好了。  如何导出数据库表的数据?(不同于备份哦)  #mysql (#mysql>use … Continue reading “【linux】命令之mysql备份和恢复”

【技术新闻】为何编码规范每行代码不超过80个字符是合理的

也许在Python编码风格指导(PEP8)中最有争议的一部分要数每行代码不超过80个字符的限制。没错,实际上是79个字符,但我使用80个字符,这个大概数,它是给程序员的一个参考值。 古老的VT100终端 现在很多软件公司采用的编码规范基本是PEP8,但每行80个字符的限制除外。GitHub上的项目,大多数都遵循PEP8规范(这一点似乎达到了高度的统一),但遵守80个字符限制的很少。在一些有明确规定的规范标准中,这个限制可能会增加(100或120),甚至完全删除。这样做常长见的理由是:我们已经不是使用VT100终端编程的年代了,我们有了更大,更高分辨率的屏幕。这是事实,但我发现,在Python编码中采用这个80个字符的规范,配合空格的使用,这会让我们的代码更急凑,更可读。 有一点你可以看出,在自然情况下,Python语句的长度一般会占大概35-60个字符(不包括缩进)。更长的语句很少见。如果突然有一个句子比其它的要长很多,会显得很突兀,不好看。同样,使用强制性的空格来增加行宽能够从视觉上帮助你优化减少嵌套循环的层数,一般的建议是重构代码不要让缩进多于4层。 例如,把下面这个: def search(directory, file_pattern, path_match, follow_symlinks=True, output=True, colored=True): ''' Search the files matching the pattern. The files will be returned, and can be optionally printed ''' pattern = re.compile(file_pattern) results = [] for root, sub_folders, files in os.walk(directory, followlinks=follow_symlinks): # Ignore hidden directories if '/.' in root: continue # Search in … Continue reading “【技术新闻】为何编码规范每行代码不超过80个字符是合理的”

【技术排行榜】2013年4月编程语言排行榜:Objective-C四年来排名首次下滑

2013年4月TIOBE编程语言排行榜发布!本月Java与C位置互换,C++反超Objective-C进前三,前三甲分别为C、Java、C++。这个月的排名情况,让你大跌眼镜吗? 可以说,在2009年夏天之前Objective-C这门语言很难被人熟知和使用。如今, Objective-C发展如此强劲这要归功于iPhone和iPad,使之一度窜至编程语言排行榜前三甲位置并连续两年摘得年度编程语言桂冠(2011年和2012年)。而今Objective-C的流行趋势发展开始停滞(发展缓慢),这也是自2009年以来第一次从第三降至第四位置。 那么,Objective-C发展缓慢的原因何在?此前看过一篇文章(做iOS开发,我为什么弃用Objective-C而选择RubyMotion?),作为一名iOS开发者Hendrik Mans从Objective-C顽固分子到RubyMotion忠实粉丝的转化过程。他甚至认为RubyMotion的核心思想是用优美的Ruby语言代替丑陋的Objective-C语言。 没了乔帮主的鼎力支持,Objective-C的命运令人担忧? 前20名榜单排行榜: 前10名编程语言走势图: 以下是21-50编程语言排名: 后50名的语言如下: 4th Dimension/4D, ABC, Agilent VEE, Alice, Apex, ATLAS, AutoLISP, bc, BlitzMax, C shell, CFML, CL (OS/400), Clarion, Clipper, Clojure, cT, Dart, Dylan, ECMAScript, Eiffel, Euphoria, F#, Gambas, Go, Groovy, Icon, IDL, LabVIEW, Lasso, Limbo, LPC, MUMPS, Oberon, OCaml, Occam, OpenCL, Oz, PowerShell, Q, REXX, RPG … Continue reading “【技术排行榜】2013年4月编程语言排行榜:Objective-C四年来排名首次下滑”

【技术排行榜】Web框架性能排行榜,cakePHP表现最差

作为开发人员,你们有讨论过框架对项目的影响吗?一家名为TechEmpower的外包公司对当前流行的各种Web框架进行了测试。 一个框架对网站性能会产生多大影响呢?答案或许会让你大吃一惊。本文数据由自称CTO外包公司的TechEmpower测试所得: JSON性能测试: 数据库连接测试: 吃惊的是,Cake框架在某些方面的性能居然可以这么低。 Jhonse技术博客说明: 来源于: http://www.oschina.net/news/39118/php-framework-benchmarks