我在中國讀的大學,工作了7年之后,移民到了澳洲,文中的經歷,一部分是中國的,剩下的都是在澳洲遇到的。
下面的文章夾雜了不少英文,那是因為這些文字都是我在澳洲寫的,習慣而已,不是你們想象中的所謂裝逼,謝謝。
本文是我的個人經歷和意見,請取濾網三錢,溫水煎,和著服用,謝謝。
協作與交流
入職
不管你在以前多厲害,有多豐富的經驗,去到新公司,都要重新學習,撇開業務邏輯,我們還需要學新的編碼規范(不管你是否認同)、開發流程與守則、工具等等,更耗時的,是理解他們的開發框架,每個公司都有自己的一套(很多可能重復發明了了輪子)。
心態很重要,沒有端正心態,很容易造成失衡。一些人一夜暴富(如中獎),然后大肆揮霍,最后比暴富前更窮困潦倒。入職新公司,可以放低身段,畢竟你掌握的技術是一回事,學習公司各種文化、流程、規范、業務邏輯等等都要花一段時間,不能一蹴而就,否則落差太大,事與愿違,如牛入泥潭,強烈的無力感。
一張廁紙,都有它的作用。每個技術公司都有過人之處,我們要關注的,不是那些不行的地方(有待后續解決),而是尋找那些有營養的干貨,學習之,提高自己。20/80法則,20%的公司牛,那就算差的公司里,也有20%的人尤為突出的,要向他們學習,看他們寫的高質量代碼。
從一個公司角度來看,評估員工的表現,不是看他以前多厲害,經驗多豐富,而是看現在為公司的貢獻。所以,一些時候出現的情況是:“我自認水平很好,為什么公司給我的回報沒有我想象中那么多?”
去到一個新公司,心態要擺好,低頭做人,努力學習。或許,有一些同事,覺得你空降過來,不會持有熱烈歡迎的態度,所以,做好本分的事情,不需要奉承別人,也更加不要得罪別人,平常心看待。
每去到一家公司,我會嘗試笑著面對每個遇到的人,甚至說一聲Hi,如果對方沒興趣,那沒關系,我不會因此臉黑或者不爽。笑著面對各種問題,自己寫的爛代碼,含著淚也得把它重構好。
同事/領導/職場
林子大了,什么鳥都有,公司大了,什么人都有。有人的地方就有江湖,有利益的地方,就有沖突。
澳洲,跟美國一樣,是移民國家,一般每家公司都有各色人種。文化的差異,語言的溝通,總會造成各種矛盾。
根據這些年來的觀察,沖突一般有:1、邀功,當你辛苦干完活,別人把功勞拿走了;2、推卸責任,不是你造成的問題,別人強加于你身上;3、小圈子排擠外人。
說到底,工作就只是一份養家糊口的事情,其它都是不重要的,把這個想通了,一切都好辦了。把心態擺正,把事情做好了,就行了,很多事情無法控制,當然,我們要懂得不要給別人留有藉口揪你小辮子。
每個公司都有各種問題,進新公司之前,大家習慣設想新公司怎么怎么好,自己的計劃如何順利開展,現實,往往不是如你所愿。所以,要做好最好的準備,最壞的打算。
辦公室不是找朋友的地方,必須時刻提防各種辦公室政治,披著羊皮的狼,是最危險的,越天真越容易中招,不大有人會踢一只死狗,槍打出頭鳥,你越出色,越容易招惹是非,要混得開,低頭做人很重要。
對美女來說,“天生麗質難自棄”,想突出自己把自己的優勢最大化。職場,大部分人都想出人頭地,努力往上爬,加薪升職。然而,事與愿違,總有“老子干得很不爽,去你大爺的!”的時候,如果你真有心有力,確實是可以去創業,不需要受各種非人的委屈。
一言蔽之,要干得爽,還是需要自己創業。
公司S,心累,現在公司部門和部門之間有嚴重的斗爭,各自為政,根本就不是想干活的,惡心的事情很多,譬如部門老大不干活,讓小弟干,小弟工作繁忙壓力大就爆脾氣,說話不像人樣,然后部門老大就各種推卸責任,還美化之,去它大爺的 。
公司B,三個印度碼農在印度,一個大胡子孟加拉國的,一個剛來澳洲兩天的伊朗人,一個來了澳洲很多年但口音極重的越南人,一個還在馬來西亞下個月才來報道的碼農,加上來自黎巴嫩的上司,還有我,真的是聯合國。
公司K,精神分裂的部門女同事,菲律賓大媽,在公司呆了18年,在CTO背后聯合她的兩個馬來西亞小弟直接跟CTO的上司說CTO各種壞話,在CTO面前老裝很友好地狂笑,對待客戶是一樣的做法。
公司T,當年很純真,但已經目睹了各種利益糾紛。公司和別的公司協作做的GSP系統,一個醫藥銷售系統,產品做得差不多了,各種糾紛,后來產品就爛尾了。
公司T,我離職,老板請大家吃醬板鴨,味道特別棒,至今難忘,離職后還和老板保持了多年的聯系,每年春節還發祝賀短信,很精短,都是手寫的。
工欲善其事,必先利其器。開發工具,是開發中重要的資源,公司不應該在這塊上有任何吝嗇。
公司S,我入職后發現開發部的機器,最老的7年了,新的也有3年老了,沒改一行代碼,重新編譯,需要5分鐘以上。跟我一起入職的有4個新同事,公司給我買的電腦是給其它同事買的3倍價錢,IT部經理一臉正經地跟我說:你丫的應該覺得慶幸拿到這么貴的電腦。但我一臉無奈地跟他說:“雖然你買的是我要求的ThinkPad,我我希望是t4xx,你卻買了exxx,我才不想要呢!”。新來的項目經理對公司安排給他的新手提電腦很不滿意,一大早打開的時候就已經用力噼噼啪啪了,還吐槽連HDMI接口都沒有什么的,下班快走的時候還吐槽這i3 CPU配置都8年老的了。首先,講道理,每次i3換代都有新版本,不能刻舟求劍,但是,省這幾百塊不值得。
客戶
客戶是不講理的上帝。
你的代碼寫得那么爛,你的客戶知道么?
公司S,做IT的同事告訴我幾個真實的故事,忒搞笑了,其中一個是:客戶說電腦不正常,同事遠程協助,很客戶說:“close all the windows“,然后客戶說“done”,同事說我這里看見還沒有關閉啊,客戶堅持已經關閉。爭論半天,最后發現客戶關閉了的不是“窗口”,是“窗戶”。
公司S,有一個潛在客戶發來合同,要求我們的系統一年365日,100%在線,如果服務down了,按分鐘賠錢[允悲]。
客戶的需求,沒有明確目標的居多,需要逐步引導,按優先度和難度分期實現,否則很容易爛尾。
技術與質量
學習
只為一家公司賣命一輩子的,少數。即便只為一家公司干活,始終會有產品改進甚至更新換代的一刻,不管是用戶量上去了,還是用戶需求變更了,那總要學習新技術。一些公司,系統多年不改進,員工就無欲無求了。等離開公司的一刻,才發現自己與社會脫節了,這種如溫水煮蛙,所以早就了很多養老心態的老油條 。
公司C,一個資深碼農,離職之前,考高級程序員證,惡補,拿到證之后,離職了。
我不是喜鵲碼農(The Magpie Developer),不貪新厭舊,確實太多東西需要學,數據量太大了,每天太多東西可以學,時間不夠。舉個例子,基本的日常使用的工具,如開發工具,譬如Visual Studio,即便你每天用,很多有用的東西我就是沒留意,舉個栗子:你知道怎么快速復制、剪切、刪除整行代碼嗎?刪除一個詞呢?再舉個粒子,SSMS(SQL Server Management Studio)里面,怎么快速查看一個對象的相關信息,如一個表,顯示所有字段、主鍵、索引、約束等等?
最近看越來越多的網絡資源,一些要收費,如一個網站提供了專業面試國際大公司的一對一指導服務,全程真題,還有全球20多個著名Web2.0公司的系統設計詳解,也就幾十刀,值得買。
看過很多技術文章,一些網站追求一些非常入門的內容,譬如怎么做個多級菜單,動畫效果,等等,放在首頁,而一些干貨文章卻被忽視了,悲哀。
大部分碼農都只擅長一種技術,所以選擇的時候應該選擇一種不容易被淘汰的技術(中期還是主流的),譬如.net,現在各大平臺都能用而且生命力很強,在上升階段。前端,臟亂差,但學好JavaScript不愁吃穿,圍繞js的各種框架可以學一下主流的。
技術是相通的,不同的技術棧,技術思想是相仿甚至一樣的,所謂一理通百理明,所以,有全棧的開發人員,從Web前端一直到后臺、數據存儲,還有所有之間的技術如安全、日志、隊列等等。
即便不睡覺,也不夠時間學習可以學的東西。所以,只能挑食,籠統地學一下大部分新技術,最關鍵核心的,可以深入學一下。
技術選擇
前端、后臺、數據存儲,都有亂象。
前端尤其亂,對日新月異的那些前端技術無力吐槽,簡單來說,就是臟亂差,可惜,技術負責人,沒有把好關,選擇了錯誤的技術。
技術選型,決定因素很多,譬如技術帶頭人,譬如技術儲備,公司現有情況,等等。著名云程序日志記錄提供商raygun,幾個月之前扔掉node.js改用.net core,性能提升20倍。但就是有些公司的技術人為了反對而反對,選擇一些不切實際的解決方案[攤手] 。
舉個栗子,譬如SOA家的微服務的設計與使用。網上諸多最佳實踐,在多數公司里面都沒有、也不會實現 ,不管是決策者、財力資源、還是人力資源等限制 。大家審視一下現在公司的系統, 你連現有系統的的基本的模塊化做到了嗎?如果沒有,憑啥你就覺連模塊化就做不到就能把微服務做好? 甭想微服務了。微服務不大適合初創或小公司,Martin Fowler說過,上微服務需要現有的流程、監控、快速發布基礎, 而且發布的成本和復雜度比單系統服務高,服務間的網絡數據交換成本額外高,本地開發測試復雜度和成本也高。 遇到異常,還是看業務,一些transactional的該怎么樣就怎么樣,一般流程化操作,如用sagas,容易導致死流程,這種怎么監控和解決具體問題具體分析。一般做法是有機制重試n次后還不行就escalate到IT,還有日志這塊也是很多坑的。
繼續這個栗子,微服務的基礎,用公有云的話,論靈活性,那就azure function;論scalability,還是azure batch吊;論可控性,還是service fabric強;論簡單易用陪流程,還是azure logicapps好;論業界認受度,還是Amazon家的AWS λ 吊。
MYOB是澳洲著名的老牌會計系統,直到幾年前他們的解決方案還是Windows桌面程序,客戶需要用citrix遠程進去跑的。。。anyway,原來這公司的名字是Mind Your Own Business的縮寫。
公司C,當年O/RM流行沒多久,entity framework還沒有出現,我們用的一個商業的,性能很爛,批量生成數據的時候整個界面無法響應(當年我們都不懂異步處理)。
公司C,微軟推出了和macromedia(還沒有被Adobe收購)的flash對抗的Silverlight,設計思路是好的,性能都比flash好,漏洞遠沒flash多,技術負責人說,我們下一版本要用Silverlight實現,當時他說:“我們要做銀光版!”
爆棧
最近的爭論,懂一個Web前端框架,然后試圖搞定后臺和數據存儲,還有之間存在的各種數據交換、流程處理、安全、擴展性、潛在性能問題(各級cache、sharding)等等,很難。因為每個都有太多太多的坑,不把這些坑踩過就說可以搞定全端,有點難度啊。
我之前反復強調我不僅僅是全棧,我還是#爆棧#。技術體系,需要時間去構建,融會貫通。聽過、會寫Hello Kitty、懂用、掌握和精通是不同的,需要多讀多動手,把坑踩了,跌得越痛,認識越深入。
上大學的時候,導師用跟我們說過赫胥黎的名言:“learn something of everything, learn everything of something“ (盡可能廣泛地涉獵各門學問,并且盡可能深入地擇一鉆研)。我們可以全棧,但起碼有一樣是研究的特別通透的。
質量
在編程的時候,我們一定要想象一下,以后維護我們自己的代碼的那個人會成為一個暴力的精神病人,并且,他還知道我們住在哪里。
MVP,對體育運動來說,是most valuable player(最有價值運動員/球員);對開發人員來說,是most valuable professional (最有價值專家);對產品開發來說,是minimum viable product (最簡可行產品)。一些公司開發系統,一開始就勾畫宏大的愿景,幾個月甚至幾年之后,產品還是沒有見蹤影。相反,一些公司追求最小化的可行產品,每個版本只發布一個新功能。
產品質量、功能和時間這三者里是互斥的。要質量和功能,那么時間就得延長;追求質量和時間,那么功能就要砍;趕時間和功能,那么質量必然下降。
看了很多公司的系統,就像在吃蒼蠅。
大家看過少林足球,吳孟達樣子和口吻:“代碼,不是這樣寫的!”
怎么給垃圾系統擦屁股:你被扔了一坨熱氣騰騰的爛代碼,幸運的話只有幾百萬行,沒有注釋,僅可能有的就是早已過時的文檔,寫這些代碼的爛碼農早已去逍遙快活。
公司X,第一天,下班了,累癱,腰酸背痛。首兩周都是各個部門的不同人來介紹公司、各種業務、各個系統,找了幾個機會跟開發團隊聊了一下,順手看了一下他們的開發,具體就不談了。
公司業務成功,和開發不是正相關 。很特別是那些行業系統,只要銷售人員足夠強,不管多爛的系統都可以大賣,所以,很多公司的銷售人員收入很高。
公司E,硬度公司,公司絕大部分是硬度菊苣,部門都是硬度碼農,除了我。主系統登錄頁,老板要放一個配合公司LOGO的動畫,硬度菊苣就設計了個gif動畫,彩虹波浪線不斷翻滾,但頁面加載很慢,整個窗口響應也很差,鼠標挪動都有問題,我一查,原來那個gif大小是全屏幕的,超過5兆。。。
公司B,客戶端用OLEDB從Visual FoxPro讀到DataTable,序列化到JSON,壓縮,存到Azure BLOB,然后寫相關記錄到Azure Service Bus Queue,服務器端Service Bus接收到信息,取相關BLOB,解壓,反序列化,再Bulk Copy到Azure SQL Server的臨時表,再轉換格式化各字段讀關聯表,最終到達目標表。。。蛋疼的感覺?
公司B,巴西碼農,為了格式化法國人名常見的組合名(就是名字中間有-、·、空格等符號后面第一個字母要大寫),他洋洋灑灑寫了80多行代碼,逐個字母替換,而且為了應付空格,又重復了一遍。。。。
公司B, 又優化另一報表,初步加了索引重構邏輯后,從原來超時到現在1分26秒,再分析,發現另外一個瓶頸是引用了這函數,報表先調用一個主的人名格式化函數,這函數再多次調用上述那函數,重構后,只需要6秒。
公司B,挺無語的,部門一碼農,一個流量值(字節)要格式化顯示成兆,他直接/(1024*1024),根本不明白那些小數就不能顯示了,然后呢,還Round兩位小數,問和尚借梳子啊。
公司B,數據庫那塊,簡單地說,就是數據庫規范里面的第1/2/3范式都完美地忽略了 。。。前端界面對一些字段沒有做校驗,所以系統跑的時候各種爆,譬如期望是數值但里面有各種詭異字符,期望是郵箱地址但是文字。。。日志那塊,每個方法執行都做一下開始/結束日志,隨便點幾下界面,幾百K的日志內容[攤手]
我發現,懶/爛碼農,很喜歡復制粘貼。
公司S,部門一開發人員,擅長復制粘貼代碼,原本幾百行的代碼,硬生生搞成1萬多行。他說:“我寫代碼,瘋起來,我自己都害怕!”某天,這個碼農在看自己的代碼的時候,迷茫了,看不懂了,代碼邏輯流程太亂。所以,他只能打開Visio,逐步把邏輯畫出來了。。。[攤手]
公司S,系統是asp.net webform + vb.net + 大量第三方重量級UI控件,前端、后臺和數據庫性能都很爛,根本不是SaaS,也不支持多服務器,各種各樣的錯誤。我躊躇滿志地來到公司,第一天就跟大家說:“做開發這么多年,爛代碼我看慣了,所以大家放心,不管多爛的代碼我都可以重構改造的”,3個月后,我歇斯底里地指著屏幕上的爛代碼,狂叫道:“你們這樣寫代碼是不人道的!!!”
公司S,系統各種問題,性能表現差強人意。其中一個表現是,越越來越慢,譬如同一個功能,所以參數一樣,今天跑5秒,后天6秒,大后天7秒這樣。。。最后發現還是跟我之前優化的日志有關,雖然改成異步批處理,但是日志基于文件,每個最大2M,不斷翻滾,日志文件名邏輯是掃描所有文件來取下一個文件名。
公司S,一天,分析了一下數據庫,一個客戶7天做了150萬次數據庫讀操作,約讀取了200G數據,加上前端那些Web Form冗余HTML,實際從服務器上走出的數據是很夸張的(按我司的規模),數據庫請求延遲更厲害,一個客戶每次請求都要等0.2秒。
公司S,存在多個業務邏輯錯誤問題。客戶反映數據有問題,部門的同事分析數據和代碼,最后發現關鍵邏輯是讀的配置文件,而這個配置是應該按具體客戶的設置來的,但變量寫成了static。
公司S,系統運行時大量日志生成,同步寫入日志文件,我改成了異步。還有,每個頁面加載完成,都記錄一下用戶的IP、加載開始時間、加載結束時間等信息,也是同步的,加上其它業務邏輯寫得不行,所以很忙,我也改成了異步,定時批量寫入日志。
一些公司的碼農,不把警告當警告,完全無視之。
公司S,主系統,編譯的時候,顯示254個警告,不能再顯示更多了。
公司S,下班前,每周五全員工公司例會中,一個IT部的同事問我:“Wilson,你們部門是否會把機器學習應用起來”,我心想:“你們連數據倉庫都沒做,所謂商業智能這只是做了些基本報表,數據量也不是很大,我以前隨便處理都是幾十億起跳的,還想機器學習???” 然而,我還是老實說:“大家知道Google alphago嗎?就是最近打敗了最牛的圍棋手的人工智能系統?”。沒人回答。我繼續“我們寫程序,是直接解決問題。機器學習,是我們寫一個邏輯,讓機器其去利用現有的數據進行分析找出最優方案,這是非直接解決問題,”
數據從用戶在界面輸入開始生命周期,經過傳輸到達網站,經過處理(譬如ETL),再存到數據庫,后續還可能有數據倉庫二次處理等,最后數據失效被刪除。這中間很多事情需要做,但,最重要的第一步,是確保用戶輸入是校驗過的合法數據,否則進入系統后造成連鎖反應,修復成本太高。
我服務過的很多公司,界面輸入缺乏基本的校驗,譬如長度,用戶輸入長一點就爆了。郵件格式也不判斷,系統發送郵件的時候各種爆。
公司S,系統設計有問題,實現有問題,運作有問題。拿各種通知客戶的定期報表郵件,地址完全不校驗,同一個客戶出現幾十種的郵箱域名,譬如正確的是foo.com.au,實際出現:foo
coma.u, foo.com,foa.com.au, foo.com.。..。,一些明顯是不合法的格式,一些是不存在的域名,等等,發送的時候也不校驗[攤手]
公司X,系統各種安全漏洞,SQL注入輕而易舉。
遇到過各種奇葩軟件/系統設計,譬如LinkedIn Android版,經常告訴你無法發送內容,不告訴你為什么,之前打的長長內容都丟了,根本草稿等臨存功能。一些銀行的app,允許你增加、減少每日轉賬額度,但根本不告訴你要增加到多少或者減少到多少[攤手]。
公司S,現有的系統10多年前開始寫的,技術陳腐,其中一個功能是根據不同客戶不同產品從可自定義模板那里動態生成表單,這個功能是用的第三方的,本來不復雜,但隨著業務發展,現在單純渲染界面的代碼行超過10,000。我在用angular改造,目前代碼行200,可以顯示了,接下來就是做一些交互[攤手] 。
公司S,Web系統性能差,有幾個原因,其中一個,是HTTP壓縮都沒有啟用,頁面/資源加載都要用較長時間,我發現之后,順手啟用了[攤手]
公司K,系統的數據庫設計很多奇葩的事情,就命名這塊就看不下,用戶標識(UserId)這個,同一個數據庫里有以下各種形式:UserId、UserID、user_id、userid、iduser、USERID、id_user等,而且大部分是同一個人搞的 。
公司E,隔三差五發現公司印度菊苣們寫的代碼好多坑,譬如前端js肯定就不判斷對象是否null,直接取屬性,然后后續的代碼都無法跑了。后端的代碼更奇葩,直接try/catch抑制錯誤(catch無任何邏輯),今天發現一功能無法跑,分析后發現,數據庫表字段類型是nvarchar,代碼里定義是int,菊苣不解決抑制錯誤就完了
這么多年來,各種平臺,看見過各種軟件的奇葩實現。
公司Z,現在的業務系統,一個復雜的申請流程,所有數據都暫時保存到cookies,今天終于爆了,客戶的一個下單JSON后超過4k,boooom!
寫爛代碼的人多用舊版本的語言,這樣他們就能名正言順地不用新版本的語法糖來精簡代碼。譬如c?的自動屬性,expression body、LINQ等,他們都不會用。更惡心的是重新發明更爛的輪子,數值TryParse、DayOfWeek等重搞,最惡心的是壓制錯誤:一個對象幾十個屬性,不判斷null,幾十個try/catch逐個屬性輪 。
公司A,數據庫這塊,因為某GIS產品Web服務的特點,把數據庫分割為:每個客戶3個數據庫,然后呢。。。然后服務器就幾十個數據庫。。。。其實做到一個數據庫是沒有什么難度的。。。。可以預見以后各種血淚 。
公司A, 開發這塊。。。之前弄過Windows Mobile,后來用Sharepoint(怨念!) + Silverlight(怨念!!)。。。。。加上某GIS產品+.NET插件(啊啊啊),現在在上馬#WPF#(怨念!!!),然后準備招聘iOS開發人員和Android開發人員(啊啊啊啊。。。
公司A, 做的產品主要是基于GIS的產品,給服務人員提供地理任務標注/指示,然后開展工作。然后呢。。。。#沒有自己寫的服務器端#,#不直接存取數據庫#,完全用某GIS產品提供的Web服務。。。。然后性能各種爆。。。。。。。
公司A,是典型的傳統使用微軟產品的企業,IT/基礎設施這塊都是AD/exchange server/SCCM等,最近弄了個JSP寫的helpdesk系統,所有東西都往那里扔,連新產品/新項目/改進都放那里,還包括bug管理。。。
公司B, 系統是Web應用,引用了大量的第三方Web前端代碼,超過2500個JavaScript、CSS文件。。。。每次發布要等好久好久。。。其實絕大部分都不需要用到,就是硬度碼農買1送10地狂塞進去,而且grunt build那套也不用,打開首頁的時間都夠我去找菲律賓妹子了
公司B, 相比上一家公司,這公司的產品狀況要好很多(盡管很多問題)。上一家公司的產品我接手之前只是基于第三方產品做擴展,完全不是自主知識產權,午飯商業化,我從頭寫,大半年完成,比第三方產品還好很多功能多很多。好歹現在的直接自主產權,技術較新,但坑多。
公司B, 這公司是和這行業的領先者之一合股搞的SaaS解決方案,軟件+硬件結合,市場很大,不過,合股公司總部就是倉庫,大家繞著會議桌開發,旁邊的沙發坐了一堆五湖四海的合股公司員工吃各種風味的午飯。。。新公司的工作場所還在裝修,隔壁,其實還是倉庫改造。。。
公司B, 需要使用的第三方系統,其市場占有率超過50%,但用的Visual FoxPro開發。。。。。。。。因為官方沒提供API,我們的玩法是直接逆向工程數據結構然后自行山寨業務邏輯玩弄數據。。。。。、、
公司B, 8個硬度碼農(已經炒掉5個)做出來的web系統,后臺ASP.NET MVC+nhibernate。。。每個controller都automapper create一次map。。。還直接數據CRUD。。。前端angularjs,每個controller直接http req。。。各種null ref問題。。。
公司A, 我發現了,代碼的質量很差,主要原因是:大量復制粘貼、反復操作(譬如反復的獲取同一個值做而不是讀一次做變量)、冗余的循環、沒有使用較新的語法糖(譬如lambda)而自行弄10多行代碼實現一行LINQ搞定的、很多情況都沒考慮大小寫敏感,強行catch異常而不是判斷
公司A, 入職一個半月,發現前任挖了很多很大的坑,一些短期內無法填,一些長期也無法填,怎么辦?逐步填,一天填一個唄。
公司A, 開發,是典型的四無:無設計、無文檔、無規范、無流程,無法無天(噢,五無了)。數據庫設計亂七八糟,性能極渣,處理幾百萬數據的ETL也要跑幾個小時,還會內存耗盡(32G)。。。。代碼那個更無法吐槽。
公司A, 產品用的C#開發,Visual Studio做IDE,代碼管理用的SVN,陳腐得很。產品開發還是waterfall,新版本發布用windows登錄觸發復制更新,無力吐槽。。。給CIO建議,改用Visual Studio Online,搭配scrum,項目管理/代碼控制關聯起來,這只是第一步,還有很多需要做。
公司A, 雖然不同州不同客戶不同的業務需求,但絕大部分業務/邏輯是一樣的,完全可以把基礎部分標準化,但是呢,現在的做法是每個客戶單獨有3個數據庫。。。每次基礎功能/邏輯更新,就要更新幾十個數據庫。。。
公司A, 數據庫的更新允許通過sharepoint修改任意記錄,然后呢,沒有后臺邏輯封裝,然后呢,一些表大量觸發器,一些觸發器幾百行代碼。。。
公司A,產品的日常數據查看/修改,除了專門的管理工具/客戶端,還可以通過sharepoint來,有一個自定義的數據列表WebPart來綁定一個數據源,還有一個數據編輯WebPart,根據PK來更新數據,竟然允許直接修改任意記錄。。。。。沒有后臺邏輯,沒有存儲過程。。。我靠
公司A, 系統的部分數據導出和通知是用的python腳本,質量放一邊(容錯、復制/粘貼等),產品環境根本就沒成功跑動過,一個月多月了,沒有人去排錯。。。今天開會,我一下子就找到問題了,print組合輸出某數據庫值null。。
公司S,審查代碼,發現多個地方都出現一個詭異的邏輯,文件輸出的時候,定義編碼是GB2312,我跟寫代碼的碼農說:“可是,咱們不在中國啊[攤手],而且,那可是10多年前的做法啊[捂臉] 。
職業與事業
現實
鐵打的營盤流水的兵,大家都是可以被拋棄的卒子,不想成為邊角料,就要不斷提升自我。
職場如古代的歡場,上班族都是出來賣的小姐,區別是一些天生麗質技術過人的成了頭牌、花魁,日子自然滋潤,如果碰上要么色中惡鬼的土豪劣紳或一見鐘情的傻情郎給之贖身(大量股票&公司上市),那就可以安穩過下半輩子。否則等到徐娘半老只能被拋棄。少數早早財務自由,轉個身,還是做了老鴇(老板)
職場如古代的后宮,上班族都是佳麗,區別是一些天生麗質技術過人的成了各級妃嬪,日子自然滋潤,如果碰上皇上寵幸,成為高人幾等的貴妃(大量股票&公司上市),如果懷上龍種誕下皇子,那就可以成為寵妃甚至皇后(技術帶頭人)。否則等到徐娘半老只能被拋棄。少數早早財務自由,拿個封地自立為王(老板)。
追求
如果人沒有理想,那和咸魚有什么區別?
我不是普通碼農,我是傳說中的那種10x碼農,效率是普通碼農的10倍,但我的待遇是普通碼農的10倍嗎?不是。所以,我今天還得起床去搬磚。
出污泥而不染,濯清漣而不妖,用這個來形容我每日在爛代碼的槍林彈雨中匍匐前進而幸存下來,挺適合的。
追求,除了代碼質量,還有崗位,和待遇。
我那“離職公司就上市”段子大家都知道了,我經歷過幾次,2次錯過,1次主動放棄。中午請公司Z的技術總監吃飯,他是老員工,整個系統主要是他搞起來的,公司最近拿了幾億刀的授信,市值是1.85億刀,但公司只給了他價值6萬的刀股票。另外一個所謂的CIO,來了沒多久,沒啥大貢獻,但他要求不拿工資換股份,現在有4%,價值約740萬刀 。
追求,就是不甘于只完成任務,而是要做得更多。
多年前,因為要監控不同公司的不同系統運行狀態,寫過多個針對性的監控程序。做過一個分布式計算,c井寫的,RESTful API通信,cluster server發送計算模塊(動態的c井代碼)到所有tenants,每個tenant跑完代碼結果送回server,就是map reduce的過程。這種模式,可以做很多事情,譬如以前做過分布式查詢,任意客戶端(臺式電腦、手機等等)查找結果然后匯總 。做監控系統,遇到狀況就觸發條件然后通知相關人。后來改用第三方的,譬如Nagios,再后來,改用云服務。以前用過monitis.com ,還行,現在公司要這個功能,所以再做了比較,發現還monitis最適合 。
做公司S,我發現公司沒有這種監控系統,我主動做了出來,效果很好,找出不少問題,damage control比以前好多了。剛才監控到物理內存突然占用多了600M,分析后發現一個業務邏輯把整個數據表取出來在內存出來,空間占用1.6G。這就是追求。
公司S,花了些時間,給公司的系統做了個高度可配置的數據歸檔功能,可以指定任意來源和目標服務器、數據庫、業務表、數據記錄條件等,自動創建目標數據庫、表,完了自動備份壓縮、遷移等等,這個,是之前沒有人能做出來的。這就是追求。
公司S,主系統存在10多年了,當年沒啥設計,功能逐步堆砌。存在各種問題,性能問題尤為突出。主業務是各種數據的ETL,大部分邏輯都是逐條記錄寫入、更新到數據庫。譬如插入1萬條記錄,需要2分鐘。我改成批量的,0.4秒。。。還是太慢了[攤手]。這就是追求。
雖然我是爆棧,我偏好寫后臺邏輯代碼,因為前端代碼,好歹還得跑一下minify和uglify步驟,這樣別人才看不清你寫的代碼有多爛。畢竟,系統慢,你可以說是硬件差不是你代碼爛。其實,我還是都寫得很好的。這就是追求。
公司S,生產環境有備份(第三方的備份SQL server的備份文件),但備份是一筆糊涂賬,譬如隨機抽查嘗試還原,居然能告訴我那天的備份失敗了[攤手]怎么沒人通知??然后呢,換一天,數據庫本身的備份也失敗了,然而還是沒有設置通知[攤手]我看不下去,給備份結果做了通知,然后給之前寫的系統監控加了相關監控 。這就是追求。
現在上班每天還是堅持做些研發和寫寫代碼,最近在做系統監控的功能,全套, 爆棧,從前端(angularjs等)到服務器(asp.net MVC+Web API等),從客戶端(Windows service) 到數據庫(SQL Server等),每個模塊都盡量針對接下來做新產品要用到的技術的最佳實踐進行演示,編程規范等等都盡量覆蓋,給大家學習。這就是追求。
公司S,一天,所有網站服務全部停擺。查自己寫的log沒發現,查看IIS網站在跑,但應用程序池停,啟動再打開網站,還是不行,池還是停,如此反復,排查系統日志,池停止是因為hips模塊無法加載,追蹤是外包的IT服務公司擅自在工作時間安裝McAfee殺毒軟件,給IIS加模塊,IT卸載殺毒軟件還不行,最后只能由我解決。這就是追求。
公司S,每周開個workshop,主要說現有代碼的問題和怎么優化,還有各種場景的優化辦法和高效算法,給出benchmark,一些快幾倍,一些幾十倍,一些上百倍。還在ASP.NET Web API的基礎上搭了個Web服務框架,支持token,流量控制等,寫得好爽 。這就是追求。
我們心態不應該bottle half empty,而是half full,就是要樂觀。我眼中的坑,是潛力,我發揮的機會,坑越大越好。我吐槽了那么多,都是我遇到并修正的。
老油條
我對老油條愛恨交加。
公司S,我面試的時候,老板說公司要把現有老系統做成SaaS,隊伍很成熟,看了一下該公司領英員工列表,初創員工從最開始到現在11年多了,沒離開過。成熟,換言之,就是革新的阻力大,老員工舒舒服服的,不會關心什么新技術,更不喜歡空降一個上司來找他們麻煩。如果你是老員工,你怎么辦?如果你是空降那個,怎么辦 ?
公司S,幾個老油條,經常請病假,曾經有人一個月請三次病假,完全是濫用。
有一家公司,做了20多年,積累了大量代碼,超過2000萬行,其中,大量重復發明的輪子,基礎組件如譬如O/RM和XML序列化等,大模塊如ERP等,無所不包,相當佩服,好處是,你有藉口入職后1年才開始了解系統,之后,也可以安心做老油條養老,因為你寫的代碼沒多少人看得懂。
公司A,我接替的那個研發經理將于3周內離職,問他拿系統架構設計、流程圖、數據庫設計、技術規范等等所有文檔,全無!那好,讓他講解一下,他讓我直接看代碼和用數據庫diagram看表關系。。。我靠,系統設計僅僅就是表關系嗎?相當的無語。。。
職業道德
這些年來聽過不少朋友吐槽各種奇葩遭遇,我之前也遇到過不少。
公司X,用Java的,其是給南航做訂票系統的,后來老板跑了,沒發工資,大家都回公司搶電腦填工資。
公司H,一個從廣州靈狐(還有人記得嗎?)來的碼農同事離職,破壞分區然后格式化磁盤了,還拆開機箱,拔了電源線和數據線。
一個公司雇用一個員工成本挺高的,找獵頭就要給一個半月的工資,基本工資,養老金,各種保險,工作環境(租金),設備,培訓,年假,病假,每年加薪、獎金,平均算下來是基本工資的150%甚至更多。所以,我干活都很努力,對得起這份工資。
時刻站好崗,不過不需要像之前帶病工作了,也不需要第一個來上班,最后的那幫人走。早9晚5,把工作都做完就行了。
公司S,部門會議,8個碼農,30個任務,部門的碼農狂塞任務給我,我要做10多個。。。我vs都沒,代碼訪問權限都沒,業務邏輯都沒掌握,就讓我做事情,一些任務還是有難度的,譬如很籠統的系統優化,我還是堅持去做了。
公司S,數據安全很嚴格,除了一般的過濾和監控等,每個員工都是從本機使用自己的賬號遠程桌面到服務器上做日常工作,譬如收發郵件、讀寫文檔、使用公司的系統等,這種做法還真是第一次見 。公司這樣做,無非就是想大家遵守職業道德,但如果不尊重的情況下,可以知道并且行動。
公司C,我離職的時候被部門經理冤枉我破壞服務器,一個多月的工資沒發我,后來他們發現是部門經理搞鬼。這個部門經理還把源代碼放自己的手提每天帶回家,要挾老板給他股份。幾年后,公司還發現這個部門經理偷偷賣公司的系統源代碼,把他給炒了,但公司還厚顏無恥地找我回去主持開發部。
公司T,我離職了,幾年后,跟我一起呆過的技術負責人,聯系我,說他現在手上有當年的系統的源代碼,問我有沒有興趣一起搞搞賣錢。
健康
身體是革命的本錢。沒有健康的身體,工作效率和質量要打折。
舉個梨子,我這些年來身體每況愈下,先后有脫發、肩周炎、手腕痛、頸椎病、腰椎間盤突出、慢性胃炎、腎結石(三次入急診)等等。
因為長期病痛,必然會導致工作時不能全神貫注,所以產出量自然要降,而且質量也可能存在問題。
我工作10多年,只請過幾次病假,要么是因為要去急診,要么是頸椎病發作嚴重無法思考。現在回頭看,覺得自己不需要這樣拼命。
該請病假就請病假,對自己好點。
我現在是上班工作,出賣勞動力,而不是出賣性命。你垮了,甚至掛了,你全家人怎么辦?老板給你的工資中是不包括這個的。
古代,那些賣唱的女子,碰到無恥之徒,會說:“請客官放尊重點,小女子只賣藝,不賣身!”。現在,我也應該說:“老板,請你尊重勞動合同,我每天只賣藝8小時,不賣腎。”。當然了,如果老板給的錢足夠多(非常非常多),那,我就不管你今晚來的多少人,來的是不是人了。
加薪升職與待遇
加薪,還得看加多少,很多時候,僅僅是隨著通貨膨脹率加一點,一些時候還不怎么加。加得多的,一般是公司看重的而且是呆得久,升職尤甚。蹲坑久了,一般人加薪升職是不如那些跳槽的。當然,如果你運氣好,公司上市,你又拿到可觀的股票期權,那另當別論。
離職,和談得來的其它部門的同事喝酒,他在這個公司呆了10年,看著它的變化。他說:“我知道這個公司很多問題,很多混帳的人,我每天只能逐一應付,日子就這樣過去了,盡管一些生活我會忍不住爆粗,老板待我不薄,所以我沒有找別的公司。”,這個待我不薄,其實就是加薪升職,他從畢業實習生一直做到經理。
但是,職業生涯,是一個金字塔,底層的是絕大多數,往上層次/崗位的越來越少。所以,不可能大家都當上高級工程師、經理、主管甚至CTO。
在中國,很多公司為員工逃稅,把工資造低,大家倒手的錢是多了,但長遠看,未必,因為帳目收入低了,公司給你的養老金自然會低,你自己給的養老金自然也低。我在中國工作7年,移民澳洲的時候退保,個人部分才拿回1萬多元人民幣。來澳洲剛剛滿7年,養老金是中國的40倍,不逃稅。
典故
公司A,IT經理,樣子是典型的猶太人(就是那種大胡子),后來一問,人家說是英格蘭+蘇格蘭裔的澳洲人。。。我代替的那個研發經理,是不丹人,祖母是廣東人。。。部門的開發人員之一是日本人,英文名跟中文拼音一樣。。。另外有一個開發人員是上海人。
公司K,我是劊子手。公司人員流動率高,新員工入職,老員工離職,都需要一系列的流程,我做的hr業務中有一個功能:自動化入職和離職流程。每當監控系統中顯示今天要離職的人員,我就有深深的罪惡感。。。。監控系統只是顯示的人員不斷變化(入職離職),但背后是有血有肉的人啊。。
公司T,大學還沒有畢業,就在這里混了,然后跟著公司去了深圳蛇口,公司就在女媧補天像旁邊的大廈,當年那里是海邊,現在那個地方都成市中心了吧?下班后,大家去樓下的大排檔喝深圳土產的金威啤酒,晚上大家就在公司里的一個小房間里的擠著睡。
女碼農,大家覺得又少又神奇,是吧?
公司T,遇到了兩個女碼農,一個在幾年后成為了另外一個該公司的男同事的老婆。另外一個,成了我的女朋友,當年是很開心的,有共同語言,愛的死去活來,(這里省略大量兒童不宜的內容)。后來,與她糾纏不休的前男友來攪和,她讓我走,我心有不甘,但尊重她的決定,多年之后,她讀了大學,用上了C,去了銀行搞大型機,再幾年后,找了個同鄉,回去組建家庭,生了孩子,沒再從事碼農事業,(這里省略大量各種哀怨)。
公司H,另外一個女碼農,水平還行,但不大喜歡接受新技術,我推薦的新東西她都沒有采用,不過,我還是在這家公司呆了我職業生涯最長的時間,超過5年,直到我要離開中國移民澳洲。
公司T,上述的同事夫婦,3年前帶上全家來澳洲,他讀碩士,說是曲線移民。畢業后,因為,他的原話:“我只是不想別人給我的時間定價”,憤而回深圳發展。對了,當年我們分別離職之后,我在廣州買房,他在深圳買房,都才是50萬左右的兩房,現在他的房子快1000萬了。
注意!前方高能!!!
職場,是泡妞的好地方。
公司A,前臺真漂亮啊,目測很年輕,20歲左右的樣子,貌似是混血的,哎呀。
公司H,我遇到了一個女神,真心漂亮,一見傾心那種,我就對她展開了追求。后來發現已婚了的部門經理對她也有興趣,在各種電影中才會發生的經歷之后,(這里省略大量兒童不宜的內容) ,她成了我的兩個孩子的媽!
事業/經驗
說起做技術的人事業演進路線,一般分三條。大家都是從初級碼農開始,到中級碼農,高級碼農,然后開始分:1、tech lead / principle developer → architect → senior architect → chief architect → CTO;2、team lead → development manager → senior / technical manager → VP of engineering。如果還要細分architect的話,還可以這樣:application/software architect → solution architect → enterprise architect ,每個都有junior/mid/senior/chief級別。
說起架構師,我覺得沒有多年實際動手經驗,畢業就上來做架構師的,真正做成功的屬于鳳毛麟角,大部分都是扯蛋。
為什么需要資深(老)碼農?為什么需要架構師?一個誤區:把現有系統扔到AWS/azure/GCP這樣的公有云是簡單的lift and shift,但實際上遠遠不是這樣,譬如一個公司的業務要打印快遞公司的那些標簽,就不能完全在云里面跑了。
資深碼農,經過多年的實戰經歷的錘煉,掌握的技術廣度和深度都是新人無法比擬的。簡單來說,老碼農踩過的坑,都是血淚換回來的,你愿意讓缺乏經驗的人再去拿公司來玩笑嗎?
找工作
獵頭/中介
大部分獵頭都很爛,大部分獵頭都很爛,大部分獵頭都很爛,#重要的事情要說三遍#。
獵頭,就是把人力資源當牲口那樣販賣,他們所謂的Cherry picking,很爛,因為沒有背景知識,他們亂來地強塞給你一個崗位,騷擾你,或者你投了很多份簡歷,就是不理睬你,盡管你非常符合甚至over qualified。更搞笑的是,我去找工作,他們倒過來給我推銷碼農。
獵頭干的是買賣牲口的工作,澳洲的招聘工作,大部分是都是企業通過中介來發布的,但絕大部分中介很爛,根本不懂行業知識,不懂的分應聘者水平高低。我之前找工作,大部分中介都不理睬我,但知道我當上研發經理后,經常騷擾我,強力給我推薦他們手頭上的應聘者。
很多時候,聯系了獵頭,然后,就沒然后了。獵頭不靠譜,獵頭不靠譜,獵頭不靠譜,重要的事情必須說三遍 。
獵頭/中介真的不懂技術的,今天有個獵頭,多次來回郵件,每次都問一個技術/工具。譬如微軟的team foundation server,讓我深入說明這個東西。要不要我說說怎么配置continuous integration啊,要不要我說說vs agent的參數啊 ?
試過面一個多月前面的一家公司,沒潛力,推了。接下來這個故公司換了幾家獵頭來投放廣告,我都發了簡歷(難以分辨是非同一家公司),獵頭問技術問題的時候,總會問同一個問題,每當問這個問題,我就心里想:靠。。。又是這家公司。
曾經看見一份工作,投了簡歷,和獵頭來幾個來回郵件電話交流后,無疾而終(中介沒回復)。大半年后同一個公司同一個職位(招聘廣告不會列明公司),同樣一個獵頭,幾個來回后沒下文。之后,同一個獵頭,主動找我,還是同一個公司同一個職位。
剛來澳洲的時候,找啥工作,獵頭都會問你有沒有本地經驗(local experience)。找來找去沒找到合適的,只能重新從低做起。最搞笑的一個真實故事:一個英國人,做了20年,來澳洲找工作,獵頭還是說:你沒有本地經驗。
獵頭,很多沒知識不說,純粹浪費時間,沒有面試機會,還找你去面對面聊天 ,還為了不對口的技術騷擾你,還讓你去做初級碼農。
澳洲市場很小,獵頭很傻B。剛才一獵頭找我,職位是我上一家公司的首席架構師,她根本沒看我的簡歷,如果看了,就不會找我了。
一些獵頭真是厚顏無恥啊,群發垃圾郵件就算了,我回復:“你這職位我很多年前已經不找了,更新一下你的系統吧”,今天直接電話騷擾我,問了一串問題,我強調我剛找到perm工作,不會換,她還死纏爛打問我工作內容什么的,我說我在開會,她說:那么我明天再電話你吧。我說:郵件聯系,別電話我了。
某公司要招一個全棧碼農,最后在領英上找到了一個技術極度全面的,上班后才發現,原來他是個獵頭。#一個獵頭寫什么狗屁掌握技術 某公司要招一個全棧碼農,最后在領英上找到了一個技術極度全面的,上班后才發現,原來他是個獵頭。#一個獵頭寫什么狗屁掌握技術# 。
有一次,被獵頭騷擾,LinkedIn上加了我,一看就知道是昨晚我忽略的一個工作機會,他打電話過來,工作需要常飛去越南搞外包團隊,待遇還比我現在低,一聽到我沒興趣,馬上掛電話。。。基本禮貌啊 。
曾有一次,獵頭騷擾,在招聘網站找到我的簡歷,花了半個小時,強推一個用Java、RoR的公司的崗位,待遇比我現在還低,然后呢,我竟然同意去面試了。
找到工作之后,經常有獵頭直接打電話到我們公司的技術支持來找我,強推他們手上的碼農,我上司接的電話,上司一臉詭異地看著我,以為我在找工作(雖然我實際上是。。。)我投簡歷,獵頭不鳥我,現在倒過來給我找麻煩。
一次,公司的技術支持電話響起來了,女QA接電話,然后轉過頭來對著我詭異地笑了,說找我的,我納悶誰會用這個號碼找我,問是誰,女QA說是獵頭,當時就驚出一身冷汗 。
還有一次,獵頭來電,說:“喂,我們有一個很適合你的崗位!”,我說:“哦?說來聽聽。”,獵頭:“你擅長.NET,對吧?”,我說:“嗯。”,她說:”那JAVA呢?“,我心里一咯噔。。。mmmmm,她繼續:“還有PHP呢?”,我馬上說:“負分滾粗!”
有一個獵頭來電:”現在有一家大數據處理公司,需要SQL Server專家,你來不?“,我:“好啊,我馬上辭職。”,上班第一天,SQL Server正在Linux上歡快地跑著。
曾經有一次,獵頭來電,上司在和我討論容災設計,我迅速拿起電話說我要接這個電話,以防Google又自動顯示未知號碼是哪個招聘公司。這已經不是第一次了,上司那么聰明,肯定知道我。
曾經有兩個美國獵頭找我去美國工作,用的是澳洲公民特有的E3簽證,我說我希望是H1B簽證,這樣我可以留在美國,然后,就沒然后了。
一獵頭讓我做一個ASP.NET的在線測試,IKM的,50來個問題,內容真是服,一大堆過時的ASP.NET Web Form技術細節,連web.config配置里某屬性的名字都要搞幾個typo來考,還包括SharePoint開發的,MVC的只有寥寥幾個routing問題,越做越哭笑不得,完成那一刻仰天長嘆:世界那么大,我還是。。。 做完后不爽,寫了郵件給獵頭,痛斥這個測試問題多,和現在的技術嚴重脫節,這些老技術沒什么人用的了,還說測試太長,沒多少人會愿意做完。。。。。發送之后,意識到這獵頭不會再聯系我了。。。
曾經有獵頭打電話來,問我昨天面試怎么樣了,知道我對那份工作不大感興趣,就直接問我所有記得的面試題目,這樣她就可以給下一個應聘者提高成功率。 獵頭推薦的3個應聘者,兩個掛了,我說對這職位不大滿意,她說跟招聘公司聯絡一下看看結果先,然后呢,沒跟我打招呼,剛才靜悄悄地再發了一個新的招聘廣告。
悉尼有大量獵頭中介,大部分丟很爛,做垃圾的一間叫progressive,垃圾中的戰斗機,各個員工輪流通過系統發送一樣的郵件給你推送完全不合適的崗位,剛開始我都老實回復郵件說崗位不對口沒興趣,他們都不理睬照樣發。還打電話騷擾你,一些是看中我做經理所以推薦他們手上的人,一些是推不合適崗位給我 。
最近幾年,和獵頭的交互,發生了可笑的變化。以前他們找我,基本上是推銷比我現在崗位職稱低、薪酬少的工作,現在呢,推銷他們手頭上的那些找工作的人給我,因為他們發現我是研發經理,除了電話騷擾,還在領英上私信騷擾。#我只想安靜地找個工作#。
雞蛋不能放到同一個籃子里。同理,公司招聘,通過獵頭發廣告,很多會找多個獵頭,漁翁廣撒網。不過招聘廣告絕大部分不會透露公司名字,應聘者難以分別,所以會經常造成通過不同獵頭投同一個崗位的情況,這過程常會出現不愉快的經歷 。
曾經遇到過一個混血獵頭,母親***人,真心漂亮,模特級別的,美!后來去了澳洲最大的銀行做人力資源,最近懷孕休產假去了。。。
總結一下這些年來面試心得:中介(獵頭)大多不(就)靠(是)譜(豬),買賣雙方多會避(造)重(假)就(注)輕(水),正常工作時間基(加)本(班)是(沒)不(工)多(資),隊友水平參(大)差(多)不(很)齊(爛),開發很(毫)有(無)規(章)范(法),產品質量有(別)保(逗)障(了)。。。
應聘
我是代碼浪人,不在打靶路上,就在被打靶的面試中。我夢想有那么一天,終于不再需要打靶了,為自己工作,當老板。
在澳洲找工作,要金睛火眼,打的是perm職位,其實是合同工/臨時工,打的是悉尼地區,其實可能是墨爾本、黃金海岸、新西蘭、新加坡、英國,還看見一個奇葩的:曼谷。這還不算,最好玩的是看見一個是 不丹 。
公司B,面試中,和公司領導之一聊了一個小時。原來年初才加入的那個穆斯林技術負責人要離職了,其余的開發人員也打算干掉或者已經離職,現在有個5人的海外硬度團隊,產品嚴重拖延交付,公司允許把現有的系統推倒重來,我上任后先是重建團隊,再考慮重寫還是繼續改現有的半成品。
應聘過程中,免不了要做各種測試。大家還記得那個反向二叉樹的段子吧?寫算法和實際問題解決能力,這個還是因人而異的。單純強調算法不靠譜,畢竟,實際開發,很多情況下是需要糾結具體算法的,有需要的時候就Google。我覺得更應該強調實際解決問題的能力。
曾經遇到過一面試官問我Sharding是啥。我沒聽過Sharding這個詞,所以說不知道,后來才知道就是數據庫的分庫/partitioning。
一次,打靶,真的被爆了。那個在微軟干過的,兩鬢有白發了,架構師,問了我一大堆的設計/架構問題,簡單的,復雜的,最后讓我在白板馬上設計同時支持幾百萬人在線的系統。結束之前問他在微軟做得怎么樣,visual studio還有你的代碼嗎?
每次打完靶,覺得都被掏空了,又要重新填充一下全新的計劃,這種迭代,不肯定是螺旋式上升的,還是原地踏步 。
不過,我習慣了每次做完面試題目,回家就復盤,把所有問題都寫下來,重新做一次,總結。
好幾次面試過程中,遇到到了不懂的技術問題,別面試官質疑我的能力,當時是很無地自容的,但最關鍵的是,我知恥而后勇,把不懂的都學會了。
簡歷
被國內碼農尊稱為高司令的Java之父James Gosling,這些年來簡歷只有一行字:Father of Java。這種級別的簡歷,也只有10來個重量級語言的創造者才有這底氣,當然,那些操作系統創造者們則是天外飛仙了。
悲哀的是,很多人簡歷作假。這些人造假,一些原因是因為自身水平/經驗不行,一些是因為獵頭只給一份簡歷3分鐘時間,用的關鍵字自動掃描,大家無法突圍而出。
但是,我強烈建議大家簡歷還是要短小精悍,最有價值的東西放首頁突出位置,不要造假,不要動輒精通,用實際例子和數字來說話。
說到底,簡歷只是敲門磚,只能讓你獲取面試機會,面試中的表現,還是看過人的水平。
面試別人
公司C,當年畢業沒多久,年少氣盛,技術負責人不在,我代替他去面試一個新的開發人員,對方經驗比我豐富,我問問題也不含糊,追根究底,他耐不住了,就直接說:“算了,就這樣吧,我走了”。。。。
一公司招聘開發人員,在10多個應聘者中,我堅持并最終選華人。其實最后一輪有2個,第二個是印度人。這個面試的印度的開發人員跟我之前的見識的類似(只是說見識過,沒說全部,以事論事)。
面試不是一個對等的過程。面試官可以出任意問題,事無巨細均可,面試者能做的就是基本功要扎實,然后針對崗位準備一下相關技術問題。我看過幾篇老外的文章,痛斥面試過程中種種不是,說其是絕壁無聊,蛋疼沒用,慘無人道的。
面試就是相親的過程,雙方都在扯談,都會注水。應聘者會吹一些沒掌握好甚至完全不懂的東西。面試官會吹公司情況怎么這么好。
辭職
原因/理由
辭職的原因可以很多,最主要的原因,其實就是:“老子做得不爽”。這個不爽,可以很多有很多原因:
*待遇不滿意
*職位升遷不夠快
*豬隊友
*辦公室政治斗爭
但是,很多時候,為了照顧老板/公司的面子,還是會給出一個好讓雙方都下臺的體面的藉口,譬如:“鄰居的大姨媽的小侄子的小學同學的家里的小狗生孩子了,我也想去生孩子了”。你想想,辭職都這樣給東家面子,這樣的員工去哪里找啊?
關于待遇,可能會出現老板對不鳥現在的老員工( 不管是尸位素餐的老油條還是功勛元老),覺得重金可以聘到更好的員工(不管是濫竽充數的,還是真牛逼的人),所以,可能出現新人進來待遇比老員工待遇還高的倒掛現象,對努力干活的老員工不公平。
一般情況下要給一個月的辭職通知,公司B,我說服了上司,只需要給2周的通知。還有一周就可以離開現在公司了。剛才家里領導還訓話,說現在的公司不好嗎?為什么要離職,真折騰啊!我一直沒告訴他現在公司多操蛋。
公司B,辭職了,還有大半個月才走,公司越發明白我的重要性了,不管是技術攻關還是系統重大問題,團隊沒人能接班,解決不了,最終還是要我來解決。今天越南碼農做了個功能,在chrome瀏覽器死活跑不過,他又著急著走,明天一大早驅車1000公里去墨爾本,所以沒耐性解決,我分析排查是CORS問題,解決了,老板攤手 。
信任
信任是一種很奢侈的商品。
公司S,我來公司呆了一個月,在幾個關鍵老臣子的勸說之后,老板才給作為技術負責人的我訪問源代碼的權限[攤手]我來了5個多月,老板還咨詢那幾個老臣子我是否值得信任。。。用人不疑,疑人不用。公司一個來了8年的老臣子,今天跟我討論完產品后,跟我談心,說老板的想法和做法都是,盡量讓不同的人做不同的事情,不讓一個人掌握所有東西,以確保知識產權。同時他也說,澳洲這地方,不大可能讓華人做很高的位置,譬如他就做不了總經理,我也不大可能能坐CTO的位置 。
還是公司S,入職,聽說我要訪問源代碼,老板馬上提出要獨立服務器虛擬桌面進去,但那個服務器來之前,就給我的手提安裝上了Kensington鎖,老板反復強調不是信任問題。上個星期專門請了一世界級大公司的CIO來咨詢代碼安全管理等相關問題,當然,老司機我自然能對答如流, 那個CIO對我也是刮目相看 。老板給權限,IT經理過來打開計算機管理器,我說把我加入管理員組就好,他說:“你大爺的,歇歇吧!我做IT當然懂這個!”,然而那當然不能直接加,他說要退出重新用他賬號登錄,我說可以直接打開cmd admin然后compmgmt.msc,他說這樣輸入密碼不安全(不信任我),我離開一會回來一看,他用admin登錄改了 。
后話
以上各種吐槽,來源于我這些年來的經歷,相當部分在我的微博發表過,現在匯總成文,加上大量私貨,希望大家能從中受益。
-
工程師
+關注
關注
59文章
1570瀏覽量
68514
發布評論請先 登錄
相關推薦
評論