附近做网站,涟水网站建设,重庆中小企业建站价格,商业网站定义本文仅为爱好程序及向往真正之程序员者所作#xff0c;其余人等可忽略下文。 如今#xff0c;接触CS几近八年#xff0c;不学无术#xff0c;所精之物鲜也#xff0c;以至一事无成。
现回忆吾程序之生涯#xff0c;以整理繁杂之心绪。
1. 接触计算机和编程语言 02年始大… 本文仅为爱好程序及向往真正之程序员者所作其余人等可忽略下文。 如今接触CS几近八年不学无术所精之物鲜也以至一事无成。
现回忆吾程序之生涯以整理繁杂之心绪。
1. 接触计算机和编程语言 02年始大学DOS机学Pascal一去不返矣直到07年在做一Pascal软件的反汇编时才再对Pascal有点回忆。是时Pascal与计算机导论并开终于导论没导好而Pascal也尚未触及指针话题就匆匆而终也但明白了程序设计最基本的语句结构、条件判断结构及循环控制结构以此为根方可后进也不错了。
2. 初识C及面向对象 03年来了个跳跃未学C而直接开设C课程。一天任课教师有事其夫代之仅一言令吾有所体悟你们这样C语言学不好C也学不好。诚然课程快结束时面向对象部分匆匆了事好在当时知道了类的样子知道有OOP这么个东西。最大的欣慰是认真学了C的C语言部分初步理解了指针这个东西。学习效果显然不好加上自己很懒惰这对我随后几年的影响颇大譬如对C语言的printf给予100%的憎恶人家问我会什么语言时我只能说什么都不会勉强说我会C中的C语言
3. 在颓废中练习编程 03年底开设数据结构。现在回想可叹自己为何总是差一拍呢学数据结构时没有体会到数据结构的精髓反而是在利用课程练习提高编程能力练习类如何用当然当时还是不懂OOP的只是为了用类而为之但仍有程序设计的自我满足感因为能把自己想的用程序表达出来特别是调试解决问题的过程很刺激。 同时那一年伴随着一个挺热门的东西就是有同学自已学习VC平常上课是不会教这东西的学习做界面牛的一塌糊涂就跟风其实就是买本教材照着点击鼠标罢了在不懂面向对象的时候学习这个回想起来真是可笑 随后还有一些课程能够练习到编程譬如数值分析、操作系统、数据库、计算机图形学等等或多或少总是有些提高但并没有本质性的改变。 后来学习汇编也没多大感觉加上自己没认真学组成原理、微机原理等课认定自己不适合搞硬件其实这缘于自己的颓废。 04年下半年开始随后的两年是这辈子最不齿提起的阶段。同寝者共事网游与吸毒无二越陷越深终不可拔。于其中也迷之又迷而于其外则痛苦不堪愧对师亲自责良心毒瘾侵之难忍而入网吧者再。学习成绩骤降一等奖学金至二等再三等再到无乃至逢试只望及格。也就是在那个时代学会了如何应付考试我们知道及格是不能违背的下限故每临考试皆群起合作之依重点作分工各自发愤互讲所学一起过关未曾挂课此乃唯一无憾之事。但最大的痛恨乃专业之废那会儿简直傻的可爱一舍友到了大四让他用C写程序时上来就begin,end大哥感情现在咱还停留在大一Pascal的阶段呀 一晃到了大四要考虑人生怎么走了大学如此颓废专业能力底子差害怕面对找工作遂考研也就在这个时候停止了网游否则此生废矣研考上了凭的还是大学开始时的基础但这确实是我的一个转折性的新起点。 大四下学期也就是06年上半年做毕业设计头疼了吧还好自己命好能遇贵人两人一起用VC做一软件全靠人家了也亏得人家帮助自己才又能回到程序设计的路上来了但对C、MFC、面向对象这三者还只是了解甚至三者的关系都不能理解清楚。想想当时很好笑用了STL的vector然后在论文中就描述使用了一种数据结构的新技术哈哈然后买了本《深入牵出MFC》浅尝辄止虽然现在想看但没多少时间了。
4. 编程之大进步 06年下半年开始上研究生亦相当于重新做人老师要我参与的是硬件的项目兴趣不大又因课业繁重后退出项目忙考试这半年从程序设计角度进步不大。 07年上半年是个转折那会课少了自己业余时随手从同学那拿《absolute c》来看系统学习了一遍C。这时才对面向对象有了点认识有了点体悟然后就结合着MFC想为什么框架是那个样子。那个学期开设有专门的面向对象课程跟着去听了拿来印证自己的所思所想所学进步很快。那一年腾讯为了扩大自己的影响力就在各个高校开设腾讯创新俱乐部参加之正好是锻炼编程的机会于是基本上自己主导做了一个软件并提交了作品。那个学期锻炼机会还真挺多算法设计与分析课程要做大作业面向对象课程要做大作业。进步很快以至于多数人都认为较难的面向对象大作业我在两天时间内就结束了包括设计和编程。 那个时候真的是重新拾起了自信心而且自己在周围同学中有优越感也感谢导师对我的鼓励这才使我以后能继续提升。
5. 思想意识的提高 然后研二的一年自己的提升又是一个很大的转折点。 07年下半年分了课题方向主要是看论文痛苦的坚持直至08年上半年自认为研究生没白上因为认真做研究了知道了如何做研究。本文主线是程序员之路故做研究之事略过不谈其实大多数学生也并不关心如何做研究。 在这个阶段中最有意义的是软件和程序设计的思想意识提升了。 首先缘于本科隔壁宿舍一小伙特别是研究生时候其技术很强势深知编程水平远不及他与他交流总能有些体会。受其最大的影响就是去买一些相关技术方面最牛的书籍知道了学习不要靠学校那些教材学就学最牛的专家的书特别是国外的经典书籍然后就养成了定期逛书店的习惯。 从《编程高手箴言》中知道了软件不等于程序也知道了程序员原来那么神圣本书对欲加入程序员大军的人极具煽动性最起码对我是这样子。我此刻知道国内程序员基本是第二等的于是定位自己成为第三到四等的程序员而最高等级的程序员除了高德纳能胜任世间还有几人欤 随后无意中发现《计算机系统概论》一书欣喜若狂可能是我基础太差了吧所以跟找到了宝一样。加之前边的认识我从中知道了学习计算机原来是应该这样子学的呀自底向上bottoms-up!!至此刻我才意识到学计算机是需要不断提升自己的意识层次的知道对底层不了解用高级语言写出来的代码是莫名其妙的 之后受隔壁宿舍小伙的推荐看《深入理解计算机系统》一书其实也是自底向上的理论但内容含金量简直是神级 自己又在闲逛时发现并买下了《代码大全》我对其评价是学软件者可师承于此书简直是理念风暴处处有感悟处处有所得爱不释手。正如一本好的武功秘籍绝对不仅仅是教招式而最重要的是传授心法。例如从中体会什么是抽象再次品味面向对象的特性特别是数据封装再比如对变量命名以及高效注释的讨论高度绝非一般编程规范比如林锐的那个所能比以及后文我提到的对程序性能优化的策略性指导等等。 总之直到现在我也这样认为做为一个程序员把软件做好要看《代码大全》把代码写好写懂还要看《深入理解计算机系统》。 就这样思想意识提高了不少其实这比编程语言本身进步要强的多因为内心底气足了有了方法论了有了战略性指导了到时用到什么知识学什么就行了。而且在实践中逐渐培养自己一些优秀的编码习惯非常重要比如成对编码(即new完就想着何时delete并先写好)保持程序的完整性保持程序的可调试性等等。或许正是这些习惯的培养使我自己写代码时基本不用调试器因为系统一直是完好的加些代码就编译测试出了问题稍一分析肯定容易定位的直到后来工作时要维护别人事先的代码出了问题解bug这时调试器就不得不拉上战场。我想这些是我与当时周围同学最大的差异性并坚信自己日后能成为一名真正的优秀的程序员。
6. 算法不等于程序 换句话讲代码需要优化。 其实也不尽然严格来讲就是有高性能要求的程序其代码才需要认真优化而一般的应用层程序并无性能方面的特别要求。 08年初我开始做研究生毕业的课题通俗讲是做一个正则表达式引擎但并非易事因DFA处理字符的速度快所以要将大数量的规则转化成DFA问题是要将DFA的存储空间降下来。理论方法倒还顺利新算法也想出来了。于是乎信心十足的去编程实现之做为学生自认为拥有着较好的编程意识及思维再加上疯狂运用STL程序很快就OK了。这时问题出现了仅仅一个普通的正则表达式在转化时就可能耗掉半个小时的时间。这无异于在自己盛气凌人的头上浇冷水为什么会这样没错呀我的代码全都是按照算法写的而且算法是都经过复杂度分析的为何会如此之慢 于是狠下心来花了一个暑假的时间做程序性能优化参考了许多资料开始时也是不得章法胡乱为之。但随即《代码大全》又不失为我做软件的最佳导师虽然没有教我如何具体地做程序性能优化但教给了我战略性的指导步骤非常关键也阐释了许多优化的思想譬如80-20原则等等。按照上边的步骤首先做需求方法的分析如果有些需求可以砍掉那显然会提高运行效率再次做算法方面的优化特别是一些细节的实现这方面我也改进了许多包括NFA的实现方法都整个推翻了重来前边这些没有什么参考书而言主要是去查参考文献再去反复理解然后是能提高性能的一些编码技巧比如缓存技术、延迟计算等等这个在《代码大全》中有论述再下来是程序设计语言本身的问题比如C本身的还有STL本身的那会儿才知道滥用STL的后果有多惨重不细述主要参考《Effective STL》还有一本IBM的《C程序性能优化》最后的优化可以考虑将代码写成什么样子更易于编译器将其编译成高效的汇编代码我甚至将编译器的优化级别都调高了真可谓为了提升程序性能而无所不用其极当时参考的《深入理解计算机系统》也是从中知道可以去调编译器的优化等级的《代码大全》中关于这方面也有讨论。其实到了现在回想应该再看一些内存优化方法的资料主要是提升外存的应用效率等windows的内存映射一直还未研究有空得补上。 这样坚持下来是一个很好的提高牵扯的方面从底层汇编直上一直到需求分析、架构设计、算法和数据结构当然更包括编码本身。最为关键的那会拥有的成就感时至今日再未曾有过即体会了这样的过程把运行半个小时的程序一点点的改进到只运行十几个毫秒而中间用一个个表格记录了不断引入新方法、新技巧后所带来的性能提升比。 后来与上文提到的技术牛人小伙讨论性能优化的问题他直接就说“你编程语言选错了你当时就应当和我商量的做正则表达式就应该用perl”。那会确实不知perl为何物但其实也应该说是从那会学会了要独立思考不要盲从与盲信于他人特别是技术强人。问题应当一分为二的看perl是很精通文本处理以及支持强大的正则表达式功能。但现在的问题是自己要做正则表达式引擎呀能调用perl么如果加上大数据量的规则以及被匹配的数据我敢肯定perl不行因为其原理是构造NFA进行处理处理速度跟不上的。perl正则的强大缘于他的“花架子”这些花架子对于大多数应用级开发就足够了而且还很实用但如果写高性能的东东确实就不实用了。 现在回到主题算法不等于程序换句话说同样的算法给不同的程序员所写出来的代码效率绝对不一样也因此知道了做一个真正的程序员是不易的当然一个真正的程序员是绝对比大众程序员优秀的多。
7. 在正规军中接受训练 本着做一名优秀程序员和软件架构师的目标兼顾离家近公司又给解决户口于是09年在北京一倍受社会争议的台企工作。 既然写到这里了就好好回忆一下在公司的若干点滴以免日后忘却。
时至今日回想在公司的日子也并未有多少令我遗憾之处。
刚进公司皆是新鲜加上对未来的憧憬以及对新知识、新技术的敬畏于是倍加努力而进步也是神速包括技术及职业素质等方面简言之即在正规军中接受训练和洗礼。 下边是我入职两个月后的转正申请故作缩减以避嫌实发自肺腑 “ 自今年4月20日入职以来已近两个月时间期间感受颇多收获颇多。 (1).工作环境 从学校走入公司确实在经历着一个很大的转变而且公司的主管和同仁也在不停的帮助我完成从学生到职业人的转化。......
对于工作环境除了良好的硬件设施我认为最重要的是公司有着和谐的人际氛围从主管到身边的同仁都给人一种温馨的感觉......。
无论何时有学习工作上的问题无论求助于谁都会得到热心的帮助。公司里是用一种鼓励和引导的方式去培养新员工。...... 公司的活动比较丰富能对工作起到很好的调节作用。运动会期间大家都去积极的准备...... (2).学习成长 两个月的时间很快就过去了回想一下已经学到了非常多的东西。 在职业人的塑造方面。参加了新人活力营培训感触最深地是团队和分工合作的力量以及积极主动的重要性并在培训过程中积极锻炼自己提高了自己的表达能力以及与人沟通的能力。 在专业技术方面。由于有专门的师傅来指导并且平日里能够与许多身边的同仁去交流和请教所以进步很快。而且公司里有比较好的检验和督促学习的机制对于学的不到位的地方会及时补上。对比学校而言公司里还是要紧张一些但活得很充实成长速度很快。在工作期间有时心里也会觉得有些压力这就伴随着自己心态的调整和对公司环境的适应以及学着调整工作和休息的关系我觉得能处理好这些事情是所学到的最宝贵的东西。总之在公司里与其说是一个工作的过程不如说是一个学习成长的过程。 (3).职业发展 梁肇新将程序员的成长划分为了六个阶段第一阶段主要是能熟练地使用某种语言第二阶段能精通基于某种平台的接口以及所对应语言自身的函数库第三阶段能深入地了解某个平台系统的底层。这些阶段是要一步一步走下去的姑且不管后边几个阶段是什么我觉得当前最重要的是先把自己的位置定准不浮躁老老实实地先做好第二阶段的程序员。 公司为我提供了这样的职业发展和成长的平台于此我非常庆幸。现在公司里的学习方式就是从底层向上学明白底层的原理后再用上边的接口而且以后坚持这样来学习并不断补充新知识我相信自己在公司的环境里不久的将来就会做好第二阶段到第三阶段的程序员。契而不舍金石可镂现在我唯一能做而且必须去做的就是坚定自己的信念在程序员这条路上坚定的走下去。 ” 回忆至此对于后边工作不到一年就离职有些惭愧是我自己将在公司发展程序员的路给枪毙掉了但当时原因颇多现在唯一良心难安的是没有“不浮躁老老实实地先做好第二阶段的程序员” 其实在公司的成长先是短时间的指数级进步然后是长时间的线性级进步。我是凡人所以在线性增长阶段还是浮躁了 后来体会到公司的原则很简单就是按职位的需求把你培训成盯在那个职位上的人。公司最喜欢的人是吃苦耐劳的人多聪明不需要看过一本书忘记什么名字了好像是《大道至简》写软件开发的上边就说“是人都可以做程序员只要你知道夏天热了少穿衣服冬天冷了添衣服”很形象。 在此无意说公司坏话因为这很可能是我这辈子进过的唯一一个公司可以称为母公司因为毕竟我除了索取工资和技术对公司的贡献几乎为零且公司里的很多同事还很怀念特别是我从心里敬佩台湾人他们的技术水平很高他们的吃苦耐劳能力很强他们很虚心。
回到正题现将在公司最大的收获小结于下
(1). 在公司能使一个程序员正规划包括做事情、做软件正规划写代码正规划等等。没有这个在学校中学到的软件工程就是纸上谈兵如何写文档都不会也不要谈学生能形成自己的编程规范。
(2). 学习公司的管理模式比如如何制定schedule如何组织会议讨论问题如何做报告如何与人协调等等。这些对以后在学校的项目管理有绝对性的指导性。
(3). 与老程序员的交往回忆跟我有直接关系的两个人。
第一个人是我师傅严谨严厉我对其态度的转变过程为:害怕-讨厌-敬佩-朋友。刚入公司我师傅一副正经的样子害怕自然正常。然后体会了他的严厉有时要求很苛刻比如我去听一个报告他就事先给报告者打电话说要报告期间给我提几个问题意即去听可以但不能白听这样能不让人讨厌么。但与此同时跟我同期入职的小伙其师傅就感觉起来人不错平时较松而且笑脸相迎。随后阶段是做个小功能以检验学习效果我师傅对我要求更严每天检查一次进度然后每天检查三次进度早上、中午和晚上都过来这样从需求分析、详细设计文档、编码以及测试等一路跟下来。但我从那会开始敬佩我师傅因为他教会了我许多好的习惯比如写FAQ将学习中问题和收获记录下来跟我讨论程序中的数据存储等问题记得当时有一个关于指针的数据结构就改了三次我们俩当时称之为“一波三折”问题引导我自己把最佳的方法想出来还有就是特意会传授我一些他自己的编程思想也就是在那时我明白了C语言的代码要写成支持多实例的也就是在那时开始思考如何把面向对象的思维用C语言展现出来。随后在作这段工作的汇报时我才是最感激我师傅的时候正是他的严厉和悉心指导才使我顺利过关然而另一小伙就不太顺利了被大主管说道“整体下来感觉你写的程序太随便了”以至于回去重改再作报告。也就是在那个时候我师傅也开始放下了平时一本正经的面孔把我交给了事先定好的项目组。然后我跟我师傅一直是一种朋友关系平时一起参加登山社感觉我师傅还有我小师叔就是娘家的人我是他们带出来的到时项目组里遇到棘手的问题还可以把他们拉过来帮忙解决。
第二人是我前面提到的项目组组长特温和、特有耐心很老练的程序员作报告很有条理性做事情很负责任。他跟我师傅性格完全不一样从来不会批评人再大的问题也是温和的讲。我组长是有问必答不管多简单的问题亦或是多困难的问题他都会放下手头的事情帮提问者解决。当时一堆新人围着他问问题然后他就独自一人晚上加班把白天的时间补上而又毫无怨言这种精神不能不让人敬佩。有了任务他总是笑呵呵的过来“行不行”若见面有难色就说“没事你先做遇到问题咱们一起解决”完全没有组长的架子但更是一种完全值得我学习的人格魅力。
8. 算法和数学是王道 随后就是我离职的事了很对不起组里的人其实我不是放弃了程序员这条路而是放弃了以在公司工作的形式来做程序员这条路我始终认为程序员的职业是神圣的现在只是用自认为的一种捷径来延续这条路即通过读博士来加深内功的修为。 我离职的原因是要去读博士而读博士的原因就很多。首先是那时在公司的实际情况不得不让我内心浮躁因为我是凡人也不甘于现状觉得那会在公司的定位很难实现自己预先规划的程序员之路。然后的萌芽是我投在《软件学报》的论文被录用了很受鼓舞而在公司同期培训的一小伙更是煽动我去读博士并给我介绍了许多学术这条路上的事情。有所心动就与同学、朋友、家人和导师交流此事在获取了广泛的支持之后遂决定辞掉工作去攻读博士。当时还有一件事一本科同学给我打电话其并不知道我有想读博士的想法而他却起了这个话头大肆渲染读博士有多好并建议我去读真是这种巧合使我坚定了当时的信心。于是今年2010年再回学校读博士。在原导师处读博士的主要原因一个是信得过原导师可以认真指导我可以为我提供潜心研究的环境另一个是延续原来的专业和方向可以保证在算法上精进。
其实我并非故意将现在的我与程序员联系在一起而是事实上即使计算机科学的博士还是教授都与编码是离不开的国外大学的计算机教授哪个不是编码高手哪个不是优秀的程序员国内学术界的态度本身就不对认为程序员低他们一等本文不作过多评述。若按梁肇新所作程序员之分级当前在现实公司里的绝大多数程序员是第二等能达到第三等就得看个人造化和努力了当然也离不开公司给予的机会否则一辈子就可能是第二等而第四等者绝对是大公司里的骨干架构师和程序员而第五等乃至第六等者没有相当的理论功底一辈子都不可达高德纳曾言自己是世界上最优秀的程序员之一也就是这个层次的。
近段时日虽没什么进步但意识到读好博士并非我原来想的那么简单。国内的高等教育呈现一种严重的延后性状态也即多数人与其学位并不对称我单论计算机科学学科。本科生应该学习并理解计算机系统并打下扎实的程序实践能力硕士生应该能将问题抽象成计算机算法或相关知识的模型并给予代码实现以解决实际问题。事实上有多少计算机科班出身的人是合格的现在看来拿一般重点大学而言硕士生中有良好程序设计能力的就很稀少更别提本科生了可读硕士的目的并非培养编程而是学习如何做研究。事先本想读博士无非就是把问题抽象成算法或者原来人家就提出了现成的模型再优化或提出新的方法即可我天这实际还停留在硕士的认知水平上若此以后怎可有质的提高和突破即使混个毕业而且不难但被宣称建议授予工学博士学位的时候是不是很羞耻呢再退一步如果一个博士还拿着工程实践能力来炫耀简直太可笑了合格的博士生不要自己骗自己无论如何至少都得为所研究问题提出一个更好的算法或者数学的模型甚至要建立一套新的理论体系这就是第五等程序员任重道远但值得去追求
前一阵百度要出语音搜索功能了CSDN上一牛人是这样说的“个人推测百度的算法是这样的基于隐马尔科夫模型HMM或者一些其他的时间序列模型比如CRF等进行用户输入的声音串进行识别然后跟已有的音乐库进行对比。这里主要用到了维特比算法。更重要的是如何训练这个HMM估计会搞海量的音乐进行训练由于人工标注成本高因此会用无监督学习EM和向前向后算法这样模型就建好了。两个关键点选择什么作为feature也就是训练特征相应的HMM的阶数也会增加如何组织海量数据训练和识别提高运算速度百度应该擅长分布计算吗另外EM算法也支持多线程了。疑问要不要用歌词或者说是否把歌词作为一个特征如果要提高精度是否要采用其他类似模型前面提到的CRF应该很理想但是速度慢不过就看百度的并行运算功夫了。这个没有上千台服务器是没法做的”。
对其评述无论好坏我唯有佩服若无一定功底何出此言而一般程序员又距其甚远一研究生舍友弃中兴而去迅雷乃向前之所为吾赞之数同门谈及专业面露苦色不以为荣无心尽力妄自菲薄者吾叹之
已之算法与数学薄弱至极愧对师门怎能不痛下功夫而恶补之缘于以前的无知竞说学概率何用之有而且视数学为负担乃学位毕业的条件学完赶紧扔掉然后抱着编程语言的书去啃舍本逐末有几人能见其明糊涂透顶也人最重要的还是要踏实此时潜心向学并未晚矣。苏洵年二七始发愤为学归家悉焚以前所作文章闭关读书五六年遂通六经百家之说下笔顷刻千言乃为唐宋八大家之一。吾亦二七之龄发愤向学不读六经而习算法勿使功利熏心数载之后学术岂无不成
9. 后记
我并不赞成执编码之业以糊口故否则痛苦不可免。
至于成功不同之人定义不同。钱不可购万物万物亦非为钱而生故勿奉钱为上。而后定一方向视为寄托心于其上毕生为之终有所成。致若左手程式右手诗岂非同道
兹文乃拙人之鄙见供读者一笑耳若可拾得一二甚为安慰闻道有先后术业以专攻真正牛人为人敬者不为炫耀乃为布施愈盼高见我当谛听。
10. 后记之后记
CSDN的各位朋友在下有礼了感谢阅读此文 我是CSDN新手实际上确实也是程序员之中的新手。CSDN高手甚多小弟初来若要在CSDN写此类文章怎么也论不到我。本人只不过闲来写写自己的想法对先前走过的路总结一下整理一下思路罢了。所以我不曾想此文会被置于首页但既然如此索性请大家对我进行批评指正亦请CSDN的高手不吝赐教。
此外说到古文我确实喜欢当然也喜欢国学但正如duguao1415所言我根底尚浅。现在是为了写而写依葫芦画瓢以致成文生硬错误百出大家见笑了再次感谢duguao1415我业余会下功夫应该像写代码一样保持一个严谨的态度今后不再乱写先沉淀下去学习。
水滴
http://blog.csdn.net/water_drops 水静水滴之荡漾而复静石固水滴之复然则石穿