非科班出身,如何成为程序员?

2023-12-05

我姓方,89 年出生,程序员一枚,坐标上海,14 年毕业,大学学的是地理,典型的非科班转行成程序员,并完全靠的是自己的努力转行成功。

一、我的故事

我的第一家公司做 Windows C/C++ 开发,第二家公司做 Linux C++ 开发,第三家公司是某大型互联网公司,以 C++ 技术专家的加入,同时从事 C++ 和 Java 开发。我大学学的非计算机专业,非科班出身的劣势就是参加大厂的校招时,筛选简历那一关直接给你 pass 掉了,这也是我毕业时未通过校招去大厂的原因之一。之所以走到今天靠的是自己的兴趣加上一些运气,当然也离不开很多人的帮助。大学时早年自学 Web ,熟悉 html 5 标准前的各类前端开发技术和 PS 等软件,后痴迷 Flash 编程,做过很多 Flash 动画自娱自乐,2011 年大学毕业时先后在上海一家开发 Flash 整站和一家做网页游戏公司任 Flash 程序员,第一家公司实习工资 1500,第二家公司正式员工月薪 3000。许多年后,我和第二家公司的 Flash 主程再聚首时,他告诉我其实我当时作为一名应届生 3000 的工资并不低,当时他作为项目负责人工资也才 8000。当然,据他说,经过这么多年后,在经历了几次创业失败后他也回归于平淡,在张江一家做游戏的公司安安心心地上班。

我的大学后半段时间,真的非常痴迷于 Flash,那个时候觉得 Flash 就是整个人生的意义,并为此写过很多轻狂的话,像什么“你 flash一下子,我爱你一辈子,真像个傻子”、“让我们高举 Flash 伟大旗帜,紧密地团结在以 Adobe 为核心的富媒体公司周围,紧随乔纳森.盖伊的脚步,不舍昼夜的编程,把我国的 RIA 事业全面推向现代化!” 那个时候,坐五个小时的火车来上海,就为去上海书城买一本全英文版的《Flash 编程精髓》,甚至为了一份 flash 开发的工作差点儿放弃读研究生。时过境迁,八年后的今天,浏览器原生支持很多以前仅能通过 flash 实现的技术和效果,Adobe 公司宣布不再更新 flash,各个浏览器逐步禁用乃至不再支持 flash。真是让人唏嘘不已啊。

大四正式离校的前一天晚上在逛蓝色理想站点时,发现有人在一篇帖子上推荐《Windows 程序设计》(第五版)这本书,看了下目录,果断购买,听说过这本书的读者应该知道,这本书一百多块钱,老厚了。这本书可谓是改变我整个人生轨迹的一本书吧,这本书介绍了 Windows 操作系统上程序运行的原理,直接利用操作系统提供的 API 进行编程。愈看这本书,我愈喜欢,它介绍了很多操作系统层面的原理,从前很多在 flash 平台不明白的东西一下子变得清晰起来,从前很多 flash 平台提供的类库不知道该如何使用一下子明白了为什么要那么设计了,后面又陆陆续续地看了《Windows 核心编程》等书。整个人更意识到对底层原理和计算机基础科学的掌握的重要性。于是等到硕士毕业时,我可以去一些公家单位从事地质相关的工作,去互联网业务做前端开发(也包括 flash 开发),但是我还是很倔强啊,薪资高低和工作地点并不是我考虑的因为,我就要做 Windows C++ 开发。当年非 flash 不嫁,如今却非要嫁给另外一个人。哎,人这辈子啊,真的可能会爱上很多人,工作、兴趣亦如是。

让我们来复盘一下这段经历,整个学生生涯,大学期间学的是 web 开发和 flash 编程,硕士期间学的是 Windows C++,并针对性地补充很多计算机科学的基础知识,也看了不少“闲杂知识”,如汇编、逆向、安全工程等等,当然都是自学。人的经历是有限的,自学的太多其他东西,很可能让你的专业课就变得一塌糊涂。我也是这样,所以,我特别理解 CSDN 上那位叫 moreWindows 的前辈在读研期间的痛苦,好几次想辍学去做开发。但是,作为过来人,我也想劝来者:如果你有机会读研一定去读个研究生,哪怕是自费或者非全日制的,你现在不明白,会有明白的一天,我们大多数人都不是命运的幸运儿,所以有时候学历还是有点用的。

