惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Comments on: Blog
S
Schneier on Security
Microsoft Azure Blog
Microsoft Azure Blog
T
Tor Project blog
V
Visual Studio Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Spread Privacy
Spread Privacy
月光博客
月光博客
罗磊的独立博客
Cisco Talos Blog
Cisco Talos Blog
P
Privacy International News Feed
T
Tenable Blog
阮一峰的网络日志
阮一峰的网络日志
AWS News Blog
AWS News Blog
T
ThreatConnect
博客园 - 三生石上(FineUI控件)
Recorded Future
Recorded Future
Hugging Face - Blog
Hugging Face - Blog
T
Tailwind CSS Blog
博客园 - 叶小钗
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
A
Arctic Wolf
L
LINUX DO - 最新话题
美团技术团队
大猫的无限游戏
大猫的无限游戏
I
Intezer
博客园 - 司徒正美
酷 壳 – CoolShell
酷 壳 – CoolShell
量子位
小众软件
小众软件
T
Threatpost
V
V2EX
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
宝玉的分享
宝玉的分享
The Register - Security
The Register - Security
Project Zero
Project Zero
J
Java Code Geeks
Cyberwarzone
Cyberwarzone
IT之家
IT之家
MyScale Blog
MyScale Blog
T
Threat Research - Cisco Blogs
T
The Blog of Author Tim Ferriss
腾讯CDC
S
SegmentFault 最新的问题
F
Fox-IT International blog
S
Security Archives - TechRepublic
Last Week in AI
Last Week in AI
G
GRAHAM CLULEY
M
MIT News - Artificial intelligence

Nic Lin's Blog

