当前位置: 首页 > 编程日记 > 正文

编程25年后,现实将我打回菜鸟程序员的起点

在从事了 25 年的编程工作后,我却发现自己没有什么具体的东西可以展示给大家。我需要克服完美主义思想和对被批评的恐惧,向大家展示真实的自己。


640?wx_fmt=jpeg

作者 | DeChamp

译者 | 苏本如

责编 | 仲培艺

出品 | CSDN(ID:CSDNNews)

下面和大家分享下我的故事:

2019 年 1 月 13 日这一天,我满了 36 岁,这意味着我正式从事编程工作已有 25 年。

在这 25 年间,我尽心尽力地工作,却发现除了编程技能外,我没有什么可以展示给大家的成果。

这些年我所做的,要么是作为一个雇员为企业开发项目,要么兼职为客户开发一些网站,而这些网站/项目中的大部分都已经下线了。

在无数次的自我反省中,我问自己,为什么我没有什么成果可以展示给大家?根源在哪里?

完美主义怪圈


我的第一次反省源于一个好友要我帮他学习网站编程,某天晚上我接到他的电话,他兴奋地说:“嘿,快看看我的网站!我搞定了!”

他买了一个域名,一个 WordPress 模板和一些便宜的托管主机。他把这些设置好,并把准备好的内容放上去,然后就上线了。

他的网站看起来不错。因为我更喜欢使用 PHP 或 Node 来构建完整的 App,所以我不喜欢用 WordPress。但他不知道怎样编程,所以 WordPress 是他最好的选择。

在我教了他一些基础知识后,他在一个星期内就做出来一个看上去不错的网站,这让我有点嫉妒。

我不是嫉妒他的技能,因为我知道他掌握的是任何人在一两天的时间就能学到的基础知识。

然而,他只用了一周时间就完成了这个项目 90% 的工作。

在这么短的时间内,他做出来了一个看得见的产品!

他是怎么做到的?!他是如何克服在网站还未完善时就发布的恐惧的?他怎么想到为网站创建这些内容的?他是如何做到不过度设计,保持专注,进入编程这个奇异的世界的(对他来说)?

我必须承认这一点,我意识到我生活在自我技能怀疑以及对他人批评的恐惧中。当涉及到我的个人项目时,我会陷入完美主义的怪圈,所以一旦我开始一个项目,就会投入无穷多的时间,穷尽所能来让它成为我能做到的最完美的应用,但结果往往是半途而废。

我唯一一次 100% 完成的个人项目,是因为有一个老板会为我付报酬。其它的个人项目我都只完成了 50%~90%,或者是感到无聊放弃了,或者是干脆忘记继续做下去。

我深知我的本职工作做得很好——每天都在学习,承担并完成了大量的项目。我在这个领域干了 15 年多了,与一些最好的开发人员一起工作,甚至有能力挑战他们。

我开发过的软件和应用能带来数百万美元的收入,拥有数十万用户。我的存在让这些软件和应用变得非常安全可靠。


开始改变


那我为什么要纠结我的个人项目呢?听起来有点像人格分裂。

我意识到我需要回到我刚开始工作的时候。"K.I.S.S", Keep it Simple and Stupid!

我也开始更加关注开发社交圈。我加入了几个小组。其中之一是一个初学者小组,让我能够像一个菜鸟程序员一样重新思考。

我注意到有些菜鸟程序员只有几个月的开发经验,但他们都敢于提供一些建议,甚至一些全日制课程。我更震惊的是很多人不但感兴趣,而且还感谢他们。他们的追随者不断增多。

对我来说,这太令人震惊了。他们是如何做到这一点的?当人们几乎不知道他们过往经历的时候,怎么会重视他们的建议呢?

我猜我可能一直没有意识一点,好多人只是在寻找比他们多了解一点点的人。他们不在乎那个人是否比他们多学了 25 年或 25 分钟,他们只关心是否能从这个人身上学到一点点,并希望与其维系一条沟通渠道。

很快我就发现,我只发布了一些文章就已经有了很多“粉丝”。看来我要克服的阻碍来自我自身。

所以今年我要强迫自己做出改变,我决定采取下面的一些小步骤:

