博主是一名高中毕业生,2013年18岁高中毕业就出来工作了,先来讲一下我为什么会进入软件开发这个行业。我读书时期,并不是一个特别聪明的人,最高的时候在班级里面排名第5,全校排名前60。比我聪明的人有不少,但是后面我发现,我是同学们中混得比较好的,因为那些比我聪明的人,没有选择计算机行业。
我16岁读高一的时候,就开始琢磨怎么赚钱,因为家里并不富裕。我平时上学的时候经常思考周边的小商小贩,各个门店,是怎么赚钱的。最吸引我的就是那些手机维修点,跟电脑维修店。周六周日放假的时候,我就到处逛,找各种手机店跟电脑店。在这个过程中,我发现了县城的手机店,电脑店的供应链在哪里,有一家手机店是总代,其他店没有的配件他都有。手机店之间经常会调货。还有一家电脑店就是技术高超,别的店修不好的就交给他,这家店会修主板。
除此之外,我还喜欢到本地论坛搜索信息,在论坛里我找到了两份兼职,一份是婚礼跟拍摄影师学徒,一份是电脑维修学徒。
这两份工作都不是骗人的,不需要交钱。婚礼跟拍摄影师学徒 前3次是跟着师傅出门拍摄,没有工资的,3次后如果你能搞懂摄像机基本使用,能独立出去跟拍,每次能拿200~400报酬,这个收入在2011年是比较高的了。所以那是我接了这份兼职,跟着公司摄影团队到处跑,那时候我16岁,摄影师傅当时比较用心教我,
虽然做学徒没有工资,但是婚礼是一个比较喜庆的节日,新郎新娘会给你红包,而且可以好吃好喝,有一次一个老板结婚,直接每个工作人员发了100元红包。
而且婚礼有一些隐形的收入,记得我第一次跟师傅去拍摄婚礼录像,最后吃饭的时候,一个大叔可能看我年纪小就出来社会不容易,把一盒华子递给了我,每桌都有两盒华子给客人抽的。我说我不抽烟,但是师傅示意我收下,那时候我确实不懂,也不抽烟,所以吃完饭把华子放在一个角落里了。其实未开封的华子可以拿给便利店回收的。
但是婚礼不是每天都有,所以节日淡季,我就去找了另一份兼职,就是电脑维修学徒,我在那家店干了一个寒假,没有工资,但是老板会教怎么组装电脑,怎么检测各个组件,内存,硬盘坏没坏。后来出师了,暑假的时候有工资了,一天40块,同时参与了一个网吧的工程,就是组装机器,接线。
我真正了解到编程,同时也来自我高中老师的启蒙,那时候学校每周是有一节电脑课,老师主要教电脑基本使用跟 PS。因为那时候我是个学生,没有什么钱买书,我经常跑到商城的书店看书,那里有一整排计算机系列的书籍,那里的服务员非常好,不会赶你走。那时候我捧着一本《HTML从入门到精通》看,周六日去电脑店兼职有空就敲代码。
但是书店里面计算机书籍是比较落后的,我看了几个月隐约感觉到了这个问题,所以我网上不断地搜索资料,最后我找到了一个培训机构的资料,那是2012年,他们的光盘只买10块钱,而且包邮,涵盖了 PHP+Thinkphp,mysql,linux 等知识。这里我有必要说一下这个培训机构的名字,兄弟连,因为正是这 10 块钱的光盘带我进入了编程的世界。
拿到这个光盘之后,我就一有时间就看视频学习,我一个高中生,为什么会有时间?因为我不做作业,上课我也是偷偷看编程书,有时候会翘课请假。
高考之后,我在家里自学了5个月,把 php
,thinkphp
,jquery
,mysql
,linux
都学了一遍,自己写了个商城系统,那时候我甚至学了 sphinx的用法跟 lvs,我用 vmware 模拟集群 测试 lvs。
5个月后,我问父母要了2千块钱,来到深圳谋生。2013年那时候市场还是挺火热的,那时候我投简历,有5家软件公司邀请我面试,我一个18岁的高中毕业生,居然能收到面试通知,真是太幸运了。有4家没有过,不过后来有一家公司老板愿意要我,那时候我月薪3k,足够我在深圳活下去了。
自此,我就进入了软件开发这个行业,我是一个野生程序员,实战派,开始的时候,我并没有像大学一样,学过计算机组成原理,编译原理,操作系统等等系统课程。我一开始是学高级语言PHP,JavaScript,学jquery框架,学linux运维, shell编程,mysql 语法之类的比较上层的东西,但是那时候我并不知道什么是B树。
我在那家公司干了2年多,薪酬从3k涨到了10k,那时候我20岁,已经逐渐成为核心,领导也把服务器交给我去管理运维。到我21岁跳槽到南山的一家公司,薪水已经涨到了15k。
在18~22岁这个时间,没有人给我讲一个计算机学习的正统路线,这个正统路线是我自己后面摸索出来了,这是坏事也是好事。如果有人给我讲了,会少走一些弯路,可以节省一些时间,但是计算机领域也是有很多方向分支的,不可能每时每刻都有名师指导你往哪个方向走。所有的弯路都是必经之路吧。
在18~22岁这个时间,主要学的是各种工具,框架的使用,例如 memcache,mycat,squid反向代理,cacti,keepalive,zabbix监控,yaf框架,java jsp ,angular,ionic ,less,sass 等等,我并没有去了解 memcache 的内部实现跟原理,只是用这个东西,因为我不会 C/C++ 。在几年折腾各种工具使用的过程中,我学到了两个比较重要的技能。
1,我有时候见到一些人 编译一个软件,报错,半天找不到方法就放弃了。那时候我解决一个编译安装问题,我有时候会花2~3天网上搜索答案,大多数开源软件的 编译,安装,使用,都有文档,90%都能解决。还有10%我解决不了的,我就知道是我自己的某些基础知识不牢固,需要慢慢补一些基础知识。
2,不断地折腾软件工具跟编程框架,让我的学习能力有了很大地改进,例如我能在一周内学会一个PHP编程框架的用法,一个月学会 postgresql
用法,各种查询优化策略,跟数据库集群。
我从来不会把自己局限在某一个技术领域,例如PHP或者linux,虽然这两个领域在工作中用的最多,但是我也会去学习C/C++,go, java jsp,angular等框架。
我的计算机基础知识,是我折腾了3年左右的软件工程,工具框架使用,再陆陆续续回头看的。后来我23岁的时候,开始补计算机基础的知识,那时候我把《TCP/IP》3册书都看了,《unix环境高级编程》,《wireshark实战》也看了。看完这些书之后,我才知道了网络协议原理,才知道我18岁用的 lvs负载均衡 是怎么实现的,wireshark也用得很熟悉,可以快速解决问题。
所以,我是一开始就做工程实战,5年之后才开始补基础知识。
到我24岁的时候,跳槽到了一家比之前大不少的公司,工作环境也不错,那时候我的薪资是25k,那时候我才能开始设计一些普通的架构,数据库读写分离,PHP应用负载均衡,数据库查询优化。微信逆向,破解反爬策略。
我能搞这些都是因为我之前补了不少的基础知识,知道一些原理性的东西。在我职业生涯,遇见部分程序员,一开始就搞读写分离,mycat,lvs 跟 keepalive,缺乏基础就搞架构,会导致一些问题,例如不知道读写分离,会导致查询不同步,例如从主库写了,程序立马从读库查,查到的是旧数据。查到的数据不是写进去的。不清楚原理,只是用,会导致很多的问题。不知道 mycat 原理,也会导致一些问题无法解决
在网上见过一个笑话,程序员A 说mysql
是垃圾,我们应该换 redis
,你看 redis
多快,然后另一个工程师说,你是不是忘了给 mysql 加索引。
所以我是一个野生程序员,我是做了5年左右的工程实践,再回头看计算机理论基础知识的,不过很幸运,我是18岁出来工作,5年的时间过去还是比较年轻。
到底是先学基础再做工程,还是先做工程再学基础。我个人有一些看法。
1,如果先学基础,会比较枯燥,一开始学 C/C++, 那些黑呼呼的窗口,算法跟数据结构,都不知道这些玩意有什么用,虽然书上说算法数据结构应用广泛,确实是,但是不太容易感受得到。先学基础需要有比较坚定的意志力,能熬过1~3年的基础期,再学框架工具,就会进步飞快。但是有些人坚持不了,在这个过程中会被磨灭掉兴趣,然后转行
2,如果先学工程会比较有趣,我一开始是学PS,做一些前端开发,学几天就能写一个酷炫的小动画,很有成就感。有成就感就可以继续往深了学。
博主目前是自由职业,在学习 音视频流媒体,编译系统,操作系统,创作过多个技术专栏《FFmpeg原理》,《SRS源码分析》,《X86汇编入门》。
由于笔者的水平有限,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1。
似乎比我还年轻几岁,但是经历好丰富。。。
看完文章有些感慨,曾经在合肥蹉跎的那段岁月,所学的技能是我现在赖以生存根本。
我一切的变化都是2年前来到上海,被上海的人流推动着向前走,拿着远超初来上海时预期的薪水,自己的热爱被磨平,一切的目标都变成了钱。
@Tokin 感谢大佬开发的 Adams 主题。
博主的文章写的真棒,学到了不少
一直在跟着博主看 SRS 的源码,学到了很多,非常感谢。BTW,SRS 源码分析挖的坑什么时候填。