2

2020年终总结(下)——专业总结

 3 years ago
source link: http://nakeman.cn/writing/yearend/2020-year-end-report-2.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Webapp专业构成图

bmYfQvU.png!mobile Webapp开发专业构成

React

React 是第二代Web前端UI开发框架,最新进展的hook抽象也算一个重要里程,但还不能算第三代。理解这句话需要很多基础,React作为专业工具是众多基础的交叉应用。

第一基础是前端UI开发框架;React的设计是针对开发 「富交互的SPA类web应用」 的,并且引入了“组件化”思想。React革命点是,将GUI程序的 交互功能 分拆为一个个独立的“组件”,“组件”就像乐高积木可以独立的开发,和复合组建更复杂的交互功能组件。React“组件”是web组件,最大的特点是,可以声明式内嵌HTML代码制作UI呈现(其它都是使用模板),并且「有状态」。

第二基础是第二代;相对于第一代(像backbone)直接操作DOM,使用React制作web组件(V)只作用于 VDOM 。VDOM除了保证频繁交互所产生的UI重渲染的效率,也简化了的交互功能的组件化开发。

理论

  • 2020 React学习小结
  • 单页应用程序(SPA)形式理论及React应用一般结构
  • 尝试总结SPA V理论解释 React 技术

经验模式

  • 如何用React的 Components Class 开发带状态的SPA V组件
  • 如何用React Hook开发带状态的SPA V组件
  • React 两个基础的组件设计模式
  • React Context API是什么以及基本使用
  • 怎么阅读一个React SPA WGP源码项目(研究片断)
E 两大实例开发任务 2020-08-22
		L 1 单一V制作
			L render(交互输出)
				L 松散形式部分
			E 交互输入
			E 智能状态
		E 2 复合Vx制作(分为形式结构,和状态管理两个部分) 
			L 1 形式复合
				L 手动props
					L date props ,func props
					E object props
						L children props
					E render props
				E React hooks
			E 2 V的状态
				L 本地状态
					L Com.state
						L V本身是有状态的,M其实是另外一个意思,是规模增大后的客外任务。
							L 如果状态不复杂,不需要状态管理,V的形式甚至包括了对网络(后端)。2020-08-31
					E React hooks
				E 区域或全局状态
					E Context API
					E Redux 
					E React hooks
		E 3 组件代码复用任务与技术 V'
			L 语言特性
				L mixins
				E HOC higher-order component
			E OO的逻辑特性(模板复用)2020-09-03
				L function props
					L render props
				L object props

高级技术

  • React refs使用指南
  • React 开发中的代码复用技术:继承、构成、装饰和混入

React API

FzI7Jz.png!mobile7vmuQnu.png!mobile

SPA/Webapp 理论

都说React只是一个V,这是什么意思呢?这需要一个更高的理论——SPA理论去解释它,这就是SPA理论(和Webapp理论)探讨的原因。其实,V是SPA(或webapp)形式的核心,但不是全部,这是一;第二,「React的组件」只是一个V的技术实现,并不是逻辑的V。我们需要一个全面的SPA理论去解释React,深刻高效的使用它,甚至改进它。

SPA理论

SPA理论内容有两个方面,第一是SPA程序的形式属性;第二,SPA程序的内部组成。内部组成在去年年终总结已经有了初步的发现;而形式属性则是今年的新发现。并且在年底的后端学习中,将SPA和MPA归纳为webapp。

SPA和MPA形式属性都是一样的,都是webapp,但是由于物理实现基础不同,结构件逻辑有所不同,例如Router组件,SPA和MPA实现就不同。

内部组成

根据分而治之的工程思想,将大程序内部分立出不同专职的程序对象,是开发界的通识,但只有工程实践(例如OO设计),没有理论,理论是「程序结构理论」,它主要关于「程序构件的形式」和「程序构件复合方式」的理论。例如流行发GUI程序结构理论MVC。MVC在去年已经被我指出是落后的,不准确的。今年则比较详尽研究出webapp的内部构成,看这个图。 mEZvquN.png!mobile

形式属性

让我感到意外的是,SPA(webapp)居然也有形式属性。形式属性意义还是比较明显的,例如V组件形式属性解释了它接口(例如render)存在的哲学。

以下小结部分形式和结构件的结论,还有很多组件需要补充,来年有需要再详细。

SPA程序形式

SPA程序作为最流行的一种WGP,它的形式属性包括(越靠前越核心):
WEB 
GUI
SESSION
INTEL
NET
APP

SPA程序质料

WEB GUI > View
SESSION > Router
INTEL > Model

View组件形式

