《构建之法》——第一次博客作业即第一篇博客

这个作业属于哪个课程 课程的链接
这个作业要求在哪里 作业要求的链接
我在这个课程的目标是 学习并长期坚持写博客,体会做中学的教学模式,学会对于代码的管理和集体开发项目的经验,学会项目的系统分析与设计过程
个人博客主页 https://www.cnblogs.com/westweishao/

 

 

 

 

 

一、建立博客并介绍自己

自我介绍:我是一名就读于普通本科的软件工程专业的学生,目前是大三在读,我个人的爱好非常多,主要是喜欢唱歌(虽然唱的很一般)、跳舞(跟着同学学了10多天的HipHop)、rap(主要是模仿说唱,和偶尔的freestyle),当然篮球也是我最喜欢的一个运动项目之一,当然现在这些爱好也只能称得上是爱好,也曾突发奇想学了一会儿吉他(连续两天,弹到手指破皮,然后放弃,嘿嘿嘿)。总的来说我就是一个喜欢比较浅层了解各个有趣的东西的胖子,对你没看错,说到底我最爱的还是吃了,我是一个典型的吃货,为了锻炼我对食物味道的理解,我刻意的开始练习对于每一种菜的味道的记忆,我也因此爱上了做饭,我非常喜欢观看一些做菜的视频,或者说当我去某些餐馆吃饭的时候,我会刻意的去注意他是如何做菜的,所以现在每当我闻到一个味道的时候,我有百分之90的把握能确定那道菜是什么,这都多亏了曾经在饭店兼职的经历。所以呀,综上所述我是一个练习时长接近1个月的Java练习生,我喜欢唱、跳、rap、篮球。

二、阅读与思考

(1)回想一下你初入大学时对软件工程专业的畅想

a.当初你是如何做出选择软件工程专业的决定的?

当初由于眼睛的问题不能学医,因此选择了软件工程,一开始听到这个名词的时候就感觉很高大上,我在网上查了一下,出现的都是什么月薪上万,游戏程序员什么的,我当时吧,就感觉特别厉害,而且感觉能赚钱,于是抱着这个成为百万富翁的梦想,我选择了软件工程专业,在现在这个学校这个专业也就是我的第一个志愿。

b.你认为过去两年中接触到的课程是否符合你对软件工程专业的期待,为什么?

过去两年的课程中简单了解了一下,c语言、c#语言、Javaweb、HTML、PHP、Java。当然这个过程中我觉得还是有一点失望的,因为我认为软件工程专业就是搞软件的,但是这两年来实际基本上没有写什么软件,最多就是一个万年没人用的图书管理系统,但是这期间也写过一些简单的东西作为提高兴趣的软件,比如飞机大战、炸弹人、扑克牌、跳舞机等一些有趣的小游戏吧,但也不能达到可以用来赚钱的地步。

c.你觉得软件工程是你喜欢的领域吗,它是你擅长的领域吗?

讲道理,软件工程并不是我最喜欢的领域,学了有两年了,感觉自己写代码的时间越来越少,和同学(尤其是在团队的同学)之间的差距越来越大了。也正是因为没有怎么实际去敲代码,所以呢这也不是我擅长的领域。

d.将来你会选择从事软件开发相关的工作吗?是的话给出你想去的城市、公司和岗位,否的话给出原因

我会选择从事软件开发的相关工作,虽然我是这么的菜,但是看在钱的面子上,我还是打算开始认真的敲代码了,尤其是一些大公司(BAT)工资都很高。将来呢,我想去一些北上广之类的一线城市,我希望自己能去大公司像百度,阿里,腾讯,网易一样的。能当上高层管理的话,我也是比较愿意的,当然如果我的能力达到了很强的地步的话,我也愿意去尝试一下创业,因为谁不像当大老板呢,高层管理的话按理来说,加班的时间会比较少,实际进行开发的时间也会比较短(头发就不会变少)。主要还是职位越高,工资越高啊。