首先,我考虑了一下我的现状,由于我在外面接了一些私人项目,如果再去完成所有的个人项目,那会让我压力太大。(这些年我一直都有一份全职工作,但在大部分时间里,我会接一些私人项目来做。)

我作了个决定,如果我在一件事上赚的钱不足以让我的生活方式有大的提升,那就不值得我花时间。

我一直在想这个问题。如果我接的私人项目挣不到我全职工作收入的 50%,那我就不应该这样接私人项目。

所以我放弃了这些私人项目,由此而来的压力释放是惊人的——我不需要为更多的客户负责了。我只需要应付一份普通的工作、我的家庭和我的个人项目!

我做的第二件事,是强迫自己构建一个快速的个人项目,无论我对它感觉有多糟糕,都要马上发布它。

我也这么做了!你可以在 https://gidgitz.com 上查看。

我的下一个目标是继续向该站点添加功能。学习一些新的框架、包和设置,我会很快掌握,并在将来的项目中使用。

一开始很顺利,但是后来我在重构上被堵了 3 个月。3 个月过去后,每天我都兴奋地为新的 API 后端编程。


故态复萌


三个月前,我又重蹈覆辙,再次把每件事过度复杂化,且力求尽善尽美,做好的功能我又不想发布了,因为我的完美主义的强迫症又犯了。

当我意识到我又一次让自己陷入同样的困境时,我强迫自己改变,拿掉没有完成的功能,将已完成的部分发布出去。

我做到了!感觉很棒。虽然新功能不多,但都已经上线运行。这可能不是我最终想要的,今后还需要添加无数的改进。但至少这一次我做到了,毋庸置疑,上线这些新功能肯定比让它们静静躺在我的笔记本电脑里无人关注要好。

我必须努力克服我的旧习惯,直面对别人批评的恐惧,要认识到即使没有人喜欢它,至少它可以被人看到。我一开始要做的不是使它完美,而是要使其“可见”,然后得到反馈并加以改进。

我的下一步是完成后端 API 设置,每隔几周发布一次小的更新,直到我对这个项目感到满意。 到那时就是开始下一个个人项目的时候了。

除此之外,我还打算向人们展示我的新想法,把旧项目拿出来展示给别人看。

这是一个学习过程,在走过了 25 年的编程旅程后,我感觉现在才刚刚开始。


Ta 说


读完这个故事,不少评论慨叹同感良多,也同时发表了对作者某些观点的看法:

Tyler Smith:

对此我也深有体会。两年前我辞掉了工作,成为了一名网站开发人员,因为我有几个个人项目要构建。事实上,我应该足够胜任开发人员这个工作,因为我可以在成为开发人员后的 10 个月内做出一个可接受的版本,但有两件事总是让我停步不前:

1. 新奇事物综合征:我总是想用最好的平台来完成这个项目,所以我从 Wordpress 转到 Laravel,再转到 Django,然后开始学习 Serverless。这是一次很好的学习历程,但我什么也没做出来。

2. 我想要的功能远远超过我的个人能力。

我被困了一年没有上线任何东西。

拯救我的是一堆关于最小可行产品(也称为 MVP)的文章,同时也是厌倦了什么都做不出。我把我的抱负从 10 个功能降到 1 个功能,并在 14 天内在 WordPress 上建立了一个可运行的网站。这个站点在 WordPress 中并不出众,目前为止还没有人访问过该站点,不过可扩展性倒是也完全没问题了。

在过去的两周里,我一直在尝试推广我认为非常酷的东西,尽管代码库有点乱,但我对它非常满意,而且没有人关心代码。

祝你和你的项目好运!如果你多关注代码的发布,你会做得很好!

Eric Ochoa

我喜欢这部分:“…他们不在乎那个人是否比他们多学了 25 年或 25 分钟,他们只关心是否能从这个人身上学到一点点,并希望与维系一条和他沟通的渠道。”

我常常觉得在我对任何问题发表任何看法时,我必须先成为这个问题的专家。但事实是,通过分享你已经掌握的任何知识,都可以帮助很多人(包括你自己)。

原文:https://dev.to/dechamp/25-years-of-coding-and-im-just-beginning-442n

本文为 CSDN 翻译,如需转载,请注明来源出处。