V程序是SPA(webapp)核心组件,但自己也是一种程序,也有专业形式,和结构

V程序的计算任务(语句)种类就是,不断的操作DOM,这是它最大的特点
Vx就是一个集合一个以上 V (操作DOM的)混合对象
	V  是一个操作DOM,监听DOM事件的特殊对象
		DOM操作,与事件监听API都是浏览器提供的特殊API
V是与浏览器事件机制(主要是DOM树事件)高度相关的一个程序对象
    # React 学习# 大V实现的 WEB GUI 的交互功能 五大复杂特性:第一,记忆智能;第二,多执行点;第三,静态层次复杂结构(纵向);第四,时序动态替换;第五,并列协作复合结构(横向);

重要笔记

  • SPA 理论
  • MPA SPA的webapp形态比较
  • MVC是一种GUI结构(对象)设计的模式经验
  • 说不完的MVC

todo SPA项目实践

这是今年自拟的第一个学习经验项目,虽然标题核心是「构建系统」,但其实大部分内容是关于SPA架构设计和实现,Web项目和构建系统是一对一,项目涉及的专业内容有三:

  • 第一,构建系统,是通用的概念,不是常用的以webpack为基础的构建工具;
  • 第二,SPA架构组成,其中值得一提是,对 SPA 程序设计过程的经验,包括功能设计(需求分析)和结构设计(UML图),这是一种未来有益的探讨,但是目前我重点关系代码设计,功能和结构设计技术有待未来;
  • 第三,git;

重要笔记

todo项目设计与开发
	L todo项目需求分析
		L UC图制作
	E todo项目 SPA模型设计
		L 用例会话View 线框制作
		E 用例会话流程结构图制作(sitemap)2020-05-09
		E 数据库模型设计
		E 项目智能结构设计
E 需求分析
	L 怎样才算一份优质的需求文档 --更具体的软件项目计划书
		L 需求文档
			L 敏捷开发 2020-07-01
			E 敏捷需求 :最核心精简,(当下)最能沟通干系人的需求模型
				L 需求与存在物
					L 某物存在为干系人(多种)的认知,理解,和价值判断,就是需求。
					E 某物存在属性为不同智力和价值观的干系人所观察,呈现出不同角度和抽象层次
						L 将需求表述分为 业务 用户和功能三个逻辑层(够用?)
						E 再根据干系人 分成不同的会话用例
				E 敏捷需求的 潜下属性 是,它 需要并且容易 修正和扩展
		E 用例图
			L 用例图与需求文档的关系(两个都可用来对程序“建模”——对程序的功能(非结构)的计划)
				L 用例可以表达 用户之间的关系(一般与特定用户),而文档可更好表达需求抽象层( 业务 用户和功能)
					L 用例图用来捕获系统的功能需求。在实际中,文字描述能更好的描述功能需求。所以实际中用例图一定要加上文字的描述。
	E 需求分析就是 程序功能设计 2020-07-05
		L 优质 程序功能设计案(需求三级表,和UC)
			L 第一,更真实的确证用户的价值判断;
			E 第二,更清楚指导设计师进行构造设计,和开发者的技术实现;

博客

  • 从零开始为Web项目定制构建系统(一)——静态页面
  • 从零开始为Web项目定制构建系统(二)——版本跟踪系统
  • 从零开始为Web项目定制构建系统(三)——简单交互页
  • 从零开始为Web项目定制构建系统(四)——Hello XXXX的SPA版(上)
  • 从零开始为Web项目定制构建系统(四)——Hello XXXX的SPA版(下)
  • 从零开始为Web项目定制构建系统(五)Todo SPA

webpack

今年构建系统有了两次研习,第一次上面的自拟项目;第二次是12月份研究集成TS 和样式架构术时,以webpack为核心的学习,以《webpack与项目构建再认识》一文为集大成:

  • JavaScript构建工具的选择 (2019)
  • 「构建程序/系统 」制作的概念基础
  • webpack与项目构建再认识
E Webpack再学习
		L webpack 意在 作为 统一的 web app的构建工具链
			L 依赖解释 需特别的详解,依赖解释 是bundling的前提
				L 项目构建(webpack)原理与 「模块化理论」2020-12-05
					L 非JS模块的打包
					E  webpack 打包 是模块化理论的一种应用
			E loader & plugin
				L JS模块,CSS模块,和图片资源模块
					L 理解不了CSS模块,和图片资源模块的打包原理,是 因为我未曾做过
						L CSS 编程
							L CSS模块 BEM
								L CSS 经验模式!:使用BEM的原则创建了一个前端开发技巧和工具的集合
			E mpn install -D的研究
				L 项目管理,与配置开发环境

