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

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

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

由于我发现我一路走来,几乎都是本身在努力,没有一个高人从旁给我点播,让我能少走些弯路,我是想写给十一年前刚刚毕业的我,但愿那时的我能看到,若是真的能够的话,我想,我如今应该能够发展的更好吧。面试

第一阶段:不知道本身不知道编程

大学期间,我和老师作过一些小项目,自认为本身很牛,当时还去过一些公司面试作兼职,可是就是不知道为何没有回复。那个时期的我,压根不知道本身不知道,还觉得本身懂不少,如今想起本身之前就可笑,那个时候还算不上程序员,顶多只能算是个业余编程爱好者。微信

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

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

第二阶段:知道本身不知道框架

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

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

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

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基础知识的学习, 我提两点建议吧:

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

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

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

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

相关文章
相关标签/搜索