文档章节

北京尚学堂|程序员的真实成长”砺程“

SXTkaifa
 SXTkaifa
发布于 2016/10/30 11:07
字数 3341
阅读 8
收藏 0

版权声明:本文为北京尚学堂原创文章,未经允许不得转载。​

写这篇文章的初衷是为了来记录一下我工作十一年来的一些点滴,希望对年轻的朋友有些帮助,有些启发,至少是有些借鉴作用吧,少走些弯路。​

因为我发现我一路走来,几乎都是自己在努力,没有一个高人从旁给我点播,让我能少走些弯路,我是想写给十一年前刚刚毕业的我,希望那时的我能看到,如果真的可以的话,我想,我现在应该可以发展的更好吧。

第一阶段:不知道自己不知道

大学期间,我和老师做过一些小项目,自认为自己很牛,当时还去过一些公司面试做兼职,但是就是不知道为什么没有回复。那个时期的我,压根不知道自己不知道,还以为自己懂很多,现在想起自己以前就好笑,那个时候还算不上程序员,顶多只能算是个业余编程爱好者。

我大学毕业了。对人生充满了迷茫,没有人给予我所谓的人生经验的指引,一个人跌跌撞撞的开始找工作了。我考大学的时候,是计算机专业考分最高的一年,随后就迎来了高校扩招,大家都知道计算机专业好,都奔着计算机专业来,等到我毕业的时候,迎来了计算机软件行业最不景气的时候。比我高的学长,刚毕业的起薪基本3、4K,可轮到我们这一届,就变成了区区的2K。

而我自己,还面临着一个更难的难题---我没有学位证。其实也不能说是没有吧,只不过还没拿到手,因为我到毕业前英语4级还没过(说起来好丢人呀),毕业前的最后一次考试考完了,但是成绩还没下来,没有四级成绩,学校就不给发学位证。没有学位证的我就这样在面试时四处碰壁。幸运的是我毕业前那次考试过了,很快就拿到了学位。​

第二阶段:知道自己不知道

那时以后,我几乎每次都能通过笔试、面试,到了最后却因为学位的问题没有地方要。我甚至一度想要放弃做技术这一行,还去面试过技术类的销售,也就是售前工程师吧,因为这个对学历要求不高,又要懂些技术。不过还好我最后坚持到了,找到了一个我随后坚持的工作——北京尚学堂。可能我能坚持这么久,也是因为感激那时候能在我走投无路的时候帮到我吧。​​

2.1太害怕学不会新的工具、语言和框架

一般的程序员会墨守他们最喜欢的工具,而不希望学习新的,因为他们认为,离开了那些语言和工具,多年的经验就会付诸东流。而强大的程序员会拥抱那些挑战和机会,积极地学习新的工作方式。​

2.2直到特性“完成”的时候才会提交。(但永远都不会完成!)

有些程序员没有足够的信心来承受团队中其他成员的批评和审查,因此会把自己的工作藏起来,直到“完成”状态才提交。

这种开发者会损害团队中其他人员的生产力,因为团队看不到他每天的成果,而且他也不会在正常开发的过程中寻求帮助,这样就会造成很多“最后一分钟”的缺陷,从而让交付延迟。而强大的程序员会知道,代码并不是他们自己,因此会把代码经常自信地呈现在其他团队成员的眼前,获得批评和建议。

第三阶段:知道自己知道​

工作三四年后,自己的技能逐步提高,成为了项目组的技术大拿,这时候也很自信,知道自己能够解决遇到的所有问题,这时候就是高级程序员阶段了。​

3.1只是“知其然”会很危险

比如,以微软最近在C# 5.0中引入的async和await关键字为例,这两个关键字会让创建和管理异步调用变得很容易,但是也会造成上下文切换、对共享资源进行多线程访问的成本,仅仅对此有基本了解的程序员会盲目地使用这些特性,把所有I/O调用都封装成C#中的Task对象,这会创建出危险的、不可预测的而且非常难以测试的代码。

好的开发者不仅“知其然”,而且会了解为什么这么做以及应该在什么样的条件下使用。

3.2 分析瘫痪(Analysis paralysis)

分析瘫痪是指在程序开发初期进行系统分析,常因为太过执着于控制所有可能的变化和意外,而造成大量时间的浪费,裹足不前。这是一种很经典的问题,会影响很多一般的程序员。它通常是由过度分析造成的,但是我认为其根本原因在于不敢做出坏的决定。一般的程序员会担心犯错,只想一次成功。