謝明真 - 高效領導力的課後筆記 NFT 開發實戰!基礎智能合約入門 (3) NFT 開發實戰!基礎智能合約入門 (2) NFT 開發實戰!基礎智能合約入門 (1) 如何自我檢測 log4j CVE 漏洞 Rails 如何在資料寫入時記錄來源 IP 位置 如何經營工程師 Youtube 頻道 - Part 8 營收篇 如何經營工程師 Youtube 頻道 - Part 7 酸民文化篇 如何經營工程師 Youtube 頻道 - Part 5 設備器材篇 如何經營工程師 Youtube 頻道 - Part 4 後製剪輯篇 如何經營工程師 Youtube 頻道 - Part 3 文案企劃篇 如何經營工程師 Youtube 頻道 - Part 2 設備器材篇 如何經營工程師 Youtube 頻道 - Part 1 制訂頻道方向篇 如何經營工程師 Youtube 頻道 - Part 0 Rails 中避免 race condition 的最佳實踐(二) Rails 中避免 race condition 的最佳實踐(一) 10 分鐘整合 google sheet 做自動化開發功能週報 經營 Side Project 300 天所帶來的收穫及挑戰 我的 Youtube 影片製作流程 API 設計時必須注意的 HTTP header 底線問題 如何提升你的程式可讀性之實務技巧(三) 如何提升你的程式可讀性之實務技巧(二) 如何提升你的程式可讀性之實務技巧(一) Ruby 中使用 freeze 優化效能的時機 避免 React 中的 useEffect 無限 render 在 Rails 內輕量使用 Vue Component 的最佳實踐 如何在區域網路用 Docker 架設有 SSL 的 Gitlab 從被問到問人,那些我常問的面試問題 [Rails] 如何漂亮寫出可維護的 query (Maintainable Rails Query) 在已知長度情況下優化 slice 的性能 [ReactNative] 如何在 iOS APP 上主動要求用戶評分 Rails 的 scope 為什麼用 lambda? Proc 與 lambda 不同之處 淺談 Active Record 的 Lazy load 特性 Rails 專案搭配 Github Actions 進行 RSpec 自動化測試 JavaScript 中 require, import 的差別及效能 React 效能優化基本招 ES6 箭頭函式 (Arrow functions) 2 個月擁有 6000 用戶 Side project 這樣做(一) 如何用 Rack::Attack 阻擋 DDOS / 惡意流量 用 OpenSSL 自簽開發用 HTTPS SSL 憑證 為機器加上登入訊息,在 ubuntu 設置登入歡迎詞 Ruby Memoization 性能優化之記憶化 淺談 SSH agent forwarding 和 proxy command 的安全風險與應用 [Rails] Service / Library / Concern 的差異 避免過度的 Defensive Programming 防禦性程式設計 1:1 攪亂器,如何用 Ruby 做可逆推序號 Rails 中的欄位及方法命名原則 [Rails] 用 puma-dev 作為本地開發伺服器 (支援 https 自簽憑證) 將 Rails 專案從手動部屬遷移使用 Capistrano 自動化部屬 工程師提昇自己的教學和簡報技術的方法 [筆記] Rails 3.2 升級 Rails 6.beta 經驗分享 Class method 氾濫帶來什麼問題 RDBMS 課程心得與筆記 常用的 Rails 開發規範 Rest-Client 如何做 Basic Authentication 驗證 [Rails] 何為 tld_lebgth? 遵循 Semantic Versioning 軟體開發語意化版本管理 請直接在 MySQL 裡面直接用 utf8mb4 取代 utf8 如何解決在 awesome print 中遇到 ActionController::Parameters unable to convert unpermitted 如何在 Mac 上升級 PostgreSQL 並遷移資料 如何解決 Mysql2::Error: Incorrect string value 讀書心得 - 「信任因子:信任如何影響大腦運作、激勵員工、達到組織目標」 我是如何寫部落格筆記的 讀書心得 - 「先問,為什麼?:顛覆慣性思考的黃金圈理論,啟動你的感召領導力」 [Rails] 解決 Reset Password 帶來的 token 洩漏問題 我的軟體工程師生涯:如何挑選適合你的公司 Rails 中的 delegate 用法 淺述 SSR SPA 優缺點 Rails 非同步工作請用 Global ID [React] Class Component 傳遞 props 的 2 種方式 好用的隱私權政策 URL 自動生成 Rails 5.1 之後的 tag helper Rails 5.2 Encrypted Credentials 最近面試被給的建議和書單 一般架構需要用到 K8S 嗎 透過 commit SHA 找 github Pull request 從零搭建,如何讓 Rails 跑在 Kubernetes(k8s)(二) 從零搭建,如何讓 Rails 跑在 Kubernetes(k8s)(一) if/unless 寫作不要用多重否定句啊 盡可能的減少使用具感染性的 Try 或是 lonely/safe navigation operator ES6: export default 和 export 的差別 Load balance 負載平衡設計 搞懂 React 中的 state 和 props 物件導向基本原則 SOLID (Ruby Sample) React Stateless Functional Components 在以太坊智能合約上是可以預測隨機數的 在台灣租屋必須注意的事 Rails 5 簡單雙向加解密 如何用 ABA 培養自律型員工 調整一個 Postgres 參數,讓查詢速度提升 50+ 倍 不要在 rake task 中定義 method, 請用 RAKE::DSL Linux 反彈 shell 開啟後門 工程師應該知道的 C10K 問題 加速建造開發環境,用 Docker 建立 Bitcoin 私鏈 用 Truffle 開發 DApp 以太坊投票程序應用 Part 2 用 Truffle 開發 DApp 以太坊投票程序應用 Part 1 機會只有一次,產品的 onboarding 何其重要 [Rails] 禁止非 Production 環境下被搜尋引擎建立索引,提升網站 SEO 讓網站免費擁有 HTTPS 憑證,申請 Let’s Encrypt 並自動更新 快就是帥,加速你的 Rails 專案啟動時間
如何讓自己成為失敗的軟體工程師
2019-08-25 · via Nic Lin's Blog

每個人都有自己成長的節奏,對於成功的定義也是因人而異,在我們邁向所謂「成功」之前,我們應該瞭解何謂「失敗」。

