目录

1.框架

2.架构

3.编程语言

4.代码结构


从毕业至今,已有四个多年头,对自己的定位亦从刚开始测试开发,转向软件工程师,目前的目标是架构工程师,之后再达到全栈工程师的目的。

1.框架

框架( Framework )是构成一类特定软件可复用设计的一组相互协作的类。框架规定了你的应用的体系结构。(参考百度百科:“框架”)

框架,个人理解,其本质是提供已经封装好了的一系列类和方法;

在应用程序中使用某框架,实际是使用了框架中的基础类库;

一个好的框架,其本身是经得起推敲的,经得起大多数考验的;

使用框架的好处就是可以避免重复制造没必要的轮子(详细参考知乎:“轮子”);

如果要真正了解框架如何实现,还是需要参考框架源码,再自己去重复造一遍轮子。

2.架构

架构,是有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计(详细参考百度百科:“架构”)

对于这个名词,可能更多听到的是架构工程师(详细参考百度百科:软件架构工程师)这个职位,其工作内容就是为我们的软件搭建架构;

而在整个软件的生命周期中,个人理解,架构包含的内容(认为也是一个架构工程师所要求具有的能力)有:

①软件定义——需求(分析)文档、设计文档等;

②软件开发——确定软件各个组成部分(如服务器端、客户端)所采用的编程语言、框架、技术、依赖软件等,组成部分之间的API接口定义(非必要),用户界面(非必要)、操作流程以及商业逻辑,软件版本控制等

③软件测试——测试场景、测试用例、bug管理等;

④软件维护——软件部署、软件发布等;

3.编程语言

人的精力是有限的,个人认为掌握的编程语言不在于多,而在于认清编程语言的本质。使用不同的语言编写而成的算法(程序),都是将遵循编程语言语法的代码,编译(或解释)为可运行平台上所能够识别的指令,运行指令以完成某一目的

认为不同的编程语言,没有好与坏的区别,只有适合和更适合的差异;不同语言之间的差异在表面上只是不同的语法,不完全相同的函数名称,不同的实现方式。就像汉语“你好”用英语来说“Hello”,法语则是“Bonjour”。

对于第一门语言的选择,建议还是从高级编程语言入手,可以不用了解其是如何被编译为汇编语言而被机器识别的这个中间过程。而在工作中,具体选择哪一门编程语言来解决实际问题(如果没有大牛进行指导),个人认为:

①首先需要考虑的是活跃用户量(可以在社区或网站上得到更多解决问题的方法、有更多的案例、源码等供参考学习)

②其次是参考成功案例,主要从实现难度(认为主要是看该语言相关文档的完善程度、第三方库的数量上)、易用程度、扩展性、可维护性等多方面

③基于前两条,需要再从效率、可维护性、可扩展性、可移植性等多方面考虑,挑选出最为合适的开发语言。

