同為程序員為何你工資這么低?為何BAT面試要面算法?
中國(guó)有80%以上的程序員覺得算法在日常開發(fā)中并沒有實(shí)際用處,殊不知算法只是一種解決問題的思想。
而我國(guó)大部分程序員都是沉浸在會(huì)多少個(gè)框架、會(huì)多少門編程語(yǔ)言、實(shí)現(xiàn)過多少個(gè)接口中。在大部分程序員日常開發(fā)中很大一部分工作的目的都只是尋求業(yè)務(wù)功能實(shí)現(xiàn)。但是在BAT,他們面對(duì)的是每日龐大的請(qǐng)求量,除業(yè)務(wù)功能外他們還需要考慮性能、體驗(yàn)、穩(wěn)定性,此時(shí)代碼的效率和嚴(yán)謹(jǐn)性就比功能的實(shí)現(xiàn)更加的來的重要。
下面就以最經(jīng)典的雞兔同籠子問題看算法在編程中的重要性,讓大家明白同為程序員為何你工資這么低?看完這下服氣了嗎?
雞兔同籠問題
問題(業(yè)務(wù)需求):已知籠子里共有20個(gè)頭56只腳,請(qǐng)問雞和兔子分別有多少只?
普通程序員(實(shí)現(xiàn)業(yè)務(wù)型):
這類程序員只注重業(yè)務(wù)的實(shí)現(xiàn),不會(huì)去深究需求的底層邏輯。在他們眼里循環(huán)是萬(wàn)能的,沒有循環(huán)解決不了的問題,一層不行那就兩層,兩層就行就三層。。。
for (int i = 0; i <= 20; i++)
{
for (int j = 0; j <= 20; j++)
{
if( i + j == 20 && 2*i+4*j == 56)
cout<<"雞:"<<i<<"兔:"<<j<<endl;
}
}
稍微會(huì)動(dòng)一點(diǎn)腦思考的,可能會(huì)發(fā)現(xiàn)只需要一層就能實(shí)現(xiàn):
這類程序員在開發(fā)中會(huì)注重到自己代碼的質(zhì)量,盡量減少無謂的代碼和循環(huán),但是仍然沒有涉及到本質(zhì)的算法。
for (int i = 0; i <= 20; i++)
{
if(i*2+(20-i)*4 == 56)
cout<<"雞:"<<i<<"兔:"<<20-i<<endl;
}
用一點(diǎn)算法思維來實(shí)現(xiàn)業(yè)務(wù):
問題的本質(zhì)是兔子比雞多2只腳,通過這個(gè)差異來構(gòu)建思路,可以不用任何循環(huán)就實(shí)現(xiàn)業(yè)務(wù)需求
double allRabitFootCount = 20*4 ;
double chickCount = (20*4 - 56)/(4-2) ;
cout<<"雞:"<<chickCount<<"兔:"<<20-chickCount<<endl;
上述例子中雞兔總數(shù)量比較少,三種實(shí)現(xiàn)運(yùn)行效率都差不多,但是如果雞兔的總數(shù)達(dá)到萬(wàn)億級(jí)別呢?那么這三種方案的效率差距就是顯而易見的。
結(jié)語(yǔ)
很多程序員到現(xiàn)在還粗暴的將算法與數(shù)據(jù)結(jié)構(gòu)畫等號(hào)。
對(duì),目前力扣上的算法題基本全是跟數(shù)據(jù)結(jié)構(gòu)掛鉤的,但是在大家應(yīng)該明白各類數(shù)據(jù)結(jié)構(gòu)當(dāng)初被創(chuàng)造出來也是為了應(yīng)對(duì)越來越豐富的業(yè)務(wù)需求,本質(zhì)也是解決業(yè)務(wù)需求的一種思想。比如鏈表的出現(xiàn)是為了應(yīng)對(duì)更加高效便捷的動(dòng)態(tài)線性數(shù)據(jù)存儲(chǔ)。
算法是一種思想,也是一種讓業(yè)務(wù)更高效、更穩(wěn)定的編程習(xí)慣。
如果大家對(duì)應(yīng)編程更底層、更深入的一些思考感興趣歡迎大家關(guān)注大叔,訂閱下方專欄獲得更多編程知識(shí)






