当前位置: 首页 > 编程日记 > 正文

每个程序员必看:如何在40岁后继续做软件开发?

导读:

这是一个 42 岁的开发者所写经验分享文章.并且列出一些他 18 年多身为软件开发者的经验谈.许多部分看完后都会希望自己当时就能够了解,所以很推荐不论是新手或是老手都要好好阅读这一篇文章。

故事很长,一切从 1997 年开始讲起.那是一个令人怀念的年代(FF7 发售,微软入股苹果,铁达尼号电影上映),那是作者第一年身为软件开发者的年份。当时他的第一份工作是从事 ASP 并且在微软的平台上面使用 EditPlus。十八年过去,作者一共做过六份工作,其中被炒鱿鱼两次,出过两本书,从事过不少演讲。他整理了他的一些心得,希望年轻的开发者(或是有志将软件开发作为终生志业的人)一些建议,条列如下:

1. Forget The Hype (忘记各种程序语言与架构的炒作与热潮)

不少的新的语言与技术来来去去,作者不是要你别去学习新事物,而是不要因为有太多的新事物而恐慌或是自我放弃。持续鑽研你目前在学习的,并且可以每年挑一些你有兴趣的项目深入了解。

[反观我自己]:各种后端与前端语言来来去去,我把时间花在学习 Python(会持续), Ruby,Scala(会持续)与 Golang(会持续)。透过使用 Golang 可以有更多的时间去了解系统架构与直接面对问题,让写代码变得更有趣。

2. Choose Your Galaxy Wisely(慎选你的星系)