在窮查理的普通知識一書提到,查理・蒙格最喜愛的一個美國老諺語:「我只想知道我將來會死在什麼地方,這樣我就可以永遠不去那裡」,聽起來很粗淺,但其實指的是你應該殲滅那些本就不該做的事,而只做該做的事情,也就是所謂的「不用試圖成為聰明人,而是持續試圖別變成蠢貨」。

那麼身為軟體工程師,在職業生涯的發展中,怎麼樣算是失敗呢?

也許是,你以為資歷十年的工程師,其實是一年的經驗重複了十次。

所以,這篇文章會說明要如何掌握訣竅的一步一步成為「失敗」工程師。

會動就好

coding 只要有一台電腦,搭配對程式語言瞭解的判斷式就可以開始撰寫了,這就和寫文章一樣,一支筆一張紙就可以寫出能夠表達的內容,然而文章的內容有的人可以寫出優雅的句子,也有人會寫出只有自己能懂得句子,寫程式也是一樣,並不是每個人都學習過如何「表達的優雅」。

所以有一類的工程師以 Get things done 為基準,只要能完成任務、完成老闆的商業邏輯,程式碼長怎樣不是很重要,反正其他的協作者只要花時間一定能看懂我的 code,看不懂是他能力不好。

總是 Work around 的訣竅

  • 不要學習任何 Best Practice
  • 不要學習任何 Design Pattern
  • 邏輯採瀑布式撰寫,不需要抽象
  • 不遵循任何 Convention

通常養成 Work around 的習慣之後,進階發展的技能就是 Hack around,一開始可能只是把東西寫死,但後來可能用各種奇淫技巧將程式盡可能搞到沒人看的懂得 Magic

自我風格命名

Naming is hard.

我們都知道面對各種的業務需求,在程式開發中的命名總是令人難以決定。

自我風格的命名不需要在乎其他協作者的感受,以自己鍵盤少敲為主,也不在乎什麼編輯器有自動補全。

讓命名失敗的訣竅

  • 使用自己發明的簡寫
  • 用自己懂的搞笑梗當作命名
絕對簡寫的命名
@ano = Announcement.last

# 但願所有開發者都能一眼看懂 @ano 是什麼
wd = Withdrawl.recent

# wd 是什麼?除鏽劑?
第一眼絕對看不懂的模組命名
module Kimoji
  ...
end

# 嗯,你 kimoji 了我並沒有
無法瞭解的使用者權限命名
User.last.rule
# Super saiyan <== 可以解釋一下超級賽亞人是什麼權限嗎 Orz?

用力替自己造輪子

在做選用套件時,往往會有技術評估,評估這個套件我們是不是要加進來做為使用,是否有社群維護來支持日後的升級?是否符合我們商業邏輯所需?

我們應該自己寫還是用別人寫好的?

成為造輪子高手的訣竅

  • 無論如何,自己寫
  • 相信自己寫的東西很棒,不需要寫 Unit test
  • 如果開源的專案有漏洞,我們不會被影響

這樣一來,製造了更多的工作,成為了不可取代的造輪子工程師

喜歡手動勝於自動

懶惰且有能力的工程師會將日常重複的工作嘗試往自動化或是更有效率的方向發展,而有毅力的失敗工程師更樂於將經常性的工作視為日常任務。

成為手動王的訣竅

  • 能手動 key 指令就不寫 script
  • 能手動翻 Log 就不用 Error Tracking Service
  • 就算團隊框架已經使用 ORM,仍堅持一字一字敲出純 SQL
  • 能一個字一個字打就不用自動補全
  • 有十台機器要裝環境,能手動裝機,就絕不用 devops 工具

總是給意見不給建議

在討論或是 Code review 時,總是給「意見」而不是「建議」

成為意見小霸王的訣竅

  • 使用主詞都是「你」怎樣怎樣,或是「我」怎樣怎樣,不許用「我建議」當作開頭
  • 提供自己未經求證的幻想理由要求他人需要按照我的意思

