是不是应该放下技术多看看软件工程之类的东西?
当然,我会举个栗子的,这几天请假复习考试,大一挂到大四的高数一考完,哪里还看得进去书啊
(题外话,首先我还是要吐槽一下老板整天让我看他们以前的旧代码然后写xslt做数据交换,半年了,需求嘛搞不清楚让我自己看还要写文档,旧项目嘛据说是以前用打孔写代码的人用vb写的,那叫一个绕啊。有了需求我特么只要半天就能写好xslt,作为新手我想请教下各位我特么是不是被“忽悠”了。)不就是因为让我做几个简单的界面我做了三个月嘛!
后来我找到原因了,据说叫做"Analysis Paralysis"
我经常写一些小工具让电脑代替我思考,比如和我的问题有关的例子:
某游戏由于汉化组的技术原因,有些汉字在游戏里不会被显示出来。当时别人都不知道怎么让通过任务编辑器做出的任务在游戏中输出汉字,而我在某个暑假自己鼓捣出来了,然后就发现前面说的“不全”问题。于是我花了一星期时间测试了所有的汉字并记录下来。当时并不咋会写代码所以就放着。后来实习了段时间之后就用WinForm做了个“简单”的小程序,标出输入的字符中哪些是游戏中无法显示的:
一直觉得随便写的这个简单的WinForm程序很“辣鸡”,正好换了家公司学了WPF,就打算重新写。于是看了眼WinForm程序,十分简单但是想改就无处下手了,里面用了WinAPI以及GDI的东西,估计都是百度来的因为完全看不懂在干啥,乱七八糟的。。
然后动手开始写,今天是第三天,除去看高数和考高数的时间,所花时间其实并不多。我就不说具体代码了,确实也没啥好说的。界面还没改,转换成游戏里识别的代码部分也没做,cpu占用率到了25%,感觉已经无法继续做下去了
看了段时间“汇编逆向爆破”的东西,感觉“疑心”更重了。
游戏里能显示的字符都放在一个硬编码的List里面,每次读取时,如果本地文件不存在,就通过编码、改变次序、压缩等手法进行“加密”,然后存到本地;否则直接读取本地文件。之后进行“解密”,折腾了这么多之后总算把数据放到内存里了。。。
然后处理输入的内容,遍历每个输入的字符,如果该字符不存在于之前读的那个字符列表中,就将它的索引号放到列表中。
然后,遍历这个列表,生成另一个列表,里面放了不存在的连续字符的首位索引和连续的长度,然后再遍历它得到由游戏里显示的和不显示的字符串组成的列表,然后再生成标记过的单个字符组成的列表。
这么
一通折腾之后,我得到了下面结构的一个列表:
public class SingleChar
{
public int Index { get; set; }
public bool Marked { get; set; }//true表示游戏里无法显示,需要标记出来给用户看
public char Data { get; set; }
}
Finally……其实我是不知道怎么在不直接使用之前用过的那些GDI和WinAPI的情况下实现同样的效果,同时,我以为wpf是万能的。于是我就想将用户输入分为一个个字符,然后我根据这些字符生成不同的TextBlock控件,同时为了能到达末尾自动换行(就像真的TextBox里的换行一样的效果)而使用了能自动换行的WrapPanel。
总之目前的效果:
可是每当文本框里发生改变时以上过程(除了加载原始数据)就要重新来一遍,妥妥的cpu不高才有鬼啊,最高的就是创建TextBlock控件并呈现给用户的那块
但又不想用按钮点击那种很“Low”的传统方法。
于是我想,要不给TextBox加一个状态变化的判断吧,判断用户是删了某几个字还是在原有基础上继续加了几个字还是插入了几个字还是全删了重写还是全选粘贴,于是我想应该加一个用户行为分析,然后在原有的代码上做判断再执行这样就能少执行很多东西了。然后我再一想,用户行为分析。算了不做了有空再说吧以前的WinForm写的那个挺好用的
求大神给几个书名我去好好看看。