(2)对照前人们走过的路和描述未来发展,现在的你

a. 自我感觉你已经具备的专业知识、技能、能力有哪些?已经写过的代码量是多少?描述你做的最复杂的项目/作业。

​我自己认为已经具备了一些开发简单小程序,和写一些简单题目的能力。专业知识的话,感觉掌握的并不牢靠,都是在短时间内掌握了一些知识,过了一段时间后对该部分知识只有一个特别简单的记忆,技能的话能花一些UML图,流程图,也能简单的分析一下软件的需求,但是实际上对于代码的编写能力很弱,只能就纸上谈兵对于具体的编码的话,根本不行,我已经写的代码量可能有将近4000多行(果然还是少的可怜啊)了吧。做过复杂的项目有很多,但是实际上进行具体编写的话,应该就只有一个图书管理系统吧,里面有一些简单的正删改查功能,但是甚至都没有连上数据库,就只是在文档中简单的写入一些数据。在整个程序中,就是写了几个函数,也并没有什么特别多的体验,在之后的面向对象编程中,由于有编程手册,代码几乎都是照着敲的所以,对于实际编写来说,代码的复杂程度远不如图书管理系统

b.离成为一个合格的本科毕业生,在专业知识、技能、能力上还差距哪些

​ 离一个合格的毕业生,在专业知识上对于一些框架还有什么计算机网络,操作系统,等都还没有开始学习,对于软件工程这个详细步骤什么软件需求,什么敏捷原理啥的都没有学完,所以差距还是挺大的,最重要的就要数实际的编程能力了,这个对于离入职差的太多了,这个能力对于搞软件来说是最基础的,想当上高层管理,只有一些管理知识是不够的,还是得需要服众,所以技术强还是硬道理。说的实际一点,就是Java了,想JDBC啊,反射机制,MVC,springboot,springcloud,分布式开发,Java并发等等,这些都是我还没有学的。

3)目前是一个人生选择的十字路口,考研、工作、考公、出国,不同的选择在大三就有不同的努力方向。而无论考研还是工作的每条路径,也有许多不同的分支。

a.对照以上你阅读的前人们的经历,你的选择是什么?

因为我们院的院长老师等都建议考研,而且就现在出去的学长来说,很多学长都选择开始考研,因为随着这个教育的继续,只有往更高高层次走,才能有一个好的就业机会,我是选择是准备考研,因为就我目前这个技术能力,我估计去哪一家公司,公司都不会雇用我,所以只能是考研,这样才能继续学习技术达到能够入职公司的能力。

b.在这种选择下,你认为你相比其他同学来说有何优势,有何劣势?

就现在的趋势而言,考研的话会比较晚进入社会,还能多学两年,就业的机会会更多,学习的知识也会更专业,在知识技能上会更精,这样就业的机会也会变得更大,同样对于薪资也会随着增长,但是同样也就失去了几年的项目实际经验,有可能同届的同学已经积累了很多开发的具体知识,研究生还在学校进行研究,对于实际开发工作会比他们少很多。

扫描二维码关注公众号,回复: 7267100 查看本文章
c.针对你的选择,你给自己的大三设定的规划安排是什么?

大三的话我是准备每天都要挤出时间来学习高数,英语这些考研要考的科目,同时的话每天也打算敲一点代码,不管是小项目还是简单的程序题都要动手,主要是这个动手能力要加强。这样就技术和考研都会同时进行·,当然主要还是要偏考研一点,也是希望接着这一学期可以把绩点能够提到3以上,之前的确实太低了。

d.你对于实现自己的梦想已经做了或者计划做什么样的准备?

对于实现我的梦想的话,也在积极学习外语希望能到国外工作,也在看一些小项目积累编程经验,还有就是要多看看外国先进的一些编程项目,对于国外的IT行业时刻关注,关注当下最火热的一些编程语言和编程方向,计划准备加入一些这样外国留学生的队伍中,去体会他们的编程,为之后能靠自己的编程能力出国就业做好准备。

