On this page... (hide)
1. 关于开发模式
- 世界顶尖运动队教练的成功秘诀 虽然是讲曲棍球队管理的,但是其原则和软件开发团队管理是一致的。
- 用户故事估算技巧
- 硝烟中的Scrum和XP 通过实际项目实施过程案例来讲解Scrum和XP。
- Scrum 大白话总结
- Getting Real By 37signals
2. 项目管理和 IDE 工具
2.1 软件开发项目管理
- GitHub 使用经验:记录我的 GitHub 使用经验。
- BugTracker:问题跟踪系统,用于记录开发进度。
- Gitea 使用笔记:跟 GitHub 的使用逻辑非常像的一个开源实现,轻量简单又好用。如果觉得功能不够用了,可以考虑升级为 GitLab。Gitea 经常配合 Drone 一起使用,这样就有完整的 CI/CD 能力了。
- Trac开发管理平台上手笔记:Trac是一个集代码管理、文档管理、Bug管理、开发进度管理于一体的管理平台,很好地整合使用了SVN、Wiki、Bug Tracker等技术。Trac可以作为开发管理的一个轻量、好用的选择,应该能够很好地支持XP编程等开发模式。有一个类似的实现是基于ROR完成的Redmine。
- Gerrit:专门在 git 上用的 Web 界面代码 Review 系统,号称是复制了 Google 内部的 Review 流程和支持工具。准备强力关注。
- rietveld:号称是简化版的仿 Google 内部流程做的来源代码 Review 工具,应该比 Review Board 要简单~不过还没弄清楚是必须依赖 GAE 还是可以支持普通 Django 。
- Review Board也是一个基于Web的代码Review平台,比较著名。
- Trello:我觉得互联网式的快速轻量开发应该用类似这样的工具管理。
- LibreBoard:Trello 的开源仿制品,基于 Node.js 和 MangoDB 。已经算是可用了,不过感觉维护服务器还是有点儿麻烦。
- Worktile:国内的类似产品,有一些创新。
- 纷云:Worktile 他们家出的仿 Slack 的工具,我觉得是挺好用的企业即时通讯解决方案。
- Teambition 和 简聊 算是应对 Worktile 系列的比较主要的竞争对手。
- Trello 和 Worktile 其实都属于 KanBan 风格的项目管理工具,类似的还有挺多。如果有大把的时间去评测 KanBan 式管理工具,请看这里:What are some alternatives to Pivotal Tracker?
- breeze:带有时间预估和追踪功能,功能很全。我觉得最棒的是它还提供了一种角色叫“客户”,可以看到项目消耗的时间、进度啥的。
- Pivotal Tracker:可能是标准 Scrum 管理工具中流行度最接近 Trello 的了。专门有人介绍 GitHub 和这东西怎么集成。
- 如果是非程序开发类的事务可以考虑用 WunderKit 。
- 持续集成工具有 Python 实现的Bitten和 Java 实现的Hudson等等很多(并不是说持续集成工具本身用什么语言它就只能支持对什么语言的测试,这是两回事)。
2.2 代码版本追踪管理
- 没啥可说的,git 已经成为事实标准,也有一些人选用 mercurial 。至于 Bazaar、 GNU Arch、monotone 等用的人就非常少了。
- Subversion 最简使用说明:几乎没什么人用了,即使一定要搞中心式管理方案,也都是用分布式工具模拟。我觉得主要原因是 SVN 做 merge 还是太费劲了。。
- CVS 客户端工具选择:这得算是十年前的技术了,现在应该很少有人用了。
- Tailor:号称能帮助在几乎所有知名版本控制工具之间做仓库格式转换的工具。只能说聊胜于无吧。
2.3 关于 IDE
- VS Code:目前我最喜欢的代码编辑器,通过插件能满足绝大部分功能要求,而且也不会特别沉重。这东西最厉害的是,可以配置成远程编辑服务器上的工程文件。
- Eclipse:号称是 21 世纪的 EMACS,好多插件哦。
- 一个介绍美化代码风格软件的页面。
3. 关于编程语言
- 十年学会编程:学会一门语言的基本语法并不难,可是掌握一门语言不易。真正提升技术水平才是正路,而这必然需要持续投入大量的时间。另外参见Peter Norvig:编程语言的选择并不重要。
- Codecademy:以交互式的方式学编程,支持 Javascript,HTML/CSS,PHP,Python,Ruby 。
- Python页面记录我学习Python的一点小经验。
- Java汇总与Java语言相关的资料。
- ROR一篇完整的资源和概念介绍
- http://www.cngnu.org/technology/0556/266.html Perl编译为可执行程序的介绍,也有其他方面关于Perl的东西,很详细。
- http://chs.gotdotnet.com/quickstart/aspplus/ Asp.net快速入门。
- Ultimate++:新的跨平台图形框架库,代码相当简洁。http://upp.sourceforge.net/
- Erlang:Erlang是一个结构化,动态类型编程语言,内建并行计算支持。最初是由爱立信专门为通信应用设计的,比如控制交换机或者变换协议等,因此非常适合于构建分布式,实时软并行计算系统。
- Haskell:号称世界上语法最优美的编程语言,这是一种“函数式”编程语言。参考:跨越边界: 用 Haskell 研究函数性编程和Haskell教程。
- Lua:小巧轻量强大的C/C++的扩展脚本语言。
- Smalltalk:被称为学习面向对象编程的最佳语言,并且Smalltalk还是一个完整的环境,特别设计用于应用的开发和发布。 Squeak是一个开源的、高便携性的Smalltalk实现,不但是成熟的Smalltalk开发环境,而且也可以作为儿童教育的平台来使用。Smalltalk还有一个较为著名的Web开发框架Seaside。
4. Web 技术
4.1 工具
- 50 个Web 设计师必备的超便利工具
- Selenium:一个用于Web系统自动化验收/功能测试的工具。应用Selenium和Ruby进行面向领域的Web测试提到了一些正确使用Selenium的要领。与之类似的工具还有Windmill。
- Selenium 2 开启了叫 WebDriver 的测试接口,为并发测试、自动化、使用方便等原因,可以使用无头浏览器作为 WebDriver ,例如:webkitdriver。
- http://www.owasp.org/ 用Java实现的Web安全检测工具包,包括监控HTTP通讯的WebScarab、研究Web程序漏洞的WebGoat等工具包。
- Web应用程序的自动化测试研究:自动化测试能够提高应用程序质量几乎已经被公认了,那么又如何模拟客户的行为对Web应用程序的整体进行自动化测试呢?
4.2 前端技术
- http://www.shanxiwindow.net/teaching/htmlbook/index.htm HTML教程,用于参考。
- 网页开发常见文件模板:css、js、php等网页开发资源文件的常见书写模板(标准化总不是坏事不是吗~)。
- Open Source Web Design(OSWD)开源设计:提供英文CSS+DVI的XHTML模板。
- HTML5 框架:
- Sencha:对 PC 端和 Mobile 端都有比较好的支持,可以说是“一次创建,适应各种环境”的一个解决方案。
- JavaScripts框架:JavaScripts本身是强大的,但是API比较琐碎复杂,因此有人建立JavaScripts Framework来封装这门语言,比如jQuery支持简便的JavaScripts编码以及HTML资源定位等,类似的还有Prototype、yui、dojo、MooTools等等不少。也有的进一步在框架基础上提供了很多封装好的控件,比如ExtJs。
- MochiKit:使用体验相当特别的 JavaScript 库。它不是把 JS 嵌入到 html 中,而是给 html 标签增加一些新属性,并且给标签绑定一些事件来实现功能,听起来很像一般桌面程序的界面处理方法。
- KindEditor:国产开源所见即所得 HTML 编辑器,功能丰富、方便易用。
- Orbited 基于Javascript完成的socks实现,其官方已经提供了irc、xmpp等协议的实现。
- JiaThis:分享到各种 Web 2.0 网站的公共组件,有按钮、图标、侧栏三种风格。
- LazyLoad:一段无依赖的袖珍 JS 代码,可以延后载入 JS 和 CSS 代码,改善页面载入速度、优化前端体验。
- resumable.js:利用 html5 file api ,把大文件切分成多个小片段实现断点续传的解决方案。
- Caja 通常能够保存内容的Web站点(比如论坛、Web邮箱等等)会完全过滤提交内容中嵌入的Javascript脚本,而Caja提供了一个对第三方脚本进行检测的解决方案,能够使Javascript的一个安全子集得到保留和执行。
- Bindows x-Desktop flex laszlo 都是用于开发基于浏览器和JavaScript的所谓胖客户端图形界面的类库,跟Mozilla的XUL体系的概念其实挺像的。目前微软等公司在改进自己的网络服务产品(比如新版hotmail)时(IBM则在Developers Works上发文章简单介绍如何用这种技术开发应用),都在使用一种称为AJAX(Asynchronous JavaScript and XML 异步JavaScript和XML,是指一种创建交互式网页应用的网页开发技术)的技术,也许这也是一种基于浏览器的胖客户端解决方案,而且说不定会成为新的Web应用标准,而且也有各种各样的AJAX支持库,比如ZK等。至于Web2.0,那会是什么呢?(胖客户端几大阵营:Flash、SVG、AJAX、微软的XAML、Sun的Java、Mozilla基金会的XUL等,参考链接。最近发现了Swingweb,可以将Swing的桌面程序完全转化为一个AJAX的Web应用程序。
- CSS框架:网页界面排版一项是个麻烦细碎的活儿,因而也有帮助解决网页界面定位的框架存在,比如YAML、YUI、Blueprint等等。参考:Choosing The Best CSS Framework: A Complete Guide
- Getting Started with XForms、在 Firefox 中使用 XForms,其中后一个链接中说明的内容我已测试通过。
4.3 前端技巧
- Internet Explorer 6 Bugs 解决方法
- [CSS] IE6 模擬 position:fixed 純 CSS 解法:IE6 下下拉选单的宽度不大容易控制(会受到下拉选单备选项宽度的影响),这篇文章可能是给出了这种情况的一个替代解法。
- HtmlInHtml:讨论在一个Html页面中嵌入其他页面的方法,虽然可以使用Frame的架构来完成,但也存在别的可用的方法,或许有的时候使用那些方法反而更好一些。
4.4 开发语言
- Node.js:最近非常流行的高并发解决方案,对服务器端开发和抓取器开发都算比较成熟了,但其异步 IO 在实际项目使用上坑挺多,并不很容易用好。
- CNode:应该是最大的中文 Node.js 社区了。
- 云服务 Joyent 已经支持 Node.js 部署了,面向国外用户的话,应该比较方便。
- 学习资料:
- Best Way to Learn Node.js – A Complete Roadmap:可以帮助理解学 Node.js 都要掌握哪些东西。
- How to Become a JavaScript Developer? 理论上,掌握 Node.js 要先掌握 JavaScript。
- nodejs.dev 的教程:在各种教程文档里算是更新比较及时的。
- 七天学会NodeJS:可读性相当不错的一个初级入门教程,但是现在版本已经老旧得不行不行了。
- Best Way to Learn Node.js – A Complete Roadmap:可以帮助理解学 Node.js 都要掌握哪些东西。
- PHP:关于PHP编程的一点点东西,对这种语言主要就是用用,比如用来做个人主页什么的,很少自己动手改动,这里只有一点应用部署类的经验。
- JspAll:与JSP开发相关的汇集页,包括IDE配置、软件安装及相关经验等。
4.5 Web 开发框架
- 网站架构相关PPT、文章整理
- Grails:Java社区利用Groovy整合典型MVC框架形成的ROR仿制品,能够帮助实现Java平台上的快速Web应用开发。Grails 与遗留数据库文章介绍了在Grails中处理遗留数据库的一些要点。
- Play framework:开发高效、运行高效的 Restful 风格开发框架,或许这将拯救 Java 程序员于水火之中。。
- LifeRayPortal:开放源码的Portal解决方案——liferay研究。以前除Liferay之外,比较成熟的主要是EXO Portal和JetSpeed,现在最关心的则是GridSphere,这个东西号称和WebSphere的API完全兼容。比较完整的开源Java Portal(也包括CMS型的Portal)列表在Manageability
- http://www.hibernate.org.cn/ Hibernate似乎可以允许以类的形式访问数据库的内容,而且这样的封装是轻量的,这个链接是随便搜索到的一个中文相关网站,内容还挺全。
- JSTL:作为网页表现层,Jsp还是比较混乱,一个新的可选的表现层是基于Taglib的JSTL。当然,更丰富的还有Structs、JSF、WebWork等等,但是也复杂很多。
- Template页面对当前基于网页的应用开发过程中,一个重要工具——模板进行一些简单的分析和讨论。
4.6 HTTP 服务器
4.7 其他
- 什么是Web 2.0 粗略归纳起来,大约就是:服务,而不是打包的软件,具有高成本效益的可伸缩性;控制独特的、难以再造的数据源,并且用户越多内容越丰富;把用户作为共同开发者来信任;利用集体智慧;通过客户的自服务来发挥长尾的力量;软件超越单一设备;轻量型用户界面、开发模式、和商业模式。部分Web 2.0应用列表
5. 基本组件及系统架构
5.1 编码规范
- Trac系统的源代码目录 该项目随代码带有的文档内容十分丰富且标准,建立新的项目时可以参考设立这些文件。
- API 設計 與 命名 技巧
5.2 标准协议
- OAuth 现在一些社交网站在收集用户邮箱内的好友名单时,要求用户输入用户名和密码的明文,这显然是一种相当糟糕的体验。Google、微软等公司合作建立了OAuth协议规范来解决这个互通性。第三方网站通过此协议与邮箱服务商建立联系,在需要获取用户在邮箱中的数据时,第三方网站将用户导向邮箱服务商的登陆、认证界面,成功后第三方网站完成数据读取。该协议的实现主要汇集在oauth的Google Code页面。
- Sync4j:一个开源的SyncML实现,用于同步分布式的数据,可能是PIM软件中的数据,也可以是数据库条目。
5.3 互联网基础服务
5.4 数据库
- MySQL:记录使用MySQL的一些经验。
- Infobright:基于 MySQL 实现的开源数据仓库解决方案,并且支持联机分析。
- PostgreSQL:记录一点PostgreSQL的使用经验。
- SQLite:关于SQLite使用的一点经验。
- Redis监控技巧
- SPL:SQL 之外的查询、计算表达语言。有时会比 SQL 更为高效和清晰。
5.5 分布式计算
- 云计算初步 探讨 Hadoop 等云计算解决方案及应用模式。
- 分布式系统的工程化开发方法 这里的分布式系统既包括分布式数据分析,也包括一般的高可用性 Web 集群等,文档讨论的是具有通用性的原则和经验。
5.6 工作流相关
- flow4j:一个基于Eclipse的,完成Java和工作流建模的插件,准备研究一下。
5.7 服务部署和运维
- 简单的情形,用 Docker 和 Docker Swarm 处理好服务间的依赖关系即可。
- 复杂一些的微服务结构,一般最终的服务部署方案总归会走向 K8s,但相关的使用门槛相当高、工具链路相当冗长,并不会把事情变简单。
- 云原生快速入门:最好先读这篇,建立一些基本概念,然后再具体学习 K8s 比较好。
- Kubernetes 基础教程
- Kubernetes 入门教程:要在阿里云环境使用 K8s 的话可以参考。
6. 特定领域解决方案
6.1 搜索引擎
- Lucene:可以说是搜索领域的事实标准,有很多其他的搜索项目都是基于Lucene来做的。
- Xapian:用C和C++实现的搜索引擎,采用概率模型,与Lucene使用的向量模型是有所差别的。因为是C++实现,因而可以与许多其他编程语言进行绑定。中文分词则可以将libmmseg嵌入来完成。
- Python 领域还有一个著名的搜索引擎解决方案 Sphinx 。
6.2 自然语言处理
- gensim:比较文章相似度、提取文章主题的解决方案。基于 Python 实现,文档十分丰富,用来上线实用或者作为 NLP 及机器学习上手学习都非常不错~
6.3 地理位置相关
- GeoHash 算法:用于处理基于距离的搜索,比如“附近的 XXX”之类的功能。
7. 参考资料和书籍
- 转载《翻译的艺术——致译者的一封信》
- GoodBook:看过的、觉得不错的书。
8. 其他
- Tango Desktop Project是一套开源软件用的图标库!DeveloperWorks上Web设计的免费资源介绍
- DataSets:给出几个提供模式识别训练集的网址,用于检测你的算法的正确性。