题图来源:https://nerdshizzle.com/product/funny-software-developer-job-description-t-shirt/

开学了,汇总一些我在博客园上给大学同学提的建议,希望能就软件开发的问题,帮到同学们。感谢《构建之法》一书的作者邹欣老师和策划编辑周筠老师搭建了这样一个平台,感谢他们的工作。

 

1  关于学习方法、动手能力和职业发展

1.1

同学你好啊,我是一个非科班出身但是自己选择了做计算领域工作的人,我希望能通过我的亲身体会,给你实在的鼓励。

1.关于计算类的工程实践,是有一些方法和技巧的。可能大学老师不一定能用比较好的方式教你。没关系的,可以向工程界朋友请教。咱们有非常开发的计算类互联网资源,可以借助github、stackoverflow这样的平台。具体来说,你提到的对IDE的使用,是一个“无他,唯手熟耳”的过程,建议可以去看IDE的官方手册,以及所用语言的官方平台,当然最好看英文资料啦。也可以看一些视频资料,学习如何使用,多用多练很快就好了。至于其他工程的设计、开发和测试过程,也是需要长期积累,不要担心啊。

2.软件开发,最重要的过程是培养自己的抽象思维,不知道你是否经历过系统的计算思维的课程,如果没有,建议你看看清华大学出版社徐志伟等老师写的《计算机科学导论》这本书(可以参考我的文章  https://www.cnblogs.com/bettermorn/articles/12402609.html),看看自己在思维方式上的问题,然后再逐步培养自己的软件需求、设计、开发、测试等能力。请一定记住,软件设计这一步非常重要,后面的编码是基于设计的。

3.关于你提到的想做计算领域测试的问题,非常好,软件测试是软件质量保证中最重要的一个方面,这是非常重要的,目前国内的软件测试和软件质量并不高,你可以在这个领域里好好发展。当然软件测试也需要很强的软件设计和开发能力。

4.欢迎你到github上来看我分享的一些内容,也是bettermorn(更美好的明天的意思),我希望能帮到你。计算领域里有很多很有趣的事情,希望你能享受hard fun,我们一起来探索吧。

1.2

感谢你的真实总结。希望我的以下文字能给你一些帮助。
软件开发中的学习比较复杂,要牢固掌握一些理论和方法论,需要把所学变成自己的知识,所以建议以后学习以后,试着用自己的方式做一个宏观的系统总结。比如对面向对象的学习,可以做以下总结:
面向对象的本质是什么?解决了什么问题?其与面向过程的区别在哪里?面向对象方法的几个特点解决了哪些问题?适用于哪些场景?

具体的一些内容,可以参考我的文章

  1. 【实战指导】暑假了,找问题,做作品

  2. 【脑洞大开】如何学习新的科学理论和关键技术

欢迎你与我交流。

1.3

谢谢你的真诚而真实的总结。综合你的描述,我觉得可以从以下维度发展自己。
1.关于沟通和协同能力
软件开发是集体项目,非常需要锻炼良好的沟通和协调能力,你已经迈出了很好的一步,继续努力吧。沟通和协同有一些基本方法,可以去寻找相应的资料。简单举例,比如沟通,可以考虑,不同事情沟通的频率、方式等等。
建议可以看看我的文章。
【实战技能】关于程序员的沟通技能

2.学习时如何把握本质
看到你谈到学习面向对象的问题,以后可以尝试,学习后,试着用自己的方式做一个宏观的系统总结。
面向对象的本质是什么?解决了什么问题?其与面向过程的区别在哪里?面向对象方法的几个特点解决了哪些问题?适用于哪些场景?

3.如何总结软件开发过程的经验和教训
建议思考下:
软件开发是个完整的过程,从问题分析到设计、到开发、到测试,每一个环节都很重要,每一个环节除了良好的思考方法也需要应用工具。问题分析和设计是开发的关键和基础,再小的项目也需要这个过程,以后可以注意在这个环节多花些时间,“磨刀不误砍柴工”。当然开发过程中写好代码,是需要代码量熟悉开发工具,熟悉语言的使用情况的。

 

2  关于软件发布

请问,如何区分新功能和新特性(function and feature)?建议说明两者差别,这样用户可以理解版本发布的内容(release notes)
另外建议用行业通用的版本说明,可以参考这里。

major.minor.maintenance.build

major是最大的版本编号,minor为其次,maintenance为维护版本号,某些软件可能再细分作build,为更小的版本编号。例如:1.0.0.1

major:主要版本号
minor:次要版本号
maintenance:维护版本号(仅限bug修复)
build:非发布版本号,内部版本号(或源控制版本号),通常自动增加

可参考链接 https://www.mozilla.org/en-US/firefox/57.0/releasenotes/

 

谢谢回复。我前面指出这些问题是为了提醒同学,做工程要求准确、清晰和完备。
请注意下次发布的时候,写清楚相关内容。
另外,关于发布内容条目,可以参考github的种类

 

3 工程实践的要求

解释下,课程提出的要求并不是职业标准,而是工程实践必须要达到的目标。另外说一下,根据美国K-12科学教育框架和计算机科学框架,很多地方米国的中小学科学和工程实践要求确实比我们大学的要求还要高一些。可参考这里查看https://www.nap.edu/catalog/13165/a-framework-for-k-12-science-education-practices-crosscutting-concepts和https://k12cs.org/wp-content/uploads/2016/09/K%E2%80%9312-Computer-Science-Framework.pdf
加油吧,同学们,计算科学和技术发展的黄金时代,需要你们的贡献。

 

4 磨刀不误砍柴工:设计先行 

友情提醒同学,要做好软件开发,重要的环节在于设计,敲代码是开发实现,如果在设计环节上多花些时间,也许到开发实现就没有那么难。至于要提高开发的效率,“无他,唯手熟尔”。熟悉语言语法,熟悉开发工具,多练练就没问题了,毕竟,现在软件开发的条件,比以前好很多啦。
继续努力吧!学会熟练使用开发工具,多花些时间做设计。

 

5 软件开发的分工

问题:

在真正的软件项目开发中,前后端对接具体是怎么做的呢?有没有一个规范的流程去确保前后端连接的正确性?或者有没有专门的组内几个成员来负责对接这部分呢?

我的建议:

虽然业界很多公司提出了前后端分离的方法来做一定分工,但是作为业界人士,我更建议基于功能模块分工,每个人完成相应功能的前后端以及数据库设计,而不是前后端分离,因为从某种角度来说,前后端分离并不能提高工作效率反而恰恰相反。

另外,友情建议,不要太强调前后端,作为一个软件开发者,一定要有能力做一个完整的系统,即使前端、后端和数据库有不同的擅长点和不同的偏好。

我是谁

科技工作者,独立顾问,“以我之爱心,以我之专业,以我之真实,助您成就有趣的事业”。曾在HP和盛大遇见良师益友,有幸获HP CIO奖。作为HP 资深技术专家和内部技术讲师,也有幸在HP硅谷和休斯敦工作。积极地参与学术社会活动,是中国人工智能学会高级会员,美国计算机学会 ACM 高级会员,ACM SIGCSE 美国计算机学会计算机教育研究中国分会理事,中国计算机学会CCF走进高校讲者。我也做了一个DevHub社区。擅长将新兴计算科技的理论和关键技术应用于各种服务,成功为数十个创业创新企业落地数据分析和人工智能产品设计和解决方案,行业涉及教育、医疗养老、工业制造、证券、新兴商业服务、信息产业、文化创意等。喜欢有感而书,在国内外会议及杂志发表人工智能及计算类教育及技术类中英文论文多篇。

posted on 2020-09-15 10:33  bettermorn  阅读(207)  评论(0编辑  收藏  举报