顯示廣告
隱藏 ✕
※ 本文為 layzer 轉寄自 ptt.cc 更新時間: 2015-01-06 16:52:14
看板 Soft_Job
作者 sedgewick (三分熟的鬧鐘)
標題 Re: [請益] 我是不是程式設計師的料?
時間 Tue Jan  6 00:11:42 2015


※ 引述《administer (系統管理者)》之銘言:
: 作為一名受害者,我要勇敢上來踢爆sedgewick大大您的見解有偏差
: 以證明批踢踢真der害人不淺QAQ

        咳, 抱歉這個嘛... 咳咳, 其實有下半卷沒講.

        順便跟大家分享一下我的經驗. :P
        既然是 job 類板, 我也來寫一些關於面試錄取與否的咚咚.

: ※ 引述《sedgewick (三分熟的鬧鐘)》之銘言:
: :         hsundo 兄不要氣餒, 不過你這個程式是真的要改一下.
: 這週小妹弟被導航王公司通知面試工程師
: 過去前一個小時要寫考卷,其中有一題是C++閏年題
: 正當小妹弟躊躇該怎麼寫比較能展現我的高度智商時
: 突然腦中靈光一閃,我相信最簡單的程式就是最好的程式
: 經過版上大大的教誨更是自信十足
: 於是就遵照sedgewick大大的示範
: 我依樣畫葫蘆:
: printf("2000, 2004, 2008 ... 2100\n");
:              ↑
:           中間太長懶的列

        這個程式的數字如果全對(去掉尾巴那個 2100 還沒有其他錯誤).
        那其實也還好, 甚至不要錯太離譜嘛... 也還好.

        請聽我道來...

        以程式訓練而言, 九九乘法表當然是基本中的基本.
        另外什麼費氏數列也是基本題, 科科.

        不過通常面試不會只考基本題, 譬如九九乘法表會有所謂的進階題.

        我可以洩幾題我的題庫給大家看.
        類似題一:
        假設用 1000x1000x1000 的三維矩陣表示一個 1μm x 1μm x 1μm 的空間.
        A.) 每個矩陣元素有一個既定的數字叫做溫度 T.
            請以程式概念表達如何計算 gradient(T) 與 laplacian(T).
        B.) 每個矩陣元素有一個既定的向量叫做電場 E.
            請以程式概念表達如何計算 curl(E) 與 divergence(E).
        C.) 請預測 A.) 與 B.) 程式的困難處會是哪些?
        PS: 我會把所有數學符號的運算方法全部寫出來, 這個不必猜.

        類似題二:
        請寫程式計算橢圓 x^2 + 4y^2 = 1 的周長.
        並估計
            1.) 計算誤差
            2.) 程式執行所需的時間
        PS-1: 老規矩, 會給線積分的形式, 不過要自己會轉成差分.
        PS-2: 這有另一個變形是求 x^2 + 2y^2 + 3z^2 = 1 的表面積.

        這一類叫做數值方法的入門題.
        專門考驗一個人有沒有辦法把數學形式轉成電腦可以處理的形式.
        以我的經驗, 每個可以在「引導下」把問題答完的面試人員...
        都會是非常優秀的程式人員.

        看職位也可能考難一點的.
        譬如說 sin(1/x) = 0 在 10^-20 到 1 之間有幾個解之類的.

        至於這些題目嘛, 我通常不知道標準答案, 但是我會知道答案是不是正確方向.

        第二種是機率跟排列組合之類的問題.

        一次考足資料結構跟演算法.
        基本題當然是 1A2B 那種咚咚.
        進階題就很多啦, 譬如寫一個模擬 Buffon's needle 的程式.
        或者寫一個預測等電梯時間的程式.
        或者又寫個大樂透用一萬元包牌, 號碼要怎麼選, 期望值才會高的程式.

        老話一句, 在「引導下」可以答得很好的人, 通常程式也寫得不錯.

        總之九九乘法表或者萬年曆怎麼寫根本就不重要.
        它們其實只是壓驚用的題目.
        避免應徵人員被一堆奇怪的問題嚇到無法作答.
        而我發現, 被錄取的人都可以很好地回答我所列出來的那些問題.

        所以先科科一下.

        繼續我們來分享什麼叫做程式技巧...

        我覺得最大的苦惱是...
        「每個程式員都只會重構他看得懂的部分. 」
        而且..................會充滿熱情.

        讓我最幹的一點是, 通常這些在整組程式當中只是無關痛癢的東西.
        有人會認真跟我討論一百筆資料的排序該怎麼寫, 而不必呼叫 qsort().
        問題是這個東西了不起佔個 1ppm 的運算量.
        另外佔了 30% CPU time, 一個 selection rule 寫了一萬五千行的「片段」.
        完全視而不見... 因為看不懂.

        還會有人跟我討論這個 if 跟某一個 if 應該併在一起.
        因為什麼又什麼(通常是因為 condition 在那個 snapshot 一樣. )
        當我說, 那請把那一個十幾層, 總共四千多行的 if-else 處理一下時...
        又繼續裝傻.

        這些都是真實發生的事情.
        而這些看起來非常荒謬的寫法(if-else 寫到數千數萬行)...
        通常都是很有名的加速技巧.

        譬如我的手上就有一段程式碼, 只有一個 ANSI C function.
        但是整個檔案的大小是 4.6MB.
        你沒看錯, 這個函式寫了將近 5MB.

        當然這鐵定是 code generator 做出來的.
        不過我說要把對應的 generation rule 找出來時, 就是不會有人做.

        每個人寧可跟我討論這個按鈕應該是紅色還是綠色.

        我要說的是, 大家真的覺得一個按鈕是什麼顏色有這麼重要嗎?
        當然有時候很重要, 但是有更多的時候不是那麼重要.

        所以嘛..............九九乘法表或萬年曆怎麼寫, 會很重要嗎?

        好吧, 我也不敢保證.
        不過對我來說不是那麼重要, 因為這是標配.
        當然我還是會考; 是因為因為因為... 它是給受試者緩和情緒用的.

