Re: [請益] 程式語言的學習 誰的說法正確???????
我不是要發表什麼新的觀點,只是想問 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://www.ptt.cc/bbs/Soft_Job/M.1514858911.A.78D.html
推
01/02 10:41,
6年前
, 1F
01/02 10:41, 1F
→
01/02 10:43,
6年前
, 2F
01/02 10:43, 2F
→
01/02 10:43,
6年前
, 3F
01/02 10:43, 3F
→
01/02 10:44,
6年前
, 4F
01/02 10:44, 4F
→
01/02 10:45,
6年前
, 5F
01/02 10:45, 5F
推
01/02 10:49,
6年前
, 6F
01/02 10:49, 6F
→
01/02 10:50,
6年前
, 7F
01/02 10:50, 7F
→
01/02 10:51,
6年前
, 8F
01/02 10:51, 8F
→
01/02 10:51,
6年前
, 9F
01/02 10:51, 9F
→
01/02 10:52,
6年前
, 10F
01/02 10:52, 10F
→
01/02 10:53,
6年前
, 11F
01/02 10:53, 11F
→
01/02 10:53,
6年前
, 12F
01/02 10:53, 12F
推
01/02 12:24,
6年前
, 13F
01/02 12:24, 13F
推
01/02 12:26,
6年前
, 14F
01/02 12:26, 14F
→
01/02 12:27,
6年前
, 15F
01/02 12:27, 15F
→
01/02 12:27,
6年前
, 16F
01/02 12:27, 16F
→
01/02 13:00,
6年前
, 17F
01/02 13:00, 17F
→
01/02 13:02,
6年前
, 18F
01/02 13:02, 18F
→
01/02 13:07,
6年前
, 19F
01/02 13:07, 19F
→
01/02 13:09,
6年前
, 20F
01/02 13:09, 20F
推
01/02 13:19,
6年前
, 21F
01/02 13:19, 21F
→
01/02 13:19,
6年前
, 22F
01/02 13:19, 22F
→
01/02 13:20,
6年前
, 23F
01/02 13:20, 23F
→
01/02 13:20,
6年前
, 24F
01/02 13:20, 24F
→
01/02 13:24,
6年前
, 25F
01/02 13:24, 25F
→
01/02 13:25,
6年前
, 26F
01/02 13:25, 26F
→
01/02 13:26,
6年前
, 27F
01/02 13:26, 27F
→
01/02 13:26,
6年前
, 28F
01/02 13:26, 28F
→
01/02 13:27,
6年前
, 29F
01/02 13:27, 29F
→
01/02 13:27,
6年前
, 30F
01/02 13:27, 30F
→
01/02 13:44,
6年前
, 31F
01/02 13:44, 31F
→
01/02 13:44,
6年前
, 32F
01/02 13:44, 32F
※ 編輯: fayhong (180.217.137.115), 01/02/2018 13:55:06
推
01/02 14:09,
6年前
, 33F
01/02 14:09, 33F
→
01/02 14:41,
6年前
, 34F
01/02 14:41, 34F
→
01/02 15:02,
6年前
, 35F
01/02 15:02, 35F
→
01/02 15:35,
6年前
, 36F
01/02 15:35, 36F
→
01/02 17:55,
6年前
, 37F
01/02 17:55, 37F
→
01/02 17:56,
6年前
, 38F
01/02 17:56, 38F
推
01/02 18:48,
6年前
, 39F
01/02 18:48, 39F
推
01/02 20:23,
6年前
, 40F
01/02 20:23, 40F
→
01/02 20:24,
6年前
, 41F
01/02 20:24, 41F
→
01/02 20:25,
6年前
, 42F
01/02 20:25, 42F
→
01/02 20:26,
6年前
, 43F
01/02 20:26, 43F
→
01/02 21:24,
6年前
, 44F
01/02 21:24, 44F
→
01/02 21:24,
6年前
, 45F
01/02 21:24, 45F
→
01/02 21:25,
6年前
, 46F
01/02 21:25, 46F
→
01/02 21:26,
6年前
, 47F
01/02 21:26, 47F
→
01/02 21:27,
6年前
, 48F
01/02 21:27, 48F
→
01/02 21:28,
6年前
, 49F
01/02 21:28, 49F
→
01/02 21:28,
6年前
, 50F
01/02 21:28, 50F
→
01/02 21:29,
6年前
, 51F
01/02 21:29, 51F
推
01/02 21:40,
6年前
, 52F
01/02 21:40, 52F
→
01/02 21:47,
6年前
, 53F
01/02 21:47, 53F
推
01/03 00:41,
6年前
, 54F
01/03 00:41, 54F
推
01/03 01:00,
6年前
, 55F
01/03 01:00, 55F
→
01/03 01:03,
6年前
, 56F
01/03 01:03, 56F
推
01/03 02:03,
6年前
, 57F
01/03 02:03, 57F
→
01/03 02:03,
6年前
, 58F
01/03 02:03, 58F
→
01/03 02:03,
6年前
, 59F
01/03 02:03, 59F
→
01/03 02:03,
6年前
, 60F
01/03 02:03, 60F
推
01/03 07:31,
6年前
, 61F
01/03 07:31, 61F
→
01/03 07:31,
6年前
, 62F
01/03 07:31, 62F
推
01/03 07:36,
6年前
, 63F
01/03 07:36, 63F
→
01/03 07:36,
6年前
, 64F
01/03 07:36, 64F
→
01/03 07:43,
6年前
, 65F
01/03 07:43, 65F
討論串 (同標題文章)
完整討論串 (本文為第 6 之 7 篇):