這就是軟件工程師

第一部分? 行業(yè)地圖

選擇:一線和次一線城市機(jī)會(huì)巨大

1.北京

2.上海煤蹭、深圳、杭州

3.成都取视、廣州硝皂、南京、廈門

4.福州作谭、蘇州

軟件工程師的四大臺(tái)階:

階段

能力

1

新手階段

執(zhí)行力

2

進(jìn)階階段

設(shè)計(jì)能力

3

高手階段

融會(huì)貫通的能力

4

行業(yè)大神階段

沉淀方法論和開創(chuàng)新領(lǐng)域的能力

35歲不是年齡的坎兒稽物,而是能力的坎兒。

持續(xù)學(xué)習(xí)是剛性要求折欠。

分類:交互(UI)贝或、系統(tǒng)(前后端)、算法怨酝、數(shù)據(jù)分析傀缩、測(cè)試、運(yùn)維

第二部分? 新手上路

1.入行前

正式入門語言:Java农猬;

操作系統(tǒng):Linux赡艰;

編程IDE:IntelliJ IDEA;

數(shù)據(jù)庫設(shè)計(jì)工具斤葱;

編程框架(Spring Framework)

離散數(shù)學(xué)中的數(shù)理邏輯和集合論 (數(shù)學(xué)建模慷垮、圖論揖闸、抽象代數(shù)、拓?fù)鋵W(xué)料身、運(yùn)籌學(xué)汤纸、博弈論(機(jī)器學(xué)習(xí)、AI的基礎(chǔ)))

選擇平臺(tái):去面向未來芹血、技術(shù)驅(qū)動(dòng)的公司

這家公司做的事情贮泞,要適應(yīng)未來的發(fā)展

技術(shù)驅(qū)動(dòng)、以技術(shù)文化為主導(dǎo)的公司

需求分析——>設(shè)計(jì)(技術(shù)調(diào)研幔烛、原型設(shè)計(jì)啃擦、架構(gòu)設(shè)計(jì)等)——>編碼——>測(cè)試

新人階段:1.養(yǎng)成良好的工作習(xí)慣 2.培養(yǎng)自己的執(zhí)行力

2.編碼

代碼規(guī)范、設(shè)計(jì)模式饿悬、架構(gòu)模型令蛉、運(yùn)維和開發(fā)的最佳實(shí)踐

(1)編碼規(guī)范?

行業(yè)規(guī)范:《代碼大全(第二版)》、《代碼整潔之道》狡恬、《重構(gòu):改善既有代碼的設(shè)計(jì)》珠叔、《程序員修煉之道:通向務(wù)實(shí)的最高境界》

(2)設(shè)計(jì)規(guī)范 (API接口規(guī)范、設(shè)計(jì)模式弟劲、架構(gòu)規(guī)范)

《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》祷安、《架構(gòu)整潔之道》、《微服務(wù)設(shè)計(jì)》函卒、《數(shù)據(jù)密集型應(yīng)用系統(tǒng)設(shè)計(jì)》辆憔、《Web API的設(shè)計(jì)與開發(fā)》

(3)生產(chǎn)規(guī)范(一套標(biāo)準(zhǔn)化的上線流程)

《人月神話》、《SRE:Google運(yùn)維解密》报嵌、《持續(xù)交付:發(fā)布可靠軟件的系統(tǒng)方法》

優(yōu)質(zhì)代碼:

(1)初級(jí):可讀

命名有意義虱咧;布局清晰;注釋明確……

(2)中級(jí):可擴(kuò)展

可維護(hù)(面向?qū)ο蠛秃瘮?shù)式的設(shè)計(jì)模式锚国,比如狀態(tài)機(jī)腕巡、聲明式編程、SOLID血筑、IoC/DIP)

(3)高級(jí):可重用

代碼可以用在很多場(chǎng)景(輪子可以用在馬車绘沉、汽車、飛機(jī)上)

DSL豺总、面向?qū)ο蟮脑O(shè)計(jì)模式车伞、Web Service、”Codeless”

復(fù)雜度一般由業(yè)務(wù)邏輯喻喳、控制邏輯和數(shù)據(jù)邏輯組成另玖,業(yè)務(wù)邏輯決定了復(fù)雜度的下限,控制邏輯決定了復(fù)雜度的上限。? 分開è 解耦

設(shè)計(jì)模式谦去、函數(shù)式編程慷丽、DSL、狀態(tài)機(jī)鳄哭、插件要糊、依賴倒置和反轉(zhuǎn)控制等

