我经常收到类似的站内信,然后花上半个来小时回复(我摆文字真的非常非常慢)。
这个邮件的回复只是我的一点体会,我承认任何人都有思维定势,我也不例外,所以仅供参考。
如果有人还有类似的疑问,就在这篇文章后提问吧(因为我总是重复写一遍类似的文字)。如果没有ITEye账号,可以通过微博私信(zwchen),然后我copy到这儿。
[quote]博主,您好,首先非常感谢您能抽空看看这条短信,第一次就给您发这样的短信,觉得有点不好意思或者说是愧疚,我时不时的看过您的博文,感觉很实在很中肯,希望能从前辈那里得到一点指导。
小弟目前是一所二流本科大学软件工程的学生,目前大二了,因为学校不是很好所以有考研的打算,准备考MSE,而不是计算机科学(这个难度大点)。考研是希望学到更多的东西,也希望能找到更好的工作。
目前有些不太清楚的地方,想问问:
1、算法,由于我选的是j2ee方向,目前感觉算法在平时的项目练习(大多是web应用)中运用的很少,但是有时候又觉得算法是很重要的东西,也听学长说做那么多项目还不如去积累有用的算法,所以很想知道对于以后工作中需要用到的算法,应该如何去学习和掌握(曾经试过做ACM,不过发现上面的题都比较难,再由于练习的很少,所以设计算法的能力也不是很好。数据结构这门课,虽然是也学了点,不过感觉能用上的很少)
2、英语,这个一直是比较头疼的问题,久了不去复习就会很快的遗忘,但是复习又要花很多时间(语法,单词,短语....),不是因为考试或者做题,也基本是不会去看的。阅读对我来说虽然问题不大,但是否工作中就真的需要口语能力?
3、对于技术的学习,就目前只学习了java基础,struts1.3,jsp这些课程,感觉自己除了会用点之外,其他的什么都不知道。后面还会学习hibernate,spring,ajax。其实就是觉得,老师就只是教会了我们如何使用工具,但是没告诉我们为什么,虽然我认为要成为一个优秀的 java程序员就会这些还远远不够,但是自己也不知道该怎样学习来让自己更加透彻的了解自己所学的东西。
博主,您好,首先非常感谢您能抽空看看这条短信,第一次就给您发这样的短信,觉得有点不好意思或者说是愧疚,我时不时的看过您的博文,感觉很实在很中肯,希望能从前辈那里得到一点指导。[/quote]
XXX同学:
一个大二的学生,会思考这些问题,本身已经超越于很多同龄人了。
我有如下建议:
1、坚决不要读研,计算机是一门应用学科,强调实践(化学、医学、历史可以考虑读研)。再说,你听说过多少IT技术是在实验室发明的?读研学习三年,不如工作一年,而且对你找工作并不利(硕士毕业上海一般6/7k,但实际上还不如本科工作两年的),我很少见到读研是因为对计算机感兴趣,而不是延迟就业。
2、工作后,看你进入研发还是开发。研发一般非常细分,比如视频解码,开发一般都没有多少技术含量,特别是软件外包(可能贡献了中国软件产业60%以上的GDP)。工作中需要的技术,如果有大学的理论功底,学起来非常快,像Hibernate、Spring这类框架其实很简单,如果你理解背后的思想。但理论功底不是看书学来的,而是做项目,然后回过头来思考那些理论,如数据库的索引原理及实现。
你可以,多读框架源码
你可以,用Sniffer hack、分析网络数据包
你可以,多看书,一年看上二三十本
当然了,兴趣是一切成功的钥匙,如果你喜欢钻技术,我所说的都是废话,因为你都会悟出来。
如果你想学习一门技术,一定要反复问自己一个问题:这门技术是解决什么问题的?或者说,为什么会产生这种技术?
我先提几个问:为什么会出现Hibernate?Thread是解决什么问题?EJB的本质是什么?
大家可以花几个月来思考。
3、算法,不一定是排序和查找,大学只是以此作为算法的入口,你想,如果不这样,还有其它更好的题材教授算法吗?数据结构永远优先于算法,垃圾结构,最好的算法都要打折扣,就如同房子建歪了,再好的钢筋水泥有什么用呢?
绝大部分规范都是以数据结构形式展现的,如TCP、BT、MP3、JPG、SOAP,甚至flash通讯的AMF二进制流...
你不一定要精通大学教程的算法,不过它对你毕业面试很有用,工作基本上用不着(属于基础类库),但是你必须精通一些。你可以了解一下图片格式或文本格式,如pdf规范,可能对算法和数据接口更宏观些,也有趣些。
学习只能在有乐趣时才能深入、持久。
有几门大学课程务必学好:操作系统原理和实现、数据库原理、TCP/IP协议、离散数学、计算机组织与结构等,同时精通一门语言及用该语言实现的算法,这些我曾经都是自学的。但最好的学习是实践,你可以参加一些开源项目,以它为线索,带动你的学习。
孤立去考高分,效率是非常低的。
4、英语,你要是没兴趣就别学算了。不过,英语是计算机的母语,深入的计算机知识,需要查wikipedia和英文帮助文档,而这是英文的。
你了解Event Driven Architecture吗?有深入的中文文档吗?,不了解它就不了解GUI编程。
没兴趣,基本上英语学不好,有人读整个大学,70%时间都是考CET-4,可惜啊。
5、学习任何时髦的框架,都必须在项目中实践,当然看书也是必须的。边做项目边看书。读书和工作那几年,我几乎把Java和IT领域所有知名书籍都翻过了(我买过好几千块的IT书)。
最后,重复一点:单纯看教程、然后做习题,这类中学六年延续的学习方法,非常枯燥、低效,必须改进。尝试自己动手做项目,比如做一个媒体播放器。
这个邮件的回复只是我的一点体会,我承认任何人都有思维定势,我也不例外,所以仅供参考。
如果有人还有类似的疑问,就在这篇文章后提问吧(因为我总是重复写一遍类似的文字)。如果没有ITEye账号,可以通过微博私信(zwchen),然后我copy到这儿。
[quote]博主,您好,首先非常感谢您能抽空看看这条短信,第一次就给您发这样的短信,觉得有点不好意思或者说是愧疚,我时不时的看过您的博文,感觉很实在很中肯,希望能从前辈那里得到一点指导。
小弟目前是一所二流本科大学软件工程的学生,目前大二了,因为学校不是很好所以有考研的打算,准备考MSE,而不是计算机科学(这个难度大点)。考研是希望学到更多的东西,也希望能找到更好的工作。
目前有些不太清楚的地方,想问问:
1、算法,由于我选的是j2ee方向,目前感觉算法在平时的项目练习(大多是web应用)中运用的很少,但是有时候又觉得算法是很重要的东西,也听学长说做那么多项目还不如去积累有用的算法,所以很想知道对于以后工作中需要用到的算法,应该如何去学习和掌握(曾经试过做ACM,不过发现上面的题都比较难,再由于练习的很少,所以设计算法的能力也不是很好。数据结构这门课,虽然是也学了点,不过感觉能用上的很少)
2、英语,这个一直是比较头疼的问题,久了不去复习就会很快的遗忘,但是复习又要花很多时间(语法,单词,短语....),不是因为考试或者做题,也基本是不会去看的。阅读对我来说虽然问题不大,但是否工作中就真的需要口语能力?
3、对于技术的学习,就目前只学习了java基础,struts1.3,jsp这些课程,感觉自己除了会用点之外,其他的什么都不知道。后面还会学习hibernate,spring,ajax。其实就是觉得,老师就只是教会了我们如何使用工具,但是没告诉我们为什么,虽然我认为要成为一个优秀的 java程序员就会这些还远远不够,但是自己也不知道该怎样学习来让自己更加透彻的了解自己所学的东西。
博主,您好,首先非常感谢您能抽空看看这条短信,第一次就给您发这样的短信,觉得有点不好意思或者说是愧疚,我时不时的看过您的博文,感觉很实在很中肯,希望能从前辈那里得到一点指导。[/quote]
XXX同学:
一个大二的学生,会思考这些问题,本身已经超越于很多同龄人了。
我有如下建议:
1、坚决不要读研,计算机是一门应用学科,强调实践(化学、医学、历史可以考虑读研)。再说,你听说过多少IT技术是在实验室发明的?读研学习三年,不如工作一年,而且对你找工作并不利(硕士毕业上海一般6/7k,但实际上还不如本科工作两年的),我很少见到读研是因为对计算机感兴趣,而不是延迟就业。
2、工作后,看你进入研发还是开发。研发一般非常细分,比如视频解码,开发一般都没有多少技术含量,特别是软件外包(可能贡献了中国软件产业60%以上的GDP)。工作中需要的技术,如果有大学的理论功底,学起来非常快,像Hibernate、Spring这类框架其实很简单,如果你理解背后的思想。但理论功底不是看书学来的,而是做项目,然后回过头来思考那些理论,如数据库的索引原理及实现。
你可以,多读框架源码
你可以,用Sniffer hack、分析网络数据包
你可以,多看书,一年看上二三十本
当然了,兴趣是一切成功的钥匙,如果你喜欢钻技术,我所说的都是废话,因为你都会悟出来。
如果你想学习一门技术,一定要反复问自己一个问题:这门技术是解决什么问题的?或者说,为什么会产生这种技术?
我先提几个问:为什么会出现Hibernate?Thread是解决什么问题?EJB的本质是什么?
大家可以花几个月来思考。
3、算法,不一定是排序和查找,大学只是以此作为算法的入口,你想,如果不这样,还有其它更好的题材教授算法吗?数据结构永远优先于算法,垃圾结构,最好的算法都要打折扣,就如同房子建歪了,再好的钢筋水泥有什么用呢?
绝大部分规范都是以数据结构形式展现的,如TCP、BT、MP3、JPG、SOAP,甚至flash通讯的AMF二进制流...
你不一定要精通大学教程的算法,不过它对你毕业面试很有用,工作基本上用不着(属于基础类库),但是你必须精通一些。你可以了解一下图片格式或文本格式,如pdf规范,可能对算法和数据接口更宏观些,也有趣些。
学习只能在有乐趣时才能深入、持久。
有几门大学课程务必学好:操作系统原理和实现、数据库原理、TCP/IP协议、离散数学、计算机组织与结构等,同时精通一门语言及用该语言实现的算法,这些我曾经都是自学的。但最好的学习是实践,你可以参加一些开源项目,以它为线索,带动你的学习。
孤立去考高分,效率是非常低的。
4、英语,你要是没兴趣就别学算了。不过,英语是计算机的母语,深入的计算机知识,需要查wikipedia和英文帮助文档,而这是英文的。
你了解Event Driven Architecture吗?有深入的中文文档吗?,不了解它就不了解GUI编程。
没兴趣,基本上英语学不好,有人读整个大学,70%时间都是考CET-4,可惜啊。
5、学习任何时髦的框架,都必须在项目中实践,当然看书也是必须的。边做项目边看书。读书和工作那几年,我几乎把Java和IT领域所有知名书籍都翻过了(我买过好几千块的IT书)。
最后,重复一点:单纯看教程、然后做习题,这类中学六年延续的学习方法,非常枯燥、低效,必须改进。尝试自己动手做项目,比如做一个媒体播放器。