前期学习 Web 开发技术,让我对 html、javascript、CSS 等非常熟悉,而且我读了非常多的 web 方面的经典书籍,也熟悉 web 标准,那个时候讲究的是三层分离(即表现层、样式层和行为层要分离),加上后来又学习了 web 后端开发技术(主要是 php),我的水平具备开发一个商业的 web 整站的水平。这段经历,让我熟悉了很多计算机和软件开发的一些基础理论和设计原则,如 URL、相对路径等概念。

后来,深入系统地学习了 Flash ActionScript 编程。这门语言的语法和类库,我现在已逐渐忘记了。但是这门语言让我深刻地理解了什么是面向对象编程,让我在后来学习 C++ 和 MFC 轻松了许多。读研期间,我也读了不少经典的计算机书籍,如《代码大全》、《整洁代码之道》、《程序员的自我修养》等等。这些书,与其说是从技术上影响了我,不如说从思想上影响了我,在我学生时代,让我对自己的编码无论是从效率还是从风格都严格要求自己。因此,它们带给我的正向效应也体现在我的第一份工作中。

由于我硕士毕业时,第一份工作非 Windows C++ 不做,但是很多公司要求有工作经验,挑来挑去,最后在上海(我是不愿意去二三线城市的)闵行的一家公司安定下来。离职的人千万不要说自己之前的公司多么不好,就和席慕蓉说年轻时被迫和爱过的一个人分开不要心存怨恨一样,那样只会显得自己多么差劲和眼瞎。这家公司做的是炒股软件,男怕入错行,女怕嫁错郎,刚毕业的男孩子们一定要做好职业规划,选好自己的职业和方向,从那以后,我虽然在短暂时间内离开互联网金融行业几次,但是我从未真正离开过。尽管这家公司存在很多问题,老板也不是很 nice,但是这家公司老板和两个 leader 都是做技术的,并且非常乐于传道授业解惑,定期的给各位新同事讲解开发知识;几年以后,成为技术 leader 的我,对于那些勤奋好学的组员,我也是愿意多给他们讲讲技术的。可惜职场中真正知道自己想要什么、明白自己为谁而干活的人太少,大多数都是重复着一圈又一圈的年轮,重复着冗杂业务代码的开发,工作做的不好也不坏,渐渐地变成了职场老油条或转行,留下来的老油条然后告诉新来的人,啊,程序员到了四十岁有职业危机啊。我一个硕士学历进入这家公司的薪资只有 5200 元,2014 年一个名牌大学的硕士从事 IT 行业拿这样的薪水还是有点低的,五千多出来的两百还是我和人事讨价还价要来的上下班公交费呢。那个时候为了省一点房租,我住的很远,可就是这样我仍旧每天加班到很晚,周末也会去公司。之前在书中看到的各种技术理论,慢慢地在项目代码中找到了应用,而这些代码就向对我打开的天堂之门。我如饥似渴地学习着。由于表现的好,加上公司人事调动,我很快成了整个客户端项目的负责人,并且为了更好地开发,老板也给我开了服务器代码权限。二个月后薪资涨到 7200,去北京出差回来,涨到 8000, 2015 年 10 月份,向老板提加薪 4000,老板也答应了。公司整体环境加上自己的努力和一点点运气,我熟悉了从 Windows 客户端到 Windows 服务器开发的一整套流程和常用技术。这里不得不提醒一下各位即将从事这个行业的读者,看懂别人的代码是一回事,自己会写会设计是另外一回事。我也是,举个例子,我们老板一直告诫我们 Windows 的完成端口模型一定要自己多练习几遍才能掌握,为此我练习了五遍,并且在后来的新项目中顶着项目进度的压力将底层网络通信框架重构了三个版本。在北京出差的那段日子里,我经常周日孤零零地坐在甲方的办公楼里写代码、调试代码到深夜。

