Feb 3, 2014

I read a comment on a post on Hacker News where a young programmer said they didn't want to work at a place where older obsolete programmers were let go instead of being retrained, as they would be there some day.

This person meant well, but still managed to irritate me no end. Firstly just because a programmer is older doesn't mean they are obsolete (and just because someone is young doesn't mean they are up to date either). The biggest issue I had with that comment is: its your responsibility as a programmer to keep yourself educated and up to date, not some employer's.

I've been a programmer for 32 years now and I've always tried to keep ahead of the technology steamroller. A lot of people I knew my age who got a BS in Computer Science never learned anything new after school and did eventually become obsolete. I spent 6 years studying chemistry but once I got started as a programmer I found I needed to know what was going on outside of my job, and had a desire to continuously learn and try out all sorts of programming. Of course things were a lot slower back then and reading was a challenge (no internet, you had to read stuff on actual paper!).

By my third year I saw the microcomputers were going to be the future and wiggled my way into the group that worked with them. Once I was in there I read about a new language called C and convinced my manager it was worth buying. Turned out that knowing C meant my first startup app could be written in C instead of Pascal.

Later I read about OO programming and it clicked again, I added some hacky objects to C so I could take advantage. Eventually when C++ appeared I was ready to take advantage of that.

After my sojourn at Apple when it sucked, I figured out I need to work on the web and went to work for consulting firm that used NeXT WebObjects, written in some obscure language called Objective-C. Once Java J2EE appeared I convinced the company to start working in that technology, and did the first project. Coincidentally that project was at a company that is now my employer's parent company, and it was their first completed Java project.

That's what happens when you pay attention to what is going on in the industry instead of just focusing on what you are doing. You never know what might become the "next big thing" but you can always make yourself aware of everything, even if you can't actually try everything.

I remember a coworker in the mid 2000's who was a C++ lead, where I suggested he try Firefox when he had some issue with IE. He looked at me like I was nuts: he had no idea that there was another browser other than IE. Even then he had no interest in even trying it as it didn't affect his job. I can't understand that attitude. You never know where the next big thing will come from, refusing to even acknowledge that the world is changing is not going to keep it from doing so.

My friends who got the BS degree and eventually lost their jobs when the mainframes were retired and found they could no longer work as programmers complained how they should have taken the time to learn something else. But once you discover you are obsolete it's too late. Assuming your employer will retrain you is a fool's pipe dream. These days employers may drop you, your job, your projects, or even the whole company without much notice, and then you have to find a new job. Expecting them instead to retrain you is not going to happen. Maybe if you are an automobile assembly line worker but not a programmer.

It's up to you to keep up, to try new things even if they might not be important. Learning anything is useful because the more programming technologies and tools you try and play with the easier others will be. You might learn useless stuff. But learning is never itself useless. It doesn't matter if you write open source projects, volunteer to code something, or even just work on stuff at home no one will ever see. It's training your brain to accept new things. Even just knowing what is going on in the programming world is going to help as you never know what a future employer might inquire about.

