📜 [專欄新文章] ZKP 與智能合約的開發入門
✍️ Johnson
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
這篇文章將以程式碼範例,說明 Zero Knowledge Proofs 與智能合約的結合,能夠為以太坊的生態系帶來什麼創新的應用。
本文為 Tornado Cash 研究系列的 Part 2,本系列以 tornado-core 為教材,學習開發 ZKP 的應用,另兩篇為:
Part 1:Merkle Tree in JavaScript
Part 3:Tornado Cash 實例解析
Special thanks to C.C. Liang for review and enlightenment.
近十年來最強大的密碼學科技可能就是零知識證明,或稱 zk-SNARKs (zero knowledge succinct arguments of knowledge)。
zk-SNARKs 可以將某個能得出特定結果 (output) 的計算過程 (computation),產出一個證明,而儘管計算過程可能非常耗時,這個證明卻可以快速的被驗證。
此外,零知識證明的額外特色是:你可以在不告訴對方輸入值 (input) 的情況下,證明你確實經過了某個計算過程並得到了結果。
上述來自 Vitalik’s An approximate introduction to how zk-SNARKs are possible 文章的首段,該文說是給具有 “medium level” 數學程度的人解釋 zk-SNARKs 的運作原理。(可惜我還是看不懂 QQ)
本文則是從零知識證明 (ZKP) 應用開發的角度,結合電路 (circuit) 與智能合約的程式碼來說明 ZKP 可以為既有的以太坊智能合約帶來什麼創新的突破。
基本上可以謹記兩點 ZKP 帶來的效果:
1. 擴容:鏈下計算的功能。
2. 隱私:隱藏秘密的功能。
WithoutZK.sol
首先,讓我們先來看一段沒有任何 ZKP 的智能合約:
這份合約的主軸在 process(),我們向它輸入一個秘密值 secret,經過一段計算過程後會與 answer 比對,如果驗證成功就會改寫變數 greeting 為 “answer to the ultimate question of life, the universe, and everything”。
Computation
而計算過程是一個簡單的函式:f(x) = x**2 + 6。
我們可以輕易推出秘密就是 42。
這個計算過程有很多可能的輸入值 (input) 與輸出值 (output):
f(2) = 10
f(3) = 15
f(4) = 22
…
但是能通過驗證的只有當輸出值和我們存放在合約的資料 answer 一樣時,才會驗證成功,並執行 process 的動作。
可以看到有一個 calculate 函式,說明這份合約在鏈上進行的計算,以及 process 需要輸入參數 _secret,而我們知道合約上所有交易都是公開的,所以這個 _secret 可以輕易在 etherscan 上被看到。
從這個簡單的合約中我們看到 ZKP 可以解決的兩個痛點:鏈下計算與隱藏秘密。
Circuits
接下來我們就改寫這份合約,加入 ZKP 的電路語言 circom,使用者就能用他的 secret 在鏈下進行計算後產生一個 proof,這 proof 就不會揭露有關 secret 的資訊,同時證明了當 secret 丟入 f(x) = x**2 + 6 的計算過程後會得出 1770 的結果 (output),把這個 proof 丟入 process 的參數中,經過 Verifier 的驗證即可執行 process 的內容。
有關電路 circuits 的環境配置,可以參考 ZKP Hello World,這裡我們就先跳過去,直接來看 circom 的程式碼:
template Square() { signal input in; signal output out; out <== in * in;}template Add() { signal input in; signal output out; out <== in + 6;}template Calculator() { signal private input secret; signal output out; component square = Square(); component add = Add(); square.in <== secret; add.in <== square.out; out <== add.out;}component main = Calculator();
這段就是 f(x) = x**2 + 6 在 circom 上的寫法,可能需要時間去感受一下。
ZK.sol
circom 寫好後,可以產生一個 Verifier.sol 的合約,這個合約會有一個函式 verifyProof,於是我們把上方的合約改寫成使用 ZKP 的樣子:
我們可以發現 ZK 合約少了 calculate 函式,顯然 f(x) = x**2 + 6 已經被我們寫到電路上了。
snarkjs
產生證明的程式碼以 javascript 寫成如下:
let { proof, publicSignals } = await groth16.fullProve(input, wasmPath, zkeyPath);
於是提交 proof 給合約,完成驗證,達到所謂鏈下計算的功能。
最後讓我們完整看一段 javascript 的單元測試,使用 snarkjs 來產生證明,對合約的 process 進行測試:
對合約來說, secret = 42 是完全不知情的,因此隱藏了秘密。
publicSignals
之前不太清楚 publicSignals 的用意,因此在這裡特別說明一下。
基本上在產生證明的同時,也會隨帶產生這個 circom 所有的 public 值,也就是 publicSignals,如下:
let { proof, publicSignals } = await groth16.fullProve(input, wasmPath, zkeyPath);
在我們的例子中 publicSignals 只有一個,就是 1770。
而 verifyProof 要輸入的參數除了 proof 之外,也要填入 public 值,簡單來說會是:
const isValid = verifyProof(proof, publicSignals);
問題來了,我們在設計應用邏輯時,當使用者要提交參數進行驗證的時候,publicSignals 會是由「使用者」填入嗎?或者是說,儘管是使用者填入,那它需不需要先經過檢查,才可以填入 verifyProof?
關鍵在於我們的合約上存有一筆資料:answer = 1770
回頭看合約上的 process 在進行 verifyProof 之前,必須要檢查 isAnswer(publicSignals[0]):
想想要是沒有檢查 isAnswer,這份合約會發生什麼事情?
我們的應用邏輯就會變得毫無意義,因為少了要驗證的答案,就只是完成計算 f(42) = 1770,那麼不論是 f(1) = 7 或 f(2) = 10,使用者都可以自己產生證明與結果,自己把 proof 和 publicSignals 填入 verifyProof 的參數中,都會通過驗證。
至此可以看出,ZKP 只有把「計算過程」抽離到鏈下的電路,計算後的結果仍需要與鏈上既有的資料進行比對與確認後,才能算是有效的應用 ZKP。
應用邏輯的開發
本文主要談到的是 zk-SNARKs 上層應用邏輯的開發,關於 ZKP 的底層邏輯如上述使用的 groth16 或其他如 plonk 是本文打算忽略掉的部分。
從上述的例子可以看到,即使我們努力用 circom 實作藏住 secret,但由於計算過程太過簡單,只有 f(x) = x**2+6,輕易就能從 answer 反推出我們的 secret 是 42,因此在應用邏輯的開發上,也必須注意 circom 的設計可能出了問題,導致私密訊息容易外洩,那儘管使用再強的 ZKP 底層邏輯,在應用邏輯上有漏洞,也沒辦法達到隱藏秘密的效果。
此外,在看 circom 的程式碼時,可以關注最後一個 template 的 private 與 public 值分別是什麼。以本文的 Calculator 為例,private 值有 secret,public 值有 out。
另外補充:
如果有個 signal input 但它不是 private input,就會被歸類為 public。
一個 circuit 至少會有一個 public,因為計算過程一定會有一個結果。
最後,在開發的過程中我會用 javascript 先實作計算過程,也可以順便產出 input.json,然後再用 circom 語言把計算過程實現,產生 proof 和 public 後,再去對照所有 public 值和 private 值,確認是不是符合電路計算後所要的結果,也就是比較 javascript 算出來的和 circom 算出來的一不一樣,如果不一樣就能確定程式碼是有 bug 的。
參考範例:https://github.com/chnejohnson/circom-playground
總結
本文的程式碼展現 ZKP 可以做到鏈下計算與隱藏秘密的功能,在真實專案中,可想而知電路的計算過程不會這麼單純。
會出現在真實專案中的計算像是 hash function,複雜一點會加入 Merkle Tree,或是電子簽章 EdDSA,於是就能產生更完整的應用如 Layer 2 擴容方案之一的 ZK Rollup,或是做到匿名交易的 Tornado Cash。
本文原始碼:https://github.com/chnejohnson/mini-zkp
下篇文章就來分享 Tornado Cash 是如何利用 ZKP 達成匿名交易的!
參考資料
概念介紹
Cryptography Playground
zk-SNARKs-Explainer
神奇的零知識證明!既能保守秘密,又讓別人信你!
認識零知識證明 — COSCUP 2019 | Youtube
應用零知識證明 — COSCUP 2020 | Youtube
ZK Rollup
動手實做零知識 — circom — Kimi
ZK-Rollup 开发经验分享 Part I — Fluidex
ZkRollup Tutorial
ZK Rollup & Optimistic Rollup — Kimi Wu | Medium
Circom
circom/TUTORIAL.md at master · iden3/circom · GitHub
ZKP Hello World
其他
深入瞭解 zk-SNARKs
瞭解神秘的 ZK-STARKs
zk-SNARKs和zk-STARKs解釋 | Binance Academy
[ZKP 讀書會] MACI
Semaphore
Zero-knowledge Virtual Machines, the Polaris License, and Vendor Lock-in | by Koh Wei Jie
Introduction & Evolution of ZK Ecosystem — YouTube
The Limitations of Privacy — Barry Whitehat — YouTube
Introduction to Zero Knowledge Proofs — Elena Nadolinski
ZKP 與智能合約的開發入門 was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
同時也有2部Youtube影片,追蹤數超過7萬的網紅在地上滾的工程師 Nic,也在其Youtube影片中提到,## 影片觀看說明 由於問題較多,大家的問題也可能是你的問題,建議可以先閱讀下方的「問題總匯」區,找到時間碼 Time code 之後跳轉到自己想聽的部分,會比較有效率哦 本影片 Q&A 留言是抓取 【2020 年度回顧! 成為 Team leader? 業外收入增加? 技術能力成長? (第一...
「javascript hello world」的推薦目錄:
javascript hello world 在 BorntoDev Facebook 的最讚貼文
☕ CoffeeScript เป็นภาษาขนาดเล็กที่ Compile เป็น JavaScript สร้างขึ้นเมื่อปี 2009 เพื่อลบจุดด้อยของ JavaScript มี Syntax ที่ง่ายต่อการเรียนรู้มากกว่า JavaScript ช่วยให้เราเขียน JavaScript สั้นลง ดูแลได้ง่ายนั่นเอง !!
.
👨💻 การใช้งานเบื้องต้น
ก่อนอื่นจำเป็นต้องมี Node.js และ NPM ก่อนนะ และเริ่มต้นเขียนคำสั่งตามด้านล่างเลยจ้า
.
คำสั่ง
# Install locally for a project:
npm install --save-dev coffeescript
.
# Install globally to execute .coffee files anywhere:
npm install --global coffeescript
.
จากนั้นทำการเปิดใช้งาน CoffeeScript Library
coffee -c filename.coffee
.
ทดลองพิมพ์คำสั่ง
.
console.log "Hello world"
.
จะเห็นได้ว่า CoffeeScript มันไม่ต้องใส่วงเล็บ ก็สามารถรันโค้ดได้
.
🔎 มาดูข้อดีของ CoffeeScript กันดีกว่า
.
⭐ เข้าใจง่าย - เพราะ Syntax ของเจ้า CoffeeScript จะเน้นเขียนง่าย ทำให้จัดเรียงโค้ดได้สะอาดตา และทำให้เราเข้าใจได้ง่าย
.
⭐ ไม่ต้องใช้ var - ไม่ต้องประกาศ var ก่อนตัวแปร มันจะช่วยหลีกเลี่ยงปัญหาขอบเขตของตัวแปรได้
.
⭐ หมดปัญหาเรื่องลืม Symbol - เพราะ CoffeeScript ไม่ต้องใส่ Symbol เช่น () หรือ ; ต่อท้ายเลย ซึ่งเราจะใช้การเว้นวรรคแบ่งการทำงานของแต่ละฟังก์ชันแทน คล้ายๆ กับใน Python นั่นแหละ
.
⭐ Less Code - บรรทัดของโค้ดจะลดน้อยลง ซึ่งมันจะช่วยลดความซับซ้อนของโปรแกรมนั่นเอง
.
⭐ ดูแลง่าย - การที่มันเขียนง่าย เข้าใจง่าย มันจึงทำให้เราสามารถแก้ไขโค้ดได้ง่ายนั่นเอง
.
🌈 ทำไมถึงได้รับความนิยมน้อยลง ??
.
ด้วยการเกิดของ ES6 ในปี 2015 ซึ่งทำให้ลบจุดด้อยของ JavaScript ไปได้เยอะ และยังเพิ่มประสิทธิภาพของ JavaScript ไปได้อีกด้วย แถมยังมี Community ที่ใหญ่มากขึ้นด้วย อีกทั้ง TypeScript ก็ถูกพัฒนาเป็นภาษามาตรฐาน และมีประสิทธิภาพด้วยเช่นกัน ทำให้เจ้าใหญ่ๆ เช่น Angular ใช้ TypeScript ในการพัฒนาเป็นหลัก จนทำให้ทุกวันนี้ CoffeeScript ลดความนิยมไปอย่างมากนั่นเอง
.
borntoDev - 🦖 สร้างการเรียนรู้ที่ดีสำหรับสายไอทีในทุกวัน
javascript hello world 在 BorntoDev Facebook 的精選貼文
🎂🦖 สุขสันต์วันเกิด DevLab ! 🖥✨ครบรอบ 1 ปีแล้วนะ รู้ยัง !? กับระบบช่วยฝึกฝนทักษะการเขียนโปรแกรมของคุณ ให้เก่งขึ้นทันตา !!
.
( ถ้าอยากรู้ว่า DevLab คืออะไร ลองกดเข้า Link นี้เลย !
https://www.borntodev.com/grader_q_list/?course=free )
.
เผลอแปปเดียว DevLab เว็บฝึกฝนทักษะการทำโจทย์ด้าน Programming จากทาง borntoDev ของเราก็มีอายุครบ 1 ขวบแล้ว !!! ซึ่งถือว่าเป็นช่วงเวลา 1 ปีที่มีค่าและแสนสนุก วันนี้แอดเลยรวบรวมสถิติที่น่าสนใจมาให้ทุกคนได้อ่านกัน ถ้าพร้อมแล้วก็ไปดูกันเลย !
.
1
เริ่มต้นที่สถิติเกี่ยวกับการรันโค้ด
ซึ่ง DevLab ของเราเป็นเว็บฝึกเขียนโค้ดที่รันปุ๊บ แสดงผลลัพธ์ปั๊บ รู้เลยว่าผ่านหรือไม่ผ่าน แบบไม่ต้องรอนานด้วยนะ !
.
🙏 “ขอบคุณทุกการมีส่วนร่วมของทุกๆ คน”
DevLab ของเรามีการรันที่ถูกเก็บทั้งหมด 346,928 ครั้ง
.
👍 “โค้ดอันสมบูรณ์แบบ”
DevLab ของเรามีการรันที่ผ่านหมดทุกเทสเคส 60,644 ครั้ง
.
💪 “มีความตั้งใจแต่ก็ต้องพยายามขึ้นอีก สู้ๆ นะ !”
DevLab ของเรามีการรันที่มีทั้งผ่านและไม่ผ่านปนกัน 52,091 ครั้ง
.
🏃 “สุดยอดนักรัน 2020-2021”
ชาว DevLab เป็นนักรันโค้ดมือฉมังกันหลายคนเลย โดยแอดยกมา 3 อันดับที่มากที่สุด ก็คือ
.
🥇อันดับที่ 1 : คนที่มีจำนวนการรันมากที่สุด รันไปถึง 5,593 ครั้ง
🥈อันดับที่ 2 : รองลงมากับการรัน 2,888 ครั้ง
🥉อันดับที่ 3 : ปิดท้ายด้วยการรันแบบรัว ๆ ถึง 2,757 ครั้ง
.
😰 “อย่าเพิ่งยอมแพ้นะ”
DevLab ของเรามีคนที่รันไปแค่ครั้งเดียวแล้วไม่รันอีกเลย 448 คน
.
👁 “แค่ดูก็รู้คำตอบแล้ว !”
DevLab ของเรามีบุคคลผู้ที่รันครั้งเดียวแล้วผ่านทุกเทสเคสเยอะที่สุดเป็นจำนวน 101 ข้อ เรียกได้ว่าเทพจริง ๆ เขียนเสร็จ รันปุ๊บ ผ่านปั๊บ !
.
📈 “ยาวอีก ยาวขึ้นอีก !”
จำนวนบรรทัดของโค้ดทั้งหมดในระบบ DevLab ของเรา คือ 4,411,014 บรรทัด คิดเป็น 10.5 เท่าของไฟล์ทั้งหมดใน Github Repository ของ React เลยนะ !!!
.
.
2
หัวข้อต่อไป
เป็นสถิติที่เกี่ยวกับช่วงเวลากันบ้าง !
.
⏰ “สนุกสนานกับช่วงเวลาโบนัส !”
ช่วงเวลาที่มีคนรันเยอะที่สุดคือ 14.00 - 16.00 เฉลี่ย 66 ครั้ง/ชั่วโมง
แต่จริง ๆ แล้ว DevLab ของเราสามารถรันได้ทุกที่ทุกเวลาแบบ 24/7 ไม่ต้องรอช่วงพีค ก็เข้ามารันโค้ดกันได้ตลอดเลยนะรู้ยัง !
.
📆 “คอมมูนิตี้เล็ก ๆ ที่แข็งแกร่ง”
เดือนที่มีคนใช้งานเยอะที่สุดคือ เมษายน 2020 (เดือนที่เปิดตัวนั่นเอง) จำนวน 1,185 คน หลังจากนั้นก็มีผู้ใช้เฉลี่ยเดือนละ 599 คนจ้า สำหรับ ใครที่ยังไม่เคยใช้ก็เข้ามาลองใช้กันได้นะ เข้ามาหัดเขียนโค้ดกันเยอะ ๆ พัฒนาฝีมือไปด้วยกัน !
.
.
3
มาที่สถิติเกี่ยวกับโจทย์กันบ้าง
ไม่ว่าจะเป็นโจทย์ Official จากแอดมิน หรือโจทย์จากทางบ้าน ทาง DevLab มีโจทย์สนุก ๆ รอให้ทุกคนมาลองทำมากกว่า 100 ข้อ แถมยังสามารถสร้างโจทย์เอง เพื่อชวนเพื่อน ๆ มาเขียนโค้ดด้วยกันได้ด้วยนะ !
.
🎄 “รอต้นคริสมาสต์แปปนึงนะคุณซานต้า”
จำนวนตัวอักษรที่มากที่สุดที่ใช้ในโค้ดของการรัน 1 ครั้งที่ผ่านทุกเทสเคส คือ 13,916 ตัวอักษร โดยใช้ในการส่งข้อ ต้นคริสมาสต์ ที่เขียนด้วยภาษา Java
ลองทำที่นี่ : https://www.borntodev.com/grader/?quizNo=215
.
🇪🇬 “กีซ่าก็กีซ่าเถอะ รอดูของชั้นก่อน !”
มีคนๆ นึงรันโจทย์ข้อเดิมมากที่สุดคือข้อ พีระมิดไม่ได้สร้างได้ในวันเดียว โดยถูกรันไปถึง 847 ครั้ง
ลองทำที่นี่ : https://www.borntodev.com/grader/?quizNo=26
.
⚡ “โจทย์ของนายน่ะชั้นจะต้องผ่านมันไปให้ได้ !”
โจทย์ที่มีการรันมากที่สุดคือข้อ รวมประโยคภาษาอังกฤษ โดยมีจำนวนการรัน 2,869 ครั้ง
ลองทำที่นี่ : https://www.borntodev.com/grader/?quizNo=307
.
🍌 “ของกล้วย ๆ มียากกว่านี้อีกมั้ย ?”
โจทย์ที่มีการรันผ่านมากที่สุดคือข้อ Modulus plus loop (Triangle) โดยมีจำนวนการรันที่เคยรันผ่านทั้งหมด 314 ครั้ง
ลองทำที่นี่ : https://www.borntodev.com/grader/?quizNo=344
.
🔥 “ความพยายามอยู่ที่ไหน ความสำเร็จอยู่ที่นั่น !”
โจทย์ที่มีการรันไม่ผ่านมากที่สุดคือข้อ รวมประโยคภาษาอังกฤษ มีจำนวนการรัน 2,792 ครั้ง แต่ใครที่ยังไม่ผ่านก็อย่าเพิ่งยอมแพ้ ! มันต้องมีสักครั้งสิน่า !!!
ลองทำที่นี่ : https://www.borntodev.com/grader/?quizNo=307
.
🗒 “หารกันต่อยาวๆ ไป”
โจทย์ 1 ดาวยอดนิยมคือข้อ หารลงตัว โดยมีจำนวนการรัน 2,745 ครั้ง
ลองทำที่นี่ : https://www.borntodev.com/grader/?quizNo=356
.
🤖 “Recaptcha ใจเย็นๆ นี่คนเอง ไม่ใช่บอท”
โจทย์ 2 ดาวยอดนิยมคือข้อ Register & Login โดยมีจำนวนการรัน 1,842 ครั้ง
ลองทำที่นี่ : https://www.borntodev.com/grader/?quizNo=316
.
💻 “101001101011001101 ปี๊บๆๆ”
โจทย์ 3 ดาวยอดนิยมคือข้อ Binary Generator โดยมีจำนวนการรัน 659 ครั้ง
ลองทำที่นี่ : https://www.borntodev.com/grader/?quizNo=347
.
🙋♀️ “Hello how r u 2day ?”
โจทย์ 4 ดาวยอดนิยมคือข้อ รวมประโยคภาษาอังกฤษ โดยมีจำนวนการรัน 2,869 ครั้ง
ลองทำที่นี่ : https://www.borntodev.com/grader/?quizNo=307
.
.
4
ปิดท้ายเรื่องโจทย์
ด้วยสถิติของโจทย์ข้อ Hello World !
.
👋 “สวัสดีชาวโลก !”
DevLab ของเรามีจำนวนการรันข้อ Hello World ไปทั้งหมด 15,181 ครั้งแล้ว !!!
.
🗣 “ฮัลโหลชาวโลก นายได้ยินเรามั้ย ?”
รู้หรือไม่ !?! มีคนที่เคยรันโจทย์ Hello World ไม่ผ่านถึง 2,322 คนเลยนะ !
.
🌎 “เฮ้ ชาวโลกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกกก !”
ยาวย๊าวยาวเลยทีเดียวสำหรับสถิติข้อนี้ เพราะมีการรันที่ใช้จำนวนตัวอักษรมากที่สุดในข้อ Hello World ผ่านด้วยภาษา java ด้วยโค้ดขนาด 504 ตัวอักษร...ว่าแล้วก็อยากเห็นโค้ดเลยนะเนี่ย !
.
.
5
และหัวข้อสุดท้ายของวันนี้
เกี่ยวกับสถิติการรันของแต่ละภาษา
โดย DevLab รองรับภาษาโปรแกรมเบื้องต้น ทั้ง Python, C, Java, JavaScript และ C++ แถมล่าสุดยังมี C#, go, Kotlin และ Ruby มาเสริมทัพเพิ่มอีก บอกเลยว่าเลือกเขียนได้ตามความถนัด แถมยังเลือกเปลี่ยนภาษาได้สะดวกสุดๆ ไปเลย !
.
🐍 “ภาษา Python”
มีจำนวนผู้ใช้ 4,239 คน ; จำนวนการรัน 227,718 ครั้ง ; อัตราการผ่าน 17.22% ; จำนวนตัวอักษรเฉลี่ยในการรันผ่าน 159 ตัวอักษร
.
💧 “ภาษา C”
มีจำนวนผู้ใช้ 1,423 คน ; จำนวนการรัน 41,797 ครั้ง ; อัตราการผ่าน 19.81% ; จำนวนตัวอักษรเฉลี่ยในการรันผ่าน 272 ตัวอักษร
.
☕ “ภาษา Java”
มีจำนวนผู้ใช้ 1,130 คน ; จำนวนการรัน 42,218 ครั้ง ; อัตราการผ่าน 18.81% ; จำนวนตัวอักษรเฉลี่ยในการรันผ่าน 507 ตัวอักษร
.
⭐ “ภาษา Javascript”
มีจำนวนผู้ใช้ 620 คน ; จำนวนการรัน 20,551 ครั้ง ; อัตราการผ่าน 9.94% ; จำนวนตัวอักษรเฉลี่ยในการรันผ่าน 434 ตัวอักษร
.
💙 “ภาษา C++”
มีจำนวนผู้ใช้ 515 คน ; จำนวนการรัน 13,764 ครั้ง ; อัตราการผ่าน 21.41 ; จำนวนตัวอักษรเฉลี่ยในการรันผ่าน 318 ตัวอักษร
.
💜 “ภาษา C#”
มีจำนวนผู้ใช้ 19 คน ; จำนวนการรัน 762 ครั้ง ; อัตราการผ่าน 15.49% ; จำนวนตัวอักษรเฉลี่ยในการรันผ่าน 566 ตัวอักษร
.
🐭 “ภาษา go”
มีจำนวนผู้ใช้ 5 คน ; จำนวนการรัน 72 ครั้ง ; อัตราการผ่าน 2.78% ; จำนวนตัวอักษรเฉลี่ยในการรันผ่าน 705 ตัวอักษร
.
🤖 “ภาษา Kotlin”
มีจำนวนผู้ใช้ 4 คน ; จำนวนการรัน 44 ครั้ง ; อัตราการผ่าน 34.1% ; จำนวนตัวอักษรเฉลี่ยในการรันผ่าน 604 ตัวอักษร
.
💎 “ภาษา Ruby”
มีจำนวนผู้ใช้ 1 คน ; จำนวนการรัน 2 ครั้ง ; อัตราการผ่าน 0% ; ยังไม่มีข้อมูลจำนวนตัวอักษรเฉลี่ยในการรันผ่าน
.
.
ก่อนจะจากกันไปก็เช่นเคย ใครที่กำลังมองหาเว็บไซต์สำหรับหัดเขียนโปรแกรม ที่ทั้งสะดวก สนุก แถมยังสร้างโจทย์เข้าระบบเองได้ และอยากจะเข้าไปลองฝึกฝีมือใน DevLab ก็ไปที่เว็บนี้ได้เลยนะ !!!
.
Click Here สมัครวันนี้ ใช้งานฟรี กับโจย์กว่า 100 ข้อที่รอเราอยู่ <3 >>> https://www.borntodev.com/grader_q_list/?course=free
.
ปล ท่านใดอยากได้ฟีเจอร์อะไรอีก บอกแอดมาได้เลย ! แอดยินดีรับฟังคร้าบบบ 5555 :D
.
borntoDev - สร้างการเรียนรู้ที่ดีสำหรับสายไอทีในทุกวัน
javascript hello world 在 在地上滾的工程師 Nic Youtube 的最佳解答
## 影片觀看說明
由於問題較多,大家的問題也可能是你的問題,建議可以先閱讀下方的「問題總匯」區,找到時間碼 Time code 之後跳轉到自己想聽的部分,會比較有效率哦
本影片 Q&A 留言是抓取
【2020 年度回顧! 成為 Team leader? 業外收入增加? 技術能力成長? (第一次蒐集 Q&A)】https://youtu.be/BGaDN9wxbKE
## 影片中提到的專案
簡單用 React 撰寫的留言爬取篩選功能,可以自己抓去玩
https://github.com/niclin/youtube-comment-filter
## 問題總匯
00:00 開場
01:26 QA-1 - 林天寸
一直很喜歡妳的頻道,不單單是因為工程師,當然也有部分原因是自己也是走工程師這條路的。
前一年2020年開始,其實是我剛轉職工程師的第一年,在滿多地方都遇到不小的問題,在troubleshooting上面也是有許多瓶頸的。
後來除了白天上班,下班看書跟休息,偶然間看到你的影片[工程師如何自我進修],才開始慢慢用計畫的方式取代橫衝猛幹。
不得不說,規劃時間真的是比起技術性的功力還更有成效。因為它讓你適時的放鬆跟加強,然後在工作上面才更有長進,雖然很幹話,但我2020的下半年是這樣做的。
目前在準備考取網路管理的證照CCNA,計畫是走network這一塊,還有很多要磨練的。希望也能多看你產出跟network的影片,這是私心話啦,哈哈。
02:57 QA-2 - 仔仔
1.學程式會建議從前端或是後端哪個開始學會比較好?
2.一開始投履歷如何判斷一家公司是可以成長的,而不是進去3,5年後還是那個跟剛進去程度相差不遠的自己差不多
3.跟程式相關的產業有很多(像是製造業到博弈),可以請Nic分析一下各產業的狀況嗎?以及進去各產業前須要具備哪些程式語言或能力?
4.投履歷時看到一些公司列出所需程式語言和工具一大堆,是不是代表你沒完全具備就不要投履歷了,還是可以請Nic給個意見哪些部分還是可以投看看
5.都說工程師又宅又不會說話,為什麼Nic可以交到女朋友?
10:40 QA-3 - ANDREW NG KAR EARN
如果当写编程语言遇到瓶颈,有什么方法可以有效地避免自己陷入钻牛角尖的情况?
11:46 QA-4 - JS Lin
如果NIC現在選擇能馬上精通一項語言會是哪個?會想用來做什麼PJ?
13:13 QA-5 - Rick0
成為 team leader 後無法直接在技術上有更深入的研究和突破,這樣的變化是否值得?
是否會擔心這樣在技術上跟不上其他人,甚至被下屬看輕呢?
14:39 QA-6 - Henry蔡
因為最近是寒假期間,
我開始考慮下學期的修課,
想請教nic大大,
應該在有什麼樣的基礎上,
開始學design patterns?
我目前是碩士生,
大學非資工本科,
學過Python,
也跟過一些網路影片實作過Flask+PostgreSQL,
大學學過資料結構演算法,
但不到得心應手的程度...
16:07 QA-7 - 黃柏瑋
如何同時Handle好好幾件事
我怎麼覺得上班,然後下班假日寫寫side project後就沒啥時間了🤔🤔🤔
17:24 QA-8 - 乾太
我想問一下這年頭轉行斜槓 VTuber 還有沒有搞頭A?
18:10 QA-9 - uuu06222
之前開始關注你有知道你有面試過人的經驗, 想問一下站在面試官的角度...
面試官會不會比較注重作品需要呈現那些東西, 或是有沒有什麼禁忌是不能碰的嗎?
20:07 QA-10 - Joery Lin
想請教您對於對於給你很多成長和照顧的公司,倘若您有一個更好的機會,無論薪水或未知挑戰都大於現在公司。
您將如何做選擇,或許現在公司會給你加薪留下你。
因為自己曾放棄了許多機會
21:37 QA-11 - YangTing Zheng
Q1: 想問通常一個產品開發的週期都多長呢?負責維運和開發的工作內容是否會差很多?
Q2: 想請您簡單介紹一下資工系學生的出路/工作內容?(如PM.SA.DBA.PG.RD.MIS…或是還有其他的?)
24:16 QA-12 - RTB
Hello World
24:18 QA-13 - Barry
目前是公司MIS 很想轉職成後端工程師,但在面試上面都都時常失敗
常常在問技術關卡時就被問倒了,總覺得 要準備的東西非常的龐大
毫無準備的頭緒,總覺得一直寫side project也不是辦法
26:49 QA-14 - 因地制夷
想請教Nic 有在做投資嗎? ex 股票 想聽一些投資心得
27:13 QA-15 - 比歐
想請教 Nic 大,
在之後的工程師生涯中之後有甚麼規劃或想法嗎?
例如:開發產品創業,或是開班授課、轉做顧問之類的。
28:14 QA-16 - yongming jia
请问新手如何学编程,学完去做什么?怎么自己创业?谢谢🙏
29:33 QA-17 - Minghao Chang
是否能請您推薦用來開發的筆電?(正好最近要汰換電腦),想從今年開始養成寫side project的習慣,謝謝。
30:31 QA-18 - Guan Jun Chen
想知道像Nic這麼厲害的工程師,年薪大概落在哪裡
30:46 QA-19 - Sheng Jiang
想請問Nic,如果非資工背景但是對寫程式有熱情,想轉職當軟體工程師,會建議如何起步?
補充:像是什麼樣的人適合自學,什麼樣的人適合去補習,或者補習跟自學的情況各有哪些優劣?
謝謝Nic
## 結尾
31:49 感想
喜歡影片的話!可以幫忙點個喜歡以及分享、訂閱唷!😘
━━━━━━━━━━━━━━━━
🎬 觀看我的生活廢片頻道: https://bit.ly/2Ldfp1B
⭐ instagram (生活日常): https://www.instagram.com/niclin_tw/
⭐ Facebook (資訊分享): https://www.facebook.com/niclin.dev
⭐ Blog (技術筆記): https://blog.niclin.tw
⭐ Linkedin (個人履歷): https://www.linkedin.com/in/nic-lin
⭐ 蝦皮賣場: https://shopee.tw/bboyceo
⭐ Github: https://github.com/niclin
⭐ Podcast: https://anchor.fm/niclin
━━━━━━━━━━━━━━━━
✉️ 合作邀約信箱: niclin0226@gmail.com
#QA #工程師 #在地上滾的工程師 #前端 #後端 #轉職
javascript hello world 在 Untyped 對啊我是工程師 Youtube 的最佳貼文
有沒有人納悶過為什麼凱心琳我每次開場都要講 "Hello World" 呢?
"Hello World"的由來是什麼?為什麼程式語言 C 要叫 C? 為什麼 C++ 要叫做 C++? JavaScript 跟 Java 之間的關係?電腦程式語言有多少種?電腦為什麼要有桌面?滑鼠游標為什麼是斜的?還有好多好多疑問!電腦科學軟體工程的世界中真的有很多奇怪的事,讓我們一起和軟體工程師 Tim (Richard?) & Kid大探究竟吧!
其實想做這一集已經很久了,題目也老早就準備好了~只是願意參與的工程師真的不多呀😂 感謝Tim跟Kid的用心參與!!
📢 📣 📢 本頻道影片內容有輸出成 podcast 📢 📣 📢
雖然這一集用 podcast 聽可能有點混亂,但還是有輸出成音檔唷!
可以在各大podcast平台搜尋「Untyped 對啊我是工程師」
請大家多多支持呀!!🙏🏻💁🏻♀️
這集會聊到...
Overview 💬
🔹 "Hello World"的由來是什麼?
🔹 為什麼程式語言 C 要叫 C?
🔹 為什麼 C++ 要叫做 C++? C#?
🔹 JavaScript 跟 Java 的關係是什麼?
🔹 printf 的 f 是什麼意思?
🔹 電腦程式語言有多少種?
🔹 電腦為什麼要有桌面?
🔹 工程師口中都是什麼蟲 bug? ?
🔹 滑鼠游標為什麼是斜的?
🔹 第一台電腦的名字?
🔹 PHP代表?
【㊫ 電腦科學/軟體工程 學習資源 📖】
全端工程師密技 Full Stack Eng - Career Path (Codecademy)
https://bit.ly/3niTwLN
前端工程師密技 Front End Eng - Career Path (Codecademy)
https://bit.ly/32K1eql
用Scala學習函式程式設計
https://bit.ly/2IF0Thv
Scala 函数式程式設計原理
https://bit.ly/3kBQXTb
平行程式設計
https://bit.ly/3pCeaZf
Android 應用程式開發 專項課程
https://bit.ly/3lGCUwW
普林斯頓大學 電腦科學 演算法 基礎理論
https://bit.ly/3nxomAh
Go 語言學起來
https://bit.ly/35AWhlv
Parallel, Concurrent, and Distributed Programming in Java 專項課程
https://bit.ly/2IGnlH4
Java 軟體工程基礎課程
https://bit.ly/3fa4gJi
全端開發 跨平台手機app 開發 完整課程
https://bit.ly/2UCGWum
#php是個人快樂鬆餅 #HelloWorld是在哈囉 #冷知識大賽
一定要看到影片最後面並且在「YouTube影片下方」按讚留言訂閱分享唷!
每隔週星期四晚上9點更新,請記得開啟YouTube🔔通知!
-
【愛屋及烏】
YouTube 👉 https://www.youtube.com/c/Untyped對啊我是工程師
Podcast 👉 https://open.spotify.com/show/3L5GRMXmq1MRsliQt43oi2?si=3zgvfHlETeuGfp9rIvwTdw
Facebook 臉書粉專 👉 https://www.facebook.com/untyped/
Instagram 👉 https://www.instagram.com/untypedcoding/
合作邀約 👉 untypedcoding@gmail.com
-
Untyped 對啊我是工程師 - There are so many data types in the world of computer science, so are the people who write the code. We aim to UNTYPE the stereotype of engineers and of how coding is only for a certain type of people.
凱心琳: 一個喜歡電腦科學邏輯推理,在科技圈努力為性別平等奮鬥的工程師。
【Disclaimer 聲明】
Some links are affiliated.
上面有些連結是回饋連結,如果你透過這些連結購買商品,我可以得到一些小獎勵,但不會影響到你購買的價格,甚至會是更低的價格!謝謝你的支持💕