最近写了「当程序员老去」「程序员真正的价值」两篇文章,传播甚广,今天是第三篇:「程序员如何选择技术方向」,史称「程序员三部曲」。

  那之前写的几篇程序员文章算什么呢?算前传吧。以后再写程序员文章算什么呢?算后记吧。

  2008年秋天的一个午后,温暖的阳光透过落地窗落在我面前这个长长的写字桌上,桌子对面坐的是一个瘦小的程序员,他的名字叫小明,小明有些茫然,他看着我,不知道该说些什么。

  程序员都是很严谨的,我不得不首先发出一个 System Call:

  你在客户现场这半年做什么工作?

  写单元测试。

  还有呢?

  没了,就一直写 JUnit。

  别人也写单元测试么?

  没人愿意写单元测试,只有我写。

  ……

  你为什么想来研究院呢?

  我想写一些真正的程序。

  什么是真正的程序?

  比如 Java,比如面向对象编程,你总要写一些类和各种各样的方法,而不是一直写 Test Case。

  好的,沿着这个楼梯上三楼,那里有一群和你一样的程序员,他们不仅写 Java,还写 JavaEE 相关的各种程序,你会找到自己需要的东西。

  真的么?

  真的

  那时候我风华正茂,没有现在这么老成持重,阳光照在我的翘着二郎腿的脚面上,一切都显得十分虚 幻,在小明的眼里,那时的我估计很像「黑客帝国」里的墨菲斯,但是他不能确定自己是不是「The One」。小明疑惑的看了我一会,最终还是上楼了。至此,他完成了第一次技术方向的选择。在三楼,他碰到了一群同样严谨的程序员,他不仅学会了写真正的 Java 程序,而且掌握了部分 Web 编程和服务器端编程,包括 JavaScript、JQuery、Spring、Hibernate、JMX、Web Service 等等。小明变得快乐起来,渐渐摆脱了注定孤独一生的阴影。

  过了一段时间以后,小明已经不满足只写 Java 相关的程序了。有一天他看到我手里的 iPhone 和 Mac,仿佛见到了初恋的情人,眼中重新燃起了绿油油的光芒,他知道了 iOS 开发者这回事。很快,他花掉了所有的银子购买了 Mac 和 iPhone,开始日夜兼程,学习 iOS 开发。他在写 Java 的间隙编写 Objective-C 代码,在编译 Web App 的同时构建 IPA,在清晨的微光中调试程序,在每个夜晚与模拟器窃窃私语……他完成了第二个阶段的技术方向选择。

  终于到了离别的时候,他要去寻找更大的梦想,经年以 后,在南方的某个城市,他成了一个知名公司的 iOS 主程,并开发出了多个著名的 iOS 应用,比如「丁香医生」「用药助手」「家庭用药」等等,难以想象,如果没有小明,张老师怎么去见小姨子,冯老师何以拯救互联网,二爷怎么鉴书,西湖何以养 醋鱼!

  第一个故事讲完了,主角小明利用两次主动的技术方向选择,完成了从小球到小牛的逆袭,以至于现在连女朋友都有了。

  这时候就有读者要问了,那些大牛是如何做技术选择呢?

  大牛不需要做技术方向的选择,他们需要什么就学什么,学什么就成什么。他们就象掌握了「九阳神功」的张无忌,各种类型的技术和程序到了他们的手里都能发挥出巨大的威力。技术,是他们生命中最重要的组成部分。

  如果你们以为我在吹牛我就给你举个例子。我在 《MacTalk·人生元编程》中写过一个技术高手,他的名字叫做攀攀。很长一段时间我都不知道他掌握了哪些技术,因为他的技术是我们很多人的超集,我们 遇到的所有问题都可以在他那里得到解决,他只是叼着烟翘着腿敲下几行代码而已。后来我才知道,他在高中的时候已经痴迷于计算机了,大学时代自学了大量的计 算机相关的知识,操作系统、数据结构、算法在他大学毕业之后就已了然于胸。

  直到最近,我才从网路上拿到一份他几年前的简介,那个时候,他的履历是这样的:

  ID :攀攀

  性别:男

  师门:电子科技大学 98 年计算机系

  职业:网络引擎设计者

  人物背景:精通 C, C++, Java , Pascal, Basic, Fortran, Cobol, PL/M, Perl, Python, Lisp, Prolog, Smalltalk 、 bind 、 Ldap 、 PVM 、 MPI 、编程自动化、 Linux 核心代码, JDK 源码, GLibc 源码, Apache 源码、常见的网络协议内部实现、网络通讯……是真的精通

  武学造诣:决不要把计算机强加给人们的限制认为理所当然,人不是机器的奴隶,把了解机器的限制作为通晓计算机的标准只能是自欺欺人

  游戏感言:IP 路由和认证的双重功能将是未来网络游戏发展的障碍,今后的网络应该是以分布式目录服务为基础的,以网络设备为中心,与具体主机无关。集成了广泛的认证与授权能力的网络(全公司上下没有人能听得懂他在说什么,好在大伙儿都已经习惯了)。

  都是98年毕业的,人和人的差距怎么那么大呢?无语泪千行!

  两个故事讲完了,究竟如何做技术方向的选择呢?答案就飘在风里……

  1、操作系统、数据结构、算法、网络等基础技术应该在大学时代深入学习,如果毕业了你还没有掌握这些内容,那就随用随学好了。学习这些基础理论极为枯燥,只有实际工作中的需求才能给你最大的学习动力去掌握这些艰深的内容。

  2、至少要掌握一门静态语言,比如 C、C++、Java、C#、Objective-C 等。至少掌握一门动态语言,比如 Python、Ruby、PHP 等。

  3、推荐学习一些同时具备动态语言和静态语言的特性语言,比如 Go、Swift、Scala 等。这样你会对面向对象编程、面向过程编程、编译型、解释型语言有更深入的了解。

  4、系统的构建自己的知识体系,而不是局限在某个点 上。经常有读者问我,我前几年一直在写 VBA/ActionScript/Delphi/SQL ……现在项目组突然不再采用这些语言了,怎么办?很多人难以预料未来技术的走向,但是你至少要构建自己的技术壁垒和平台。学习 Java,就应该构建你自己的 JavaEE 平台;Objective-C 对应 iOS/OS X 开发平台;C#,对应 .Net 平台,SQL,对应数据库平台。如果你在用 ActionScript,那你不应该局限在 Flex 上,你对应的是整个前端平台。

  立足平台,你会站得很稳。立足一个点,你可能摔的很惨,就是这样。

  5、主动选择技术方向比被动等待好。根据自己的兴趣和技术的发展主动选择,就像小明一样,有时候放弃也意味着得到。

  6、不要过于追新,不要每出一门「颠覆性」的语言或 技术都投入精力物力。追新的后果很可能是该学的没学会,不该学的学完也忘了。我有一哥们,我们都在写 JavaScript 的时候,他认为 Java 新推出的 JavaFX 才是前端的未来……然后就没有然后了。我们都用 Java 的时候,他认为 ERlang 是才是编程语言的未来……然后就没有然后了,可谓一步早,步步早,让人扼腕叹息。

  7、也不要过于保守,比如 Go、Swift、Docker 等技术,我个人以为是值得投入时间和精力的技术。

  没有 8 了,写到这里,冬夜已经黑的不像样子。站在阳台望出去,仿佛看着某个巨大 IDE 的黑色编码主题,我想起了某位大牛的一句话:我不是懂得多,我只是学的快而已。

  本文转载于傻子豆饼的PHP博客:http://www.shazidoubing.com/fyb/345.html

程序员如何选择技术方向相关推荐

  1. 程序员如何选择有价值的开源方向?

    这篇文章不是纯粹的技术文章, 更多的是我对编程技术, 国内技术社区, 以及自身技术之路的一个回顾和总结, 我会将自己的技术价值观和开源经验, 和大家一一分享. 如果你也曾对作为程序员的未来迷茫过, 相 ...

  2. 选择技术方向都要考虑哪些因素

    本文主要是作者读安晓辉老师的<程序员职场进阶 32 讲 >中关于"选择技术方向都要考虑哪些因素"这部分做的一些笔记和自己的思考.在这里分享给各位! 选择一种技术可能会考 ...

  3. java职业发展路线图_Java程序员如何选择未来的职业路线

    一.程序员的特性 技术出身的职场人特性很明显,与做市场.业务出身的职场人区别尤其明显.IT行业中常见的一些职场角色:老板.项目经理.产品经理.需求分析师.设计师.开发工程师.运维工程师等.开发工程师具 ...

  4. Java程序员如何选择未来的职业路线

    本人从2008年毕业,作为一名软件开发程序员,开始正式踏入软件开发行业,转眼间已是9个年头了.做过初级软件工程师.高级软件工程师.项目主管.技术经理.项目经理.近些年带过开发团队.参与招聘面试.今天把 ...

  5. 程序员如何选择未来的职业路线

    作者 | 刘蔡涛 地址 | http://www.cnblogs.com/Andon_liu 声明 | 本文是 刘蔡涛 原创,已获授权发布, 未经原作者允许请勿转载 本人从 2008 年毕业,作为一名 ...

  6. 程序员如何从技术岗转为技术管理层

    有一个非常有趣的现象:据说大部分的技术管理者,在其从程序员转为管理岗位的时候,都是在领导或公司的要求下,被动的推到管理岗位上的,并非是自己当初有强烈意愿.主动去选择管理岗的.这种被动的比例还不低,高达 ...

  7. 程序员如何从技术岗转为技术管理层?

    有一个非常有趣的现象:据说大部分的技术管理者,在其从程序员转为管理岗位的时候,都是在领导或公司的要求下,被动的推到管理岗位上的,并非是自己当初有强烈意愿.主动去选择管理岗的.这种被动的比例还不低,高达 ...

  8. 如何选择技术方向和编程语言

    如何选择技术方向和编程语言 如何选择技术方向和编程语言,大概是新人们最困惑的问题之一了,当然也是我被问到最多的问题之一.这里就和大家详细的聊聊. 先选技术方向,再选语言 各种语言都各有所长,所以在选择 ...

  9. 好程序员web前端技术分享媒体查询

    为什么80%的码农都做不了架构师?>>>    好程序员web前端技术分享媒体查询 什么是媒体查询 媒体查询可以让我们根据设备显示器的特性(如视口宽度.屏幕比例.设备方向:横向或纵向 ...

最新文章

  1. 怎么改mnist数据的标签_【Pytorch】多个数据集联合读取
  2. 诺奖得主涉嫌学术不端!30余篇论文被指涉嫌P图造假、复制粘贴,合作者包括中国学者...
  3. 20165330 结对编程项目-四则运算 第一周
  4. h5关于选择器以及class的小加强
  5. jmc线程转储_如何分析线程转储– IBM VM
  6. 虚拟机VMware Workstation与主机间共享文件(利用虚拟光驱)
  7. 接口测试工具-Jmeter使用笔记(四:响应断言)
  8. notify和notifyall的区别
  9. 坚持就是成功,没有成功就是你失败的次数太少
  10. win10蓝屏提示重新启动_Win10系统开机提示Winload.efi丢失的蓝屏问题怎么解决?
  11. Ubuntu总是默认进入客人会话问题解决
  12. DeepLearning初窥门径
  13. bash中的字符串长度
  14. 如何通过QQ邮箱获取授权码
  15. The bean ‘xxx‘ could not be injected as a ‘xxx‘because it is a JDK dynamic proxy that implements错误解决
  16. 13天Java进阶笔记-day7-异常、线程
  17. Win 系统 CUDA 环境配置及卸载
  18. Paper之ICML:2009年~2019年ICML历年最佳论文简介及其解读—(International Conference on Machine Learning,国际机器学习大会)
  19. 如何写好软件项目的工作计划-项目假设(三)
  20. 重整晋商雄风,再现汇通天下 -------《晋商》阅读笔记第1-4章

热门文章

  1. Linux操作系统下的串口通信
  2. JUC第六讲:ThreadLocal/InheritableThreadLocal详解/TTL-MDC日志上下文实践
  3. 用ffmpeg转换flv至mpeg
  4. python电影情感评论分析_python--电影评论文本情感分类
  5. 手绘线条一直画不直_板绘手不稳线画不直怎么办?
  6. 打发时光的100个网站
  7. 基于android餐馆点餐系统报告感想,基于Android的餐厅点餐系统的设计与实现
  8. python判断火车票座位号分布图_火车票座位号分布图图解(是否靠窗)
  9. java我的世界填充方块,【我的世界手游如何快速填充方块】我的世界MC中如何快速填满一个平面的方块...
  10. ASP.NET MVC-4种过滤器