【技术杂谈】对一边旅行一边编程的生活方式的体验和思考

PS:如果有时间有机会,还真的想去尝试下这种一边旅游一边编程的生活!说来这也是自己一直以来想要的生活体验! 大概三个月前,我工作的公司突然倒闭了。 倒闭的原因跟这篇文章的内容毫不相干,但简言之,投资者毁约,一个开发中的产品,也就是我主要工作那个,被迫终止了。 我从没有想过会发生这种事情。一下子变成了待业,我是刚休完假回来,而且还就当前稳定的工作做了一个中长期计划。 但事情就这样发生了,而且是一夜之间,我不得不思考下一步的出路。 远程工作的想法一直吸引着我。我知道,在某种程度上我是想逃离这种朝九晚五的桎梏,带着我的笔记本,去寰球旅行,以自由编程职业者的身份做一些小项目,全面体验生活的同时还锻炼我的技术能力,不至于让自己变得生疏。 于是,突然间,我就变成了一个数字游民,没有包袱,没有贷款,没有孩子,有一点积蓄,没有近期必须要做的事情。 需要说一下,我的决定下的非常简单——这是一次绝好的做一次旅行的机会,我一直盼望着的。 我的旅游线路的选择非常的好理解,数个原因最终导致了我买了一张去往曼谷的机票。 东南亚自由港! 我到欧洲一些城市旅游过,所以我去世界里另外一部分。 我曾在美国待过一年,我很想回去看看,但我迫不及待的想开始我的旅程,而对一个波兰人说,美国签证既昂贵又难拿到。 澳大利亚对于做长期旅游来说花费实在太高,尤其是像我这种情况,我喜欢潜水、冲浪和其它一些户外运动,这些运动即使在一些“便宜”的国家里也是价格不菲,更别提在澳大利亚了。 所以,东南亚成了很明显的选择。那里是有预算限制的旅游人的圣地。网上有很多到过那里的人写的无数的博客,我想,这应该是一个人的一生中至少要经历过一次的一件事。 幸运的是,我有一些小客户,当我还在公司上班时,下班后会给他们干几个小时,虽然收入不多,但在旅途中,这也是一种相当大的经济保障。 经过了一个月的准备(打疫苗,装备,景点计划),我和女友背起背包(42升的Northface Duffels包——高度推荐,虽然不是做长途旅行的最佳选择),启程飞向曼谷,开始了我们泰国,越南,老挝,柬埔寨的旅游计划。 现在,我已经旅行两个月了,为我在波兰的客户远程工作。这些简单的工作大多数是维护修改一些现有的网站,但我后来想办法接了一个大一点的Rails项目,这个需要我从头开发。 目前为止,这是一次非常值得的、有启发的(尽管不是在技术方面)的体验,但也显露出一些小的问题,我想在这里分享给大家。 主要的,我发现我需要反复面对两个非常重要的问题: 1) 项目类型限制,在旅途中你可以做的项目; 2) 对不依赖办公地点的错误认识; 只能做一些小的简单的项目 这对于我来说是巨大的不利。起初我觉得做一些小项目能让我保持漂泊状态就行了,但现在的现实情况是,我越来越有一种没有成就和浪费时间的感觉。 没错,在泰国帕岸岛的小屋里打开你的笔记本电脑,一边跟客户网上交流一边开发项目,旁边就是海滨,这很有趣。你做完工作,跳进30度左右的海水里,更美妙的,你可以自由的潜水到数个珊瑚礁里,但这需要另付费。 我并不是真正的认为长时间的旅游是一种浪费时间。旅途中你能获得很多的见识和机会,但事情往往是不能兼得。 如果你喜欢挑战,需要不断的在你的技术领域中取得自身发展,可在旅途中你很难达到这方面的平衡。 当然,这取决于你开发的项目的类型和实现中面对的技术问题,但说老实话,当你在不断的变换地方,经常遇到不可预知的网络状况,渴望最大限度的享受旅游中的快乐,你根本无法去做那些有难度的挑战性的工作,这些工作需要数小时的分析,讨论和复杂的编程。 旅途中有太多让你分心的事,工作后(有时是工作中)有太多的东西吸引你去观看。 我非常理解,有些人会把这当作一种自制力问题,一种如何计划,如何准备的问题,但对于我来说,绝不是这样的。 我认为自己是一个非常能自控的人。我的客户满意我做的工作,我总是能按期完成任务,而且是高质量的。这是我自己定的目标。 问题不在这里。问题是,当涉及到中等复杂项目,涉及到不那么简单的编程任务时,我发现,很多在办公室里能完成的工作,在旅途中却变成了很有挑战或完全不可能的事情。 这种情况限制了我只能挑选一些容易处理,以及有富足的时间期限和只需要少量的研究的项目。 毫不隐瞒的说,还不止这些。我认为在一个由比你有经验、比你聪明的人组成的团队里工作,这对你的开发是至关重要的,作为自由职业者,只做一些小的项目、一些简单的MVC/CRUD编程工作,这就是相当于错失了很多成长和学习的机会。 但不要误会,我在忙碌的工作,每天都在努力学一些新知识,一直都在增长我作为程序员的各种技术能力。然而,在过去的两个月里,我感觉缺少把自己暴露在现实编程问题中的机会,那是我在公司工作时每天都会遇到的,那些问题是你一个人无法解决的。那些问题跟公司的大小无关。 不依赖办公地点的错觉 现在,我完全的相信远程工作是可行的,它对(a)程序员摆脱办公地点依赖和(b)减少公司开支是十分有效的途径。 但实际情况却完全不同。旅途中工作给了你一种工作地点不固定的感觉。当然,有的公司的办公地点会分布世界各地,但为了完成一个不那么简单的任务,你非常需要一个舒适的场所,好的网络连接,安静的环境,更好的一些设施,例如健身房,瑜伽室,酒吧。 还有一点很明显,在旅途中我发现,创造性较大的工作需要有一些作息规律。一周变换一个地方,工作在海滨,吊床里,咖啡馆里,酒吧里,旅馆地板上,对于度假来说这很酷,但很显然并不有助于解决困难的编程问题。 对于这些问题涉及到各种可能性和各种层面,我现在想了一些解决方案,下面就是。 1) 远程工作的内容要适合你的技术和你的能力。每三个月换一种技术方向。在每一个地方要多待一段时间。要让自己沉浸在当地的文化和生活节奏中,租一个好一点的屋子,要有一个正式的工作桌和椅子,要能确保你坐在上面能保持3个小时以上(如果你有站着工作的习惯,那就忽略这一点),要形成规律习惯。去你喜欢的地方,当你想换个地方时,先研究一下,然后再去。 2) 找一个真正的工作,在办公室里的工作,做你喜欢的和有挑战性的工作(事实上,一种应该这样),争取能长期假期,去旅行,每年大概2个月。 3) 积极做一些能够获得临时收入的wordpress网站和旅游网站相关的活,这能给你带来很多的收入,能让你旅游个够。 来源于:How I thought I wanted to become … Continue reading “【技术杂谈】对一边旅行一边编程的生活方式的体验和思考”

