与领域有关和大学阶段的一些思考

工程思维都是通用的

几乎每个计算机相关专业学生都会问一个问题,该选择哪一个方向。我以为的是,就工程方面来讲(当然与一些“科学研究”有所区别),可以选择任一领域开始,这个领域不需要是未来一定从事的,但是它是一个入口,通过这个入口,我们可以窥探整个工程领域的一些思考方式。

举个例子,像一些模块化,组件化,自动化,编码规范,团队协作,版本管理,单元测试,部署运维,设计模式,性能优化等等,这些在各个工程方向都是通用的。无论从前后端还是从原生开发入手。这个入口或多或少都会给自己带来一些思考。

总的来说,这就有点窥一斑,而见全身。

关注特定技能

虽然说我们可以从各个方向去抽象出一些共用的特征,但是每个特定方向也具有自己的特点。举个例子,搞Web开发的需要更多地了解网络知识,而搞嵌入式开发的,更多地要与硬件打交道。

在自己特定的领域可以这样思考,我首先是一个程序员,程序员需要具备的技能要有哪些?算法数据结构?编译原理?设计模式?工程化?然后我们是Web开发者,Web程序员特定的要求又有哪些?网络?数据库?然后我们是前端开发者还是Node开发,PHP开发?到这一层就是一些比较细节的东西,细到语法,框架,具体工具。

而这细的一层,通常可以选择一个方向作为自己的主线,毕竟术业有专攻,总得要有自己最拿得出手的。

开阔自己的思维

如果将自己局限在某一个方向,很容易让自己思维受限,如果是搞前端的,那么他接触到的更多的是动态类型的,弱类型的编程语言。这就需要我们去接触一些静态的,强类型的语言,来丰富自己的编码思维。

如果是一直以一种命令式的OO思维在编程,可以改变一些思维,尝试声明式地FP方式?还有其他编程范式都是值得我们去了解学习的。

习惯了线性的同步式编程思维?为何不去了解了解异步的编程思维?或许对于前端领域这种思维方式已经习以为常,但是有没有和同步的思维进行对比?各种方案并无绝对的优劣,对比学习,将是一个丰富自己思维方式的不错学习方法。

有一些思想在本方向没有什么体现,如单线程多进程与多线程的对比,事件驱动与协程的对比,这些都是值得去从不同方向对比了解的。

软技能很重要

大学阶段肯定不能够只在意于工程研究,而忽视了基础功,大学里工程玩得再牛逼,工具用得再熟练,也比不过已经工作的前辈,因为缺少了一个重要的因素:应用场景。自己做的外包项目,有几个你会去考虑高并发?真正有需要考虑高并发的场景我想也很难交给一个学生去做吧。关于工程,我们能做的,只能尽量去跟紧行业动态,从表面看本质,学习它们的思考方式,尽量去进行实战,将来到了一个环境里,可以更快地与实际工作磨合。

软技能有很多,包括什么学习能力,解决问题的能力,如何提高效率,如何与团队协作,编码能力等等。

大学阶段还是应该多一些深层次的思考,比如事件循环的工作原理?链式调用背后运用了哪些思想?Stream的背后内存是如何管理的?解析js的V8引擎如何工作,JVM如何做优化?我想这些思考一定会为应用层面增加一些后盾力量,有了这些知识储备,会更有底气。

总结

以上只是自己对相关领域与大学阶段的一些简单思考,可能会随着时间的推移产生变化,若有不同看法,欢迎交流。