有读者留言说:“希望能写写前期阶段程序员的发展经历。” 收到这个问题后确实引发了我的一些回忆和思考,回想如果让我再重走一遍过来的路,在哪些方面还需要去改善呢?

以前并没有提及如何去做才能更好更快的发展成长,所以本篇借用了一个大家耳熟能详的名称模式,从一个稍微高一层的抽象维度来回答 How 的问题。

定位

还记得当初为什么选择程序员这个职业么?如今程序员所在的行业处于发展上升期,薪酬待遇整体高于传统行业,所以各类程序员培训机构如雨后春笋,流水线般的为各类只差程序员的公司批量供应,这样的批量生产似乎有点把程序员当成了工厂的工人。

而程序员的工作实际更贴近于工匠,既有创造性的工艺性工作,也有模式化的工程性工作。想清楚自己成为程序员的初衷是什么?只是为了进入一个相对高薪的行业,得到一份工资高于平均水准的工作?这样终究是走不了太远的。

很多入门程序员都是刚从学校毕业的,曾记得在吴多益(@nwind)的一篇工程师成长分享的材料上,如是说:

从小到大的教育,我们习惯性被安排:“课后作业是 X1、X2,后天必须交”,“本学期的必修课有 XX、YY,必选的选修课有 ZZ、WW”。

十几年来你都是这样度过的,但现在你已经不在学校了,你要安排你的未来

刚入职场的程序员依然保持这个习惯,等着主管安排,工作就是完成主管安排的任务吗?好吧,这只是工作的一部分。如果你每天的工作就只是完成被安排好的任务,那么你自己的成长就会非常的慢,因为主管安排任务并没有那么多的精力来考虑任务是否适合个人的成长发展。这些任务是组织发展的需要,而不一定适合个人的发展,但组织是付了薪酬来让你完成任务的,所以这是工作的必需部分。

自己才是职业生涯的管理者,想清楚自己的发展路径:远期的理想是什么?近期的规划是什么?而今日的任务和功课又是什么?今日之任务或功课哪些有助于近期之规划的实现,而近期之规划是否有利于远期之理想?

今日除了任务为什么还有功课?功课是学校里的概念,职场里没有。所以离开学校进入职场的功课都是自己给自己安排的。任务来自主管的安排,功课来自自己的安排。很多时候我们只去完成任务却从未给自己安排功课,而等着被安排和主动安排,在未来将产生巨大的差别。

一开始我们可能只有模糊的远期理想,也没那么清晰的近期规划,但一定要有足够清晰明确的今日任务和功课,即使在你的主管因为各种原因没给你安排的情况下。方向不太可能一朝定好,就不管不顾埋头走路。需要定期检视,抬头看路,因为如今环境和大势的变化也是很快。在边走边看的过程中逐步就清晰了近期的规划甚至远期的理想。而主管在你职业发展的路上,除了大部分时候给你安排任务,偶尔也可能给你创造机会,而机会出现时你能否抓住,全在今日功课上。

学习

在《浪潮之巅》一书中,吴军博士写道:

国内: 小时候努力,到大学后就不努力了

国外: 到大学后才开始努力,很快就超过国内学生

这反应了我们教育中作为学生的一种心态,觉得毕业了离开学校了就不需要多努力学习了。但程序员这个职业所面临的技术发展和更迭远超其他行业,你即便只是为了能够保质保量的完成任务,就需要保持持续学习。

而且在面临信息和技术爆炸的时代,还要有选择性的学习。我读大学那阵,学程序期间喜欢电脑,就爱帮同学 DIY 装个机什么的,而且还反复折腾安装操作系统。那时的 Windows 系统的特点就是越用越慢,一年半载需重装一次就又恢复了,但这些折腾其实都不属于程序员的学习范围(题外话:如今用 Mac 再也不浪费精力操心装系统的事了)。

而有选择性的学习在于需要找出真正与你近期规划有关的学习路径。假如你工作入职后公司使用 Java 为主要开发语言,而大学里你一直学习使用 C 或 C++ 编程练习。这里再假设你对计算机相关的基础性学科和知识掌握良好,比如:操作系统、数据库、网络、组成原理、编译原理、算法基础、数据结构等等。那么为了更好的完成工作任务,就需要学习 Java 编程语言、技术相关的东西。

