做技术的工作不是很容易,尤其是客户问问题的时候,遇到技术上的问题,如果遇到过那就轻松应对,但是往往世事不尽人意,大部分问题都是没见过,抓耳挠腮,不得其解,愁人呀。其实有的时候觉得客户才是我们的导师,它们的问题就是我们努力的方向,这样我们是不是有点太被动了?我们应该学会去引领客户,应该预知客户会遇到哪些问题,如果这样的话,技术算是做到家了,对客户和领导都会有一份满意的答案。
想象总是很美好,世界上很少有十全十美的事情,所谓美中不足,正因为这样,我们才有了价值,用自己的所学,去争取美中的瑕疵。现实就是这样,三年下来,接触过客户的问题,客户对自己的产品的理解程度和认识有限,而自己也并非知道客户想要干什么,可能遇到那些问题,也做不到未卜先知。在经过反思之后,给自己找了一个牵强的理由,自己的工作环境和客户的工作环境不一样,软件这个东西,不同的环境上也会遇到不同的问题,做技术有一句名言“重启机器可以解决多少多少的问题”,这似乎已经成为定律。
有的时候羡慕同学能做一个很好页面,而我花费几个星期甚至都不能让自己满意,有的时候觉得自己惭愧!心里暗想,看看人家的功底……,望洋兴叹的感觉。 不同的环境,不同的工作,差异肯定存在,不相同的东西肯定必不出结果,班级考试排名,因为就是分数,科目这些都是既定的,所以容易,为自己暗暗高兴,找到这么一个冠冕堂皇的理由。
工作比较杂,软件产品种类的操作比较杂,开发语言比较杂,杂似乎是我工作的全部,一会儿ArcMap,一会儿ArcGIS Engine,一会儿ArcGIS Runtime,一会儿C#,一会儿javascript,C++,杂呀! 一直使用微软的东西开发,深受智能提示的影响,突然觉得,如果没有智能提示,自己好像一无是处了,什么都干不了,如果google,baidu不了的话,那么自己只有死路一条,想到这里,满腹的话语告诉自己,警戒自己,一定要将这些东西刻印在脑海之中。
只能提示,好一点的IDE,这些让人成了依赖,没有这些写不了代码,干不了活,但是却没有停下来思考下,今天趁这个时间点,也就是自己写的《ArcGIS API for javascript》对外公布的这一天写一写自己的心得。
我们都是语言是相通的,尽管语言一直在变化,在发展,但是对于我们来说解决问题的方法不应该变,但是也不是一成不变,而是趋于简单化。我们在语言中,用的多的,除了基本的类型之外,这是必须的,因为所有的语言几乎都有,比如普通的int类型,数组,字符串,对象等,剩下的可能就是函数,或者方法等一类的东西。这些东西不可小觑,神有内涵,因为我们所谓的解决问题,都是在后面操纵这些玩意,字符串,数组,还有类型转换。其实这些都是我们应该能想到的,或者在潜意识里面都应该知道的,或许已有的经验告知我们。
Python中的数据类型转换
int(x [,base ]) 将x转换为一个整数 long(x [,base ]) 将x转换为一个长整数 float(x ) 将x转换到一个浮点数 complex(real [,imag ]) 创建一个复数 str(x ) 将对象 x 转换为字符串 repr(x ) 将对象 x 转换为表达式字符串 eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象 tuple(s ) 将序列 s 转换为一个元组 list(s ) 将序列 s 转换为一个列表 chr(x ) 将一个整数转换为一个字符 unichr(x ) 将一个整数转换为Unicode字符 ord(x ) 将一个字符转换为它的整数值 hex(x ) 将一个整数转换为一个十六进制字符串 oct(x ) 将一个整数转换为一个八进制字符串
Javascript中的字符串操作
concat() 将两个或多个字符的文本组合起来,返回一个新的字符串。 indexOf() 返回字符串中一个子串第一处出现的索引。如果没有匹配项,返回 -1 。 charAT() 返回指定位置的字符。 lastIndexOf() 返回字符串中一个子串最后一处出现的索引,如果没有匹配项,返回 -1 。 match() 检查一个字符串是否匹配一个正则表达式。 substring() 返回字符串的一个子串。传入参数是起始位置和结束位置。 replace() 用来查找匹配一个正则表达式的字符串,然后使用新字符串代替匹配的字符串。 search() 执行一个正则表达式匹配查找。如果查找成功,返回字符串中匹配的索引值。否则返回 -1 。 slice() 提取字符串的一部分,并返回一个新字符串。 split() 通过将字符串划分成子串,将一个字符串做成一个字符串数组。 length() 返回字符串的长度,所谓字符串的长度是指其包含的字符的个数。 toLowerCase() 将整个字符串转成小写字母。 toUpperCase() 将整个字符串转成大写字母。
javascript中的数组操作
join 把数组中各个元素使用分隔符(delimiter)拼成字符串 concat 合并数组,对原数组不影响,只是返回合并后的新数组 pop 删除并返回最后一个元素 push 在数组末尾追加元素 shift 删除并返回第一个元素 unshift 在数组开始位置添加元素 reverse() 将数组元素顺序首尾反转 sort(function) 给数组排序,如果不给参数,默认按字符排序(所有元素是数字也不会按数字排序的)参数必须是一个函数,类似function(a, b) {},在函数中判断a, b的大小,a>b返回正数,a<b返回负数,a=b返回0 slice(start, end) 返回一个新的数组,将start开始,到end结束(不包括end)之间的元素复制到新数组中 splice(start, count, replaceElement1, replaceElement2, ...): 删除或者替换数组元素,从start开始,对count个元素进行删除或替换,如果提供replaceElement参数则进行替换,否则进行删除操作,被替换的元素个数和replaceElements的个数不必相等 返回一个数组,包含被删除或替换掉的元素
语言很多,很杂,不同的语法,不同的规则,这些我们都必须遵守,无规矩不成方圆呀。语言在发展在相互学习,在引入新的特性去方便我们,lambda,匿名函数等,不知道看到下面的有何启示,语言在不断的学习,就如一个人一样,取其精华去其糟粕,这才能在以后的竞争中占有一席之地。
(lambda x: x*2)(3)
var persons = new List<Person> {
new Person {username = "a", age=19},
new Person {username = "b", age=20},
new Person {username = "a", age=21},
};
var selectperson = from p in persons where p.age >= 20 select p.username.ToUpper();
foreach(var p in selectperson)
Console.WriteLine(p);
var selectperson = persons.Where(p=>p.age>=20).Select(p=>p.username.ToUpper());
语言都在演化,以自己独特的方式让我们开发尽量的容易,只是辛苦了编译器,或者解释器,都在变,这个动态的世界自从其诞生就一直演化……
很多的感触,很多的想法,闭闭眼就感觉自己在思考什么,这些还叫编程吗?这些是人都应该想到的?这些还能成为程序员的专利吗?绝对不是,这些背后的东西,自己又了解多少呢?自己的专业素养又在什么地反体现。
喜欢追去完美的人,有的时候的完美却会让自己身陷囹圄不能自拔,浪费时间却不讨好?真正的勇士应该最清楚自己和对方的弱点。我是一个不能静下心来的人,心静的人往往能做出令人炫目的东西,才最有可能做出完美的东西,看来,到时候了……