關於跨專業的一點思考: 從土木到計算機


新的開始

1 關於土木跨專業

開始接觸計算機的時候, 學習了數據結構和操作系統, 加上有之前土木工程中積累的數學基礎和工程實踐基礎, 本應很好跨入這個行業, 但細細想來, 最大的失誤還是由於思想上的失誤.

和土木工程類似, 軟件工程也是一門工程實踐性活動, 不在於追求正確, 而是在之前科學發展的基礎上, 利用已有工具和已有方法(或者說是工程思想), 來構造出"可靠"的產品.

這樣的理解, 所有的工程人員應該都會贊同.

2 個人情況

年初, 抱着這樣的心態, 開始了轉行, 俗話說轉行窮三年, 當然三年並不算什么, 只要堅持下來肯定有收獲, 這也是我為什么會有今年收獲的原因.

年初參加培訓班, 就完全把這個思想和工具使用的過程跑偏了.

當然這個只能算是誤入歧途, 就好比病急亂投醫一樣.

到了現在10月, 之前去過一家公司, 看到的是轉行和真正計算機出身的差距.

因為本應接觸到的是思想, 但實際一直被培訓班灌輸的是怎么按部就班地使用工具, 就好像是一只猴子在學習怎么用筷子一樣. 還好只是在那里呆了2個月就退學了. 不過還是那句話, 並不建議跨專業者直接去培訓班, 完完全全的扯淡! 對於計算機專業的學生, 可以進去看看, 不說學什么, 只是進去感受一下整個社會的環境.

3 有所感悟

軟件開發本就不是一門手藝, 而是一個系統性的工程.

聽過MIT或者Stanford公開課的同學就會知道, 開始先從一門語言入手, 學習的並不是語言, 而是思想及原理, 等到學生學會了某些思想或基本原理之后, 便繼續學習之后的課程.

而之后的課程就是在思想的基礎上介紹各種語言工具. 再在已有的工具基礎上繼續學習思想, 這樣往復, 再者開始學習軟件工程中的一些科學方法, 造就出的就是專門適應於軟件工程方面的人才.

4 對於跨專業又沒有多少基礎的人的建議

  • 就和跨考計算機研究生一樣, 首先是要有基礎, 計算機理論基礎無外乎就是考研強調的那四科: 數據結構, 操作系統, 計算機網絡, 組成原理.

  • 要學的是原理以及思想, 要利用的是工具. 比如那些把自己框在JAVA, 框在 iOS 上, 對於各種框架里面有什么東西滾瓜爛熟, 但寫出來的軟件到最后發布還是漏洞百出, 這樣的人並不是真的碼農.

  • 軟件工程: 仍然是學習它里面的方法. 傳統的軟件方法學, 面向對象軟件方法學.

    但是不要跑偏了, 不要想着學了方法學就成了巨牛的軟件工程師, 方法學只是教導方法, 能夠將方法應用到實踐中去, 才是真~牛逼!

    並且跨專業的人缺的是: 相關的專業訓練.

    我很推崇在做中學, 但是要讓跨專業者, 在一年內做到計算機專業學生4年或者是7年甚至10年內所接觸的所有訓練, 這個簡直是痴人說夢.

    我自己的辦法是, 盡量在鞏固基礎的前提下, 分階段完成一些訓練項目.

    之前公司內完成的項目也讓我意識到真正工程化的實踐活動需要的是什么, 現在也在不斷努力, 不斷推進...整個軟件大環境普遍急功好利, 開始做一個軟件, 想着的是快點做完, 做完拉倒, 新功能來了, 囫圇吞棗一頓加, 加完發現bug一大堆, 前面的bug還沒改完, 后面的bug接踵而至, 從來沒有單元測試, 回歸測試, 直接轉到有中國特色的"用戶大規模測試", 這么諷刺的事估計也只有小公司才會遇到, 我在工程單位的時候, 再怎么垃圾的單位他也還是知道修橋的時候要不斷地測量, 要做材料試驗, 做完了也要做加載試驗啊.

    很多書上把面向對象思想形式化地描述為: 繼承, 封裝, 多態. 或多或少地在誤導消費者, 把面向對象思想簡單描述為這三點是不是有點牽強呢?

    那有的人就會想, 那我在某些面向對象的語言中能夠實現這些, 我就掌握了面向對象思想咯!

    簡直就是扯淡.

    以前的時候, 數據和對數據的操作是分離的, 在軟件開發的時候, 待到軟件規模大到一定程度, 人腦不一定能夠駕馭得了這么大規模的軟件結構.

    面向對象軟件開發中, 將數據與其相應操作封裝到一個可以被識別的對象內, 和人類的思維習慣類似, 再者, 可以把若干個對象組織起來, 構成模塊, 再者, 將多個模塊組織起來形成更大的模塊, 這樣才能構造出現代的大型軟件系統. 不管你是分層還是分模塊, 基本思想不還是: 你給我一些輸入, 我就可以保證在這個結構內給你想要的輸出.

    再想想, 面向對象解決的問題, 不就是幾點:

    • 軟件復雜性問題:

      就好比制造一個汽車橡膠輪胎, 你可以先買來橡膠, 鋼材(也就是數據), 然后你學會怎么把橡膠弄成一圈, 然后學會怎么將鋼材弄成適合形狀(操作), 然后通過這些操作加工這些數據, 最后生產出一個輪胎.

      上面這一輪的思考是: 你總是作為所有過程的直接參與者.

      面向對象時的思考方式呢?

      還是生產輪胎: 我就可以請一個做橡膠輪圈的人, 一個做輪轂的人, 請他們生產好輪圈和輪轂, 再請一個組裝人員, 搞定組裝, 一個輪胎現身.

      就生成這個層面上, 兩者的差別還是挺大的, 有人可能會問, 最后細分下來, 不還是和最開始的思考方式一樣么?

      能一樣么? 確定的對象總是具有確定的功能, 這樣就可以將模塊按照人類的思考方式划分, 最后的產品出來是一樣, 但生產過程的管理不是更加輕松?

    • 工程方法的改進:

不建議非計算機專業的一開始就跨入"計算機科學"的范疇, 因為如果你真的想研究計算機科學的話, 那么你肯定並且絕對是: 數學專業的, 物理學專業的, 計算機相關專業的...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM