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

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

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

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

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

关闭

Js代码中的span拼接

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

编写优秀CSS代码的8个策略

编写基本的CSS和HTML是我们作为Web开发人员学习的首要事情之一。然而,我遇到的很多应用程序显然没有人花时间真正考虑前端开发的长久性和可维护性。

怎么样才能不写出别人嘴里的烂代码?

每个人对于好的代码在自己不同的时期都有不一样的理解。当个人所在的层次变化,好代码的概念也会跟着变化。老夫上手就是复制粘贴,别跟我说什么编码规范,设计模式。

前端代码美化的艺术

原本只是想简单的聊一下代码格式化的问题,无奈本文拖沓了很久,在此期间,我又思考了很多,我越来越觉得代码格式化是一门艺术。为了衬托“艺术”二字,可能叫“代码美化”更贴切一点,但是本文的深度远没有标题那么宏大

对码农而言什么样的代码才能叫做好代码?

好的代码,就像是好的笑话——无需解释就能让别人明白。如果你的代码能够做到不解自明,在大多数时候,你根本无需为其配备说明文档。

js优秀代码

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

你不知道的 useCallback

对于新手来说,没写过几次死循环的代码都不好意思说自己用过 React Hooks。本文将以useCallback为切入点,谈谈几个 hook 的使用场景,以及性能优化的一些思考。

你写的代码就是你的犯罪证据

最近我工作的主要内容,是在和别人结对编程,以对一个大型的遗留系统项目进行重构。过程中,我发现一个特别有意思的东西,我重构了很多的 if 语句。

如何写出优美的javascript代码?

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

程序员该如在低代码和无代码开发中抉择?

对于一个人第一次是如何了解低代码/无代码这两种开发方式,我总是充满好奇。这就是为什么我觉得贸易展会是如此有趣的原因;因为我可以拿同样的问题问每一个走进你的展台的人们。通常这是我问他们的第一个问题,当然是在扫描了他们的胸牌之后。

点击更多...

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