面向对象方法的优势简化软件开发的过程_软件开发技巧的途径
軟件開發(fā)的復(fù)雜性每天都在增加。幾乎每年都會發(fā)布一個新的框架(例如AngularJS,ReactJS)和一個新的構(gòu)建工具(例如Webpack,Rollup)。甚至每年都會發(fā)布新的JavaScript版本(ECMAScript 2015、2016和2017年即將發(fā)布)!
通常,在軟件開發(fā)的其他領(lǐng)域中也存在相同的情況。
例如移動應(yīng)用程序。2年前,蘋果推出了一種新的編程語言Swift。iOS操作系統(tǒng)幾乎每年都會發(fā)布具有新API和功能的新版本。
這對軟件行業(yè)來說非常有用。但是對于我們軟件開發(fā)人員來說,這是很大的負(fù)擔(dān)。
不幸的是,人類的知識創(chuàng)造力令人印象深刻……但有限。您不能(也不應(yīng)該)知道所有新框架和構(gòu)建工具。
軟件開發(fā)人員可以做什么?解決方案是應(yīng)用有效的學(xué)習(xí)策略:接受編程基礎(chǔ)知識。
編程基礎(chǔ)包括算法,數(shù)據(jù)結(jié)構(gòu)和編程語言知識。
如果您想成為一名出色的軟件開發(fā)人員,毫無疑問,您應(yīng)該不斷掌握趨勢技術(shù)(例如React,Redux和Angular)。同時,他們付出了相同的努力來定期學(xué)習(xí)基礎(chǔ)知識,例如算法,數(shù)據(jù)結(jié)構(gòu),編寫伸縮性原理和簡潔代碼。
本文是我對如何處理開發(fā)復(fù)雜性的看法。此外,您會發(fā)現(xiàn)開發(fā)人員的精通進(jìn)度的有趣劃分。我將這些階段命名為上下顛倒的三角形,矩形和三角形。
1.概念
編程基礎(chǔ)的重要部分是算法。算法是對應(yīng)該執(zhí)行以獲得結(jié)果的操作的逐步說明。
使用編程語言將算法編碼到計(jì)算機(jī)中。Web開發(fā)人員通常使用JavaScript進(jìn)行編碼,iOS開發(fā)人員通常使用Swift(或Objective-C)進(jìn)行編碼。
您應(yīng)該知道的常見算法類別:
- 排序算法:冒泡排序,插入排序,快速排序等
- 搜索算法:二分搜索,廣度優(yōu)先搜索,深度優(yōu)先搜索等
- 最短路徑算法:Bellman-Ford算法,Dijkstra算法等
- 數(shù)學(xué)算法:斐波那契數(shù)列,最大公除數(shù),最小公倍數(shù)等
現(xiàn)有算法的數(shù)量令人印象深刻。這些算法中的許多算法都是軟件開發(fā)和聯(lián)網(wǎng)的基礎(chǔ)。
在學(xué)習(xí)算法時,我聽到的第一個原因是開發(fā)人員無需確切了解特定算法的工作原理。您可能認(rèn)為所有現(xiàn)有算法都已實(shí)現(xiàn),測試并包含在標(biāo)準(zhǔn)庫中。
或者您從來沒有在JavaScript中使用Bellman-Ford算法的案例。
如果您確定要成為一名成功的軟件開發(fā)人員,那么這種借口是錯誤的做法。要構(gòu)建復(fù)雜且高質(zhì)量的應(yīng)用程序,您必須具有算法知識。
實(shí)際上,算法是在標(biāo)準(zhǔn)庫中實(shí)現(xiàn)的,開發(fā)人員無需手動編寫它們。但是,由于缺乏專業(yè)知識,開發(fā)人員無法查看何時使用特定算法很好地解決了問題。
存在具有算法的庫,但是開發(fā)人員在有用時根本看不到這種情況。
詳細(xì)學(xué)習(xí)算法是寶貴的經(jīng)驗(yàn)。學(xué)習(xí)和掌握它們可以培養(yǎng)解決難題的直覺。
強(qiáng)大的直覺是定義優(yōu)秀的軟件開發(fā)人員的原因。當(dāng)然還有經(jīng)驗(yàn)和紀(jì)律。
直覺是純金。數(shù)據(jù)結(jié)構(gòu)也是必不可少的方面。學(xué)習(xí)它們將教您如何正確表示應(yīng)用程序中的信息。
正確選擇的數(shù)據(jù)結(jié)構(gòu)具有巨大的好處。它使管理數(shù)據(jù)的代碼更易于編寫和維護(hù)。數(shù)據(jù)操作,存儲,查詢等操作更易于實(shí)現(xiàn)。
質(zhì)量代碼由有效的算法和方便的數(shù)據(jù)結(jié)構(gòu)組成。
2.初學(xué)者:上下顛倒的三角形
為了簡化表示,將編碼能力劃分為簡化方案:
- 基礎(chǔ)知識:與算法,數(shù)據(jù)結(jié)構(gòu),計(jì)算機(jī)科學(xué)問題,應(yīng)用程序設(shè)計(jì)原理(SOLID,KISS,DRY,SoC),可伸縮性相關(guān)的所有內(nèi)容
- 語言:與編程語言(JavaScript,Swift,Java),語法,運(yùn)算符,變量,編譯器相關(guān)的所有內(nèi)容
- 框架:與框架(AngularJS,ReactJS,Cocoa Touch)和平臺(瀏覽器,NodeJS)相關(guān)的所有內(nèi)容。
軟件開發(fā)精通的第一級是初學(xué)者,它由一個倒置的三角形表示。
每個程序員(包括我)都從這個級別開始。
初學(xué)者對特定的框架(例如ReactJS)感到非常興奮。他遵循了一些框架教程,并且具有不錯的理解水平。
此類開發(fā)人員的JavaScript知識對于使用ReactJS進(jìn)行編程是必需的最低要求。他擅長定義變量,函數(shù),ES2015模塊和ReactJS組件。
但是他有像JavaScript的更深層次的概念,問題href="https://dmitripavlutin.com/gentle-explanation-of-this-in-javascript/">是如何this關(guān)鍵字作品,原型繼承,提升和事件循環(huán)。
缺乏語言經(jīng)驗(yàn)會對JavaScript中的組件編碼方式產(chǎn)生負(fù)面影響。通常,黑客和變通方法僅用于使事情正常進(jìn)行。
算法和數(shù)據(jù)結(jié)構(gòu)的知識非常有限。
當(dāng)應(yīng)用程序的一部分可能受益于眾所周知的算法時,開發(fā)人員看不到這一點(diǎn),便開始發(fā)明輪子。而且,發(fā)明的輪子通常質(zhì)量低并且浪費(fèi)時間。
最常用的數(shù)據(jù)結(jié)構(gòu)是數(shù)組和純JavaScript對象。但僅此而已。
3.精通:矩形
下一個級別是熟練的開發(fā)人員,用矩形表示(我希望將自己歸于這個級別!)。
熟練的開發(fā)人員已經(jīng)很好地掌握了ReactJS框架和JavaScript語言。他的代碼中的駭客數(shù)量很少。
熟練的開發(fā)人員可以看到某些數(shù)據(jù)結(jié)構(gòu)或算法使代碼更加高效的情況。但是直到有限的水平。
例如,應(yīng)用程序具有一個組件,該組件經(jīng)常在具有很多元素的數(shù)組中進(jìn)行搜索。如果很少更改數(shù)組,則開發(fā)人員認(rèn)為對數(shù)組進(jìn)行排序是合理的。并且當(dāng)需要執(zhí)行搜索操作時,請使用二進(jìn)制搜索算法,在這種情況下,該算法非常有效。
在矩形情況下,開發(fā)人員能夠創(chuàng)建高質(zhì)量的應(yīng)用程序,但效率最高。
4.專家:三角形
上層是專家開發(fā)人員,他掌握了所有三個方向:基礎(chǔ)知識,語言和框架。他由一個具有堅(jiān)實(shí)底數(shù)的三角形表示。
專業(yè)的開發(fā)人員能夠看到某些算法的效率,并在必要時應(yīng)用它們。他從選擇正確的數(shù)據(jù)結(jié)構(gòu)中受益,使數(shù)據(jù)操作變得簡單。
挑戰(zhàn)是從可用算法中選擇最適合具體情況的算法。這是獲得最大可能性能的平衡過程。
由于編程語言是一種表達(dá)算法思維的工具,因此開發(fā)人員所寫的語言無關(guān)緊要。專家可以使用多種語言:JavaScript和Ruby,或C ++和Java。
5.建議
趨勢框架甚至語言都遲早會消失。它們將被更好的工具所取代:這是進(jìn)化的必然結(jié)果。您可以做的就是強(qiáng)調(diào)基礎(chǔ)知識。
當(dāng)然,基礎(chǔ)知識很難學(xué)習(xí)。許多算法很難理解和記住。我的建議只是為了好玩:您可能會多次閱讀復(fù)雜的算法。考慮一下可以帶來特定數(shù)據(jù)結(jié)構(gòu)的好處。挑戰(zhàn)自己,變得越來越好。
盡管基本面很困難,但還有一個令人愉悅的好處:它不會經(jīng)常更改。從80甚至70年代開始并沒有創(chuàng)建任何重要的新算法或數(shù)據(jù)結(jié)構(gòu)。一次又一次地學(xué)習(xí)它們,然后不時重復(fù)它們,那么您就很好了。
面試過程
像Google,Apple和Microsoft這樣的大型軟件公司都非常重視算法和數(shù)據(jù)結(jié)構(gòu)。這些公司的采訪中包含許多計(jì)算機(jī)科學(xué)問題,白板編碼,平衡樹等。
我讀過許多帖子,批評這種方法,公司會查詢錯誤的技能。他們說開發(fā)人員在“現(xiàn)實(shí)世界”編程中不處理排序算法或平衡樹。
您可以輕松地?fù)魯∵@樣的論點(diǎn):我從未遇到過精通算法和數(shù)據(jù)結(jié)構(gòu)的程序員,然后聲稱這是浪費(fèi)時間。此外,大多數(shù)人聲稱這些很重要。
我個人同意計(jì)算機(jī)科學(xué)面試問題。由于軟件開發(fā)行業(yè)發(fā)展如此迅速,因此公司需要具有扎實(shí)背景的開發(fā)人員。
一方面,這樣的開發(fā)者可以有效地解決復(fù)雜的問題。另一方面,他可以輕松適應(yīng)新的語言和框架,以適應(yīng)快速發(fā)展的行業(yè)。
最后,成為一名專業(yè)人員真的很高興。如果系統(tǒng)詢問您:“請使用Dijkstra的算法解決此問題[…]”。沒問題!拿粉筆,輕松解決問題,并給他們留下深刻的印象!
采取行動
成為主人沒有捷徑。使您變得更好的是學(xué)習(xí)和練習(xí)。
不斷學(xué)習(xí)和練習(xí)。您可以同時向三個方向前進(jìn)。基本原理,語言和框架同樣重要。JavaScript開發(fā)人員可以從以下內(nèi)容開始:
- 基礎(chǔ)知識:Steven S. Skiena的《算法設(shè)計(jì)手冊》
- 語言:Kyle Simpson的《JavaScript入門》系列
- 框架:React:啟動和運(yùn)行 Stoyan Stefanov
在這些方向上鞏固自己的基礎(chǔ)之后,再上一個臺階:
- 代碼的質(zhì)量和可讀性: Robert C. Martin 編寫的干凈代碼(我最喜歡的書之一)
- 面向?qū)ο蟮脑O(shè)計(jì)和可伸縮的代碼:設(shè)計(jì)模式:可重用的面向?qū)ο筌浖脑?
原著作者:德米特里·帕夫魯汀
文章來源:國外
原著鏈接:
Dmitri Pavlutin Blog?dmitripavlutin.comPS:原著文章內(nèi)容為英文版本,建議使用360極速瀏覽器進(jìn)行翻譯閱讀。
總結(jié)
以上是生活随笔為你收集整理的面向对象方法的优势简化软件开发的过程_软件开发技巧的途径的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OFDM子载波频率 知乎_通过基于SDR
- 下一篇: html5教学案例撰写,怎样撰写教育教学