Blog Cover Image

Inspire you to have New thinking, Walk out your unique Road.

有的時候,你無意間遇到的一些故事,會激發你的靈感,改變你的想法,接下來你會用與之前全然不同的觀念去創造屬於你獨特的故事。

Sign @MinaYu.

[後端小菜鳥] 如何突破新手階段

Posted on

在背景知識不太夠,程式技術也才剛起步時

新手通常是利用關鍵字查找Google

查到什麼就下什麼指令或跟著做,幸運的話就可以動

不幸運的話,頂多就是換下個查找到的網頁繼續試

就這樣一步一步將程式建構起來

這個階段通常是剛學程式的歡樂驚喜幼幼時期之

程式語言好玩好玩真好玩時期


但這一切在我進公司後,有了很大的化學變化

面對新的專案或者公司內部開發的產品

你會不知道該如何下手,網頁應該查不到

畢竟專案/產品可能是在幼幼時期的好幾倍困難

即便是從資訊碩士剛畢業的自己,也覺得業界與學校的gap挺大

剛進公司開始我還是照著以前的方法報什麼錯就拿去辜狗,並且亂搞一通

從來沒問過自己

為什麼他會報錯?

除了抄程式碼外,我也從來沒去了解我抄的程式碼背後的意義

隨著在公司陸陸續續的進步

我想分享一下,怎麼突破幼幼時期的門檻,繼續晉升前進

如何進階初階工程師

在前幾篇文章中,我有分享前輩給我制定了一項訓練計畫

  • 初階工程師技能

  • 專案相關技術學習

初階工程師的技能分別是

  1. 學習debug 工具,並運用在追蹤程式/問題

  2. 開始接觸 Design Pattern

  3. 學習 Unit Testing,並掌握 3A: Arrange, Act, Assert 的開發節奏

  4. 學習 重構 refactoring,並能識別 bad smell

專案相關技術學習其實就是要了解這個專案要做的功能會用到的技術

好比如果是做資料庫的CRUD, 可能就會需要學習 SQLAlchemy


根據上面的兩項: 初階工程師技能相關技術學習

若說在「資訊」相關學系學到的屬後者:相關技術學習

**「相關技術學習」**也可以說是程式語言+背景知識的融合

畢竟寫程式是為了解決問題,在這個情況下就能得知為什麼程式語言就只是工具

就算程式語言本身還沒有學到很熟,也可以邊開發專案邊學習

所以簡單來說當我們今天開發一個需要連結資料庫做CRUD(Create, Read, Update, Delete)操作及對外接收資訊時

會需要用到的相關技術以python來舉例,就會是

  1. 先去了解開發的功能會需要用到哪些背景知識(資料庫, 如何做接收參數)

  2. 熟悉自己使用的程式語言相關的套件與語法

  • 資料庫: pymysql, sqlalchemy

  • 接收資訊: request, (懂json格式,或以list, dict做傳遞)

以上是**「相關技術學習」**


在研究所撰寫程式時,我並不善用函式

初學程式時,「函式」對我來說是較難理解的部分

我會想盡辦法避開它,所以我寫的程式會越寫越落落長

變得不易去讀,也難除錯

當開發小型專案時或許能這麼做,但是當需要用到兩個甚至三個以上的for迴圈,你就會很頭痛

光是學習程式語言及背景知識其實還不夠

接下來來講講「初階工程師的技能」,是我進公司才開始學習

初階工程師的技能,主要功用是輔助自己寫好程式

當剛進入一個開發到一半的專案,或者你遇到bug欲解決時

除了看錯誤訊息外,我們在此篇有介紹Debug的流程

突破幼幼班時期的第一個:學會使用Debug工具

除了拿來利用Debug外,也可以拿來追蹤整體的Code

各大編譯都有Debug工具,我寫Python, 所以我用Pycharm (可是我一開始用Atom, 然後變成VScode, 最後才是Pycharm)

我覺得Python的Debug工具 必學 Step Over, Step Into, Step…

以及利用Debug工具開始去了解每一行程式的功能,傳遞了什麼參數,做了什麼

再也不是查網站亂抄程式,出錯看錯誤訊息,將訊息貼到估狗查詢,亂處理一通了(這為我的慘痛經驗)


第二:學習Design Pattern

在網路上有篇網誌比喻Design Pattern為遊戲的連續技

在學校我完全沒有聽過這個名詞,當時只知道程式語言要好好的學習,完全無知Design Pattern

Design Pattern 學習連結 :非關語言:設計模式

當認識程式語言後,撰寫過許多次程式語言後

過了一兩年,有些人回來看自己的程式碼,也許會覺得怎麼這麼慘不忍睹XD

你也曾寫過那種落落長長一行寫到底毫無分段分層的程式碼嗎?

我有XD

Design Pattern 也是前輩認為突破幼幼班的關鍵之一

剛學習寫程式,一定有很多人會寫出很長很長,完全不換氣的程式碼

往往會造成很難閱讀,甚至當出bug時,也找不到bug

尤其剛學習程式,也不太會debug,就這麼的愣在那邊

附上的網站title就是非關程式,除了程式語言與背景知識外

其實軟體開發還需要學習很多跟以上兩者無關卻又非常重要的知識

慢慢學習Design Pattern 讓你了解前輩們的程式碼,也能讓自己寫出一口好閱讀的程式碼


第三:Unit Testing

在近代專案開發漸漸往「敏捷開發」前進

好險我在研究所的專案管理有讀到敏捷開發的論文

進公司後能夠快速了解公司的專案流程與迅速得知敏捷方法

早期專案通常是將全部程式都寫完後,才做測試

但往往會發現一堆bug, 這時候專案也近尾聲,讓工程師們急著趕工好像也不好

除了讓專案bug一堆就完工外,就是那大群程式碼不知道怎麼找bug

在敏捷方法中有一個方法叫 TDD , Test-driven development , 中文叫 「測試驅動開發」

主要是希望在撰寫程式前先寫好測試,再寫程式

功用是希望能在撰寫程式的同時做好測試,這樣能夠立即知道bug出在哪

書本上其實是顯示,先測試後寫程式的方法主要是因應客戶提出的需求

先在測試中寫出客戶的需求,然後之後寫的程式要能符合測試上的需求

我覺得這個算比較進階了,我也還在學習,但這依然是軟體開發中重要的技能


最後一個前輩列出的是:重構 refactoring

重構我也還沒去做學習,這邊不好去解釋什麼

程式碼重構,貼了一下維基百科

基本上功用是在不會讓軟體掛掉的前提下,將程式碼整理整理,讓可讀性變高

功能其實是

  • 讓可讀性變高

  • 減少bug產出

有一句話是

善用Unit Test + 重構

可提高開發效率,讓程式可讀性變高,減少程式產生bug,並在測試時符合需求,也在測試時提早抓出bug

以上是我最近學習到的技能,也分享給大家