推荐

640?wx_fmt=png

推荐阅读

  • Python一键转Java?“Google翻译”你别闹

  • 熬夜写代码,不如换女装入GitHub获上千Star?

  • 用Python做一个翻译软件

  • 春节停车难?用Python找空车位

  • 有赞公开强推 996 制,员工:已拨打市长电话

  • 必应搜索引擎怎么了?

  • 嫁人当嫁程序员

  • Spring-Data-JPA尝鲜:快速搭建CRUD+分页后台实例

  • 孟岩:区块链的原则与价值观


640?wx_fmt=png

相关文章:

MOSS 2010:Visual Studio 2010开发体验(14)——列表开发之事件接收器

通过前面几篇,我们已经完成了内容类型,列表定义,列表实例的开发。本篇继续讲解列表中的一个重要环节——事件接收器开发。 我们的场景是:我希望之前做好的订单列表这个内容类型自动地具有某些事件特征,例如当用户在添加…

海思3536:kernel编译和mpp_single编译过程报错及解决方法

### 1、编译kernel 1.1 cd kernel/linux-3.10.y 1.2 cp arch/arm/configs/hi3536_full_defconfig.config 1.3 make ARCHarmCROSS_COMPILEarm-hisiv300-linux- menuconfig 1.4 make ARCHarmCROSS_COMPILEarm-hisiv300-linux- uImage 1.4.1 弹出选择板子型号:39&…

026——VUE中事件修饰符之使用$event与$prevent修饰符操作表单

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>事件修饰符之使用$event与$prevent修饰符操作表单</title><script src"vue.js"></script> </head> <body> &…

Linux shell脚本基础学习

Linux shell脚本基础学习这里我们先来第一讲&#xff0c;介绍shell的语法基础&#xff0c;开头、注释、变量和 环境变量&#xff0c;向大家做一个基础的介绍&#xff0c;虽然不涉及具体东西&#xff0c;但是打好基础是以后学习轻松地前提。1. Linux 脚本编写基础◆1.1 语法基本…

海思3536:PC客户端编译过程报错及解决方法

1、Hi3536V100R001C02SPC040版本编译出错 --------- 错误 4 error LNK2001: 无法解析的外部符号 _IveOpenFile D:\share\Hi3536V100R001C02SPC040\01.software\pc\IVE_CLIB\HiIVE_PC_V2.0.0.7\sample\ive_samples_2.0\Integ\ive_clib_2.0.lib(ive_clib.obj) 错误 5 error LNK20…

百度15篇论文被AAAI 2019收录

1月27日&#xff0c;第33届 AAAI&#xff08;AAAI 2019&#xff09;在美国夏威夷召开&#xff0c;其中百度共有15篇论文被收录。AAAI于1979年成立&#xff0c;是国际人工智能领域的顶级国际会议。这一协会如今在全球已有超过6000名的会员&#xff0c;汇集了全球最顶尖的人工智能…

使用 xcworkspace 管理 iOS 工程

首先创建目标工程 创建工作空间xcworkspace文件&#xff0c;并将创建的*.xcworkspace文件放到刚创建的目标工程同级目录下 关闭刚刚创建的目标工程&#xff0c;打开*.xcworkspace文件&#xff0c;把刚刚创建的目标工程添加到工作空间中来 如果要添加一些框架&#xff0c;则将目…

Windows 2008 部署服务之Windows 7 应答文件创建

——————————————————————————————Windows 2008 部署服务八步走&#xff1a;1、Windows 2008 部署服务之WDS概述 2、Windows 2008 部署服务之WDS安装及配置 3、Windows 2008 部署服务之添加启动映像 4、Windows 2008 部署服务之Windows XP应答文件…

DotNetCore跨平台~System.DrawingCore部署Linux需要注意的

回到目录 你在windows上使用图像组件没有任务问题&#xff0c;但部署到linux之后&#xff0c;将注意以下几点&#xff1a; 安装nuget包ZKWeb.System.Drawing项目里还是引用System.DrawingCore&#xff0c;这点不用改安装gdiplus插件&#xff0c;这个需要根据linux类型不同&…

iPhone曝严重漏洞,用户接听FaceTime前或被“监听”!