由于这家公司使用的是 Windows C++ 技术栈,后来公司与某个证券公司合作要开发一个新的项目,后台使用 Linux C++ 开发,为此招了两名 Linux C++ 开发,同时招了两名手机开发人员(安卓和 IOS 各一名),PC 端由我带领另外一名同事一起开发,我同时兼任整个项目的负责人。现在想想,当时真是初生牛犊不怕虎,那个时候谁都敢喷,作为一名客户端开发人员,竟然有时候会喷站在更高角度的后端开发人员。不过,回过头来想想,那时候这个项目的后端开发设计的协议确实不方便使用。

在之后,2015 年年底快过年了,发生了一件因为年终奖被克扣 80% 的问题,让我对老板很失望,在做完项目并交付后,我离职了。此时,我的月薪是 12 k。由于在第一家公司磨练出一身技术,加上扎实的基本功,经历三天的面试,锁定了两家单位,一家是上海张江的某家网络公司(为了叙述方便,以下称 A 公司),另外一家是东方财富网,前者给月薪 14 k,后者给月薪 18 k,由于学生时代感受到 A 公司插件的”厉害之处“,向往其犀利的技术,再加上东方财富国企式的面试风格和办事效率让我没有好感,在经过短暂几天纠结之后,选择去了 A 公司。这次是拒绝了东财的客户端职位,一年后又再次拒绝了东方财富的 23k 的后端开发职位,真是对不住那个可爱的人事小姐姐,两次都是同一个人事。

但是干了一段时间后,A 公司让我觉得特别不舒服,这种不舒服不是在于 A 公司的待遇不好。平心而论,A 公司的工作没什么压力,负责的项目已经很稳定,而且是多个人负责一个项目甚至一个模块,每天可以准点下班,且每天下午都有较长时间的下午茶时间,每天每人一袋水果,常见的水果都有。每天晚上超过八点,可以享用公司的加班餐,加班餐很丰富,20 元一份的水果拼盘可以让两人吃到撑。年终奖是保底 14 薪,平均下来是 16 薪。真是个适合养生的好去处啊。

我之所以觉得不舒服,是因为开发模式,第一,整个项目的框架由 A 公司的基础架构部给你开发好,另外 A 公司有个巨大的 RCFL 库,这个库封装了几乎所有常用的工具类,上层开发直接调用这个库里面的类。问题是,我们看不到这个库的代码。我并不想在这里养老,而且我也讨厌日复一日的业务开发且还看不到底层框架代码,并且那个时候,受在第一家公司 Linux 服务器开发的同事的影响,我有点不想继续做客户端开发了,我想去试试 Linux C++ 开发。于是,任性的我,这次决定离职了,虽然同事和部门 leader 意外的眼神让我觉得很对不住他们。但是,Linux 操作系统我并不熟悉,而且 Linux 的很多编程原理我也不清楚,于是我在 A 公司偷偷摸摸地学习了三个月 Linux 开发。三个月后人事告诉我可以转正了,我却告诉他她不想转正,我要离职了。那是 2016 年 5 月份的事情了。那个时候,上海的天气已经有点热了。社会人士求职要求的更多的是工作经验,所以我求职 Linux 开发的经历还是比较坎坷的。当时,女朋友还调侃我说,我要失业了。在寻找了好几个星期之后,我终于在另外一家公司以 16 k 入职。

这段工作经历,让我熟悉了 Linux C++ 后台开发的流程,加上自己爱研究,很快就对服务器后端的框架举一反三了。先后在这家公司做了两个项目,可惜好景不长,由于当时我们做的是现货业务,一年后由于国家政策收缩,公司业务被砍,大批量裁员。但是我呢,由于既可以做后端开发又可以做 pc 和 web 开发,被留下来了。当时另外一家公司正在高薪招技术好的全栈开发,这家公司工作压力确实很大,我最终以 26k * 15 被挖过去。我在这家公司做直播的后端开发,同时负责各个平台(pc、mac、安卓、ios等多操作系统多语言(主要是 C++ 和 Java 的开发))的 sdk 的维护。这家公司的技术我是从心底里佩服,全公司 90% 都是技术人员,同事要么毕业于各种名牌大学要么就是各个领域的技术专家。一家百人不到的公司,可以做到年盈利 3 亿。

