直到现在,很惭愧,我仍然还没有能力被称为「软件工程师」,我只是一个普普通通的「软件开发者」。
2018年8月16日早上九点多钟,我怀着忐忑的心情走进一幢办公楼,进电梯,上七楼,那是我第一次有了自己的工位。
两年了,这两年我都经历了什么呢?有什么变化呢?对这个职业又有什么个人思考呢?我来试着说一说。
第一个问题:转行难吗?
我大学学的国际经济与贸易,2018年毕业。
都说工作不好找,我倒觉得挺简单的,如果你不是很挑剔的话。当时中小型的互联网公司崛起,市场上出现很多做内容、社群的公司,工资四五千,挺好找的。
可我是个很挑剔的人。2017年我曾面试极客邦的内容编辑实习岗,一百元一天,一周工作三天,我拒绝了,这让我切身明白了一件事:
大学生真的太便宜、太不值钱了。
为了应对市场对我的低估值,我特意做了一番调查,最后发现做软件开发是最“经济”的一件事。因此2017年10月份,我就开始着手学习 Java;
2018年7月份毕业;遂在上海找 Java 方向的工作,面试了七八家公司,积累了一些面试经验,谈的薪水从四五千逐渐涨到六七千,但我仍然不大满意,我感觉“ Java 市场”对转行过来的应届毕业生好像并不友好,初级 Java 岗貌似已趋于饱和。于是我抓紧学习了 Go 语言。
Go 语言方向的工作仅找了一周,薪资最高顶到 9500,但综合考虑公司情况,选择了技术驱动型的一家,薪水 8000 元。
转行后的第一份工作的第一年,极度痛苦:
几乎所有的开发工具都要学习,包括 Goland IDE,甚至包括打字!
对开发流程一窍不通!怎么提交 code review,如何在 gitlab 和 confluence 中做任务管理,一窍不通。
说老实话,我对这些东西还来不及有新鲜感,就被绵绵不绝的痛苦疯狂袭击,没有一件事情是闹着玩儿的,每一件事情都事关转正和尊严。面对那些工作任务,我只有一头雾水,焦虑和对未知的恐惧。
转行真难!软件开发,入行真难!
第二个问题:有没有什么诀窍?
2018年,当我对着一堆代码怀疑自己的价值和意义的时候,我痛苦不堪的问一位同事:请问看代码有什么秘诀吗?
她很显然识别出了我的痛苦,所以苦笑着说:说实话我真不知道有什么秘诀,就得一行一行的看,把每个方法的作用看明白,就都明白了。
这是我第一次傻乎乎的请教别人有关诀窍的问题,我真感谢我的那位同事–王悦女士,她的诚恳消释了我的部分绝望,她的答案是正确的,不故作高深,实实在在,让我受益无穷。
转行软件开发有没有诀窍?说实话我真不知道有什么诀窍,就得把一个个工具用起来,把编程语言的标准库用熟练,不行就问,别嫌丢人。
我的进步全部发生在「问」的阶段:
问同事。职场不比上学,工作时间问他人问题就会占用人家的时间,这段时间人家都有自己的事情做,可能在冥思苦想,你一个问题抛过去就有可能打断别人的进度,打扰到别人。
但问题该问的还是要问哪,同时,也要照顾到别人,因此,问问题的时候一定要十分注意方式方法。
首先,问题要足够准确。你不能问一个非常模糊的问题,因此,这不仅需要自己在问问题之前对问题有足够深刻的认知,还要能分解问题,把问题拆解为不可分割的若干子问题,对你无法解决的子问题进行询问。这是要下些功夫的。
其次,要定义清楚问题前后涉及到的概念。概念是一类问题的凝练,如果大家都是老手,概念默认统一,这是没有问题的。但由于我们资历较浅,对概念的认知含混不清,这有可能直接影响解决问题的方向以及问问题的质量,甚至,当对方向你解答时,你连听都听不懂。
最后,提前想好如何富有逻辑的描述问题以及你所能想到的解决方案。表面上看,我们在提升沟通能力,深层次上讲,这牵涉到一个态度问题。我们作为提问方,本来就已经平白无故的占用他人时间了,如果因为自己表述不清而更多的耽误了别人时间,这留给人的印象该是多么糟糕啊。说到底,是人与人之间相互尊重的问题。
问 Google。我并不排斥百度,直到现在,遇到的很多紧急问题都还需要百度才能解决,虽然,百度的广告饱受诟病,虽然百度搜索栏右侧的醒目的实时新闻垃圾、恶心,但,百度里的信息量还真的挺庞大,使劲搜一搜还是能搜到有价值的信息的,又不是不能用。没有办法,这与个人英文的描述能力有关。
最近一年,面对一些不太紧急的任务,我开始强迫自己上 Google 寻找信息。
有什么诀窍吗?没有诀窍,一句话一句话的看,看得非常非常慢,单词要联系上下文猜,或者查 Google Translate,一个句子中出现多个 of 时便头疼的不行,赶紧找了一本语法书读。
两年后的现在,回过头去看,工作逐渐进展顺利,痛苦、焦虑的“症状”也由强渐弱,也许这是转行必然经受的过程。
其实痛苦只不过是面对困难时产生的幻觉,当你能力逐渐提高,逐渐能掌控工作中遇到的局面,你的痛苦也就逐渐烟消云散,从而再次进入一个舒适区的状态。
那段痛苦的过程让我受益良多,这得益于我进入了一个开放、宽容、友好、坦诚的团队。在这个团队的浸染中,我学会了职场中的沟通和协作,学会了定义问题、分析问题,学会了逻辑和理性,还偶然习得英文的阅读。我是不是很赚?!
第三个问题:非科班出身有什么问题?
我不是科班出身,可这有什么关系呢?我也会 Git,会分析需求,会调用标准或第三方库实现需求。
我曾经这样得意的以为。
直到前两个月我开始寻求新公司、新岗位的时候,才意识到非科班出身究竟有什么问题。
首先是技术热情的问题。新的用人单位并不了解你,他们掌握的信息和你拥有的信息不对称,因此当他面对一份转行过来的简历,就会自然而然的想弄明白:
一个资深的、有技术追求的技术面试官,很容易在一个小时的面试过程中判断出:你的知识面如何,你的技术深度如何。
有很多可以询问的点,例如操作系统、网络、数据库中某个模块的设计原理,例如你业余时间都在读哪些书,参与过哪些开源项目。
对于痴迷技术的同学来讲,每一个问题都是展现自己的舞台;可是绝大多数转行从业者,对技术,其实并没有这般的迷恋。
如果一位候选人并不迷恋他的职业,那么这位候选人的未来发展潜力就可想而知了。
非科班出身的第二个问题是技术能力的问题。其实这不是戴着有色眼镜对待转行过来从事计算机行业的同学,而是事实。
科班出身的同学,用了至少两年多的时间学习计算机的基础知识(还有一年多时间来学习数学、物理等知识,还有多半年时间用来做毕业设计)。就算没有好好学习,至少的至少,考试是考过了的,不至于一窍不通,对计算机组成原理、计算机操作系统、计算机网络和数据结构算法应该是有所涉猎的。
基础知识是在这个行业生存绕不过去的槛儿啊。因此,对于非科班出身的同学,如何把人家曾经在课堂里学习到的基础知识在我们业余时间里补齐,这就是个「房间里的大象」般显而易见、不得不重视的问题了。
除此之外,你还要深入了解市面上流行技术的原理,比如 Mysql、Redis、Nginx 以及形形色色的框架和第三方库。工作中能不能用到不重要,不为别的,就是为了获取别人对自己技术能力和技术热情的肯定。
要求再高一些,就不仅仅只是会用这个软件、那个库这么简单了,工作过程中,很多时候需要你提供完整的解决方案。这又是一道技术门槛。
小的让你提供日志收集、软件升级处理方案,大一点就是要提供登录注册、用户权限管理解决方案,再大就是提供数据分析、分布式、高并发等等等等的解决方案,越来越复杂,对应的能力也就要求越来越高。
所以,软件开发这个行业难吗?真难!
我想到社会上对程序员有两个错误的认知,顺便讲一下:
程序员是天才吗?很显然当然不是,他们做的只是在用一种特殊的英语语法跟计算机“说话”,让计算机听他们的,你来你也行。从我的角度来看,软件开发行业是个易学但难精的职业。
软件开发行业造富了吗?我想这也是偏见吧,因为各行各业都有大老板,有形形色色的富人。若单单从个人月薪资的角度,你挣一万,做软件开发挣一万八,这能差出多少钱呢?差出来的钱固然让人艳羡,但还不足以撑起“富”这个字眼。
行文到最后,我用一张图片来描述一下我认为的软件开发这个职业里的“江湖”吧。
软件开发这个“江湖”清澈、单纯,全凭真功夫,运气成分比较少。跟其他很多行业一样,要做到「专业」,真绝非易事,无不要花费大量的时间和心血去死磕。以下也只是个人见解,不一定对: