软件工程专业的学生需要掌握哪些技能?

现在大二,感觉已经找到了方向,对移动应用开发非常感兴趣,自学 iOS 开发一年多了,不过不太敢确定以后如何发展。 === 学校教的:c,c++,数据结…
关注者
666
被浏览
300,757

14 个回答

@周筠

老师艾特来了,小小地答一下。

个人理解,需要掌握以下一些技能点:

  1. 面向对象程序设计(OOP),并会通过具体的编程语言(建议Java和C#二选一)实现。如果要入门,推荐网易云课堂北京大学唐大仕老师的《C#程序设计(上)》。《C#程序设计(下)》10月12日开始。不过这个课程比较基础,需要进阶的,可以学习北京理工大学 @金旭亮 老师的《面向对象软件开发实践之基本技能训练》和《面向对象软件开发实践之专业技能训练》。不过真的有难度。Java的话可以考虑浙江大学 @翁恺 老师的《程序设计入门—Java语言》与《Java语言程序设计进阶》。当然,顺带掌握语言相对应的 IDE,如 Visual Studio 或者 MyEclipse。
  2. 基本的数据结构与算法。可以看网易云课堂上浙江大学 陈越 老师 和 何钦铭 老师的《数据结构》。也可以看 学堂在线 上清华大学邓俊辉老师的《数据结构》。
  3. 数据库,至少掌握SQL以及一个主流的DBMS(MySQL,SQL Server,Oracle等)的使用,具体种类取决于你打算主要发展的技术路线,如你选择C#,那么可以考虑SQL Server。如果需要更进一步的提高,如如何设计较好的数据库,可以学习王珊《数据库系统概论(第5版)》中关于数据库设计规范(主要是范式)方面的章节。当然需要大量的范例做补充。可以多看看 toutiao.io 或者 博客园 上的文章。
  4. 设计模式。学了这个你才能很大程度上加深对于OOP的理解。可以从《Head First设计模式》或者中南大学刘伟老师的几本设计模式书入门。具体请看我在另外一个问题下的回答:初学软件设计模式应该读哪本书? - 知乎用户的回答
  5. 软件工程。推荐 @邹欣 老师的《构建之法(第2版)》。也可以关注他的微博。还可以看 爱课程 上清华大学软件学院 @刘强 老师的《软件工程》课程。
  6. 软件测试技术。基本概念可以看同济大学软件学院 朱少民老师的《软件测试方法和技术(第3版)》,他在网易云课堂也有相应的课程。也可以上 Coursera 学习南京大学软件学院 陈振宇 老师的课程《软件测试》,不过有难度。现在也有不少公司开始注重单元测试,各种单元测试框架(如xUnit)学习起来都很简单,难点在于用例的设计,而用例的设计是建立在各种软件测试方法(等价类、边界值、判定表等)基础之上的。
  7. 一些软件工程方面的辅助工具,如版本管理工具 Git (经常和 GitHub 一起出现),推荐廖雪峰的教程,如果英语水平好也可以看这个:campus.codeschool.com/c,JIRA 等缺陷追踪系统等。
  8. 最好掌握 UML。可以学习 Coursera 上北京大学的《面向对象技术高级课程》,非常好。
  9. 最好掌握一门Web编程语言(ASP.NET/PHP),JavaScript和一个前端框架。这个资料就很多了。也可以看 金旭亮 老师的课。
  10. Office三件套——Word、Excel和PowerPoint。看过不少准毕业生甚至工作了几年的毕业生做的文档和幻灯片,无论从低劣的审美上还是粗糙的格式上简直都让人无法直视。

很多大学生和刚工作不久的人常常有这样的疑问,自己学了这个语言、那个语言、这种技术、那种技术,是不是学得太杂了,是不是应该专注于一种语言或者技术。

我认为大多数提问的人并没有学杂,而只是在打基础而已。从这个问题中也可以看到,学校教的东西是基础中的基础,提问者本人学习的是移动开发的基础,做网站学到的是网络开发的基础。

我们在高中和大学选专业之前都是文理兼修,因为那些是其他一切科学知识的基础。

同样,在IT职业的路上,你在问题中提到的知识也都是基础。都学会了不是学杂了,而只是让自己的基础知识更全面,更扎实。尽管学下去,不需要顾虑什么。只要注意学习的时候不要只学皮毛,多学学每种技术的思想和核心,这样对今后快速学习和扩展知识面以及专注某一技术都会有很大帮助的。