: 目前是找工作找到懷疑人生的初階工程師。
: 想以Java為主要工作語言來點技能,但去了幾間公司面試後有點疑惑。
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^這麼想的原因是什麼?
不是說專注於Java技能培養來選工作會有什麼問題,而是你的動機與原因如果跟現實
有偏差,即使別人選Java走得很順、換成你也有可能過得糟
: A公司是使用Spring boot技術,但也有接觸aws, gcp等等。不是說專注於Java技能培養來選工作會有什麼問題,而是你的動機與原因如果跟現實
有偏差,即使別人選Java走得很順、換成你也有可能過得糟
: B公司似乎java研發為主,雲端的部分是其他部門進行維運。
: C公司似乎流量比較大,使用noSQL技術、時序資料庫、多主機自動化部署,並使用
: java開發app及web。
我先假設你目前找工作的考量,是以職涯發展性最大出發來選,其他什麼月薪多一萬、
工時長短等等的都可以犧牲,那其實公司用什麼技術、用到什麼程度並不是首先得問的
我還年輕、還無憂無慮一人飽全家飽的時候,以下是我考慮公司時會第一時間問我自己
的問題:
1. 這間公司所主攻的市場是向上還是向下?
2. 這間公司的產品在市場上有競爭力嗎?市佔率會上升嗎?
3. 這間公司的產品的核心競爭力是建立在軟體開發水平上嗎?
4. 這間公司處在哪個時期?黑暗摸索、快速成長、成熟高原?
5. 這間公司的主事者對市場競爭有企圖心、積極投資產品研發嗎?
如果我真的以職涯發展為第一優先,那除非我目前程度真的很差,不然以上任何一個問題
答案是負面的公司,我早年都是不考慮加入的
這些問題都通過了,才來看他的技術用什麼、用到哪裡
: 會處理高併發問題是必備技能嗎?需要專門挑選可以處理此問題的公司
: 以增加技術能力嗎?但看起來要處理這些問題,好像不是java技能的精進,
: 而是朝像docker, H8s技能點?要點的話似乎aws比較是主流?還是說其實台灣本科系
: 畢業docker, jenkins是基本知識呢?(我在國外學習,確實遇過熟悉這些的印度人)
處理高併發在台灣可能不是必備技能,但出了台灣任何產品服務以純軟體開發為核心的
中大型公司是必備技能,senior backend 以上對高併發沒想法的人(知道不同量級同一
個問題解法如何不同、如何過渡)只能在還沒賺錢的startup 做POC/MVP,等到量突然上
來了就得準備拿著選擇權滾蛋了,因為你寫的程式對公司在有效產出上是負的
管理Docker image 給大家用,確保全公司有哪些共用預設的program 要裝哪個版本才
不會衝,這個不見得是必要的,但是知道Docker 在整個堆疊的哪個位置,知道公司用的
CI/CD pipeline 怎麼跟Docker運作,知道怎麼查找你要的image base據以開一個懶人包
方便同team 的開發者在localhost 跑系統堆疊,這些技能是有用的
當然,如果你跟我一樣懶,就是很討厭在localhost 跑一堆不是自己寫的服務,那也可
以把公司的Dev env VPC 的Bastion開好,然後locahost Application 所有的upstream
service call通通都走ssh tunnel ,每次localhost app啟動前就是執行一整串ssh
tunnel 指令
但如果你要alter table schemas,那migration script還是乖乖先在local docker跑過
確認一下吧
K8S是看組織規模的,如果你考慮未來要去夠大的公司、參與高複雜、要求HA等等等
的MicroServices 開發,那學起來不會虧
相比來說,Jenkins 我不會推薦特別去學,除非有老系統懶得搬家繼續用才去臨時抱佛腳
現在不管是GitHub還是CircleCI 都很強大,想做什麼都能做,而且持續進步,隨需scale
out,自己家養一個還要維護、介面古老、功能陽春,用起來實在切心
AWS 我個人是比較喜歡,GCP 有些東西選項比較少,但不管哪個我都是terraform 下去
所以也許最重要的是要學terraform,另外練習如何用chatGPT 問出你要的設定是重要
的技能,不要再像我小時候那樣嗑完reference 才開始做事了
不同的專業領域要求不同,我就說senior backend eng的問題意識吧,憑印象列一列,
其他的我也不敢講:
一個對外服務的系統,它的主架構長怎樣?request 怎麼流?從internet request 開始
到後面會產生幾個requests 到哪幾個services上?那些services 背後採用哪些資料庫?
哪些middleware?哪些cache?BI 那邊可能有哪些需求?需求的即時性有多高?
ETL cron job 要怎麼跑?Kafka 或是event queue等應不應該收到通知?
系統任何一點要是突然拔插頭該如何應對?GDPR/CCPA怎麼滿足?
Logging/instrumentation/healthcheck 等用什麼平台處理?如何降低成本?
在特定的Cloud 上(AWS/GCP) 目前的開發需求有幾種方案?哪個在開發時間/運作成本
比較上最划算?
目前公司採用哪幾種程式語言作為主力?這些程式語言在公司內總會形成套路堆疊的,
目前採用的軟體堆疊定式還符合需求嗎?
: 產業狀況問題有點多,謝謝。
待遇問題我太久沒在台灣找工作或負責徵才了,很難回答你,但關於Java 知識的複習
首先,你不可能憑著空氣去把Java寫好的,你只能沈浸在實際存在的嚴苛需求與困難
問題中掙扎,然後盡可能做到最好
就想一下,難道我現在看著課本用力解題,哪天就會有誰跑來問我:
『啊你Java 寫得怎麼樣?』嗎?
不可能嘛,就算有,那個問問題的應該也沒多厲害,因為這個問題本身就是錯的
我們只能說:
『我曾在哪間公司,開發過XXX系統,在開發某某功能的時候,我曾經思考過哪些方案
,後來挑了哪一個,原因是為什麼,最後開發時程多長、QPS撐到多少沒問題,運作成
本多少』
bla bla bla 可以連續講下去,如果他不阻止你,你甚至可以再挑兩個案例,每個都講
一兩個小時
只要能解決的問題夠難,能很好的呈現出你是如何思考、如何解決問題的,證明投資
在你身上未來產出相當不錯,那就夠了
Java programming ability 只是做軟體開發的基本能力之一而已,追求這個能力確實
是有助於提升開發實力並且能面對、能處理複雜的程式碼與較為成熟的開發模型與較
大規模的系統架構,但他不是最重要的,也不是未來薪水會不會漲、開發實力會不會
變強的關鍵因素
一個技術人的技能樹發展,是由他經歷過許許多多開發團隊的職務需求推動的
開發團隊的職務需求,是由每個當下技術軍備競賽的炙熱程度來形塑的
技術軍備競賽的天花板,是由市場大小、市場評估產品價值有多高、毛利率決定的
一家公司說他用Java,到底是他一直以來都用Java所以只會Java?
還是他的團隊規模與開發複雜度適合用Java?
所以如果沒有要跟特定的技術談戀愛的話,職缺拿到,首先先看看市場、看看軍備
競賽的炙熱程度、看看他們的產品、看看他們的企圖心,都看完了才會來看技術要
求相關內容
至於Java 不Java,對自己的起許不要那麼低,去對公司的話,兩到三年我上面講的
東西都有機會、甚至是必須摸一遍的,出了學校是沒有那種:『給我一個月的時間,
我把它學好再來』這種事,所有的東西都會不預期的噴到臉上,在有了chatGPT、
github copilot 的時代,我們都必須堅定地相信自己可以快速找到答案,然後把查詢
結果內化成自己的知識,之後就要能隨心所欲地使用,辦不到那就別做這一行了,
後面只會更苦的
--
在灣區打工的中年外籍碼農,有誰想在台灣組研發團隊做美國市場的,歡迎聊聊
--