另外的,对于编程语言,面向过程语言编写出的代码可能在结构上更易理解(如C,一长串逻辑),而面向对象语言则更符合对世界的认知习惯(如Java、C++、C#、Python等)。

4.代码结构

作为一个从测试开发一路走到目前的软件开发工程师,工作内容会从最开始的完成几行代码、完成一个方法到完成一个功能,再到完成一个具有多种功能的软件应用程序。

过程中也意识到,一个清晰合理的代码结构,对于后续的开发维护、代码可阅读性、易理解性上都有着巨大的帮助。

对于独立完成一个软件应用来讲(以面向对象的开发方法为例),个人认为应该按照以下顺序去思考软件整体代码结构(属于上文“架构”中第②小节软件开发中的内容):

①分析需求中涉及到的具体对象,并将其抽象为代码中的类

②分析具体对象之间的关系,将其抽象为类之间的关系(继承、实现、依赖、关联、一般关系等,详细参考:面向对象编程中类与类之间的关系),确定基类、接口中的成员;

③根据实际情况,考虑设计模式的运用(例如笔者会使用到的单例模式、观察者模式等,详细参考菜鸟教程:设计模式详解)。合理的设计模式的使用,对熟知此设计模式的其他开发人员,可快速理解当前代码结构;

④良好的编码习惯。如:注释的添加、成员(字段、属性、方法)的书写格式、代码自测、协同工作时即使提交代码等等;

⑤代码的可复用性好、避免冗余代码。良好的继承关系、多处使用的相同控件进行自定义统一实现等都使得代码可复用性好,但要注意尽量减少公共静态方法的使用(会增加内存占用,特别是对于一个大型软件系统而言);

应用场景、用户体验等的考虑,软件程序最终是为了交付给用户去使用,程序设计之初就要考虑到用户使用上的问题,比如:耗时操作要放在后台线程而不是主线程UI线程中处理、用户当前操作场景要采用同步还是异步方式实现、代码异常处理以方便定位问题并避免程序崩溃、多线程编程时的线程同步以及数据安全、高并发情况的处理(笔者亦在学习中)等等。

认为,一个清晰合理的代码结构,是软件稳定健壮的前提。一个错综复杂的代码结构,不利于问题定位,并且会导致代码可维护性、可阅读性差等问题。

软件开发工程师进阶之路(一)相关推荐

  1. 嵌入式开发工程师进阶之路

    嵌入式开发工程师进阶之路 一.从微控制器开始 从微控制器的最小系统入手,以其为核心,选择相应电子元件加上最小系统在面包板或洞洞板上搭建硬件电路,并在嵌入式开发工具下使用C语言编写.编译.连接.链接.调 ...

  2. iOS初级开发工程师进阶之路

    我觉得是时候,也有必要,承认一下自己的错,压制一下趾高气扬的自己,在知乎上看到一个帖子,有点被打击到了.帖子中涉及到的问题,我给贴出来,各位小伙伴们一起开探讨一下,问题的答案,有知道的请在后面留言 首 ...

  3. [转]工程师进阶之路(三)

    2019独角兽企业重金招聘Python工程师标准>>> 工程师进阶之路 三 再谈沟通的策略 什么叫做策略,我的认识就是做事情的方法,有些时候光有很好的原则,而没有好的方法也是不行的. ...

  4. 去哪儿网2018春招软件开发工程师、前段开发工程师编程题 - 题解

    不难,都是常规的操作,故题解写得简单点. 软件开发工程师编程题 第一题:在字典中找自己的逆序 题目 有一个单词列表,一个初始单词,初始单词需要通过单词列表逐步变换得到自己的逆序,求变换所需的最短变换路 ...

  5. 软件开发工程师:程序员的职业规划就像软件工程

    软件开发工程师:程序员的职业规划就像软件工程 [url]http://www.accp-teem.com.cn/ArticleView/2007-8-1/Article_View_1224.Htm[/ ...

  6. 想做C++软件开发工程师,我该如何去学习?

    想做C++软件开发工程师,我该如何去学习? 因为C++是一个兼具性能和抽象模型结合体,除了能够保证性能之外,还能用当今最流行的面向对象编程模型,而且生态系统由于这些年的积累,建设的也非常完善,所以在高 ...

  7. 2019/04/12 华为通用软件开发工程师现场面试(offer到手)

    2019/04/12 华为通用软件开发工程师现场面试(offer到手) 时间轴 三月中旬做的笔试 3题ac两道 4/8 性格测试 4/12 现场面试 地点是 广州某家酒店,近地铁站的,中大过去也是要一 ...

  8. 招聘:JAVA软件开发工程师

    招聘:java软件开发工程师 本公司所有新创办的创业型小公司. 研发团队6-7个人. 工作地点:厦门软件园二期观日路 现需招聘java软件开发工程师2-3名 要求: 1.有良好的沟通能力.团队合作精神 ...

  9. 何一娜:诺基亚软件开发工程师典型的一天

    英雄会是CSDN旗下针对国内IT技术领域专家展示和交流的平台.通过线下线上的互动形式,为CSDN社区专家提供更多学习.合作.宣传的机会.英雄会后续将在北上广深等国内一二线城市建立分会,各个分会后期将组 ...

最新文章

  1. php数据库html文本,关于php,mysql,html的数字分页和文本_php
  2. python桌面图标被删了_Python实现图标锁定到Windows任务栏或删除图标
  3. 什么是光纤以太网交换机?
  4. Python 爬虫抓取代理IP,并检测联通性
  5. 10.15 sigstjmp以及siglongjmp函数
  6. 【数据结构】顺序存储结构
  7. poj-1260 Pearls
  8. 一度智信:电商平台商品定价策略
  9. imac 升级 ssd_如何在较旧的2007-2009 iMac中安装SSD
  10. java每日一练(19_03_23)
  11. 苹果支付返回html,苹果应用内支付,服务器端的实现
  12. (Python)从零开始,简单快速学机器仿人视觉Opencv---运用四:图像损痕修复
  13. python3.4勾股定理代码_用于解答算法题目的Python3代码框架
  14. 强化学习8-时序差分控制离线算法Q-Learning
  15. 循环里发送请求java_servlets – 在Java Servlet中转发请求时的无限循环
  16. 使用循环语句打印菱形梅花阵
  17. 博士之死背后异化的师生关系
  18. 日流水400万,扒出一个年入十几亿的黑产「兵工厂」
  19. novamind下载+和谐激活
  20. 昆仑游戏CEO陈芳离职:黄新颖接任 全面负责Gameark工作

热门文章

  1. 2019沈阳网络赛B.Dudu's maze
  2. java jsp开发的电子商务系统代码下载
  3. Winsock中accept函数获取到的ip地址一直为204.204.204.204或0xcccccccc的解决方案
  4. 删除控制面板里面的java
  5. 微型计算机中i3或i5一般指的是,酷睿i5一共有几代(i3和i5办公差别大吗)
  6. 九度 题目1457:非常可乐
  7. SHA 和 RSA 的区别
  8. hex文件详解及常用合并方法介绍
  9. 在Linux上,使用time优雅的统计程序运行时间
  10. rails项目本地运行