有个小伙伴在微信上问我:

我刚工作半年,有时候对于Java的发展方向有点迷茫,Java的范围是在是太广了,我有时候会不知道从哪开始入手,我想问一下,您有什么好的建议吗?

我理解这位朋友的问题是:工作中该如何发现自己要学什么,怎样构建自己的技能树。这是一个非常重要的问题,假如你不知道要学什么,那一旦你工作不那么忙时就会觉得无聊,只能通过浏览新闻、看小说、打游戏等方式消磨时间消耗自己。这对自己的成长和增值非常不利。所以,这次咱就来聊聊工作中学什么这个话题。

根据我的经验,在开发过程中,有两种学习策略:一种是横向拓展,也可以称之为广度学习;一种是纵向深入,也可以称之为深度学习。如果能贯彻这两种学习策略,就会慢慢形成程序员最理想的技能结构——T型,即在横向上熟悉足够多的知识和技能,在纵向上又精通某一领域。简单说就是一专多能。

 

广度学习

以C++语言为例,如果你做网络方面的开发,就会遇到选择哪个框架的问题,libevent、ACE、Asio还是Qt Network?如果你做GUI开发,可能会在Qt、CEF、MFC、wxWidgets、DirectUI之间做个选择。

选择和了解的过程,是个人广度学习的过程。你会快速了解每一种框架的优缺点,会搭建环境,会写一些Demo来对关键技术点和需求做验证……最终会根据文档和实验结果来做出实际的选择。这个过程非常难得,会快速拓宽个人的知识面。建议把每次了解到的技术框架都记录下来,有闲暇时可以进一步学习。

即便你不是预研技术方案的工程师,而是别人定方案你来开发,也可以有意地让自己经历这个选择过程,只需要问自己一个问题即可:为什么用A而不是B或C?

其实不单单是大的技术框架选择,小到某个页面要用的某个元素,都会经历选择的过程,有心,就可以用这种以点带面的策略学习到更多。

深度学习

大多数时候我们会使用一门语言和一两种技术框架进行软件产品的开发,此时就是纵向深入学习的好机会。

对技术框架的学习,大体分三个阶段:

基础开发,主要是了解API、基于API完成应用

熟悉内核及原理,主要是了解框架的设计原理,阅读源码,洞悉内在机理

优化框架,主要是针对框架的已有功能的不足进行完善、优化,或者使用框架提供的机制扩展框架功能,或者对框架进行定制,让它适合特定情境

我以Qt为例画了张图,供参考:

很多时候我们经历了第一个阶段——能够使用API进行简单开发——之后就跑别的地方去了(工作需要),然后就把这个框架撂那里不管了,然后就一直停留在那个阶段。建议有时间的话梳理下自己用过的技术,挑出当下工作中还在用的那项,往深里钻,去熟悉原理熟悉内核,有可能的话,也可以优化、扩展或定制。惟其如此,才能对一个框架真正掌握,才会有深度,才会在该项技术上形成自己的价值和竞争力。

小结

不管是广度学习还是深度学习,都是从实际需要出发的,是你工作中要用这门技术你不得不学。明白这点非常关键——你要用到某项技术时才会有学习的动力。所以,最好的学习时机就是一边开发一边学习,白天上班晚上学习,周内上班周末学习——在有明确目标时最有学习动力,在热度还未退却时学习效果最好。

如果你想学习与当下工作内容无关的知识和技能,投资自己的未来价值,那最好的办法是给自己设计一个软件产品(或者参与到别人的项目中),设定一个期限,用你想掌握的技术去完成它。用不到的知识,等于没有,这就是这种说法背后的原理。

所以,没有需求,要创造需求,没有问题,要创造问题,有了需求和问题,学习才更有方向感和目的性,才会有持续下去的动力。如果你能主动创造目标和需求,那你很快就可以建立自己的技能树并让这棵树根深叶茂,你就会越来越值钱,也越来越能赚到更多的钱。

