分享 一个生物实验汪的编程学习经历和开源项目总结

发布于 2023-10-28  1060 次阅读


首先介绍下背景,op主业是搞癌症诊疗的,实验方向,之前只在本科的时候学过一点最基础的C语言。我的一些个人地址如下:

博客:https://www.horosama.com
Github: https://github.com/Kuingsmile
知乎:https://www.zhihu.com/people/kuingcry

编程学习经历

去年的时候,公司项目需要接触了一些数据分析和机器学习的东西,感觉编程还挺有意思,就从python开始学习起了coding。这一年半多点的时间,学习过的语言有Python、R、shell脚本、js/ts、Go、Dart,正在学习C++。

截止目前的github活跃度如下~~

image.png

一开始的时候,我是看菜鸟教程这类的网站,但这些教程里每节都是独立的例子,而且日常的工作中也没有应用场景,学习效率很低。业余时间看了一个月,Python水平还是处在知识点都见过,想写个小脚本就无从下手的程度。当时还去刷了刷leetcode之类的,但感觉也没啥进展。

后来感觉学习方式有问题,我又不靠编程吃饭,学这些科班应试的东西干啥,于是决定从实际需求和项目上手,正好这时公司有个项目中需要做机器学习和建模,有大量的数据可用,于是就基于这些数据,直接上手自己去做数据清洗,特征工程,建模和验证的整个过程。虽然当时基础的Python语法都记不住,但边写边查,Pandas、numpy、scikit-learn、matplotlib等库直接用起来,不到半个月的时间,Python的各种语法就已经搞的比较明白了。而且这个过程中还简单学了下各种机器学习、深度学习的底层原理。

到了去年9月,第一次接触了云的概念,在腾讯云上买了自己的第一个轻量服务器和域名,然后学着搭建了自己的个人博客萌萌哒赫萝的小站 - 爱生活 爱分享,后续学习使用nginx,mysql和docker等都是在这台服务器上,可以说是花的最值的一笔钱。

后面学习其它语言的时候,也都是采用直接上手写项目的方式,边学边写,所以这部分经历就合并到下面的开源项目总结里了。

开源项目总结

目前,我在github上的自己写的几个比较主要的开源项目如下:

项目名 github地址 开始时间 star数 简介
PicList https://github.com/Kuingsmile/PicList 2023年2月 999 pc图床工具
PicHoro https://github.com/Kuingsmile/PicHoro 2022年10月 483 手机图床工具
word-GPT-Plus https://github.com/Kuingsmile/word-gpt-plus 2023年4月 357 word中的GPT插件

在开源项目的参与上,目前我给多个项目都提过PR并被接受,比如Alist、pot等,Alist的epub预览功能最早也是我给出的解决方案~贡献者列表里有我的项目如下:

PicHoro

PicHoro是我的第一个开源项目,起初是去年十一的时候,想满足自己从手机端快速拍照上传到自建兰空图床上的需求,于是零背景开始现学了Flutter和Dart,光是set up一个开发环境就花了一上午,最终在十一假期里写出了1.0.0版本并发布,现在回头看第一板,十分的简陋,但学到了非常多的东西,算是开发的起点。后续这个项目慢慢的扩充功能,现在已经支持了十几种不同类型图床的上传,而且还能直接管理这些图床。下图是第一板和当前版本的界面对比,可以看到差距巨大~

image.png

PicList

PicList项目是我投入时间最多和学到的东西最多的项目,这个项目起初来自于我在用PicGo的时候,发现有时候会有删除远程图片和直接管理对象存储的需要,但PicGo除了少数几个插件外并不支持,而且作者也不打算添加类似的功能,于是就动了自己魔改的念头。于是春节放假的时候,我从零开始学了js/ts,node,html+css和electron平台相关的知识,同时完整的分析了一遍PicGo+PicGo-core的源代码,最终在2月中旬的时候发布了第一个版本。

从这个项目开始,我才算是了解了前后端、REST API等概念,也知道了自己当时写PicHoro的时候有多幼稚。比如我在PicHoro的早期版本里,设计了用户登录系统,但在客户端里是通过直接发送sql命令的方式来操作数据库的。。完全没意识到要后端设计一个API系统,导致后面很难做版本兼容和改动。另外,还学习了解了git的一些基本用法,比如pr、action、分支切换和merge等。

到写这篇文章为止,PicList已经有了999个star,还差25个star就满1k了,而且目前Typora 1.6以上的版本也内置了对PicList的支持,Obsidian的上传插件也支持了PicList的删除功能,可以说是已经超出我写这个项目之前的预期了~

以PicList为核心,我还学习写了第一个vscode的插件 vs-PicList,第一个npm包piclist-core,整个过程中自己的代码水平算是有了一个比较大的进步。

word GPT Plus

word GPT Plus这个项目,是趁着GPT的热度开发的,当时Microsoft 365 copilot还没有上线,但手头有需要投稿的文章要修改,于是就写了一各插件来调用GPT的接口在word内修改文章,由于word插件是基于web技术的,所以这个项目就直接用Vue进行了开发,大概几天就写好了,没啥难度。

其它项目

除了上面几个主要项目之外,还用php写了一个简单的随机图片接口网站,用docify做了PicHoro的文档网站,用Vitepress做了PicList的官网,更重要的是为老婆做了我们结婚的请柬网站,老婆非常满意,哈哈哈~

总结

编程对我来说其实就像是一个大的开放世界游戏,总会遇到新的好玩的东西,也会遇到奇奇怪怪的问题,整个过程非常有乐趣。后面应该也会随着自己遇到的实际问题和需求去学习,最近可能打算多学习些Bioinformatics的东西来辅助自己的工作,然后学些计算机底层的知识。学,学无止境,哈哈哈~