Soft_Job 板


LINE

我不是要发表什麽新的观点,只是想问 mega salary 的各位几个问题。 1. 各位可能都学过 C/C++/Java/Obj-C/JS/PHP/Python/Ruby/Swift/C#, 但有人研究过像 OCaml/Prolog/Scheme&Racket/Lisp/Erlang/Haskell/Algo/Agda&Coq 之类的语言吗? 2. 如果撇开 ecosystem 的大小不论,各位心里最锺爱的语言,心里认为设计最完美的 语言是什麽呢? 3. 如果各位认为最完美的语言,是像 C/C++/Java/PHP/JS/Python/C# 这样有庞大 ecosystem 的语言,那这个问题不适合你,但如果不是,你认为为何这些语言 有那麽庞大的 ecosystem 与 API,但你的完美语言没有呢? 4. 假设,你要把你现在在使用的语言抽出一些核心元素,形成一个 subset,足以完成 你现在所做的工作,你认为至少应该要有哪些语言特性需要被抽取出来呢? 5. 补充一个,假设你已经会一个语言,Java/C#/JS/Python/C 都好,让你接触一个新 语言,解决一个原有的问题,你会怎麽思考呢? ----- 抛砖引玉,我先回答自己提出的问题: 1. 我会 Java/JS/C#,研究过 Scheme/Racket 2. 如果撇开 ecosystem 不论,我认为最好的语言是 Scheme 3. 但为何 Java/JS 的 ecosystem 却大过 Scheme 几个数量级,因为这些语言简单、 够用、最重要的是多人用。 4. 如果要把 Java 的核心元素抽离出来,能够建构现在的工作,大概需要基本的物件 导向(函式与资料抽象)、函式、资料绑定、区域变数定义与 lexical scoping、 条件判断、for 回圈、行程控制(Thread)、Reflection 机制,还有最重要的: 型别系统,这些大概可以 cover 绝大部份的工作。(补充: self-identification 应该可以算是物件导向的核心特性) 5. 现在我一边学 Python,一边写 Java,有时候要解决一些问题,用 Java 可以解, 但包成 jar 档挺麻烦,还要 compile,所以用 Python 来解,例如登入资料库,查 资料、印成网页,那我大概需要想: Python 怎麽做模组管理,引用别的模组,怎麽 做字串处理,怎麽处理资料库与 Python 之间资料型态的对应,Python 的基础资料 结构怎样操作、怎麽做 IO,怎麽跑回圈与判断逻辑。如果 HTML 比较复杂,是否要 用 Jinja 做样版引擎。最後,clean code 是共识,如何重构成清晰的代码,如何 转变语法方式,用 Python 的语言精神来诠释,如何进行测试与建置与部署。大概 如此。 ----- 我要说的是 1. 程式语言本身,目的在探讨如何表示抽象的逻辑概念,并且让电脑可以正确解读, 因此真正关键的东西,在程式语言提供了什麽特性,并用什麽样的语法来体现它, 而在它内部又是用什麽方式来实作这些特性。 2. ecosystem 大,是因为使用的人多、领域广,因此你在学那些庞大的 library 时, 究竟是在学那个领域的逻辑与知识表达方式,还是在学语言本身? 3. 如果想学一门知识就能够快速应变到其他程式语言,这门知识叫 Programming Languages,在这个世界,变化不快,现在那些很潮的语言、五花八门 的特性,很多都是从很早期的语言借去用。(真希望 Java 可以借 first-class Continuation 与 Pattern Match 来用...) 4. 如果想追求新潮的各种变化,我认为也能从 Programming Languages 这门学问中受 益,事实上,再新潮的各种开发概念,最终也需要 PL 来实现它,而常是 PL 的概 念应用而来。再者,说到应用,繁而众是必然的结果。 5. 所以我的结论是 A 与 B 是站在 either-or 的角度看事情,但工人智慧不应当如此, 或许这问题的本质,是 neither-nor,或 inclusively 6. 最後套句 Scheme 规格书开宗明义说的一句话:程式语言不应当在语言特性上叠床 架屋地堆积,而是应当致力减少缺陷,好使得加入的特性显出它的必然。 (Programming languages should be designed not by piling feature on top of feature, but by removing the weaknesses and restrictions that make additional features appear necessary.) ---- 电脑排版,手机阅读者请见谅。 ※ 引述《Sidney0503 (Sidney0503)》之铭言: : ※ 引述《dragoncfe168 (梅长苏)》之铭言: : : 请问下面两种说法,谁说得对?? : : ===================================== : : A男:程式语言虽然技术变化快,语言工具多, : :   但只要先学会一种,之後要再学会其他语言或技术是很快上手的, : :   所以根本不需要担心在职涯上,不断追着技术跑 : :   与学习各种语言会很费精力的问题! : : B男:屁啦!只会说干话!那是你自己天份高, : :   其实大部分的程式人都深陷水深火热中,OK? : :   IT知识更新远远快於一般的行业,比如内科医生, : : 他的知识大多是不变的,只不过东西很多,所以医生越老越值钱,因为经验丰富。 : : 而软体开发(尤其是C# JAVA这种高级程式语言)的知识变化极快, : : 从我上大学到现在,不到10年,C#的主推技术从Winform到WPF到UWP : : ,一套换一套,哪怕别人再怎麽说:“程式语言都是相通的”, : : 我也依然需要花大量时间精力去学习新技术! : 不管经过多久都会有人问这种菜鸟问题 : 建议去看以下几篇 : 为什麽成为一名工程师这麽难 —— 从程式新手到准工程师的必经之路 : 缩https://goo.gl/4nG6Wr : 完整https://www.inside.com.tw/2015/03/27/why-learning-to-code-is-so-damn-hard : 程式初学者的失落之钥 - “Computational Thinking” : 缩https://goo.gl/mKe1cQ : 完整https://orangeapple.co/articles/%E4%BB%80%E9%BA%BC%E6%98%AF%E9%81%8B%E7%AE%97%E6%80%9D%E7%B6%AD : AB都错 : A会那样说是因为旧语言feature和framework不多 : B会那样说是因为新语言feature和framework多到你会哭 : 软工和写程式是两回事 软工的经验可以传承 但是还是一直推翻旧的观念 : 演算法也是在慢慢演进 : 可以真只学一次的仅有纯数学(ex:二次规划 复变 离散线代) : 软体设计师也是越老越值钱的 板上大大们也是从没破百爬到年薪三百万的 --
QR Code



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.217.137.115
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1514858911.A.78D.html
1F:推 Ommm5566: 你问的问题都是没意义的 因为所有语言都是turing等价 01/02 10:41
2F:→ Ommm5566: 因为现在语言最後都是变成Von Neumann架构 所以核心就 01/02 10:43
3F:→ Ommm5566: 只有每次至多一笔资料去执行指令 01/02 10:43
4F:→ Ommm5566: 你如果要说subset那就是原本的分类像是funtional prog. 01/02 10:44
5F:→ Ommm5566: object-oriented 之类的Programming paradigms 01/02 10:45
6F:推 Ommm5566: 所以根本就不存在A语言能解的问题但B语言不能解 01/02 10:49
7F:→ fayhong: 你要这麽说真的是没错,这样 Assembly与C便统一天下了 01/02 10:50
8F:→ fayhong: 程式语言最终也是转成 machine code 执行,但它提供的抽 01/02 10:51
9F:→ fayhong: 象机制,目的我认为是要提高语言的可读性 01/02 10:51
10F:→ fayhong: 因为可读,所以可以传达,因为可以传达,所以可以合作 01/02 10:52
11F:→ fayhong: 的确不存在A语言能解,而B语言不能的问题,除非B语言的 01/02 10:53
12F:→ fayhong: 设计有本质上的问题 01/02 10:53
13F:推 lachtchlee: 板大独漏Self 01/02 12:24
14F:推 NoNameL: 的确不存在A语言能解,而B语言不能的问题 <= 我想到一种 01/02 12:26
15F:→ NoNameL: 状况,那这样是不是在努力之後,可以用javascript或是lua 01/02 12:27
16F:→ NoNameL: 之类的东西去写BIOS以及韧体之类的? 01/02 12:27
17F:→ pttworld: 脸书有社群号称js在写作业系统 01/02 13:00
18F:→ dnabossking: 抽像是抽像,可读是可读 01/02 13:02
19F:→ bcew: 只要实现组语产生器,还有各专案的变数记忆体配置表 01/02 13:07
20F:→ bcew: 高阶语言就能碰底层,但如果不是研究或好玩就没必要 01/02 13:09
21F:推 Argos: 不能因为最後都转成机器码就都说这都一样阿?不然人跟狗都 01/02 13:19
22F:→ Argos: 原子组成反正都一样 这样逻辑对吗? 01/02 13:19
23F:→ Argos: 为何要有高阶语言就是因为用低阶语言写某些东西会搞死人阿 01/02 13:20
24F:→ Argos: 不然程式语言都可以扔了大家回去组语 不然写机器码好了 XD 01/02 13:20
25F:→ Argos: 一堆程式语言和平台架构的最终目的是在做什麽?先搞清楚来 01/02 13:24
26F:→ Argos: 因为人类对於过度复杂的东西无法全面掌控 所以才使用切割并 01/02 13:25
27F:→ Argos: 且模组化的策略 高阶语言也是模组化低阶部份功能来的 真正 01/02 13:26
28F:→ Argos: 为的是简化重复出现的问题 以面对更复杂的真实世界需求 01/02 13:26
29F:→ Argos: 整个资讯技术事实上都在努力化繁为简 努力的切割模组 努力 01/02 13:27
30F:→ Argos: 的让後人不要再造轮子 难道这些都没意义? 01/02 13:27
31F:→ fayhong: 楼上所言甚是,程式语言常是为了某些领域的问题所造 01/02 13:44
32F:→ fayhong: 以减化问题的解决过程,并重复那些好的practice与paradigm 01/02 13:44
※ 编辑: fayhong (180.217.137.115), 01/02/2018 13:55:06
33F:推 stosto: 我选给我两百万年薪的工作要写的语言 01/02 14:09
34F:→ freeunixer: 用 C 刻个 web framework,就能丢掉 ror, node 了(~误 01/02 14:41
35F:→ robber1234: 还好你没提到Scala 不然先嘘再说 01/02 15:02
36F:→ fayhong: 糟,我竟压根地把它忘了..... 01/02 15:35
37F:→ Argos: 其实除了切割模组外 黑暗面是商业考量 甚至我觉得商业考量 01/02 17:55
38F:→ Argos: 的影响还多过於业界真正想解决问题呢 XDDD 01/02 17:56
39F:推 youngce: R大这麽讨厌scala哦 01/02 18:48
40F:推 xxxorc: 我在刚转行时也觉得scheme很棒,学这个才是cs正统 01/02 20:23
41F:→ xxxorc: 但现在只求做出有那麽一点点价值的产品就好 01/02 20:24
42F:→ xxxorc: 成功或淘汰都是有历史因素 就跟人类文明一样 01/02 20:25
43F:→ xxxorc: 而且要比简单 R5RS 应该没人比得过吧 01/02 20:26
44F:→ fayhong: 我现在只希望能用一个没那麽多弱点,但可能特性也不多的 01/02 21:24
45F:→ fayhong: 语言,能够搭建出具有时间价值的东西,Java 有很多 3rd 01/02 21:24
46F:→ fayhong: party 的东西,ecosystem 极为庞大,虽然用起来很方便, 01/02 21:25
47F:→ fayhong: 但我更希望能够慢慢地自己能建构更深的东西, 01/02 21:26
48F:→ fayhong: 用更简洁的方法来做事,Scheme、Haskell、OCaml都是很值 01/02 21:27
49F:→ fayhong: 得一学的语言,不一定能用在真实场景,有时候是因为旁边 01/02 21:28
50F:→ fayhong: 的人没办法接受太跳tone的语法,但真的可以重新建构写 01/02 21:28
51F:→ fayhong: 程式的观点 01/02 21:29
52F:推 cybermeow: 推OCaml Haskell 01/02 21:40
53F:→ cybermeow: 不过最近也蛮喜欢Rust的 01/02 21:47
54F:推 genius945: 推这篇,感谢原po的分享 01/03 00:41
55F:推 kaifrankwind: 第6点那句话最後翻得不太对 没有"好使得" 就只是移 01/03 01:00
56F:→ kaifrankwind: 减少看似需要加入新特性才能弥补短处的缺陷 01/03 01:03
57F:推 changyuheng: 最後一句翻得怪怪的。原意白话是:语言设计的考量点 01/03 02:03
58F:→ changyuheng: 不该是如何在既有特性上追加更多能力,而是要反其道 01/03 02:03
59F:→ changyuheng: 而行——移除那些造成要追加功能才能使语言更加完善 01/03 02:03
60F:→ changyuheng: 的弱点和限制。 01/03 02:03
61F:推 cobrasgo: 跟大家讲个翻译的观念,不要局限在原本的句子而是要把 01/03 07:31
62F:→ cobrasgo: 它的意义翻出来。 01/03 07:31
63F:推 cobrasgo: 若设计的语言存在不足与缺陷,我们该做的是移除这些缺 01/03 07:36
64F:→ cobrasgo: 陷而不是新增功能来弥补这些缺陷 01/03 07:36
65F:→ fayhong: 谢谢楼上的修正,我一直不知道怎麽翻比较正确.... 01/03 07:43







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP