蓝布编程网

分享编程技术文章,编程语言教程与实战经验

为什么领导跟我说:程序员学算法不是最重要的?

现在的程序员非常幸福和幸运,因为已经有大牛为我们铺好路了。

最开始的计算机知识一堆CPU与内存等硬件,要这它们工作需要直接汇编编写机器指令。

这太麻烦了!一些大牛就研发出高级语言,现在就更方便了,程序不能只运行在一种架构上。为了让程序可以不加改动的导出运行标准库出现了,标准库对上层屏蔽来了底层差异。

程序使用的数据结构和算法也太复杂了,每次都重头写一个二叉树不是一个很有意思的事情,怎么办?

大牛也铺好路了,直接把这些数据结构和算法以库的形式集中到语言中,就像C++的STL、Java的容器,想使用数据结构吗?也很简单,只需要知道数据结构和算法的名字就可以了,剩下的查接口文档就OK 。

这些都是小意思,还有更牛的,搭建一个网站,编写个APP,这些代码不是也又大同小异之处吗?还需要一遍遍造轮子吗?不,框架来了!

想搭建一个网站兼职太容易了,简单几行代码,一个功能全备得web server就跑起来了。

大牛们所他提供得技术,随拿随用,我们根本不用关心下一层是如何实现的。

但是!事情都有两面性,首先你不能再用上还出问题其次你不能被锁死在这一层

其实过来人都知道,能够通过工作中应用的一些案例来切入学习算法,可以说是提升技术竞争力。有了兴趣之后,将算法尽可能的优化,并且套用到一个完整的项目中。那么如果连自己每天的接触的工作业务都没弄清楚,肯定是从实际技术更重要

在实际工作中学习3点很重要:有敏锐的学习意识、建立结果为导向的学习能力、培养工作日常优化的习惯。—— 一个人职业能力的提升,70%都来自于工作本身

如果大家觉得不知道如何在工作中开展学习,下面说点实用的:

做任何工作养成思考和总结:比如我们在看数据的时候,数据背后能反映什么原因?这类的思考总结,会让我们对于业务和技术的理解有一个层次上的提升。

了解行业最佳实践,做到最好:比如某一个技术方向,业界最前沿的方法是什么?解决了什么问题,做到了什么程度,能提升多少增量。再比如,营销环节中,竞品做到了什么程度?

很多人觉得自己所在公司是个小公司,没有什么可以让我学习的,那就大错特错了。以前端举例来说:

前端静态资源是如何组织的?怎么打包的?资源是如何缓存的?这类问题,使用grunt/gulp一类构建工具就可以轻松做到,做了吗?形成UI库,是否可以复用?是否可以定制?或者是否可以拆分?

但是还有一点,当本职工作得心应手之后,我们会意识到,各种底层技术以及数据结构和算法的重要性。本质上来说,这些才是计算机的核心技术,这些核心技术可以帮我们跳跃一个层级。只有有了这样的看见,我们就不会卡在某一层中了。

该怎么进阶

  • Java基础:以深度优先,广度为辅。
  • 集合:基本上就是List、Map、Set,知道底层实现原理,实现类的优缺点。集合要掌握的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的实现原理,当然能掌握CopyOnWrite容器和Queue是再好不过的了。
  • 设计模式:23种设计模式掌握了多少?知道常用的设计模式优缺点吗?能够画出常用设计模式的UML图。
  • 多线程:已经有一定工作经验的,可以深入一些比如Thread和Runnable的区别和联系、多次start一个线程会怎么样、线程有哪些状态。
  • JDK源码:想要高薪JDK源码不可不读。
  • 框架:某些场景之下用框架可以做什么,怎么做?比如Spring的Bean工厂实现的UML图可以画出来吗?
  • 数据库:基础和优化相关的内容。
  • 数据结构和算法:对于开发来说,会比不会强。功力点说,这也是面试的必考题。
  • Java虚拟机:(1)Java虚拟机的内存布局(2)GC算法及几种垃圾收集器(3)类加载机制,也就是双亲委派模型(4)Java内存模型(5)happens-before规则(6)volatile关键字使用规则走向大神的路上,一定要会。
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言