做一名糟糕的程序員是怎樣的體驗?
聽朋友說,曾經他在凌晨的走廊看到有同學在邊敲代碼邊哭。問到原因,他說他白天拚命學習語言,晚上還要弄複雜的演算法……但是!!!第二天又忘得一乾二淨,感覺學編程挺辛苦的,也挺委屈的。
感覺挺辛酸的,知乎上大牛居多,不知道有沒有人知道糟糕的程序員的現狀。
int *p,q;
int i,j,k;
int a1,b1,a2,b2;
熟練掌握各種語言的helloworld,寫不出任何一種語言的快排。
當初宿舍妹子們眾生相:
一個臨到考試前各種纏著老師漏題,然後把編程題當作英語短文來背誦默寫;
一個為應付大作業,借了別人的代碼連夜去網吧包夜來「抄」;
一個在暈頭轉向又熬過《數據結構》課之後,用地方話哀嚎:「我當初腦子進水了啊選了這專業!」;
而我,胸有成竹,坐看天邊雲捲雲舒,歲月靜好。。。
故事的結局是,她們都擅長英語,早早過了六級,甚至雅思,托福,並且歡樂的轉行,再也不用受代碼的折磨。而我,雖然終於過了四級,也經歷了考研英語學習的洗禮,卻和題主說的一樣:白天背單詞晚上作閱讀第二天忘的乾乾淨淨,完形填空基本靠猜,閱讀理解選最長的那個答案,從來分不清一套題是簡單還是難,至今只要看到一整片英文就兩眼發黑。。。
so,這是一個關於「每個人都有自己的地獄」的悲傷故事。。。容我去哭一會兒接著看英文文檔。。。。轉個文章,相信很多程序員都能在其中看到自己。
-------------------------以下為轉載部分---------------------------
我是一個垃圾程序員
英文原文:I Am a Bad Software Developer, 編譯:Dennis Gao
在過去的4個月里,我深刻地反思了我自己。就在7個月前,我還在從事一份雖不是十分討厭,但卻也感覺不到任何快樂的工作。我還不能確切地描述為什麼我會有這樣的感覺,直到我的一個朋友再次找到我,說有一份工作雖然乾的活一樣,但有機會參與開源軟體項目開發,然後我就跳槽了。這一切讓我知道了:
我是一個垃圾程序員。
3個月後我選擇離開了這家公司。當時我簽的是臨時合同,在還沒有完全投入工作前,卻先感受到了公司內部的派系鬥爭之風。這份工作,我沒感覺到任何快樂,但也沒有特別的不開心。只是我還沒找到一些特別具有挑戰性的,並能引起我興趣的事情。所以我決定先休息一段時間,總結下人生。
為了不至於影響家庭的收入,我仔細地安排了休假計劃。在償還完銀行賬單後,剩餘的錢可足夠保證我4到5個月不上班都沒問題。做了張現金開銷和預算表之後,我決定先休假2個月,然後用1個月的時間進行面試,最後第4個月作為緩衝期,以防萬一面試的時間超出了我的預期。
現在我真的在緩衝期里了。到目前為止,我已經面試了近10家公司,卻沒有一家公司考慮錄用我。甚至在多數公司中,我都沒有通過技術面試。我是一個程序員,並且一直以來我都自我感覺良好,覺得我是一個還不錯的程序員。但是在這樣一個通過海選進行招聘的行業里,我發現很難再認為自己是一個優秀的程序員了。
我的一些好友和同事,我認為他們中的大多數都比我更有經驗並且IQ比我高。當我向他們描述我的憂慮狀況時,得到的反饋可總結為「理想很豐滿,現實很骨感」。在上一份工作中,同事們熟悉我的做事方式,與我一起工作都很愉快。並且覺得我的工作背景、敬業程度和技術能力都非常不錯。所以不能說我是一個沒能力的程序員,只是我還不善於在面試中表現自己。
但如果說只有少數幾個公司拒絕了我,我還能信他們。可是截止到目前我是顆粒無收,並且僅有兩次我成功地通過了第一輪的技術面試。如果我已經手握一到兩個OFFER,我還能承認我的能力,但你能說所有公司都犯了同樣的錯,一致地忽略了我這個雖然面試表現不好但卻很優秀的程序員?換句話說,難道有那種可能,像我這樣的垃圾程序員總是能從勝任工作的人的手中搶到職位?
從以往的歷史來看,我應該不是那種光說不練的人。基本每天開始工作前,我都會練習寫一些代碼。同時僅是基於樂趣,我會使用一些奇特的編程語言來解決一些經典的場景。時常我也會向開源社區做些貢獻。有時我甚至會去嘗試與他人攀談,學習如何在交談中盡量的展現我自己。到後來我發現,像與人交往這種曾對我最具挑戰的事也不是那麼困難了。這段故事告訴了我,除非你去嘗試,否則你不知道自己到底能不能做到。
問題是還沒等我做成什麼,我就已經崩潰了。這個月我還能付得起房租和信用卡,但是我還沒拿到任何OFFER,下個月估計就得欠債度日了。我甚至不得不考慮從現在的公寓搬家到那種老舊的筒子樓里。但更重要的是,看起來我好像已經沒有能力繼續在這個行業工作了,並且恐怕我也不知道除了寫程序我還能幹什麼。
那麼,到底一個垃圾程序員是什麼樣?
我書架上塞滿了各種經典圖書:《SICP:計算機程序的構造和解釋》、《Lisp編程》、《TAOCP:計算機程序設計藝術》、《C專家編程》、《Effective C++》和一些演算法、分散式計算、安全、圖形、數學等各種教科書,並且大部分我都已經讀過了(TAOCP這本我還在不斷的研磨)。我也經常讀一些ACM、IEEE上的文章和博士論文。如果僅從我的閱讀列表來判斷,你可能認為我是科班出身,但實際上,我只是喜歡編程,並且想盡我所能來掌握更多的知識。
我為很多開源軟體項目做過貢獻,編程語言涵蓋C++、Perl、Python等,甚至還用過一些類Lisp語言。這些項目中,有些我曾使用過但缺少一些功能,有些是新的項目需要解決BUG或增加功能,有些則是我發現是我需要的類庫或程序。
我一直在用心地不斷提高我的能力。前面我提到了以前我會寫一些練習代碼。在我工作過的部門裡我會推崇自動化測試。我讀過大量的書籍、論文和技術文章,同時我也會寫一些文章來嘗試著幫助他人。
我非常的喜歡數學。在讀完資訊理論,弄清香農熵後,我又開始深入研究序理論。我真的很喜歡Joint-Semi-Lattices、集合論、關係代數、Sentential-Database。一些內容現在我已經記不清了,比如我知道對於每種遞歸的形式都有一個迭代的方法,如果我需要詳細了解我可以迅速的查閱雜誌或教科書。
儘管如此,我還是在編寫一個要求判斷是否序列A是序列B的子集並返布爾值的函數時出現了失誤。當被問及我剛編寫的函數的的複雜度時我還是記不起來了(擦,顯然列表排列的複雜度為N方,但當時就像對我能否回想起這些細節的審問一樣,頭腦一片空白)。我的每一絲信心都已經被這些錯誤、失誤和拒絕一點一點地打敗了。
到最後,我發現我越來越沮喪、絕望,並十分害怕自己會讓家人失望。以後我的女兒會問我我是做什麼的,我可能不直接地回答她,或者告訴她我是給電腦寫程序的,然後趕緊迴避開女兒進一步的追問。等她長大了我也盡量避免告訴她,為了混上飯吃我可能什麼都做。我從來沒有成功過,甚至也沒有做過什麼讓自己值得驕傲的事兒。我只是盡我所能,即使整個世界都覺得我不夠好。
我是一個垃圾程序員,這就是我的人生。
被甲方的人天天罵
本科專業課門門拿優秀,找工作面試卻沒到過第二面。學得東西好像樣樣都懂,其實就是沒找到方向沒一項精通。
抄來的代碼看不懂也就算了,自己寫的代碼過兩天都看不懂了。
還自言自語道哪個蠢貨寫的代碼。
糟糕的程序員幾個特徵
1.不懂測試,看不起測試人員
2.知道一些語言或框架的特徵和語法,但不理解其設計意圖
3.不善於或不知道使用開源項目的成熟代碼,什麼都要自己從頭寫
4.不善於使用工具
5.過度教條(比如寫一大堆沒用的注釋)
6.看書時把練習都跳過
7.不會fq
完全無法理解世界上為何有文本編輯器/機械鍵盤之爭。
你們手速有多快?
你們不查文檔嗎?
你們邊想邊打嗎?我曾經是垃圾程序員,現在不做程序員了。
垃圾程序員的體驗就是:你敢讓我幹活?你會遭報應的!
---------------------------------------------
滿滿的都是眼淚。以前自己做程序員禍害別人,現在被程序員禍害。
我們有次好奇,統計了一下每個人身上的缺陷數和缺陷重開數,基本上都集中在那幾個在路上的程序員身上了。
我們在上了Sonar之後,驚奇的從代碼庫中發現了很多奇妙的代碼。
代碼評審非常重要,重要到什麼程度呢?
我以前的一個姐們給我講了這麼個故事:
當時美國方面聘用了一個CS的PHD,中國人,叫Qing。然後讓Qing來到我們團隊來輪崗,也就是給我們寫代碼。為了表達對美國方面的重視,我這個做經理的姐們親自給他評審代碼。據她描述那叫一個慘不忍睹。
第一輪Review,一百多個問題,打回;
第二輪Review,打回;
第三輪Review,打回,姐們在三次同樣出現問題的地方注釋道:「這樣寫會有xxx問題,請寫成XXX形式」;
直到兩個星期後,這片代碼終於通過Review,交付測試。
應該挺爽的吧, 反正寫完代碼都給別人維護了, 屎又不自己吃.
沒心沒肺的人才天天吃得飽睡得香.
吃屎的人帶著怨憤和怒氣槽滿值留.
1、沒有思路
寫代碼的時候無從下手需要其他人指點,不懂得把一個大問題拆分為幾個步驟一一攻克
2、邏輯能力差
有一點思路,但是還不足以支撐完成一項任務。
3、漏洞百出
任務雖然完成了,但是解決了一個問題帶來一堆bug,如果用簡單的反例去測試一堆問題
4、效率低下
不懂得這樣做是否有嚴重的性能影響。只要能看到預期的結果就可以了
5、無參考性和擴充性
不懂得寫出的代碼可以被重複使用,被合理擴展。
我是一個糟糕的程序員,可我是也是一個還不錯的分析師,研究員啊 (^_^)
做人嘛,最重要的就是開心,沒事看看那些掙扎在溫飽線上的同學們,請他們吃飯,安慰一下他們,就獲得無限的動力了。
我不是程序猿,我只是想來吐槽,詢問我日常工作那個業務系統的締造者,為什麼某個流程操作,下拉菜單選A選項沒事,選B選項程序直接就崩潰了,但是根據我們的工作邏輯,那一步操作我只能選B不能選A啊……
然後因為這個奇異的BUG,早期我們沒有對策之前,好多執法對象逃出生天了。。。因為我們根本開不出符合事實的責令限改文書。
我想,大概是那位程序猿先生當時失戀了吧。
PS:此BUG最後的解決方式是法學,把違法事實B歸結到違法事實C裡面,完成整個流程。。。
我最糟糕的時候,每天擔心自己的代碼出問題,每天擔心自己找不到代碼里的問題。
一直在思考這個問題,我的答案是,編程只是工具,你需要的是了解這個工具能做什麼。
曾經一度覺得有這樣一份工作,每天按照計劃寫寫代碼,就能步入社會上層了。
但是到了而立之年才發現,身邊的人要麼在不斷地跳槽,要麼在每天的工作中掙扎,偶爾買買彩票,開獎的時候卻又無比沮喪的被真實的世界拉回來。
打個比方,一把菜刀,一直使用,從來不磨刀,會怎麼樣?答案是:會被扔掉,被新的菜刀取代。當一把新的菜刀越來越便宜,這把菜刀的壽命就越短。
我們都是菜刀!!
每天抱著磚頭一樣的代碼書、設計模式、演算法,整天上github,也只不過是在磨刀石上打磨幾下而已。
當然,有的人喜歡技術,就是喜歡技術不斷成長的快感。如果你是這種人,就不用往下看了。
我們大多數人,不是富二代,沒有多少錢。當自己年齡越來越大,銀行存款卻少的可憐的情況下,你如何能夠放下心來學習linux、java、php?你又如何能保證自己能一直這樣研究下去?就算你研究到了極致,你會是個什麼樣?
你是不是每天行屍走肉,不知道自己到底喜歡什麼?但是還必須要按時起床、按時擠公交、不能遲到。
換了幾份工作,工資漲了,每個月發工資的那兩天很快樂,其他時間呢?在無感中度過~~
世界上有太多的職業了,你一畢業就開始干這行,從來沒有接觸過別的工作,如果貿然換工作,又會擔心「那我這些專業知識不是白學了」?
沒有什麼是白學的,正所謂功不唐捐,你接受的任何東西,都會內化到你的思想中,你的行為方式中,在今後無論做什麼,都能夠在你耳邊告訴你,遇到這個問題應該怎麼做,這才是工作的意義。工作的本身並不重要。
樓主的問題激發了我的思考,所以在這裡發了大段牢騷,其實不好的程序員不可怕,不知道自己能做什麼才可怕,希望能給愛思考的人、迷茫在這個問題中的人,一點啟發~~~
2017年2月14日 分割線
一切都只是工具,如果你想賺錢,就要走出去,把菜刀用來切菜,讓自己的工具增加附加價值。這才是最重要的。喂,糟糕不是那個意思嗎?
// fuck.c
#include &
inherit F_CLEAN_UP;
int main(object me, string arg)
{
object obj, old_target;
if ( !wizardp(me) environment(me)-&>query("no_fight") )
return notify_fail("這裡禁止戰鬥。
");
if (!arg || !objectp(obj = present(arg, environment(me))))
return notify_fail("你想XX誰?
");
if ( !obj-&>is_character() )
return notify_fail("看清楚一點,那並不是生物。
");
if ( obj-&>is_fucking(me) )
return notify_fail("加油!加油!加油!
");
if (obj==me)
return notify_fail("你不能fuck自己。
");
if (me-&>is_busy())
return notify_fail("你現在正忙著呢。
");
if (!obj-&>query("can_speak"))
return notify_fail("獸交?目前還不提供這種服務。
");
message_vision("
$N對$n說道:"
+ RANK_D-&>query_self(me)
+ me-&>name() + ",願與"
+ RANK_D-&>query_respect(obj) + "同登極樂,不知"
+ RANK_D-&>query_respect(obj) + "是否願意!
", me, obj);
if (!userp(obj)) {
if (obj-&>query("sexuality") == "virgin") {
if (obj-&>query("class") == "yaomo") {
message_vision("$N哼了一聲,對$n說:"
+ RANK_D-&>query_rude(me) + "!分明是想盜取"
+ RANK_D-&>query_self_rude(obj) + "的"
+ (obj-&>query("gender")=="男性" ? "真陽!" : "真陰!")
+ RANK_D-&>query_self_rude(obj) + "饒不了你!
",
obj, me);
} else {
message_vision("$N臉色大變,怒喝道:"
+ RANK_D-&>query_rude(me) + "!"
+ RANK_D-&>query_self_rude(obj)
+ "面前竟然說出如此下流言語,我看你活得不耐煩了!
",
obj, me);
}
me-&>fuck_ob(obj);
obj-&>kill_ob(me);
} else if (obj-&>query("sexuality") == "carnality") {
message_vision("$N笑道:"
+ RANK_D-&>query_self(obj)
+ "求之不得!
", obj);
me-&>fuck_ob(obj);
obj-&>fuck_ob(me);
//} else if (obj-&>query("sexuality") == "pudency") {
} else {
message_vision("$N頓時臉上一紅,不知該如何是好。
", obj);
tell_object(obj, HIM + me-&>name() + "盯著你發出一陣淫笑,顯然沒安什麼好心!
" NOR);
me-&>fuck_ob(obj);
obj-&>fight_ob(me);
}
}
return 1;
}
int help(object me)
{
write(@HELP
指令格式 : fuck &<人物&>
HELP
);
return 1;
}
找不到高大上的工作去讀了研畢業以後還是找不到於是去了國企...
面向巧合編程ˊ_&>ˋ
寫代碼的時候自信滿滿,「這麼簡單的邏輯,寫什麼注釋啊,連條狗都能看懂」,過後卻怎麼都看不懂這代碼為什麼要這麼寫,然後把好代碼給改廢了,等到發現問題時才他媽想起來原來為什麼要那樣寫,又改回去了。
我在說我自己。推薦閱讀: