软件工程师该怎么学习和提高

    在论坛上看到一个《程序员之路——一个老程序员对刚上大学的学弟学妹的忠告》的帖子,觉得大家对于程序员该怎么学习有挺多困惑和争论。
    首先端正一个态度,我们职位的正规叫法是“软件工程师”而非“程序员”,像样的软件公司,开发人员的职位一栏都会是“软件工程师”而非“程序员”。软件本质上是一种复杂度很高的产品,希望大家对自己的职业有一个基本的归属感而非一味调侃。

    我是一名工作了3年的软件工程师,希望能把自己的学习方式与大家分享,也能抛砖引玉,让更多的人提出更多的学习方法,从而让后来人找到适合自己的。

    我的个人经历是,在上学时并不明白有什么用的情况下,先学习了所有基础的东西(C语言、数据结构、计算机原理、操作系统那种有源代码的、编译原理,软件工程等等),并写了很多的小程序,读研时做了一定规模的项目。然后就工作了,用C开发项目。开发的项目中发现很多不合理和可以改进的地方,就通过与人交流、上网搜索、找对应的书看等方式,慢慢学习到各种面向对象设计(注意面向对象是一种思想而非语言!C同样能实现,只是会有点别扭)、分布式系统、Linux、《代码大全》、重构、测试驱动开发的方法、敏捷软件开发方法等等。然后继续实践做项目,发现问题并寻求解决,从中学习到更多的知识和技能。经过这一轮轮“实践——经验——总结——提炼”的循环过程,逐渐形成自己的一套软件的系统思维,一种对技术的把握的感觉。

    所以我的个人的感觉是,良好的学习方式是一个我称之为“循环迭代“的方式,即“实践——发现问题并通过学习来解决——经验总结提炼——继续实践”。先学习实践中最需要的例如C或java(没有高低贵贱之分,项目适用就好),然后实践,这个实践是指真正的项目实践,而非几百行的小程序,因为量变会引起质变,只有在大规模的项目你才会遇到非常多高层的、有价值的问题例如分布式系统的时序问题、网络程序的可靠性问题。之后在实践中发现问题,并寻找解决问题的方法,这个寻找的过程中会促使你去学习一些书籍,例如大型项目的集成很头疼,通过学习《敏捷软件开发》中的持续集成来解决这个问题,这个过程就学习了敏捷软件开发;再例如遇到底层对应用层的依赖导致的移植、扩展困难的问题,通过学习《设计模式》中的观察者模式来解决了这一问题,这个过程就学习了设计模式。如此循环迭代,对技术的掌握、感觉就会越来越好,兴趣也更浓厚。

    就跟软件工程“没有银弹”一样,这种学习方法也不是能适合每一个人,它需要一个前提,就是软件工程师本人必须是一个勤于实践、善于发现问题和善于总结的人。写的项目太少,缺乏实践,就缺乏必要的经验,无法进入这个“循环迭代”的链。项目写得不是很好,扩展性差,容易出问题,如果不去探究为什么不好、怎么能写好,就会在“循环迭代”的“发现问题并解决”的阶段断链,无法继续。同样发现问题并解决了,但却不总结、提炼,所拥有的也只是经验而已,没有提炼出更高层的抽象、方法、核心,情景稍一变化就又搞不定了。所以使用“循环迭代”学习方式的前提是勤于实践、善于发现问题和善于总结。

    先写到这里,以后有感想再来补充吧。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值