JS 语言和基础编程工具与技术

面试准备过程中少不了对JS 的一些基础的复习,这些内容不是什么理论,它就是JS最基础的工具特性,有很多值得记一记;

第一,let 替代 var 两个意义

  • let 除(一) 变量声明约定硬化:1 变量不提升,使用前必须在固定地方声明;2 不能重复声明;
  • 还有(二)新作用域控制:将变量限制在块内,这个涉及了变量(符号)的制作,可以认识变量使用的本质

第二,undefined 和null 性质完全不同

  • JS 自由的代价,和维护
  • null就是object 这个类型的值 的“0”,undefined 是数据变量不存在,是JS 动态性的表现;
  • undefined 是JS动态性的一个现象或结果 ,就像类型动态,产生了typeof,来维护程序 的品质
  • undefined 的 JS动态性:允许变量,对象属性动态创建;某个符号 被测出是 undefined,证明这个符号 作为程序的形式部分在变更中(暂时不存在,或者某些原因被不存在);
  • 对象是 null,像 字符串的“”空串,null对象是存在的,只是是空,没有值;

第三, reduce是forEach基础抽象之上的应用

  • forEach是对“逐个循环”这个计算功能的抽象包装
  • reduce
    • 计算任务(问题及解决方案)具有某种渐增性
    • 数值求和 是 这渐增性 最简单最直观的例子
    • reduce与演化算法

第四,值比较与逻辑运算;

第五,短路逻辑运算;

重要笔记

10 国庆
	值比较与逻辑运算
		计算功能实现过程中为什么需要值 比较?
			因为程序是由多条指令组成的,并有用的程序功能都是 有一定结构 的非顺序执行
		短路逻辑运算
			主要原理是,JS暗里为我们(动态)转换类型
			将一值转换为布尔类型的两种方法 !!value
				https://www.samanthaming.com/tidbits
					HR 黑客排名
	forEach是对“逐个循环”的包装
		计算结果编程与计算功能编程
	var 与 let
		typeof
		undefined
		NaN
	程序里充满了变量和间接符号
		从作用域认识变量,从变量认识程序

JS 程序构造术与功能编程

今年在面试准备过程中,研究闭包,高阶函数,函数柯里化,和函数式编程(FP)里,引伸出一个高级的主题——#功能编程#,引发了自己的编程观念一次“革命”。这主要由“函数作值”的函数式编程引发的,功能编程 与结果编程相对,「编程范式」就是对 计算功能分解方式的不同,OO原来只是一种计算功能分解方式。

功能编程应该是「编程」这个专业的核心理论,面向对象等只是它的应用。故功能编程理论引发编程观念的改进,对是编程能力的改善是不容忽视的(从学习技术的结论,“理论”的作用可知),不过目前暂不深入分析和总结(这些知识于开发开源工具会比较有用,应用开发效益有待验证)。

编程观 与 专业水平的跃进

编程技术水平 就编程技术(不是结构设计),有两个方向的能力发展,第一是问题域,数组字符clientside;第二是编程观念,过程观,对象观和功能观念。

对问题特性认识水平决定了算法效率,编程观则决定了代码组织优雅性。

我的2020专业观

一直最感兴趣的一个问题,就是我的那了不起的专业,是什么。这个问题对于自己的职业生活意义非凡。现在初步断定,我的专业分两层,第一层是通用的「事务性应用程序」,相对于科学算法程序;第二层是,Web界面程序,相对于原生界面程序,而界面程序是事务程序的一种。事务程序的专业基础,是对象设计(设计模式)和OO构造法;WGP专业基础,则是WGP理论,JS语言等。

博客

  • JS语言是不是面向对象的?(一)
  • JS语言是不是面向对象的?(二)
  • JS闭包和构造函数对比研究
  • 有效评估JS开发者软实力的十条面试题
  • 如何使用偏函数技术提高代码的可读性
  • 关于 编程观,这篇例子很好
  • An Introduction to Functional JavaScript

研究笔记

  • TODO 2020-10 编程技术研究
  • FP 和 OO都是为了功能编程
  • 高阶函数与「功能作值」的再认识
  • 如何组合功能值 function composite

思维导图

YZjIJnN.png!mobile

ES6+ 语法糖工具

在准备面试的过程,研习了高频度考验的主题 ——Promise 和Iterator。现在回顾起来有一点不知道将它归在哪里(哪个子专业),只是觉得它们都是ES6+ 新语法糖工具。Promise 和 Iterator 是针对 「某种编程任务的」,它有一定的专业性,和React CSS webpack有明显的不同。

