Javascript模块化编程:AMD规范及require.js用法 随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂。
网页越来越像桌面程序,需要一个团队分工协作、进度管理、单元测试等等......开发者不得不使用软件工程的方法,管理网页的业务逻辑。
Javascript模块化编程,已经成为一个迫切的需求。理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块。
Javascript社区做了很多努力,在现有的运行环境中,实现"模块"的效果。本文总结了当前"Javascript模块化编程"的最佳实践,说明如何投入实用。虽然这不是初级教程,但是只要稍稍了解Javascript的基本语法,就能看懂。
一个草根创业者的失败反思 本能式创业
当初创立开心白日梦,出于一腔热血和本能就开始干了。表面上看似简单的协作型功能,其实对用户的要求极度的高端,不仅需要用户能走出现有教育思维的框架,还需要博采多学和能力超强,只有这样,才能真正的明白开心白日梦的用处,也只有这样才会愿意付出去进行创作,创作从来不是一件轻松的事情。所以,开心白日梦的用户,基本要求是人才中的人才,既不是只会念书的好学生(但又不切实际),又不是只会做事的现实主义者(缺乏梦想)。而我们主流的用户群是90后和00后,这样的年轻人就更加稀少了。
虽然核心用户依然对开心白日梦不离不弃,但流量一直没有很大程度的增长,对于一个网站来说,每天只有500ip的流量只能算是失败的,就像我在《非你莫属》上张绍刚老师评价的那样,200ip只能算是2个。
开始的时候就从来没有认真思考过定位问题,想当然的觉得我有这种需求,我会参与,会创作,别人也会,没有从人性,产品,市场的角度客观的分析过。
程序员最艰巨的十大任务 程序员最艰巨的任务跟编写代码没有多少关系。编码是逻辑思路的一种实践,这跟程序员日常工作中的其它任务比起来相对简单。如果你认为自己还是一个水平一般的程序员,在你真正的能进入到高手行列前,请确保你已经克服了下列晋级的障碍。
1. 解释你在干什么
解释软件开发过程是一个很困难的事情。那些非程序员职业的人也许知道很多关于编程的事情,但很显然,他们不会编程。对于他们来说,我们的生活就是在一间黑暗的屋子里趴在键盘前消耗着咖啡。
你会在你的朋友、家人和同事中遇到这样的人,他会认为编码不是一个正确的职业。
2. 形象的说出软件解决方案
根据一些简短的需求——通常是一知半解的,你需要设计出数据结构,软件架构,代码算法,通信协议,以及其它所有针对商业问题的解决方案各种组成部分。然后你需要用一种外行人听的懂的术语将它们表达出来,并需要在规定的时间里提交给客户。
3. 评估工期
这是程序员痛苦的根源。在开发任务没有完成之前,你是绝对没有可能确定完成这个任务需要的时间。也许程序跟以前写的很相似,但环境变了,问题变了,限制条件变了。
PayPal为什么从Java迁移到Node.js,性能提高一倍,文件代码减少44% 大家都知道PayPal是另一家迁移到Node.js平台的大型公司,Jeff Harrell的这篇博文 Node.js at PayPal 解释了为什么从Java迁移出来的原因: 开发效率提高一倍(2个人用更少的时间干了5个人的活), 性能提高一倍, 代码量减少33%, 文件减少44%:
(小编: 个人认为深层次原因是Java正在越来越走向封闭,而且变得越来越复杂而且oracle正在对Java收费,参见: Oracle计划发布收费版JVM , 这促使了越来越多的公司加入了去Java化的队伍)
外面有很多人说PayPal正在迁移到node.js平台。我很高兴地在这里宣布,传言是真的,我们正在从Java迁移至node.js
由于历史原因,我们的工程师一直分为两拨人,一拨在浏览器上写代码(HTML,CSS,JavaScript);另一拨用Java写应用层的代码。想象一下,一个写HTML的不得不去叫一个写Java将A/B两个页面链接到一起吗?我们正在这样干,我们称这样的人为全端工程师,那些即可以设计精美界面和服务器后台的那些人。现在前后端已经没有界限了,这曾经是阻碍PayPal发现的一个很大的瓶颈。
Node.js帮助我们将前、后端合二为一,现在我们一个全端团队即可解决用户的所有问题。
编写更好的jQuery代码的建议 讨论jQuery和javascript性能的文章并不罕见。然而,本文我计划总结一些速度方面的技巧和我本人的一些建议,来提升你的jQuery和javascript代码。好的代码会带来速度的提升。快速渲染和响应意味着更好的用户体验。
首先,在脑子里牢牢记住jQuery就是javascript。这意味着我们应该采取相同的编码惯例,风格指南和最佳实践。
首先,如果你是一个javascript新手,我建议您阅读 《JavaScript初学者的最佳实践》 ,这是一篇高质量的javascript教程,接触jQuery之前最好先阅读。
当你准备使用jQuery,我强烈建议你遵循下面这些指南:
缓存变量
DOM遍历是昂贵的,所以尽量将会重用的元素缓存。
// 糟糕
h = $('#element').height();
$('#element').css('height',h-20);
// 建议
$element = $('#element');
h = $element.height();
$element.css('height',h-20);
代码审查:写出好的 commit message 为什幺要关注提交信息
- 加快 Reviewing Code 的过程
- 帮助我们写好 release note
- 5年后帮你快速想起来某个分支,tag 或者 commit 增加了什么功能,改变了哪些代码
- 让其他的开发者在运行
git blame
的时候想跪谢
- 总之一个好的提交信息,会帮助你提高项目的整体质量
基本要求
- 第一行应该少于50个字。 随后是一个空行 第一行题目也可以写成:
Fix issue #8976
- 喜欢用 vim 的哥们把下面这行代码加入 .vimrc 文件中,来检查拼写和自动折行
autocmd Filetype gitcommit setlocal spell textwidth=72
- 永远不在
git commit
上增加 -m <msg>
或 --message=<msg>
参数,而单独写提交信息
一个人称代词引发的论战:Joyent宣布Ben退出Node.JS开发 作为一个开源项目,Node.js以及相关项目都是由社区和志愿者共同维护的,任何的改动都会引发大家的讨论,尤其是现在Node.js在软件行业 中用的越来越广,但是,5天前的一个Pull Request请求被拒绝引发了轩然大波,整个事件的起因是有人希望在注释中使用“them”替换“him”,减少具有性别歧视的内容。
Rackspace员工Alex首先提交了一个pull request请求,希望把libuv(node.js所依赖的库)注释中的“him”修改为“them”,大家对这样一个看似无关紧要的请求各持不同的意见,最终libuv的主要贡献者之一、StrongLoop联合创始人Ben Noordhuis拒接了Alex的请求。
随后事件开始升级,大家讨论的中心转向了具有性别指向的名词对于女性权利的侵犯,对于请求被拒绝,Alex表示十分困惑:
尽管这是一个微不足道的变化,但我还是很遗憾听到这个消息,我想不明白你为什么没有合并它。花费几秒钟时间按下一个“合并”按钮进而减少敌对的行为难道不是值得吗?
随着Alex支持者越来越多,Joyent员工、Node.js负责人Isaac开启了一个新的Pull Request,确认从现有的代码中替换具有性别指向的人称代词。
随后,Node.JS官网宣布: Ben Noordhuis 决定退出Node.JS核心开发团队,不再为Node.JS贡献代码,node社区损失一员大将。
Python不可维护?终于把一个8万行的Python程序用Java重写了 水木社区上出现了一个贴子:终于把一个8万行的Python程序用Java重写了
争论主题: Python写大型系统是否缺乏可维护性。
正方: Python真可怕,非常容易被滥用,不适合写X万行以上的代码,写大型系统还得Java这样的正规军来。
反方: 用不好就说语言不好,而且Java省代码也不符合常识,Java束缚性太强,不适合喜欢自由的程序员;这其实是一个工程问题,如果再用Python重写的话会比Java写出的要精简的多得多得多。
贴子内容
在噩梦般地维护了一年多一个8万多行的Python程序之后,终于争取到机会把这个破烂玩
意用Java重写了一遍,大概是4万行Java左右。说说效果吧:
1. 从过去平均每周down一次,到现在连续运转近半年只down过一次。
2. 节省超过80%的cpu和内存
3. 代码多了很多功能,过去无数因为系统太复杂无法实现的功能现在都能简单清爽地实现
了。
4. 单元测试真管用了,不是过去那种把代码反过来写一遍的滥用mock了
前后代码都是同一个team写的,写代码的人都不是菜鸟(顶级公司的核心团队)区别只有
语言和几年的经验积累。
总结一句话就是:动态语言滥用起来真是可怕
珍惜生命,远离Python。
用JavaScript玩转物联网:Technical Machine获100万美元融资,打造Tessel微处理器 在由 True Ventures、Slow Ventures 与天使投资人领投的种子轮融资中,Technical Machine 获得了 100 万美元,这家今年新成立的公司位于波士顿,其创始人手里有一个名为Tessel的小巧项目,它致力于打造一个开发板,让懂 JavaScript 的你轻松玩转物联网。
Tessel 是一个能运行 JavaScript 的微处理器,趣味十足,藏于其背后的创业理念反映了一种新趋势。正如来自 Technical Machine 的 Kelsey Breseman 所言,Tessel 的目标是让网站开发者能够轻松玩转物联网。作为一个常用If This then That (IFTTT)来将网站应用与设备结合起来的人,我对此理念深信不疑。
无独有偶,Bechtel 的新兴技术部经理 Chris Matthieu 创立了被他称作是物联网即时通讯的Skynet项目,让人们用 Node.js 就能在网络上构建连接设备。再比如,IBM 的Node Red能让用户轻松掌控连接设备,弥补了应用于嵌入式系统中晦涩难懂的代码与开发者熟知的 JavaScript 语言之间的鸿沟。
用 Java 控制物联网显得太过臃肿,所以人们尝试通过新的编译器、对代码或中间设备的优化,让 Java 开发者与日益增多的连接设备联系起来,甚至还有人想利用连接设备改变网站后端开发环境。
编程面试的10大算法概念汇总 以下是在编程面试中排名前10的算法相关的概念,我会通过一些简单的例子来阐述这些概念。由于完全掌握这些概念需要更多的努力,因此这份列表只是作为一个介绍。本文将从Java的角度看问题,包含下面的这些概念:
1. 字符串
2. 链表
3. 树
4. 图
5. 排序
6. 递归 vs. 迭代
7. 动态规划
8. 位操作
9. 概率问题
10. 排列组合
1. 字符串
如果IDE没有代码自动补全功能,所以你应该记住下面的这些方法。
toCharArray() // 获得字符串对应的char数组
Arrays.sort() // 数组排序
Arrays.toString(char[] a) // 数组转成字符串
charAt(int x) // 获得某个索引处的字符
length() // 字符串长度
length // 数组大小