整潔代碼:不是寫出來的,而是讀出來的(方便他人閱讀)

代碼注釋:像說明書一樣清晰(函數(shù)的功能以及如何使用它妆丘,example)

編程原則:

(1)避免重復(fù)原則(DRY, Don’t Repeat Yourself)

抽象成數(shù)學(xué)模型锄俄,數(shù)學(xué)建模;用一種方式解決多種問題

(2)單一職責(zé)原則

一個(gè)類或者模塊應(yīng)該只有一個(gè)職責(zé)(各司其職)

簡(jiǎn)單化飘痛、模塊化珊膜、讓你的組件不斷復(fù)用

(3)高內(nèi)聚、低耦合原則

內(nèi)聚:一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密程度

耦合:不同模塊之間的依賴程度

讓每一個(gè)模塊做到獨(dú)立宣脉,做到精益求精,同時(shí)把模塊間的耦合降到最低剔氏,不會(huì)因?yàn)閯?dòng)了一個(gè)模塊塑猖,而導(dǎo)致其他模塊出現(xiàn)問題。(沒有依賴就沒有傷害)

(4)開閉原則

對(duì)修改是關(guān)閉的谈跛,對(duì)擴(kuò)展是開放的羊苟。

3.測(cè)試

程序測(cè)試包括:?jiǎn)卧獪y(cè)試、功能測(cè)試感憾、集成測(cè)試蜡励、非功能測(cè)試、回歸測(cè)試等阻桅。

種類

目的

單元測(cè)試(白盒測(cè)試)

測(cè)各個(gè)模塊(零件)是否都能正常工作

功能測(cè)試(黑盒測(cè)試)

各個(gè)模塊合在一起能否正常運(yùn)轉(zhuǎn)

集成測(cè)試

模塊和模塊之間或者系統(tǒng)和系統(tǒng)之間的測(cè)試

非功能測(cè)試

檢查軟件應(yīng)用程序的非功能性方面(性能凉倚、可用性、可靠性等)

性能測(cè)試嫂沉、安全測(cè)試稽寒、穩(wěn)定性測(cè)試、健壯性測(cè)試趟章、破壞性測(cè)試杏糙、可用性測(cè)試、靈活性測(cè)試等

回歸測(cè)試

把以前做過的測(cè)試以及犯過的錯(cuò)誤再測(cè)一遍蚓土,確保代碼或配置的修改宏侍、需求的增加不會(huì)影響現(xiàn)有功能

做測(cè)試最好的方式不是用人工,而是寫代碼蜀漆。自動(dòng)化測(cè)試

想要做好測(cè)試谅河,先訓(xùn)練自己全面思考的能力。

4.成長論

1.拆分任務(wù):動(dòng)手工作前,先做任務(wù)分解

2.閱讀代碼:重要的不是寫代碼旧蛾,而是讀代碼

讀什么樣的代碼莽龟?(1)被反復(fù)使用的代碼(2)穿越時(shí)間的代碼(3)好調(diào)試的代碼

3.找到捷徑:通讀牛人代碼

4.追本溯源:多讀文檔,多讀書

第三部分 進(jìn)階通道

1.設(shè)計(jì)程序

原型設(shè)計(jì):面向用戶锨天,提前打個(gè)樣毯盈。

(1)先做最難的部分,既能提早發(fā)現(xiàn)問題病袄,又能節(jié)省開發(fā)時(shí)間搂赋。

(2)原型設(shè)計(jì)的關(guān)鍵是接口

架構(gòu)設(shè)計(jì):面向開發(fā)人員,一份詳細(xì)的施工藍(lán)圖益缠。

包括概要設(shè)計(jì)(high level desogn)和詳細(xì)設(shè)計(jì)(low level design)

《設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》

(1)分而治之脑奠,理清思路。

(2)考慮系統(tǒng)的異常情況和極限情況幅慌。

技術(shù)調(diào)研

(1)調(diào)研做得好不好宋欺,和閱讀代碼的能力高度相關(guān)。

(2)分析優(yōu)缺點(diǎn)胰伍,結(jié)合場(chǎng)景才有效齿诞。

2.項(xiàng)目管理

開發(fā)模式

開發(fā)模式

特點(diǎn)

具體實(shí)現(xiàn)

瀑布式開發(fā)模式

傳統(tǒng),一層一層開發(fā)

缺點(diǎn):慢

先分析需求骂租,產(chǎn)生需求文檔祷杈;

再做概要設(shè)計(jì),技術(shù)選型等渗饮;

