作为一个程序员,进步完全取决于自己

2015-12-14 


我曾经在Hacker News网站上读过一篇帖子的评论,其中一个年轻的程序员说他们不想呆在那些只会让思想陈旧的老程序员离开而不是对他们再次培训的公司里,因为他明白,有一天他们也会这样。

也许这个人的本意是好的,但是他这种说法还是让我恼怒。首先仅仅因为一个程序员年龄较大并不能说明他思想陈旧(就像一个年轻的程序员你不能因为他年纪轻就说他思想新潮)。我认为这个评论中最大的问题是:始终让自己接受教育并跟上时代的发展,这应该是你自己的责任,而不是公司的问题。

我做程序员已经32年了,而且我一直努力让自己学习各种技术来保持进步。我知道很多像我这个年纪的人自从拿到计算机学士学位以后就再也没有学习过任何新知识,因此他们最终会被淘汰。我花了6年的时间学习化学,但是一旦当我成为一名程序员,我发现我需要了解在我工作之外发生了些什么,而且我有不断学习的欲望并一直在尝试各种各样的编程。当然在当年那个时候,所有事情都要慢得多,因为所有的学习都要靠阅读,这是一个很大的挑战(当时没有网络,你必须读纸质版的东西!)

在我做程序员的第三年,我预见到微型计算机是未来发展的方向,因此我调整了我的工作重心,并加入了他们那个团队。有一次,在那里我读到一门新的语言(即C语言),并说服我的经理买下它。事实证明,会用C语言意味着我的第一个应用程序就可以用C语言来编写,而不再用Pascal。

后来我又知道了关于面向对象编程,它点醒了我,于是我在C的基础上增加了一些可以取巧的对象以便利用。因此当后来C++出现的时候我已经游刃有余了。

当我在苹果工作了一段时间之后,我认为我需要在网上工作并去了咨询公司使用NeXT WebObjects写了一些被称之为称为Objective-C的晦涩语言。一旦Java J2EE出现,我相信公司会使用它来工作,结果就真的利用J2EE做了第一个项目。巧合的是,当时做那个项目的公司就是现在我老板的母公司,这是他们的第一个完整的Java项目。

当你关注的是整个行业发生了什么,而不是只关注你自己正在做的事情的时候,一切就自然而然的出现了。你没办法知道哪件事会成为下一个大事件,但是你可以做到让自己对所有的事情都有了解,即使你没办法将它们一一尝试。

我记得2000年中期的时候有一个同事,是搞C++的头儿,当时他的IE浏览器出现了一些问题,我建议他试一下firefox。结果他像看一个疯子一样的看着我,因为除了IE之外,他不知道还有别的浏览器。在那之后他也没有兴趣去尝试一下firefox,即使这并不会影响到他的工作。我没办法理解这种态度。你没办法知道下一个大事件会从何而来,拒绝承认这个世界在改变并不会真的让世界停止改变。

我有一些获得本科学位的朋友,当大型机退役之后他们随之失业,当他们发现他们没办法再继续当程序员的时候,他们开始抱怨说早该花点时间学些别的东西。但是当你意识到这些的时候,一切都太晚了。认为你的老板会来培训你无异于痴人说梦。有时候你的老板会连个通知都没有就开了你,你会丢了工作,项目,甚至是整个公司,然后你不得不去找份新的工作。指望老板对你进行培训是不现实的,如果你是一个汽车生产线上的工人这还有可能,但作为一个程序员是完全不可能。

能不能进步取决于你自己,你要自己去尝试新的事物,即使它们并不重要。学习任何东西都是有用的,因为你尝试的编程技术和工具越多,再用其他的工具就会越容易。你所学的东西可能会没什么用,但是学习本身永远不会做无用功。不管是你在写开源代码,或是自愿的编个程,或者仅仅是在家里写一个别人永远看不到的东西,都没有关系。它训练了你的大脑开始接受新事物。即使是仅仅了解了在编程的世界里将要发生什么,也可能是有用的,因为不知道在什么时候,就会有老板问到你关于这方面的问题。

当我第一次听说Ajax的时候(在这个术语出现了几个月之后)我正在写web应用程序,然后我开始使用它;再一次的,我先把这个新东西教给我的同事们。遗憾的是这让公司的架构团队感到恐慌,他们认为我购买了一种未经批准使用的新技术,他们也怀疑这种新技术能否得到支持。他们中间没有人听说过这个东西(其实是他们没有去关注过),当我告诉他们这只是一种Javascript的时候他们才勉强息怒。我在架构团队里,与时俱进的接受新事物是我的职责所在,这也是个很痛苦的过程。

