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