作者 | 琥珀 出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09; 近日&#xff0c;据 9to5Mac 等多家外媒报道&#xff0c;苹果手机 FaceTime 一项重大漏洞被曝光&#xff0c;该漏洞可以让用户通过 FaceTime 群聊功能&#xff08;Group FaceTime&#xff09;打电话给任…

海思3536:交叉编译Qt4.8.4

一、交叉编译qt 1、下载Qt源码包qt-everywhere-opensource-src-4.8.4.tar.gz; 2、解压Qt源码包tar -xvfzqt-everywhere-opensource-src-4.8.4.tar.gz 3、创建qmake.conf 3.1在qt-everywhere-opensource-src-4.8.4/mkspecs/qws/下创建linux-hisiv400-g++; 3.2将qt-everyw…

理解LoadRunner中的局部变量和全局变量

以下内容均选自个人作品&#xff1a;《精通软件性能测试与LoadRunner实战》在C语言中&#xff0c;变量有效性的范围称变量的作用域。不仅对于形参变量&#xff0c;&#xff23;语言中所有的量都有自己的作用域&#xff0c;按作用域范围不同&#xff0c;可分为局部变量和全局变量…

TI-DM8127:MCFW、ISS中对sensor的驱动和控制

1、sensor生命周期 mcfw的bios6层调用iss接口Iss_platformDeviceInit()&#xff0c;该接口调用sensor&#xff08;以IMX185为例&#xff09;初始化Iss_Imx185Init()&#xff0c;通过HDVPSS提供的FVID2接口FVID2_registerDriver去注册一个FVID2设备&#xff0c;bios6再创建一个…

小米开源FALSR算法:快速精确轻量级的超分辨率模型

作者 | 周强&#xff08;我爱计算机视觉&#xff09;、刘畅编辑 | Jane出品 | AI科技大本营这是来自小米最新出炉的论文&#xff0c;使用神经架构搜索技术自动确定超分辨率网络模型&#xff0c;取得了又快又好的效果&#xff0c;模型已开源&#xff0c;非常赞&#xff01;摘要深…

Node.js服务器启用Gzip压缩

Gzip是什么 复制大神们的解释吧&#xff1a; GZIP最早由Jean-loup Gailly和Mark Adler创建&#xff0c;用于UNIX系统的文件压缩。我们在Linux中经常会用到后缀为.gz的文件&#xff0c;它们就是GZIP格式的。现今已经成为Internet 上使用非常普遍的一种数据压缩格式&#xff0c;或…

【bzoj1251】序列终结者(伸展树)

【bzoj1251】序列终结者&#xff08;伸展树&#xff09; Description 网上有许多题&#xff0c;就是给定一个序列&#xff0c;要你支持几种操作&#xff1a;A、B、C、D。一看另一道题&#xff0c;又是一个序列 要支持几种操作&#xff1a;D、C、B、A。尤其是我们这里的某人&…

再谈PowerPoint 2010导出幻灯片为图片

前些日子写了篇《利用VBA导出幻灯片为图片》&#xff0c;结果被Jackson告知&#xff0c;PowerPoint 2010已经有此功能了&#xff0c;并且PowerPoint 2007可能就已经有了。并且经最终验证&#xff0c;在PowerPoint 2003中同样有此功能。由于平时用PowerPoint并不多&#xff0c;所…

【网络编程】非阻塞connect详解

一、为什么使用非阻塞connect TCP连接的建立涉及一个在三路握手过程&#xff0c;阻塞的connect一直等到客户收到自己的SYN的ACK才返回&#xff0c;这需要至少一个RTT时间&#xff0c;RTT时间波动很大从几毫秒到几秒。而且在没有响应时&#xff0c;会等待数秒再次发送&#xff0…

AI,被“横扫记录”反噬?

编辑 | Jane 出品 | AI科技大本营 昨天&#xff0c;香侬科技发表论文《Glyce: Glyph-vectors for Chinese Character Representations》&#xff0c;提出基于中文字形的 NLP 模型——Glyce。香侬科技官方公开的论文解读中写道&#xff1a; Glyce提出了基于中文字形的语义表示&…

android 入门之一【开发环境搭建】

这里的开发环境采用Eclipseandroid 开发插件&#xff0c;其它的开发环境不做介绍 一.安装JDK android 开发语言是基于Java的&#xff0c;所以要做android的开发必须要安装JDK&#xff0c;并且对JDK的版本有一定的要求必须是JDK5 以上的版本&#xff0c;JDK5以前的版本android不…

一块GPU就能训练语义分割网络,百度PaddlePaddle是如何优化的?

【引言】显存不足是训练语义分割网络常常遇见的问题&#xff0c;而显存是GPU计算中的稀缺资源。百度深度学习框架PaddlePaddle中的显存优化&#xff0c;不仅可以让研究人员在相同成本的计算设备上训练更大的模型&#xff0c;还可以在消费级别显卡上完成训练。在本篇文章中&…

【音频】Faad源码交叉编译

1、源码下载http://www.audiocoding.com/downloads.html2、解压后&#xff0c;进入目录执行如下命令aclocalautoheaderautomake --add-missingautoconf./configure --hostarm-fsl-linux-gnueabi CCarm-fsl-linux-gnueabi-gcc --prefix/home/faad/installmakemake install

springboot 整合redis 实现KeySpaceNotification 键空间通知

2019独角兽企业重金招聘Python工程师标准>>> 目录结构如下&#xff1a; application.properties配置文件&#xff08;redis的配置&#xff09;&#xff1a; spring.redis.hostlocalhost spring.redis.pool.max-idle300 spring.redis.pool.max-wait3000 spring.redis…

黄聪:穿过主机访问虚拟机中的SQL服务 FOR VMware NAT

一般来说&#xff0c;大家都会在主机或者虚拟机中安装SQLIIS&#xff0c;但假如主机的IIS想利用虚拟机中的SQL服务怎么办呢&#xff1f; 以我的电脑为例子&#xff0c;主机系统&#xff1a;Windows 7 7600 RTM X64&#xff0c;安装IIS 7.5。虚拟机系统&#xff1a;Windows 2003…

【数据库】mysql报错 编码码1130 和错误码1146

1、错误编码1130 问题&#xff1a;1130-Hose‘172.16.12.129’is not allowed to connect to this MySQL server 原因&#xff1a;MySQL服务器没有创建&#xff0c;远程客户的账户信息 解决&#xff1a; 1.1 登录 &#xff1a;mysql -uroot 1.2 切换数据库&#xff1a;mysql>…

一键fxxk,代码修复神器拯救你

作者 | 一一出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;在成为一个合格的开发者之前&#xff0c;大多数人一般都经历过被命令行反复“fuck”蹂躏。当然&#xff0c;改代码改不动了&#xff0c;你的内心也是“无 fuck 可说”&#xff0c;尤其在检查半天之后发现这…

hive2.3.2安装使用

hive的安装简单一些,使用也比较简单,基础hadoop搭建好之后,只要初始化一些目录和数据库就好了 安装需要做几件事: 1.设立一个数据源作为元数据存储的地方,默认是derby内嵌数据库,不过不允许远程连接,所以换成mysql 2.配置java路径和classpath路径 下载地址: http://mirrors.shu…

Google经典面试题解析

作者 | Alex Golec译者 | 弯月责编 | 屠敏出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;在深入问题之前&#xff0c;有一个令人振奋的消息&#xff1a;我离开了Google&#xff01;我激动地宣布&#xff0c;我已经加入了Reddit&#xff0c;并在纽约市担任项目经理…

1分钟构建API网关日志解决方案

访问日志&#xff08;Acccess Log&#xff09;是由web服务生成的日志&#xff0c;每一次api请求都对应一条访问记录&#xff0c;内容包括调用者IP、请求的URL、响应延迟、返回状态码、请求和响应字节数等重要信息。 阿里云API网关提供API托管服务&#xff0c;在微服务聚合、前后…

ISQL*PLUS

1、有以下几种命令&#xff1a;环境&#xff1a;影响会话期间SQL语句的总体行为&#xff1b;格式化&#xff1a;格式化查询结果&#xff1b;文件处理&#xff1a;保存语句到脚本文件中&#xff0c;从脚本文件中运行语句&#xff1b;执行&#xff1a;从浏览器发送SQL语句到oracl…