: 然後我就從古亭捷運站按回卷了QQ
: PS. 它們公司環境很不錯,裝潢讓人心情很放鬆的說~

        管理員兄不要傷心, 這是下半卷. :D

        話說我的考試沒什麼程式技巧就是了.
        譬如我不會問 printf - main 的結果是什麼.


--

  新詩練習:新鮮。踩破初春裡的狗大便;不經意的滄桑,滿溢著嫩黃的喜悅。

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.195.57.20
※ 文章網址: http://www.ptt.cc/bbs/Soft_Job/M.1420474305.A.BA6.html
et282523: 推~想知道那個加速技巧是什麼?聽起來很酷!1F 01/06 00:23
hSATAC: 查表法?2F 01/06 00:27
y2468101216: 我都不會 看來我還太嫩了3F 01/06 00:29
sedgewick: 哦,它只是一個單純的窮舉法... :P4F 01/06 00:30
sedgewick: 屬性不同啦, 譬如 web programmer 不會來我這...
recorriendo: 不能同意 把數值計算拿來做臨場考題6F 01/06 02:17
recorriendo: 真正做數值的 哪個不是numerical recipe放手邊隨時查
recorriendo: 把那些數值演算法背起來 並沒比較厲害 真的要考的話
recorriendo: 應該考演算法的診斷 直接給suboptimal數值演算法 問
recorriendo: 該算法可能碰到的問題
sedgewick: reco 兄, 我列的都只是大一大二程度的題目而已.11F 01/06 02:25
sedgewick: 還沒到深究 numerical analysis 的地步.
sedgewick: 但是這些題目會需要受試者同時又懂數字又懂電腦.
sedgewick: 這種人都是超級程式員的潛力股, 就算他其實數學很爛
sedgewick: 實務上我用這種類型的題目, 比起考程式本身要有鑑別力
sedgewick: 當然也可能遇上主考官不考這個... 絕對有可能.
sedgewick: 不過我是不覺得會用九九乘法表當成判斷標準就是了.
sedgewick: 至於考業界常用的演算法, 我的心得是.............
sedgewick: 這只會找到近親繁殖的產物而已, 非常畸形的篩選結果
recorriendo: 你這樣考簡單的 那更有問題啊 因為有看過就是有看過20F 01/06 02:36
recorriendo: 有人答出來 你就不知道是他剛好以前看過 還是現場想
sedgewick: 其實不會, 這種題目可以考倒台大資工跟數學出身的人.22F 01/06 02:38
sedgewick: 因為會寫程式的人通常把數學忘光了, 需要提醒...
sedgewick: 而數學很熟練的人, 會完全不知道怎麼處理程式問題.
sedgewick: 後者會被刷掉, 雖然基礎數學還在, 但是我是要找程式員
sedgewick: 最後的結果通常會有點意料之中或者意料之外...
sedgewick: 意料之中是說, 名校的學生平均而言都答得好上一大截.
sedgewick: 但是答得最好的那個可能背景完全難以想像...
sedgewick: 因為他的資歷裡頭完全沒有相關的東西, 譬如說化工畢業
sedgewick: 然後去台泥還是中油什麼地方上班三年.
sedgewick: 這種的我一定用, 那根本就是撿到寶.
sedgewick: 但是! 通常這類高手一問下去才會知道他打算出國了...
sedgewick: 大部分還是只能在答得很出色的族群裡面選一個.
galic: 數值運算有專用工具,不是一般程式在解決的面向34F 01/06 08:11
galic: 拿來做程式能力的判斷有點奇怪,這篇比較像是找特定人才(?)
galic: 至少我看到這類題目,直覺反應是用matlab之類的
yfr: 很別緻的篩選方法,請問你是數學系出身的嗎37F 01/06 09:19
yfr: 不過我老實說離開學校之後就沒碰數值,如果面試突然問個
yfr: 積分可能都要想一下,就像@galic說的,我直覺也是用Matlab解
yfr: 如果碩士在學時應該有把握可以答出來,可是這些年
yfr: 在業界被汙染(?)後,可能會答的2266 XDD
yfr: 我另外好奇的是這種篩選法,很可能會把資工出身的篩光光吧?
yfr: 反而答的好的比較容易是數學系或是其他工程類科系
yfr: 請問你們面試的職位是什麼呢?
AmosYang: 「每個程式員都只會重構他看得懂的部分. 」          XD45F 01/06 10:57
GoalBased: 會給公式又會引導,應該是要看解問題的能力吧46F 01/06 11:50
penguin7272: 大樂透怎麼包期望值都一樣吧, 可能是變異數最小?47F 01/06 13:19
neo5277: 上篇是九陰白骨爪 這篇是內功心法48F 01/06 13:34
neo5277: 上下卷應該M起來
bndan: 個人比較認同這種考法.也比較有意思.而且這考法對新人來說50F 01/06 16:22
bndan: 會是一個具有被認同感的考法...

--
※ 看板: layzer 文章推薦值: 0 目前人氣: 0 累積人氣: 704 
※ 文章分類: 程式設計
分享網址: 複製 已複製
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