【技术新闻】写给四年前刚开始编程的自己

2009年9月,进入大学的第一天,开始了我正式的软件工程的学习。为什么是正式的呢,因为之前虽然也写过代码,但完全是出于兴趣,想到什么就学什么,毫无章法。后来来到了北交大,进入了据说还不错的软件学院,有了一群志同道合的朋友,一位位用心良苦的老师,踏上了一个“程序员“的冒险旅程。现在,我在美国密苏里大学读计算机硕士,回首自己走过来的这四年,错过了很多,也明白了很多,收获了很多,对软件和计算机渐渐有了自己的认识,更重要的是,发现了自己越来越多的缺陷与不足。有些当年认为用处不大而忽略掉的东西,却成了现在最最重要的东西。有时会后悔地埋怨自己当时不努力,欠下了太多的债,只能后来慢慢偿还。 如果能够给我一次机会与四年前的我通话,我有太多的东西想对他说。然而,也许几年后再次回首,我会有另一番不同的思绪,但此时此景,我能想到这些,至少现在是对的,我不想后悔,把这些写下来,算是一种慰藉吧。 多出去走走,开阔眼界 “世界就像一本书,不旅行的人,只读过这本书里的一页。” 世界之大,无奇不有,不管你是否要做一个技术男,你都应该出去走走,去看更多的风景,去见更多的人,去体会更多的风情。不要做井底之蛙,这个世界到处都是精彩的事物,而有些东西如果不去亲自体会是永远无法得到的。没有人规定程序员就必须整天埋在代码中,上天赋予了程序员自由的职业特性,就一定要利用好它。程序本身就是一种美,你要时刻保持一颗欣赏美、涉猎美的心灵,才能更好地去发现和创造。眼界开阔了,心灵才不会收拘束。真的,这个世界太美好,去发现感动到哭的美。 你要做一个旅行家里代码写得最好的人! 不要沉迷社交网络,线下的生活更加丰富 碎片化的信息正在侵袭着我们的生活,社交网络的发明让我们能够在网上互动和交流。但你要问自己,这些真的对你有用处吗?当你和周围的朋友们沉迷于人人网微博消耗时间时,是否意识时间正在疯狂地消逝,等关闭网页的瞬间,你是否感觉到孤独感重新来袭。 最近刚看了《黑镜》第二季,第一集中男主人公沉迷于社交网络,有一天车祸不幸去世后,有人制作了一个机器人,根据他生前在社交网络上的言行,让他继续虚拟地活下去。当然结局你应该猜到了,是的,这个人没有情感,有些东西是永远无法从社交网络上模拟的。 线下的生活更精彩,你要多参加有益的社团、活动,多交朋友,在真实生活中维持真实的感情。 打好C语言基础,掌握并深入一门编程语言 在后来的学习中,尤其是这几个月来在国外的学习,让我渐渐感受到一些教育上的差异。C语言作为你正式学习的第一门语言,你要做到的不是掌握语法这么简单。语言是指一种工具,帮助你理解程序设计的思想和奥秘。如果有可能的话,我希望你开始研读Linux设计思想和源码,理解其中各种设计模型和理念,因为这些才是根,当你真正了理解了这些,就会发现所有的语言都是互通的,都遵循了一个准则,即使有新的思想,你也会很快接受并融会贯通的。 说到语言是工具,你当然要选择一门语言并试图做到精通。建议你学习C++,因为它更接近软件的底层和实质。掌握并精通它,理解它的一切,并在现有的基础上创新。Java封装的太多,你可以用Java来很好地理解面向对象的设计原则,来快速地开发一些程序,但Java会限制你的提高。当然你可以做一个Java界的大牛,但你想想,除非你特别喜欢这门语言,否则不要被它框住。 一定要学好的课程,一定要读的书,一定要掌握的技术 这几门课程是你一定要认真学习的,因为有一天你会发现它们非常重要:“数学方面的课程”、“数据结构”、“算法设计”、“操作系统”、“数据库”和“系统级编程”等。 这几本书不管你有多忙,都希望你能好好研读:《算法导论》,《代码大全》,《编程珠玑》外加多本文学书籍。 这几个技术一定要用心学习,因为它们真的很有用:Linux(内核+概念+应用),数据库,汇编与编译,调试,算法设计等。 广泛涉猎,但不要丧失重心 技术行业里永远有新的技术,不要让你的大脑僵化,要勇于去尝试新的东西,了解各个细分的行业,了解各项技术,广泛涉猎。因为只有这样,你才能发现什么是你真正喜欢的,真正感兴趣的。当你找到了自己真正的兴趣所在,你的所有研究和工作都将是快乐的。 另外,树立一个榜样,如果你决定要做一个商人,可以选择比尔盖茨、乔布斯,如果你决定要做研究,可以选择Linus,高德纳等技术流。抱着一种学习的心态去看待,不要盲目崇拜。 好好学习一门脚本语言 学习一门脚本语言如Python或Ruby。建议学习Python,并好好掌握它,这样可以让你更快速地与计算机交互,帮你快速解决某些问题。Python也有很多各方面的、优秀的框架,在Server开发、科学计算等方面都有很大的潜力。另外,PHP可以让你快速地架设一个小型网站,而且开源的系统也非常多。所有的这些工具,都可以在你需要的时候帮助到你。 保持一颗好奇心,一颗童心 时刻关注业界信息,关注各个IT公司动态,关注科技新闻,关注创业,向过来人吸取经验。你看得越多,分析的越多,你对业界的信息、发展的感知就会越敏锐。不要盲目跟风网上的言论,学会自己分析。 保持一颗童心,你才能保持一颗创造性的心,不要僵化思维,不要定势思维。这些都是需要训练的,相信你经过这些历练,一定可以有所进步。 最后,珍惜时间,珍惜生命,做最好的自己。 Jhonse技术博客说明: 来源于: http://hackecho.com/2013/03/a-letter-to-myself/