接著做詳細(xì)設(shè)計(jì)但汞,事無巨細(xì)地梳理流程和細(xì)節(jié);

最后編碼互站、測(cè)試私蕾、上線。

敏捷開發(fā)模式

做一點(diǎn)發(fā)一點(diǎn)云茸,小步快跑是目,快速迭代

本質(zhì):化繁為簡(jiǎn)

先把框架搭出來,把后續(xù)任務(wù)拆解成一個(gè)個(gè)小模塊标捺,讓每個(gè)團(tuán)隊(duì)負(fù)責(zé)其中一塊懊纳,大家根據(jù)協(xié)議并行開發(fā),最后拼在一起亡容。

班車模式

瀑布和敏捷的折衷

按一定節(jié)奏

我的發(fā)布每周一次嗤疯,趕得上就跟著一起發(fā),趕不上就等下一班闺兢。

分布式微服務(wù)開發(fā)模式

所有團(tuán)隊(duì)之間沒有工程上的依賴茂缚,大家耦合在一個(gè)標(biāo)準(zhǔn)的開發(fā)模式和框架上戏罢,能非常方便和高效地協(xié)作。(DevOps開發(fā)模式)

把代碼庫脚囊、數(shù)據(jù)庫全部分開龟糕,每個(gè)服務(wù)都由一個(gè)全功能的小團(tuán)隊(duì)來負(fù)責(zé)。

驗(yàn)證效果:做A/B test悔耘,用數(shù)據(jù)說話讲岁。

監(jiān)控打磨:上線前做好監(jiān)控與壓測(cè)(一般可上10倍的壓力)

3.學(xué)習(xí)進(jìn)階

打牢基礎(chǔ),以不變應(yīng)萬變

打牢自己的理論基礎(chǔ)衬以,比如編程的一些方式缓艳、修飾模式(添加新的行為的設(shè)計(jì)模式)、解耦看峻、提升代碼重用度等阶淘。

技術(shù)基礎(chǔ)

程序語言

語言的原理,類庫的實(shí)現(xiàn)互妓,編程技術(shù)(并發(fā)溪窒、異步等),編程范式车猬,設(shè)計(jì)模式……

系統(tǒng)原理

計(jì)算機(jī)系統(tǒng)霉猛,操作系統(tǒng),網(wǎng)絡(luò)協(xié)議珠闰,數(shù)據(jù)庫原理……

中間件

消息隊(duì)列,緩存系統(tǒng)瘫辩,網(wǎng)關(guān)代理伏嗜,調(diào)度系統(tǒng)……

理論知識(shí)

算法和數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)庫范式伐厌,網(wǎng)絡(luò)七層模型承绸,分布式系統(tǒng)……

搭建體系:用知識(shí)樹系統(tǒng)學(xué)習(xí)

主動(dòng)學(xué)習(xí):提高你的學(xué)習(xí)效率(討論,實(shí)踐挣轨,教授給他人(寫博客军熏、做分享))

第四部分 高手修養(yǎng)

預(yù)見未來:軟件工程師要有前瞻能力

權(quán)衡利弊:軟件工程師要有取舍能力

攻克難題:主動(dòng)尋找技術(shù)難題;嘗試不同解決方案

關(guān)鍵決策:技術(shù)選型的六大要素

看這項(xiàng)技術(shù)解決的是不是大問題卷扮。(主觀)

看這項(xiàng)技術(shù)解決問題的方式是否讓人有想象空間荡澎。(主觀)

看有沒有大公司撐腰(客觀)

看有沒有很好的技術(shù)社區(qū)(客觀)

看有沒有殺手級(jí)應(yīng)用(客觀)

看有沒有經(jīng)歷10年以上的時(shí)間(客觀)

代碼評(píng)審:不是“做出來”,而是“做漂亮”晤锹。

Google’s Code Review Guidelines

設(shè)計(jì):代碼是否經(jīng)過精心設(shè)計(jì)并適合系統(tǒng)摩幔?

代碼是否符合開發(fā)者意圖?代碼對(duì)用戶是否友好鞭铆?

復(fù)雜性:代碼是否可以更簡(jiǎn)潔或衡?未來其他開發(fā)人員接手時(shí),是否易于理解與易用?

測(cè)試:代碼是否經(jīng)過正確且設(shè)計(jì)良好的自動(dòng)化測(cè)試封断?

命名:開發(fā)人員是否為變量斯辰、類、方法等選擇了明確的名稱坡疼?

注釋:注釋是否清晰有效彬呻?

風(fēng)格:代碼是否遵循了谷歌的代碼風(fēng)格?

文檔:開發(fā)人員是否同步更新了相關(guān)文檔回梧?

含金量高的比賽:

GCJ(Google Code Jam)废岂、Facebook Hacker Cup、KDD Cup

第五部分 行業(yè)大神

丹尼斯.里奇(Dennis Ritchie)

C語言之父狱意,UNIX系統(tǒng)聯(lián)合發(fā)明人

保持簡(jiǎn)潔

林納斯.托瓦茲

Linux之父湖苞,開源運(yùn)動(dòng)的發(fā)起人,發(fā)明git版本控制器

只是為了好玩

吉多.范羅蘇姆(Guido van Rossum)

Python之父

允許不完美详囤、保持開放

瑪格麗特.漢密爾頓(Margaret Hamilton)

拯救人類登月計(jì)劃

制定規(guī)范财骨,嚴(yán)格測(cè)試

杰夫.迪恩

開創(chuàng)分布式系統(tǒng)

開創(chuàng)新領(lǐng)域

法布里斯.貝拉

QEMU、FFmpeg藏姐、TinyC隆箩、QuickJS

一個(gè)人就是一支隊(duì)伍

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市羔杨,隨后出現(xiàn)的幾起案子捌臊,更是在濱河造成了極大的恐慌,老刑警劉巖兜材,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件理澎,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡曙寡,警方通過查閱死者的電腦和手機(jī)糠爬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來举庶,“玉大人执隧,你說我怎么就攤上這事』Ы模” “怎么了镀琉?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長添祸。 經(jīng)常有香客問我滚粟,道長,這世上最難降的妖魔是什么刃泌? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任凡壤,我火速辦了婚禮署尤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘亚侠。我一直安慰自己曹体,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布硝烂。 她就那樣靜靜地躺著箕别,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滞谢。 梳的紋絲不亂的頭發(fā)上串稀,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音狮杨,去河邊找鬼母截。 笑死,一個(gè)胖子當(dāng)著我的面吹牛橄教,可吹牛的內(nèi)容都是我干的清寇。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼护蝶,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼华烟!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起持灰,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤盔夜,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后堤魁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體比吭,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年姨涡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吧慢。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡涛漂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出检诗,到底是詐尸還是另有隱情匈仗,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布逢慌,位于F島的核電站悠轩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏攻泼。R本人自食惡果不足惜火架,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一鉴象、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧何鸡,春花似錦纺弊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至隔盛,卻和暖如春犹菱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背吮炕。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國打工腊脱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人来屠。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓虑椎,卻偏偏與公主長得像,于是被迫代替她去往敵國和親俱笛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捆姜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 這就是軟件工程師 一行業(yè)地圖 特質(zhì):簡(jiǎn)單務(wù)實(shí),極致創(chuàng)新 在國內(nèi)迎膜,互聯(lián)網(wǎng)行業(yè)正處于原始積累階段泥技,或者叫圈地運(yùn)動(dòng)階段。...
    沐舒萌呀閱讀 235評(píng)論 0 0
  • 第一章:行業(yè)地圖 特質(zhì):簡(jiǎn)單務(wù)實(shí)磕仅,極致創(chuàng)新 軟件工程師不是只會(huì)搬磚的碼農(nóng)珊豹,而是一群簡(jiǎn)單務(wù)實(shí)的人,他們通常專注于自己...
    C星禾C閱讀 1,285評(píng)論 0 0
  • 下面是總結(jié)這本書的一些重要點(diǎn) 行業(yè)地圖 特質(zhì):簡(jiǎn)單務(wù)實(shí)榕订,機(jī)制創(chuàng)新 簡(jiǎn)單店茶、喜歡偷懶、嚴(yán)謹(jǐn)劫恒、創(chuàng)新 普世低調(diào)的創(chuàng)新精神贩幻,...
    霍曉龍2021強(qiáng)化班閱讀 400評(píng)論 0 1
  • 行業(yè)術(shù)語 接口( Interface ): 一種用來定義程序的協(xié)議,通過銜接軟件系統(tǒng)中的不同組成部分两嘴,實(shí)現(xiàn)計(jì)算機(jī)軟...
    FrankZhang63閱讀 465評(píng)論 0 0
  • 第一部分 行業(yè)地圖 選擇:一線和次一線城市機(jī)會(huì)巨大 第二部分新手上路 1.入行前正式入門語言:Java丛楚; 操作系...
    姚天航_家族四期閱讀 100評(píng)論 0 0