程序员的业余项目

程序员的业余项目,我们也叫它 side project。
前几天,100offer 发起了一场活动叫 <寻找实干和坚持的技术力量>,他们是这么说的:

世界在被代码改变着,而我们在创造着代码。
仅仅是因为好玩,他开发了一款操作系统,连想都没想过,这会让自己有一天成为开源世界的领袖级人物。
只是想创造一个很酷的东西,所以他动手,坚持,因而有了让这个世界上的每一个人都可以免费地获取人类所有知识的百科全书。
成功者和其他人最大的区别就是,他们真正动手去做了,并且做了下去。

近些年来确实有不少 side project 不仅成功转正,而且闪耀世界的例子,比如 Gmail、Instagram、Slack 等。甚至连 Facebook 早年也仅仅是一个学生的 side project。确实这些闪耀的例子激励着我们去尝试着各种各样的 side project,但真正能做到像上述例子中那样光彩夺目,只怕这概率也和买彩票中头彩差不多了。那么我们坚持做 side project 的意义在哪里呢?

自从我走上职业程序员的道路后,我就一直开始在做 side project。这些业余项目,有些是把工作中真实项目碰到的问题的解决方案加以抽象、提炼做成通用的工具,以便用在将来的项目中。这样的事情做的多了,慢慢就积累了一个自己专属的工具箱,好多程序员想必都有自己的工具箱,里面有些自己专属的工具。时间的推移伴随能力和视野的成长,会发现当年做的一些小工具原来有更好的开源解决方案,哦自己又不小心干了重新发明轮子的事情。

那像我早年干的那些重新发明轮子的事情是不好的么?我认为不是。著名程序员 Nicholas C. Zakas 提到的几个最重要的职业建议,有下面两条
(来自 《七个对我最好的职业建议》 阮一峰翻译):

不要别人点什么,就做什么。
自己找到道路。

我认为做 side project 对此有非常大的帮助。一个 side project 就是个产品,你不再仅仅去实现需求,因为没人告诉你需求,除了你自己。你在主导一个产品,找到它的发展方向,做出决定,然后再去实现它。而找到道路做出决定,再去执行实现,前者比后者要困难的多。

扯远了,回到我们文章开头提到那场活动,我正巧看见了这个活动,而我正好也有一个 side project。这个项目开始于五年前,一开始托管在 Google Code,后来 Google 在中国没了,GitHub 兴起就转移到上面了。这是一个名叫 Craft 系列的项目,为什么叫 Craft 呢?

关于 Craft 的起源是来自我还在读书时玩了 10 年的两款游戏 StarCraft(星际争霸) 和 WarCraft(魔兽争霸)。工作后我成为了一名职业程序员,花越来越多的时间在编程上而非游戏。我深深的怀念过去玩星际与魔兽的日子,所以使用了 Craft 来命名这个项目以纪念过去的日子。更重要的是,我希望这个项目能继承来自这两款游戏的精髓——追求完美,精益求精。更多关于这个项目的内容,可以参见 Craft 官网 以及托管的 GitHub 地址。

关于 Craft 这个业余项目,在 GitHub 还留下了几万行代码。我记得这五年来针对它做过 7 次比较大的重构,从工具箱里扔掉的代码比留下的多的多。每一次重构,都是对以前自己的否定,每一次否定都是一次成长。程序员们早点开始自己的业余项目吧。


后记:
Craft 也参加了 100offer 的活动,目前正在投票阶段,如有缘看到这篇文章请帮忙投个票。
投票地址点这里,截止日期 2015-09-27。


下面是我自己开的一个微信公众号 [瞬息之间],除了写技术的文章、还有产品的、行业和人生的思考,希望能和更多走在这条路上同行者交流,有兴趣可关注一下,谢谢。

转载于:https://www.cnblogs.com/hehe520/p/6147606.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/458844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言的数组名和对数组名取地址

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 相信不少的C语言初学者都知道&#xff0c;数组名相当于指针&#xff0c;指向数组的首地…

小米 android 8,小米华为们谁最良心?10大手机厂商安卓8.0升级情况盘点

3月8日&#xff0c;谷歌放出了首个安卓9.0开发者预览版的固件包&#xff0c;不出意外的话&#xff0c;它的正式版会在今年正式亮相。但对广大安卓用户来说&#xff0c;想要立刻用上最新系统并非易事。目前来说&#xff0c;安卓碎片化问题依然严重&#xff0c;我们不妨现实点&am…

窥探Swift之数组安全索引与数组切片

在Swift中的数组和字典中下标是非常常见的&#xff0c;数组可以通过索引下标进行元素的查询&#xff0c;字典可以通过键下标来获取相应的值。在使用数组时&#xff0c;一个常见的致命错误就是数组越界。如果在你的应用程序中数组越界了&#xff0c;那么对不起&#xff0c;如果由…

大小端模式的快速判断方法

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 大小端的问题剖析&#xff1a; 嵌 入式系统开发者应该对Little-endian和Big-endian模…

【RAC】How to Proceed from Failed 11gR2 CRS Installation

Applies to: [ID 942166.1] Oracle Server – Enterprise Edition – Version: 11.2.0.1 to 11.2.0.2 – Release: 11.2 to 11.2 Generic UNIX Generic Linux Goal This goal of this note is to provide steps to proceed from failed 11gR2 Grid Infrastructure installat…

WinForm支持拖拽效果

