• 5000字长文,kurryluo 的自学编程之路


    我是程序员。大众口中非科班的那种,带着高中时期对二进制的恐惧,在大学参加科研比赛后保研,再到和校友一起创业,现在在某大型互联网公司做前端开发,一路走来都是靠自己学习。

    前端框架 VUE 的作者尤大说过一句话:以前所学的东西并不影响以后要学的东西。这句话也是,我对前二十多年从义务教育,到自学编程的深刻体悟。

    下面,我跟大家分享一下,我是如何踏上编程这条路的。这篇文章断断续续写了一个星期,文字很普通,希望大家有所收获。

    计算机初印象

    我最早接触计算机是 2008 年,那时候我在浙江读初中。不得不说,沿海地区的教育确实比内陆地区的教育要快半拍。(我小学在四川念的)

    学校里已经有了微机室,课上微机课老师教我们打字,练习结束的同学,有网就上 4399 玩狂扁小朋友,没有网就玩本地单机游戏纸牌,扫雷。

    电脑在当时的我看来,都是玩票性质的,比如下载音乐,打游戏。从来没有想过它的原理是什么,系统是什么,软件是什么,统统不知道。对我来说,电脑就是一个黑盒。

    到了高中,呆了两年都不知道微机室在哪里,封闭式管理的教育环境,网吧是不可能接触到的。所以,说出来大家可能都不信,高中两年都没有接触过计算机。

    高三了,我们那时候高中有个通识性考试,叫会考。其中一个科目就是计算机原理。在考试前几周,一个自称是计算机老师的来给我们上了课,

    计算机课总共就上了两节。却给我留下了非常严重的阴影:我不是学计算机的料。

    在课上,那个老师引入了二进制的概念,采用速问速答的形式,让我们计算二进制的结果。结果别的同学都答出来了,就我还在想为啥:1+1,怎么就变成 10 了?

    不科学,不合理呀,九年义务教育加这两年的高中教育,都不是这么教的啊。

    当时一直纠结这个点,导致后半节课全程懵。二进制转十六进制,什么鬼?反码,补码,什么码?内存外存,什么存?

    曾经有个男生上数学课,弯腰捡了一块橡皮,从此再也没有听懂过数学课。就是这种感觉!总之,一堂课下来,我突然觉得计算机不好玩了。

    本以为还可以多上两节课,把问题搞清楚。没想到刚上完课的计算机老师就 “生病” 了,由数学、英语、语文几位重要学科的老师补位。

    虽然会考还是凭借我的 “努力”—— 背题,通过了会考,还是全优,但这个阴影对我的影响非常大,导致我高中毕业都没有考虑过跟计算机相关的专业。

    直到我上了大学,情况发生了变化。

    编程萌芽

    高中生涯留下了很多美好的东西,也有很多不堪回首的往事。高考考了三年以来最差的成绩,带着遗憾和不甘,我选择硬着头皮选一所 211 大学读书。

    巧的是,当年母校的录取分数线和当年四川的一本分数线一样,而我的分数线也和一本分数线一样。对,哥就是那么幸运,我的分数 === 一本分数线 === 母校调档线 === 518 分(2012 年四川重点分数线),我不用复读了!

    母校现在肯定是比一本分数线高了不少。说起来,我是幸运的。应了那句话:上帝给你关上一道门的同时,也会给你开一扇窗。别放弃,朋友。

    大学的第一年,家里经济条件还是一如既往地困难,全寝室就我一人没有买电脑。不过学校有专门的微机室了,还给我们发了上机卡,足够一个学期的学习。

    当时参加军训的教官很有趣,经常跟我们说一些冷笑话,同学们之间也会讲一些有趣的段子。我就把他们说的简单记录在手机上,等休息的时候,我就跑到微机室,花上一两个小时,整理成文档保存下来,顺便练习一下打字。

    到了军训结束的那天,我把文档打印下来,分给教官和同学们,都是满满的回忆,凭借这点,我被推选为班长。

    刚开始,我大学的目标和很多同学一样:玩得开心。所以参加了很多社团,用微机室的电脑做策划,写一些剧本拍微电影之类的。还是和初中一样,玩票性质的。

    事情到了大一下学期发生了一些变化,专业课增加了一门 VB,全称是 Visual Basic。我还记得,是一位非常漂亮的女老师教的,我听得挺认真,最后拿了笔试 92 分,机试满分,算是比较高的分数了。

    VB 算是我第一次接触的编程语言,学会了 Function,条件判断,循环处理,输入输出等比较基础的操作。但除了应付考试,我还是不会干别的。一个非计算机专业还要啥自行车,我对计算机还是没兴趣。

    这中间发生了一件比较比较尴尬的事情,我会写程序,但不太会做 PPT,第一份 PPT 是在英语课上介绍自己的 Hometown,最后我上铺的兄弟帮忙做了。

    大一上学期因为贪玩,学习成绩在年级中等吧,不过通过大一下学期的努力,逆袭到了年级前五。还拿了一个奖学金,于是给自己买一台戴尔电脑,在这台电脑上,我装了好多软件,按照教程重装过系统,对操作系统熟悉了不少。

    到了大二学期,我想读研了,而且了解到学院有保研的名额,但只有一个外推机会。仔细了解了一下保研的细则,做科研打比赛能加很多分,于是我和系里的老师都沟通了一遍,最后确定了一个计算机背景的老师作为我的科研竞赛导师。

    这位老师当时说是毕业了以后就担任了系里的讲师,一边工作还一边读哈工大的博士,方向是数据可视化。在他的影响下,我接触了 Flex 虚拟仿真软件,Matlab 等做仿真的工具,同时也发现了 R 语言这类脚本语言的美。

    慢慢地,我会用 R 语言统计分析数据,用 Matlab 做仿真模拟,还用 Flex 做了一套物流分拣系统。参加了大大小小的比赛,比如数学建模比赛,挑战杯之类的,都拿到不错的成绩。

    看起来对于一个非计算机专业的同学来说,做到这种程度已经比较不错了。但我还是不满足门外汉的现状,只是会使用而已,不知所以然,比较痛苦,尤其是当时用 Dreamweaver 做了一个网站,不知道怎么部署上线。

    直到毕业,参加创业。

    创业磨练

    大学毕业那年,我已经拿到中山大学的保研 Offer,没有毕业就失业,而且把注意力投入到创业去了。

    回顾了一下大学生活,社团,校内机构,志愿活动,科研,比赛,都玩了一遍,还剩一个创业没有玩。

    凭借一腔热血,和几个校友同学,一个猛子扎进了 “万众创新,大众创业” 的浪潮中。

    投入创业以后,才猛然发现。我们得有分工,你做运营,我做研发,商量着来。

    一直以来对计算机爱舍难分的我,选择了开发这个硬骨头。从最基础的 CSS,HTML,Javascript,开始学起来。

    认真学了一个多月,粮食吃了不少,但网站的踪影没见着。运营的同学已经把粉丝积累到 20 多万了,我们却连个官网都没码出来。

    于是,我们找到一个做网站的公司。对方报价 12 万,不讲价,不给代码。奶奶的,我们启动资金也才 20 多万,还是 11 个同学凑的,最少的拿了 5000。

    回来以后,我们痛定思痛,还是自行研发。这不过这次,我们找了一个老师 —— 涛哥。

    涛哥是西安一家军工背景的 IT 工程师,在网上录制了一些课程,偶尔接一些外包的工作。我们找到他,希望他帮忙带带我们,作为技术顾问的身份参与我们的创业。

    在涛哥的带领下,我们的技术得到了很大的提升。并且采用了前后端分离的方案,一部分同学学前端 React 框架,一部分同学学后端 Java Springboot。

    框架确实很好,理解了基本的思想以后,我们就能上手开发了,再也不用学那些枯燥无味的基本原理,比如继承,闭包什么的。所以,对于大部分人来说,学编程最好的方式是学以致用,而不是像大学那样上来就啃基本原理,大学的学习方式有它的好处,能把基础打得比较牢固,但与此同时学习的激情会很快就会丧失。

    回到我们的创业进程上来。经历了涛哥三个月的魔鬼训练,我们已经能开发出基本的中后台页面的。前端使用的框架是:Dva 脚手架 + React 全家桶 + Ant Design 组件库 + Restful Api。后端我没有太多关注,使用的框架是 Nginx + Mysql + Springboot。

    你看,我们其实并不是特别高级的工程师,只能说会使用 Api 的框架师。但这并不影响我们创业,学东西,搞事情,赚钱钱。创业也就那么回事。把一些工具和人聚合在一起,做出功能,服务用户,然后收钱。

    17 面 2 月份,刚上了研究生半年,我决定效仿一下乔布斯,休学搞创业。当时也没有想太多,国家比较鼓励休学创业,万众创业,大众创新。

    在和我导师商(Chao)量(Le)以(Yi)后(加 Jia),我踏上了北上之路。关于创业的故事可以看这个系列的文章:我的创业故事

    在这次创业过程中,我一边学 React,一遍研究一些更有趣的框架比如 Css 的预编译框架 Less,空闲的时候还在知乎和博客上写一些心得,进步还算比较快。我觉得输出是非常重要的,高中的时候,我就喜欢给别人讲数学题。只有自己真正懂了,才能把别人给讲懂。所以,对于输出我乐此不疲。学习编程也是一样的。

    除此之外,为了解决团队代码管理混乱的问题,自学了 Git 代码管理系统的基本操作。其实基本的命令就够用了,不需要学得特别深,特别复杂。因为复杂的操作平常工作中也用不到,想要用了,去手册查一下就可以了,没有必要把命令都背下来。

    后来为了给产品增加批改作业的能力,还学了 Canvas 和 Svg。就这样前端的基本工作,我都能应付了,已经成为一个初级开发工程师了。让我知道离高级开发工程师还远得很的,还是秋招。

    创业暂停,重启学业。

    回炉深造

    创业很有趣,一路走来,我收获的不仅仅是出售股权赚的几十万,还有对人性的深刻解读。

    18 年 2 月,我回到学校继续读书。对于我来说,创业暂时离我而去,学位拿到手是比较重要的,未来有机会再来便是。这也是我去创业之前,做的最坏的打算:哪怕啥都捞不到,最后也学了一身技术。

    我在中山大学的研究方向是面向交通场景的数据可视化。数据可视化的前提就是得有数据,交通场景的数据丰富,可视化目前都在 Web 上展示,能和前端开发结合,所以我正好可以继续学习前端开发。

    说实话,在学校的时间,学习效率反而没有创业的时候高。因为在学校要看论文,学一些算法,没有太多应用场景,顶多是针对研究成果做可视化展示。

    硕士三年,加上休学的一年,四年时间很快就过去了。我当时面临继续创业,还是找工作,我选择了后者。创业还是要创业的,我秉承一种观念:无论在哪里都要给自己打工,所以在公司干活,还是自己开公司独立创业,对我来说差不多,等哪天不想打卡上班了,再独立也可以。

    所以 2020 年 3 月份,我开始准备春招,想着先去一个公司实习,看看行情。我当时投递了网易,腾讯,阿里,三个大厂。刚开始我比较没有底,也不知道看网上的面经,连牛客网也很少上。

    结果可想而知,一面都没能通过。经此一役,我总算知道自己的水平在哪里了,依然是一个框架师,对于很多基础性的东西一问就倒。于是,我一边准备毕业指标(我们毕业需要一篇 SCI),一边恶补前端基础知识,俗称背八股文,方便面试的时候造飞机。

    6-7 月,我才正式看红宝书。越看越觉得自己看晚了,里面很多基础的知识点,我看完有种恍然大悟的感觉,原来之前有些框架用 A 方案而不用 B 方案,是因为 A 方案的特性更合适框架要解决的业务场景。面经上的很多问题,在书里也找到了答案。

    这两个月除了前端的 JS,CSS,HTML,我还准备了前端工程化,前端安全,网络协议,算法和数据结构,几大方向的内容。这些我都总结了,放在 Github 上,有需要的自取,我在完善中,欢迎 Star。

    8-9 月,秋招开始了。真正的面试开始了,我发现自己还是很菜。刚开始笔试过不了,后来刷 Leetcode,掌握了一些技巧,能过一些公司的笔试了。

    紧接着的面试也不是很顺利,为此我还在牛客网上写了一个记录贴,别人在 8 月份开始比较 Offer 了(提前批的同学),我面试还老碰壁,可见当时我有多惨。

    不过面试期间,我发现了很多自己的不足,每一次面试结束,我都把知识点记下来,去查去总结,用 A4 纸手写下来,手上的资料厚厚的一叠。

    最后 9 月(具体时间),终于来了第一个 Offer,深圳一加手机的前端开发工程师,一加当时还给了我 Sp,我很感激它。这家公司也是比较有调性的公司,比较注重仪式感,发 Offer 的时候,还给我们开香槟庆祝,我很喜欢那个调调。现在的手机也换成了一加。

    不过,我女朋友小梁当时准备去北京读研,所以我依然在争取北京的 Offer,结果都还不错,拿到了美团和小米的 Offer。

    确定好 Offer 以后,我觉得自己的技术应该能胜任公司的工作,所以没有去实习。而是转头参加了腾讯组织的小程序比赛,对小程序的那一套写法有了进一步的了解。

    对前端的学习,在拿到 Offer 以后我搁置了一段时间。兴趣转移到了理财上,研究了一些套利和低风险理财,自学了很多关于理财的知识,用 Python 写了一些小工具,收获也还不错,年化收益在 15% 左右。在我看来,理财和编程一样,都是需要长期投入,并且以实践为主。

    得益于之前的创业经历,加上不错的自学能力,我工作起来还算游刃有余,得到了同事们的肯定。未来希望在前端领域有所突破,尤其是用前端可视化技术提升团队效能方向。

    写在最后

    对于编程,我觉得自学是完全 Ok 的。关键是得学以致用,光看书不练习,永远都学不会。所以我总结了学习编程最有效的三招:

    • 一看。看三本权威书籍,反复看,做笔记。
    • 二做。做一个产品,比如搭建自己的个人博客网站、开发一款个人小程序都可以。
    • 三面。面试过程中知道自己的知识点哪些有缺陷,随时补充。这个无论是在校大学生还是工作了的职场人都适用。

    推荐我自学以来看过的书籍(持续补充~):

    前端:

    《JavaScript 高级程序设计(第 4 版)》

    《JavaScript 设计模式》

    《CSS 权威指南(第四版)》

    算法:
    《图解算法》
    《啊哈!算法》

    入职快一年了,在职场中学习又有了新的体会,等我下一篇:如何在职场中自学编程

  • 相关阅读:
    持续集成环境搭建(一)
    The POSIX API/nss/nscd
    [postfix]转发邮件设置
    [python]python安装包错误
    栈及栈帧讲解
    kernel-init-bash
    nginx no input file specified
    Lumen/Laravel调试API接口利器laravel-debugbar
    homestead实现外部局域网络其他主机的访问
    PHP rabbitmq扩展安装
  • 原文地址:https://www.cnblogs.com/kurryluo/p/14909499.html
Copyright © 2020-2023  润新知