导航:首页 > 程序命令 > 程序员沙雕训练

程序员沙雕训练

发布时间:2023-10-21 02:53:52

Ⅰ 孩子学编程有什么好吃少儿编程/scratch

童程少儿编程名师解答: 学习编程最核心目的是通过“训练人的思维方式,培养新的看待问题和处理问题的方式” ①提高数学思维,和逻辑思维能力(让孩子变的更聪明): 编程是强度最大的脑力劳动,软件学科中的一切并非自然生成,完全出自人的大脑的抽象、设计和归纳。解一道数学题的方法就是2-3中,不会超过5种,单只编程有千万种,编程活动对于培养人的数学思维、逻辑思维、抽象思维有着莫大的好处。 ②养成严谨的习惯: 编程语言是最精密的语言。一个分号的缺失导致程序完全不能运行,两条语句顺序的颠倒会使结果大相径庭。对于程序员的训练,首先就是要去除“马虎”的因素,讲严谨的工作习惯植入内心。 ③提高解决问题分析问题的能力: 程序不是写一次就能正确的,不是写十次就能达到你所期望的结果,一个好的程序要调试十次甚至上百次,比如一个ATM取款机一个正常程序可能只需要100行,但是它要考虑到一些异常情况的发生,大概是正常程序的5-10次。 ④让孩子有成就感: 孩子通过一串串代码的编写,完成曾经自己和伙伴未能通关的游戏,编写一个个完整的游戏项目非常能建立孩子们的成就感。 ⑤完成项目 软件不是简单代码的堆砌,而是架构的艺术;代码分装成类,类组成模块,模块构建子系统,子系统相互协同实现完整的系统功能。系统设计、整体规划、团队合作,这些都程序员标志性技能。 编程团队分工的耦合度很高,所以编程是能够提高孩子团队合作的能力。

Ⅱ 现实中程序员是怎样飞快敲代码的

敲代码很快有几个条件

1.对项目代码和结构非常熟悉,知道整个数据流的在代码中的流动过程和变化过程。知道当前新增的代码在整个项目处于哪个位置,对于数据会有产生什么新的变化。这些要心理有数。也就是从架构层面去思考代码的编写。

2.对于需求理解的很透。这样业务逻辑转成代码逻辑就不会有任何不清楚的地方。

3.已经解决了技术难点,也就是说前期测试性代码已经写过了弄清楚了,避免了突然出现的技术性难点

4.新增的代码和新增的数据结构已经仔细思考过了,并设计好。也清楚引入这些新的代码和数据结构对现有代码的整体影响

5.异常点的位置的处理方案已经安排好了。写代码一部分是正常业务流程,算法过程,但是另外一大块就是处理各种异常。当异常出现之后,是代码重试,报错后忽略,还是报错之后停止代码,还是报错后清理代码并重新恢复上一个状态,等等。这些都是要心理有数。

6.对于如何新增源代码文件,命名函数,命名文件名,命名类名,命名变量名有一整套方案。有时候想个函数名或者变量名都要卡好几分钟,就不算飞快了。别笑,想个变量名,网络十来分钟的时候多了去了。

7.外部环境已经准备好了。IDE稳定,数据库结构稳定,数据稳定,网络稳定,访问网页顺畅,准备好免打扰的牌子。准备好刷卡提需求的二维码,准备好板砖和大刀,预防产品经理提需求和改需求。

Ⅲ 急急急!!! 知道快进!!!

数是除2取余倒计法,小数是乘2取整正计法。负数和正数一样,只是最后加个负号就行了。举几个例子
首先八进制Octal:
八进制Octal是以8为基的。因为8 == 2^3, 所以每个八进制数字代表3个二进制数字(或位)
如:123(octal) = 001 010 011

十进制如下:41(decimal) = 0010 1001 = 00 101 001 = 051 (octal)

注意:分组是从最右边开始的(41 不能如下分组"001 010 01")

十六进制:
十六进制Hex是以16为基的。因为16 == 2^4, 所以每个八进制数字代表4个二进制数字(或位)
单个十六进制数字的范围是0000 - 1111 (即 0-15 (十进制decimal)), 但是这样的话数字不够了,因此十进制10-15 (1010-1111)用字母A-F (大小写无所谓)代表.