有一个MSDN客户提问在WinForm中如何实现拖拽效果——比如在WinForm中有一个Button&#xff0c;我要实现的效果是拖拽这个Button到目标位置后生成一个该控件的副本。 其实这个操作主要分成三步走&#xff1a; 1&#xff09;确定被拖拽的对象&#xff1a; 这里是Button&#xff0…

win7 64位出现桌面右键鼠标显示忙碌

*************************************************** 更多精彩&#xff0c;欢迎进入&#xff1a;http://shop115376623.taobao.com *************************************************** 将下面绿色内容复制到txt文本中&#xff0c;然后另存为1.bat 双击运行即可 【针对64位…

android tee,Android 9.0的新增安全特性与TEE

Android P&#xff0c;预计将于 2018 年第三季度发布最终版本。特别是Android8.0以来&#xff0c;安全性是Android版本变更的一个重要因素。从安全性增强方面来看&#xff0c;本次Android9.0版本主要有以下几个方面&#xff1a;统一的指纹身份验证对话框Android P 中&#xff0…

哪些要素会让咱们呈现抑郁症的病症

依据最新研讨标明&#xff0c;一自个的性情怎样&#xff0c;本来是天然生成的&#xff0c;后天的日子&#xff0c;仅仅对咱们的性情进行批改&#xff0c;但在咱们潜意识中&#xff0c;违反自个性情的行动&#xff0c;会让咱们感到格外累&#xff0c;所以&#xff0c;不少人即是…

如何定义一个只能在堆上(栈上)生成对象的类?

在C中&#xff0c;类的对象建立分为两种&#xff0c;一种是静态建立&#xff0c;如A a&#xff1b;另一种是动态建立&#xff0c;如A* ptrnew A&#xff1b;这两种方式是有区别的。 静态建立一个类对象&#xff0c;是由编译器为对象在栈空间中分配内存&#xff0c;是通过直接移…

canny算子的理论分析

****************************************************************************************************************************************** 红&#xff1a;数字图像处理视频教程&#xff08;两部&#xff09; {中科院版36讲视频教程 电子科大版70讲视频教程&#x…

Android为spinner设置适配器,Android Spinner与适配器模式详解及实例代码

最近做项目对Android Spinner 使用&#xff0c;这里简单写个小例子&#xff0c;来测试如何使用。Spinner是一个下拉列表&#xff0c;往安卓界面中拖拽一个Spinner控件&#xff0c;在属性中设置Android:entries“array/spinner_data”其中spinner_data为在string中设置的数组。数…

web框架-Struts开始

问题&#xff1a; 为什么有structs 作为一种框架&#xff08;frameset&#xff09;可以与传统的mvc进行比较&#xff1f; MVC是一种模式数据处理、显示和数据输入分开&#xff0c;来规范开发&#xff0c;但是却又并不规范。可以这样想&#xff1a;有三家公司&#xff0c;他们对…

加快上架方法

估计最近苹果app应用上架的比较多&#xff0c;审核比较慢&#xff0c;现在一个app从提交到上架短则7&#xff0c;8天&#xff0c;长则2&#xff0c;3个星期。我在实际上线应用时&#xff0c;总结了一个简单实用的小技巧&#xff0c;可以加快上架时间&#xff0c;最近使用这种方…

接口自动化测试 返回html,接口自动化测试实战(更新完毕)

前言自动化没练习的项目怎么办&#xff1f;自动化已经成为测试的必备技能之一了&#xff0c;所以&#xff0c;很多想跳槽的测试朋友都在自学&#xff0c;特别是最实用的接口自动化&#xff0c;但是很多人因为没有可以练手的项目而苦恼&#xff0c;最终导致缺乏实战经验&#xf…

Opencv 图像增强算法 图像检测结果及代码

****************************************************************************************************************************************** 红&#xff1a;数字图像处理视频教程&#xff08;两部&#xff09; {中科院版36讲视频教程 电子科大版70讲视频教程&#x…

php Hash Table(四) Hash Table添加和更新元素

HashTable添加和更新的函数&#xff1a; 有4个主要的函数用于插入和更新HashTable的数据: int zend_hash_add(HashTable *ht, char *arKey, uint nKeyLen,void **pData, uint nDataSize, void *pDest); int zend_hash_update(HashTable *ht, char *arKey, uint nKeyLen, void …

山寨“饿了么”应用中添加菜品数量按钮效果

山寨“饿了么”应用中添加菜品数量按钮效果 本人视频教程系类 iOS中CALayer的使用 最终效果&#xff1a; 山寨源头&#xff1a; 源码&#xff1a;&#xff08;此源码解决了重用问题&#xff0c;可以放心的放在cell中使用&#xff09; AddAndDeleteButton.h 与 AddAndDeleteBu…

html间数据传送,Express框架与html之间如何进行数据传递(示例代码)

关于Node.js 的Express框架介绍&#xff0c;推荐看菜鸟教程的Express框架&#xff0c;很适合入门&#xff0c;这里不再赘述&#xff0c;这里主要讲一下Express框架与html之间如何进行数据传递我采用的是JQuery的Ajax()向后台传参方式(url传参)1、Type属性为Get时&#xff1a;(1…

数字图像去噪典型算法及matlab实现

图像去噪是数字图像处理中的重要环节和步骤。去噪效果的好坏直接影响到后续的图像处理工作如图像分割、边缘检测等。图像信号在产生、传输过程中都可能会受到噪声的污染&#xff0c;一般数字图像系统中的常见噪声主要有&#xff1a;高斯噪声&#xff08;主要由阻性元器件内部产…