其实 Promise(包括asyn await)的核心是阻塞性操作的编程任务,Iterator 针对是集合的处理,它们都ES6+针对「可维护」而提出的语法糖; 集合的处理应该是比较通用的编程任务,阻塞性操作应该是 这种基于网络的交互式应用,有特别的动态特征的程序的特有的,所谓事件编程(异步完成只是事件的一种)。

JS运行时通过事件队列(事件的注册和捕获)机制实现「事件编程」,编程API使用回调函数的概念。大概的原理是,执行一个阻塞性操作时,安装一个完成后的处理函数(callback),实现一种异步的观念。 我们编程大部分功能,命令操作是同步(非阻塞性)的,当我们的任务(AsynX)有很多异步(阻塞性),callback的嵌套使用代码变得非常难读,这是就是Promise的提出的原因。

AsynX

  • Promise 和 Iterator有很多相像的地方
  • promise对象是怎样的对象,如何去构造和使用
  • JS异步功能(编程)与异步流程控制技术

重要笔记

*面试准备2020* Promise类对象 是个精制的工具,认识它针对任务很重要,它的任务是 AsynX,开发 AsynX功能模块。可以把这个复合的异步功能模块的任务看成一种特殊 业务模块,而Promise类对象的设计:
* Promise 是一种特殊的业务逻辑对象
把整个 Promise 规范 看穿为,一种特定的 业务逻辑规则
任何应用功能,都是一种业务逻辑规则
业务功能函数,与使用 Promise的函数产生一个值,是相似的
Promise 业务逻辑三块设计:
第一,对 异步完成的值 进行包装;
第二,串链多个promise;
第三,错误处理;
10月17日

IteratX

  • g函数不是普通函数,是个VO
  • 掌握工具改进设计背后的原理才是最激动人心

RegEx

正则表达式都是用在 与字符有关的编程任务,正则表达式= 字符处理编程,包括 检测 字符串格式合法性,查找字符串,替换字符串,字符过滤;

校验文本内容
        test
        search
    提取文本信息
        match
    替换文本内容
        replace
    切割文本内容
        split
  • 正则机器与 字符处理编程
  • 正则表达式的设计
  • 正则表达式 API

ZzMRbuB.png!mobile

UI库 和 交互设计开发

从CSS的工具性(styling layouting animation)到 框架应用任务(grid theme 响应式)所想起的 —— 新专业的第一个任务是,二维排版 grid

重要笔记

E bootstrap是框架能引领我们在交互UI开发上什么
	L 使用 grid就像 GUI使用V对象
		L Web应用程序设计师「新专业」—— UI开发 2020-12-08
	E  grid system解决了一个通用的样式(交互开发)工程任务
		L 还有什么样的 规模样式化(交互)开发任务?
			L 风格化,像 主题,着色,排版(typography ,文字风格化,包括标题,表格,列表),表单;
			E 动画功能,下列菜单;
			E 反正工具针对的工程任务是,「交互丰富化」
	E CSS 预处理器
		L SASS 2020-12-08

Web应用程序设计师「新专业」 为什么要用UI框架(如Bootstrap),你的专业?

作业理论

为了找到一种学习的好方法(技术),去年曾经尝试归纳一种「作业理论」,经过今年的学习经验,此理论有了一些进展。

第一进展是,将「学习」从「作业」中分离出来,「作业理论」的成果不是学习技术,而只是它(学习技术)的一种部分基础;

人任何生产活动都是作业,学习只是其中的一种,而是很唯一的特殊的一种;作业的概念是很通用的,是一种高度抽象的方法论,结论适用于所有人类生产活动,它的研究对象是理论(某物理论),工具,技术,任务等。

第二进展是,作业理论对实际生产的意义是间接的,不明显的,它有这种层级关系:作业理论 > 某物理论 > 某物制作工具(技术)> 某物任务方案(制作程序);

第三,我们掌握和应用新技术一般停留在工具的特性(例如React API),和工具的某种任务方案(常规使用方法,例如React 组件模式);再深一层的工具设计,某物理论,和作业理论本身,仍然在科学化进程之中;简单说,作业,学习技术 和wgp理论还在精细之中,它们的进度同时推进能力进展;作业本向进展,以及它如何指导某物理论(学习 和wgp理论),和技术工具设计,都是未来需要精化的地方;

第四,作业理论的结论成果(2020):

