Quantcast
Channel: CodeTengu Weekly 碼天狗週刊
Viewing all articles
Browse latest Browse all 109

CodeTengu Weekly 碼天狗週刊 - Issue 51 小明以為自己是中產階級 - Jul 11th 2016

$
0
0

Hello World

CodeTengu Weekly 碼天狗週刊

CodeTengu Weekly 會在 GMT+8 時區的每個禮拜一早上 10:00 出刊,每一期會從目前的 curator 名單中選出三位來負責當期的內容,每一位 curator 各自負責不同的領域,如果你在這一期沒有看到自已感興趣的東西,說不定下一期就會有了。你也可以瀏覽一下前幾期的內容,有價值的東西是不會過時的。

以下是目前的 curator 陣容:

大家也可以關注 CodeTengu 的 FacebookTwitterGitHub微博,有很多 Weekly 看不到的內容。有任何建議或疑問也可以來 Gitter 聊聊,歡迎亂入 👺

致力於解決開發者之間的資訊不對稱

@vinta

Is Python call-by-value or call-by-reference? Neither.

官方的說法叫做 call-by-assignment,也有人稱之為 call-by-object。雖然看起來有點抽象,但是有人總結得很好:

If you pass a mutable object into a method, the method gets a reference to that same object and you can mutate it to your heart's delight, but if you rebind the reference in the method, the outer scope will know nothing about it, and after you're done, the outer reference will still point at the original object.

If you pass an immutable object to a method, you still can't rebind the outer reference, and you can't even mutate the object.

再補充一下,例如 def foo(bar): 這個 function 的參數傳遞其實是在 foo 的 local namespace 裡幫傳進去的物件綁定了一個叫做 bar 的名字(所謂的 assignment);如果你在 foo 裡 re-assign 了一個新的物件給 bar,實際上是把 bar 這個名字綁定到那個新的物件。

延伸閱讀:

jeffknupp.com

Idiomatic Python: EAFP versus LBYL

跟某些語言不同,Python 對於錯誤處理的方式更偏好 EAFP(Easier to Ask Forgiveness than Permission)而不是 LBYL(Look Before You Leap)。簡單說,EAFP 就是 try-except 而 LBYL 就是 if

這篇文章的重點其實是在講「可讀性」,說得更精確一點是 Explicit is better than implicit。作者的論點是,對在讀程式碼的人來說,try-except 其實能夠比較直覺地意識到那段 code 要做什麼事,因為你會先看到那段 try 接著看到可能會發生哪些例外,而不是先看到一串複雜的 if 判斷式。不過 exception 的另一個重點其實是它應該要是 exceptional 的,所以也不是要你把所有的 if 都改用 try-except 吶。

延伸閱讀:

microsoft.com

hasattr() – A Dangerous Misnomer in Python 2

作者強烈地建議大家不要在 Python 2 裡使用 hasattr(),至少是不要對用 @property 裝飾的 method 使用,因為一旦你的 @property method 會拋出任何 exception,你的 hasattr() 的結果永遠都會是 False(而那些 exception 會默默地被 catch 掉),嘖,這個 bug 也太靠北。

不過所幸在 Python 3 就沒有這個問題了。

hynek.me

You don't need Lodash.js / Underscore.js

You Might Not Need jQueryYou Don't Need JavaScript 之後,又出現了 You don't need Lodash.js / Underscore.js 了。

這篇文章就是在告訴你哪些 lodash 和 underscore 的功能其實 native 的 ES5 或 ES6 就支援,不過最棒的是他竟然還為了這個做了一個 ESLint plugin,喔,所有 JavaScript 的事物裡,最喜歡的就是 ESLint 了。

github.com

Finding Time to Become a Better Developer

這是一篇在談時間管理的文章,而且讀起來還挺療癒的。尤其是第 5 點,讓我想到當兵的時候讀過的「親愛的臥底經濟學家」書裡提到的一句話:「意志力跟其他東西一樣,都是稀有資源,無法超額使用」,大家感受一下。

對一個 developer 來說,決定在什麼時候學什麼(以及不學什麼)其實是個很重要的軟技能啊。像我最近就有意識地不太去追那些 buzzword 新技術,而是多花了一點時間在那些相對更本質、更基礎一點的知識,例如資料結構、Refactoring、SQL 以及更重要的,英語。比如說我這陣子終於找到一個適合自己的學英文的套路,就是「打電動」。媽的,打電動學英文的成就感實在太高,才兩個禮拜我就已經玩完兩款 RPG 了(質量效應 2 和 3),效果顯著啊。

延伸閱讀:

freecodecamp.com

@saiday

Good coding instincts will eventually kick you in the teeth

