首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
华为云
V2EX  ›  程序员

牛逼的程序员跟大多数程序员差别能有多大?

  •  
  •   lianxiangru · 2016-04-29 22:20:57 +08:00 · 22127 次点击
    这是一个创建于 932 天前的主题,其中的信息可能已经有所发展或是发生改变。

    感觉其实也差不太多,如果只是写普通代码,调用 API 什么的。 牛逼大概只能写某专业领域应用的代码才能体现出来吧。计算机图形学,机器学习什么的。

    第 1 条附言  ·  2016-04-29 23:11:33 +08:00
    而且感觉所谓的技术牛逼的程序员 约等于 数学稍微好那么一点的程序员。。。
    第 2 条附言  ·  2016-04-30 18:38:57 +08:00
    我的观点是好的程序员对细分领域的了解,可以让他写出一个普通程序员写不出来的东西,这种东西往往需要理解复杂的内在逻辑,比如数学。而普通的工作,调用一下 API 之类的,则往往区分不大。想请教的是从各位已工作的人的角度看,这段话妥当么。

    无意引战,抱歉。
    228 回复  |  直到 2016-05-03 10:41:21 +08:00
    1  2  3  
        201
    lianxiangru   2016-05-03 00:26:14 +08:00
    @wizardforcel I won't look into those elementary books since I have much better understanding in these fields. I am simply against your claim that "请注意 dl 算前沿科学,但是 ml 不算,图形更不算。", which is not even wrong.
        202
    lianxiangru   2016-05-03 00:27:58 +08:00
    @wizardforcel Given I already have much better understanding in those fields, I will not look into these elementary textbooks. I am simply against your claim "请注意 dl 算前沿科学,但是 ml 不算,图形更不算。", which is not even wrong.
        203
    lianxiangru   2016-05-03 00:30:09 +08:00
    @wizardforcel I will not look into these elementary textbooks given I have much better understanding in these fields. I am simply against your claim "请注意 dl 算前沿科学,但是 ml 不算,图形更不算。", which is not even wrong.
        204
    wizardforcel   2016-05-03 00:30:11 +08:00 via Android
    @lianxiangru ml 不都算。起码( ml - dl )不算。这你总得承认。
        205
    lianxiangru   2016-05-03 00:30:47 +08:00
    @wizardforcel My network sucks, sorry for replying multiple times.
        206
    wizardforcel   2016-05-03 00:32:23 +08:00 via Android
    @lianxiangru 牛逼的程序员一定要提出新的东西,这个我同意。 但是 ml 或者图形不是划分牛逼与不牛逼的依据。图形不算什么前沿科学; ml 现在也进培训班了,估计调参狗在可见的未来会激增。我觉得任何一个领域都有一些牛逼程序员,也存在一些平庸的人。

    还有不要一说 phd 就是一小撮顶尖的 phd ,一说程序员就是只会写 hello world 或者复制粘贴狗。这个锅程序员真的不背。
        207
    lianxiangru   2016-05-03 00:38:10 +08:00
    @wizardforcel You are definitely kidding. DL is just a method of fitting. ML - DL includes but not limited to HMM, PCA, manifold learning and lots of optimization algorithms. They may have intersection, but they are definitely not DL. Do you know RKHS or L-BFGS? Do you know what will change if a single optimization variable is applied on different problems (nonconvex, strongly convex, general convex, nonsmooth)? Do you think a ordinary programmer understands them correctly?
        208
    lianxiangru   2016-05-03 00:42:09 +08:00
    @wizardforcel Actually some of them are yet to be discovered. Tons of algorithms in ML (not DL) do not have theoretical guarantee for their asynchronous parallel versions. This is a rising topic in ML/Optimization now. If you can give a good bound, you can publish a paper on top conference NIPS/ICML etc.
        209
    pepsin   2016-05-03 00:42:27 +08:00   ♥ 1
    看了楼主帖子我知道了眼高过顶满嘴名词的工程师和普通工程师的差别有多大了
        210
    wizardforcel   2016-05-03 00:47:15 +08:00 via Android
    @lianxiangru 我懂得 ml 里面的分类和聚类的一些相关算法(关联分析好像不属于 ml ),这还是仅仅用了一年时间;同理,每个做数据的程序员都可能懂其中一部分,比如网易的推荐算法工程师就得懂协同过滤(当然也不可能全懂)。你太小看“普通程序员”了。

    你也不看看国内的现状, svm 这种东西都能进培训班,你觉得能进培训班的东西能叫“前沿科学”?很小众我倒是承认。

    所以在可见的未来里(请注意这个词),情况很难说。程序员当初宣传的有几百万缺口来着,不到十年,全部填满。
        211
    lianxiangru   2016-05-03 00:48:45 +08:00
    @pepsin Yes, you can definitely say my statements are full of jargon, as it will be if you communicate with any professional, if you do not understand them, but this judgement does not have any credit. Welcome any solid comments, given that the commenter really understands what is happening.
        212
    wizardforcel   2016-05-03 01:03:11 +08:00 via Android
    @lianxiangru 我很奇怪你为啥总是在提最优化。分类聚类你不知道吗?线性回归离群点分析你不知道吗?反正谁也不可能全懂这些算法,如果一个程序员只掌握一些低阶的,那是不是它也懂了 ml (的一部分)?我只所以说它不是前沿科学,就是因为其中的一些算法已经充分用于工程(而且已经快被培训班毁掉了,不得不说培训班真可怕),比如上面提到的协同过滤。这跟你说的“不断有新的算法提出来”不是相同的算法,我也没有冒犯你所研究方向的意思。
        213
    lianxiangru   2016-05-03 01:44:01 +08:00
    @wizardforcel @wizardforcel How can you be so confident that ML - DL is not bleeding edge research given you only know /something/ about clustering/classifying? SVM is also a large concept. I do not think a "培训班" will tell you anything about the representation theorem in feature space. I am also wondering whether you know anything about reinforcement learning, which is another main topic in ML.

    I do admit that some elementary technique in ML is understood by some ordinary programmers, as we all know how to compute +-*/ in math. "ML - DL is not bleeding edge research" is something like "Math - Algebraic geometry is not bleeding edge research" :-)

    The reason that I mention optimization frequently is that nearly all ML problems are essentially optimization problems. For example, given that you have already known SVM, I'll use SVM as an example :) The soft margin SVM or equivalently, the slack variable SVM, is the same as the optimization problem of hinge loss regularized by L_2 norm regularization term. The state of art method to solving SVM is using the popular optimization algorithm --- stochastic coordinate descent.

    BTW, do not think too highly of yourself if you learn something about ML in one year :-) Within 6 months of learning ML, I had published spotlight research paper in NIPS. I'm not one of the best in the field now and we both need to learn new stuff to become better = D
        214
    dcoder   2016-05-03 03:19:08 +08:00
    这满版的英文... 满天飞的 ML 概念... :D
    lz, 我们看出来了,你是一个非常能自 high 的在读 PhD
        215
    dcoder   2016-05-03 03:19:49 +08:00
    只是跑题确实跑得远了...
        216
    lianxiangru   2016-05-03 03:35:51 +08:00
    @dcoder 之前不在家,电脑上没有中文 IME 。你这句话说的挺反智的。說英文和提出概念,并不能证明一个人是在自 high 。何况我提出的这些概念,都是有明确目的的。比如上面所说的 SVM 的例子,就是在为 wizardforcel 同学阐明 ML 和 optimization 的关系。

    我发现我确实不适合在 V2EX 跟大家交流,我之前在这里推荐的非常好的书籍,并没有几个人关注。反而这种我一时好奇提出的问题,让很多半懂不懂的人都能来参与几句傲慢地鄙视一下别人,引起了这么大的关注。这个问题,的确没有什么意义,我也几乎没有从回复中收获到新的认识。如果可行的话,我是希望管理员能够删除这个帖子的。

    谢谢各位,祝好。
        217
    lianxiangru   2016-05-03 03:46:09 +08:00
    @dcoder 我深刻地理解,如果无法融入一个社区,并不是社区的错,而是我个人的问题。那么只有三种选项 1 )闭嘴 2 )改变环境 3 )去一个新环境。
    我自认为做不到 2 )。所以我选择 1 ) or 3 )了。
        218
    oglop   2016-05-03 04:28:06 +08:00 via Android
    差很大
        219
    allan888   2016-05-03 04:32:50 +08:00   ♥ 1
    @lianxiangru 一个 PhD 接触的东西和工程师自然是有区别的,有的人这点求同存异都做不到,也没必要苛求。
    我现在倒是不介意之前和我吵那哥们,只是觉得那些说“眼高于顶”,“太闲”的人感觉恶心。这点东西就让他们觉得眼高于顶了,那它们的眼是有多低。讨论这种觉得太闲,那 ubuntu 出了个新版本这种帖子也没见他们敢都去喊一嗓子太闲,可能反而这种他们觉得更有意义。
        220
    pepsin   2016-05-03 08:31:09 +08:00
    @lianxiangru @allan888 我只指那些讲 ML, DL 就是调调参数, 图形优化也不是什么高科技的人士. 希望他们能给点他们搞的高科技让大家感受一下.

    展示点可见的成果再说嘛. 另外, 前面大战了半天扯的都是什么狗屁啊, PhD 水不水, ML, DL 的区别, 哈哈哈, 这不是闲, 这是吃饱了撑的.
        221
    lianxiangru   2016-05-03 08:45:11 +08:00
        222
    pepsin   2016-05-03 09:05:57 +08:00
    @lianxiangru 如果我没看错的话, 发言的人里没有一位是你吧, 那你告诉我这是你搞的高科技干嘛?

    另外, 你是不是逻辑有点错乱, 我的言论基本是跟你一个方向的呀, 也是喷了. 我是饿坏了, 吃饭去了.
        223
    wizardforcel   2016-05-03 09:06:39 +08:00 via Android
    @lianxiangru 事实就是这样,科研人员研究新的算法,工程师应用已有的算法。之前是 ml 的还叫 ml ;但是之前是前沿科学的,不一定叫前沿科学(法拉第时代的电磁学叫前沿科学,但现在不叫)。请注意我此处说 ml 不是前沿科学,意思是“普通程序员”也能**掌握**一部分,并不是能够“有所突破”的意思。

    实际上换到任何一个领域,比如架构,普通程序员想要突破也是很困难的。 23 条设计模式多少年了,也没见发生过质的变化。
        224
    lianxiangru   2016-05-03 09:11:01 +08:00
    @pepsin 抱歉,你看错了,里面有我。
        225
    pepsin   2016-05-03 09:22:16 +08:00
    @lianxiangru 哈哈, 看到了. 非凸优化好高端.
        226
    carlsplace   2016-05-03 09:24:02 +08:00
    Linus
        227
    asj   2016-05-03 10:29:11 +08:00
    算了,看你们吵这么 high ,认真答一下吧。比如我认为 Three.js 的设计者就是一个牛逼的程序员。
    Three.js 做了什么呢?在页面显式 3d 图像,完全不是高科技。
    更 low 的是, Three.js 甚至没有自己实现 3d 引擎什么的,只是调用 WebGL 而已。用题主的话来说,就是调用 API 什么的。

    在没有 Three.js 之前, WebGL 的 API 是这么调用的。
    ```
    // Initialize WebGL Context.
    var canvas = document.getElementById("c");
    var gl = canvas.getContext("experimental-webgl");
    gl.viewport(0, 0, 640, 480);
    gl.clearColor(0.2, 0.2, 0.2, 1.0); // Set clear color to (very) dark gray.

    // Create the 3D model, as a GL Vertex Array Buffer and a GL Index Array Buffer.
    // Vertex buffer.
    var modelVertexBuffer = gl.createBuffer();
    gl.bindBuffer(gl.ARRAY_BUFFER, modelVertexBuffer); // "Activate" buffer.
    var vertices = [
    -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0, 1.0, 1.0, -1.0, 1.0, 1.0,
    -1.0, -1.0, -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, -1.0
    ]; // A cube.
    gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW); // Copy the data into the buffer (VRAM).
    // Index buffer.
    var modelIndexBuffer = gl.createBuffer();
    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, modelIndexBuffer);
    var indices = [
    0, 1, 1, 2, 2, 3, 3, 0,
    4, 5, 5, 6, 6, 7, 7, 4,
    0, 4, 1, 5, 2, 6, 3, 7
    ];
    gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);

    // Initialize the matrices.
    var mvMatrix = mat4.create(); // Model-View.
    var pMatrix = mat4.create(); // Projection.
    mat4.perspective(30, 4.0 / 3.0, 0.1, 100.0, pMatrix);
    mat4.identity(mvMatrix);
    mat4.translate(mvMatrix, [0.0, 0.0, -7.0]);
    mat4.rotate(mvMatrix, 0.5, [1, 1, 0]);

    // Initialize the shaders.
    // Create a vertex shader.
    var vertexShader = gl.createShader(gl.VERTEX_SHADER);
    gl.shaderSource(vertexShader, document.getElementById("shader-vertex").innerHTML);
    gl.compileShader(vertexShader);

    // Create a fragment shader.
    var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
    gl.shaderSource(fragmentShader, document.getElementById("shader-fragment").innerHTML);
    gl.compileShader(fragmentShader);

    // Create a shader program using the two shaders.
    var shaderProgram = gl.createProgram();
    gl.attachShader(shaderProgram, vertexShader);
    gl.attachShader(shaderProgram, fragmentShader);
    gl.linkProgram(shaderProgram);

    // Get the attributes and uniforms from the program.
    gl.useProgram(shaderProgram);
    var vertexPositionAttr = gl.getAttribLocation(shaderProgram, "aVertexPosition");
    gl.enableVertexAttribArray(vertexPositionAttr);
    var pMatrixUniform = gl.getUniformLocation(shaderProgram, "uPMatrix");
    var mvMatrixUniform = gl.getUniformLocation(shaderProgram, "uMVMatrix");

    // Render the scene.
    // Clear the canvas and render the model.
    gl.clear(gl.COLOR_BUFFER_BIT); // Clear the scene.
    gl.bindBuffer(gl.ARRAY_BUFFER, modelVertexBuffer); // "Activate" vertex buffer.
    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, modelIndexBuffer); // "Activate" index buffer.
    gl.vertexAttribPointer(vertexPositionAttr, 3, gl.FLOAT, false, 0, 0); // Point at the vertex.
    gl.uniformMatrix4fv(pMatrixUniform, false, pMatrix); // Send the projection matrix.
    gl.uniformMatrix4fv(mvMatrixUniform, false, mvMatrix); // Send the model-view matrix.
    gl.drawElements(gl.LINES, 24, gl.UNSIGNED_SHORT, 0);

    console.log("HELLO WEBGL");

    ```
    其实 WebGL 也是从 OpenGL 抄来的,这段 API 做了什么事呢,创建了两个图形。
    Three.js 做了什么事,它还是调用了这些 API 。同样的功能,对于使用者来说是这样的。
    ```
    // Build canvas.
    var renderer = new THREE.WebGLRenderer();
    renderer.setSize(640, 480);
    document.getElementById("container").appendChild(renderer.domElement);
    // Build scene.
    var scene = new THREE.Scene();
    var camera = new THREE.PerspectiveCamera(30, 640.0 / 480.0, 0.1, 1000);
    camera.position.z = 7;
    var mesh = new THREE.Mesh(
    new THREE.BoxGeometry(2, 2, 2),
    new THREE.MeshBasicMaterial({color: 0xffffff, wireframe: true}));
    mesh.quaternion.setFromAxisAngle((new THREE.Vector3(1, 1, 0)).normalize(), 0.5);
    scene.add(mesh);
    // Render the scene.
    renderer.render(scene, camera);
    console.log("HELLO THREE.JS");
    ```
        228
    oshio   2016-05-03 10:41:21 +08:00   ♥ 1
    我觉得 lz 应该定义下什么是牛逼的程序员,至少也给出几个例子。
    我感觉你说的牛逼程序员和这个论坛的大多数理解的不是一回事。。。
    1  2  3  
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2005 人在线   最高记录 3821   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.1 · 19ms · UTC 10:56 · PVG 18:56 · LAX 02:56 · JFK 05:56
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1