近来在CSDN结识了贺利坚老师,并仔细的读了一下贺老师的博客,感觉贺老师是非常负责的一个大学老师,在他的博客中看到了很多他和大学生的交流。
这就促使我开始思考,如果大学再来一遍,我也还是想做软件,那我应该在大学里学点什么?
最终我决定把想到的东西写下来,希望能对在校的人有点帮助。
首先我们得知道这问题的答案是个变量,他依赖于你的目标和天资能力,绝不唯一。当然大学的课程设置往往是唯一的,所以会有点矛盾。
这里最关键的东西是目标,大学学习只是达成最终目标高度的一个环节,他应该为最终目标服务。
当然大学生很难清楚的知道自己的目标究竟在那里,但要总归要大致知道自己的方向。
这个之所以关键是因为,这直接决定你应不应该学习某个东西。我是在做了很多年软件后,才发现软件和软件的差别其实比马和牛的差别还要大。
用流行的分类方法比如:前端开发、后端开发、.net开发,Java开发等会让人迷失焦点,
所以我一直觉得Barry W Boehm在《软件成本估算:COCOMOII模型方法》里的分类方法对学习更有帮助。
在这个分类方法里软件被分了三层:最底层是基础结构型(平台)软件的开发;中间层次是开发工具、系统集成、中间件;最上层是终端用户编程,也可以理解为一般应用的开发。
同时作者还补充了份数据说:在2005年95%的美国程序员是在做终端用户编程。
这似乎把话题扯开了,但其实不是,关键要大致定位下自己的方向。因为对于目标是基础结构的程序员和目标是一般应用的程序员,他们要学习的东西差别很大。
Donald Knuth的《计算机程序设计艺术》不是没用,但如果你花了2年把他啃了一遍回头专门做应用开发,那它真的用处不大。
至少和一个精通具体语言、框架、设计模式、面向对象、UML的人比只是钻研了《计算机程序设计艺术》的人反倒是在劣势,虽然可能后者更花时间。
反过来讲则是在算法密集型的工作里,那优劣情形就会掉过来。
无疑的什么都精通最好,但人的时间是有限的,而软件相关的知识是无限的,所以把学习聚焦在自己的目标上非常关键。
而目标是什么则要根据自己的实际情形来定。
假设说你真的感觉自己的能力挺好,就想做基础结构型的东西,去做MapReduce,去做操作系统等等,那首先要认识到的是干这个的人很少,竞争很激烈。
如果说在2005年美国只有5%的程序员是干这个的,那我估计今天在中国也顶多是这么个比例。
个人感觉,大学的计算机课程还真都是往这个方向培养人的,一旦真的走这个方向,那么大学的计算机课程还真用的上。需要好好学习,天天向上。
当然只上课也不行,把课上学的东西实践起来也很关键(比如开源项目)。
这里麻烦的事情是,干这个的可能只有5%,很多人即使很努力也不一定挤的上去。
那么假设说一个人很现实,说:国内排名靠前的几所学校凑凑也就5%了,竞争太激烈,我不选这个目标方向,我还是95%里做做吧,那这个时候我应该学什么?
我个人认为主要要学好一些比较硬的,需要大块时间学习的东西,而不要在花里胡哨的东西上多费时间。
硬的东西是指:
不管是不是做基础结构性软件,基本的数据结构和算法知识还是要有的。
很可能不太会有自己从头写数据结构和算法的机会,但如果复杂度不知道怎么算,链表、红黑树、哈希表的差别都不知道,那就怎么都玄。
具体是那个可以根据实际情形来选。但这里强调的是语言,不是IDE和框架。可以通俗理解为每个关键字背后的含义要整清楚。
这里的陷阱是学一堆语言,但那个都不精。
要找那种规模不太大,又比较有名的项目,一定要精读,争取每行都懂。
不算IDE帮助生成的,争取也在2万行之上。
这点最好配合着下一点一起做。
考察某个框架的内存机制、线程机制等。
整个学习过程中最常见的陷阱是学会操作一堆IDE和框架的使用,但实际上这事儿价值不大,程序员的价值符合反木桶原理,啥都知道一点的,大多时候不如某个上精通的。
同时除非很特别的公司,大一点的公司并不期望毕业生过来就能干活。
有上面的基础后,再突击下,应该可以面对大部分公司的笔试和面试。
原文地址:http://blog.csdn.net/leezy_2000/article/details/8396140
分享到:
相关推荐
程序员的大学生活到底是怎样度过的?难道在大学里就脱发了?我们应该如何有效规划大学生活?
【程序员之路:初学者的忠告】 ...总之,作为初入大学的计算机科学学生,应该明确学习目标,避免盲目跟风,重视基础理论,注重理解和实践,这样才能在编程这条路上走得更远,为未来的IT职业生涯奠定坚实基础。
程序员学长聊聊大学选课那些事儿
自我评价部分可以更加具体地描述个人的职业目标、性格特点以及为什么适合这个职位。例如,可以提到自己对新技术的好奇心和学习能力,以及解决问题的能力等。 综上所述,简历是求职过程中非常关键的一环。通过精心...
在这份工作中,作者学习了AS3,负责小游戏的开发,并成为了flash开发程序员。虽然这份工作只做了两个月,但作者获得了宝贵的经验和技能。 在第三份工作中,作者加入了一家大型网络公司,感觉非常大、非常专业。作者...
- **辅助工具**:无论是对于实际的产品开发还是理论研究,《程序员密码学》都能够提供有力的支持,帮助读者更高效地完成工作任务。 ### 知识点二:数缘社区资源介绍 #### 数缘社区简介 - **定位**:数缘社区是一个...
本"学习案例"是由经验丰富的微软程序员兼大学讲师精心编写的,旨在帮助初学者和有经验的开发者深入理解C#的核心概念和实践技巧。 一、面向对象编程基础 C#是面向对象的语言,其三大核心概念是封装、继承和多态。...
【程序员英语学习方法】 在快速发展的信息技术领域,程序员掌握计算机英语变得至关重要。编程语言本身就是基于英语的,即使现代工具允许部分使用中文,但核心的编程语句和逻辑仍然依赖于英文。此外,大部分的技术...
该文通过主人公的亲身经历,展现了程序员在职业生涯中可能面临的种种挑战和抉择,以及程序员如何通过不断的学习和努力,在职业道路上不断前进。以下是对该文的知识点的详细阐述。 首先,标题“一个程序员的奋斗史”...
这种学习方式是愚蠢的,因为学习应该掌握为什么,而不是怎么做。 第四个误区是不顾基础,盲目追赶时髦技术。很多人希望自己的东西能够马上跑起来,变成钱,但是这种想法对初学者来说是另人费解的。初学者最大的资本...
从大学生到程序员,这是一个从学术环境到职业领域的转变过程,涉及到多方面的知识和技能学习。首先,我们要明白学习的目标...通过不断的学习和实践,大学生可以逐渐成长为专业的程序员,适应职场的需求并实现个人价值。
【大学生程序员实习报告】主要涵盖了实习生在互联网行业中作为程序员的工作职责和成长经历。在实习过程中,程序员需要对项目经理负责,负责软件项目的详细设计、编码、内部测试等环节,并可能涉及小型项目的系统分析...
在此期间,程序员需要不断学习新的技术知识,提高解决问题的能力,并逐步熟悉行业内的工作流程。 从高级程序员到专家的转变,则是一个更加漫长的过程,可能需要5-8年的时间。在这个阶段,除了继续学习之外,还需要...
第一章“大学四年应这样度过”着重讲述了在大学期间如何为成为一名优秀的程序员做准备。它可能涵盖了基础课程的学习,如计算机科学、数据结构、算法等,以及如何通过实践项目提升编程技能。此外,这一章可能还强调了...
在教育背景方面,重点介绍自己在大学期间所学的专业课程及成绩情况,特别是与Java开发相关的课程如数据结构、算法设计、面向对象编程等。此外,如果有参加过与专业相关的项目或实习经历,也应该详细阐述,这不仅能够...