1 理论:对某物自然律最一般的刻画与概述
2 技术:对某物理论(自然律)一个实践化,针对创造某物而设计的工具
3 工具的特性就是有【适人】的一端,和【作业】的一端,【作业】一端可帮助高效完成任务,制作出产品
	~【作业】一端就是技术/工具的「功能属性」
	~【适人】包括人的思考能力,编程序语言、代码库、应用框架的各种概念构件都为【人的“思维手”】所能把持操控的
4 任务:任务就是人(任务作业者)利用技术/工具对原料制作,生成目标存在物的过程
5 经验模式:模式不是工具,是工具的使用,模式是使用工具完成任务的最优规则

研究笔记:

  • 作业理论新认识
  • SPA理论意义与能力层级
  • #理论不是全部#
  • 技术、任务、理论是什么?
  • 作业理论是什么,有什么用?
  • 为什么我总想知道,一般的「任务」的定义?

学习专业

2020 ,除了web应用开发和哲学,隐隐约约我还有一个专业,作为自学者得特别技能,叫学习。这里小结一些初步的结论;

  • 第一,这个专业的实质对象:人大脑认知,认知世界;人认知活动的规律;
  • 第二,新学习的「入口始终是」专家阐述;专家阐述 是学习的起点,也是基点,只有你完成了学习,建立自己一套东西后才可能正面认可,和反面批判。那时你才真正完成新技能的学习。
  • 第三,学习 真理消化三重门,自己,专家门派,真理,比对专家门派,自己主观消化,逼近真理;
  • 第四,“阅读专家的著述(文章)”是 最基础也是较容易的「学习技术」;
  • 第五,阅读专家的基础之上,我们还需要(还有)更细致准确的学习技术;例如怎样用既有观念,去消化新观念;如果没有旧经验,则可能需讲故事,做实验,来获得消化的基础——新任务,自然属性,意义
  • 第六,作业理论对学习专业有一定指导性,但没有针对性;
  • 第七,新学习内容新在什么地方:新任务(新工具特性),新自然属性,新意义;
  • 第八,成长就是拓展「意义」;「无经验」就是不了解什么,不体会意义,有经验,新技能,就是了解实质,明白意义,意义是价值,新意义就是新价值;
  • 第九:学习技术之一(经验模式),从头脑风暴到厘清专业
1 我的学习现象是不断阅读专业文章,写下灵感,发散性探险
2 年终回头整理,收敛归纳
3 得到专业目标,范围
4 再在范围内精深!2020-12-29
5 理论:找对专业的对象的形式属性,和运行规律,例如学习专业的人的大脑认知规律
6 经验:再分析专业领域常见生产场景和「任务」,总结出 经验 和作业模式

学习专业,与作业理论一样,都是方法论,很有价值,但是,都不容易兑现这些价值。它们处于同样的困难之中,第一,它们在科学进程中,第二,它们都很抽象。这些都是未来需要进展的地方。

研究笔记:

我的隐形专业,学习专业

丰富经验就是编程模式的掌握程度

L 「模式」不是「工具」,是工具的使用,模式是使用工具完成「任务」的最优规则
	L 设计模式,JS模式,React 模式
L 模式,工具,任务都是「知识」
	L 工具的知识
		L 工具特色和作业模式的界限 2020-11-13
	E 任务的知识
		L 编程工具的特征是,它可用来完成编程任务
	E 模式的知识

设计专业

今年最大的一个进步,是对「设计」有更深的认识,包括区别了「设计」广义和狭义;「狭义设计」是指 概念分析阶段,创建实物模型的阶段,是「某物设计师」的职能,是接手市场分析师的功能需求文档,制作设计模型,提供给开发工程作为开发指导。「广义的设计」是指一种考量过程,相对实操作的开发执行,功能,模型和实物产品的开发前,都是有考量(设计)的预备。

需求分析是「功能设计」,架构设计是「结构设计」,技术开发是「技术设计」 -野鹤鹤
考量过程是,根据实际情况,设计的价值观等作出一个设计案的输出。功能设计的输出是需求说明书,结构设计输出的是程序结构设计案,技术设计的输出是 具体代码程序。 -野鹤鹤
rev*1 功能设计产出的是抽象的功能设计案(程序功能设计有需求三级表和UC图) -野鹤鹤
设计案有抽象级别,分抽象设计 和具体设计 -野鹤鹤
这条在7月初就被修正,设计是考量设计案的过程,设计案有实物,也有抽象模型。

今年另一个进步,在设计理论的基础上,发现了程序开发,分「功能 」和「结构」两部分,前者归属是市场分析师,后者是程序设计师(所谓的架构师);严格区别出了程序形式(需求)、模型设计和程序实体开发,三个阶段,并知道了它们的设计案(例如UML用例图)

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK