西西河

主题:【原创】从程序员到软件工程师 -- 东方射日

共:💬32 🌺43 新:
全看树展主题 · 分页首页 上页
/ 3
下页 末页
家园 【讨论】open source的使用

但是在国外有很大的不同,稍正式的公司基本上都禁止使用open source。

不同意这一点.我在国外几个Fortune500的公司工作过,很多资深开发者都来自Open source社区,好些大型open source项目的背后都是我们公司在支持. 基本上open source的版权有很多种,从限制最少的BSD版本到限制最多的GNU. 我相信你说的copy-left是指FSF的GPL, 但FSF也有LGPL的版本,对库函数的商业使用网开一面. 另外Java也可以算open source了, JDK的绝大部分是公开源码的.使用java的大小公司可就多了去了.

嵌入式领域可能风气不一样, 但互联网领域的公司,极少有不用open source的. 即使是微软,open source的libjpeg它也从IE1.0用到了IE6.5.

家园 数值算法

最出名的教科书是 Numerical Recipes in C, 号称数值计算的入门Bible.具体的实现上CPAN也有几个库,提供normal, Poisson, binomial等常用随机分布.

对不是数值计算专业的人来说, 知道去哪里找就好了. 一个人不可能什么都精通,博闻再加上专精某一方面就不错了. 这一点国外的本科教育不错,基本上用的都是最权威的教材,而且给出大量的reference.站在巨人肩上的结果就是: 即使是天赋不太聪明的学生,做东西也不会离业界标准差太远.

p.s. 我是国内的本科教育, 但是我曾有一个国外上本科的roommate.

p.p.s.即使是生成最简单的伪随机数(一维uniform分布),如果要作为密码级应用的随机数发生器,这个算法也很难构造,足够ACM论文的水平了.我最近用过一些依赖于随机数发生器的算法,用MS实现的标准库函数rand(),比起GLIBC提供的rand,效果就是要差很多.

家园 走迷宫的算法很简单

大家不妨考虑一下迷宫生成算法,这个比较有趣。

家园 傅里叶做这个做不好的

无法确定峰值的位置,而且不是无限空间,就算用离散傅里叶积分的话,其实也很不理想。

况且,你要做的是在时间轴上某段的数据,这点恰恰是傅里叶的弱势了,因为傅里叶的时间轴难以定位,就算用加窗的傅里叶,也会有窗的大小无法计算的问题。导致你没换一个数据分析方式就会重新做一次分析,性能很不好。

直接用哈尔分解会更好,计算上方便,而且曲线分布和元数据差别不大。

---如果用插值的话,其实效果不理想的,计算上不说了,误差也不好把握。

写程序其实到了后面就是做算法了。只是很多人不明白。觉得拿个代码看懂了就叫程序员了,其实还差的很。

到了后面,其实程序语言本身并不重要,关键是考虑东西的想法。比如最简单的排序,教科书上的方法看上去很美,可是数据量大了,那就不是一点两点的慢了,写程序其实最重要的是在不同的环境下具有多点分析的能力,再比如冒泡算法,理论正确,但是如果数据上了百万呢,上到了千万呢,这种消耗就不是一般的了。

家园 不是吧

反函数一般是没有别的方法了才用的。原因是

1. 反函数算起来一般很慢

2. 反函数往往有奇点,在奇点附近的函数值往往让人不踏实。

生成正态分布的随机变量一般用的恰恰是楼主说的方法(Box-Muller + Ziggurat),不过他说的有点不准确。

大体框架是:

1. 产生两个独立的uniform rv, -1<(x, y)<1

2. 如果他们在单位圆之外(z=x^2+y^2>=1),重新生成rv

3. 计算 z=sqrt(-2*ln(z))/z), r1=x*z, r2=y*z

r1和r2是两个独立的正态随机变量。原理是两个自由度的开方分布(就是这里的r1^2+r2^2)是个指数分布。

不过这种东西我可不指望有人能在面试中现想出来。

家园 问题3不太明白意思
家园 没错

你说的这个就是matlab6之前版本产生randn的方法

家园 什么样的工作会是对算法要求多的呢

印象中似乎对算法有编成需要的一般是比如软件商,如压缩,搜索,加密,图象,流媒体等,另一大宗需求就是近年随着对冲基金的兴起而大量出现的基金数学模型。

除了这些之外,看不到算法工程师有很广泛的市场需求呀。 不过,要是比老印的软件工程师,中国人可能真的只有走算法这条路比较有前途。

家园 第三个问题用傅里叶变换有点牛刀杀鸡

得先变换到频域,再抽取低频分量,再变换回时域。我觉得这个问题直接在时域上做简单的均值滤波就足够了,用不同时长的窗对付每天每周或者更长周期的要求。

当然,面试过程中扯一下傅里叶变换还是比较唬人的,至少显得很academic。

家园 很多

除了你所说的那些专业软件外还有

1。所有需要进行数据处理的单机、嵌入式设备的软件。由于无法使用专业数据库,很多数据结构和算法必须自己写。尤其当你没有STL的时候~~

2。所有的游戏软件,其中所谓的人工智能就是那些标准算法 的堆砌和组合。

3。实验分析和统计软件,或者可以统一叫数据分析data mining,包括统计分析,曲线拟合,数据筛选等。

还有我不知道,不了解,没听说过的

家园 不清楚,不过我的经验和你不同

我在这里经历过两个公司,公司都明文规定禁止私自使用open source,如果确实需要使用的,必须书面上报公司,由公司法律部门判定是否可以使用,如果需要授权的,由他们去决定是否支出该预算。

总之,基本上我们从来没有使用过下载来的open source。

即使是改写open source,也必须由TD进行code review,要求程序结构明显不同。

家园 呵呵,这个答案不好

发现下面讨论过了

家园 算法派和构架派

两个不同方向,就像武术中的内家功和外家功一样,或是剑宗和气宗

也许真正的高手是两方面功底都不错,其中更方面更善长一点,呵呵

家园 能答上这几道题是什么水平?

一两年后的水平,还是算法工程师的水平?

家园 关于open source

lz 对open source 的理解还是有误区,现在对商业友好的open source license 越来越多了。我作了5年的open source project 了,都是商业公司在做,而且是对商业用途完全没有限制的。

全看树展主题 · 分页首页 上页
/ 3
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河