發表文章

目前顯示的是 5月, 2014的文章

這半年來的目標不斷變化…

前天學長問我近況怎麼樣,我說這半年來的目標不斷變化,但講的有點結巴和不清不楚,用這篇文章來釐清一下  起初,大概上學期的時候,打算輔系或雙主修,後來想著不如轉系了吧,因為如果是輔系或雙主修的話,我還是要拿到統計學士學位,代表我還要修系上的必選修課,那些我無心學、不知所云、只能靠背的課,實在不想再忍受和應付它們,之前去上課的感受非常差,我心想就算這樣混了文憑出去,也是死很慘 這學期初第三階段選課期間得知我的狀況因為不符轉系條件,所以不能轉,原本一心指望轉系這個看似唯一的路,突然被宣告行不通,我頓時陷入有些焦慮的狀態,我心想這下我是要延畢把統計系的課都修完還是重考、轉學考?無論如何得先想個辦法,不擇手段了,我甚至有點厚臉皮的打電話給一個很久沒聯絡的電機系畢業的學長,向他請教,他幫我想了一個特殊的轉系途徑,但我之後去問確定還是行不通 此後想了兩個方向,一個是往網頁程式設計發展,另一個是把學習嵌入式系統所需的前置知識學一學,電路、數位邏輯、作業系統、計算機組織…,然後去修黃敬群老師開的課 不過看我最近做的事情,往方向二的可能性很渺茫,我四月左右受到朋友的提醒,讓我反省預期的方向和自己正在做的事情之間,是否一致或有關聯,發現似乎沒有,我當時90%重心都在演算法設計與實作這門課的作業,如果我真的想走方向二,那就還要學上面說的那幾個東西,不應把心力全放在演算法,於是我開始翻作業系統課本,大概一個禮拜多我就沒搞下去了,一方面常常讀不懂和有點枯燥乏味,另一方面是程設有project要做,這個project一定要完成,不然我的分數會囧掉,結果電路、數位邏輯、作業系統、計算機組織...這些東西基本上都沒在碰了 回顧這學期到目前為止做了什麼,累積一些實踐演算法解決問題的經驗、學了一點點關於os的觀念、還有學C++、用C++寫數獨程式和貪食蛇程式、上完清大MOOC開的計算機網路概論、把Codecademy的javascript課程和HTML/CSS課程上完,前幾天買了Head First HTML & CSS來看... 坦白講都滿基本的,而且滿零碎的,我現在有點執著於盡快學會「派的上用場、讓我出去能混飯吃、生存下來」的技能,但又不知道具體到底要點出哪些技能(更根本的問題也許是我有那個時間或堅持去把技能點出來嗎?),聽說雖然工...

在Codecademy學HTML和CSS─運用CSS來取代手動做tag的attribute設定

圖片
進入CSS課程後,我對它的理解是一個老道理:Don't repeat yourself (DRY). tag那麼多,如果想要設定什麼,都要去每個特定tag那裏加attribute,這會超級麻煩的,所以就統一寫好一些格式設定在一個CSS檔,然後讓html document去引用這個CSS檔,就會自動對某一類tag套用設定,省code、省麻煩,總而言之,這好像是原本你要很多開關來分別控制一堆燈泡,現在用一個開關就可以控制很多你想控制的燈、達到你要的控制效果 要讓用CSS寫的內容發揮作用,有兩個辦法,一個是寫一個CSS檔案,然後讓html document去引用這個CSS檔,另一個辦法是寫在html document的<style></style裡面 不過剛剛試了在html編輯模式下貼上代碼,預覽後會使我的部落格整個大變形和混亂orz...,只好只分享代碼 瀏覽器開啟後長這樣,藍字Codecademy是連結,下面那個按鈕也是連結,用CSS簡化了tag的attribute設定

在Codecademy學HTML─基本的tag、attribute運用

