写优雅的代码,做优雅的程序员

时间: 2018-12-05阅读: 1373标签: 代码

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。面试中最大的感受是,基础知识、项目经验和编程能力是考核的重中之重。

春招结束后,最近又花了一段时间复习基础知识,也突发奇想做了一点玩具项目。还有一周就要去实习了,希望能跟上团队的节奏。

最后谈谈一点感受。既然选了这个专业,就不要畏难,得保持学习的热情和好奇心,多做多想多交流。这个专业的方向、路线也很多,大学期间可以多做尝试,发现自己的兴趣点。最后,引用一句话作结:“每个领域初学总是很有趣,可以迅速做出东西来,但深入学习就意味着要忍受大量繁琐枯燥的细节,不必气馁,这正是何谓专业。”

本文笔者来自中山大学软件工程专业
来源:学梓守迹    


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/1505

200行代码实现超轻量级编译器

本篇和大家一起学习写一款超级简单轻量,去掉注释只有不到200行代码的编译器。,该编译器将类 lisp 语法函数调用 编译为 类C语言函数调用

【重构】使用 Hooks 让代码更易于变更

重构过程中,肯定会遇到新的代码如何做技术选型的问题,要考虑到这套技术的生命力,也就是他是否是更新的技术,还有他的灵活和拓展性,期望能够达到在未来至少 3 年内不需要做大的技术栈升级

如何阅读别人的代码?

比起阅读代码,我更喜欢看别人的文章或者书。我喜欢他们跟我面对面的交流,用简单的自然语言或者画图解释他们的思想。有了思想,我自然知道如何把它变成代码,而且是优雅的代码

Js代码中的span拼接

今天遇到一个小需求,用bootstrap的table只有两个字段,占用太宽,页面不美观,组长要求用拼接,一行几列的形式展现出来。我在form表单中拼接了span,遇到以下问题:

js优秀代码

es6数组去重此技巧适用于包含基本类型的数组:undefined,null,boolean,string和number。(如果你有一个包含对象,函数或其他数组的数组,你需要一个不同的方法!)

前端优化代码

所谓无规矩不成方圆,前端时间在团队 code-review 中发现,不同时期不同开发人员写的代码可谓五花八门。因此我们提出了一些相关代码方面的规范,希望日后能形成团队的编码规范

如何写出优美的javascript代码?

在多年以前,人们注重功能是如何实现的。现如今,随着Web及互联网技术的不断发展,功能仅成了最基本的要求,如何写出漂亮,整洁的代码已成为一个大牛级程序员不可或缺的条件。

简单几步让你的 JS 写得更漂亮

网上有不少关于 JS 编写优化建议,这里我根据自己的经验提出一些比较有用的意见。JS 是弱类型的,但是写代码的时候不能太随意,写得太随意也体现了编码风格不好。

掌握依赖注入5大原则,无需额外编代码!

如果是第一次接触这个概念,可能会一时没有头绪,网上的各种解释可能会让你更加混乱,并觉得它没那么简单。 其实依赖注入本身是单纯、简单的。简单来说,依赖注入是一种方式、方法或者说手段

源代码是什么意思

源代码(也称源程序),是指一系列人类可读的计算机语言指令。 在现代程序语言中,源代码可以是以书籍或者磁带的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机程序。

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!