當前位置:
首頁 > 知識 > 為什麼學了編程語言還是不會做軟體?

為什麼學了編程語言還是不會做軟體?

我是一個大學生,馬上大三了,其實沒感覺自己學會什麼,即使學了數據結構演算法,我也不知道該去如何寫個東西,一些思路沒有,什麼都不懂,請問您該如何走下去,就是一些改到實戰上的東西缺什麼都不懂,只懂基礎的語法,求您請教。

相信看這篇文章的大部分小夥伴,都經歷過這個階段。如果你還記得自己怎麼走過這個階段的,請留言幫幫這位提問的小小夥伴。接下來,我說說我的看法,拋磚引玉。

開發一個有一定規模的軟體,需要以下幾方面的知識、技能和能力:

編程語言、演算法、數據結構

應用框架

開發工具

業務分析

架構設計

任務拆分

程序設計

想像力

工程能力

規劃

計劃

項目管理能力

溝通

產品思維

這還不夠,還有很多我沒列出來的。所以從這個列表看,你現在只具備了「編程語言、演算法、數據結構」這部分最最基礎的東西,做不出來成型的軟體是自然的,非常正常。千萬不要因此而妄自菲薄。

為什麼說這是正常的?因為編程語言這類東西,充其量只是一把螺絲刀,你拿了一把螺絲刀,造不出來航空母艦,這很正常。

我們在初學時都覺得,我掌握了Java語法,學會了SSM,就應該能做出淘寶那類電商系統的後台。但實際上,不是這樣子的。

順序反啦!

正確的順序是:

看到了一個問題(需求)

腦海中孵化出一個產品(服務)來解決問題

用軟體開發技術把這個產品(服務)實現出來

注意到了嗎?做軟體必須從上帝視角出發,從全知全能到一磚一瓦。

但我們上學、我們去培訓,都是先反著教我們語言、演算法、數據結構、工具,所以我們學了那些玩意兒,也不會做一個能解決現實問題、有實際價值的軟體。

只有按照正確的思維來琢磨開發軟體這個事情,你才可能真的做出軟體來。

那怎樣訓練,才能具備從頭到尾開發一款軟體的能力呢?

學開車的過程是這樣的:

一個會開車的老司機在車上指點

我們在老司機的指點下,打火、掛擋、起步、轉彎

在老司機的帶領下,到路上去練

在少車的路上,自己練

在車少的路上,慢慢開

在正常的路上,慢慢開

想怎麼開怎麼開

在這個過程中,老司機就是那個開了上帝視角的人,他心裡車、有路、有路況、有應對各種路上的肌肉記憶和應急方案。他幫我們照顧著全局,所以我們可以在某個細節上慢慢學習。

學了一個又一個細節後,打火、起步、直角轉彎、倒庫、變速、停車,細分步驟一個一個都掌握了,我們才到真實的環境中去練。練得多了,實踐得多了,這些東西才能融合在一起,成為一種完整的能力:駕駛。

軟體開發能力也是這麼個訓練過程。

當你學習了編程語言、演算法、數據結構這些東西後,只相當於你懂得了如何打火、如何抓握方向盤、如何掛擋這些紙面上的知識。接下來你要做的是:

找一個具備開發軟體能力的人給你當教練

讓他給你設計一個實際的軟體

讓他幫你把軟體拆分成一個一個的模塊、一個一個的開發任務

你在他的指點下,一個一個去完成與你當下能力匹配的小任務

注意,你現在要做的是第4步,也就是別人分配好任務,甚至把類的介面都定義好了、方法名字都起好了,你去填寫方法內的代碼。

等第4步練熟了,你就是一個能出點活的、入門級的程序員了。這個時候,你能夠理解別人為什麼這麼拆分模塊和任務,能夠在別人的指點下完成一個軟體的子模塊。

然後,你就可以嘗試著往第3步走。

再然後,可以往第2步走……

再再然後,往第1步走,給別人當教練……

有人說,我找不來教練啊,怎麼辦?

我經非常喜歡一本書,它在沒人指點我時,給了我自己練習的指南,這本書的名字是——《Unix/Linux編程實踐教程》(作者是 Bruce Molay),不知道現在還有得賣沒。這本書會教你編寫 who 、cp 、 ls 、pwd 等 Linux 系統命令,非常贊。

這類書,提供了一個自我練習的思路,就是:從小而完整的問題著眼,慢慢遷移到大而複雜的問題。

沿著這種思路,我還找了幾個替代的辦法,供你參考:

找足夠小的問題來解決。比如統計文本文件中的單詞個數、記事本、重命名文件、定時任務、待辦事項列表、靜態網站、博客、圖片瀏覽器、複製命令、dir或ls命令等等。

找開源的項目,研究它某一個子模塊,嘗試著自己去實現。比如 ffmpeg ,研究它的 demux 模塊,嘗試著自己去解析 mp4 、mkv 等文件格式。

查看操作系統的自帶軟體和命令,比 notepad 、copy、dir、文件瀏覽器、ls、mv、cat、head、tail、find等,嘗試自己去實現。

找一本項目實戰類的書,操練書中項目。

找實戰類視頻課程,跟著練。

問你身邊的人或者觀察自己的生活,看有什麼問題,是能通過軟體解決的,嘗試著自己去做。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 千鋒JAVA開發學院 的精彩文章:

面試官:「談談Spring中都用到了那些設計模式?」
Kotlin技術分享:擴展函數和擴展屬性

TAG:千鋒JAVA開發學院 |