精華區beta CSSE 關於我們 聯絡資訊
※ 引述《tinlans ( )》之銘言: : ※ 引述《milochen (16/100天自我觀察)》之銘言: : : 其實活在台灣的資訊裡,很多都會迷失掉 : : 話說自己也是在科技大學畢業後,在當兵時, : : 剛好想說有機會會面臨找工作的問題,又聽說某某公司考C++是用英文的 : : 所以也來讀英文,順便去看看國外在討論問題時,他們的重心在那邊。 : : 接著才發現,不對耶!! 跟之前認知差距好大, 有非常大的不對勁。 : : 以前大學時代學校教的就是一個main.cpp打天下,反正老師也只知道說 : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ : 這種科大教授太不應該,普大還說得過去,科大教授還這樣真的說不過去, : 無奈的是科大教授普遍都沒有應當「傳授實務經驗」的自覺, : 不過再扯下去恐怕又會進入邪惡的政治議題了。 : 我科大時代的老師也沒有教這種東西, : 同學跟學弟都是到大三開始做專題才來問我的, : 當時他們才真正知道區分「宣告」跟「定義」的重要性, : 之前都以為我強調這個只是在吊書袋。 : 另外,The C++ Programming Language 這本書大概在第十章的地方, : 就會講到分多個 .C (泛指 .C .cpp .cxx) 跟 .H (泛指 .h .hpp .hxx) 的方法, : 不會的最好盡早學起來。 我唸書就學會這招,不過還真的一堆人都不知道...囧rz : 另外,也應該盡早學會 DLL 或 shared object 應用在 OO 上的技巧, : 一大堆人到了進去業界才知道 executable file 只要看到 base class, : 就能直接透過 dynamic binding 機制 call 到 dynamic library 中 : derived classes 內的 virtual functions, : 而反過來說, : 當 dynamic library 內的 source code 不可見, : 但其 header files 提供 base classes 的定義式時, : 使用 library 的人就可以透過繼承機制去 reuse 現有但不可見的 code。 : 只不過,書很少會講這種東西, : 也不會有講 OO design pattern 的書跟你說 factory 可以配這東西玩。 我在 COM 寫過類似的東西,不過又如何呢?只不過被微軟擺了一道 全部作成一顆 .exe 我還省事,搞個 DLL 還會版本衝突啥一堆的, user: 爽到你甘苦到我 : : "反正你就是要 #include <iostream>" 才能開始寫,然後會寫遞迴程式的人 : 從這角度來看, : 你們老師還不錯, : 我大學老師教的是 #include <iostream.h>。 : 然後同學之間流傳著兩岸之間不知道是誰開始的鬼講法: : #include <iostream.h> 不用 using namespace std; 所以比較方便, : 而 #include <iostream> 就要寫所以比較麻煩。 : : ,其程式功力在班上就可以排行前幾名了。但也也是一直到了大學 : : 因為我也是發現怎麼技職跟一般大學又有不對勁(就是類似台灣跟國外) : : 所以有一段時間去摸高中學的集合論裡面講的function為何,所以到後來才真的搞懂 : : 到底遞迴是怎麼一回事,才算是有個完整的了解。若要說真的全盤通, : 我印象裡國中就會講到 function 的意義, : 不過大學離散裡應該也會講到才對。 : 外國大學常把離散當成 CS 基礎科目之一, : 也是這個道理, : 以 UCSD 的 CS 來說, : 離散的課程代號就是 < 100, : 像是 CSE 20 這樣, : 屬於 lowerdivision, : lowerdivision 很接近台灣所謂的「通識課程」。 個人偏見:這種東西搞不懂也沒什麼關係 至於程式功力,我還不滿18歲看到國中生劉燈有辦法寫出 .txt 轉 .exe 秀中文就知道自己有多渺小了 : : 也已經是在當兵的時候了。 : : 不經感嘆,雖然同樣都是努力,不過在台灣就是很容易接受到錯誤的資訊與情報 : : 在我當兵時,曾經有人說「失敗的人講的話永遠不可採信,只有成功的人說的話才算數」 : : 她的道理在於「因為失敗的人之所以失敗,是因為他跟本就搞不清楚自己失敗在那」 : : 在台灣,如果平時不多作功課,主動的去接觸世界上的成功人事(不能僅限於台灣) : : ,多吸收成功人事的觀點,所謂的看書不是去看他們的自傳,因為這種會出書的東西 : : 說穿了就是為了在討好普遍的觀眾,自傳千萬不可看,而是要與他們親身交談去作了解。 : 我是認為失敗者的話雖不可全盤採信, : 卻有一定的參考價值, : 如果區分能力夠的話, : 曾經風光一時但最後失敗的失敗者, : 某些經驗也是可以參考的, : 只是聽的人必須要具備一定的判斷能力。 : 這個說法倒是跟你說的沒有衝突, : 就當成是一種補充吧, : 免得使某些人有因人廢言的錯覺。 : : 以前高職的時候,每一天至少都會花三個小時以上在作coding,不過不是for job : : 只是純碎因為 想到什麼東西,就可以寫出那個東西,因此而感到興奮。 : : 退伍出來工作也半年了,前三個月跟不會作系統分析的人作系統分析 : : (感觸是不知道那一天才能遇見真的SA,來作有用的SA,很多SA本身程式設計概念 : : 都還停留在procedural,然後號稱自己物件導向分析) : 我在外面的時候也碰過很多這種人, : 學校的學生頂多是因為「不知現實環境」而講出天真的話, : 在業界工作的人和學校教授就很愛「號稱自己會xxx」, : 從誠實的角度來講我倒覺得學生在這方面好多了。 : 工程跟商業不同的地方就在於, : 很多東西會和不會都騙不了人, : 隨便聊個三四句話就能知道這個人是不是半桶水或不懂裝懂, : 所以真的不要隨便亂虎爛, : 哪怕是虎爛技術強到神乎其技, : 在資深工程人員面前也不過是個小丑罷了。 本公司幾個天王能力都遠超過我,但是他們的共識是 市場比技術重要(一堆11x各位的老學長) : : 等到後三個月在作C++開發以後,才發現其實物件導向分析是什麼 : : 自己真的也是完全都不知道。 : : C++ 怎麼寫呢?? 寫了三個月才發現, 打從底子來說,自己跟本就是不會C++的人。 : : 應該要來整個全部重新學習,否則一直拿著錯誤的舊觀念再繼續學下去的話, : : 跟本就不可能有學好的一天。 : : 但是說實在的,如何安排一個好的流程,來學好C++,自己其實也不知道到底要看什麼 : : 書,或者如何的來規劃。這方面的資訊可能版上很多,但其實自己也不知道那個才是 : : 對的,那個是可以follow的方向。所以真的要學習,就是一直作開發,有問題就發問。 : : 也別無其它辦法了。 : 進入業界以後才開始學會痛苦得多, : 因為 C++ 就算是時間超多的學生大概也是得花個 2 年時間才行, : 在業界的時候私人時間少, : 看書的時間都斷斷續續的, : 學習成效會取決於個人的記憶能力極限, : 所以我反而不建議工作環境用不到的業界人士去花時間學, : 在業界還有很多屬於在業界應該學習的東西, : 在什麼階段以學什麼東西為優先是比較恰當的態度, : 不然可能會因此而拖累到別人, : 也會影響到自己給同事及上司的觀感。 : 如果說是工作上會用到的話, : 那就只能拼了。 業界要有人重視才行,業界最重視的還不是學歷 就算C++耍的比別人精最後發現人家C都不太熟 薪水比你多一萬還不是幹得要死 台清交電資碩士才是王道,C++?等考上再學吧, 用實力證明自己很行這條路很苦的! : : 像高職對於作硬體設計方面有一套很完善的流程,可以讓你好好學之後,會對整個 : : 設計非常清楚。而一般大學特別是在數位邏輯設計實務上特別不行,這時不得不佩服 : : 當初在歸劃這個學硬體設計的課程時,竟然可以把這麼複雜的東西,整理到 : : 國中數理程度的就能夠容易上手。這真的是相當不簡單的一件事。 : 現在的高職被改到很慘了, : 已經沒我們當初讀的時候這麼王道, : 歷史地理也被插入高職課程, : 排擠掉了專業課程和實習課程, : 電子學也剩下兩學期而非四學期了。 : 不過補習班老師的水準依然很夠力, : 雖然鼓勵補習不是一件好事, : 但補習班老師會認真思考「教學方法」, : 而非傳統觀念所認知的「解題技巧」, : 當初我補習班老師就從觀念開始打通, : 從 BJT 到 FET 的計算全部只要背一條公式就能貫通, : boolean 代數化簡完全不用卡諾圖直接在式子上消等等的, : 學校的實習老師也屬於觀念推導型的, : 強調會歐姆定律就可以處理實務上的一切問題。 : 而你所說的數位邏輯電路, : 我覺得透過實習去抓感覺很重要, : 將化簡後的代數式直接接成電路跑出來, : 可以獲得成就感以及對理論的信任感 (這在類比電路上也是一樣), : 在現在實習課被砍成這樣的狀況下, : 多數學生所會的只剩下解題而已, : 這還真的是蠻遺憾的。 : 其它的因為最後都會扯到邪惡的政治議題, : 就不再講下去了。 我是硬體的東西學的太差才去跑軟體的,結果多年後又回到EE領域, 唉唉~ 當年一堆人聊天也是講EE唸的好誰要來唸CS!? : : 不過不知道像要學軟體開發的話,不知道有沒有這種一連貫的流程。如果真有就好了:( : : 以C++來說,其實台灣應該本來有很好的環境可以培養, : : 因為有聊到一位在西安那邊的人,碩士畢業後有去作軟體開發工作 : : Design Pattern是他們最基本在用的術語,他們的認知裡這是需要經驗但很好用的東西 : 把前人的智慧和心血丟在一邊, : 本來就是很不好的行為, : 有豐富工程經驗的人應該都能深深體會到這點, : 其實台灣也有不少這種人存在, : 只不過這是 % 數的問題, : 所以台灣這種公司以及員工在「數字」上顯得較少。 : 加上對岸人口直接導致的菁英篩選率, : 競爭意識也比台灣來得更加強烈, : 自然而然就會演變成你聽到的這樣。 這種東西為什麼不受重視? 講難聽一點,我見過一堆領了不少股票賺了幾百萬上千萬的, 他們的電腦裡還不是一堆盜版軟體 唯有台灣社會認同軟體的價值, design pattern 才會被認為是 一門真正的學問 又或者說台灣軟體哪天創造的價值不輸給硬體,學校的軟工教授 的地位就不輸給搞半導體那票人時, design pattern才會被認為 是既愛迪生發明燈泡之後最偉大的發明 不過以台灣的淺碟文化,算了吧! : : ,他們的認知裡認為,作程式設計的人,不能不會這本書。他們也很喜歡侯捷,因為 : : 大陸那邊的人其實英文並不是很好,翻譯的書藉對他們的學習帶來很的幫助,所以 : : 像侯捷翻譯的書,對他們來說實在是太有幫助了。後來想想, : : 台灣的技術還沒被大陸覆蓋掉??,覺得還滿不可思議的 : : 後來想想可能是因為台灣的企業界所保有的 硬體設計 經驗知識 : : 是大陸那邊一時還無法取代的關係。 : 就我目前觀察到的是, : 軟體方面對岸也尚未能覆蓋台灣, : 原因不是在於工程方法, : 而是賣弄小聰明這點台灣商人經驗比較豐富, : 但小聰明究竟能撐得了多久, : 還值得慢慢觀察。 : 在工業界, : 商人的嘴炮得以實現奠基於工人的工程能力, : 一旦工程能力到達極限, : 嘴炮也會膛炸, : 現在只不過是極限未到罷了; : 而商業界則不在此討論範圍。 大陸有夠大的內需市場來培養本土軟體公司,台灣嘛.. 政府宣佈刪減IT預算你看有多少公司跑出來哭爸, 可見得有多少公司是靠政府標案過日子 扣掉這些公司,還有幾家公司是真正做出夠水準的軟體 外銷賺錢?再對比台灣本土CS畢業生人數,各位能不擔心嗎? 不過也是見過不少人吃政府奶水吃得爽爽就是了 : : Google 跟 MS 在大陸徵才,月薪也只有給二萬元人民幣, : : 位於北京中國科學院 ,一個少年班的,26歲拿到博士,可以自己一個人獨立開發 : : distributed virtual machine,薪水我有點忘了,好像月薪一萬還兩萬人民幣。 : : 什麼是少年班? 沈向洋 就是少年班的, : : 反正 少年班 是 算是一種很猛的天才特殊教育 XD : : 這些都是大概自己透過因緣際會的關係,實際獲得的一些小情報 : : 然後一方面又看到自己的C++,跟本就是直接稱的上「不會C++」還比較貼切 : 我看過北京 Intel 的 compiler 工程師寫出的 code, : 雖然是 C++ 寫的但是跟不會 C++ 沒啥兩樣, : 之所以沒慘死是因為當初 SGI 的人寫得好; : 你說的 Google 跟 MS 徵到的人其能力我也見識過, : 論平均程度的話, : 對岸軟體方面的工程能力跟 10 年前的台灣不會差很多, : 所以會開那種價位徵才我倒是覺得頗合情合理的。 : 對岸的超強技術份子有些集中在中央軍委搞的國防科學技術大學, : 過去在跟(嗶----)合搞 C4ISR 系統時有去做過大量交流, : 深深發覺到我們的中正理工學院和國防科技人才根本是個(嗶--), : 但是這也是正常現象, : 雙方投入的資金差太多了。 但是台灣半導體有國際水準?為何軟體是這種水準?? : : 說真的自己跟本不知道 繼承 要如何使用 : : 頂多只知道 用 concrete class去繼承 abstract class而己 : : 而且我只會用像大大您說的 像這樣子的寫法 : : class Derived { : : ItemBase *first; : : ItemBase *second; : : ItemBase *third; : : ... : : }; : : 很多以前在金石堂買的C++書,所說的那個繼承,到最後都會發現 : : 為什麼都用不起來。到底繼承的精隨在那邊, : 在於要定義一個 family 的時候, : 不過必須先理解 Dependency Inversion Principle (DIP) 再下手, : 以免出現慘案。 : 前面提到的 reuse 純 binary 形式的 library 也是一例。 : : 現在想想還真的不知道何時才需要concrete class 去繼承 concrete class。>"< : 盡量不要這樣搞, : 其實我發現一堆 MS 環境的 IDE 在自動 generate source code 時, : 都已經擺明是用合成方式 reuse 元件了, : 結果一堆奇怪的小朋友明明常年都在用, : 卻都沒有得到啟發, : 問他們為什麼都跟我說有看到但沒去想那麼多。 : : 很糟糕,繼承它有這麼多的規範,有friend,protect,public,private什麼的 : : 以前都從書亂看看來的,現在等真的上戰場時,發現怎麼都不知道怎麼用 : : 而且之所以用,也常常只是為了要讓 在 語法 合法, 而 語意 上常常是無意義的 : 以非正規角度來說, : 這些東西是「為同事和後輩著想」用的, : 只要思考出發點是在這裡, : 就比較不會感到迷惑。 : 如果你有閒的話, : 可以打開 CVS 的 web-front 追蹤看看, : 你的同事過去用你的東西有沒有發生過什麼問題, : 這是對於比較內向的人蠻實用的技巧, : 不過前提是所待的團隊有正確的 CVS 使用觀念。 : 另外,能加上 const 的地方就盡量加上 const, : 尤其是 member functions 的 prototype 後面那個, : 只是要 traverse container 的 iterator, : 最好也是用 container_type::const_iterator, : 不要為了一時方便自己而造成整個 team 的負擔, : 遺憾的是聽不進去的人就是聽不進去。 : 這些東西跟 OO 其實比較無關, : 這種封裝的概念在純 C 時代就有了, : 也就是 static 跟 extern 在 global space 上的用法, : static 在 module 上有 private 的意涵, : 而 extern 在 module 上有 public 的意涵。 : 至於 protected 和 friend 則是支援 ADT paradigm 的程式語言, : 為求效能和方便性上的變通所做出來的。 : 如果你不知道我在說啥, : 可以請教一些 80 年代就在公司工作的前輩。 : : 其實還蠻想要把以前學的C++ 概念重新刷掉, : : 整個把自己當作白紙從新來學 。 但又不知道 : : 該如何去判斷 那個 書可學,那個書不可學。 : : 或者那個書適合,那個書不適合看。 : 可以從 C++ 的兩本聖經本下手, : 如果想重頭的話, : 不過如前所述, : 因為你現在已經在業界, : 個人建議是有需要才學。 : : 見笑了 >"< 把C學好就很夠用了,在台灣會好幾種程式語言還不如 去多學幾種MCU,MPU 旁邊的老人跟我抱怨現在願意寫asm的人越來越少,拜託連C都 越來越少人會,結果一堆廠商找不到熟C的人,真是太爆笑了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.133.33.4