代码难说说
前些日子腾讯禁止使用代码的功能了.谁都知道全世界有N多高手.你腾讯守,偶们一起黑你.现在高手们编的代码还很少.在等些日子吧.
不是大牛,但从初中开始接触编程时间也挺长了,也来谈谈对编程的想法
不同的人对编程难的理解是不同的,因为编程本身的维度是不一样的,但最根本的,难在复杂性的控制,而不是一个个独立的概念. 普通的像office上写个vba,此时需要的只是永远不会变的业务逻辑,并且这种代码一般都是一个人写的1000行以内,因此你不需要软件工程的知识,时间长了也许会有编程很简单的错觉.这种编程最难的难在逻辑.
逻辑的难再上升一点便是算法,数据结构,这时候你会学到时空复杂度,学会用三种方法证明快排的时间复杂度,知道了现代计算机在面对非P类问题的无力,知道图灵机对于undecidable的问题的局限性,知道了用泵引理证明标准正则表达式永远也找不到匹配的括号,这时候你觉得很难,难在发现计算机其实干不了很多事.
接下来你或许回去刷各路oj,面对题目,第一步难在问题的抽象\建模上,第二步难在抽象出中正确模型后算法的选择上.也许一个非常像贪心的题结果是网络流,也许一个非常像DP的题,结果是最短路,矩阵快速幂....抽像出模型后,根据实际问题的各种条件选出最优方案,例如这种形式的dp 可以单调栈,斜率,平行四边形优化,选择在线or离线算法?稀疏图还是稠密图?这时候你会觉得很难,难在最基础的算法
接下来你会细分到具体的领域,此时的难就难在领域知识,这也是见仁见智.图形学各种立体角的积分也许对你很难,数学系转过来的小张也许就觉得公式比代码来得亲切.当然你也可以不管的,将系统看成一个黑盒,无脑调用现成的api,你不必关注神经网络是如何backpropagation的tensorflow,caffe等成熟的库已经把所有东西封装的很好了,你不必关注C++ RTTI的特性是如何实现的,现实生活中存在着大量这样的"程序员",当发生问题时,梯度消失?爆炸?即使没有太难的专业知识只是业务逻辑,为啥我把循环展开速度会快那么多(gcc O2默认不进行循环展开优化)?为啥我只是把数组长度变一下速度立马变了?他们也可以试出很多经验规律,可以工作的很出色,但他们会觉得很难,这样的难,难在编程所在平台,领域专业本身的复杂度,如同上面循环展开等,是由于目前CPU采用的分支预测策略以及pipeline被打断,因此也算作领域的知识
最后,你终于开始写real world的代码了,你会发现代码有10个G!用vs2017加载所有代码便是一个晚上,你这辈子都无法全部读完所有代码,此时你发现,控制代码复杂度非常难.当新增一个需求,坏味的代码要在密密麻麻的代码和文件中修改一两个参数,代码之间耦合非常大,A功能调好B功能不能用,AB都调好C又不能用,等C再调好,少年,晚上3点了,不要再加班了.一群人同时编译一个函数,一个类,一个文件,你刚准备提交,别人又在这个文件里做了改动conflict了,你又只能花半小时把代码合回去,又要看别人的合代码防止冲突,合完刚想提交又有一个人提交,又conflict了.如果之前的东西偏计科,那这里便是偏软工的难度了.你会学着让代码分层,使用单例让其只有一个访问入口点,减少全局变量.体会到了don't repeat urself的用处,看到一长段if else的逻辑,会想到用策略模式让其变成一个个分散的类了,不再用全局变量了,识别清楚了哪些地方可能会有改动,日后业务可能会有扩展,提前调整架构.例如日后项目要增加支持中英双语了,别人还在忙着将string改成wstring,仿佛重新写一个系统,而你由于代码架构灵活只要将新加的语言翻译好即可.
这才明白所谓架构,不如接地气的说下是整理代码,就好像面对一个巨大的房子,里面各种凌乱的衣服,电器,家具,你要做的是把袜子分们别类的放到一堆,并且整个房子只有这个柜子能找到袜子,用完也只能放到这个柜子里,这样就不至于东一只袜子,西一只袜子,遥控器的按钮不能串,不能想打开电视机,空调也打开了;当一个柜子塞满了衣服,并且有很多不同的人来取这些衣服,不如分出一些小柜子,按取的人分门别类,如果有若干人自己的衣服太多,则分出来春装夏装秋装继续分小柜子;房子的某些位置识别出可能日后会搬进新家电,那一开始走线的时候就要在那儿装接线板,插座,架构这个词太高高在上了,整理才适合
接着你会发现OO的思想本来就有着非比寻常的复杂度,每一个instance都是带状态的,这一次调这个接口的状态和下一次可能是不一样的,它是不纯的.当遇到并发的情况时,这个缺点尤为明显.你也许会接触FP那套纯函数的想法来消除副作用,然后打开了一扇崭新的大门.
编程难在哪里,不同的人,时期都会有不同维度的回答,但在我看来,编程的难在于世界本来就是复杂的,而编程只是用逻辑去模拟整个世界,编程的难在于逻辑的难,世界的难
这时候你刚接触TMP的学弟对着动辙上百个编译错误的甚至把编译器搞挂的代码,说编程好难啊 ----是啊,编程好难啊
使用后无法点击自定义还原的。请看下面文章的【3。0使用本空间flash作品必看和问题解答】里面提到的安全模式的使用。 腾讯再次开放了自定义代码,不过代码使用方法有点变动了。下面请看图例。 个人观点:使用后一样是全屏,只可惜感觉有点单调。 好象没有进场效果,不知道是不是TX为了不影响商城的黄钻专用的进场卖场呢?而且播放器问题还是不加附带。想要音乐的,还是必须掏钱买。简单一个版面,毕竟是有500K文件的限制。而且FLASH限制了不允许外部连接。所以整体显得单调了点。但是比起普通的装饰效果还是可观的。 毕竟FLASH是王者啊。哈哈。更多作品期待上传。不过还是老一句话。想要个性好看的。还是必须自己动手弄跳转。内容多才充实。 步骤: 1:打开自己空间(好象是废话 ) 2:点自定义 3:新建模块 4:输入模块名称(请注意图中的事项) 5:在评论框里。 输入层次和透明度选项调整 6:最后保存,大功告成,刷新下就出现效果了 以下是作品名称,大家对照下,按照方法输入 1: 模块名称:@LF(lwb) 评论内容:@API_zIndex(1) @API_Alpha(70) flash: 2 : 模块名称:@LF(ldh) 评论内容:@API_zIndex(1) @API_Alpha(70) flash: 3: 模块名称:@LF(dongman) 评论内容:@API_zIndex(1) @API_Alpha(70) flash: 4: 模块名称:@LF(king) 评论内容:@API_zIndex(1) @API_Alpha(70) flash: 5: 模块名称:@LF(wbsnxydnr) 评论内容:@API_zIndex(1) @API_Alpha(70) flash: 6: 模版名 @LF(lycxl) 评论内容: @API_zIndex(1) @API_Alpha(85) flash: 。