但是我很快从这家公司离职了,离职的原因是我和我的 leader 总是吵架,leader 也是一个性情中人,总是不分场合的骂人,导致项目组同事陆续离职,最后项目被合并。离职还有另外一个原因,就是我认为我理解了 C++,我想去把 Java 好好学一下。于是这次,我要找 Java 方面的职位,哪怕降薪也可以,于是我后来去了很多公司,把大大小小的互联网公司都撸了一遍。其中月薪最高的是一家 37 k 的创业公司技术主管,但是这不符合我的职业规划,我要学 Java,我要去大厂镀金。我没有去这家公司,但是我推荐给另外一位朋友去了这家公司。我之所以没去是当时想:如果我去了,是能在几年内赚点快钱,小公司的业务量和技术难度能让我在技术上提高多少?若干年后,我又该何去何从?而推荐给这个朋友去的原因是他的年龄比我大不少,他当时已经不想去什么大公司了,赚钱对他来说是第一要务。

最终,我以 C++ 技术专家的身份去了某大型互联网基础框架部,主要工作任务是维护一套 C 系统,同时参与各种新项目开发(以 Java 语言为主),既能立足于我从前的基础,也满足了我深入实践下 Java 的愿望。薪水是 33 k * 15 = 49.5,算上股票,年薪 50 W +。此时,我工作了四年。当然,由于我的技术比较好,面试官很满意,我也提了两点入职要求:1. 我要能看到我负责项目的全部源码;2. 所在的项目一定至少是有百万级业务量的,我需要挑战更高的技术难度。这家公司的体量和规模加上面试官的 level 都能满足我。

二、一些总结

现在的生活,平静如水,我也继续积累和沉淀着。现在对自己的期许是做好当下事,莫问前程。

今年是 2021 年,目前跳槽到某大型互联网独角兽公司,算起来一共工作 7 年了,总结一下我的一些经验和感悟:

要喜爱技术,兴趣在任何时候都是最好的动力,作为一名开发人员,一定要把技术学好,它是你吃饭的家伙,提高你的技能,能让你在职场上和收入上有立竿见影的效果;提高自己实质性的东西,在职场中成为某些职位无可替代者;踏踏实实做技术,不要附庸风雅地整各种技术名词,弄懂技术背后的原理;精益求精反复总结,你需要定期总结和提炼你的技术知识。

职业规划要趁早,明确自己想要什么,成为什么样的人;有脱离自己舒适区的毅力,不要为了一点蝇头小利去一个地方选择一份工作,为自己的技能提高做投资。职业生涯的早些年,决定你去选择一份工作一定是因为有利于你成长,而不是工资高。我的几份工作都是为了习得某一种技术栈而做的选择,当然这种选择会有痛苦,但是只要你最终能达到目标,所有的痛苦都会成为你宝贵的人生经历。因此,悠闲舒适的地方我不去,看不到大多数源码让我觉得无法提高的地方我不去。经常玩知乎的人应该知道,知乎上各种”技术大神“动辄月薪三五万,还有学生群体讨论某某同学、师兄拿到 sp,年薪四五十万,这是典型的臆断妄想症,当然不排除少数天才和各种研究性人才。试想,年薪四五十万平均到每个月是多少钱?换位思考一下,在 IT 行业从原来的高级脑力活动变成工厂式的制作流程,干同样的活,一个几千或稍高工资就能招来的人干的活,如果你是老板,你会花高价招干同样活的人吗?人人都渴望高薪,但多数人都停留在嘴上或者想法中,凤毛麟角的人付诸于行动。

不要停止学习基础知识,不要盲目去跟风时下流行的技术,注重内功培养,肯为自己的提高投入时间和金钱;在学习上对自己抠门的人,时间久了,必将泯然众人矣。正因为很多职场新人分不清楚哪是内功,哪是流行技术,我不建议一开始工作就去从事像 python、go 这样的语种的开发。