例如:
123(hex) = 0001 0010 0011
1ac(hex) = 0001 1010 1100

用十进制一样:41(十进制) = 0010 1001 = 29 (十六进制hex)
8(进制)转换成2(进制)-----把每一位数转化为三位数,

16((进制)转换成2(进制)---把每一位数转化为四位数,

8(进制)转换成16(进制)----先转化为2进制,再转化,...

16(进制)转换成8(进制)----先转化为2进制,再转化,...
回答者:独立寒冬 - 高级经理 六级 4-20 16:02

windows附件里自带有计算器,选择为科学型很容易就实现进制转换!

电脑上的常用进制有:2、8、10、16四种,在修改中经常接触的是2、10和16进制,基本上需要了解的是2和16互转、10和16互转,其他多了解也没亏

2转16:
4个2进制位为一个16进制数,2进制1111为16进制F,2进制中千位的1=8,百位的1=4,十位的1=2,个位的1=1,将各个位的数作相应转换再相加,的到的数就是10进制数0-15,可轻松转换成16进制。如01011100,可看成是两组2进制数0101和1100,则这个数就是16进制的5C。

10转16:
100以内一点的10转16心算比较快,复杂的用“计算器”算了。10转16用传统的计算方式可以了,就是大于15小于256的10进制数除以16为的值为十位的16进制数,其余数为个位的16进制数,没余数则个位为0。如61的16进制是3D,61除以16得3余13,3作十位数,13转成D为各位数。

16转10:
用相反的道理,将十位数乘以16加上个位数。如5A,将5乘以16得80,加上A的10进制10,结果是90。
最直接方便的方法是用windows或win95中的计算器,打开计算器,将计算器置成科学型(win95的乘法),选中十进制选择钮,输入十进制数然后选择二进制选择钮,OK!又快又准确。可是如果你想成为一个合格的程序员的话,你就必须充分了解十进制数和二进制数的特点,最好的方法是你多做一些进制转换的题目,这是程序员训练中的传统做法。
三、以十六进制作桥梁
十进制到二进制的转换实在麻烦,而且二进制数实在不易记忆和理解,你能马上感觉到一万元是多少钱,但是你能感觉到10011100010000(二进制)是多少吗?为了编程和使用方便,在二进制和十进制之间有了一座桥梁十六进制。十六进制是逢十六进一,0、1、2、3、4、5、…9、A、B、C、D、E、F、10、11、12……。到了9以后用ABCDEF表示,十六进制数与二进制数的转换非常方便。
首先你应当牢记下表
二进制 十六进制
0 0
1 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F
二进制数转换成十六进制数方法如下,以二进制数1101110为例:
将二进制数从右面开始以四位为一组分组,最左面不够四位的补0,按上表查得对应的十六进制数,组合起来以后就成了。
0110 1110的十六进制数是6E
十六进制转换成二进制方法如下,以十六进制数3E为例:
将十六进制的每一位转换成四位二进制数,不足四位的在左面补0,组合起来即可得到二进制数。
3E的二进制数是00111110,既是111110
当然你也可以用计算器得出结果。但也建议你熟练掌握。
也许热爱改游戏的你已经猜到,这就是你在改游戏的时候为什么总是与2A、3B、4C、5D、EF等奇怪数字打交道的原因了。它们表示的十六进制数。
怎么样够烦人的吧?我也曾经这样认为,为了进一步更好更快地掌握学习游戏编程,你必须了解这些进制转换。
数是除2取余倒计法,小数是乘2取整正计法。负数和正数一样,只是最后加个负号就行了。举几个例子
首先八进制Octal:
八进制Octal是以8为基的。因为8 == 2^3, 所以每个八进制数字代表3个二进制数字(或位)
如:123(octal) = 001 010 011

十进制如下:41(decimal) = 0010 1001 = 00 101 001 = 051 (octal)

注意:分组是从最右边开始的(41 不能如下分组"001 010 01")

十六进制:
十六进制Hex是以16为基的。因为16 == 2^4, 所以每个八进制数字代表4个二进制数字(或位)
单个十六进制数字的范围是0000 - 1111 (即 0-15 (十进制decimal)), 但是这样的话数字不够了,因此十进制10-15 (1010-1111)用字母A-F (大小写无所谓)代表.

例如:
123(hex) = 0001 0010 0011
1ac(hex) = 0001 1010 1100

用十进制一样:41(十进制) = 0010 1001 = 29 (十六进制hex)
8(进制)转换成2(进制)-----把每一位数转化为三位数,

16((进制)转换成2(进制)---把每一位数转化为四位数,

8(进制)转换成16(进制)----先转化为2进制,再转化,...

16(进制)转换成8(进制)----先转化为2进制,再转化,...
回答者:独立寒冬 - 高级经理 六级 4-20 16:02

windows附件里自带有计算器,选择为科学型很容易就实现进制转换!

电脑上的常用进制有:2、8、10、16四种,在修改中经常接触的是2、10和16进制,基本上需要了解的是2和16互转、10和16互转,其他多了解也没亏

2转16:
4个2进制位为一个16进制数,2进制1111为16进制F,2进制中千位的1=8,百位的1=4,十位的1=2,个位的1=1,将各个位的数作相应转换再相加,的到的数就是10进制数0-15,可轻松转换成16进制。如01011100,可看成是两组2进制数0101和1100,则这个数就是16进制的5C。

10转16:
100以内一点的10转16心算比较快,复杂的用“计算器”算了。10转16用传统的计算方式可以了,就是大于15小于256的10进制数除以16为的值为十位的16进制数,其余数为个位的16进制数,没余数则个位为0。如61的16进制是3D,61除以16得3余13,3作十位数,13转成D为各位数。

16转10:
用相反的道理,将十位数乘以16加上个位数。如5A,将5乘以16得80,加上A的10进制10,结果是90。
最直接方便的方法是用windows或win95中的计算器,打开计算器,将计算器置成科学型(win95的乘法),选中十进制选择钮,输入十进制数然后选择二进制选择钮,OK!又快又准确。可是如果你想成为一个合格的程序员的话,你就必须充分了解十进制数和二进制数的特点,最好的方法是你多做一些进制转换的题目,这是程序员训练中的传统做法。
三、以十六进制作桥梁
十进制到二进制的转换实在麻烦,而且二进制数实在不易记忆和理解,你能马上感觉到一万元是多少钱,但是你能感觉到10011100010000(二进制)是多少吗?为了编程和使用方便,在二进制和十进制之间有了一座桥梁十六进制。十六进制是逢十六进一,0、1、2、3、4、5、…9、A、B、C、D、E、F、10、11、12……。到了9以后用ABCDEF表示,十六进制数与二进制数的转换非常方便。
首先你应当牢记下表
二进制 十六进制
0 0
1 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F
二进制数转换成十六进制数方法如下,以二进制数1101110为例:
将二进制数从右面开始以四位为一组分组,最左面不够四位的补0,按上表查得对应的十六进制数,组合起来以后就成了。
0110 1110的十六进制数是6E
十六进制转换成二进制方法如下,以十六进制数3E为例:
将十六进制的每一位转换成四位二进制数,不足四位的在左面补0,组合起来即可得到二进制数。
3E的二进制数是00111110,既是111110
当然你也可以用计算器得出结果。但也建议你熟练掌握。
也许热爱改游戏的你已经猜到,这就是你在改游戏的时候为什么总是与2A、3B、4C、5D、EF等奇怪数字打交道的原因了。它们表示的十六进制数。
怎么样够烦人的吧?我也曾经这样认为,为了进一步更好更快地掌握学习游戏编程,你必须了解这些进制转换。
数是除2取余倒计法,小数是乘2取整正计法。负数和正数一样,只是最后加个负号就行了。举几个例子
首先八进制Octal:
八进制Octal是以8为基的。因为8 == 2^3, 所以每个八进制数字代表3个二进制数字(或位)
如:123(octal) = 001 010 011

十进制如下:41(decimal) = 0010 1001 = 00 101 001 = 051 (octal)

注意:分组是从最右边开始的(41 不能如下分组"001 010 01")

十六进制:
十六进制Hex是以16为基的。因为16 == 2^4, 所以每个八进制数字代表4个二进制数字(或位)
单个十六进制数字的范围是0000 - 1111 (即 0-15 (十进制decimal)), 但是这样的话数字不够了,因此十进制10-15 (1010-1111)用字母A-F (大小写无所谓)代表.

例如:
123(hex) = 0001 0010 0011
1ac(hex) = 0001 1010 1100

用十进制一样:41(十进制) = 0010 1001 = 29 (十六进制hex)
8(进制)转换成2(进制)-----把每一位数转化为三位数,

16((进制)转换成2(进制)---把每一位数转化为四位数,

8(进制)转换成16(进制)----先转化为2进制,再转化,...

16(进制)转换成8(进制)----先转化为2进制,再转化,...
回答者:独立寒冬 - 高级经理 六级 4-20 16:02

windows附件里自带有计算器,选择为科学型很容易就实现进制转换!

电脑上的常用进制有:2、8、10、16四种,在修改中经常接触的是2、10和16进制,基本上需要了解的是2和16互转、10和16互转,其他多了解也没亏

2转16:
4个2进制位为一个16进制数,2进制1111为16进制F,2进制中千位的1=8,百位的1=4,十位的1=2,个位的1=1,将各个位的数作相应转换再相加,的到的数就是10进制数0-15,可轻松转换成16进制。如01011100,可看成是两组2进制数0101和1100,则这个数就是16进制的5C。

10转16:
100以内一点的10转16心算比较快,复杂的用“计算器”算了。10转16用传统的计算方式可以了,就是大于15小于256的10进制数除以16为的值为十位的16进制数,其余数为个位的16进制数,没余数则个位为0。如61的16进制是3D,61除以16得3余13,3作十位数,13转成D为各位数。

16转10:
用相反的道理,将十位数乘以16加上个位数。如5A,将5乘以16得80,加上A的10进制10,结果是90。
最直接方便的方法是用windows或win95中的计算器,打开计算器,将计算器置成科学型(win95的乘法),选中十进制选择钮,输入十进制数然后选择二进制选择钮,OK!又快又准确。可是如果你想成为一个合格的程序员的话,你就必须充分了解十进制数和二进制数的特点,最好的方法是你多做一些进制转换的题目,这是程序员训练中的传统做法。
三、以十六进制作桥梁
十进制到二进制的转换实在麻烦,而且二进制数实在不易记忆和理解,你能马上感觉到一万元是多少钱,但是你能感觉到10011100010000(二进制)是多少吗?为了编程和使用方便,在二进制和十进制之间有了一座桥梁十六进制。十六进制是逢十六进一,0、1、2、3、4、5、…9、A、B、C、D、E、F、10、11、12……。到了9以后用ABCDEF表示,十六进制数与二进制数的转换非常方便。
首先你应当牢记下表
二进制 十六进制
0 0
1 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F
二进制数转换成十六进制数方法如下,以二进制数1101110为例:
将二进制数从右面开始以四位为一组分组,最左面不够四位的补0,按上表查得对应的十六进制数,组合起来以后就成了。
0110 1110的十六进制数是6E
十六进制转换成二进制方法如下,以十六进制数3E为例:
将十六进制的每一位转换成四位二进制数,不足四位的在左面补0,组合起来即可得到二进制数。
3E的二进制数是00111110,既是111110
当然你也可以用计算器得出结果。但也建议你熟练掌握。
也许热爱改游戏的你已经猜到,这就是你在改游戏的时候为什么总是与2A、3B、4C、5D、EF等奇怪数字打交道的原因了。它们表示的十六进制数。
怎么样够烦人的吧?我也曾经这样认为,为了进一步更好更快地掌握学习游戏编程,你必须了解这些进制转换。
数是除2取余倒计法,小数是乘2取整正计法。负数和正数一样,只是最后加个负号就行了。举几个例子
首先八进制Octal:
八进制Octal是以8为基的。因为8 == 2^3, 所以每个八进制数字代表3个二进制数字(或位)
如:123(octal) = 001 010 011

十进制如下:41(decimal) = 0010 1001 = 00 101 001 = 051 (octal)

注意:分组是从最右边开始的(41 不能如下分组"001 010 01")

十六进制:
十六进制Hex是以16为基的。因为16 == 2^4, 所以每个八进制数字代表4个二进制数字(或位)
单个十六进制数字的范围是0000 - 1111 (即 0-15 (十进制decimal)), 但是这样的话数字不够了,因此十进制10-15 (1010-1111)用字母A-F (大小写无所谓)代表.

例如:
123(hex) = 0001 0010 0011
1ac(hex) = 0001 1010 1100

用十进制一样:41(十进制) = 0010 1001 = 29 (十六进制hex)
8(进制)转换成2(进制)-----把每一位数转化为三位数,

16((进制)转换成2(进制)---把每一位数转化为四位数,

8(进制)转换成16(进制)----先转化为2进制,再转化,...

16(进制)转换成8(进制)----先转化为2进制,再转化,...
回答者:独立寒冬 - 高级经理 六级 4-20 16:02

windows附件里自带有计算器,选择为科学型很容易就实现进制转换!

电脑上的常用进制有:2、8、10、16四种,在修改中经常接触的是2、10和16进制,基本上需要了解的是2和16互转、10和16互转,其他多了解也没亏

2转16:
4个2进制位为一个16进制数,2进制1111为16进制F,2进制中千位的1=8,百位的1=4,十位的1=2,个位的1=1,将各个位的数作相应转换再相加,的到的数就是10进制数0-15,可轻松转换成16进制。如01011100,可看成是两组2进制数0101和1100,则这个数就是16进制的5C。

10转16:
100以内一点的10转16心算比较快,复杂的用“计算器”算了。10转16用传统的计算方式可以了,就是大于15小于256的10进制数除以16为的值为十位的16进制数,其余数为个位的16进制数,没余数则个位为0。如61的16进制是3D,61除以16得3余13,3作十位数,13转成D为各位数。

16转10:
用相反的道理,将十位数乘以16加上个位数。如5A,将5乘以16得80,加上A的10进制10,结果是90。
最直接方便的方法是用windows或win95中的计算器,打开计算器,将计算器置成科学型(win95的乘法),选中十进制选择钮,输入十进制数然后选择二进制选择钮,OK!又快又准确。可是如果你想成为一个合格的程序员的话,你就必须充分了解十进制数和二进制数的特点,最好的方法是你多做一些进制转换的题目,这是程序员训练中的传统做法。
三、以十六进制作桥梁
十进制到二进制的转换实在麻烦,而且二进制数实在不易记忆和理解,你能马上感觉到一万元是多少钱,但是你能感觉到10011100010000(二进制)是多少吗?为了编程和使用方便,在二进制和十进制之间有了一座桥梁十六进制。十六进制是逢十六进一,0、1、2、3、4、5、…9、A、B、C、D、E、F、10、11、12……。到了9以后用ABCDEF表示,十六进制数与二进制数的转换非常方便。
首先你应当牢记下表
二进制 十六进制
0 0
1 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F
二进制数转换成十六进制数方法如下,以二进制数1101110为例:
将二进制数从右面开始以四位为一组分组,最左面不够四位的补0,按上表查得对应的十六进制数,组合起来以后就成了。
0110 1110的十六进制数是6E
十六进制转换成二进制方法如下,以十六进制数3E为例:
将十六进制的每一位转换成四位二进制数,不足四位的在左面补0,组合起来即可得到二进制数。
3E的二进制数是00111110,既是111110
当然你也可以用计算器得出结果。但也建议你熟练掌握。
也许热爱改游戏的你已经猜到,这就是你在改游戏的时候为什么总是与2A、3B、4C、5D、EF等奇怪数字打交道的原因了。它们表示的十六进制数。
怎么样够烦人的吧?我也曾经这样认为,为了进一步更好更快地掌握学习游戏编程,你必须了解这些进制转换。

java程序员如何提升自己

当前最多的程序员可能就是Java程序员了,作为工作了近20年的Java程序员,一路走来经历过很多弯路,也见过、培训过很多技术人员一步步成长,作为公司的技术负责人一直试图把自己血泪史、最佳实践进行传导、传播,中间犯过理想主义的错误,以为:告诉他(们),他们就可以知道、就会不犯错误,事实上不是这样的,计算机是一门实践性科学,很多东西需要实践、反复训练才可以深刻理解、才可以转化为能力,以至变成下意识的行为。

有人天生代码感觉、逻辑思维比较好,有些人后天训练、打开天眼也可以成为技术高手,多看、多研究、多实践、多总结是笨招也是必杀。另外,沟通交流是可以让你进步加速的,不要闷头苦学,在前5年工作生涯里做的绝大多数的事情,都是把前人的知识进早胡锋行收集应用、归纳总结,要知道哪些不知道、要知道哪些东西自己必须要知道,对不知道的领域结合自己工作情况制定计划,逐步落实、修炼内功。

对于程序员来说,如果可能尽量选一个技术型公司、最好有“传帮带”文化体系的公司要学会制定计划、落实计划、工作总结、沟通交流,习惯看源码、习惯调试、习惯反编译、习惯问别人之前先把问题说清楚了、习惯写需求/设计/测试文档、习惯了解新生技术以及思考为什么产生、底层原理以及如何跟自己当前工作结合。要学会喜欢跟不同领域的人员沟通,底层逻辑相通的,成为高手过程中经历是相似的、可以借鉴的。

成为高手最重要的是:对未知领域的求陆晌做搏知欲、傻逼一样的持续坚持以及过程中的不断优化改进的工作学习方法。学而优则仕,当积累到一定程度的时候,你可以选择华丽转型,也可以选择升级打怪,也可以自主创业打造平台,不管怎样:勤奋、坚持、改进,Thereisnosetpath,Justfollowyourheart!

数通畅联专注于企业IT架构、SOA综合集成、数据治理分析领域,感谢您的阅读与关注。

Ⅳ 如何提升程序员的代码编写能力

一、先列三个常见的开发场景:

1、拿到一个模块详细设计文档,大部分程序员的通常做法就是开始搭建界面代码,然后从第一个按钮点击事件或页面Load事件开始写第一行业务代码。写的差不多了,就运行一下,发现哪里不是自己想的那样,就改改,直到改到是自己预想的那样。

2、做完了一个功能模块或几块相关联的功能模块,输入111asd,发现新建正常、保存正常,就提交给测试人员。测试员用测试用数据、测试场景用例来测试,发现有问题,就登记bug。对于严重的影响下一步测试的BUG,测试员就用内部IM通知这个开发人员。对于不影响继续往下测试的BUG,测试员就登记下来,等程序员有空时处理。

3、程序员一般工作不希望大家打扰,所以开发起来就是开发。等手头开发告一段落,就看看BUG库。发现有与自己有关的BUG,就从第一个BUG开始看起。就开始通过IM和测试员掰扯起来(这不是个BUG啊、业务逻辑不是你想的那样啊、我这里不能重现啊、你给的信息描述不清晰啊),于是IM几来几往,甚至跑过去当面交流一番,甚至会拉扯上产品经理一起讨论,更甚者需要项目经理或产品经理发起一个会议来集体讨论一下

这是不是很熟悉呢?这就是大部分程序员开发的三个步骤:写代码、自测、修复BUG。

二、说好的代码设计、代码测试呢?

代码设计?那不是都有开发平台么,已经固化了啊。那不是维护旧功能做完善修改呢么,又不是写新代码,只能在现有代码基础上修改啊,你又不能大幅重构。

代码测试?你丫需求讨论期、产品设计期、设计评审期那么长,都把研发项目时间占光了,就留下2个星期让我们写代码,我们哪里有时间搞那么深的测试。还想让我们搞结对编程?还想让我们搞测试驱动开发?

而且你看测试,什么功能测试、集成测试、性能测试、安全测试、安装部署测试、升级测试、迁移测试、UAT测试,一大堆测试,测试也需要很多时间。

一个项目,需求讨论、产品范围规划与评审、产品设计与设计评审占了一个半月,开发+自测就一个月,测试占了一个半月,这就4个月了啊。

三、为啥程序员写代码总是写写测测?

刚才大家也都看到了,大部分程序员都是从界面代码开始写起,而且写一写,就运行一下看看。为什么会是这种开发方式?

那是因为大部分程序员缺乏在脑子中的整体建模能力。只能做出来一点,真实的感觉一下,然后再往下。

有些是产品经理的上游就有问题,没给出业务流程图(因为产品经理也没做过业务),也没画清楚产品功能操作流程图。

为啥没给出业务流程图?因为产品经理不熟悉业务,另外,产品经理也没有流程建模能力啊。为啥没画清楚产品功能操作流程图啊?因为不会清晰表达流程啊。

很多产品经理、程序员,都缺乏分类、分层、相关、先后能力,更别说总结、洞察能力。

这是基本训练,是一个做事头脑清醒的人必备的技能,这不是一个程序员或产品经理或测试员的特定技能要求。

我经常看书就梳理书的脉络,每看一本就写一篇总结。我过去闲扯淡还梳理过水浒传、红楼梦的人物关系图呢,其实就在事事上训练自己的关联性、层次性、洞察性。

我经常面试一个人时,我会问这样的问题:“你把我刚才说的话复述一遍,另外你再回答一下我为什么会这样?”,其实,我就在看一个人的细心记忆、完整梳理、重现能力,我也在看一个人的梳理、总结、洞察能力。

我个人写代码就喜欢先理解业务流,然后理解数据表关系,然后理解产品功能操作流,大致对功能为何这样设计、功能这样操作会取什么表、插入或更新哪些表,哪些表的状态字段是关键。

然后我写代码的时候,就根据我所理解的业务流、功能操作流、数据输入输出流,定义函数,定义函数的输入与输出。

然后,我会给函数的输入值,赋上一些固定值,跑下来看看能否跑通这几个关联函数,看看还需要怎样的新增函数,或者看看函数的输入输出参数是否满足跑通。

剩下的事,就是我填肉写详细逻辑代码了。

当然,大部分人没我这样的逻辑建模能力。怎么阅读理解也想象不出来,也没法定义函数。毕竟有逻辑建模能力的程序员都很少,100个人里有10个,已经是求爷爷告奶奶好幸运了。

那怎么办呢?

我建议是分离分工配合,这就是现实中没办法的办法。让有逻辑建模能力的人来设计函数框架、来设计工具来设计代码模板,然后让没有逻辑建模能力的人来填肉写详细逻辑代码。

我们可以先从最紧要的模块开始这么做。不紧要的模块,还让它放任自流,让熟练手程序员继续涂抹。

我曾经还让有头脑的程序员做榜样,给大家分享他是怎么规划函数的,怎么做维护性代码的代码结构改善的。但是发现效果并不佳,其他人并没有因此能做代码设计。可能逻辑建模能力是个人的基本素质,是从小到大训练成型的,不是你一个大学已经几年的人能够短时间内可以训练的。

所以啊,还是让能走的人先走,让从最紧要的模块开始这么做。

不必担心这样做后,因为过去一件事被分工(一个做代码框架一个填肉)成两个人做了会降低工作效率。我们很多的工作效率低就是因为半瓶子醋搞出来的,来回反复修改。

真是应了刘德华在电影里说的那句话:说你又不听,听又听不懂,听懂了又不做,做又做不好,做不好还不服气。

四、为什么大部分程序员不做代码测试或白盒测试或单元测试呢?

还是因为没有代码设计。因为没有函数啊。所以,一个按钮功能有多复杂,代码就有多长。我见过2000行的函数,我也见过1000多行的存储过程和视图SQL。怎么做白盒测试啊,这些代码都粘在一起呢,要测,就得从头到尾都得测。

所以啊,先学会设计函数,先写好函数,这就求爷爷告奶奶了。很多开发了5年的熟练手程序员,可能都未必会写函数。

函数的输入输出值就很有讲究。很多人都写死了,随着版本迭代,发现过去定义的函数参数不够用了,于是就新增了一个参数。然后,相关性异常就爆发了,其他关联的地方忘改了,到底哪些有关联,怎么查啊,本系统没有,没准其他系统就调用你了,你根本不知道哪个神经人曾经COPY过你的代码修吧修吧就改成了他的功能呢,而且里面的很多代码他看不懂也不敢删,只要他实现的功能正常了他也不管了。于是,你改了你这个函数,他的系统就莫名出错了。

所以,我一般会定义几个对象来做参数。另外,我也很注重函数的日志、函数的异常保护、异常抛出、异常返回。另外,我也很注重参数输入值的合法性校验。

所以啊,应该开发Leader们先制定函数编写规范最佳实践,输入输出参数怎么定义比较好,函数的返回值如何定义比较好,函数的日志记录应该怎么写比较好,函数的异常保护、异常抛出、异常返回如何写比较好。先教会一般程序员,先从会写函数开始啊。

当然,你光有一份规范,程序员们还是不理解、不实际应用啊。所以,还得Leader们做好典型的代码模板,里面是符合函数规范的代码框架,只有这样,一般程序员们才会照猫画虎适应了函数设计的编程习惯。

所以啊,我专门重新定义了leader的明确职责,其中第一个重要职责就是:负责工具/框架/模板/规范的制定,并且负责推广且普及应用落地。

你不明确定义Leader的这个重要职责,你不对这个职责做明确的KPI考核,谁尿你啊。你以为好的工具/框架/模板/规范是靠人们的热情、自发产生的么?我们还没有那么自觉高尚啊。

五、为什么大部分程序员不写注释啊?

我经常说一句话,千万别多写注释。为啥?

因为我们经常遇到的问题不是没有注释,而是更糟的是,注释和事实代码逻辑是不相符的。这就出现常见问题了:残存下来的设计文档是一个逻辑、注释是一个逻辑说明、真实代码逻辑又是一个,钟表多了,你也不知道正确时间了。

所以啊,产品文档、注释、真实代码,三者总是很难一致同步。我为了几百人研发团队能做到这个同步花了大量心血和办法,但我最终也没解决了这个问题,还把Leader们、总监们、我都搞的精疲力尽。

索性回归到一切一切的本源,代码,就是程序员的唯一产出,是最有效的产出。那么,让代码写的不用注释也能看懂,咱得奔着这个目的走啊。

为啥看不懂,不就是意大利面条式代码么,又长又互相交杂。

OK,我就规定了,每个函数不能超过50行。用这一个简单规定和静态代码检查插件,来逼迫大家尝试着写函数。有的函数属于流程函数,是串起其他函数的,有的函数就是详细实现函数,实现一个且唯一一个明确作用的。

有了流程函数和功能函数,而且每个函数不超过50行,这就比过去容易看懂了。

六、为什么大部分程序员不抽象公共函数啊?

我经常说一句话:千万别抽象公共函数啊。为啥?

因为大部分程序员缺乏抽象洞察能力。特别是有些积极热情有余、爱学习爱看书、半瓶子醋晃悠的二杆子,看了几本UML、重构、设计模式、整洁代码之道,就跃跃欲试了,还真敢给你抽象公共函数了。

一开始,他觉得80%相似,20%不相似,于是在公共函数里面简单写几个if..else做个区隔就可以。没想到,越随着版本迭代,这些功能渐渐越变越不一样了,但是这个代码已经几经人手了,而且这是一个公共函数,谁也不知道牵扯多少,所以谁也不敢大改,发现问题了就加一个if..else判断。

没想到啊没想到,这个本来当初公共的函数,现在变成了系统最大的毒瘤,最复杂的地方,谁也不敢动,除非实在万不得已,手起刀落。

所以,我平时告诫程序员,纯技术的、纯通用的,你们可以尝试搞搞抽象公共函数,对于业务的,你们还是简单粗暴的根据Leader们做的代码模板代码框架,乖乖的复制、修改、填肉吧。

你们啊,先从做模板做代码片段开始吧,咱们放到咱们内部代码片段开源库里,看谁的代码片段被别人复制的多,说明你的代码抽象设计能力越好了。那时候,我就大胆放心让你撒丫子跑了。在没有学会跑之前,给老子乖乖的复制、修改、填肉吧。

阅读全文

与程序员沙雕训练相关的资料

热点内容
蜜源app是什么时候创立的 浏览:704
计算机专业学51单片机 浏览:208
程序员不接受反驳 浏览:294
微软自带的压缩软件 浏览:286
中国玩家在日本服务器做什么 浏览:48
12864和单片机 浏览:898
25匹空调压缩机 浏览:649
adkandroid下载 浏览:308
如何在苹果电脑上装python 浏览:327
哪个app的跑步训练内容最丰富 浏览:583
广讯通怎么删除文件夹 浏览:206
解压的视频化妆品 浏览:674
易语言新进程监视源码 浏览:941
turbo码译码算法 浏览:956
stc11f16xe单片机 浏览:282
linuxupdate命令行 浏览:578
pdf转化成wps 浏览:765
php抛出错误 浏览:159
买车看车用什么app 浏览:656
dos怎么清除屏幕上的命令 浏览:813