Q1:软件工程学什么?
学计算机,写程序,做软件,当程序员。
Q2:软件工程(Software Engineering)跟计算机科学(Computer Science)是什么关系?
两个专业的课程安排相近。CS专业会更深入地学习计算机理论和原理,SE更注重编程实践能力。专业选择上,看分数线选。
Q3:听说学计算机很辛苦?
是的,IT行业加班现象严重。在计算机世界里,技术日新月异,自学能力是程序员最重要的能力之一。选了这个专业,就要时刻保持好奇心和技术嗅觉,不能只满足于完成课内作业。
Q4:软件工程学习哪些专业课程?
• 编程类:编程语言、设计模式、web开发、移动端开发、桌面端开发、Unix环境编程等等
• 原理类:数据结构、算法、操作系统、数据库、计算机网络、数字逻辑电路、计算机组成原理、编译原理、软件工程等等
• 数学类:离散数学、高等数学、线性代数、概率统计、数值计算等等
不知道这些课程到底学的是什么?我来举个栗子吧。
假设你用浏览器打开了豆瓣,搜索“周星驰”,在这个过程中计算机帮你做了什么事情呢?
玩过游戏的同学肯定听说过“客户端”和“服务器”这两个词,在这里你的浏览器就是客户端,它把这个搜索请求提交给豆瓣的一台服务器(服务器是另一台计算机),服务器处理完后,返回结果给你的浏览器。
你可能会问,浏览器去找哪台服务器呢?它和服务器之间怎么通信呢?这就是计算机网络课程学习的知识,这个过程中会涉及到DNS,HTTP等网络协议,协议定义了两台计算机间传递的信息的表示方法等。
好了,现在浏览器拿到了结果,这是一些文件,浏览器又是怎么让你看到这样一个界面的呢?这是因为浏览器按着文件上写的东西干活,把一个个文字一张张图片画了出来。
那么,“画了出来”是什么意思?
这个问题其实有些复杂。你的电脑上有一块叫做”显卡“的设备,它接收一堆0和1的电信号,执行指令,最终显示器把电信号转化成光信号。这里的显卡和CPU类似,都按照收到的指令完成任务。不同厂家生产的显卡、CPU的接受的指令可能不同,但结构上往往相似。研究CPU内部的结构,以及CPU怎么执行指令,就是计算机组成原理课程的内容。
浏览器和底层的设备之间,还有操作系统在干活,简单来讲,操作系统接受浏览器的差遣,去和底层的硬件打交道。操作系统对上层软件(例如浏览器)屏蔽了底层硬件的细节。
现在我们把关注点转移到服务器上,它是怎么知道周星驰拍了哪些电影呢?答案是查询数据库,数据库管理软件负责把数据以某种形式保存起来,并提供查询功能等。
你可能会惊叹,数据库好强大,它存了数以万计的电影,它是怎么这么快就把周星驰的电影找出来呢?数据库会用很多技术来做这件事,其中可能用到”索引技术“——就像查新华字典一样,先查目录,再找到要查的东西在哪里。而数据怎么组织使得可以通过一个目录项迅速定位到要查找的东西,就涉及到数据结构的知识。
提到数据结构就不能不提算法。周星驰的电影按照评分、热度等排好了序,怎么进⾏排序就跟“算法”有关。
再来聊聊其它的事情,大家应该知道,大部分代码都是类似自然语言的表述,例如 if (a < b) return a; 而CPU却只认识0和1,怎么翻译呢?这是编译原理要解决的问题。
而数学也是无处不在的,在离散数学里, a < b 被(拗口地)称作“a与b具有关系:小于”。离散数学理论在计算机里大有用武之地。
现在我们来定义一种二元关系R,规定a和b 只能为0或1, a R b = 1 当且仅当a和b均为1,其它情况 a R b =0 。这里的关系R即“与”关系,类似的还有“或”关系,“非”关系等等。把这些关系组合起来并用电路实现,电路就能接收一组0/1输入,按照设计好的数字逻辑,产生一组0/1输出,这就是数字逻辑电路研究的问题。
最后,模拟电子技术会告诉你0和1是怎么来的。
Q5:毕业后有哪些选择?
毕业后可以选择就业,到阿里腾讯这些互联网公司就职,待遇较好,详情可以到他们的校园招聘网站了解。
开放的岗位一般有:
• 技术类:
开发类:前端开发、移动端开发、后台开发、底层开发、游戏开发、运营开发等等
运维类:系统运维、数据库运维、网络运维等等
数据类:大数据分析、机器学习、自然语言处理等等...
• 非技术类:
产品类:游戏策划、产品策划等等
设计类:游戏美术、视觉设计等等
也可以选择继续深造,升学读研,详情可了解各高校的研究生招生项目。
Q6:一些建议
• 课程学习:打好计算机基础,多思考总结背后的设计思想
• 动手实践:多动手做做一些玩具项目,写写技术博客,加入软件团队,参与到实际的软件项目开发中(这里为中大Matrix团队打个广告)
• 科研能力:如果想走科研路线,可以尽早跟着导师读论文做科研项目
• 综合能力:开拓眼界,多了解业内动态,学好英语,学好数学
个人经历及感受
我在入学时是小白一个,每周C语言的编程作业几乎总有一道难题不会写。寒假时静下心提前自学了一些C++的知识,第二学期终于进步明显,编程作业总能上榜,信心也积累了起来。大一一年,我想自己收获最大的是开拓了眼界,通过看经典书籍、参加讲座、学习⽹课,终于对计算机及软件工程有了一个宏观的粗浅的理解。
大一暑假里,因为兴趣开始接触网络爬虫,由此开始接触web开发。大二上学期,因为参加比赛的需要又自学了Ruby,对web的了解日渐增多。大二寒假,抱着试一试的心态报名了Matrix的招新,幸运通过了面试,参与服务端开发工作。这里介绍一下,中大Matrix团队主要做的是一个课程管理系统,为中大程序设计类课程提供代码在线评测等服务。
团队里队友们都很厉害,刚刚加入时,开发用到的技术我还很生疏,我又成了技术小白。但是,需求总得尽快做完,这段时间里,我又狼吞虎咽学习了开发用到的各种知识,向队友们请教,终于慢慢熟悉了工作。这时,团队创始人们即将毕业,我非常幸运地入选了团队核心成员。之后,要承担的工作更多了,要了解整个系统的架构,学习运维,及时修复用户反馈的问题。期中考将近,我又开始负责考试系统服务端的重构工作。为期一个月的开发和测试之后,考试系统算是顺利通过了期中考的检验。
很快又是新学期,进入大三,我开始接手团队的项目管理工作,这又是一个我不熟悉的领域,还好师兄们已经留下了许多成熟的规范,队友们也很靠谱,团队陆续完成了两个大版本的迭代。感谢队友的信赖和帮助。
因为熟悉系统的需要,我开始接触后台代码,这又是一个有趣的学习领域,我开始定下春招报后台开发的目标。寒假里做了一些准备,学习了一些以前没接触过的底层知识。三月,春招终于来了,凭着之前的积累和一些项目经验,面试还算顺利,幸运地拿到了腾讯后台开发offer。面试中最大的感受是,基础知识、项目经验和编程能力是考核的重中之重。
春招结束后,最近又花了一段时间复习基础知识,也突发奇想做了一点玩具项目。还有一周就要去实习了,希望能跟上团队的节奏。
最后谈谈一点感受。既然选了这个专业,就不要畏难,得保持学习的热情和好奇心,多做多想多交流。这个专业的方向、路线也很多,大学期间可以多做尝试,发现自己的兴趣点。最后,引用一句话作结:“每个领域初学总是很有趣,可以迅速做出东西来,但深入学习就意味着要忍受大量繁琐枯燥的细节,不必气馁,这正是何谓专业。”
本文笔者来自中山大学软件工程专业
来源:学梓守迹
一个系统可以维持5年,10年,甚至20年以上,但是代码和设计模式的生命周期非常短,当对一个解决方案使用不同的方法进行迭代的时候,通常只能维持数月,数日,甚至几分钟的时间
良好的编程习惯涉及到很多方面,但在软件行业内,大多数的公司或组织都不会把良好的编程习惯列为主要关注点。 例如,具有可读性和可维护性的代码比编写好的测试代码或使用正确的工具更有意义,前者的意义在于可以让代码更易于理解和修改。
减少嵌套会让代码可读性更好,同时也能更容易的找出bug,开发人员可以更快的迭代,程序也会越来越稳定。简化代码,让编程更轻松!
Google为了那些还不熟悉代码规范的人发布了一个JS代码规范。其中列出了编写简洁易懂的代码所应该做的最佳实践。代码规范并不是一种编写正确JavaScript代码的规则,而是为了保持源代码编写模式一致的一种选择。
程序员似乎忘记了软件的真正目的,那就是解决现实问题。您编写的代码的目的是为了创造价值并使现有世界变得更美好,而不是满足您对自我世界应该是什么的以自我为中心的观点。有人说:如果你拥有的只是一把锤子,那么一切看起来都像钉子一样
TinyMCE是一个轻量级的基于浏览器的所见即所得编辑器,由JavaScript写成。它对IE6+和Firefox1.5+都有着非常良好的支持。功能方强大,并且功能配置灵活简单。另一特点是加载速度非常快的。
函数式编程对应的是命令式编程, 函数式编程的核心当然是对函数的运用. 而高阶函数(Higher-order)是实现函数式编程的基本要素。高阶函数可以将其他函数作为参数或者返回结果。所以JS天生就支持函数式编程
朋友发表了一条说说:入职新公司,从重构代码到放弃”,我就问他怎么了?他说,刚进一家新公司,接手代码太烂,领导让我先熟悉业务逻辑,然后去修复之前项目中遗留的bug,实在不行就重构
页面实现关键词高亮显示:在项目期间遇到一个需求,就是搜索关键词时需要高亮显示,主要通过正则匹配来实现页面关键词高亮显示。在搜索结果中高亮显示关键词:有一组关键词数组,在数组中筛选出符合关键字的内容并将关键字高亮
这些样式都不是重要的,这里加个margin是为了让其出现拖拽的时候出现鼠标偏移,好做演示而已,不然margin:0 auto 就可以实现盒子的居中,首先通过offsetLeft的方法获取到盒子的偏移值,然后在通过clientX,clientY获取到鼠标的坐标
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!