如果你想要学习Java的话,我给你分享一些Java的学习资料,你不用浪费时间到处搜了,从Java入门到精通的资料我都给你整理好了,这些资料都是我做Java这几年整理的Java最新学习路线,Java笔试题,Java面试题,Java零基础到精通视频课程,Java开发工具,Java练手项目,Java电子书,Java学习笔记,PDF文档教程,Java程序员面经,Java求职简历模板等,这些资料对你接下来学习Java一定会带来非常大的帮助,每个Java初学者都必备,请你进我的Java技术qq交流群127522921自行下载,所有资料都在群文件里,进去要跟大家多交流学习哦。

对于学习语言本身我觉得最高效的方法就是看一本该领域的经典入门书,比如对于 Java 就是 Thinking in Java,这是我称为第一维度的书,聚焦于一个技术领域讲得透彻清晰。在有了该语言的一些实际编程和工程经验后就可以看一些该领域第二维度的书,比如:Effective Java,The Art of Unix Programming 这是聚焦于特定领域经验总结型的书。

而另外一些像 Java 开发需要大量使用开源框架又该如何学习?微爱 CTO 张铁蕾同学曾写过一篇《技术的正宗与野路子》 里面介绍了如何用真正「正宗」的方式去学习并快速掌握这些层出不穷的开源新框架和技术。

借用张铁蕾同学原文里的一张图,每一项开源框架或技术相关的信息可以组织成上面这张金字塔结构图。Tutorial 和 API Reference 层次的信息资料帮助我们快速上手开发,而 Spec 和 Code 帮助我们深刻理解这门技术。而其他相关的技术书籍和文章其实是作为一种补充阅读,好的技术书籍和文章应该有官方资料中未涵盖的特定经验或实践才算值得一读。更多学习的细节建议大家直接看上面这篇原文吧。

自省

乔治·海尔迈耶(George Heilmeier,1936-2014),一位美国工程师、技术管理者。他是液晶显示技术的主要发明者之一。他在科研领域最著名的事情就是他提出的「海尔迈耶系列问题」:

你要做什么?不要用术语,清晰的表述你的目标。

这件事现在是怎么做的?现在的做法有什么局限?

谁在关心?你的方法有哪些创新?你为什么觉得你的方法能够成功?

如果你的方法能够成功,它能带来怎样的变化?

你的方法需要花多少钱?需要花费多少资源?要怎样在过程中和结束进行评估?

我觉得用在学习成长上也有异曲同工之妙,因为现在的技术方向和路线太多,即使选定了路线依然会有很多茫然,有时我们想要学习一门新技术或在项目中引入一项技术,就可以试试套用「海尔迈耶系列问题」来自省一番。

你学习这门技术的目标是什么?

这个技术现在是怎么做的?有什么局限吗?

这个技术有什么创新之处,为什么它能够取得成功,要是在项目中引入这个技术,谁会关心?

如果它能成功,会给我们带来怎样的变化?

采用这门技术的成本、风险和收益比如何,我需要花费多少资源(时间、金钱),如何去评估它的效果?

程序员有时粗浅的学习并了解了一点新技术,就想着如何应用到真实的项目中。用上面的问题来问问自己,如果有回答不上来的,说明你对这门技术掌握并不充分,那就还不足以应用到实际项目里。

多维

有些程序员写了两年代码觉得太枯燥就想着是不是可以转管理,比如转技术主管之类的。李笑来老师也曾写过一篇文章《从平庸走向卓越的最佳策略》,里面提到的最佳策略就是:“多维度打造竞争力”。从技术到管理似乎就是一条多维度的发展路径,是这样吗?

但是,李笑来老师那篇文章的策略有个前提就是先要在一个维度做到足够突出,用 100 分作为满分评价的话,在一个维度上需要达到 95 分。而这个足够突出的维度,实际上就是你现在赖以生存的维度,又称基础维度,这是其他维度得以发展的根基。

所以,若你真想在程序员这条道路上从入门到精通,选择了这个维度作为基础维度,就需要不断在这个维度去精进。有一本书叫《程序员修炼之道:从小工到专家》 和本文的主题很类似,只是写作的维度更贴近细节。这本书中文版最早出版于 2004 年,而英文版可能还要早两年,已经十多年了。我查了下豆瓣书评,一共三个版本加起来才 2000 多条,可见十多年来读过的人确实不多。

关于本书,最好的评价来自 Ward Cunningham:

本书美之所在:它体现它的哲学,以如此谦逊的方式。

本书的哲学将渗入你的意识,并与你自己的哲学交融在一起。

它不鼓吹,它只是讲述什么可行。

但在讲述中却又有更多的东西到临,我们有时称之为「无名的品质」(Quality without a name)

我刚工作那年读了一遍,其实领悟很少;工作第六年又读了一遍,感觉好多共鸣之处;最近思考本文主题时又想起这本书却发现记不起细节了,于是又读了一遍;这回我终于学会了如何强力研读一本书,写了满满的读书笔记和批注,发现很多道理和路径这本书里都详细的解释了,而且神奇的是十多年来除了书中提及的一些举例用的技术有些过时,其他方面依然是金科玉律,值得好好品鉴。书里涵盖了一名程序员真正面临的一些问题:

与软件腐烂作斗争

避开重复知识的陷阱

编写灵活、动态、可适应的代码

防止靠巧合编程

使你的代码“防弹”

捕捉真正的需求

无情而有效的测试

让你的用户满意

建立注重实效的团队

无处不在的自动化

而过去十年我一直都在与这些问题做斗争,当这些问题倒下而你还在程序员的阵地上,想必那时你就会让人感受到那种「无名的品质」,那么你也就走完了程序员从入门到精通之路。

按一万小时理论即便你在一个领域每天浸淫 10 小时以上,最快估计要精通一个领域也需要三年,这里还没算休息或突发状况的干扰,所以实际上也许需要五年。成长需要时间,不必觉得目标太远而乏力。保持每年、每月、每天都略有进步就好。

...

这是一篇从入门到精通的索引,定位程序员的职业道路,学会学习的方法与路径,保持自省的态度,达成程序员这一维的精通,再走向多维。路漫漫,吾等将持续求索。

此刻瞬间

关于精通的概念,每个人的理解可能会有不同,但我是不认同精通就是无所不知的,那么几乎无人敢说精通任何一个领域。

我认为的精通无非两个层面。第一,如学校学过的卖油翁所说:“无他, 惟手熟尔。” ;第二,在一个领域形成自己的体系和方法论。第一个层面达成了品质和效率,第二个层面达成了扩展性,具备了很快从一个细分领域到另一个关联领域的「精通」能力。

最后

如果你想要学习Java的话,我给你分享一些Java的学习资料,你不用浪费时间到处搜了,从Java入门到精通的资料我都给你整理好了,这些资料都是我做Java这几年整理的Java最新学习路线,Java笔试题,Java面试题,Java零基础到精通视频课程,Java开发工具,Java练手项目,Java电子书,Java学习笔记,PDF文档教程,Java程序员面经,Java求职简历模板等,这些资料对你接下来学习Java一定会带来非常大的帮助,每个Java初学者都必备,请你进我的Java技术qq交流群127522921自行下载,所有资料都在群文件里,进去要跟大家多交流学习哦。

