软件工程第一次作业:写一篇自己的博客
这个作业属于哪个课程 | <18级软件工程基础> | |
---|---|---|
这个作业的要求在哪里 | <第一次个人作业:阅读与准备> | |
我在这个课程的目标是 | 学会写自己的博客并优化博客的阅读体验,同时提升自己软件方面的专业知识及能力。 | |
这个作业在哪个具体方面帮助我实现目标 | 对Markdown编辑器的了解与使用以及对软件方面知识的讲解。 |
一丶 个人介绍
--Welcome to My Blog
--Self Introduce
"Be the One. Never be the same." 做一个少数派。
我是来自计算机科学与技术2018级的吴昊阳,是一个地地道道的山东汉子,我自认为是一个乐观向上,积极开朗的人。
说起一个让我觉得很骄傲的事,那可能就是大多数人想做而做不到的“减肥”了。我在三年前是一个300斤的胖子,充斥在视线中就是一堵墙的感觉。因为当时情窦初开,对一个女孩产生了爱慕之情,于是下定决心开始减肥。经过自己的不断努力,体重已经减掉了一半,并且体质也越来越好,对生活也充满了希望,看待任何问题都有了和别人不一样的态度。
在专业方面,我目前在计算机科学学院创新创业中心团队做算法相关方向,主要学习机器学习、深度学习等领域。因为从小对数学感兴趣,上了大学以后又对编程“一见钟情”,所以毅然决然决定转专业来到计算机,开始了“程序猿”的生活。在这个大数据时代,人工智能领域已成为时代主流。一次偶然的机会,王杨院长给了我一次参观戴尔工厂的机会,让我对戴尔公司的硬件设备和人工智能方面的突破叹为观止,于是开始自学Python,通过考核进入团队,开始了系统的人工智能方面的学习。当我用代码做出第一个情感分析的项目时,我产生了满满的幸福感,也更让我对现在所做的方向充满信心,并决定驻足生根。虽然局限于现在课业压力,我的大量精力必须投入在专业课上,导致我还对机器学习、深度学习的很多原理方面还了解的不是很深,但我相信通过以后的努力,我一定会做的更好。
现在,我仍然会把自己的重心放在学业上,放在让我充满未知的领域上,努力做到自己所能做到的最好。像我在自我介绍开头那样,做一个少数派,对未知充满好奇,对未来充满信心。
二丶 我的阅读与思考
基于兴趣方面的考虑,我填专业几乎都是填写的 数学和计算机相关专业,但是高考失利,没有选择专业的机会,于是被调剂到了测绘工程。在了解到学校的转专业政策以后,我比以前更加努力,以还不错的成绩 成功转专业到计算机科学与技术,开始了敲代码的专业生活。
转到这个专业后给我的直观感受:
1、这个专业做的是有关计算机底层方面的工作,从小就喜欢玩电脑的我便有了更强烈的好奇心去了解计算机原理。
2、计算机对数学的要求很高,和我喜欢的数学一点也不冲突,反而我可以用计算机更好地对数学进行建模,也可以用数学对计算机相关课业有更深层次的理解。
2.过去一年的课程是否符合你对你自己所在专业的期待呢?
总体来说, 非常符合我对计算机专业的期待,但是也有一些方面和我之前理解的不一样。
首先,这一年我确实学到了计算机有关方面的较为全面的知识,即使离成为大佬还有很远的距离。
其次, 计算机专业更注重实践,只懂理论是行不通的。
最重要的是, 计算机专业和数学相关课程联系非常大,比如离散数学,线性代数等,正好和我的兴趣相契合。
专业学习方面我遇到的一些问题:
1、开设课程方面,数学课程以及相关实践课程的匮乏,让我们在专业学习的受阻严重。高等数学课程讲授时,删减的章节较多,而且考试比较简单,并不能很好的体现一个学生的数学水平。希望学校能开设一些数学和计算机类的选修课,让我们对这些知识加深了解。
2、实际学习生活中,我的敲代码实践环节很少,大部分都只是在上机课或者在团队做项目时才会敲,很少做课外的延伸,导致自己能解决的仅仅是应试的问题,而解决不了很多有难度的问题。
3.你所在的专业是你喜欢的领域吗?它是你擅长的领域吗?
计算机专业确实是我喜欢的领域,但是准确来说, 我更喜欢人工智能这一领域。这个专业对于我来说是一个崭新的起点, 我也在努力让它成为我所擅长的领域。
4.将来你会选择从事和你专业相关的工作吗?是的话给出你想去的城市、公司和岗位,否的话给出原因:
我选择这个专业的目的就是想从事计算机行业的相关工作,或者当一名计算机专业的老师。
现在的打算是, 努力学习,把GPA提高,争取保研,对人工智能行业了解深一些以后,回山东工作。
有一个小梦想, 进入华为、阿里这种世界级的互联网公司,为中国计算机行业添砖加瓦。
在成都上学,也慢慢喜欢上了这个城市,如果能留在成都工作,从事计算机相关行业,那也是一个很棒的选择。
5.自我感觉你已经具备的专业知识、技能、能力有哪些?已经写过的代码量是多少?描述你做的最复杂的项目/作业。
计算机相关的数学知识(高等数学、线性代数、概率统计等)、数据结构,机器学习,Web网络爬虫、Python数据分析、Python数据挖掘、深度学习框架、计算机汇编语言、离散结构、数据库、面向对象程序设计等相关技能。
目前代码量20000行左右。
今年4月份做的贪吃蛇游戏、5月份做的Python情感分析、今年暑假做的凤凰网爬虫和幸福感数据分析。
6.离成为一个合格的本科毕业生,在专业知识、技能、能力上还差距哪些?
我认为 每个人对于“合格”的标准是不一样的,我是一个“野心”很大的人,我想获得的不仅是专业知识,还有为人处世的方式。当然,涉猎一些较为广阔的知识,平时多敲代码,改bug,在提升自己的专业素养上也是必须经历的一道坎儿。
我自我认为我的逻辑思维能力还有所欠缺,而且面对很多问题时,自己懂得这个意思,但是给别人讲不明白,也侧面说明了这个知识没有掌握透彻,导致言不达意。 这个学期,我要着重提高自己的学科素养和语言表达能力。
7.对照以上你阅读的前人们的经历,你的选择是什么?
我还是仍然会选择做一个“少数派”, 在理论中追求自我,实践中检验自我。
我希望自己能在人工智能行业做出自己的努力,取得一定的成就,不负时代,不负未来,研究生方向打算继续学习人工智能方向,不断打磨自己。我是个得失心很重的人,所以我愿意为了自己喜欢的事倾尽所有。但是,这几年经历的事,让我教会了我放下很多包袱,轻装上阵。所以我选择,坚定自己现在的方向。
8.在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?
说到优点,我自己认为我执行力比较强,有一点“强迫症”,说今天要完成的事必须今天完成。如果说是学科上的优势,我可能比大部分同学对数学的兴趣多一些,也喜欢研究一些小难题。但是我也有很多缺点,我不是一个很聪明的学生,在专心这一方面很欠缺,经常开小差,导致任务完成效率有点低,不够勤奋。
9.针对你的选择,你给自己的大三设定的规划安排是什么?
在把专业课程学好的同时,争取保研,如果保不了,就努力考研去一个计算机专业非常厉害的学校继续学习自己喜欢的人工智能方向。同时,参加大数据挑战赛,努力获得奖项,成为自己保研或者考研的筹码。同时继续 把基础夯实,更好地把理论和实践结合,学好英语,研读一些国外的论文,同时读一些国外的书籍,提高自己的专业能力。
除了学业方面,我更希望自己能养成更好的生活习惯,收获一段美好的校园恋爱,成为自己期许的样子,让大三锻炼自己。
10.你对于实现自己的梦想已经做了或者计划做什么样的准备?
我现在在学生团队做算法相关工作,计划大二学好数据分析和数据挖掘的知识,同时提高自己的代码量和数学能力,以此更好地辅佐我的人工智能梦。
三丶阅读教材后我的问题
Q1.计算机科学和软件工程是什么样的关系? |
A1.
软件工程专业是一门研究用工程化方法构建和维护有效的、实用的和高质量的软件的学科。它涉及到程序设计语言,数据库,软件开发工具,系统平台,标准,设计模式等方面,因此要求学生在学习过程中一定要学精学通,不能只了解皮毛。
计算机科学与技术类专业毕业生的职业发展路线基本上有两条路线:一是纯技术路线,二是由技术转型为管理的路线。(课本P10-15)
Q2.软件的可利用性怎么体现? |
A2.
1、上下文梳理
上下文梳理是明确研发系统与哪些外部实体存在关系。在梳理软件的上下文的时候,一般会更加关注与软件系统有直接功能交互关系的实体,有时会忽略软件系统的用户,而明确软件的用户,是易用性提升的起点。
因此,在上下文梳理时需要明确软件的目标用户。例如某个软件的目标用户是外部客户和内部服务工程师,那么在上下文分析的时候,应该明确出来。需要注意的是,在对软件首个版本分析上下文的时候,不能只看软件当前版本范围的需求,而是需要看软件所有的需求,例如当前版本做不面向外部客户的特性,但在上下文分析的时候仍然需要明确出来,否则容易遗漏影响架构的需求。
2、需求场景分析
• 使用场景定义
从易用性分析出发,前面上下文分析明确了用户角色,这里要围绕用户角色来梳理用户的使用场景。使用场景表明了软件被用户用来干什么。
梳理使用场景,即基于对用户对软件业务/功能诉求的理解,进行场景的定义。基于使用场景对软件的各个大大小小相关的需求特性进行归类,便于下一步的需求分析。更重要的是,使用场景是UI设计的重要依据和输入。(课本P139-150)
Q3.软件需求分析的任务是什么? |
A3.
开发软件系统最为困难的部分就是准确说明开发什么。最为困难的概念性工作便是编写出详细技术需求,这包括所有面向用户、面向机器和其它软件系统的接口。同时这也是一旦做错,将最终会给系统带来极大损害的部分,并且以后再对它进行修改也极为困难。
目前,国内产品的庞杂,一家企业可能有几个系统并立运行,它们之间接口是系统开发人员最头痛的问题。
对于商业最终用户应用程序,企业信息系统和软件作为一个大系统的一部分的产品是显而易见的。但是对于我们开发人员来说,并没有编写出客户认可的需求文档,我们如何知道项目于何时结束?而如果我们不知道什么对客户来说是重要的,那我们又如何能使客户感到满意呢?
然而,即便并非出于商业目的的软件需求也是必须的。例如库、组件和工具这些供开发小组内部使用的软件。当然你可能偶尔勿需文档说明就能与其他人意见较为一致,但更常见的是出现重复返工这种不可避免的后果,而重新编制代码的代价远远超过重写一份需求文档的代价,这些血的教训正在国内的软件开发者身上发生。(课本P164-175)
Q4.软件运营如何实现与研发团队成员进行高效沟通? |
A4.
1、沟通排期
在设计师水平有保证的情况下。作为需求方,在提交需求前要与被需求方的设计主管提前进行沟通,沟通需求具体下达到哪位设计师手上,因为设计还分网页设计和平面设计两种。在不了解情况前提下,贸然给某一位设计师提需求是不专业的表现,会引起设计的不满。
2、明确需求
好的网页可以进行适当参考,要理解别家为什么这么设计功能和布局,是不是真的适合我们,同时也要针对做功能的取舍,而不是照抄。
落地到需求文档后,要和设计师进行沟通,设计也会有一些不错的建议帮助把需求案子改的更好,也能帮助运营发现隐藏的设计问题。
3、平行沟通
需求方要避免没有主见不清楚自己想要什么但还是非常固执相信自己眼光的人。
需求方对自己想要的结果要有一个认识,即使有改稿需求也要知道每次往哪个方向改,而不是“试试这个”“试试那个”“试了七八遍还是换回第一稿吧”。
4、转换角色
当然,设计师的沟通方式也影响沟通结果。
比如需求方是新人,不太知道自己想要啥的时候。这个时候角色可以做一下转换,设计此时可以引导对方对设计对需求进行具象化描述。(课本P94-105)
Q5.中国IT产业的自主创新有多难? |
A5.
分享自己的一点浅见。
改革开放以后,渴望核心技术的中国掀起了“以市场换技术”的热潮,典型的如汽车、制造、手机、日化、IT等领域。结果,市场拱手相让,技术却没学来多少。如国产汽车,至今在发动机、变速箱、底盘“三大件儿”上和国际水平扔相去甚远。
但凡事无绝对,中国以市场换技术也取得了不少的成功,譬如中国高铁,以较低的代价获得国外技术,之后快速消化、吸收、再创新,如今中国高铁已经达到国际一流水平,并被誉为中国“新四大发明”之一。
2000年之后,随着中国加入WTO,“以市场换技术”受到越来越多的挑战,这条政策开始逐渐从国家具有全局意义的指导性政策中淡出。面对全球化的市场竞争,中国开始大力倡导自主创新,并成为之后中国技术发展的主旋律。
正如高尔基所说,如果学习只在模仿,那么我们就不会有科学,也不会有技术。
为摆脱受制于人的局面,中国IT产业的自主创新已经耗费了几代人的心血,如今在HPC、国产CPU、操作系统、数据库、AI等方面已经取得一定进展。但2013年的“棱镜门”和今年的“中兴”事件,相继为中国IT产业敲响了警钟,想要实现真正的自主可控,中国还有很长的路要走。
Q6.绩效管理如何优化和改进? |
A6.
1、公司要做好绩效管理体系建设,注重细节,考虑到公司发展可能遇到的特殊情况下的应对措施,与公司的风险管控机制结合起来,未雨绸缪。
2、组织机构基本稳定后,要全面审视并重新修改原绩效考核管理办法,配套考核管理体系建设,以期在下一轮考核工作中有法可依。
3、绩效考核工作能够做好,全体员工的参与和支持是基础,而一支确保原则性、执行力强、效率高的考核执行团队则是关键。
4、要保证考核有效推进,设立代表权威性的考核委员会或考核薪酬委员会是必要的。不但可以保障考核的组织机构、执行人员无论怎样变化,基本职能都具备;而且可以监督考核是否公平、公正、公开,杜绝暗箱操作。
5、考核工作要坚持原则性与灵活性的统一,确保信息的沟通交流顺畅。比如,由于考核者本身会根据组织变化发生调整变化,但必须坚持考核者对被考核组织、个人的绩效表现有直接了解这一原则。
四、我了解的源程序版本管理工具
1.GitHub |
优点:
GitHub提供Git存储库服务,基于web,允许你使用Git的源代码管理功能,或者其特性。GitHub提供Git存储库服务,基于web,允许你使用Git的源代码管理功能,或者其特性。
缺点:可能不是捕捉创意过程和记录创意点子的最佳工具。对于这种特殊功能模拟可以选择LayerVault 或其他相似工具。之前,我们已经强调过Github非常适用代码跟踪,但是却不是最好的设计跟踪工具。将图片内容转化为代码,或者将设计用于产品设置,看起来依旧不是那样顺利。
2.SVN |
优点:
1、集中式管理,管理方式在服务端配置好,客户端只需要同步提交即可,使用方便,操作简单,很容易就可以上手。
2、在服务端统一控制好访问权限,利用代码的安全管理。
3、所有的代码已服务端为准,代码一致性高。
缺点:
1、所有操作都需要通过服务端进行同步,这会导致服务器性能要求比较高。如果服务器宕机了就无法提交代码了。
2、分支管理不灵活,svn分支是一个完整的目录,且这个目录拥有完整的实际文件,这些操作都是在服务端进行同步的,不是本地化操作,如果要删除分之,也是需要将远程的分支进行删除,这会导致大家都得同步。
3、需要联网。如果无法连接到SVN服务器,就无法提交自己的代码,更别说还原、对比等操作了。如果在内网还好,网速比较稳定,同步相对比较快,如果是通过外网同步,有可能就需要同步很久。
3.GIT |
优点:
1、分布式开发时,可以git clone克隆一个本地版本,然后在本地进行操作提交,本地可以完成一个完整的版本控制。在发布的时候,使用git push来推送到远程即可。
2、git分支的本质是一个指向提交快照的指针,速度快、灵活,分支之间可以任意切换。都可以在本地进行操作可以不同步到远程。
3、冲突解决,多人开发很容易就会出现冲突,可以先pull远程到本地,然后在本地合并一下分支,解决好冲突,在push到远程即可。
4、离线工作,如果git服务器出现问题,也可以在本地进行切换分支的操作,等联网后再提交、合并等操作。
缺点:
1、git没有严格的权限控制,一般是通过系统设置文件的读写权限来做权限控制。
2、工作目录只能是整个目录,而svn可以单独checkout某个有权限的目录。
3、git上手可能没有svn那边顺手,需要经过学习一下。
4.Team Foundation Server |
优点:
是对敏捷,msf,cmmi等项目、过程管理、过程改善的支持。任务版上能将需求、项目进度一览无余,对于小团队而言,比甘特图更有用。
缺点:
能应用起来的团队、公司的数量极少,多数真正用起来,也就是源代码管理这部分,这也仅仅是占TFS极小部分功能。