寧願百處寫不願一處收

當我們在專案內已經四處看到重複的程式碼或邏輯,當我們要再次寫出一樣或類似的東西時,我們不需要抽象或整理。

只要繼續 Copy paste 就可以了,絕對不要 refactor,到時候有 Bug 壞了的話算在我頭上怎麼辦。

到處寫的訣竅

  • 不需要遵循 Don’t repeat yourself,重複十次也很好,正所謂數大就是美。

一試成主顧 Try Error Coder

寫不出來就一個一個嘗試,反正語法兜一兜結果出來是對的就可以了。

不需要瞭解自己的 code 是怎麼寫出來的,只要知道可以動就好。

成為 Try Error Coder 的訣竅

  • 不讀 API 用法
  • 寫 code 前不先思考邏輯,而是直接拼湊
  • 上網直接 copy 範例,改看看能不能符合需求

OK 繃萬事都 OK

當發現有 Bug 時,直接在該處掩蓋問題,像是把 OK 繃貼起來一樣。

來一個問題修一次,來十個問題修十次,不需思考原因或改善架構的問題,只要能把程式弄到能夠正常運行就可以了,有沒有 Side Effect 也不是很重要。

成為 OK 繃王的訣竅

  • 不需瞭解 Bug root cause
  • 使用隱諱寫法,例如直接隨便包一個 Error exception 處理掉
  • 有 Bug 直接進 DB 改資料,反正 application 不會再噴錯就好

技術才是一切

在公司實現業務邏輯時在乎技術細節高過於一切的想法,從不認為使用者角度重要,而以技術實現難度取決於是否實作。

成為技術王的訣竅

  • 不需瞭解使用者或產品
  • 反正幹的出來或是能用很潮的技術解決就行
  • 沒有業務視角,只要有技術視角就行

沒時間寫測試

時間就是金錢,反正我沒有很多金錢所以不寫測試,因為寫測試無法直接帶來好處。

如果有手動沒測到的 Bug,修就好了大驚小怪什麼,爆一個修一個這是負責任的行為。

成為炸彈魔的訣竅

  • 絕對的認為測試是 QA 的責任
  • Code 手動測過幾遍就可以了,不需要自動化測試

霸王硬上弓

Git 推 Code 默認加 -f,不開分支直推 Master,如果衝突了就是刪掉你的部分,或是留給你解。

任何和團隊有關的操作只要我自己知道就可以了,其他人自己看 Log 或是通靈應該會知道的。

成為小霸王的訣竅

  • Commit 直推 Master 不要浪費時間去開 PR
  • 調整了機器上的某個設定調完自己知道就好,絕對不可以告訴其他同事

平行時空旅人

絕不參加社群,不和社群上的人有來往,不需要和其他人討論有關開發、設計的大小事,這樣就不會遇到比自己還強的人,只要自己認為對就是對。

成為時空旅人的訣竅

  • 禁止參加技術會議
  • 禁止參加 Meetup
  • 禁止和自己不認識的人討論程式開發相關問題

小結

不怕一時的失敗,只怕日積月累到已和失敗習慣共存,想得到失敗的訣竅就是從不檢討自己,不從自己或他人的失敗經驗中學習,經驗是寶貴的,我們都希望自己能夠持續勝利和避免惡果。

我們都想成為更好的工程師(應該吧?還是其實你覺得還好 XD?),在此之前我們也應該要懂得如何成為他人或自己眼中的失敗工程師,畢竟知己知彼百戰百勝,想知道怎麼走到成功就要先知道怎麼達到失敗。

就我認知而言,我認為 coding 是一個沒有極限的職業,本文的例子是在漫漫開發道路上聽過遇過見過甚至是回想起以前的自己所蒐集的案例,希望在未來的日子我們都能警惕自己避免掉坑,並且不斷的精進自己。

最後,如果你想補充案例,歡迎留言 XD