`
tiantianfei
  • 浏览: 40431 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

5年程序人生路:从新手到项目管理

    博客分类:
  • work
阅读更多
本人普通院校,非计算机专业本科毕业。从毕业到现在也工作有五年了。回忆起程序人生,也颇有一翻滋味。

本人是从大三上学期开始学习计算机的,因为那时电脑突然一下比较普及,本人家里也有能力买台电脑。买了电脑后,最先看的是C语言的数据结构。用电脑调试书里面的各种程序,那时第一次看数据结构,我接近全力去看,但是没看懂多少东西。只是把书里面的代码敲了一遍,运行后看看是否和书里面说的结果是一样。但很多时候,第一次都是没通过调试的,发现不是这里抄错了,就是那里抄错了。通过不断的查找,最后才能运行正确,那时心里就会才生少许的成就感,感觉自己写的程序调通了(虽然只是照着抄了一遍)。看完数据结构(其实有很多东西还是不懂),我去找了本计算机组成原理来看。结果看得自己更加模糊。因为这本书里没有代码,只有一些抽象概念,当时好像只记得CPU有几个寄存器寻址,还有些补码,反码什么的。那个书又厚,硬着头皮翻了一遍后就没看了。接着买了本操作系统原理来看。也是很难看,都是些概念的东西,又没代码调试。比如什么GDT,虚拟内存分段,分页,实模式,保护模式,中断等等。也是硬着头皮翻一遍,能懂多少是多少。看完后,接着就看那个编译原理,因为网上都说懂编译原理的人都很牛,我也希望变成牛人所以也去搞了本回来看。结果发现,能懂编译原理的人,确实比较牛。里面涉及到自动机的概念。属于用计算机来做人工自能的范畴。我也很想成为牛人,硬着头皮看,结果还是有心无力。经过这样一个过程,虽说很多都不懂,但却使我对编程从一无所知到有了一种模糊的认识。大概懂得了什么叫做内存分配,还有程序的那些字母符号是怎么被计算机执行的。这时回头把原来的数据结构翻出来再读一遍,突然发现这本书比起其他三本都容易,也很好懂。明白了什么叫做算法,并且可以尝试去实现自己想的一些算法。当时的自豪感油然而生。感觉电脑可以按照我的想法去工作了,非常兴奋。虽然那时我并不懂得多少C语言,对指针也只大概知道是什么东西,实际中还是不会应用。但至少可以利用我所知道的,来实现我所想到的。在当时一股冲动之下,写了几个自己记忆由心的算法:

1,从1到100,每数到7的时候,把该数字提出来,剩下的数字继续循环,问最后剩下的一个数字是多少。我记得好像是50。

2,任意输入数字,和“+ - * / ( )”几个符号组成一个算术表达式,计算出值是多少。

3,记得看过计算机组成原理里面有个磁盘调度算法,用的是现在电梯常用的电梯算法。感觉这个算法很好,就去用C语言实现了一遍。

刚开始写程序,都是一个main函数全部搞定。慢慢的,在算法实现的过程中发现,如果一个算法太大,一路写下去,代码会很长,并且很容易想了前面就忘后面该怎么写,或者写到后面,忘了前面写的是什么。 这时,就产生了一种想法,就是刚开始设计算法的时候,想好哪几步,然后每一步用一个函数代替。main函数中只是分步函数的流程控制。这样main函数的代码就大大的减少,逻辑变得非常清晰。然后可以像填空一样把每个分部函数完成。接着在子函数里面还可以分成子函数,分到后来,发现很多函数可以被其他的函数调用。达到重用的目的。记得当时发现这个方法后,也是异常的兴奋。这种方法居然被自己想到了,感觉自己真是个人才。因为自己是非计算机专业,想找编程的工作,起码要有一个东西证明自己是学过计算机的。所以在这期间报考了那个高级程序员(高程),因为要考试,所以学习了一些汇编之类乱七八糟的东西。考试好像分为笔试和上机,但是现在已经忘记是哪一个没过了。郁闷!没过之后,不甘心,就去报了个计算机等级考试(3级,互联网技术),结果不出意外,将证书收入囊中(不过现在想想,一点都没用上。拿回来后,从来都没给人看过,现在都不知道放到哪里去了)。

搞完这些,自己大三也差不多结束了。自己也知道到了大四要开始找工作,所以不能自己专门去研究什么算法。那个东西当不了饭吃。所以要搞一些比较流行的东西,起码需要混到一个工作。所以那时就搞了一本“C#入门经典”。因为那时听说.NET比较流行,好找工作。并且对于一个新的东西,我比较喜欢找一些名字上有“入门”两个字的书(这样的书里面一般都会很详细的告诉你如何搭建调试环境)。因为程序这个东西,你首先要能够搭建一个调试环境,光靠看是看不出什么东西来的。后来感觉这本书还不错,不枉费我100块大洋。从中学到了一些.NET的基本用法。并且对面向对象讲得比较详细。“面向对象”那一章我也很认真的反复看了好几遍,因为那时03年面向对象非常热门,网络上面到处是“面向对象”几个字,感觉编程高手都是会面向对象。我也想成为高手,所以我就抱着一种不搞懂不罢休的气势去看。结果,只是记住了面向对象的语法。书中和网上举得例子也很简单,多半是些动物是抽象类,然后,分什么鸡,鸭,鹅之类的去继承,然后动物都有吃饭的接口,鸭子有游泳的接口, 此类等等的例子。看了半天,也没弄明白这些对于我写程序有多大的作用。后来,从书上抄了一份网站购物车的程序,认识到了WEB的开发流程,感觉自己也可以上路了。因为当时才大四上学期,也没有到处发简历。只是在网上留意一些招聘信息。当时也是在CSDN里面,看到一个本地的公司在招人的帖子,公司很小,刚起步。我想应该不会要求很多,我也就去应聘试试,希望自己能够应聘上,这样至少能够证明自己有资格成为程序员。应聘的时候,老板问了一些问题,多半是WEB开发方面的技术问题。由于那时我对WEB只是刚刚接触,懂的不多。好像当时有一半以上都没回答上来。走的时候,我把我从书上抄的那份程序放到电脑里运行出来给他看了看。大言不惭的说者是我写的。他看了看,点了点头,然后就回去等消息。我是星期五去面试的,星期天公司打电话让我星期一去上班。听到这个消息后,心里莫名的激动。请同寝室的哥们大吃了一顿。大家也都为我能这么早找到工作感到高兴。后来,就是白天到公司实习,晚上回寝室睡觉。工作后慢慢的,那种兴奋感就消失了,取而代之的是工作压力,由于做WEB开发,服务端的C#还好说一点,但是前台用到很多的是HTML和JAVASCRIPT,当时对这个知道的很少,只能一边翻书,一边做事。要达到老板的要求,每天都八点左右才能搞完下班。

工作渐渐展开之后,就是平静如水的生活,每天上班,吃饭,睡觉,日子也过得很快。刚开始,由于懂得东西少,所以每次任务下来后,都是积极的去完成,因为害怕自己做不完。但是渐渐的,当自己清楚该怎么做的时候,人会产生疲倦,因为每天都做一些差不多的劳动。慢慢的,做事情就喜欢拖拉了。当分配一个任务后,自己先估量一下这个工作自己大概需要多久,一般老板给的时间会多很多。所以喜欢把工作先放着,去看看网页,逛逛论坛什么的,等到剩下的时间差不多了,需要开始工作了,就懒洋洋的进入工作状态,但是往往完成工作质量都不怎么好,很多提交后会有些BUG。不过我也没怎么在意。因为和老板关系好嘛,像我这样,再怎么说也属于元老级别的。就这样慢慢的工作了几年。因为小公司什么都要做,技术也积累了很多。包括各种主流数据库的用法,.NET,CSS,JAVASCRIPT,PHP,JAVA,perl,FLASH, 等等,其间,自己独立开发项目的时候,总想找出一种架构,加快自己下一个项目的开发进度。但是每次开发完后,发现上次设计的架构真垃圾。开发过很多项目,每次都想了一些新的架构方法。到现在沉淀下来的还值得用的架构思想也没多少。记得在做JSP的时候,感觉JSP里面服务端代码和HTML混在一起,很难看。不如.NET的事件驱动好用。就去写个模块,让JSP也实现事件驱动的模式。结果写到后来,也没得到什么好处,并且感觉有点不伦不类,

后来项目慢慢做大了,才渐渐明白面向对象的用意。当一个项目很小,逻辑很简单的时候,用面向对象的方法设计用处不大,反倒是组件用处更大。因为项目小,基本上都是建几张表,改改HTML的工作。但是项目一大,逻辑变复杂了,如果你要理清楚逻辑,这里就需要一种方法论。我一开始写算法的那种方法有点不适用了。原来那种是从顶层开始,向下细分。是一种至上而下的设计方法。而面向对象不是,它是一种由点及面的设计方法。面向对象是先找出一个个对象点,然后再找出每个点之间的关系。在实际的项目中,你很难从上至下的设计。因为项目需求往往刚开始很不全面,很多项目后来改得都是面目全非。从上至下的设计不适合这种平凡的修改。并且当需求很大时,他涉及东西太多,你也很难从一个俯视的角度去全面的看这个系统。所以从上至下的设计不能满足要求。打个比方,记得一个项目已经做了80%,结果客户觉得用得不方便,要改一下。很多原来做的功能都不需要,并且提了几个新功能。但这几个功能也只是对原来的功能稍加改动。但是逻辑上看却是大相径庭。人脑不是电脑,如果想着这个代码,去改那个代码,势必到后来让自己也搞糊涂了。所以需要抽象出几个对象出来,是按照客户的思维方式。然后抽象出来的对象里面包含原来的功能。这样做起来就事半功倍。

在工作的磨练中,慢慢的发现了普通的程序员与优秀的程序员的一些差别:

1, 普通的程序员遇到问题喜欢张口就问别人,问之前没经过大脑想想。这是一个不好的习惯。其一,自己都没仔细想想,就算别人帮你把问题解决了,你自己不多久就会忘记。下次遇到,照样是不会。因为这个问题你没有经过大脑。其二,能够回答你问题的人,多半是有一定经验了。他们或许很会安排好自己的事情,管理好自己的时间。如果时常去打断他们,他们会觉得你很烦。

优秀的程序员多半会先到网上查找一下相关问题,看看网上有没有相关解决方法。经过一翻查找,他会把这个问题记得比较牢。

2,在一个项目的合作开发中,普通程序员往往只了解自己开发那方面的东西。项目做完后往往对整个项目有哪些功能都不太清楚。可能会有人抱怨,自己工作都做不完,哪有时间去了解整个系统。但现实多半是,花大量的时间去网上闲逛,却不愿花时间去增进知识。 如果总认为项目的设计是设计者的工作,自己没必要去了解。那么这样的程序员只能是手工劳动者。

优秀的程序员会对整个项目有认识,对一些自己感兴趣的功能会去做一下了解,更优秀一点的,会去对整个项目的架构设计做一下了解。自问如果他是项目设计者该怎么做? 去学习项目设计的优秀之处,去发现设计的不足之处。触类旁通,把优秀的地方用在自己将来的工作当中。

3,普通程序员往往有很大的惰性。不能自觉的去学习知识,增进能力。所以每天耗费大量的时间在一些消遣状态中。所以时间往往白白的浪费掉。

优秀的程序员往往会安排好自己的工作和学习。在工作中学习,在学习中工作。能够感觉到自己每天都向着自己的目标在前进,状态佳,动力足。他们因为每天工作情绪很高,所以研究的东西也多,时间比较宝贵。因此他们会善于利用一些工具来操作自己的电脑,大大来的减少琐碎的电脑操作时间。更有胜者,会开发一些符合自己的操作习惯的小程序,来提高自己的效率。说不定这些小程序放到网上共享,可能还会有意想不到的收获。

我现在做项目管理员,看着手下的程序员,时常也让我想起原来做程序员时候的坏毛病。比如,上班迟到啊,工作时间上网闲逛啊,交上来的程序BUG成堆啊...!看到这些,我时常都是会心的笑笑,可以理解! 不过我也时常提醒他们,如果你们想将来成为IT界的精英,而不是等到30岁感觉自己无路可走,那么请你们珍惜自己的时间。如果你们自己都不珍惜自己的时间,那么别人更不会去珍惜你的时间。

今天花了两个多小时,写了一篇短篇自叙。感觉值得,把自己五年多的光阴回顾了一遍。从前的故事历历在目。写下来过五年后再来回顾一下,说不定会是另一番感受。

分享到:
评论

相关推荐

    项目管理最佳实践方法.pdf

    5. 知识产权与知识分享的矛盾:文档提到,尽管最佳实践知识具有一定的知识产权属性,但是不同公司对于知识的保护和分享持有不同观点,这也反映了项目管理实践中知识产权与知识分享之间的矛盾与平衡问题。 6. 持续...

    Project项目管理 42个案例

    该压缩包中的42个案例可能包括了不同规模和类型的项目,从小型团队协作到大型企业级项目,涉及的时间管理、成本控制、风险管理、质量管理、人力资源管理等多个关键领域。每个案例都是一个生动的教学实例,旨在帮助...

    完整版PMP项目管理模板(全套157个文档).rar

    这套模板集全面覆盖了项目生命周期中的各个关键环节,无论是对于初次接触项目管理的新手,还是经验丰富的项目经理,都能从中获益。通过使用这些模板,可以标准化流程,提高效率,减少错误,确保项目按照预定的目标和...

    微信小程序项目实例——今日美食

    总的来说,“微信小程序项目实例——今日美食”是一个集前端技术、后端数据管理、用户体验设计于一体的综合项目,对于学习微信小程序开发和移动应用设计的人员来说,是一个很好的实践案例。通过分析和实施这个项目,...

    微信小程序源码-合集5.rar

    通过研究这些源码,开发者可以学习到微信小程序的开发流程、组件使用、API调用、数据管理、用户界面设计等多个方面,提升自己的小程序开发能力。同时,也可以了解到如何将各种在线服务融入到轻量级应用中,提高用户...

    java源代码:日程管理小程序

    Java源代码:日程管理小程序是一个实用的编程项目,它为用户提供了一个管理日常任务和活动的平台。这个程序是用Java编程语言编写的,对于学习Java编程和理解面向对象设计原则的人来说,这是一个很好的实例。在Java中...

    系统集成项目管理工程师资料收集

    2012年5月(上半年)系统集成项目管理工程师上午试题与答案.pdf 2012年5月(上半年)系统集成项目管理工程师下午试题与答案.pdf 2012年度系统集成项目管理工程师考试案例分析试题和模拟题学习必过资料.pdf 2012年...

    一页纸项目管理全套模板

    项目管理是一门科学,也是艺术,它涉及到组织、规划、执行和控制资源,以实现特定目标。"一页纸项目管理全套模板"是一个创新且实用的方法,旨在帮助项目经理以高效、直观的方式呈现项目的全貌,避免复杂的文档和报告...

    项目管理-任务分解结构(WBS)模板

    6. **WBS结构分解示例**:提供了一个实际应用的例子,展示了如何从一级到四级逐步细化项目任务。 #### 六、WBS的结构示例 - **一级**:项目名称或项目类别,例如“XX项目”。 - **二级**:项目的阶段或主要组成...

    微信小程序Demo:小程序教育类模板(课程预约)

    "微信小程序Demo:小程序教育类模板(课程预约)"是专为教育机构或个人教师设计的一个示例项目,它展示了如何利用微信小程序开发工具来创建一个功能完善的课程预约系统。 该模板的核心功能可能包括以下几个方面: ...

    微信小程序源码大全(130个)

    通过分析和学习这130个源码示例,你可以逐步掌握微信小程序开发的精髓,从简单的页面布局到复杂的功能实现,从而提升自己的开发技能。同时,这些源码也可以作为模板,为你的新项目提供灵感和参考。在实践中不断学习...

    工程项目进度管理系统 网络版asp

    5. **报告与预警**:系统能自动生成项目报告,包括进度报告、成本报告等,同时具备预警机制,当项目偏离预定计划时,及时提醒管理者。 四、网络技术应用 在网络环境中,系统的数据传输采用HTTP或HTTPS协议,确保...

    C#做的桌面快捷方式管理程序

    【标题】:“C#制作的桌面快捷方式管理程序” 该程序是使用C#编程语言开发的一款桌面快捷方式管理工具,其设计目标是模仿360桌面等同类软件,提供便捷的快捷方式组织与访问功能。C#是一种面向对象的、类型安全的、...

    基于微信小程序的点餐系统设计与实现 毕业论文.docx

    - 微信小程序自2011年以来发展成熟,其轻量级、无需下载的特点受到广大用户喜爱。 - 传统点餐方式效率低下,采用微信小程序能简化点餐流程,提升用户体验,帮助餐厅提高运营效率。 2. **相关技术** - **Java语言...

    2018年最新123套微信小程序实战项目源码分享

    在"2018年最新123套微信小程序实战项目源码分享"这个资源包中,包含了丰富的微信小程序开发实践案例,对于学习和提升微信小程序开发技能来说,是一份宝贵的资料。 首先,我们要了解微信小程序的基础架构。微信小...

    Visual Studio 未能加载文件或程序集解决方案

    有时候,将项目从一个.NET框架版本迁移到另一个版本,或者在x86和x64之间切换,可能会导致加载失败。 3. **GAC(全局程序集缓存)问题**:如果程序集是从全局程序集缓存(Global Assembly Cache, GAC)加载的,确保...

    谷歌浏览器axure扩展程序

    5. **确认安装**:如果一切顺利,扩展程序将自动安装到谷歌浏览器中,此时可以在扩展程序列表中看到Axure的相关图标。 **三、使用技巧** 1. **快捷键操作**:熟悉并掌握扩展程序的快捷键,能大大提高工作效率。...

    仿360安全桌面源码 程序管理工具源码

    【标题】"仿360安全桌面源码 程序管理工具源码"涉及到的主要知识点是基于C#编程语言的程序管理应用开发。360安全桌面是一款集成了多种实用功能的安全防护和桌面管理软件,而这里的"仿360安全桌面"则可能是指一个类似...

    把任意的EXE嵌入到自己程序中

    5. **性能和大小**:需要注意的是,将EXE文件嵌入到你的程序中会增加你的程序大小。如果嵌入的文件很大,可能会对程序的下载和分发造成不便。 6. **动态加载和解压**:为了解决文件大小的问题,有时候开发者会选择...

Global site tag (gtag.js) - Google Analytics