圖片
今天上了Codecademy的HTML和CSS課程,廢話不多說,先直接展示做了什麼吧,我知道這看起來像是直接用部落格編輯的,原始碼附在下面,我是白天的時候打好html檔,然後在用blogger編輯的時候切換到HTML模式貼上我的html檔,這檔案用到基本的<img>, <ul>, <ol>, <a>, <p>, <strong>, <em> tags,還有用到style這個滿通用的attribute來修改字體大小、字型、顏色 Yulin Age: 22 Gender: man howntown: Mars Interests Learning to programming Leisures Watch animes Play computer games Go jogging Jobs: students Favorite Quotes: "I know that I know nothing.'" Where I've Lived: Tainan Favorite animes Fate zero psycho pass steins gate Attack on Titan Favorite games World of Warcraft Age of Empire II: HD Warcraft III Goal: Learn HTML, CSS, javascript (and Ruby, Ruby on Rails?) Become a web developer 原始碼:

有系統的訓練、學習的挫折感

趁著一股氣,一點點怒氣(?)+受刺激覺得自己差人很多的氣+...,把一些想法記錄下來   今天演算法設計與實作課,一位復旦大學計算機學院的教授來分享一些訓練學生的方法和經驗,我印象最深刻的其中一段是「有系統的訓練」,提到他們會提供給學生除了題目外,還有詳細的測試資料、詳細的解題思路和程式碼,在有這三者的提供下訓練,另外是先從資料結構訓練起,才進入到演算法(詳細的主題順序我就不清楚了) 會對「有系統的訓練、學習」這點印象深刻的原因,就是自從去年暑假轉換方向以來,我有時會覺得自己在學習computer science, programming的過程上, 好像缺乏了什麼 ,有的東西事後看,訝異學習效率怎麼會差成這樣,例如之前學C、修資料結構,我現在覺得很奇怪為什麼指標、陣列之間的關係我會那麼久才搞清楚?明明不難,還有資料結構教科書前幾章,一堆沒用的資訊(無誤),當時為什麼耗那些時間在上面?還有stack, queue, linked list這些明明一個小時就可以搞清楚的東西,我當時到底是在想什麼?書是一個問題、沒有好的指導者是一個問題、沒有人可以討論是一個問題、自身學習能力不夠是一個問題...,綜合起來的後果之一就是缺乏系統性的學習,當時我是完全的新手,只約略覺得可能要從一個程式語言開始入門,但學程式語言要做什麼、對計算機要了解到什麼程度、在學習的過程中遇到問題可以怎麼辦(這點個人覺得很重要,因為問題帶來的挫折感是削弱學習動力的強大殺手)...等等 如果我能給過去的我建議,我會說,不要看C++之父寫的Programming: Principles and Practice using C++,這根本完全不適合新手,閱讀前幾章也許還好,但到某一個地方的時候會突然變得非常滯澀,跟學習程式語言不直接相關的東西(parsing)造成很大的學習障礙,我後來跑去Codecademy學javascript,親和很多,但有些枯燥乏味,我當時沒把它上完,前幾天我把它上完後發現,修完這課也許是能學到一點基礎物件導向的概念,但完全不知道JS在現實中是用在哪裡、能做什麼,也幾乎沒用JS寫到什麼大一點的程式,上完這課,頂多可以說自己懂JS的基礎語法,但不能說自己用JS寫過程式、做了什麼事情 學習程式語言應該從做中學 ,實際練習、做些東西,而不是去硬背規則和語法、只讀...

如果聚餐只是大家來吃個飯...

這學期社團的禮拜五中午訂餐,滿常是我負責在社團po文和訂的,我在手機設定每禮拜二中午提醒訂餐,應該有一點效果,比較少出現太晚po的情況,可是我發現有另一個問題,而且可能是更重要的,就是大家來聚餐的意義,我覺得應該是交流、認識新的學弟妹或學長姊、趁機邀約活動、營造團體的氣氛...等等,可是我最近幾次訂餐、吃飯,感覺我們只是來這裡吃個飯、各自跟已經熟識的人聊天、然後就走了,我總覺得有哪裡怪怪的,這樣的氛圍會讓人想再來嗎?除了吃飯,我們還能做什麼?

初學javascript筆記