三.提出问题

问题1

在第二章提到了一个单元测试,文中提到了一个用VSTS写单元测试,对与这个单元测试的实际操作不是很会,知识的大概原理是理解了,但是对于每个单元测试具体的参数之类的呢,也有可能有依赖的单元测试又该如何进行。在单元测试中还涉及到一个对于测试程序的效率问题,所以软件在编代码阶段的几个层次该如何编写和进行测试都是要考虑的。也就是说对于具体拆那些单元然后如何测试还是有问题的。如果在代码长期维护过程中会有更新升级,这个时候就会有新的单元测试,但是如果每个都去重写,那么维护的代价就会变得很大,而且工作量也会变多,到底该怎样去解决这个问题呢?

问题2

文中4.5节中提到了结对编程,就书上来看结对编程好处有很多,但是如果两个非常强的人开始结对编程那么又会不会变得更好呢,当两个人出现意见分歧的时候,这个事情就会变得很难解决,由于两个人对某一个问题考虑是不一样的,而且又都是很强的人,所以可能对于某一个具体的问题会有不同的见解,而且肯定各自有各自的考虑,那么当出现这种问题的时候结对编程这种模式又该如何生存;另一种情况一强一弱,这样的话,就会有一个人会划水,那个弱的就会过分依赖那个强的,这种情况在学校队伍中,非常常见,像这种情况又该如何解决呢,结对编程的好处就会一点也不存在了,那有什么好的办法可以去解决呢

问题3

我看了这一段文字 (敏捷是一股思潮,或者说是一种价值观,它涵盖了好几种软件开发的方法论),有这个问题 (敏捷的开发原则,能用到极致吗,在这个极致的基础上如何来衡量各个因素的最佳呢)。 我查了资料,有这些说法(

第1个特点:必须要拥抱变化,因为在创业初期,很多创业团队根本想不清楚,或者也不想把商业模式想的很清楚,很多创业团队希望通过一种快速验证、试错的方法尽快出发、然后再不断调整方向来寻找到一个正确的商业模式,所以这种发展模式也就要求软件开发模式能够快速响应变化。

第2个特点:要快,因为在同一个创业方向可能不止一个团队在做,加上创业一开始资金有限,所以要求软件开发过程一定要快,效率一定要高。

第3个特点:要支持小团队作战,因为创业初期资源受限,所以软件开发过程一定要可以很好地支持小团队,而且每个团队成员可以身兼多职。

第4个特点:要容易管理,因为和管理相比,创业团队更重视赶快看到工作成果,所以需要复杂的管理方法和额外的管理人员的做法是不受欢迎的,而且不仅不受欢迎,最好是可以让员工自我管理,这样才能最大化地降低成本。

),根据我的实践, 但是我还是不太懂,我的困惑是(有没有一种明文规定来固定或者说衡量怎么样达到一个动态平衡的最佳)。

问题4

 在本书《构建之法》第九章中提到产品经理(182页)Product manager,暑假的时候根据社会中的实际情况来看,产品经理直接接触到底层用户机会很少,通过销售人员去收集意见的话,只会存在许多的偏见,不能了解到他们实际的需求,销售在去销售产品的过程中,只给客户说好的,同样客户也是因为销售的软件吹嘘才来的的,提出建议的反馈很少,所以产品经理这一职位到底该做何工作,销售一味的去销售产品,只给客户说好的,客户也是因我们产品优点过来的,提出建议的反馈很少,那么我作为一个产品经理又该如何切实的收到反馈以达到产品持续优化的目的呢?

问题5