I was writing web applications when I first heard of Ajax (a few months after the term was coined) and I started using it; again I wound up teaching my teammates about the new thing first. Sadly it scared the architecture team who thought I had bought some new technology without approval and wondered if it was supported. None of them had heard of it (since they didn't pay much attention) and when I told them it was just Javascript they were only barely mollified. I was on the architecture team and it was my job to keep up with new stuff and it was still a pain.

When the iPhone first came out, but without any development Kit yet, I still thought it represented the future. Amazingly enough my Objective-C knowledge turned out to be useful again!

Today keeping up is a ridiculous job sometimes. People who do web apps today in Javascript have a constant stream of the next big thing every week; you can't learn anything fast enough before it gets crushed by another framework. I don't work in that area these days (just iOS) but I still keep up as again, you never know where things will go or you will wind up.

What few classes I've taken at employers, usually pointless ones that I already knew or some new technology I would use once, haven't ever been all that important to my future. But like anything you never know what might be useful in the unseen future.

In graduate school studying chemistry I learned APL. I never used it for anything other than play but it formed a basis for my first startup's product Trapeze. I forgot about Objective-C after 1999 yet today it's my primary language. You never know the connections that might prove helpful in the future.

What irritates me no end is when programmers ignore everything outside of their work area. I worked with some folks once who used a 4GL tool that generated RPG code. They bragged that their tool was the best thing in the world and that they would never need to know anything else. I can just imagine the day when most of them are laid off and wonder why they can't get a job. Technology rarely vanishes, but your job might diminish, you might do nothing but horrible maintenance, you might become superfluous and chucked out the door. Today no one will help you become re-useful besides yourself. If you wait until it's too late that steamroller will flatten your career.

So don't procrastinate today, learn about something new, or even better learn something new. Keep an eye open, you might see that future coming at you. Then when it shows up it's no big deal. So far I've been lucky to pay attention and it's kept me still programming after three decades and still working on modern stuff.

So keep your eyes peeled and don't expect anyone will help you keep up. Like Baseball pitcher Satchel Page said "Don't look back. Something might be gaining on you." In programming you need to look forward because the only thing behind you is that nasty steamroller.

Your Progress As A Programmer Is All Up To You的更多相关文章

  1. Some thoughts on a progress

    I can feel that I am making great progress now.. if inspected closely, it is obvious that what I'm g ...

  2. swddude -- A SWD programmer for ARM Cortex microcontrollers.

    Introducing swddude I love the ARM Cortex-M series of microcontrollers.   The sheer computational po ...

  3. PIC JDM Prototype Programmer 1001

    In need of a programmer for PIC micro controllers I decided to build my own one. This programmer has ...

  4. HTML5 progress和meter控件

    在HTML5中,新增了progress和meter控件.progress控件为进度条控件,可表示任务的进度,如Windows系统中软件的安装.文件的复制等场景的进度.meter控件为计量条控件,表示某 ...

  5. 登陆Oracle,报oracle initializationg or shutdown in progress 错误提示

    前两天,登陆Oracle,发现登陆不上去了,报”oracle initializationg or shutdown in progress 错误提示” 错误. 然后就想着怎么去解决,首先自己到win ...

  6. The replication agent has not logged a progress message in 10 minutes.

    打开Replication Monitor,在Subscription Watch List Tab中,发现有大量的status= “Performance critical” 的黄色Warning, ...

  7. JavaScript----Js操控-HTML5 <progress> 标签

    Js操控----HTML5 <progress> 标签 简单模拟下下载进度跑条 <h4>加载进度</h4> <input type="button& ...

  8. SharePoint Configuration Wizard - Unable to upgrade SharePoint Products and Technologies because an upgrade is already in progress

    故障描述 当要运行SharePonit Products and Technologies Configuration Wizard的时候,出现了如下图所示的错误提示. 错误信息为: Unable t ...

  9. What technical details should a programmer of a web application consider before making the site public?

    What things should a programmer implementing the technical details of a web application consider bef ...

随机推荐

  1. ant design pro (十二)advanced UI 测试

    一.概述 原文地址:https://pro.ant.design/docs/ui-test-cn UI 测试是项目研发流程中的重要一环,有效的测试用例可以梳理业务需求,保证研发的质量和进度,让工程师可 ...

  2. 点击div和某些控件之外的地方隐藏div,点击div不隐藏。对象 click和document click冲突有关问题

    帮朋友解决这个问题,我发现用以往想想像的方式来实现,貌似不太可行,所以从网上找了一些解决办法,进行优化,这篇比较详细,所以拿来备忘,另一方面也希望可以帮助需要的同学! 问题背景:jQuery事件问题! ...

  3. DBCP( 二) DataBase Connection Pool 的使用

    使用DBCP必须用的三个包: commons-dbcp-1.2.1.jar, commons-pool-1.2.jar, commons-collections-3.1.jar. 配置参数. Java ...

  4. 用python实现的的手写数字识别器

    概述 带GUI界面的,基于python sklearn knn算法的手写数字识别器,可用于识别手写数字,训练数据集为mnist. 详细 代码下载:http://www.demodashi.com/de ...

  5. 点滴记录——在Ubuntu 14.04中使SublimeText 3支持中文输入法

    在Ubuntu 14.04中安装了SublimeText 3之后发现既然不支持输入中文,于是在网上搜罗一下,发现非常多人遇到了相同的问题,可是解决的方法大该就仅仅有一个.以下依据自身的安装及解决的方法 ...

  6. Web中路径问题

    如果在web项目中需要使用路径,如:转发.重定向还有超链接等. 原则:”一切web路径以/开始” 那么/的路径一定是相对路径,那么/到底代表哪一个相对路径是需要智慧的. 如果该路径是给服务器使用的,那 ...

  7. Android设计模式系列(2)--SDK源码之观察者模式

    观察者模式,是一种非常常见的设计模式,在很多系统中随处可见,尤其是涉及到数据状态发生变化需要通知的情况下.本文以AbstractCursor为例子,展开分析.观察者模式,Observer Patter ...

  8. Linux下源码安装JDK7

    安装说明 安装环境:Red Hat Enterprise Linux7.1安装方式:源码安装 软件:jdk-7u80-linux-x64.gz 安装 #首先查看系统原有JDK信息 rpm -qa | ...

  9. Makefile生成器,使用C++和Boost实现

    今天学习了一下Boost的文件遍历功能,同一时候发现GNU编译器有-MM选项.能够自己主动生成依赖关系,于是利用以上两点写了一个Makefile生成器. 能够生成一般的单个可运行文件的Makefile ...

  10. C# AutoResetEvent

    文章转载自:C# AutoResetEvent AutoResetEvent 常常被用来在两个线程之间进行信号发送 AutoResetEvent是.net线程简易同步方法中的一种,两个线程共享相同的A ...