版权声明:本文原创发布于公众号 wingjay,转载请务必注明出处! https://www.jianshu.com/p/39dce598faf1
我是wingjay,软件工程师,现居上海。
这次来记录下自己独立全端开发的第一款side project——简诗 2.0——及其中的一些心路历程和踩坑经验。
一年前我花了一两天时间开发了一款自认为挺cool挺优雅的Android应用,浓郁的中国风色彩和极简的设计风格,是我开发简诗最根本的原因,当时还在简书上写过一篇文章《如何在一天之内完成一款具备cool属性的Android产品<简诗>》,获得了不少读者的喜爱。不过,当时的版本只有 Android 端,没有服务器来支持数据存储。因此,今年又重新开发服务端,一方面为喜爱简诗的用户带来更多有趣的功能,另一方面锻炼下个人技术。
简诗最初设计草稿来自《Producter》一书,设计思路独特:别致的中国风纵书体验,大片留白的日式设计理念,体现浓郁传统中国文化的细节,都使得简诗与众不同。
开发一款如此别具一格的 App,在我看来,是一件非常酷的事情。
简诗的开发主要包括三方面:设计、Android 端、服务端。
我在最初《Producter》的设计草稿基础上,我对整个使用体验做了进一步优化:
Android 端采用了当前最为流行的移动架构和依赖,运行稳定,代码结构简洁,crash 率只有 0.1% ~ 0.3%。
开发过程中主要遇到一个问题是客户端与服务器之间进行数据同步,由于一个用户同时具有本地数据库和远程数据库,所以一旦数据库之间出现偏差,就可能导致用户数据丢失,而且要能够保证用户多客户端、离线修改数据、同步失败等情况下,都必须保证数据的可靠性,防止数据丢失。这种多数据库同步一向是较为复杂麻烦的,不过为了能让用户在没有网络时仍然能使用简诗,我还是花了一些去填好这个坑。
经过一段时间的摸索,目前简诗的代码里已经能很好的支持数据同步了,基本思想是:
这样大体可以实现一个完善的客户端和服务器的数据库同步操作,而且支持多客户端更改,并保证本地数据的最新。
当然,Android版里面还有不少较为复杂的技术点,以后再细说吧。
本人之前有完整的 PHP 后端开发经验,所以如果采用 PHP 开发的话难度会小很多;不过我最终选择了自己不熟悉的 Python 来进行服务端开发,这给我带来了一些挑战。
之所以采用 Python 有两个原因:一是对 Python 这门语言的好奇,软件工程师总是对未知领域充满好奇并想去探索;二是希望通过不同语言的服务端开发,来提升自己对服务端架构的理解。
在开发过程中我重新学习实践了一款优秀的Python框架:Flask的设计思想,也熟悉了阿里云服务器+nginx+gunicorn+supervisor的服务器运行环境,MySql + Redis的数据存储架构,写了一些脚本来运行数据库命令、完整的unit-test。
另外做了一些有趣的尝试:利用Slack + Jenkins 工具搭配,只要在Slack里输入一句命令,就会自动把服务器代码从GitHub部署到阿里云服务器上,比起以前手动拷贝代码到ftp上简直cool太多了。
当然,后端开发是非常有趣的,后面还会投入更多精力来搭建更加完善、稳定的后端环境,尝试更多有意思的玩法。
其实,我觉得side project最大的困难不在于技术,而在于懒,哈哈
我相信很多人和我一样,对side project很感兴趣,希望能利用业余时间去开发自己感兴趣的项目,提高技术和实践水平。那么,衡量好时间精力分配就比较重要了。
作为一名全职软件工程师,简诗 v2.0 的开发主要利用我周末的时间。总共花了三到四个周末,即六天到八天左右,完成了 Android 版本和服务端的开发。开发后段我的一位好友:Ray 也加入并协助进行了部分开发工作,有几个周六我俩都开发到了大概凌晨四点钟左右,一边阐述自己的产品创意,一边讨论工程实践的可行性,是非常有趣的一段经历。
简诗2.0发布后,我准备重新梳理下服务端的整理架构,深入学习Flask的设计思想,然后对服务端做一些改进。当然仍然是利用晚上和周末的时间。
酒香不怕巷子深,这句话在现在可能并不是那么适用了。我见过不少做的很烂的app广受欢迎,也见过很多优秀的app默默无闻。我当然明白很多工程师不愿甚至不屑去推广宣传,认为只要自己的东西牛逼,迟早会有一大堆人簇拥过来。
但是,移动开发日益激烈的今天,每天都有无数新的app诞生,人们不会愿意花时间下载尝试一款没听说过的app。
在国内,我们可以尝试下面的一些渠道来推广自己的作品:
在开发中我应用到了当今很流行的工具,这里给大家介绍一些我认为很有用的工具或者代码框架。
当代的人们逐渐习惯于阅读快速的文字片段,淡忘了写作的体验。而简诗的存在,就是希望让人们重新找回文字的美好之处,重新感受写作的乐趣。或许并非所有人都喜欢简诗,但只要有一部分人,能从简诗里重新感受到文字的温暖,就足够了。
GitHub 开源地址,包括 Android 与 Server: https://github.com/wingjay/jianshi
作为一名开发者,我也热爱并重视产品设计。平日里会阅读一些如日式设计相关的书籍。不过,我深知自己在设计方面的学识浅的可怜,因此,我希望在业余时间里能和一些优秀的设计师合作,共同开发一些独具匠心的产品给大家使用。
欢迎通过简书联系我。
谢谢!
wingjay