我学编程时最后悔的事!
毕业后我才懂得自救,希望大家引以为戒
大家好,我是鱼皮。
之前给大家分享过我大学四年的编程学习经历:我学计算机的四年,共勉!
很多朋友看完这篇文章后,会感到好奇:我是如何在大学期间做了那么多事情、学了那么多编程知识的?
但其实我要说,只要大家按照路径学习,一定能够比我学的更多更好 !
为什么呢?
因为首先,大学期间,我并没有 “死学习”,除了学习什么都不干,而是花了很多时间在学习无关的事情上。比如我作为班长要管理班级事务、我也玩游戏(手游 + 端游)、我也参加学生会和社团、也爱参加活动等。
其次,就是我对编程本身没有天赋,不是像大家说的一看就会,一下就能写出代码。之前也讲过,我在高考后自学编程读了几十页书就放弃了,大一期间也是各种踩坑,各种看不懂,甚至在 C 语言考试的时候链表题都做不出来。只不过后来凭借着我对编程强大的兴趣和更多地熬夜砸时间,并且持续总结踩过的坑和学习方法,才帮助我学到了这么多编程知识,才能找到一份大厂的工作。
但这些都不是关键原因,最最最最最重要的是,其实我在学编程的时候,有一个 坏习惯 ,直到毕业后才意识到真的因此 白白浪费了太多太多的时间 。
这也是我学编程时 最后悔的事 ,如果我能早点醒悟,应该能学到更多知识,身体和头发也会更好些。
下面把这件事以及我毕业后的 自救方法 分享给大家,希望帮助大家少走弯路,高效学编程。
最后悔的事
我学编程时最后悔的事就是:做事不分主次,花了太多时间在技术无关的纠结上。
举个例子,我在大三学习微服务的时候,独立开发了一个安卓 APP 叫 面试君主
。从产品功能、界面设计再到前后端开发和上线都是我一个人负责,断断续续做了两个多月。
听起来好像还不错对吧。但是如果我说,这个项目其实我写代码的时间大概不到一半,大家会怎么想呢?
当时完全没有计划这个 APP 要做多久,所以直到我做完这个项目,在总结复盘时才发现:我特么的竟然花了 60 - 70% 的时间在产品功能和设计上?!
产品功能倒还可以理解,毕竟你在写代码前要先明确要做什么、为什么做。但我竟然浪费了大量的时间在设计上!
一方面是纠结项目的界面,比如字体大一点还是小一点,框框宽一点还是窄一点。另一方面是到网上找素材,比如图标和背景的选取,一会儿觉得这个好看,一会儿又觉得另外一个好看,犹豫不决。。。老强迫症患者了。
哦,天呐!要知道,我是一个完全没有审美的程序员,本来在变量命名上我就已经很纠结了,为什么还要花了这么多时间在自己不专业的事情上!
大家肯定会问了,你怎么知道浪费了多少时间呢?
其实这只是粗略的估计,我当时每天晚上基本是在固定时间写代码,每天提交 1-2 次。通过分析两次提交代码的差异,我惊讶地发现,经常是间隔 2 个多小时,我就只改了图标或者界面的代码!
本来做这个项目的 主要目的 是为了学习后端微服务,前端是 次要 的,只是为了方便看到效果。但没想到,竟然在上面白白浪费了那么多时间。所以对我来说,做这个项目的过程是极其失败的。
当然,这只是一个例子,我在学编程时,做过的无意义的纠结实在太多了。
而且我不知道大家有没有这种感觉,尤其是在夜深人静的时候,思考会更迟缓,无论是改 Bug 还是调界面都更容易使人陷入纠结,不知不觉时间就溜走了,有的时候我第二天醒来甚至都不知道昨天自己到底在熬夜做什么!
熬夜努力或许没错,但熬夜做无意义的事真的是罪过!
这个坏习惯一直陪伴我读完大学,直到工作后,我才意识到需要自救。
自救方法
上面说的是我自己觉得很后悔的事,不知道大家有没有同感。
接下来我要分享的 自救方法 ,不仅帮助我解决了纠结的毛病,还帮助我告别拖延、提高了做事的效率。
方法概括成一句话:将大的任务(目标)拆分为多个子任务,并且给每个子任务设立一个 deadline
(最后期限),按照计划去完成。
为什么要这样做呢?分别解释一下。
任务拆解
我们总是本能地抗拒有难度的、或者较为庞大的任务。所以如果不对这些任务进行拆分,我们就很容易出现以下 3 种情况:
不想做,不愿做,拖到最后 做的过程中发现问题,中途放弃 直接放弃
而且大部分情况下,相信大家都是 直接放弃 对吧。
将大任务拆分为小任务后,我们就可以逐个击破,通过完成一个个小目标收获成就感,保持热血。
设立 deadline
很多时候,我们做事拖延、磨叽、纠结,就是因为没有事先给自己定下截止时间,所以总是不紧不慢,想些有的没的,忽视了关键目标。
像我上面讲到的,因为没有 deadline,导致自己在开发 APP 时很放松,才过分地纠结设计和界面。如果我当时给自己设立一个 deadline,就必须 1 个月内完成,那我相信自己也是可以做到的,而且可能会更好。
deadline 的作用在我的日常工作中体现的更加明显,以前在学校做项目的时候,除了课堂作业,很少有人给我 deadline,或者说比较宽松。但工作中,老板说这个需求这周上线,那你就必须在这周完成,除非有合理的理由,否则根本没得商量。因此,也是在工作后,我才意识到自己在学校的效率真的是太低了,才变得更加高效。
还有一个有趣的现象:在我自己维护工作室、以及跟其他小伙伴合作开发的时候发现,同一个任务,给他们 3 天的时间能按预期完成,给他们一周的时间反而完不成。
所以不仅要设置 deadline,而且要多设置,给每个子任务都设置 deadline,持续给自己压迫感,更有助于帮助我们完成目标。
推荐好文:为什么你的 deadline 永远只有 dead?
地址:https://zhuanlan.zhihu.com/p/28404083
实际应用
方法介绍完后,结合编程举几个实际应用的例子。
做项目
以前参加比赛做项目时,我一般都是拖到最后才匆匆忙忙提交结果。
但如果现在让我做一个完整的项目,比如编程导航,我先定个目标:1 个月内上线。然后把任务拆解为:先用 3 天时间确定产品功能、再用 1 天时间参考同类产品的设计(花更多时间在开发上),用 1 天设计库表、用 7 天开发前端、3 天开发后端(1 天开发登录、2 天开发基础增删改查),剩余的时间拿来填充网页内容和优化。
这样一来,当我没有按照预期完成小任务时,我会反思原因,并且动态调整剩余工作的时间,以保证整体目标预期达成。
学编程
以前看书、看视频学习某项技术时,我可能就是想学什么、点进视频就开始学了。也没有想过计划用多少时间把它学完,结果就是导致学习节奏慢,每天看个几节课。可能今天的还没看,昨天的就忘了。
但假如现在让我学 Java,我会先扫一遍视频(书籍)的目录,根据视频的时长和章节,定下总的学习目标,比如 1 个月学完 Java 基础。然后将目标拆分成:3 天搭建 Java 环境和跑起项目,5 天学完 Java 基础语法、10 天学完 Java 面向对象、5 天做一个 Java 实战项目、再花 5 天学习高级特性和复习等。
刷算法
很多朋友跟我抱怨说自己会在一道算法题上纠结很久,多达几个小时,结果到最后也没做出来,非常难受。
我大一做 ACM 练习题的时候也是这样,想不通就硬想,生来倔强,就以为自己能做出来。现在想想,太亏了,虽然这道题自己想出来可能会很有意义,但不要忘了,你大学的时间是有限的啊!想出来一道题的时间,说不定别人都学了一个新技术了。
因此,我会给自己定下刷算法的目标:每天 2 - 3 道题,每道题限时 30 分钟,想不出来就直接去看题解,有了思路再去想,再多复习巩固。由此,最后我用了接近一年半的时间刷了 1000 多道算法题。
其他工具
最后也给大家分享一些帮助管理计划、安排时间、高效工作、防止遗漏的实用工具吧~
滴答清单
我自己一直在用的任务管理工具,也是帮助我成为时间管理大师(狗头)的必备神器,支持多端同步。
Forest 专注森林
我从高中就在用的 APP,每成功保持专注一段时间后,都能收获一颗小树,终有一日聚为森林。
番茄 todo
也是一款帮助你管理时间,保持专注的 APP,好评率很高。
Teambition
阿里巴巴旗下的工作学习套件,同时适用于团队和个人,团队协作、项目管理、个人安排、做笔记等功能一应俱全,界面也很精简。
你好,我是公子龙,毕业于中科院,前大型计算机竞赛冠军,现算法工程师,拿过九家大厂的 offer 。
北漂七年,从小白到计算机竞赛冠军,读研时通过实习和比赛收入 50 万,点击蓝字查看我的编程之路。