《构建之法》这本书中提到了一种观念叫作做中学,在这次暑假的时候我们用了15天来尝试这种方法写javaweb,写一个可以用的网站,用了springmvc,整个过程基本上可以称是做中学,但是我觉得这种方法不是很可取,因为每一步都不会,每个地方都需要去查资料,不如从头开始学,这样的话最后效率还会更好一点,所以我认为邹老师这个方法是矛盾的,在实际中面对自己完全不会的大片基础,采用这种做法,是非常耗时间,我认为这种方法适用于有一定基础的然后运用于开发软件的时候,并不适用于我们这种零基础的学生,这个时候我对这本书的理念有了一点樊波的观点,根据暑假实习到最后的效果来看。

四.了解和调查源程序版本管理工具

git

git的优缺点:
优点:
1.适合 分布式开发,强调个体。
2.公共服务器压力和数据量都不会太大。
3.速度快、灵活。任意两个开发者之间可以很容易的解决冲突。
4.离线工作。
缺点:
1.资料少(起码中文资料很少)。
2.学习周期相对而言比较长。不符合常规思维。
3.代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。

github

优势:

1.完整的支持Markdown语言,而且支持Emoji表情

2.支持直接复制图片到页面,会自动上传图片(非常好的功能,知乎也支持)

3.比较好的支持Mobile。虽然github没有手机客户端,但是一般开发者,写好的blog都会通过微博进行分享,所以点击过来之后,就可以在手机浏览器里面访问。

4.使用github原生的功能,就可以进行类似评论的功能

5.支持@用户功能

 6.支持标签,当然是你repository里面

 7.强调个人,符合hacker更看重名誉/成就感的天性

 8.功能设计简洁实用上手很快,可用性好,已有很多相当质量的各类项目和优秀开发者在上面。 

 劣势:

1.GitHub 使用 git 分布式版本控制系统,而 git 最初是 Linus Torvalds 为帮助Linux开发而创造的,它针对的是 Linux 平台,git 和 Windows 从来不是最好的朋友,因为它一点也不像 Windows。GitHub 发布了GitHub for Windows,为 Windows 平台开发者提供了一个易于使用的 Git 图形客户端。

2.国内访问速度太慢,经常出现connect time-out

3.不能很好的解决GB2312/GBK,对中文不够友好

4.wiki功能太弱,直接导致文档(对于开源项目很重要)经常被分离到一个独立站点

5.免费套餐不支持私有项目,无非解决企业内部的需求,github:fi价格过高(最便宜要$5,000/年)

6.基于git,学习曲线陡峭,企业大规模用git根本不现实。尤其国内大家都刚学会svn

7.github有时可能被墙,或者不稳定

8.没有集成社交分享功能。比如后面可以分享到微博,微信朋友圈等。之前有人建议我去做插件,有时间看看这个.

 trac
             优点:非常灵活,可以随心所欲的定制。
Bugzilla
             优点:(1)检索功能强大。
                      (2)审核机制安全。
                      (3)网络用户界面友好
                      (4)配置设定丰富多样。
                      (5)安全策略细致和产品分类方案完备。
            缺点:只能管理缺陷。
Apple XCode
            优点:(1)可以自动创建分类图表。
                     (2)自动提供撤消、重做和保存功能,无需编写任何编码。
            缺点:更新版本后,某个插件可能会失效。

Micrsoft TFS:    
优点:(1)由数据库存储源码(性能高)
                       (2)与开发工具无缝集成(简便)
                       (3)源码管理无存储限制(可靠)
                       (4)能够在文件级别上支持安全性,支持特定场景文件管理,有误删除恢复保护。
                       (5)与project工具集成,方便任务跟踪,内置BUG管理工具,提高开发效率,管理项目生命周期测试用例。
               缺点:用起来不够直观,操作步骤比较繁琐。

现在目前市面上的源程序版本管理工具主要有GitGitHubMicrosoft TFSBitbucketMercurialTracBugzillaRationalApple XCode

猜你喜欢

转载自www.cnblogs.com/westweishao/p/11515581.html