上一期 @kkdai 分享了一篇關於 debug 的文章: "The Best Programming Advice I Ever Got" with Rob Pike 是在說開始用工具 debug 之前,先在腦中思考一次程式運行整體的狀況。

不過還是會有毫無頭緒的時候,這種情形在接手別人的 project 時特別常見,作者分享了一些他在這種情況下 debugging 的紀律跟技巧。

其中對於用測試來 debugging 的部分,我認為的確是很好的紀律,比在 production code 上硬改跟強行 log 來得合理,而且也可以透過 mock object 的使用一次針對一個方向去猜。

文章裡面沒有提到,但我認為更重要的是,透過這種方式 debug 完之後,你自然也有了針對這個 bug 的 test case,避免這個 bug 還會再次出現。

註:文章裡面有提到 RTFM (read the fucking manual),我看到 RTFM 就忍不住想說一個笑話:

菜鳥工程師:我要怎麼做這個 ...
資深工程師:RTFM!
菜鳥工程師:npm install RTFM

freecodecamp.com

Machine Learning for iOS in Swift

文章的引言直接就說 WWDC 16 除了 Swift 3 之外,其它的更新無論是給使用者的功能或是提供給開發者的工具幾乎都跟 AI 有關。

這幾年 Machine Learning 的趨勢化除了運算效能的提升跟成本的下降之外,最重要的還是 神經網路模型 的應用。

這篇文章也對於 AI, Machine Learning, Neural Network 的背景跟基礎知識做了簡單介紹,特別適合沒有相關經驗的人。

Apple 這次在 AccelerateMetal framework 提供了 Convolutional Neural Networks 在 CPU 跟 GPU 上的實作,這個模型適合處理圖片跟聲音,剛好手機裝置可以錄音跟拍照,正好可以拿來做深度學習。

當然文章裡也用 Swift 簡單地實作了一個神經網路。

其實我是現在才猛然注意到 Machine Learning 跟 iOS 開發有關聯,後來一想其實很合理啊,果然長期做 client side app,想法都窄了呢。

延伸:Neural Networks in iOS 10 and macOS (Big Nerd Ranch)

invasivecode.com

Little Bites of Cocoa - Tips and techniques for iOS and Mac development

每個平日早上 9:42 都會發出一篇 iOS 或 Mac 相關的文章,篇幅不大,比較大的 topic 可能會拆開分好幾天發。非常適合每天上班先花五分鐘看一下這個再上 Facebook。

我覺得這系列就還不錯:
#223: Standard Setup
#224: Standard Architecture

littlebitesofcocoa.com

No More findViewById — Google Developers

利用 Data Binding 來取代 findViewById(),看起來比較清爽、不需要再強制轉型 view type 更保險,而且效能也提高了一些些。

Data Binding 這個套件庫野心很大,像是在 xml 裡面 import packages 或用它的 expression language 這些功能我還是感覺蠻猶豫的,但至少就這個取代 findViewById() 的特性我是非常同意的,也從這個誘因開始,先把 Data Binding 的環境處理好。

medium.com

@wancw

白石ゆうか (@shiraishi_yuuka) • Instagram photos and videos

本期我的部分多半是自己的書籤或是看到一半的內容分享,心得較少。 只好先附上 IG 推薦來充數了。

instagram.com

Tensorflow tutorial Python (Eng Sub) 神经网络 教学 学习教程 - YouTube

用 Tensorflow 建構類神經網路做 deep-learning 的教學系列影片。 (好吧,我自己還沒開始看……)

英語版: https://www.youtube.com/playlist?list=PLXO45tsB95cJHXaDKpbwr5fC_CCYylw1f

youtube.com

用 Scheme 實作一個Tensorflow (1)

在用 Tensorflow 來做 deep-learning 之前,先自己刻一個簡單版來了解它的構造吧!(大誤)

P.S. 文中提到 SICP,最近同事也在讀 The Scheme Programming Language。讓我又想把 Scheme 撿回來複習一下了。

github.io

“Function” objects are not a thing

這又是一篇 OO 基本教義派文章。

TL;DR 不要寫出當 function 用的 class/object。

到底 helper/util class 是否算不良的 OO 設計? 是個歷久不衰的話題,隨便搜尋就可以找到一堆討論文章:

medium.com

Big-O Complexities / Poster of common algorithms used in Computer Science

常用演算法與資料結構的時間複雜度海報,可以印出來貼在牆上參考用。

github.com

Random Cool Stuff

When someone says "You don't need a library for that!" then shows you how to implement it manually.

@saiday 提供

twitter.com


This RSS feed is published on http://weekly.codetengu.com/. You can also subscribe via email.


Viewing all articles
Browse latest Browse all 109

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>