为了维持原文的意思,我还是使用星系这个字。这边指的是你学习跟从事的技术要慎选,举例而言,微软星系(泛指: .Net、C# ….)或是 Apple 星系(Objective C++、Swift …)。慎选你喜欢的星系,因为那会影响你未来的发展。

[反观我自己]:过去十年主要针对微软星系,目前主要就是后端的 Ubuntu 星系 ,各种后端程序语言都是我目前主要的重点,当然还有 Docker 相关技术。

3. Learn About Software History(了解各种软件的历史)

作者认为如果你喜欢一种程序语言、一种架构,你就需要好好的了解它的由来与故事。

[反观我自己]:比如说我喜欢 Golang ,我就应该要了解以下的一些问题:

Golang 是谁发明的?

Ans:由 Google 内部的三位大神 Robert Griesemer,Ken Thompson(C 语言的共同发明者)与 Rob Pike(UTF-8 的共同发明者),在 2007 年于 Google 内部共同起草发明。

他主要解决什么问题?为何以前做不到?

Ans:根据第一份 Golang Talk

原因为:

  1. Go fast!

  2. Make programming fun again.

  3. 世界在变,但是系统语言却已经十年没变。

  4. 系统语言往往编译过久。

为何以前做不到:(在旧的程序语言上做不到)

新增函式库不是一个正确的方向。

需要从新思考整个架构来开发新的程序语言。

目前这个技术的最新状况如何?

Ans:Golang 目前是 1.6.2 (2016/05/03) ,并且支援 HTTP2 并且可以透过 gomobile 在手机上也可以使用相关套件。

4. Keep on Learning (持续学习!)

不论你喜欢哪些新的技术或是新的程序语言,你都应该持续的学习,里面并且建议:

每年学习一个新的程序语言。

每年读六本书。(作者推荐 Peopleware、The Psychology of Software Programming、Facts and Fallacies of Software Engineering、Agile!: The Good, the Hype and the Ugly、Rework 跟 Geekonomics,都是好书。)

[反观我自己]:

程序语言部分: 2014 (Ruby, Scala) 2015 (Go, Swift) 2016 还没有决定.

读书部分:每年读没有超过六本书,但是读过不少论文并且有上过一些 MOOCs。

5. Teach(指导其他人)

这边指的不是一定要开堂授课,你可以写一篇部落格来讲解你学习的新事物,因为教导是最好的学习方式。

[反观我自己]:还好部落格从来没停过,个人也认为写部落格的过程可以让我不断地检视我了解的部分,并且弄懂所有的细节(希望!),不过还是希望能够多多指导其他人(比如说 meetup 或是 talk)。

6. Workplaces Suck(工作场所糟糕透了)

不要去期望软件公司会给你任何职涯的规划,相反的不少公司会将你认为是另外一种的劳工,只会将你放在你擅长的位子,所以也有软件公司变成血汗工厂的相关文章。作者同时也认为开放性座位对于需要高度脑力工作的软件工作者是一种最不好的设计(使用 “cancer” 这个词)。而对于工作上的指派,作者也建议大家应该要好好了解每个任务的内容.有任何疑问应该要提出来讨论,对于不了解的事物盲从是最不好的,应该不惜抗拒权威或是离职才是正确的选择,不要让这样的工作风气扼杀了你的热情。

40-years-old-coding

[反观我自己]:我一向对于任何”不合理”的任务指派都会有意见,甚至不断地提出抗议。(当然结果可能都不好!)但是如果因为这样就不提出,那么我们还剩下什么呢?

7. Know Your Worth(了解自我的市场价值)

这篇是要大家充分的了解自己的市场行情(也就是薪水),根据这篇文章通常一个软件工程师应该要能创造出他自己薪水等级的十倍价值。事实上可能远远不止如此,所以作者建议我们要勇敢地去争取更多的薪水,甚至你可以公开你的薪水等级,让更多人知道你是否被低估(或是高估)任何(自认为)有你相同能力的人,都应该拿到一样的待遇。

[反观我自己]:这件事情还真是难做到,在一间公司待久之后,最容易降低的就是薪水提升的幅度。这件事情还得努力学习,让自己的市场价值更高.同时我们也要不断检视,我们自己能不能创造出自己薪水的十倍价值。

8. Send The Elevator Down (虚心地接受任何意见)

这边我的解读可能跟作者原先的不同。他有提到肤色与种族的优势,但是我想到的却是你的职位,你可能会听到许多来自于部下或是后辈的建议(或是批评)。不要快速地想要反驳或是抵制,充分的了解过后,或许可以坦诚自己的见解或许是有盲点的,必要时甚至可以道歉并且快速修正。如同许多书上有提到的:「你雇用一个员工,一定是要比你还强的,这样你才能将事情交给他办,你自己做更需要更大视野的任务。」

[反观我自己]:参加社群后,最容易有这种感觉:太多令人钦佩的后辈了,每个人都有着渊博而清楚的知识。我们不需要否认,更不需要去挑惕或是批评,我们要谦虚的接受并且吸收,成为我们自己的养分。

9. LLVM(一个自由软件专案,是一种编译器的基础建设,以 C++ 写成)

作者认为 LLVM 会是下一个重要的资讯业的星系(Galaxy) ,目前已经有许多的程序语言支援 LLVM 了。所以作者建议我们可以花一些时间去了解,或许去学习相关的程序语言。

[反观我自己]:虽然 Python 与 Swift 都有学习,但是还不是我最上手的程序语言之一。这一个部分我会好好谨记于心,好好学习。

10. Follow Your Gut(相信你的直觉)

作者在 2000 年就觉得 .NET 会引领接下来的几年,在 2007 年 iPhone 的发表会就了解他的相关技术会是紧接着几年的发展趋势。

当然,这是作者的直觉。但是,你也应该充分地相信你的直觉,并且努力的去追求与学习。

[反观我自己]:我在 2014 年开始学习许多不同的程序语言, Python, Ruby, Objective C, Java, Swift, Scala 与 Rust。最后学习到 Golang,我直觉认为 Golang 会是 Server-side (或是说 Service-side)最重要的程序语言之一,所以我会努力学习。

11. APIs Are King(API 是王道)

这边很推崇好的 API 设计是很重要的,不仅仅影响 server 与 client 的沟通,更会影响到好的软件品质。也提出 chunky is better than chatty (简单的说:就是不要将 API 拆的太精简,使得 API call 需要往来相当的多次。)

同时作者也建议不要太依赖 REST ,不彷看看 socket.io, ZeroMQ, RabbitMQ, 或是 Erlang。并且也应该开始架设自己的机器人。

[反观我自己]:没有想过,原来 chunky 的设计准则在某些状况下竟然比 chatty 更好,这得好好学习。我有架设自己的机器人来帮助我处理一些日常伺服器维护的琐碎事项。

12. Fight Complexity(将复杂的事情简单化)

永远要秉持着 KISS 原则(“Keep it short and simple”)来处理任何事情. 面对困难或是负责的事情,有着不少工具可以帮助你将设计简单化。

[反观我自己]:我一直认为能够越有能力的人,越能够将复杂的事情简单的讲解,或是写成一段简单的程式码来实现,这个能力是我们都要不断学习的。

Conclusion(结论)

「年龄永远不会是一个问题,只要你的心不断催促你持续写代码,持续制造新的东西,你永远都会是年轻的。」

这是作者给我们的结论,他也希望我们能够保持一颗年轻的心,不断学习。 2016 是一个崭新的一年,有着许多新奇的事件发生:微软拥抱 Ubuntu,并且让 SQL Server 在 Linux 上执行,人工智慧(AlphaGo)的大反攻。我们不会知道有什么将发生,但是他希望我们都记住这些精神,并且微笑向前。

转载自:http://www.codeceo.com

相关文章:

【ACM】杭电OJ 1009 (FatMouse' Trade)。

两个条件貌似缺一不可 不明白为什么不能是sum&#xff08;s[i].value*s[i].cat_food&#xff09;&#xff1b; #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> using namespace std;const int maxn 1010;typedef …

Java图形化:布局方式

布局方式 FlowLayout:流布局 BorderLayout:边框布局 GridLayout:网格布局FlowLayout&#xff08;流布局&#xff09; 像Word打字&#xff0c;组件从左向右排列&#xff0c;一列排满后自动换下一行。组件默认居中对齐&#xff0c;可以设置左/右对齐。流布局会维持组件的原始大小…

ARKIT/ARCore对比分析(二)

ARKit(2) ARCore 和 ARKit平台特点比对 曾与一家最大的 IMU OEM 交谈过&#xff0c;为了节省成本&#xff0c;他们的智能机IMU 在工厂中只是在单一温度下进行标定。这意味着 IMU 硬件在某一指定的温度下&#xff0c;误差被调节到最低。但当手机发热的时候&#xff0c;IMU 就不…

【ACM】杭电OJ 1789(Doing Homework again)

http://acm.hdu.edu.cn/showproblem.php?pid1789 cmp函数&#xff1a; 先按扣分由多到少进行排序&#xff0c;然后如果遇到扣分一样的&#xff0c;则先做时间少的。 vis数组&#xff1a; 最要的事&#xff0c;放在它的截至日期那一天去做&#xff0c;然后&#xff0c;之后…

推荐使用的几款Java常用基础工具库

通用工具类(字符串、时间格式化、BeanUtils、IO)1. commons-lang3库1.1. org.apache.commons.lang3.StringUtils类日常代码中&#xff0c;我们经常和String字符串打交道&#xff0c;经常对字符串进行处理&#xff0c;稍微不注意的话&#xff0c;很容易出现类似NullPointerExcep…

ARKit 与 ARCore比对(三)

ARKit 和 ARCore剖析、结构、原理介绍 ARKit 和 ARCore 都是三部分&#xff1a;相机姿态估计&#xff0c; 环境感知&#xff08;平面估计&#xff09;及光源感知。 ARCore 的部分源码&#xff1a;https://github.com/google-ar/arcore-unity-sdk/tree/master/Assets/GoogleARCo…

前端开发之retina屏幕

像素 && ppi 首先先说一下pixel(picture element)&#xff0c;显示图像的最小单位&#xff0c;有多个带色彩的像素点组成的整体就是一张图像。然后再说一下ppi(pixel per inch)这个概念&#xff0c;其实就是在每英寸显示的像素数。 设备像素 && 逻辑像素 &…

【ACM】Uva 1152 (4 Values whose Sum is 0) 二分查找lower_bound() 和upper_bound()的使用

【问题描述】 The SUM problem can be formulated as follows: given four lists A, B, C, D of integer values, compute how many quadruplet (a, b, c, d) ∈ A B C D are such that a b c d 0. In the following, we assume that all lists have the same size n. …

广东“基因编辑婴儿事件”调查组:将对贺建奎依法依规严肃处理

雷锋网(公众号&#xff1a;雷锋网)消息&#xff0c;1 月 21 日&#xff0c;新华社报道了关于“基因编辑婴儿事件”的初步调查结果&#xff0c;该结果宣称&#xff0c;该事件是南方科技大学副教授为了追逐个人名利而进行的人类胚胎基因编辑活动&#xff1b;而在此过程中&#xf…

测试我的第一个随笔

# encodingutf-8## Python Version 3.5# 利用数学中的复数 求解 一元一次方程(从网上看来的)def solve(qx, var): qx qx.replace(, -() ) c eval(qx , {var: 1j}) return -c.real/c.imagres solve(2*x 4 8,x)print(res)转载于:https://www.cnblogs.com/imyjy/p/…

ubuntu16.04 下安装Opencv2.4.9

ubuntu16.04 下安装Opencv2.4.9 OpenCV的源码download from: https://sourceforge.net/projects/opencvlibrary/?sourcetyp_redirect[plain] view plaincopycd opencv-2.4.9 mkdir build sudo chmod -R 777 build cd build [plain] view plaincopycmake -D CMAKE_…

UVa 167(八皇后)、POJ2258 The Settlers of Catan——记两个简单回溯搜索

UVa 167 题意&#xff1a;八行八列的棋盘每行每列都要有一个皇后&#xff0c;每个对角线上最多放一个皇后&#xff0c;让你放八个&#xff0c;使摆放位置上的数字加起来最大。 参考&#xff1a;https://blog.csdn.net/xiaoxiede_wo/article/details/79973171 1 #include <io…

AR + ROS +UBUNTU16.04+ORB-SLAM2

ORB SLAM2 USB摄像头 实验环境ubuntu 16.04ros kinetic OPencv2.4.9 Step1&#xff1a; 配置环境变量 $ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/src 在’src’目录中可能没有任何软件包&#xff0c;只有一个CMakeLists.txt&#xff0c;依然可以编译它&#xff1a; …

Cross-validation

2019独角兽企业重金招聘Python工程师标准>>> 1: Introduction To Validation So far, weve been evaluating accuracy of trained models on the data the model was trained on. While this is an essential first step, this doesnt tell us much about how well …

【ACM】杭电OJ 1877 又一版A+B(进制转换)

注意&#xff1a;A和B都是0的情况 A和B为int也可以AC #include<cstdio> #include <iostream> using namespace std;const int maxn 10000;int a[maxn];int main() {long long A,B;int m,k;while(scanf("%d",&m)!EOF){if(m0) return 0;scanf("…

[POI2009]KAM-Pebbles BZOJ1115 [ 待填坑 ] 博弈

有N堆石子&#xff0c;除了第一堆外&#xff0c;每堆石子个数都不少于前一堆的石子个数。两人轮流操作每次操作可以从一堆石子中移走任意多石子&#xff0c;但是要保证操作后仍然满足初始时的条件谁没有石子可移时输掉游戏。问先手是否必胜。 感谢MT大牛翻译. Sample OutputNIE…

ROS中使用摄像头的问题

ROS中使用摄像头的问题 0.prepare 4 . 安装uvc_cam $ sudo apt-get install ros-indigo-uvc-camera $ source /opt/ros/indigo/setup.bash 采用apt-get的方式&#xff0c;直接装在了ROS的安装路径中&#xff0c;并设置工作路径。 安装成功后在/opt/ros/hydro/的路径中就…

EmEditor Professional(文本编辑) 下载地址

http://www.greenxf.com/soft/2126.html 16.1.5 http://www.cr173.com/soft/3031.html 16.3.0 http://www.pc6.com/softview/SoftView_43146.html 17.8.1 绿色注册版 EmEditor 71 个实用插件汉化版 http://www.onlinedown.net/soft/35609.htm

【ACM】杭电OJ 4548 美素数(二次打表)

二次打表&#xff0c;第一次是标记哪些是素数&#xff0c;哪些不是。 第二次是前n个数中 “本身是素数 && 各个位上的和是素数 ” 的个数 TLE&#xff1a; #include <iostream> #include <cstdio> using namespace std;int fun1(int x) {int sum0…

animation与transition区别

transition&#xff1a; 过渡属性 过渡所需要时间 过渡动画函数 过渡延迟时间&#xff1b;默认值分别为&#xff1a;all 0 ease 0 1、局限性&#xff1a; 1&#xff09;只能设置一个属性 2&#xff09;需要伪类/事件触发才执行 3&#xff09;只能设置动画初始值和结束值 2、过…

如何将cocos2d-x程序分别移植到ios,android,windowsphone三个手机平台上

作者&#xff1a;方格子链接&#xff1a;https://www.zhihu.com/question/21505500/answer/22152464来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。面向android的移植 0. 这移植过程简直…… 1. 完成以上工具的下载安装…

【数据结构】顺序循环队列及其实现(C语言)

给定一个大小为MAXSIZE的数组储存一个队列&#xff0c;经过若干次的插入和删除以后&#xff0c;当队尾指针 rear MAXSIZE 时&#xff0c;呈现队列满的状态&#xff0c;而事实上数组的前部可能还有空闲的位置。为了有效地利用空间&#xff0c;引入循环队列&#xff08;环状&…

C++中Reference与指针(Pointer)的使用对比

了解引用reference与指针pointer到底有什么不同可以帮助你决定什么时候该用reference&#xff0c;什么时候该用pointer。在C 中&#xff0c;reference在很多方面与指针(pointer)具有同样的能力。虽然多数C程序员对于何时使用reference何时使用pointer 都会有一些直觉&#xff0…

云南实现手机自主补(换)领居民身份证

图为云南首位通过手机自主补领居民身份证的申领人付宏强。 缪超 摄 中新网昆明1月22日电 (缪超)春节临近&#xff0c;云南实现手机自主补(换)领居民身份证&#xff0c;首张通过手机补办的居民身份证于22日在武定县公安局狮山派出所成功申领。 据悉&#xff0c;为方便民众因遗失…

NDK JNI 安装与配置(一)(UBUNTU16.04 )

1、下载Android NDK自解压包&#xff0c;官方地址&#xff1a;https://developer.android.com/ndk/downloads/index.html#download下载&#xff1a;$ wget -c http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin2、解压&#xff0c;将Android NDK压缩包解压到…

【数据结构】顺序表的应用(4)(C语言)

【数据结构】顺序表的应用&#xff08;1&#xff09;&#xff08;C语言&#xff09; 【数据结构】顺序表的应用&#xff08;2&#xff09;&#xff08;C语言&#xff09; 【数据结构】顺序表的应用&#xff08;3&#xff09;&#xff08;C语言&#xff09; 设计一个算法&…

Java泛型:泛型类、泛型接口和泛型方法

2019独角兽企业重金招聘Python工程师标准>>> 根据《Java编程思想 &#xff08;第4版&#xff09;》中的描述&#xff0c;泛型出现的动机在于&#xff1a;有许多原因促成了泛型的出现&#xff0c;而最引人注意的一个原因&#xff0c;就是为了创建容器类。 泛型类 容器…

POJ 2456 Aggressive cows(二分答案)

Aggressive cowsTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 22674 Accepted: 10636Description Farmer John has built a new long barn, with N (2 < N < 100,000) stalls. The stalls are located along a straight line at positions x1,...,xN (0…

JMeter打开脚本报错处理方法

今天电脑重装了系统&#xff0c;安装好jmeter后打开以前写的脚本&#xff0c;总是报错如下图&#xff0c;研究了半天也没搞明白。 后来一个群里的人员提醒才想起来&#xff0c;是脚本的问题&#xff0c;为啥捏&#xff1f; 因为之前写的脚本用了一些监听&#xff0c;而这些监听…

Android开发中libs包下面的mips、armeabi、armeabi-v7a和x86

简介 在Android日常的开发过程中有的项目需要引入第三方的库&#xff0c;有时候大家可能会在libs文件夹下看到 mips、armeabi、armeabi-v7a和x86这四个文件夹。那么这三个文件夹下面的包是干什么用的&#xff1f; 这三个包下面存放的用C编译的本地库文件&#xff08;各类『.…