如果是為了掙錢,我應(yīng)該選擇競(jìng)爭(zhēng)性編程還是軟件開(kāi)發(fā)
對(duì)于計(jì)算機(jī)科學(xué)專業(yè)的學(xué)生來(lái)說(shuō),選擇一個(gè)決定不僅是一個(gè)令人困惑的問(wèn)題,對(duì)于正在尋找公司中更好的機(jī)會(huì)或正在成長(zhǎng)的經(jīng)驗(yàn)豐富的開(kāi)發(fā)人員來(lái)說(shuō),這也是一個(gè)艱難的決定 。今天,我們將詳細(xì)討論該主題,并嘗試解決這種混淆。在給出任何意見(jiàn)之前,我們先來(lái)看看一些在大型科技巨頭公司工作的工程師的意見(jiàn)。根據(jù)Microsoft工程師Satendra Verma的說(shuō)法,“盡管它可以提高您的技能,但優(yōu)秀的軟件工程師所需要的遠(yuǎn)遠(yuǎn)超出競(jìng)爭(zhēng)性編程所提供的。競(jìng)爭(zhēng)性編程并不是成為一名優(yōu)秀軟件工程師的必要條件。“但是如果我們談?wù)摿硪幻妫敲春芏喙こ處熞餐鈪⒓痈?jìng)爭(zhēng)性編程可以幫助他們抓住工作機(jī)會(huì)并成為軟件工程師。
難道不是同一件事嗎?如果不是這樣,那么在聘用軟件工程師的職位時(shí),為什么公司會(huì)優(yōu)先考慮競(jìng)爭(zhēng)性程序員。
競(jìng)爭(zhēng)性編程
執(zhí)行CP的最大優(yōu)點(diǎn)是,它使您的生活更輕松,而破解編碼采訪則對(duì)您來(lái)說(shuō)是小菜一碟。即使您是一位優(yōu)秀的軟件開(kāi)發(fā)人員,但不是一位有競(jìng)爭(zhēng)力的程序員,您在面試中仍可能會(huì)遭到拒絕。CP使您成為解決軟件開(kāi)發(fā)中非常重要的問(wèn)題解決者。
一個(gè)好的問(wèn)題解決者可以輕松地完成一些具有挑戰(zhàn)性和復(fù)雜的項(xiàng)目。當(dāng)您在處理大型項(xiàng)時(shí),將問(wèn)題分解成較小的單元并分別解決每個(gè)問(wèn)題,以使該項(xiàng)目對(duì)用戶有用是很重要的。他們可以將問(wèn)題分解為較小的部分,輕松地在頭腦中可視化解決方案,并且?guī)缀鯖](méi)有錯(cuò)誤地將它們轉(zhuǎn)換為代碼。在軟件開(kāi)發(fā)中非常需要此功能。優(yōu)秀的程序員還可以編寫(xiě)正確的代碼,并且不會(huì)犯很多錯(cuò)誤,這是它的另一個(gè)優(yōu)點(diǎn)。
假設(shè)你工作在一個(gè)大的項(xiàng)目,你需要與數(shù)據(jù)的傳輸塊來(lái)處理大型數(shù)據(jù)庫(kù)。在這里讀寫(xiě)將是一個(gè)耗時(shí)的過(guò)程,并且會(huì)降低應(yīng)用程序的性能。為了提高應(yīng)用程序的性能并節(jié)省大量資源,您需要編寫(xiě)高效的代碼。您可以提高代碼中函數(shù)的時(shí)間復(fù)雜度,并且可以通過(guò)將最常使用的數(shù)據(jù)存儲(chǔ)在緩存中來(lái)減少讀取調(diào)用。這樣做有競(jìng)爭(zhēng)力的編程幫助您找到最優(yōu)化的解決方案在最可能的時(shí)間。
軟件開(kāi)發(fā)
我們已經(jīng)討論了CP的優(yōu)點(diǎn),但是現(xiàn)在我們將討論CP的另一端,它不能與軟件開(kāi)發(fā)相提并論。熱愛(ài)CP的人通常不喜歡軟件開(kāi)發(fā)。原因是在大多數(shù)情況下,他們將不得不使用某些庫(kù),框架或某些工具來(lái)構(gòu)建已經(jīng)實(shí)現(xiàn)了功能的實(shí)際軟件。在這些情況下,他們找不到競(jìng)爭(zhēng)性編程技能集的用例。
作為一個(gè)有競(jìng)爭(zhēng)力的程序員,如果您認(rèn)為軟件開(kāi)發(fā)就是要在百度上搜索解決方案或在一些在線社區(qū)的幫助下,那您就錯(cuò)了。成為開(kāi)發(fā)人員是長(zhǎng)途跋涉。這需要時(shí)間。它需要一種編碼和開(kāi)發(fā)東西的文化。您需要自己確定要使用哪種工具,庫(kù)或框架來(lái)解決問(wèn)題(例如,何時(shí)使用MongoDB,何時(shí)使用MySQL或何時(shí)使用Elastic search很好)。最好的工程師是足夠聰明的人,可以使用最合適的工具來(lái)解決特定的問(wèn)題。
軟件開(kāi)發(fā)人員還處理系統(tǒng)的復(fù)雜性,可伸縮性問(wèn)題以及一些處理應(yīng)用程序性能問(wèn)題的技術(shù)(例如:緩存機(jī)制)。
在軟件開(kāi)發(fā)中,大多數(shù)時(shí)候您都是在團(tuán)隊(duì)中工作,而您的代碼不僅是您的代碼(競(jìng)爭(zhēng)的程序員通常是他們的主人)。因此,在軟件開(kāi)發(fā)中編寫(xiě)易于閱讀,易于修改,易于維護(hù)和易于擴(kuò)展的整潔,更好的代碼非常重要。沒(méi)有人喜歡在團(tuán)隊(duì)中處理由XYZ開(kāi)發(fā)人員編寫(xiě)的一些凌亂代碼。如果您在代碼庫(kù)中留下一些凌亂的代碼,您將受到其他開(kāi)發(fā)人員的憎恨。因此,此技能是軟件開(kāi)發(fā)人員應(yīng)具備的最重要技能之一。不幸的是,競(jìng)爭(zhēng)性編程無(wú)法教您此技能。
您還需要擅長(zhǎng)設(shè)計(jì)模式,操作系統(tǒng)。計(jì)算機(jī)網(wǎng)絡(luò),分布式系統(tǒng)以及計(jì)算機(jī)科學(xué)的其他一些基本概念。軟件開(kāi)發(fā)可以在多個(gè)方面提高您的水平。因?yàn)槟枰彤a(chǎn)品需求或項(xiàng)目中的任務(wù)與經(jīng)理或同事交談,所以它可以提高您的溝通技巧。在CP中,只有您才能編寫(xiě)代碼并提高等級(jí)。沒(méi)有其他人的參與。
關(guān)于軟件開(kāi)發(fā)的最好的事情之一是,您可以使他人的生活更輕松,并且對(duì)人們的生活產(chǎn)生重大影響。環(huán)顧四周,有許多應(yīng)用程序使我們的生活更輕松。美團(tuán),微信,支付寶等等對(duì)人們的生活產(chǎn)生了巨大影響。僅CP不可能完成這些事情。軟件開(kāi)發(fā)還為人們提供了自由職業(yè)的機(jī)會(huì),這是很多人的又一良好收入來(lái)源。
那工作機(jī)會(huì)呢?
是的,我們需要談?wù)撨@個(gè)話題,歸根結(jié)底,這一切都是為了賺錢。
如果我們談?wù)摮鮿?chuàng)公司,那么他們的要求是不同的。大多數(shù)時(shí)候,他們需要一個(gè)可以從頭開(kāi)始一切的開(kāi)發(fā)人員。他們需要從頭開(kāi)始建立和構(gòu)建所有內(nèi)容。因此,他們?cè)诠陀脮r(shí)的要求是不同的。他們處于開(kāi)發(fā)的初始階段,因此產(chǎn)品的用戶數(shù)量受到限制,因此有時(shí)不需要深入了解數(shù)據(jù)結(jié)構(gòu)和算法。 他們通常會(huì)雇用一些技術(shù)熟練的開(kāi)發(fā)人員,他們從事某些項(xiàng)目,并且可以從第一天開(kāi)始,幾乎沒(méi)有時(shí)間準(zhǔn)備。
如果我們談?wù)摯笮涂萍季揞^公司谷歌,百度,亞馬遜等等,則這些公司的要求是不同的。他們?cè)谌驌碛写罅坑脩簦麄兏P(guān)心應(yīng)用程序的效率和性能。他們需要一些具有較強(qiáng)數(shù)據(jù)結(jié)構(gòu)和算法知識(shí)的有競(jìng)爭(zhēng)力的程序員。當(dāng)然,有競(jìng)爭(zhēng)力的程序員最適合他們,因?yàn)樗麄兛梢砸愿行У姆绞剿伎己徒鉀Q難題。一個(gè)有競(jìng)爭(zhēng)力的程序員將能夠選擇正確的數(shù)據(jù)結(jié)構(gòu)和算法來(lái)完成任務(wù)。這些公司更多地關(guān)注代碼的復(fù)雜性。
結(jié)論
好了,開(kāi)發(fā)人員可以在沒(méi)有競(jìng)爭(zhēng)程序設(shè)計(jì)背景的情況下構(gòu)建好的軟件,但是您是否認(rèn)為,如果沒(méi)有CP技能和對(duì)數(shù)據(jù)結(jié)構(gòu)和算法的了解,他/她可以使應(yīng)用程序更快,更高效,具有更好的時(shí)間和空間復(fù)雜性?當(dāng)然不是。
關(guān)鍵是,如果您僅從事軟件開(kāi)發(fā),則將缺少競(jìng)爭(zhēng)性編程的一些優(yōu)勢(shì),這些優(yōu)勢(shì)可能會(huì)幫助您構(gòu)建優(yōu)質(zhì)的軟件。另一方面,如果您只從事競(jìng)爭(zhēng)性編程,那么您也很難適應(yīng)軟件開(kāi)發(fā)的文化。
他們倆都需要彼此。所以兩者兼得更好。,
即使我們建議同時(shí)選擇兩者,您仍然可以選擇一個(gè),然后做自己喜歡做的事情。這完全取決于您的選擇,并且如果您只想專注于某一件事,那完全可以。這兩個(gè)領(lǐng)域都有很多機(jī)會(huì),如果您100%地投入自己喜歡做的事情,就會(huì)得到足夠的報(bào)酬。