Java 入门到精通的过程相关推荐

  1. Java入门到精通要多久??

    0基础到学会WEB和安卓开发,最快六个月能搞定,如果有其它语言基础可以更快.精通就不好说了,那是思想上的东西. 1.看到过好多个这样的提问,其实我一般真的不那么容易分享自己的这点心得的,这是第一次回答 ...

  2. JAVA入门到精通-第94讲-山寨QQ项目8-好友在线提示

    遇到的问题: 现在每登录一个人,后面的人是能看到前面的登录的人的: 但是,前面的人看不到后面的人登录: //后面每登录一个人,有责任去通知前面登录的人他已经上线了: 通知了完以后,需要更改好友在线的情 ...

  3. 2023年黑马Java入门到精通教程--Java基础入门

    推荐教程:java零基础入门到精通 如何使用Java Java语言的产品是 JDK(Java Development Kit :Java开发者工具包) ,必须安装JDK才能使用Java语言. JDK产 ...

  4. [转,借鉴]Java学习从入门到精通-过程篇

    每个人的学习方法是不同的,一个人的方法不见得适合另一个人,我只能是谈自己的学习方法.因为我 学习Java是完全自学的,从来没有问过别人,所以学习的过程基本上完全是自己摸索出来的.我也不知道 这种方法是 ...

  5. Java入门到精通——第一单元

    第一单元 java基础 本单元教学目标 (Ⅰ)重点知识目标 (Ⅱ)能力目标 1.1 java语言概述 1.1.1 java语言介绍★★ 1.1.2 Java语言发展历史★★ 1.1.3 Java语言能 ...

  6. 最新Java学习路线,java入门到精通,Java自学者的福利

    前言 如果你想自学 Java,认真看完本文,你以后的职场生涯至少少走1年弯路. 行业现状 程序员现状 由于程序员的薪水比较高,最近几年有很多其他专业的人涌进了程序员行业,加速了这个行业的内卷,但是据某 ...

  7. JAVA入门到精通-第6讲-成员属性-成员方法

    b.age=10; 它是根据age和name所占的数据类型还划分空间的: b没有赋值,孤零零地放在那; b=a: 让b也指向a所指向的空间,实际上是一个引用: 再次证明,其实指向的是同一块空间:引用传 ...

  8. JAVA入门到精通-第38讲-线程-坦克大战6

    应用程序在内存中开辟空间-进程: 内存-大脑容量: 反应切换的速度-CPU: 试图去尝试别的进程的地址空间---病毒: 线程是由进程(应用程序)创建的: 涉及到并发,就会涉及到线程:迅雷下载: 线程不 ...

  9. JAVA入门到精通-第73讲-学生管理系统5-dao.sqlhelper

    -Model2模式 如果数据模型会很多,怎么办? 处理业务逻辑的:Model层 后台又分为:处理业务逻辑和对数据库的操作DAO-data access object -决定,再抽象一层出来:数据模型: ...

最新文章

  1. 一场高质量的技术盛会怎样炼成?「2019中国大数据技术大会」蓄势待发,还不快上车?...
  2. MPB:中科院深圳先进院戴磊组小鼠粪便样本中16S拷贝数的定量检测
  3. python3 装饰器_python3装饰器
  4. 一个不错的MYSQL数据库备份类,PHP版,一个文件,精简版
  5. 动态构建LINQ表达式
  6. MIT计算机专业本硕连读几年,2020年麻省理工学院读研要多久
  7. 链表去重 保留第一个元素
  8. 中国第一朵云,花了足足9年
  9. java 男女 相邻交换 队形_(Java实现) 洛谷 P1091合唱队形
  10. 四级网络工程师试题一
  11. 原创力文档怎么免费下载_简历模板免费资源 word文档模板下载
  12. unity编辑器拓展九——删除场景中丢失的脚本
  13. 自制卡牌游戏Python
  14. 【课程学习】(中国大学MOOC)武汉理工大学高级人工智能原理与技术课后习题笔记(1-5章)
  15. [百合原帖]由《联合早报》的一篇文章……
  16. 黄色-图片识别引擎的一些心得
  17. 前台--中台--后台,什么是中台呢?看这一篇足矣
  18. 解决语雀导出markdown后图片无法显示问题(无需运行脚本)
  19. Qt QTabWidget详解
  20. 日历相关的东西和算法

热门文章

  1. python迅雷sdk_Python批量创建迅雷任务及创建多个文件
  2. 洛谷 p2404 自然数拆分问题
  3. mysql 如何看索引命中_mysql索引命中规则讲解
  4. 秒 毫秒 微秒 纳秒 皮秒
  5. CodeForces 1K-1600R-1407C Chocolate Bunny
  6. Configure: error: C preprocessor “/lib/cpp“ fails sanity check
  7. 开始iOS 7中自动布局教程(二)
  8. php英文文献翻译,php外文文献翻译_英语论文
  9. python输出大字号汉字_Python print 玩转点阵字
  10. 杜君立:紧箍咒与纸枷锁