C加加学习之路 2——两招让你成为牛X的T型人才的更多相关文章

  1. jQuery延迟加载(懒加载)插件 – jquery.lazyload.js-Web前端(W3Cways.com) - Web前端学习之路

    Lazy Load 是一个用 JavaScript 编写的 jQuery 插件. 它可以延迟加载长页面中的图片. 在浏览器可视区域外的图片不会被载入, 直到用户将页面滚动到它们所在的位置. 这与图片预 ...

  2. mybatis学习之路----批量更新数据两种方法效率对比

    原文:https://blog.csdn.net/xu1916659422/article/details/77971696/ 上节探讨了批量新增数据,这节探讨批量更新数据两种写法的效率问题. 实现方 ...

  3. .Net基础篇_学习笔记_第四天_加加减减

    using System.Linq; using System.Text; using System.Threading.Tasks; namespace 第四天_加加减减 { class Progr ...

  4. spring源码学习之路---深入AOP(终)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 上一章和各位一起看了一下sp ...

  5. python学习之路-day2-pyth基础2

    一.        模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...

  6. 学习之路三十九:新手学习 - Windows API

    来到了新公司,一开始就要做个程序去获取另外一个程序里的数据,哇,挑战性很大. 经过两周的学习,终于搞定,主要还是对Windows API有了更多的了解. 文中所有的消息常量,API,结构体都整理出来了 ...

  7. OpenGL学习之路(一)

    1 引子 虽然是计算机科班出身,但从小对几何方面的东西就不太感冒,空间想象能力也较差,所以从本科到研究生,基本没接触过<计算机图形学>.为什么说基本没学过呢?因为好奇(尤其是惊叹于三维游戏 ...

  8. 12天学好C语言——记录我的C语言学习之路(Day 12)

    12天学好C语言--记录我的C语言学习之路 Day 12: 进入最后一天的学习,用这样一个程序来综合考量指针和字符串的关系,写完这个程序,你对字符串和指针的理解应该就不错了. //输入一个字符串,内有 ...

  9. 12天学好C语言——记录我的C语言学习之路(Day 11)

    12天学好C语言--记录我的C语言学习之路 Day 11: 因为指针部分比较的难,所以我们花费的时间也是最长的,希望大家耐的住性子,多多理解,多多打代码.好了,废话不多说,来看第11天的学习. //编 ...

随机推荐

  1. css禁止选中文字

    很简单: -moz-user-select:none;/*火狐*/ -webkit-user-select:none;/*webkit浏览器*/ -ms-user-select:none;/*IE10 ...

  2. pyenv的安装和简单使用

    centos7.4   python2.7 安装pyenv需要的依赖 yum -y install gcc zlib-devel bzip2-devel openssl-devel ncurses-d ...

  3. 使Flask的url支持正则表达式以及一个api小demo

    from flask import Flask from flask import jsonify from flask import request from werkzeug.routing im ...

  4. SpringBootSecurity学习(01)网页版登录入门介绍

    Web应用安全管理 Web应用的安全管理,主要包括两个方面的内容,一个是用户身份的认证,即用户登录的设计,二是用户授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理.权限管理的设计一般使用角色 ...

  5. 基于操作系统原理的Linux 的基本操作和常用命令的使用

    一.实验目的 1.学会不同Linux用户登录的方法. 2.掌握常用Linux命令的使用方法. 3.了解Linux命令中参数选项的用法和作用. 二.实验内容 1. 文件操作命令 (1) 查看文件与目录 ...

  6. 2017春季_京东_Java后端研发岗面经

    纸上得来终觉浅,绝知此事要躬行  ——2017春季Java后端研发工程师面试心得 收获offer:上海汉得+北京中科软+成都百词斩+成都诺基亚研发中心+清华大学计算机研究所等offer.阿里一面猝.京 ...

  7. phaser学习总结之Text对象详解

    前言 在phaser学习总结之phaser入门教程中,我们已经入门了phaser,对phaser也有所了解但是我们并没有对phaser中的每个对象的属性和方法进行详解,本章将对phaser中的Text ...

  8. apache中通过mod_rewrite实现伪静态页面的方法

    rewrite规则学习 我们新建一个.htaccess文件之后,就在里面写入以下内容: RewriteEngine on #rewriteengine为重写引擎开关on为开启off为关闭 Rewrit ...

  9. Nginx+Tomcat Https SSL部署方案

    1.软件版本: nginx-1.15+ tomcat-8.0+ 2.先解决一个疑问:Tomcat到底需不需要配置SSL? 答案:不需要 3.SSL申请 使用腾讯云.阿里云的服务器,会更加方便申请.(申 ...

  10. Spring Boot 2.X(三):使用 Spring MVC + MyBatis + Thymeleaf 开发 web 应用

    前言 Spring MVC 是构建在 Servlet API 上的原生框架,并从一开始就包含在 Spring 框架中.本文主要通过简述 Spring MVC 的架构及分析,并用 Spring Boot ...