技术分享
一名跨行转码到自由职业者的程序员自白 | nStar 专访
跨专业、个人独立开发者、“秒回” GitHub 用户 issue…大叶身上的任何一个标签都足以让他人记住他。这次我想借助这次专访的机会,让社区的小伙伴近距离地认识这位社区用户。
不只是他的优秀,更多的是他对技术、理想的执着。
大家好,我是大叶,全名是叶伟城。目前正在写一些开源项目。
但实际上,我并非是科班出生的程序员,因为我之前有一段转专业从生物相关专业转向计算机的经历,所以我比较理解新手,或者是对编程了解不多的人到底面临着什么。因为他们可能没法和我一样,在转专业的过程中,遇到一个不错的导师。很多时候要入行某个领域,其实大多是缺少一个契机,或者是一个带路的人。踏进来之后,他就容易多了,所以临门那一脚很重要,也挺难的。
接触 VB 之后发现了程序的乐趣
在大二之前,电脑对我而言就是一个玩游戏的设备。一切从大二开始就变了,因为我们是综合院校所以开设了一门计算机的专业课——VB,在上课的过程中,我发现原来写程序比玩游戏好玩多。加上那门课的老师人很 Nice,教会了我不少计算机知识。
所以在大二学完之后,我觉得不够、我还要学的更多。于是,大三就开始去蹭计算机的专业课。因为是从头开始学计算机知识,大家一般在大一、大二是打基础的。所以,有段时间我这个大三生就混在青涩的大一班级里上课。但,好在的是,我们学校的计算机老师特别好。不只是在课上传授我知识,只有专业学生才能上的上机实践课,他也让我去参加了。他教授的课程是 Java,跟着他学了一段时间之后,我对 Java 算是有了一点了解。
如果说大三去学计算机是兴趣驱使的,可能后来决心成为一名程序员,更多的是因为我亲眼见证了我们专业(制药工程)的工作环境。大家都知道大四是要实习的,因为我本专业读得是制药工程,自然是要去找实习、跟着导师做些项目。也是那段时间,看过那些药厂、制药环境,我发现我真的要毕业之后的工作,长期待在 GMP 车间里,不是我想要的生活。
所以,同大多数我的同学们实习去专业对口的药厂不同,我其实在整个求职期间都在网上投递简历。这个过程中,收到了一些面试机会。我发现真的工作的所需技能同大学教授的是有所出入的,比如有些公司一面不仅是面编程语言,还有数据库,以及其他方面的专业考核。虽然我也蹭了一些计算机专业课,但和真的科班出身的同学相比,我的计算机体系不够全。
被人诟病的培训班也没那么差
意识到这点之后,我开始去接触培训班。在培训班中,从简单的 HelloWorld 开始,到第一条 “select * from table”访问数据库,再到编写一个网页,在这个过程中逐渐完善自己的计算机体系。现在回顾那段时间,状态挺像是高考的,每天 8 点多起来,一直到晚上 10 点多,这样的日子大概经历了有半年的时间。虽然过程看着有点累,但是更多的是快乐,一种知道自己的缺陷并去弥补的乐在其中。
可能大多数人对培训班的印象是“填鸭式”、“搞假简历”,非常功利地学习技术只能直接特定的应用问题。其实我自己对培训班是不带任何有色眼镜的,也是说我是个面试官去面试别人 ,不管他是科班的还是非科班、自学的,亦或是培训的,这些背景对我而言都不重要。因为计算机这个领域,说白了很难像其他行业一样,在这块会形成一个壁垒,出身并不重要。
所以,如果你要问我“如果你有选择的话,你还会选择去培训机构吗?”,我的答案应该是:让我回到当年再做决定,其实我依然还会去做这样一个选择。
跨专业找工作,第一份工就面成了,还变成了全栈工程师
虽然大学蹭了计算机学生的专业,也在培训班强化了我的计算机体系。但,其实你作为一个跨专业的学生去校招、社招找工作挺难的。
不过我运气还算不错,回厦门之后,面试的第一家公司还算是顺利。因为它是偏业务的,对整个技术要求并不是很高,所以面试问题不算是很深。正是因为它对业务的要求比较高,没有特别高的技术要求。相对来讲,对人的要求也会比较全。不光要写服务端,甚至页面要自己写。不过好在的是,公司会留出时间让你自己去摸索。不管是看视频,或者是看博客,或者其他方式,就在这个探索、学习、实践过程中,慢慢地变成了有比较均衡的技术发展。
像是 Java、Spring 那套体系,基本上掌握得都差不多了,足够满足服务器开发需求。前端这块的话,从一个开始学习 CSS 到 jQuery,再到现在国内比较流行的 Vue.js,它的具体用法和实现原理,都涉猎到了。
像是后来,在前端,或者是大前端领域,我也逐渐接触到了 Flutter,这种跨平台的技术,你写的代码可以变成 Android App 也可以是 iOS App,也能自定义成网页应用。真要说什么弊端的话,大概就是不能做小程序开发。
技术渐入佳境,转向自由职业者
在技术逐渐变强的过程中,其实我发现了上班坐班这个事情,自己是真的不喜欢。而且我的作息也同日常的早起上班相冲突,一般我比较晚起。而大多数公司是不喜欢这种不能“循规”按点来上班的员工,加上自己想要自由点,喜欢独处不喜欢和跟随群体节奏。那种你几点去吃饭,几点下班,这种按部就班的生活,会让我觉得自己束缚在一个框架。这种模式可能有他的好处吧,但是这种按点生活,有时候会打断开发思路,比如,我比较常遇到的事写代码写得很专注的时候,突然有个同事喊你说:吃饭了,这其实是很难受的。
所以,相对的自由职业更随心。想晚睡就晚睡,想晚起就晚起,随时随地想干啥干啥。时间完全由自己把控,非常自由。
可能大家会说自由职业是否有经济收入压力,我的答案:是有的。
一般来说自由职业可能大家会靠接外包,网站上找单子来做。我这边的话,主要是靠朋友介绍,相对来讲比较靠谱。像是之前,我在一个 Flutter 群里看到有人问有没有人接 UI 改造的活,我去了解了下它的产品,感觉并不是很靠谱就放弃了。所以,相对而言,朋友介绍会更靠谱点,无论是甲方还是开发内容。
就像很多人说的,自由职业没有相对稳定的收入,也许什么时候我就结束自由职业的生活。因为现在我虽然会接一些有收入的外包项目来做,但是很多时候其实我是依据自己的兴趣在落地自己的一些想法,开源出来一些自己的项目。但这些是没有经济收入的,全靠兴趣在支撑着。
自由的时间,做想做的事情
整个自由职业的过程中,其实我主要是做一些自己感兴趣的事情。像是之前社区 《Springboot 撞上 NebulaGraph——NgBatis 初体验》 提到的 NgBatis,就是比较代表的一个项目。
这个项目起源于一个自己想用 NebulaGraph 当业务数据库来落地的应用。那时候,手头上刚好有一个连接其他图数据库的半成品,因为 ClassLoader 的原因,没办法通过 java -jar
项目包.jar 的方式来启动应用,这对于 Spring Boot 的应用可以说是致命的,不得不搁置。但前面有提过,我开启了自由职业模式,有了自由的时间之后,刚好又有使用的契机,就想着再做次努力,没想到最后把之前碰到的困难攻克了,也因此进到了 NebulaGraph 社区。
在进社区之前还有个小插曲,Nebula 社群之前进群申请是需要和公司信息挂钩的(当然现在不需要了,由于当时没有归属公司的缘故,我的进群申请没通过。因为后来的 NgBatis 才破格进的群。进群后,通过运营的介绍得知已经有了一个 ORM 的框架 graph-ocean,也因此认识了朝来老师以及很多像朝来老师这样热心开源的开发者。如果你习惯用 JPA 的方式,graph-ocean 也是个很不错的选择。
而在 NgBatis 之前我还有另一个 Flutter 的 UI 组件库的项目,就想着能不能结合 NebulaGraph 做一个桌面应用性质的客户端,可以用来直观地操作图数据库,于是就有了 GraphDesk(产品还有些缺陷,如果你在使用过程中遇到问题,欢迎轻拍反馈)。在做 GraphDesk 的过程当中,一些生态化的问题就浮出了水面。相比其他语言健全的生态,Dart 语言的生态相对薄弱,比如说数据可视化,比如说市面上的数据库几乎很难找到 Dart 语言的驱动程序,更不用说还处在成长期的图数据库,可自己偏偏很看好这两个方向,也刚好有时间为自己所看好的方向做点事。可以说程序员是一个单纯而不乏勇气的群体,既然碰到问题,那就直面问题,最后解决问题,所以有了后来的 flutter_graph_view 解决 Dart 生态中图数据可视化问题,跟 nebula_dart_gdbc 解决 NebulaGraph 的 Dart 驱动问题。不过,目前阶段这些还都只是可用而已,离稳定、可靠还需要更多的测试,比如说现在正在使用 nebula_dart_gdbc 对前面提到的 GraphDesk 做全面的功能升级跟 UI 改造,因为很大概率会覆盖到移动端,于是 GraphDesk 也更名为 Star Shadow 星影,争取在自己更多的使用当中完善这些开源项目。
工欲善其事必先利其器
上面说了那么多,听运营小姐姐说专访快结束的时候,惯例是会在文末安利能提升生活幸福度和工作效率的小工具。
那,我就来介绍下 2 个我自己平时开发上觉得还不错的工具。
Snipaste,一款截图软件,对于前端开发人员来说,应该会很实用,一边比对截下来的设计稿一边开发。在没有分屏的情况下,便捷程度会更明显。
另一个是 MasterGo,对于平时需要画画原型设计稿的开发人员来说挺友好的。既不需要写代码实现运行效果,又能在软件中及时预览到实际开发完的效果,还能自动标注生成样式。
安利完两款产品,回头一看,希望有一天鄙人做的 NgBatis 也能变成一款被人安利的产品,社区有小伙伴愿意的话,一起来共建下这个项目 :D
以上,就是社区用户大叶的自白。虽然你可能不曾了解他,但是如果你作为一个 Java、开源爱好者,不妨去用用他的作品:NgBatis,也许通过代码会让你更加了解这个人。