谈一谈程序员的成长过程

发布日期:2012-08-30 14:15:46

  我觉的程序员的成长速度取觉于两点:

  第一:基础知识.

  第二:后天的努力.

  本人以一个例子说明基础知识对于程序员发展的重要性:

  分油问题:

  两个小孩去打油,一人带了一个一斤的空瓶,另一个带了一个七两和一个三两的空瓶。原计划各打一斤油,可是由于所带的钱不够,只好合打了一斤油,在回家的路上,二人想平分这一斤油,可是又没有其它工具。现只用这三个瓶子(一斤、七两、三两)精确地分出两个半斤油来。

  当时我看到这个问题,在纸上画了一阵,一头雾水.最后只有放弃,正确的答案思路是这样的:

  通过分析题目并结合深度优先、广度优先和迭代加深搜索的算法的特点以及有缺点,这里选择广度优先算法来求解该分油问题。如果采用深度优先算法搜索,由于其盲目性导致搜索陷入局部陷阱,并不一定能求得解即使得到解也不一定是最优解,因此并不采用此算法。迭代加深搜索则是在固定的深度上进行深度和广度搜索结合的策略来进行搜索,这样避免了单一的深度搜索无法得到解的缺点,但是找到的解并不一定是最优解。广度优先以牺牲空间代价和时间代价来换取保证取得最优解。由于该问题并不复杂,即使使用广度优先算法也不会占有太多的空间和时间,因此为了取得最优解这里选择广度优先算法来求解。

  原来是应用了数据结构中的算法.如果你在大学期间没有上好数据结构这课的话,这个问题要想解决可能存在不小的问题,起码本人就是其中的一个.

  本人是自考出生,学习期间难免没有正规在校学生学的系统,起码学习环境上比较差.学习期间学了C,数据库原理,数据结构,但印象都不深,自己根本就不太会编写C程序,只是明白些基本的语法.至于数据结构这方面当然就只算是听过课,谈不上理解,更谈不上实际应用.例如比较经典的算法题;大牛生小牛的问题,如果你对递归算法没有特别深入的理解的话,你很难想到用递归算法去解决。想到用什么方案后,你的问题基本已经解决一半.

  在一次去书店的时候,我发现在有的书名叫asp.net,我觉的好奇,因为我学的是ASP,觉得asp.net非常有意思,当时看了下内容,一下子就被DataGrid强大的功能给征服了,因为我发现用DataGrid可以非常方便的实现分页,当时马上决定学习.net,就这样我开始认识.net,当然主要是ASP.NET这方面.

  刚开始在工作中应用DataGrid,分页特别爽,不用写太多的代码,后来同事告诉我说这种要页方式不好,是假分页。后来经过指点才知道,DataGrid分页的原理,知道了它的原理后你才知道它的优点和缺点,才能写出以后的自定义分页。.net编程并不是简单的拖放几个服务器控件,要清楚服务器控件是如何运行的,如何自定义服务器控件,以及扩展原有的控件。

  在我后来的学习当中让我明白了一个道理,基础太重要。如果你对OOP,OOA,OOD不是特别了解的话,你很难写出扩展性强,维护性,可阅读性强的程序.

  现在很多的技术虽然我会,但是不一定能够用书面的方式描述清楚,因为缺少理论知识.这让我想起了有人说学校的知识没有的话,其实并不然,学校学的固然不能当饭吃,但它是一个重要的思想,只有具备了这种思想人才具备解决某种问题的能力.就像上面打油的问题,如果你对那些数据算法不太清楚的话,想找出答案我怕花的时候会多很多,想对了方向才会事半功倍。

  在原文中提到了一点:2.尽量缩小研究范围

  本人有自己的观点:觉得要看你所处的环境。

  如果你身在一个大公司,开发的都是特别大的项目,团队成员多,而且技术都强,那么你此时就要缩小研究范围,只有你在某方面有成就你才有生存的空间。

  如果你身在一个小公司,团队就那么几个人,这时,你必须会相对多的技术,小项目用的技术可能会非常多,但不会太难,太深,太复杂,所以会要求你的知识面广但并不要求特别精通。

  所以我觉得要根据自己当下的项目开发环境,决定你研究的知识范围。

  在原文的评论中,大家对于程序员追求新技术给出了相应的看法,认为不要盲目的去追求新技术,掌握现在技术的同时关注新的技术。我个人也非常认可。

  本人自我觉得是个对新技术特别热衷的程序员,有什么新的技术书籍出来了我都会去买,但往往因为和实际开发环境不太匹配,说白点就是有的项目根本就用不上,这样会大大的降低我学习的积极性。所谓实践出真知,老是写demo......,而且新技术的速度太快,人非圣人,我想大部分分程序员都不可能全学会。况且如果你什么都会的话,那团队就失去它的作用了。一味的追求还会出现园友们说的现象,每种技术都停留在表面,每方面都是学而不精。