而强大的程序员不会害怕,他们会编写很烂的代码,对其进行单元测试,如果认为无法达到目的,就会在45分钟之内把它抛弃。强大的程序员会积极地限制用来研究的时间,因为他们知道那是个陷阱——看起来是有效的,但经常都无效。​

3.3没有对工具和开发过程投入

如果你想要成为天才程序员,那么就需要投入时间提升技能和知识,而将你和普通的代码工人区分开来的是快速编写出生产级别代码的能力。你可以同时拥有好的代码和速度,但是你需要先对你用于构建的过程投入。

一般的程序员不会对工具、过程和环境投入,只会使用大量的时间学习新的语言特性和API如何工作,但那并不会改变什么。

通常,你作为程序员所能够做出的最大改进并不是专注于你所编写的代码,而是优化你编写代码的过程。利用好工具可以大大提升你的工作效率。

3.4羞于请求帮助

一般的程序员羞于或者不想让人知道自己不懂,所以他们装作什么都知道,但这样就有可能提交某种非常可怕的代码到库中。说“我不知道怎么做。”没什么错,强大的程序员知道这一点,所以当被问题难住的时候就会请求帮助。

第四阶段:不知道自己知道​​

工作多年后,随着自己知识的深度和广度的提高,越学发现越不懂,有时好觉得自己以前真是浪费了太多时间。虽然觉得自己还有很多需要提高,但是对工作中遇到的问题基本没有解决不了的,这个时候很多知识都自成体系,解决问题也有了自己的潜意识,有时连自己都不知道自己知道,这时候属于架构师级别了。

4.1不知道如何让其他程序员更容易使用你的代码

在所有技术团队中,工作很重要的一部分就是人员的并行(human parallelism),也就是多个人能够同时对同一代码库工作的能力。但是对于团队来说,能够异步工作也很重要,当你不在的时候我可以修改你的代码,反之亦然。

一般的开发者并不这么认为,他们会开始对一项任务编写代码,认为他们会永远拥有这段代码。而强大的开发者会知道技术债务的说法,从而试图通过设计代码来对其限制,让它尽可能可维护和自解释。

编写可读的代码需要程序员改变他们的看法——你的代码要比你在组织中存在的时间长。

4. 2不知道如何阅读其他人的代码(或者不想读)

当一位一般程序员看到用他所不熟悉的语言或框架编写的代码库时,就想立刻重写,而不考虑业务价值或者推向市场的时间。而强大的程序员会接受这样的观点,重写所导致的业务成本通常是不可接受的,所以应该避免这种行为。他们会试图坐在计算机前,理解、学习然后修改现有的代码。

阅读代码要比编写代码还难,但是强大的程序员会投入时间来学习如何超越。

4.3 不能从最终用户的角度编码(你考虑的范围太狭窄)

有句话说得好:作为程序员,你的工作不是解决技术问题,你之所以解决技术问题,是为了解决业务问题。

一般的程序员只会陷在技术问题之中,而不知道最初是为什么要解决这个问题。更严重的是,一般程序员无法从头开始创建出具有业务价值的东西。当被要求基于简单的用户设计新特性的时候,他们会死板地、照着字面对故事或者说明书做出解释,这样交付的产品用户根本无法使用。因为他们不会考虑相关的用例;不会考虑最终用户的体验;并且在做面向用户的内容时,设计都会很笨重。这导致他们无法编写业务应用,只能做产品。

好的程序员会从最终用户的角度来看他们的代码。我怎样才能让它更轻松地解决用户的问题呢?故事的文字内容之外有哪些方面会让这个特性给用户带来更多收益呢?

4. 4无法判断任何编程任务的业务价值

这个问题和上一个是相关的,很多技术上很强的程序员之所以无法意识到自己的潜力,是因为他们不会停下来,从业务或者组织本身的角度去看一下他们的工作。

一般的程序员不会,他们只会拿着说明书,然后盲目地实现,直到结束,不关心他们的工作和公司的业务目标有什么关系,以及对其他团队和业务组会产生什么样的影响。这样,他们就会在业务价值很低的技术任务上浪费大量开发时间。​

我认为

如果你想要成为更好的程序员,那么就要从改变你看待代码以及编码的方式开始。你需要理解所编写的每行代码背后的业务成本;你需要从客户或者最终用户的角度来看待工作;你需要接受代码会比你在组织中存在的时间更长,所以要以其他开发者能够继承的方式来设计;最重要的,永远都不要害怕新的挑战,也不要害怕请求帮助,你无法独居一隅来提升工作效果,软件开发也是社会化的工作。​

