原文:http://opensource.com/education/14/9/teachers-students-want-freedom-testing
相信對大部分的學生和老師們來說,最重要的事情就是考試。考試決定了學生的成敗 — 許多老師也認為如此。
以我的生涯為例:
我的第一份工作是位英文老師,我在日本教導學生們以利他們通過大學入學考試,若學生沒有通過考試,他們通常會花額外的一年繼續準備考試
幾年後,我到澳洲教書,幫助學生們拿到大學學位,如果沒有拿到學位的學生,通常會失去簽證並且被送返家中。
而在我抵達喬治亞後,我在亞特蘭大的一所國中教學,我們被要求教導學生如何應付考試,
學生越努力學習,我們的教學就越以考試為導向。如果最後學生的成績過低,則需要進行暑修,這種規定至今已成氾濫。每個負責暑修課程的老師必須確保他們的教學進度與其他老師
一致,我也不例外。大部分的學生與老師都因此飽受煎熬。
從考試中解脫
在2006年,我的生活有了改變 — 我轉換了我的生涯。我辭掉老師的工作,也停止以考試為導向的教學。我開始在名為 Open Source Training 的公司教導開放原始碼(OpenSource),教導開放原始碼的過程令我感到新鮮,而學習的學生也是如此 — 因為沒有考試,也沒有任何官方證書來證明你學習過此課程。除此之外,也沒有指定的教科書。在公司中,沒有任何一位主管會要求你拿出證書來證明你的能力。一位好的主管會檢視你做了什麼並且要求展現出你的能力。當然,如果有資訊工程的學位多少對你有所幫助,但沒有也不會對你造成不利的影響。我們許多學生都是到課堂中進行自學。有了開放原始碼,我們不須因為使用軟體、課本或是為了考試而另外花錢。你只需下載好軟體,便可以開始進行學習。這在以前是不可能發生的,以前我們總是需要為學生向企業爭取免費的軟體序號。
如果我們教學生使用WordPress,我們會鼓勵他們使用這軟體做他們喜歡的事情—用在興趣、球隊、非營利、兼職、甚至是宗教團體等…上。學生們便會以各自的動機來使用這軟體完成事情,他們會先研究此軟體,選擇他們所想要的功能,並且開始進行自己想完成的事。
以更好的動機為出發點
學習開放原始碼的動機是有別於傳統的學習的。學生如果不參與我們的訓練課程是因為他有其他想參與的課程,學生能夠自由的參與自己所想學習的課程內容。
以下為學生在完成這些課程後所做的事情:
-成為網站設計師替大型公司設計網站
-建立社群網站
-用開放原始碼來幫助自己公司的事務,使他們在工作更加活躍,甚至得到升遷
這些學生努力並且完成許多令人讚嘆的事情,且這些事情是他們發自內心想完成的,這是非常難得可貴的。
小時候,老師和我說過:「活到老,學到老。未來有許多現在不存在的職業呢。」,所以說,我們生活在一個「未來有無限可能」的世界,以往的考試方法並不足以激發我們對各種事物的學習動機。然而,開放原始碼軟體是非常具有可塑性且強大的軟體,並且與學生的需求一致,這才是未來的教育趨勢。
2014年12月18日 星期四
2014年12月11日 星期四
開源的生物資訊數據平台受到學生駭客的幫助
原文:Open source bioinformatics data platform gets helps from student hackers
Bio4j被選為今年的Google Summer of Code 2014的一部份,而在Era7 Bioinformatics團隊經過幾個月的努力之後,這個在今夏所啟動的計畫最近取得了很大的成就。
在Era7 Bioinformatics,我們是一個專長於順序分析、知識管理、以及序列數據解析的生物資訊公司。我們的任務是幫助我們的顧客從他們的次世代序列專案中獲得最高的數值。Bio4j是我們的高效能的圖像式雲端開源生物資訊數據平台,可以整合在蛋白質資訊周遭最典型的開放數據源可用之數據。它整合了在UniProt KB (SwissProt + Trembl)、Gene Ontology (GO)、UniRef (50, 90, 100)、RefSeq、NCBI taxonomy和Expasy Enzyme DB可用的數據。目前的版本包含超過2,000,000,000個關聯、400,000,0000個節點和1,000,000,000個屬性。Bio4j提供一個全新且強大的框架來查詢和管理蛋白質相關之資訊。既然它需要依賴高效能的圖像引擎,因此數據以根據語義所代表之本身結構的方式來儲存。反之,傳統的相關資料庫必須平面化跟他們有關的數據至表格中,並建立人為的id來連結不同的元組,這樣做有可能在某些情況下導致領域模型和實際的資料結構幾乎不相干。
假如你並不熟悉成功且有名的Google Summer of Code (GSoC) 計畫,它是一個有10年歷史的全球性計畫,提供資金引導來自各種領域的開源專案。資金是直接給學生們的,幫助他們在選定的開源專案中創造新的功能或是改進。為了慶祝今年計畫的成功,Google在他們的總部於10月23至26日舉辦一個會議,並邀請來自各個成功參與之組織的代表們互相招呼和合作。2位Era7 Bioinformatics的與會代表出席了在Google山景城辦公室的行程,並活躍的參與各項Google舉辦的活動。
Era7 Bioinformatics的CEO,Eduardo Pareja說:「這項專案已然成為一個很棒的機會使我們的Bio4j平台變成一個更加有用有價值的工具,讓我們進一步來詳細檢驗各種我們的管道和服務,像是BG7和Genome7。」Pareja又說:「就某些部分,根據這些改進,我們現在可以提供量身訂做的Bio4j服務來讓其他團體使用在他們自己生物資訊相關之解決方案。」
這是Bio4j成為GSoC一份子的第一年,負責啟發教導3位學生作業於這些專案:
Dynamograph,一個以DynamoDb為基礎的簡易圖像資料庫,提供可能性來保留和接收以圖像結構組織之數據。
Bio4j Graphml/GraphSON exporter,一個給Tinkerpop3's Gremlin Console使用的插件,提供實踐於Bio4j's Domain Specific Language的遍歷步驟和:bio4j命令。:bio4j命令使你可以導出用Gremlin Graph Querying Language表達的質詢或是將Bio4j DSL格式導出成GraphSON或GraphML格式。
GsoC 2014 el-grafo project,互動式網路工具的第一項專案,這工具可以讓使用者直觀地探索Bio4j開源生物資訊數據平台的抽象領域模型。
Bio4j被選為今年的Google Summer of Code 2014的一部份,而在Era7 Bioinformatics團隊經過幾個月的努力之後,這個在今夏所啟動的計畫最近取得了很大的成就。
在Era7 Bioinformatics,我們是一個專長於順序分析、知識管理、以及序列數據解析的生物資訊公司。我們的任務是幫助我們的顧客從他們的次世代序列專案中獲得最高的數值。Bio4j是我們的高效能的圖像式雲端開源生物資訊數據平台,可以整合在蛋白質資訊周遭最典型的開放數據源可用之數據。它整合了在UniProt KB (SwissProt + Trembl)、Gene Ontology (GO)、UniRef (50, 90, 100)、RefSeq、NCBI taxonomy和Expasy Enzyme DB可用的數據。目前的版本包含超過2,000,000,000個關聯、400,000,0000個節點和1,000,000,000個屬性。Bio4j提供一個全新且強大的框架來查詢和管理蛋白質相關之資訊。既然它需要依賴高效能的圖像引擎,因此數據以根據語義所代表之本身結構的方式來儲存。反之,傳統的相關資料庫必須平面化跟他們有關的數據至表格中,並建立人為的id來連結不同的元組,這樣做有可能在某些情況下導致領域模型和實際的資料結構幾乎不相干。
假如你並不熟悉成功且有名的Google Summer of Code (GSoC) 計畫,它是一個有10年歷史的全球性計畫,提供資金引導來自各種領域的開源專案。資金是直接給學生們的,幫助他們在選定的開源專案中創造新的功能或是改進。為了慶祝今年計畫的成功,Google在他們的總部於10月23至26日舉辦一個會議,並邀請來自各個成功參與之組織的代表們互相招呼和合作。2位Era7 Bioinformatics的與會代表出席了在Google山景城辦公室的行程,並活躍的參與各項Google舉辦的活動。
Era7 Bioinformatics的CEO,Eduardo Pareja說:「這項專案已然成為一個很棒的機會使我們的Bio4j平台變成一個更加有用有價值的工具,讓我們進一步來詳細檢驗各種我們的管道和服務,像是BG7和Genome7。」Pareja又說:「就某些部分,根據這些改進,我們現在可以提供量身訂做的Bio4j服務來讓其他團體使用在他們自己生物資訊相關之解決方案。」
這是Bio4j成為GSoC一份子的第一年,負責啟發教導3位學生作業於這些專案:
Dynamograph,一個以DynamoDb為基礎的簡易圖像資料庫,提供可能性來保留和接收以圖像結構組織之數據。
Bio4j Graphml/GraphSON exporter,一個給Tinkerpop3's Gremlin Console使用的插件,提供實踐於Bio4j's Domain Specific Language的遍歷步驟和:bio4j命令。:bio4j命令使你可以導出用Gremlin Graph Querying Language表達的質詢或是將Bio4j DSL格式導出成GraphSON或GraphML格式。
GsoC 2014 el-grafo project,互動式網路工具的第一項專案,這工具可以讓使用者直觀地探索Bio4j開源生物資訊數據平台的抽象領域模型。
一個無先入之見的網路安全課程
一個無先入之見的網路安全課程
教育高中生有關網路安全的課程有什麼呢?傳統上高中的課程遵循美國CIPA(Children's Internet Protection Act)所提供的課程概要。由美國法院制定相關法令於西元2000年,其後又於2011年更新這項法令,法令規定美國學校必須提供學生網路安全練習的課程,資金由FCC's E-rate program 提供。CIPA的條款規定學生必須被教育擁有良好的網路行為(例如在聊天室和社群網路的場合)以及討論網路霸凌的議題。
公立高中的網路安全課程典型地將網路安全議題限縮在很小的範圍為滿足美國政府的要求以及回應傳統上局部性的看法與意見。教學的內容是常常被提及的資訊常識,像是這些常見的說辭:
l 不要開啟附上.exe結為的檔案
l 不要公開你的密碼
l 請不要非法下載音樂、軟體
l 請保護好你在網路上的信譽
l 不要貼爭議性、洩漏秘密、具損害密名譽的圖片
當然,我們必須幫助學生了解到網路世界是一個複雜、不安全的一個地方。數位信用、網路安全和網路上的自我保護對每一位公民是很重要的技巧。然而,很多學校突然減少有關網路霸凌、線上掠奪、聊天室等主題,忽略這些重要而顯著的議題。網路上的客觀性,史諾登揭密NSA的機密,社群資料探勘,網路供應商的封鎖與控制….等基本的觀念、原則與價值最終會塑造與引導未來學生如何使用網路,以及影響我們的社會。
一個經過更新、廣泛延伸的網路延伸課程應該要包含甚麼呢?我想要建議重要的基本數位素養的概念和有關的問題當作21世紀後高中網路安全課程要爭論、討論的主題:
l 科技的起源、所有權與權利
l 你的數位裝置是開放式(比如說可以連上網路)的嗎?它可以被合法修改嗎?DRM(digital rights management)是什麼?
l 一個特定的專案中誰是屬於開發者?他們的動機是什麼?
l 開放的文件格式是什麼?我還能在20年後使用、閱讀我的文件嗎?
l software license是什麼?這會有什麼問題?
l 科技專利是什麼?專利是如何幫助、妨礙創新?
l 科技的倫理與隱私
l 正在監視你的網路行為的人是誰?他們的動機?他們想要知道什麼?你會洩漏什麼訊息?
l 社群媒體網站是如何操縱行為的?測試與需要經過同意的臨床研究的界線是什麼?
這些簡單的例子還不算是很詳盡。還有什麼必要議題是學生應該花心思去探討的?有什麼議題是我們的年輕人應該要試著去研究與探討的?
翻譯自:
回顧Firefox新開發者版本
Mozilla在Firefox十周年之際發布了新的開發者版本。Usersnap團隊和我一同檢視該版本是否能在網站開發過程中,為開發者提供各種可行的應用,以及是否跟得上Google Chrome開發者工具。
新佈景主題
Firefox開發者版本可以獨立執行,並不會與已安裝的Firefox有所衝突。一開啟新的開發者版本,你會最先發現佈景主題有所不同。瀏覽器的樣式及顏色配置與開發者工具相同,讓你能夠更快速的存取。
新功能
Mozilla新增了許多工具,例如WebIDE及Valence插件,這些工具允許你將Firefox的開發者工具與其他瀏覽器(例如iOS版Safari)做連結。
響應式設計視圖
從我們的觀點來看,響應式設計視圖是一個非常有趣的新功能,它可以讓你無須改變視窗大小就能玩弄網頁於不同的螢幕尺寸間。下方的影片將展示它是如何工作的。
為了能夠以任意尺寸來檢視你的網頁,你必須先啟用響應式設計視圖功能。一但你安裝了Usersnap插件,你只要點選Usersnap便能立即回報Bug或收集回饋。Usersnap所擷取的螢幕畫面將存在Usersnap Dashboard或是已安裝的專案管理工具中。另外,你也可以透過Email將有註解的螢幕截圖傳給其他人。
樣式編輯器
樣式編輯器允許你檢視和編輯與頁面相關的CSS樣式。此外,你也可以建立新的或使用已存在的CSS樣式並套用到任何頁面。
Firefox開發者版本 vs. Google
Chrome開發者工具?
我們將Firefox內建的開發功能與Chrome現存的開發者工具做比較。我們發現新版的Firefox開發者版本對於開發流程並沒有提供太大的改進,而Google Chrome的開發者工具相較之下是比較好用的。
對於響應式設計視圖,Chrome也提供了相似的工具,內建了許多裝置的設定,能夠讓你玩弄網頁於不同的尺寸之間。此外,你還可以調整Chrome的網路速度以分析你的網站在不同網路(例如EDGE、3G等)下有什麼行為。相比之下,Firefox開發者版本並沒有提供類似的網路速度限制功能。
此外,Google Chrome允許你在開發者工具中顯示相關的媒體查詢結果。相較於Firefox的樣式編輯器,我們更喜歡Chrome在媒體查詢的顯示效果,因為它能將必要資訊以更簡潔的方式呈現出來。
開發者的最佳選擇?
綜合上述,我們很高興Mozilla發布了獨立的開發者版本以慶祝十週年。雖然我們還是發現缺少了一些功能,如網路速度限制,但它仍然能夠成為你的得力開發助手。至於其他開發者是否會從Chrome跳槽至Firefox則有待觀察。
你對新版Firefox的意見?
Google Code-in 鼓勵青少年參與原始碼開發
Google Code-in 是一個專門為13到17歲的青少年的行動,為了讓這些年輕人更了解並投入自由軟體的各項專案。
從2014年12月1日到2015年1月19日的這段期間,參與活動的組織會提出許多小型的計畫,初學者可以在幾個小時到幾天的時間內完成。
除此之外,還會有指導人員跟參加者一起合作。參加者可以選擇的計畫包括寫程式、撰寫件、研究、設計或測試等。你並不需要具備寫程式的能力才能參加活動,儘管如此,這仍是個學習程式的大好機會。
進行方式:
1.選擇一項任務
2.完成它
3.確認任務通過
4.重複!
參與這項計畫的的組織有:
Apertium - 一套轉化原則法的機器翻譯系統。
BRL-CAD - 電腦3D實體造型軟體。
Copyleft 視覺效果、物理、及其他開發遊戲用的函式庫。
Drupal - 著名的內容管理系統(CMS),用來架設網站。
FOSSASIA - 推廣自由及開放原始碼軟體(FOSS)的組織,針對亞洲用戶。
Haiku - 快速、簡單的作業系統。
KDE - 強大的桌面系統與應用程式,為Linux與Unix所打造。
Mifos Initiative - 提供各項經濟上的服務給較貧窮地區的人。
OpenMRS - 醫療紀錄系統,使用於許多開發中國家。
Sahana Software Foundation - 一套災難管理系統,預先防範各式災害的發生。
Sugar Labs - 為孩童設計的教育軟體,例如知名的Scratch。
Wikimedia Foundation - 維基百科背後的軟體。
每個組織會選出表現最優秀的五名參與者,而其中最頂尖的兩名會獲得最大獎:免費到Google位於加州的總部(包含一名家長或監護人)參觀的機會!而每位參加者只要完成三項以上的任務,也都可以獲得一件紀念T-shirt。
Google Code-in 對青少年而言是一個絕佳的機會,體驗真實世界中軟體的專案開發,增進自己的經驗並與國際性的社群接軌。在去年的活動中,來自46個不同國家的337名參與者在僅僅7週的時間內完成了2113項任務!
如果正在閱讀的你是個青少年,趕快加入並告訴你的朋友們。如果你不是青少年,也可以鼓勵身邊的青少年或告訴他們的家長、甚至老師有這樣一個活動,讓更多人接觸開發軟體的樂趣!
2014年12月10日 星期三
你不可不知的JavaScript
原文:You don't know JavaScript but you should
這是我參與Kyle Simpson會談時記錄的部分抄本,他是名來自奧斯丁的開放網路提倡者,同時也身兼作家、講師、工作指導、開源軟體的贊助者等多種身份,最重要的是,他熱衷於與Javascript相關的一切。
感謝各位這次的邀請,我是凱爾·辛普森,暱稱getify,目前活躍於Twitter、Github、及這些地方。就在上週末,我受邀於Thought@Work在羅切斯特主持了場研討會,並在討論New Media Interactive Development這個專案時,發現自己陷於JavaScript和Node的類別囹圄中,所以再次感謝各位的邀請,給我重新審視JS的機會。
我曾寫過幾本關於JavaScript的系列書You Don't Know JS,全冊都開放在GitHub 供免費閱讀。它們也有經歐萊禮正式出版,但目前市面上只有兩冊,第三冊正在進行最後的修訂,第四冊已近乎完成,而第五冊將在不久後著手編修。
而談到我寫的這系列,若與JavaScript: The Good Parts做對比,它們所論及的是「非優良部分」,要注意,這不代表他們是壞的部分,而是涵蓋了JavaScirpt完整的面向。我認為開發者不該試圖迴避困難,我鼓勵各位挑戰它並瓦解它,當各位碰上了JS中令你困惑費解的語法,比起埋怨語言本身,更當去思索自己究竟遺漏了什麼,並進一步徹底鑽研。
我想這種思維對JS開發者顯得有些微妙,因為在他們的認知中,JS應該是一個既簡單又直覺,甚至是能夠一望而知的程式語言,如果JS達不到這些要求,那一定是語言本身出了什麼問題。其實,期望任何一種語言(如C++、Java)在規則上不言而喻,本身就是不合理的要求。所以當你碰著了不懂的程式碼,別去苛責語言設計者或寫這段程式碼的人,而是要趕緊補足自己缺失的部分。許多時候,開發者討厭JS的一些功能,只由於不理解,而在我向他們解釋運作原理後,他們漸漸從厭惡轉為接受,補充一下,接受可不一定等於喜歡,只意味他們肯正視這些功能而已。
在我看來,欲確實駕馭JS,精神與時間的投資必不可少,除了瞭解怎麼去寫,更該瞭解JS做了什麼?乃至JS為什麼要這麼做?我之所以鼓勵各位在學時就該精熟JS,是因我身為一名JS的教員,曾和一群用錯誤方式學習JS的工程師共事過,為了重新起步,他們無不投入了莫大心力,如果各位在學期間就真正理解了JS,進入產業後,除了不重蹈覆轍,更能明白JS的規範在當今網路平台何其重要。
在未來,JS將是鞏固網路平台的堅實地基,為此,我們更當熟悉它,並且掌握它。
最後,我想傳達給各位一件事‧我堅信,各位在課程上必定能學到不少好東西,但是更重要的是,要趁現在掌握學習的方法,以及享受學習的過程。在你這輩子裡,不可能只需精通一件事。科技日新月異,業界主流一代換過一代。如果沒別人出頭的話,我想現在是蘋果當道。無論你的興趣何在,唯有永不止歇的學習,才是成功的不二法門。
A:Scope and Closures應該算是必修,按照出版順序閱讀是OK的。前三冊鎖定在JS的核心,雖然四五冊是建立在前三冊之上,但它們主要是探討ES6上的改變。
Q:免費的開源軟體對你的工作有多重要?
A:我工作上的一切都來自開源軟體,我堅信它的影響力,在不久的將來,開源軟體將使我的事業更上層樓。如果你對科技的發展史有些研究,會發現雖然技術總起於私有,但幾經調適後,最終都會走向開放,而且我認為,起於開放將漸漸成為一種趨勢。或許不少人會說:「我不想把我的程式碼公開,我怕別人會取笑我蹩腳的技術。」不過我先前嘗試時,別人是這麼說的:「你該更有自信些,因為你的程式寫的真好。」但你若看看那份程式碼,會發現裡頭充斥著不少糟糕的設計。You Don't Know JS的You其實是個集合名詞,就連我也不敢說我了解他。
我寫的每份專案都是起源於空白文件,我會把他們公開在GitHub,並盡全力持續更新它。這麼做並非要行銷理念或設計,我假定我寫的每行程式碼都是最糟糕的,而唯一能改進的方法就是借助他人。開源軟體超越了任何獨力開發,因為它是集眾人之力協做而成。
各位應當投身於開源文化中,我堅信開放是一切技術的起源,也是我們事業能延續10年的首要原因。
Q:像我這種怕把自己程式碼公開的人,應該從哪裏參與起?
A:這有很多答案,就我而言,加入別人的專案是個不錯的選擇。許多自由及開放原始軟體(FOSS)上的貢獻不是來自編程,而是來專案文件的編修與更新,如果你能夠在文件上添加一些註釋、細節或測試結果,乃至回傳一份錯誤訊息給開發團隊,這都是對社群的巨大貢獻。而要揪出這些小bug,已經有不少廣為人知的方法,並不需要透過編程去處理他們。其實,不少FOSS界的巨星都是從寫文件起頭的,一個專案要成功,實際上就只是比別人多做一點點,編程是很重要,但留下文件能傳承這份專案,而且你透過親身參與,也能更了解一份專案到底是怎麼運作的,所以我建議新手由此入門。
Q:那有什麼參與的管道嗎?
A:通常是選擇Github,當然,其他社群也不錯。而且我不會呼籲你去挑某個專案,因為你該選的是你「自己感興趣」的專案,比如你想做資料可視化,那就試試D3。找出你的熱情所在,這不但助於快速建立自信,同時也是個優化程式的良性循環。
Q:你曾說JS將是我們這輩子唯一會用的網路語言,先聲明一下,我並不是Dart或類似語言的支持者,但你怎麼不覺得他們會成功?
A:真是個有內涵的好問題, 不過Dart無法取代JS,並不是Dart設計的不好,而是在Google的態度。先看看Google在網站上怎麼說,他們把Dart定位成JS的死對頭,期望有朝一日能取代JS,而非僅只實驗性的影響JS發展。不過從Dart外洩的紀錄得知了一件事:「Dart無法修正JS的根本性瑕疵。」,無論是在Chrome中與JS分庭抗禮的虛擬機Dartium,或是在語言轉議器Dart2JS裡,Dart都做不到。這訊息相當耐人尋味,Google似乎不是想做的比JS更好,而是假定在開發者生來就選Dart的前提下,JS將逐步衰退。但我能肯定一件事,Mozilla絕對不會在Firefox中實做Dart,所以如果Dart真要取代JS,那得等到Firefox消失,不過我想像不出這種情形。
宏觀來看,有數以百計的語言能編譯為JS,如果你想在網頁上執行你的程式碼,可以把它轉譯為JS。 雖然我個人不怎麼喜歡那些語言,但它們確實很重要!因為源碼不是給電腦看的,而是給開發者看的,處理與演算的手段如恆河沙數,開發者要在這些手段中,找出一個最符合自己思考模式的。為此,我們還需在JS的轉譯上做更多試驗,就像CoffeeScript,他使ES6如虎添翼。我想未來CoffeeScript能做的已經很有限了,但不要緊,它已是JS革新的重要推手。至於Typescript,雖然我不怎麼喜歡類別,但Eich在報告中提到,它未來將改為近似JS的宣告方式。
先學好JS,儘管你仍將接觸其他語言,並發現在某些情形它們做的比JS好,或對你的團隊更有利。很多人就因為這樣而不學JS,但我認為不該這麼做,學會JS不僅對自己有利,也能將你喜歡的語言轉譯為JS。這促成了網路平台的美好未來。
這是我參與Kyle Simpson會談時記錄的部分抄本,他是名來自奧斯丁的開放網路提倡者,同時也身兼作家、講師、工作指導、開源軟體的贊助者等多種身份,最重要的是,他熱衷於與Javascript相關的一切。
感謝各位這次的邀請,我是凱爾·辛普森,暱稱getify,目前活躍於Twitter、Github、及這些地方。就在上週末,我受邀於Thought@Work在羅切斯特主持了場研討會,並在討論New Media Interactive Development這個專案時,發現自己陷於JavaScript和Node的類別囹圄中,所以再次感謝各位的邀請,給我重新審視JS的機會。
我曾寫過幾本關於JavaScript的系列書You Don't Know JS,全冊都開放在GitHub 供免費閱讀。它們也有經歐萊禮正式出版,但目前市面上只有兩冊,第三冊正在進行最後的修訂,第四冊已近乎完成,而第五冊將在不久後著手編修。
- Scope & Closures:主要在探討閉包,它是Javascript中最重要的基本議題,每個JS的程式都涉及閉包,但是大部分的開發者都不曉得它們正在使用它,或不了解什麼機制呼叫了閉包及其運作原理。
- this & Object Prototypes:將探討 this 這個奧妙的關鍵字,並且解決JS中的一個錯誤的迷思一一JS有類別。事實上,JS有的只是原型的指派,我們應當正視它,而非去嘗試不切實際的類別導向。
- Types & Grammar:我們將專注在變數的強制轉型,儘管多數開發者把它當成糟糕的機制,但我鼓勵各位深入鑽研它。因為強制轉型並不如你所聽到的那麼詭異,而且如果你運用得當,它能大幅改善你的編碼。
- Async & Performance (編寫中) :我們首先會解釋為何回呼函式不適用於非同步程式,並深入於改善非同步模式下的promise與generators,當然也囊括了優化與評估JavaScript效能的部分。
- ES6 & Beyond (預定編寫): 涵蓋了JS在ES6的所有改變,以及ES6後即將迎來的各種革新
而談到我寫的這系列,若與JavaScript: The Good Parts做對比,它們所論及的是「非優良部分」,要注意,這不代表他們是壞的部分,而是涵蓋了JavaScirpt完整的面向。我認為開發者不該試圖迴避困難,我鼓勵各位挑戰它並瓦解它,當各位碰上了JS中令你困惑費解的語法,比起埋怨語言本身,更當去思索自己究竟遺漏了什麼,並進一步徹底鑽研。
我想這種思維對JS開發者顯得有些微妙,因為在他們的認知中,JS應該是一個既簡單又直覺,甚至是能夠一望而知的程式語言,如果JS達不到這些要求,那一定是語言本身出了什麼問題。其實,期望任何一種語言(如C++、Java)在規則上不言而喻,本身就是不合理的要求。所以當你碰著了不懂的程式碼,別去苛責語言設計者或寫這段程式碼的人,而是要趕緊補足自己缺失的部分。許多時候,開發者討厭JS的一些功能,只由於不理解,而在我向他們解釋運作原理後,他們漸漸從厭惡轉為接受,補充一下,接受可不一定等於喜歡,只意味他們肯正視這些功能而已。
在我看來,欲確實駕馭JS,精神與時間的投資必不可少,除了瞭解怎麼去寫,更該瞭解JS做了什麼?乃至JS為什麼要這麼做?我之所以鼓勵各位在學時就該精熟JS,是因我身為一名JS的教員,曾和一群用錯誤方式學習JS的工程師共事過,為了重新起步,他們無不投入了莫大心力,如果各位在學期間就真正理解了JS,進入產業後,除了不重蹈覆轍,更能明白JS的規範在當今網路平台何其重要。
在未來,JS將是鞏固網路平台的堅實地基,為此,我們更當熟悉它,並且掌握它。
最後,我想傳達給各位一件事‧我堅信,各位在課程上必定能學到不少好東西,但是更重要的是,要趁現在掌握學習的方法,以及享受學習的過程。在你這輩子裡,不可能只需精通一件事。科技日新月異,業界主流一代換過一代。如果沒別人出頭的話,我想現在是蘋果當道。無論你的興趣何在,唯有永不止歇的學習,才是成功的不二法門。
Q&A
Q:這五本書有特定的閱讀順序嗎?A:Scope and Closures應該算是必修,按照出版順序閱讀是OK的。前三冊鎖定在JS的核心,雖然四五冊是建立在前三冊之上,但它們主要是探討ES6上的改變。
Q:免費的開源軟體對你的工作有多重要?
A:我工作上的一切都來自開源軟體,我堅信它的影響力,在不久的將來,開源軟體將使我的事業更上層樓。如果你對科技的發展史有些研究,會發現雖然技術總起於私有,但幾經調適後,最終都會走向開放,而且我認為,起於開放將漸漸成為一種趨勢。或許不少人會說:「我不想把我的程式碼公開,我怕別人會取笑我蹩腳的技術。」不過我先前嘗試時,別人是這麼說的:「你該更有自信些,因為你的程式寫的真好。」但你若看看那份程式碼,會發現裡頭充斥著不少糟糕的設計。You Don't Know JS的You其實是個集合名詞,就連我也不敢說我了解他。
我寫的每份專案都是起源於空白文件,我會把他們公開在GitHub,並盡全力持續更新它。這麼做並非要行銷理念或設計,我假定我寫的每行程式碼都是最糟糕的,而唯一能改進的方法就是借助他人。開源軟體超越了任何獨力開發,因為它是集眾人之力協做而成。
各位應當投身於開源文化中,我堅信開放是一切技術的起源,也是我們事業能延續10年的首要原因。
Q:像我這種怕把自己程式碼公開的人,應該從哪裏參與起?
A:這有很多答案,就我而言,加入別人的專案是個不錯的選擇。許多自由及開放原始軟體(FOSS)上的貢獻不是來自編程,而是來專案文件的編修與更新,如果你能夠在文件上添加一些註釋、細節或測試結果,乃至回傳一份錯誤訊息給開發團隊,這都是對社群的巨大貢獻。而要揪出這些小bug,已經有不少廣為人知的方法,並不需要透過編程去處理他們。其實,不少FOSS界的巨星都是從寫文件起頭的,一個專案要成功,實際上就只是比別人多做一點點,編程是很重要,但留下文件能傳承這份專案,而且你透過親身參與,也能更了解一份專案到底是怎麼運作的,所以我建議新手由此入門。
Q:那有什麼參與的管道嗎?
A:通常是選擇Github,當然,其他社群也不錯。而且我不會呼籲你去挑某個專案,因為你該選的是你「自己感興趣」的專案,比如你想做資料可視化,那就試試D3。找出你的熱情所在,這不但助於快速建立自信,同時也是個優化程式的良性循環。
Q:你曾說JS將是我們這輩子唯一會用的網路語言,先聲明一下,我並不是Dart或類似語言的支持者,但你怎麼不覺得他們會成功?
A:真是個有內涵的好問題, 不過Dart無法取代JS,並不是Dart設計的不好,而是在Google的態度。先看看Google在網站上怎麼說,他們把Dart定位成JS的死對頭,期望有朝一日能取代JS,而非僅只實驗性的影響JS發展。不過從Dart外洩的紀錄得知了一件事:「Dart無法修正JS的根本性瑕疵。」,無論是在Chrome中與JS分庭抗禮的虛擬機Dartium,或是在語言轉議器Dart2JS裡,Dart都做不到。這訊息相當耐人尋味,Google似乎不是想做的比JS更好,而是假定在開發者生來就選Dart的前提下,JS將逐步衰退。但我能肯定一件事,Mozilla絕對不會在Firefox中實做Dart,所以如果Dart真要取代JS,那得等到Firefox消失,不過我想像不出這種情形。
宏觀來看,有數以百計的語言能編譯為JS,如果你想在網頁上執行你的程式碼,可以把它轉譯為JS。 雖然我個人不怎麼喜歡那些語言,但它們確實很重要!因為源碼不是給電腦看的,而是給開發者看的,處理與演算的手段如恆河沙數,開發者要在這些手段中,找出一個最符合自己思考模式的。為此,我們還需在JS的轉譯上做更多試驗,就像CoffeeScript,他使ES6如虎添翼。我想未來CoffeeScript能做的已經很有限了,但不要緊,它已是JS革新的重要推手。至於Typescript,雖然我不怎麼喜歡類別,但Eich在報告中提到,它未來將改為近似JS的宣告方式。
先學好JS,儘管你仍將接觸其他語言,並發現在某些情形它們做的比JS好,或對你的團隊更有利。很多人就因為這樣而不學JS,但我認為不該這麼做,學會JS不僅對自己有利,也能將你喜歡的語言轉譯為JS。這促成了網路平台的美好未來。
訂閱:
文章 (Atom)