如何成为一名真正的、合格的、乃至优秀的程序员?

简介: 如何成为一名真正的、合格的、乃至优秀的程序员?

一、实力比学位更重要

如果你不是计算机专业科班出身,也别太担心。下面这段话摘抄自吴军的《硅谷来信》。

“今天很多大学毕业生,读完四年大学,学了很多课,其实并没有掌握任何一项得以安身立命的技能。我在腾讯时看了不少校招学生的档案材料以及他们面试的记录,除了极个别的中国名牌大学,大部分学校的毕业生,都没有掌握最基本的工作技能。

比较聪明一点的学生会在上学的最后一年,花钱跑到外面的培训班去进行技能的培养,他们面试时所体现出来的技能要远比那些仅仅在大学里上过一些课的学生强得多。”

可见,想要成为程序员,还得靠硬实力说话。上个培训班,可能比读个大学都管用……我当时看到这个结论也是很震惊的。

二、要当真程序员,先当假程序员

在英文中叫“learning by doing”,通过实际工作来学习。要成为真正的程序员,先想办法找到一份程序员的工作,成为假的程序员。之后每天上班就是干这个,还得996的干……你说学得能不快吗?没多久就成真正的程序员了。问题是怎么找到程序员的工作呢?

如果你已经在相关职位了,例如:产品经理,网页或用户界面设计、数据分析师,运维,测试。那么你只需要去准备好简历和面试就行了。

现在的程序员面试,基本属于标准化考试,网上有无数资料帮你准备,其中最重要的就是上LeetCode刷题。准备到位了,是一定可以通过的。有钱的话,买买网课。

三、没有相关背景就分两步走

如果你的个人经历和程序员这个职业完全不搭边,那么你可能无法直接拿到程序员岗位的面试。所以,只准备面试是不够的。

你需要先跳到一个相关岗位。通常来讲,数据分析师、测试员、运营维护人员的最低门槛要低一些。以这些行业作为跳板是成为程序员的好方法。这里就需要你去做更多功课,研究一下哪个跳板才是最适合你的。


写道这里,我突然想起来一位朋友跟我讲的故事:

技术发展的目的是降低软件开发的用人标准,进而降低软件行业的人力资源成本,更快、更好、更便宜地满足用户的需求
从公司的角度来看,如果要求所有开发人员都是基础扎实、技能全面的,那么用人成本一定很高,我完全相信经过一定训练和挑选的*鸟毕业生在经理的正确管理下可以很好的开展工作,尽管他可能不懂算法和数据结构,C和C++基本不会,这并不妨碍他为公司创造价值,随着他开发经验的增长,在时间允许的情况下再去补充一些基础知识也是完全可以的。

其次,题主的情况,未必能承担系统而全面学习所带来的成本

几年以前有个“学生”,打引号是因为我并没有真正教过他,中专毕业,专业是钳工,曾经给我展示过胳膊上的长长的疤痕,说是被车床伤到的。
他要求跟我学的时候属于入门阶段,最开始学习的并不是什么三大浪漫,而是C#. 在掌握了一门编程语言后,很快自学了其他语言(甚至Delphi), 在一年后找到了一个小公司做些基本的开发工作,然后涉足安全领域,开发了各种工具,现在在一家安全公司上班,提升很快,收入不菲。前不久跟我聊他配合网监做一些取证和提审的工作经历。

2006年,我在武汉某个夜市的大排档上,凌晨2点多,看到一个服务员在忙里偷闲看一本计算机书籍(扫一眼就知道),仔细一看是一本Java入门书,聊起来才知道这妹子是护校毕业,但是对计算机有兴趣,就想在大排档当服务员攒学费去*鸟。她还拿出一沓油迹斑斑的信签纸,上面全是她写的程序,她说每次去网吧都要装开发环境,太麻烦了,所以干脆在纸上写。哥看不下去了,给一开软件公司的朋友打电话强烈推荐这妹子去实习,朋友一听情况表示拒绝,我说你只要给他管工作餐就好,不用发工资。1个月后这妹子进入试用期,2个月后转正,后来在朋友公司做了近两年,据朋友说开发能力很强,再后来,我就不知道了。

作为教师,感动我的总是这这样的“学生”,而不是那些坐在教室里花着父母的钱虚度光阴的学生。
可能有人会觉得这样的程序员是“野路子”,不登大雅之堂,但这一点都不妨碍他们兢兢业业的工作,为公司创造价值并且改变了自己的生活。”

相关文章
|
XML Dubbo Java
【Dubbo3高级特性】「框架与服务」服务的异步调用实践以及开发模式
【Dubbo3高级特性】「框架与服务」服务的异步调用实践以及开发模式
404 0
|
Kubernetes 调度 容器
正确配置Kubelet可一定程度防止K8S集群雪崩
## Kubelet Node Allocatable - Kubelet Node Allocatable用来为Kube组件和System进程预留资源,从而保证当节点出现满负荷时也能保证Kube和System进程有足够的资源。 - 目前支持cpu, memory, ephemeral-storage三种资源预留。 - Node Capacity是Node的所有硬件资源,kube-r
11342 3
|
Dubbo Java 应用服务中间件
使用 Dubbo 对遗留单体系统进行微服务改造
在 2016 年 11 月份的《技术雷达》中,ThoughtWorks 给予了微服务很高的评价。同时,也有越来越多的组织将实施微服务作为架构演进的一个必选方向。只不过在拥有众多遗留系统的组织内,将曾经的单体系统拆分为微服务并不是一件容易的事情。
9387 0
|
机器人 Shell 开发者
ROS2教程08 ROS2的功能包、依赖管理、工作空间配置与编译
这篇文章是关于ROS2(Robot Operating System 2)中功能包、依赖管理、工作空间配置和编译的教程,涵盖了ROS2工作空间的概念、如何获取和安装功能包的依赖、构建工作空间的步骤,以及如何创建和管理ROS2功能包,包括使用命令行工具对功能包进行操作的方法。
2231 0
ROS2教程08 ROS2的功能包、依赖管理、工作空间配置与编译
|
监控 前端开发 API
错误码设计规范探索
本文介绍了错误码设计规范,包括模块化分层、错误码结构及定义、可扩展性与可维护性等方面。错误码用于标识程序中的特定错误,便于快速定位和解决。文中详细描述了全局通用错误码和业务错误码的设计方法,并提出了5-6位数字编码方案,确保错误码的唯一性和可读性。同时,强调了错误码与日志系统的集成及多语言支持的重要性,提供了多个参考文献供进一步学习。
1364 2
|
存储 Kubernetes 数据库
剖析 Kubernetes 控制器:Deployment、ReplicaSet 和 StatefulSet 的功能与应用场景
剖析 Kubernetes 控制器:Deployment、ReplicaSet 和 StatefulSet 的功能与应用场景
859 0
|
关系型数据库 分布式数据库 数据库
PolarDB产品使用问题之是否支持分库分表创建数据库
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
移动开发 JavaScript 小程序
uniapp与vue的区别
uniapp与vue的区别
688 0
|
设计模式 缓存 负载均衡
🐞 如何成为一名合格的“高级开发”
每个人都说自己是“高级开发人员”,到底真正的高级开发人员应该拥有怎么样的能力呢,我们可以怎么努力呢?
325 3
|
存储 缓存 NoSQL
Redis性能滑坡:哈希表碰撞的不速之客【redis第二部分】
Redis性能滑坡:哈希表碰撞的不速之客【redis第二部分】
193 0