做技术要有产品思维,技术本身不会给你带来财富,相应的业务可以,一般某一行技术好的人很多,但是既熟悉业务又懂技术的人就难能可贵了。

以上是自己真实的经历,希望对想转做程序员的同学有一点启发和帮助。用冰心的话和大家一起共勉:成功的花儿,人们只惊羡她现时的明艳,然而当初她的芽儿,浸透了奋斗的泪泉,洒遍了牺牲的血雨。祝所有可爱的程序员同行们都能成功。

三、推荐一份转行书单

我把我这些年看的一些不错的图书整理成书单分享给大家:

书单获取方式:

计算机必看经典书籍(含下载方式)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

非科班出身,如何成为程序员? 的相关文章

随机推荐

  • 基于SpringBoot和Vue 的超市进销存系统

    收藏关注不迷路 源码文章末 文章目录 一 项目介绍 二 开发环境 三 功能介绍 四 核心代码 五 效果图 六 文章目录 一 项目介绍 本基于SpringBoot和Vue 的超市进销存系统是根据当前我国中小型超市环境相关的内容实际情况开发的
  • java医药信息管理系统springboot+jsp

    设计本系统的主要目的是为了改善了传统的医药信息管理模式 使得其再受到时间和地区的限制 极大地方便了相关的管理人员管理医药信息 本系统可以很好的实现了医药信息管理的基本功能 设计的界面友好 性能良好 操作简单 使用方便 用户体验效果较好 系统
  • 有哪些不错的 Golang 开源项目?

    目前人在字节做 Go 开发 寻找 Golang 开源项目学习目的可能是 想学习或者提高自己对 Go 项目的组织和编排能力 想学习 Go 项目的框架设计 想在一些 Go 语法上细节的优化和进阶 我推荐两个项目 一 tinode 这是一个开源的
  • ssm基于Java的客户关系订单管理系统springboot+jsp

    一 拟研究的主要内容 提纲 和预期目标 一 主要研究内容 本系统主要使用B S开发模式 在Idea集成开发环境下 采用Java语言编码设计系统功能 MySQL数据库管理相关的系统数据信息 JSP技术设计和开发系统功能架构 最后再通过使用To
  • nodejs+vue+微信小程序+python+PHP贵州旅游系统的设计与实现-毕业设计推荐MySQL

    本次设计面对两种用户 一是普通用户 二是管理人员 普通用户可访问饮食健康管理平台的内容 记录自己的数据 管理员可以在后台管理系统内的展示数据进行各种操作 一 普通用户 1 饮食建议与管理模块 用户成功登录后 可录入自己的身体数据 并可查看饮
  • uniapp+vue+nodejs微信小程序的班级学生作业管理系统712h0

    本基于微信小程序的班级作业管理助手是根据当前作业管理的实际情况开发的 在系统语言选择上我们使用的Java语言 数据库是小巧灵活的MySQL数据库 框架方便使用的是当前最主流的Spring boot框架 本系统的开发可以极大的满足了班级作业的
  • Windows C/C++ 开发入门与进阶书籍

    如果你对 Windows C C 编程感兴趣 我推荐两本书 这两本书是互补的 1 Windows 程序设计 第五版 这本书讲述了 Windows UI 相关原理的方方面面 且语言朴实 娓娓道来 犹如一位良师益友 我当初也是看这本书进入 Wi
  • 毕业设计推荐springboot基于vue的企业客户关系CRM统计系统

    本系统共包含19个表 分别是策略分析表 产品报价表 产品信息表 配置文件表 公告信息表 获利分析表 客户拜访表 客户订单表 客户流失表 客户信息表 商机表 市场分析表 售后服务表 收款表 token表表 用户表表 线索表 行销活动表 用户表
  • springboot基于vue的网络硬盘网盘文件管理系统

    网盘管理系统以Java开发语言开发 MySQL为后台数据库 采用springboot框架开发 springboot框架集由Spring SpringMVC MyBatis三个开源框架整合而成 常作为数据源较简单的web项目的框架 其中spr
  • 《古墓丽影》初代劳拉,“真人”原来长这样

    克雷西 萧箫 发自 凹非寺 量子位 公众号 QbitAI 用AI把经典老游戏 重画一遍 这个愿望如今可能真的要实现了 PS 1 古墓丽影 中的像素风劳拉 让AI上手改画一下 竟然就成了高清美女 这个效果一出 当即在社交媒体上爆火 不到半天转
  • 基于vue+nodejs高校大学生奖学金评定系统72961

    本基于vue框架的奖学金评定系统管理是根据当前我国教学的大环境相关的内容实际情况开发的 在系统语言选择上我们使用的nodejs语言 数据库是小巧灵活的MySQL数据库 本系统的开发可以极大的提高奖学金评定方面的管理 主要包括 1 辅导员在全
  • 计算机毕业设计选题推荐-SpringBoot 高校学科竞赛平台

    作者主页 疯狂行者 java领域优质创作者 专注于Java技术领域技术交流 文末获取源码 精彩专栏推荐订阅 在 下方专栏 Java精彩实战项目案例 Java精彩新手项目案例 Python精彩新手项目案例 文章目录 Java精彩实战项目案例
  • python+django多商家美食商城网站系统39949

    采用B S结构 使得系统更加容易维护 系统的设计与实现主要实现角色有管理员和用户 管理员在后台管理用户模块 用户表模块 收藏表模块 美食资讯模块 留言板模块 美食信息模块 美食类型模块 卖家模块 购买订单模块 美食信息评论表模块 配置文件模
  • python+django开药处方药品进销存管理系统0m3u8

    系统的基本要求 1 功能要求 管理人员可以管理自己的个人中心 对公告信息 医生 患者 药品信息 开药记录 入库记录 出药记录和药品盘点等进行管理 3 2 性能 可以准确无误的在不同的操作系统中登录到用户或者管理员的相应界面进行轻松的操作 4
  • java公司仓库物资销售库存管理系统设计springboot+vue

    本毕业设计主要拟开发一个基于Web的敏捷工贸公司销售管理系统设计 系统的功能主要有入库管理 出库管理 数据报表管理 物资管理 系统设置管理 库存管理 单据填开管理 其重点功能是入库管理 出库管理 物资管理及库存管理 入库管理 入库管理是仓库
  • 有一定基础的 C++ 学习者该如何学习 Windows 编程?

    这篇文章是回答一位知友的提问 有一定基础是指对大学教材级别的C 知识有了解 然而只停留在黑框程序的编写和阅读上 手头有一个使用VS2010开发的windows工程想要读懂 这是契机 不是原因 长久以来的困惑使得我希望找到一本适合初学者的书
  • java企业员工出差旅团建服务信息管理系统springboot+vue

    差旅服务信息管理系统根据实际情况分为前后台两部分 前台部分主要是让用户使用的 包括用户的注册登录 首页 交通工具 景点信息 餐饮信息 酒店信息 公告信息 后台管等功能 后台部分主要给管理员使用的 主要功能包括系统首页 个人中心 用户管理 工
  • java智能社区小区管理系统的设计与实现springboot+vue

    一 设计目的及意义 随着经济的发展 人们生活水平的提高 工作和日常事务繁忙 人们对服务就有了更深入 更精细的要求 而计算机技术的迅猛发展 使得这种需求变为可能 传统的社区服务业也与互联网技术结合更加密切 这是社会发展的必然趋势 为解决社区中
  • 初学C语言,有什么好书推荐?

    时至今日 很多大学的编程语言入门课已经不再教授 C 语言了 但是作为一位过来人的老学长 我想对后来的学弟学妹们说 无论你是科班还是非科班 建议你一定要学好 C 语言 它应该作为你必须掌握好的语言 你要熟悉 C 语言的基本语法 包括 顺序 条
  • 非科班出身,如何成为程序员?

    我姓方 89 年出生 程序员一枚 坐标上海 14 年毕业 大学学的是地理 典型的非科班转行成程序员 并完全靠的是自己的努力转行成功 一 我的故事 我的第一家公司做 Windows C C 开发 第二家公司做 Linux C 开发 第三家公司