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:二次規劃 複變 離散線代) : 軟體設計師也是越老越值錢的 板上大大們也是從沒破百爬到年薪三百萬的 --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.137.115
※ 文章網址: https://webptt.com/m.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燈, 水草

請輸入看板名稱,例如:WOW 或 站內搜尋

TOP