后记

以上就是我给大家分享我是如何走上编程这条路,以及一路的坎坎坷坷。但是这里并没有具体内容Java基础、Java教程之类,不是我不推荐,而是内容过多不便做赘述,而且离我自己学习 Java基础技术也过去好几年了,我学习的时候看的什么也忘了,所以我不能不负责任地推荐一些我自己都没有看过的书给大家。对于Java基础知识的学习, 我提两点建议吧:

1、多写多敲代码,好的代码与扎实的基础知识一定是实践出来的;

2、有学习意向和自学能力的同学,可以去北京尚学堂官网下载马士兵和高淇300集的视频来学习一下Java基础,还挺不错的,最近360云盘即将下线,如果尚学堂官网上下载不了可以底下回复,我分享给大家!​​

本文作者北京尚学堂原创,如需转载请联系作者授权,未经授权,转载必究。

需要更多资料微信扫一扫(资料领取验证消息:156)

© 著作权归作者所有

SXTkaifa
粉丝 3
博文 109
码字总数 250758
作品 0
太原
程序员
私信 提问
一个真实的实例: Java程序员的成长经历

版权声明:本文为北京尚学堂原创文章,未经允许不得转载。 我们大家都默认:程序员的脑子里除了一些散乱的代码和概念外,已经没有别的东西了吧!现在最缺的是实际的工作经验,而不是书本上那...

SXTkaifa
2016/11/16
71
0
关于程序员,你知道的有多少?

版权声明:本文为北京尚学堂原创文章,未经允许不得转载。 关于程序员,多数人印象里是无趣、无情商、不修边幅,头发蓬乱,黑眼圈,神情憔悴……差不多是这样的…… 甚至还有段子调侃程序员生...

SXTkaifa
2016/11/18
13
0
如何成长为一名专业的程序员?

版权声明:本文为北京尚学堂原创文章,未经允许不得转载。 要想成为一名专业的程序员,仅仅会写代码是不够的。从团队合作去解决问题到版本控制,你还得具备其他关键技能的工具包。当我们询问...

SXTkaifa
2016/11/20
2
0
程序员和工程师有什么不一样

版权声明:本文为北京尚学堂原创文章,未经允许不得转载。 我刚刚工作的时候,面试官曾经跟我说:好好干两年,可以迅速从程序员成长为工程师。当时我觉得太诧异了,从很多招聘启事来看,“程...

SXTkaifa
2016/11/13
2
0
北京Java培训学校哪家好?

版权声明:本文为北京尚学堂原创文章,未经允许不得转载。 现在学习IT技术好像已经成为一种潮流,大家都知道,刚毕业没有技能,没有工作经验,学一技之长保证自己就业竞争力的优势。“听很多...

SXTkaifa
2016/11/24
8
0

没有更多内容

加载失败,请刷新页面

加载更多

面试爱奇艺,竟然挂在第5轮……

今天给大家分享我曾经在爱奇艺的面试,过程还是比较有意思的,可以给大家一些参考 <br> 聊骚阶段 嗲妹妹:你好,我是爱奇艺的HR,我们正在招聘运维开发岗位,请问您最近有在看工作机会吗? ...

上海小胖
今天
5
0
Jenkins系列_插件安装及报错处理

进入Jenkins之后我们可以进行插件的安装,插件管理位于以下模块: 发现上面报了一堆错误,是因为插件的依赖没有安装好,那么这一节,就先把这些错误解决掉吧。解决完成后,也就基本会使用插件...

shzwork
今天
2
0
mysql mysql的所有查询语句和聚合函数(整理一下,忘记了可以随时看看)

查询所有字段 select * from 表名; 查询自定字段 select 字段名 from 表名; 查询指定数据 select * from 表名 where 条件; 带关键字IN的查询 select * from 表名 where 条件 [not] in(元素...

edison_kwok
昨天
9
0
解决多线程并行加载缓存问题(利用guava实现)

依赖 com.google.guava:guava:20.0 import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import java.util.concurrent.ExecutionException;import j......

暗中观察
昨天
4
0
利用VisualVM 内存查看

准备工作,建几个测试类。等下就是要查看这几个类里面的属性 package visualvm;public class MultiObject { private String str; private int i; MultiObject(String str...

冷基
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部