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