当iphone最初面世的时候,虽然还没有任何已开发的工具包,我仍然觉得它代表着未来。我的Objective-C方面的知识再次派上了用场,这实在很让人吃惊。

现如今要与时俱进是很荒谬的一件事。用JavaScript做 web 应用的人们每周都能搞出新的大事件;即使学的再快,你也没办法在新的框架覆盖之前就学习完所有的东西。那些日子我的工作并不在这个领域(当时我只做ios),但是我仍然坚持学习,你永远不知道未来会朝什么方向发展,也没法知道你会在哪里结束。

在老板给我的少数的几堂培训课里,我基本上没学到什么有意义的东西,因为我那些东西我都已经了解,而且有些新技术我都已经使用过了,即使它们对我的未来没那么重要。不过所有的事情都是这样,你没办法知道哪些东西会在以后帮到你。

在研究生期间学习化学的时候我学到了APL,除了玩,我从没用它干过别的事情,但是最后它成了我第一个产品Trapeze的基础。在1999年之后我把Objective-C忘得干净,但是现在它成了我的主要语言。你没办法知道在未来能帮到你的东西跟现在有什么关联。

有的程序员会忽视掉他们工作方面以外的一切,这种行为深深刺激了我。我曾与一些利用4GL工具生成RPG代码的人一起工作。他们吹嘘说他们使用的工具是世界上最好的,他们无需再了解别的什么东西。我甚至能够想象当他们中的大多数人下岗的时候,他们会开始疑惑,为什么他们没办法再找到一份新的工作。技术很少会消失,但是你的工作会减少,除了可怕的维护工作外你可能什么都做不了,然后你就变得多余,直至被扫地出门。现如今任何人都没办法帮助你重新成为有用的人,除了你自己。如果你还在等待,那么等到一切都已经太迟的时候,你的事业就会遭受到毁灭性的打击。

所以现在不要再拖延了,学点新东西吧,让自己更好的学习新东西吧。睁大你的双眼,你可能就会看到未来正在向你走来。当它展示在你面前的时候你会发现这没什么大不了的。很幸运一直以来我能够保持专注,这让我在三十年之后仍然能够进行编程,能够在一些很现代化的东西上进行工作。

所以要睁大你自己的双眼,不要指望别人会帮助你。就像棒球投手Satchel Page所说的那样:“别回头,别人随时有可能赶上你”。在编程方面你需要一直向前看,因为你背后唯一的东西是讨厌的颠覆者。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 参数化 c_MySQL(16):参数化、封装

1.sql语句参数化创建testInsertParam.py文件,向学生表中插入一条数据#encodingutf-8import pymysqltry:connpymysql.connect(hostlocalhost,port3306,dbtest1,userroot,passwdmysql,charsetutf8)cs1conn.cursor()students_ninput("请输入学生姓名:&…

如何优雅地向导师/老板表示:“上周工作没什么进展”?

全世界只有3.14 % 的人关注了爆炸吧知识学生时代最怕导师问进度实验数据有了吗?结论有了吗?社畜时最怕老板问进度客户签合同了吗方案改出来了吗重点从来都不是被问,而是没什么进展还要硬着头皮汇报应对这种情况小编总结了三句口诀:反客为主&…

如何判断一个字符串是不是纯数字

代码:public class NumberDemo { public static void main(String[] args) { String str1"1122.2.2"; String str2"111"; String str3"111.2"; String str4"111s"; String str5"111.s"; String str6"…

如何在控制台应用程序中使用分布式日志Exceptionless

Exceptionless 在所有类型的 .NET 应用程序中运行。让我们来看看如何在控制台应用程序中开始使用 Exceptionless。要使用 Exceptionless,请像这样添加 Exceptionless 命名空间:using Exceptionless;完成后,定义 Exceptionless 客户端&#xf…

JavaScript开发的技巧

1、 使用取代 和!操作符会在需要的情况下自动转换数据类型。但和!不会,它们会同时比较值和数据类型,这也使得它们要比和!快。 1 if("1""1"){ //速度慢2 3 }4 if ("1" "1") { //速…

Android之如果解决Android studio项目里面的类名不能重命名

问题:改类名修改不了 今天师傅要我给那个在activity里面不规范的类名,类名是SearchUser.改成SearchUserActivity,发现改不了出了一下问题,如下图 如何解决的: 点击下面的(85:56)行&#xff0c…

python葡萄酒数据集_利用python分析红葡萄酒数据

在本次分析中,我使用了随机森林回归,并涉及数据标准化和超参数调优。在这里,我使用随机森林分类器,对好酒和不太好的酒进行二元分类。首先导入数据包:importnumpy as npimportpandas as pdimportmatplotlib.pyplot as …

Razor视图引擎浅析

从Web Form开始,视图的机制其实就没改变过,动态编译视图脚本。所不同的是,Razor就仅仅是模板,没在嵌入与网站等相关的东西,应该是SRP的一个体现。 可惜,这种功能分离仍做得不彻底,MVC中&#xf…

Codeforces 365C - Matrix(hash + yy)

题意:给定你一个数串s,再给你一个 a ,问你在矩阵d(第i,j个元素为si*sj)有多少个小矩形的和为a 解题思路:可知 a (s[x] s[x1] ....s[y])* (s[p]s[p1]....s[q]); 我们只需要枚举各字串的和…

耗时3年,集齐102位中国摄影师,央视这部纪录片BBC也无法超越......

全世界只有3.14 % 的人关注了爆炸吧知识地球上已知的植物有三十多万种,其中十分之一生长在中国。这些植物不仅为中国带来福祉,还不断迁徙到世界各地。在人类的不懈努力下,它们又获得了新的姿态,为不同的文明带来不一样的色彩。《影…

十五天精通WCF——第十一天 如何对wcf进行全程监控

说点题外话,我们在玩asp.net的时候,都知道有一个叼毛玩意叫做“生命周期”,我们可以用httpmodule在先于页面的page_load中 做一些拦截,这样做的好处有很多,比如记录日志,参数过滤,全局登录验证等…

Android之MVP 模式:简单易懂的介绍方式

转载:https://segmentfault.com/a/1190000003927200 Android MVP Pattern Android MVP 模式1 也不是什么新鲜的东西了,我在自己的项目里也普遍地使用了这个设计模式。当项目越来越庞大、复杂,参与的研发人员越来越多的时候,MVP 模…

mysql dw解决方案_MySQL 的 DW 解决方案(MySQL + Infobright)

随着 BI (DW) 在各个企业中重要性的不断提升,各个数据库厂家都希望能搭上这辆班车。这不,MySQL 也联合 Infobright 一起推出了开源的 数据仓库解决方案,而且是开源的。 其实现的各种DW该有的功能就不多说了,但是 Infobright 有一点…

【原】Python基础-函数

#不定长参数,这里prams是一个元组集合def print_params(*prams): for e in prams: print(e) print(prams) #输出(xxx, (1, 2, 3), hello) print_params("xxx", (1,2,3), "hello") #关键字参数,使用参数名提供的参数,主要…

EasyNetQ操作RabbitMQ

EasyNetQ 是一个容易使用,专门针对RabbitMQ的 .NET API。EasyNetQ是为了提供一个尽可能简洁的适用与RabbitMQ的.NET类库。下面看下怎么集成。1、nuget 安装2、配置连接串public static IBus CreateMessageBus(){// 消息服务器连接字符串var connectionString Confi…

男人穿女友的丝袜,只有0次和无数次....

全世界只有3.14 % 的人关注了爆炸吧知识男人爱穿丝袜是刻在基因里的今天是上班第二天,想必很多模友都还没有进入状态,所以超模君准备了一波奇奇怪怪的知识,给各位模友提提神。咱们要讲的,是一种让不少直男听了老脸一红的贴身衣物—…

使用gulp-connect实现web服务器

安装插件安装gulp-connect插件,安装命令如下 npm install --save-dev gulp-connect 定义web服务,gulpfile.js代码 var gulp require(gulp),connect require(gulp-connect), //实现web服务器插件gulp.task(default, function() { });//使用connect实现w…

Android之基于xmpp openfire smack开发之openfire介绍和部署[1]

http://blog.csdn.net/forlong401/article/details/33730365 前言 Java领域的即时通信的解决方案可以考虑openfiresparksmack。当然也有其他的选择。 Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端版本,目前建议使用3.8.1版本,这个版本是当前最…

mysql对null排序_mysql中null值的排序问题分析_MySQL

bitsCN.commysql中null值的排序问题分析如下表t_user:name agezhangsan 1lisi NULLwangwu 2执行一下sql:Sql代码select * from t_user order by age;name agelisi NULLzhangsan 1wangwu 2实际上我们是想将没有填写age的记录放在最后,我们可以…

1988-B. 有序集合

描述 在C里,有一个神奇的东西,叫做STL,这里提供了很多简单好用的容器,用来实现常用又很难书写的数据结构,如栈(stack)等。其中,有一个容器叫set,译作“有序集合”。首先&…