今天花一些時間上codecademy,把去年暑假沒上完的javascript再上一上,過程我一直有個想法:學了C和C++後再學其它語言真的有差 掌握了一些本質的東西,就會發現有時只是符號表示不一樣而已,以下把今天學到javascript的一些詞,對應C++中類似的概念是什麼列出來 javascript:物件的property C++:class的member data javascript:物件的method C++:class的member function javascript:constructor C++:constructor 一個重點,我去年初學時沒認識到,就是C++是所謂靜態程式語言,在變數使用前一定要指明變數是什麼型態,編譯器才能配置對應的記憶體空間給程式,但javascript是動態程式語言,變數使用前不需指明型態,可以直接賦值,甚至這一行assign變數一個整數,下一行assign同一個變數一個string也可以,我心想這樣會不會很容易出問題啊?不過我暫時還沒去找答案,這問題就先擱著 接下來講的就是細節的東西了,javascript要初始化物件有兩種方式:literal notation, constructor notation

POJ 2392 Space Elevator

題意: 有一些不同的磚塊,每個磚塊有一定的高度、數量、和最大高度限制,輸入第一列會給一個數字n,代表磚塊的種類,接下來n列會給每個磚塊的資訊,每列3個數字,(高度, 最大高度限制, 數量),所謂最大高度限制是指,假設現在只有一種磚塊,資訊是2, 5, 100,2 + 2 + 2 > 5,雖然磚塊數量很多,但因為這種磚塊不能超過高度5,所以根據這些磚塊,我堆磚塊高度最高就只能到4,題目要求給定磚塊資訊下、各種磚塊滿足最大高度限制下,堆這些磚塊所能達到的最高高度是多少 解題思路: 多重背包問題(物品是有限的),把高度想成背包重量上限,磚塊就是物品,現在物品的重量和價值的值一樣,比較不一樣的一點是,這個題目並沒給出一個有明確重量上限的背包要你去塞東西,而是求在滿足各種磚塊的最大高度限制下,所能堆出的磚塊堆最大高度是多少 很明顯的一點,堆出的最大高度 <= 所有磚塊裡的最大高度限制,因為不能超過磚塊的最大高度限制,所以我就想對於1 ~ n種磚塊,假設第i種磚塊的最大高度限制是max[i]、高度是h[i],對於第i種磚塊,從背包重量上限max[i] ~ h[i]去考慮放或不放,整個流程做完,再從記錄狀態的DP陣列的末端開始往回找,找第一個DP[index] = index的就是了 可是結果TLE,後來改用以2為基底的數量湊堆的方式下去考慮,結果是錯的,這有點微妙,解釋起來有點麻煩,簡而言之,如果上述流程不是從最大高度限制最低的開始,依序增加的去考慮的話會錯... Code:

POJ 1276 Cash Machine

題意: 某銀行想提供一個提鈔機以供提錢,input有數列、以EOF結尾,每列第一個數字表示現在想提的金額數目,第二個數字表示提款機目前有多少幣值的錢,以它給的第一個範例輸入來說 735 3 4 125 6 5 3 350 第二個數字是3,代表提款機目前有3個幣值的錢,後面的3對資料,每對都是(數量, 幣值),因此$125的有4張、$5的有6張、$350的有3張,而3*125 + 350 + 2*5 = 735,代表這台提款機可以供應想要的確切金額數目735,如果可以供應想要的確切金額,就印出金額數字,如果無法exactly供應,就印0 解題思路: 典型多重背包,稍微轉換一下就清楚了,把一個錢轉成一個物品(價值和重量相等的物品)、把要換出的金額數目想成背包的重量上限,現在等同是問給一個有限重量的背包,還有各個價值和重量的值相等的物品,有辦法塞東西剛好塞到背包的重量上限嗎? 設背包重量上限是MAX,某錢j的幣值是money[j]、j從1到n,某錢j的數量是num[j],那就是從錢第1項到第n項,分別跑一次0/1背包的演算法,考慮某錢j的第k個要放還是不放,整個流程跑完,如果記錄狀態的DP陣列第MAX項的值=MAX,代表可以剛好塞到背包的重量上限,也就是提款機可以供應想要的確切數目 喔對了,這題目我原本用上述這樣直接的方法去解,結果TLE,後來回去讀助教投影片,有更快的方法,就是不要一個一個考慮,可以把好幾個東西壓縮成一個來考慮, 數目是以2為基底 ,例如13可以把它拆成1 + 2 + 4 + 6,因為1 ~ 13之間的任何一個數字,一定可以由1, 2, 4, 1~6(之中一個),挑幾個來組成,所以一樣可以考慮到所有情況,只是計算的次數就減少了、減少運算時間,這樣才在限制時間內完成 Code: