毫无疑问,我们正处在一个伟大的时代,充满了机遇与挑战。中国互联网已经走过了十几个年头,但我认为它仍然是个小孩,还有很多机会和梦想可实现。
未来的中国一定会越来越公平,知识与技术会越来越受重视 。面对这个有飞速增长的7亿网民,10亿手机用户的移动互联大市场,摆在开发者面前充满不少机会。
浮燥年代
火车被高铁了,农民被上楼了,老房子被拆迁了,公民被代表了。。。 这些信息让所有的国人都那么着急,似乎如果不急就赶不上小康生活。社会如此,你我这般的开发者、程序员们也不能免俗,被卷入其中。
所以在公司上班的你我都在受影响。今天你在公司工作,旁边的同事都还相处不错,而下周或某一天,旁边的座位突然空了,美工mm告诉你,人家跳到某某大厂,摆渡去了。而你可能开始并不在意,而旁边的兄弟说,哪哪个公司要上市了,有期权,猎头找你说哪个公司要找一个技术总监,是现在你工资的几倍还多。你终于有点儿坐不住,老子也想跳。
于是,你又和那些人一起跑到新的公司,拿到多一些的工资,发誓说我一定要好好干,对得起老板,对得起老妈。新公司,新团队,新鲜的脸儿,还有不少新鲜的小美女,秀色又可餐,是不是能有点儿故事,值得遐想啊。
几周过去,开发工作开始了,你开始工作。当产品部门或市场部门的堆堆文档开始雪片般发将过来,项目经理又开始发配任务,然后你像打了鸡血一样,做框架,写代码,加班写文档,版本管理,运营维护。。。
终于几个月后,你和一帮兄弟终于要将网站的第一版本开发完了。长叹一口气,再数数拿到的工资,再对比从前,感叹你只不过从一个猪圈跳到另一个猪圈。
你可能后悔当年在原来的公司有多好多好,同事像兄弟一样喝酒吹牛,人事的mm像邻家女孩一样,吐气如兰,循循善诱。而原来留在公司的某某,娶了媳妇买了房,在公司里成了大拿,成了技术带头人,想想当年他可真不如俺啊。
这种故事一直在上演,包括我自己。这种问题,一方面是社会问题,但绝大多数还是自身的目标和规划有一定的欠缺。所以有一天,你可能会面临下面这些选择:
投身创业大潮
移动互联网、云计算,以及社交平台、O2O,越来越多的传统企业触网,这些,让开发者有越来越多的创业或合伙创业机会。
(1)拥抱开源
从计算机在我们这个国家出现开始,第一代的程序员,算起来寥寥可数,那个时代如求伯君、王志东、王江民等,这些人开始都是开发一款应用软件,比如求伯君开发的WPS,朱崇军的CCED、王志东的中文之星 。那个年代的推广靠纸媒,还有一部分盗版软件商的功劳。那个年代,能用计算机已经很是奢侈,能编出一套能打汉字还能排版的软件,已经牛的不能再牛。
第二代程序员,以共享软件为契机。你们耳熟能详比如张小龙的Foxmail、FlashGet、周鸿祎的3721等。从这个时候开始,Foxmail后来被腾讯收购,张小龙后来也成了“微信之父”,Flashget等亦被巨头收购,但共享软件的方式,至今还有一部分是程序员们创富的手段之一。
第三代程序员,以开源软件为基础。与共享软件些许不同,开源软件开放源代码为主,任何人可以下载并修改源代码,在遵守某个协议后可以分发或产品化。以此为手段的程序员如Discuz!的戴志康、PHPWind的王学集、ShopEx的裴大鹏、DedeCMS的IT柏拉图等等以开源为契机,以开源做为快速攻占市场的手段,使自己的产品不断更新,继尔占领互联网服务的高端领地。
国外的开源土壤尤其旺盛,处处开花,这些都是你我这些程序员们的好消息。
除了开源产品,还有各大网站的开放平台,如微信开放平台、微博的SAE平台、腾讯开放平台,人人网的开放平台、Facebook开放平台、淘宝开放平台等等,比如我们在微博领域开发一些好玩的应用,比如交友,约会、数据分析等,都有很好的机会,都是开发者的淘宝地。
(2)成为站长
国家提供的创业环境使电子商务、社群越来越火爆。自己变身站长,成为网站CEO不再像2000年时代的空头衔。如今的所有应用都在一个完整且可用的产业链中得以实施。
你可以自己建一个电子商务网站或H5网站还是微信端,比如玩具、二手商城、服装商城,特殊点的有点创意的,如家乡特产、开光佛道教用品等。
如今的互联网大势,大网站越来越有壁垒,而小网站的船小好调头,开发者做网站和APP实在是挺容易的事,通过开放平台或者技术进行营销转换。
作为技术者创业,一定要选择自己最擅长的事和赢利模式,否则你可能会遇到困难。
那么,无论是工作还是创业,该如何选择一个正确姿势?
做快乐的开发者
做为开发者,我们每天都会使用大量的时间与电脑互动。而要成为高度熟练的人,更要付出超人的努力,之后才会有无限的成长空间。
当然,在开发工作中,不会总是快乐的事。在从事开发过程中,有很多种因素决定开发者的心情是否开心。
拿版本控制和测试来说,利用工具和方法能够增加效率,还有对问题有效的跟踪,规范的开发规约以及安静的工作环境等,这里和各位探讨这些“软技能”,有助于促进幸福的,健康的,热爱的工作环境,让我们每天都尽情投入开发工作中来。
有一个好环境
目前有很多的创业公司,包括市场部、销售部、运营部门人全部在开放的空间中工作,没有隔断或都在一个房间工作。创业者与开发者在一起,以“改善沟通”和“提高协同效应”。
在著名软件工程书《人件》提到过安静的工作环境确保开发团队个人要有足够的空间,并足够安静,并最大化的方式保证个人隐私,以确保人们能够在公司里产生更好的创意和工作效率。
也有的团队愿意将人们围坐在一个大桌子中,也美其名曰“改善沟通”,如果是非安静的工作环境 ,旁边都是干扰,工作效率肯定不会太高。
代码规范与开发习惯
互联网开发一个普遍特点是“敏捷”,在灵活的工作环境,输出不断变化的产品和成果特。敏捷开发的支持者称为scrums,表示在最短的时间内快速开发软件的方式。
传统的“瀑布”开发模式,一般情况在几个月或一年或甚至更长时间,而敏捷开发也有一个潜在的问题,就是软件开发者的创新能力和开发水平并不能保持一致。
在我看来,软件开发者喜欢饼没画好时就开始干活,而不等着饼全画好再工作。在所有组件和模块没有完成时,有时会造成模块的松散,这时你要有一个简洁的的编码规范,和一个清晰的目标:产品文档或计划。
问题跟踪
试回想我们的第一个项目,你还记得多少?开发中走过的弯路或发现的BUG,有没有固定的重复错误?其实很多特定的错误很有限,大多数的错误,你或许已经记不清了,如果你的记忆力很清晰,那么你处于支配和受人尊敬的地位。
其实除了特别重大的事,我们记不住这些琐碎的事儿的。正因为我们的记忆不能完全储存,而这些对我们的学习,以及挖掘更大的潜能至关重要,我们需要借助工具来帮助我们记忆。
无论重要问题存在与否,我们的产品中都要有对功能需求和错误相关的跟踪。试想,一个中型的项目可能有100多个BUG,包括任务和功能要求,每个人都难记得住这些内容。另外,团队人员还要知晓,在下一个版本开发之前哪些问题还没有解决。
有效的BUG/问题跟踪是保证快乐开发的关键组成部分。所有的问题以列表的形式在系统中展示,这使得开发者不需要在额外梳理问题,去专注于工作之结果。
另外,问题跟踪系统就像一个社区一样,把所有的问题分享和展示给所有开发人员,问题结果一目了解,从而提高生产率,减少工作量。
在实际开发中,一个项目中要尽量对任务细分。比如,比如一个用户表单需要创建后台管理功能。我们需把前端和后端分成两个任务,由两个开发人员分别单独完成,尽管他们需要合作完成,但问题管理中需要分成两个模块。
比如这个任务或问题已经完成,一个新的任务又被创建时,需求不同,但只是表单形式做了调整,数据库字段需要设计,并且需要保存记录。这时在新建问题时,提及到老问题,这样一来,开发人员就能有效地参考刚才的老问题,本来两周的问题可能一周就能解决,达到事半功倍的效果。
有效的项目管理
许多开发者认为项目管理是项目经理或技术总监的事,这是错误和不求进取的表现。良好的项目管理依靠团队领导和开发人一起完成,包括对项目积极的反馈,评估和问题管理,从而更有效的管理项目。
帮助和管理项目的有效方法是:彻底和经常性地沟通,无论是通过提交问题、邮件或是每日常规会议,开发者务必主动参与他们的项目,所有人都是管理者。
这对于团队中的你来说也较容易,而对于项目本身和项目经理会带来巨大价值,大家彼此的工作完成后,而且还帮助整体项目的推进。因此,推进项目是团队中每个人的责任。
那些参与项目开发,有效管理自己,并积极帮助项目经理积极反馈,比坐视项目迈向完成或迈向失败要幸福的多。一个成功项目的完成,是整个团队的责任,不只是项目经理一个人的事情,他更多的是协调,而整个团队成员都是他的眼睛和耳朵。如果开发者是个有心人,他从中成长收获的会更多。
选择适合的公司工作
选择一个合适的工作岗位有时候确实不易,而选择合适的公司对于开发者的长期幸福和成长是至关重要的,而公司的业绩成长或市场占有率则与此关系不大,开发人员选择好公司是很重要的事情。
在要到一个公司工作前,可以和人事或负责人探讨一些问题。
第一与负责人、老板的气味相投。抱着信任,开放的态度加入这个团队。
第二你可以询问将来工作中可能存在的问题。比如开发模式,过程管理,工具,BUG测试和跟踪工具,版本控制和项目管理软件,以及老板的预期,有没有一个成熟的开发的规范,工作是否规律,开发者除了Coding之外是不是和客户直接打交道,是不是参与产品设计工作等问题。
我们也要主动请缨,求得责任,提出自己的需求与愿望。在确定到一个公司之前,多做内省,确定自己的思想是否真的愿意去,再和其它的公司做比较。
如果我们在公司不开心,那么工作效率一定不是最佳的,那么由此带来的是结果也可能不是最好的,所以要避免这种情况发生。
个人管理
有效的管理自己。开发者一般习惯于晚上写程序,通宵达旦是家常便饭。有时候就会变成一种习惯,开发者要学会如何管理好时间,让效率最大化,你会用更多的时间去旅行,去生活,去和心爱的人、家人在一起。
开发者从事的是核心的技术岗位,但在职场中,在领导权威面前有时会屈居“老二”的地位,老板的话一出,就想法设法寻找适合他的脚,做出的产品想不蹩脚都难。因此,开发者要按照专业知识要求,按自已的想法去发挥,坚持自己的正确观点,才能做出完美的产品,为自己为团队赢得尊重。
享受工作的乐趣
开发者的工作可以说是艰巨的,甚至是重复的,所以我们一起探讨如何享受开发的乐趣。
充足的睡眠。我们会在计算机前花费大量的时间编程,前提是大量充足的睡眠,确保我们的精神清醒且充满活力。
活用工作间隙。我们长时间面对屏幕后,可以短暂休息一小时来缓解对眼睛还有心灵的压力。这段时间里可以小睡,读一本书,玩玩游戏,以及其它任何不涉及电脑的活动。
充满激情。正在开发的产品是我们真正愿意做的东西,做产品时要有爱,充满对技术创新的激情,并下定决心要让它成功。
未雨绸缪。知道自己要做什么,在哪里,如何做,合理组织自己的时间。当我们坐下来开始编程时,要清楚自己即将要做什么,无论是改进页面样式,是增加功能还是调试。
设定计划
在项目初始时建立好开发计划并设定边界,避免项目烂尾和拖延。
不光是为了钱。开发可以是自己的工作或一种业余爱好,我们尽全力去做时,就会得到报酬。但如果你不喜欢它,真的,请考虑清楚,退出还是继续,然后去做你真正喜欢的工作。
不轻言放弃。在开发中有时候会遇到困难,会有点小沮丧,努力规划自己的人生才是真正的问题,比如假设有一天,你离开你的女朋友,那么会不会感到后悔?
开发者需要有超过和不同于其它行业人士的特质:
创新力
编程开发是一件工艺,和谱写诗歌和音乐一样。它是各种智力活动中的一种,而且它能创造更大的价值。
建立模型
开发者做的事情很大,可以为世界打造一个逻辑模型,开发者也可以为公司打造一个商业模型。有多少技术出身的人在一个虚拟世界构建伟大又有趣的产品,像布林的Google、马化腾的QQ、网易的丁磊、小扎的Facebook。
广闻博学
有些人喜欢把东西拆开,搞清楚它们是如何工作的。编程需要更深入到一个层面 – 我们不仅弄清楚是如何工作的,而且要了解如何开发和编写代码,让这些物件做更多的事情。
不断学习
开发者最有机会使用最新的操作系统,新的编程语言,新的数据库系统,新的UI创新等。
开发者做的事情,可以是一个小产品,几天后就会被用户所使用,也可能是一个大平台,有几千万甚至更多规模的人们都在使用,很多人会对你说:“哇,真酷!”,还有什么事儿比这些更让人快乐!