學會在紙上寫代碼,這很重要嗎?
去面試軟體工程師,某些筆試題需要在紙上寫代碼,我從沒在紙上寫過,那試題被畫的一團糟。
說到為什麼面試基本不給電腦coding,那我還得裝齊所有IDE和編譯器就為了不限制來面試的人的語言嗎?多不現實。要是人家想用go怎麼辦,go一開始不支持windows,我還得給linux?要是人家就是沒有在windows下寫過程序怎麼辦?豈不是不會windows就刷掉的意思?
【不考語言細節,不要求對方必須懂xx語言、xx框架、xxIDE】是公司規定的,所以綜上所述,只能紙上寫。當然紙上coding肯定比上機coding要慢很多的,所以我只能給一些簡單的題目了。譬如說,之前考一個來面試的人寫SAX風格的xml parser不考慮注釋和DTD,人家也是20+分鐘就弄出來了,用的是長得像python一樣的偽代碼。當然考生不可能知道xml的細節的,所以這是題目信息的一部分。話說還有人曾經試圖用haskell來答題,我也接受了。
一個負責任的面試官,是不願意考你在紙上 coding 的。但是不願意不代表可以不做。一個負責任的面試官,同樣不能不考你實際 coding 的能力。大多數情況下,他也無法給你一台電腦。
所以只能出一些適合紙上 coding 的題目。而且判定時考慮所有因素。
結論是,你不用特別學會在紙上寫代碼。這是面試,不是讓你實際工作,動不動就拿「實際工作」如何如何來說的,無非是想掩飾自己動手能力低和邏輯混亂罷了。紙上,或者說,whiteboard coding,重要的是讓面試官能看清楚你的整個思路過程,你在白板上塗抹修改,也是你思路的展示,而在電腦上你用刪除鍵什麼的看不出來,僅此而已。
那些覺得無意義的人,嘿嘿,當你自己在白板上痛苦糾結改了又擦的時候,你不知道有很多人就是能清晰地先畫幾個圖把流程思路講清楚,然後幾乎一次性無錯在白板上寫出正確代碼---你以為,你所謂的「動手」能力和那不知所謂的「思維」能力,真的會比別人強?
在IDE上利用各種工具完成代碼只是個基本功,不,只是類似會ABCD 26個英文字幕,幹嘛?你會ABCD就覺得可以做翻譯了?所謂紙上寫代碼,實際上是心中寫代碼!
高一的時候,對代碼的興趣是迄今為止最高的(之前已有兩年經驗)。住校,苦於沒有電腦,在紙上完成了一個小型的解釋器,現在那個大本子還在我書櫃里躺著。我說這個就是想告訴你,興趣使然。
作為一名程序員,編代碼的能力固然重要,但是最重要的還是自己對邏輯結構和流程的熟悉程度。筆試很大一部分都是在紙上寫代碼,一方面是不用專門配置編程環境,另一方面,邏輯結構的語句大同小異,之前中科院的老師說過,只要你精通一門編程語言,其他的也就都會了,無非是關鍵字或是面向對象 面向軟體的區別 這些都是上機編寫的時候可以忽略不計的問題。
所以說,無論什麼語言,重要的還是演算法,你知道用什麼演算法的複雜度最小,時間最短。再就是你知道這個演算法怎麼寫,怎麼用,出來的結果是怎麼,怎麼嵌套。一個能在計算機上編寫出來的人,在紙上會寫不出來?必修課學的東西,不記到腦子裡,是不是電腦崩潰了,換電腦了你就都不會了?基礎功還是很重要的!
年輕人,程序員這碗飯,你想吃,還有很長一段路要走的。
我覺得,如果不局限於面試這個背景環境的話,學會在紙上寫代碼還是很有必要的。首先要明確,在紙上寫代碼,不是為了實現,而是為自己梳理一下思路,要學會用偽代碼打草稿。而且,也不局限在紙上,也可以在一下筆記類APP上。有時候,上班腦子塞住了,一時思路不通,但在回家的地鐵上,突然想通了,我就會嘗試用筆記本(不是電腦筆記本)或者Evernote把一下思路和關鍵邏輯記錄下來,第二天上班整理成實現的方案,這樣還是蠻好的。
其實,不僅僅是代碼,設計原型,模塊結構我也更喜歡先在紙上或者APP上寫寫畫畫。有時候我感覺,一直盯著屏幕,反倒想不出什麼東西,不知道為啥。
我的建議是用白板,方便切更環保,嗯,玻璃板手感更好
你以為人家真要你把一個項目代碼全部寫進紙里?你這樣想,還是做別的去吧,人家有這道題就是要考驗你有沒有思路,要你把思路寫出來,這個項目我要寫哪些函數,哪些對象,用到什麼?該怎樣調取數據,處理數據。比如我學PHP,寫會員管理系統(簡單的),PHP程序員(朋友)說:你手怎麼還在滑鼠和鍵盤上,不想寫了嗎?我說:不是在電腦里寫嗎?朋友無語,給我一本子和一支筆,把你的思路寫出來,然後在分析,然後腦子裡要構建一些函數,哪些是全局,哪些是局部?然後資料庫怎麼操作啥的。全部寫在紙上,然後用了一天給我講原理(本人苯),然後第二天才讓我上機操作,思路有了,代碼就來了。
不然呢?面試官得專門準備一台裝了環境和IDE的電腦給你?到時候也許又要問了,面試給我的電腦好破,性能不好,IDE配置和我習慣不一樣,沒發揮好,實際工作中肯定不會這樣。你們說要求這種在默認電腦上寫代碼的能力有必要嘛?面試官是怎麼想的?
額...我一般畫個流程圖或者畫個示意圖,不想寫代碼...
現在沒智能補全的話...我基本已經寫不出一段完整的代碼了...
作為技術崗面試的重要環節, 對於處理問題的思路考察必不可少,一來看看你是不是簡歷上drunbee,二來看看你處理問題的反應能力和速度。紙上代碼也不必糾結於語法符號等細節,重要的是體現思路,偽代碼井井有條即可。
相比紙上寫代碼,個人更喜歡白板寫代碼。
二者稍有不同的是,所有面試官可以看到你的白板,你可以邊寫邊講,側面告訴面試官你是如何思考的,達到一種交流。
當然啦,代碼寫多了給你一張白紙並不是什麼問題。偽代碼風格一致就好,不要一會Java,一會python的放上堆,讓人費解。。。。。
感覺現代作用不大了
個人感覺是不重要的,編程之前花大量的時間思考邏輯,在紙上畫畫邏輯圖到是挺重要的,我平時開發一個功能之前花大量時間思考,在紙上寫寫畫畫,但我不覺得煩,這幫我省下很多時間,
對無意義能力的考察是考試製度的失敗。
什麼是人?人和動物的一大區別就是人會製造並使用工具。在紙上寫代碼,一定程度上就像列豎式計算幾十位數字的乘法一樣毫無意義。先人辛辛苦苦發明這麼多輪子,你在學習過程中可以重新造一遍;但是真正到了應用層面的時候,不好好利用已有的資源,反而去使用原始、落後的方式進行低效率工作,這絕對是不可取的。我們發明這麼多 IDE,發明了自動補全、自動縮進、代碼高亮的演算法,這些難道真的沒有意義?就算我只用 Notepad 寫代碼,也有隨意修改不破壞版面的好處,這難道真的沒有意義?
何況,程序是寫給計算機看的,不是寫給人讀的。脫離了計算機的程序,只是廢紙一張而已。
第三,計算機上編程可以進行測試驅動的開發,這樣可以早發現自己的錯誤。這東西蛋疼沒用的 都是些腦殘的瞎搞
stackoverflow reputation過1500更有價值
應該用小刀在骨頭上刻
如果題主覺得在紙上寫沒思路一團糟,那麼恭喜你!!人家的面試題就是為了把你刷掉的。
哥們當年自學BASIC的時候周圍壓根就沒電腦,然後就只能在本子上寫程序。曾經寫了十幾頁的俄羅斯方塊(還帶行號哦,就是5、10、15那種,知道這個你就老了),等到了好不容易有機會碰一次中華學習機,就花一下午用一指禪敲進去驗證(沒機會摸kb哪會懂什麼指法)。那時候玩BASIC根本就沒有什麼IDE的概念,即使是在電腦上寫程序也很難修改,比如你漏寫一行就只能在後面追加,然後用行號調整編譯順序。
當然啦,紙上的程序BUG暴多。。。
回想起來,那樣的經歷對我來說很難忘、很重要,現在的年輕人的條件太好了。我都有點想不出為什麼你在IDE能寫,在紙上就寫不好。頂多就是某些API背不全嘛,寫程序最重要的是思路。所以我不排斥讓人在紙上寫程序這種考察方式,如果我是面試官,肯定不會介意麵生拼錯API。
---------------
順便吐槽一下某些培訓機構出來的「碼農」,雖然哥們本人就是一個從沒接受過正規培訓的野路子碼農。今天在公司里指導一個實習生寫代碼,發現他每次寫「String」的時候都是先敲str,然後按IDE的快捷鍵等待半秒鐘讓IDE幫他聯想出整個單詞。看了幾次之後我就崩潰了。。。。
「你能不能直接把String打出來?又不長!」
「噢~」
。。。
。。。
。。。
然後,我發現他竟然拼不出「String」這個單詞。。。。。。
用人單位與應聘者,看問題必然不一樣。應聘者覺得只要是牛人,用人單位則要牛到百分百識別其牛。實際上用人單位如果招聘有一定規模,就要考慮效率和成功率。反過來,雖然金子總是要發光,卻不是什麼時候都保證會被人覺察。還有,如果不是綜合素質很好的,有可能在某一輪的排除法筆試/面試輪次中因某短板被忽略了。技術牛不見得整個人就很牛。另外,優秀的人不一定是適合的人。因此,看問題角度很多,工程師慢慢能才能成熟看待這些事情。
就筆試在紙上寫程序而言,可以考的點有:是否粗心大意;快速解決問題的能力;做事的規範性;做事的計劃性;個性化與工程化;異常處理;等等。有可能不像大家想像的一樣是在考多優秀,而是找明顯毛病。
想請問,樓主能保證敲出來就跑得起來么。
個人認為,敲一個能正確運行的快排序,要比紙上寫來的耗時,而且不一定一次跑通。
與其滿頭大汗的調試,最後結果跑出來不對。
還不如,寫個偽代碼, 講講思路,大家哈哈一笑, 你開心我也開心呢
所以紙上寫, 其實也是有好處的。
相信如果你在紙上都寫的一團糟, 在機器上敲出來的也不會好到哪去~~
為了面試, 花點時間練練手寫代碼吧~
推薦閱讀:
