軟體工程資料 - 優秀的大學怎麼教程式開發和軟體工程課

SoftwareTeacher發表於2017-09-02

他山之石,可以攻玉

世界上很多大學都有不錯的教學方法, 例如我們曾經的助教總結他在國外的學習經歷,可以看出老師和學校對於如何教好課是花了心思, 有很多投入的。

      一門課怎麼上: https://zhuanlan.zhihu.com/p/20610349

   怎麼設計長期好用的 教學系統

 

 

另外,在2012年,我們上軟體工程課的過程中,收集到交換到 UCSD 同學寫的這個部落格,也貼在這裡作為學習資料。 原網站 (http://www.arc-trooper.com)已經不存在,這是一個備份。

----------------- 以下是轉載備份 ---------------------------

UCSD CS110 Final Presentation後的感想

專案原始碼 ecomstore@github 專案進行過程中的所有文件現在仍在修訂,學期結束後會放上來

_____________________________

剛剛結束了在ucsd上的cse110 軟體工程的 final presentation。 感觸很多,想和大家分享一下。

首先介紹一下這門課的形式,Professor Gary Gillespie 是我們的lecturer, cse110的形式很特殊,Gary實際上以公司的形式來開設這門課程,cs110 fall 2012 Gary是公司的founder和ceo,他手下有兩個TA,他們分別是COO,Chief Operating Officer,營運長,一個CIO,Chief Information Officer。 還有三四個Tutor,他們是Executive Board Members。專門負責lab時的tutoring。

課程開始時,Gary向我們介紹了這門課的形式,所以學生組隊,8~9人的團隊,作為公司的一部分,這個學期的主題是電子商務,但沒有限定的方案或形式,所以團隊可以自己做決定,沒有要求實現技術,完全自己決定。

所有組員都有明確的角色分工

Project Manager
Subject Matter Expert:   Researches the inner workings of online stores and is involved with how the business rules are integrated into the project.
Senior System Analyst: Coordinator of Use Cases, User Story, Requirements.
Software Architect:        Coordinates design, selector of technologies.
Software Development Lead: Coordinates software development.
Algorithm Specialist:      Designer of algorithms and module interfaces.
Database Specialist:      Maintains database and related issues.
Quality Assurance Lead: Coordinates testing phase, ensures procedures followed.
User Interface Specialist: Focuses on the look and feel, and user experience.

 

每個人根據自己擅長的技術或興趣選擇職位,所有人都會sumbit code,但側重和工作量不同。

就這樣,一週這後,5個小組誕生了。所有的team每週需要參加週一的customer meeting,實際上就是每組展示每週的artifect,來模擬整個軟體開發過程,比如User Story,User Case,Database Design etc, 然後Gary逐一點評,每週三還有 Engineer All hand lab,每週都有一個學習主題,比如Version Control使用,html css,mvc design等等。每週各個team還有 team meeting 討論分工和進行code review,每週每個人要提交time card,來規劃每週的時間安排,每兩週還有peer review,給自己的組員打分,來評價每個人的貢獻,也會給自己打分,得分低的學生與自己給自己打得分和teammate給自己打分差距極大的學生,Gary會單獨發郵件溝通。經過三個月的奮鬥,終於到了最終presentation的時候。

 

這門課最後一共有41名學生,分為了5個小組,分別是

Team WIN ——World wide inventory management 我所在的團隊,Final Presentation 第二名,一共8個人,我的角色是Software Architect + Software Development Lead 這是我們最後的網站Michael Collins Jewelry Store 組長Cory在當地的一家珠寶店兼職工作了很多年,他現在的網站非常舊,Preview Version 而且基本沒有server side的支援,完全的靜態網頁,我們打算為他重新打造一個全新的系統。我們使用的Python Django, Mysql 和Bootstrap + Jquery

Team WTF —— Not what the fuck, is We Trader Fun 8人團隊 http://wetradefun.appspot.com/ (沒有完全向外界開放) WTF的點子我非常喜歡,他們決定做一個遊戲交換的網站,有點像初中玩GBA那會兒去玉泉東換卡的意思,他們的網站使用了GiantBomb 一個Game Database 網站提供的api來獲得所有的遊戲資訊,你可以搜尋所有的遊戲資訊,然後加入wishlist,然後你可以把你手頭閒置的遊戲加入到offer list,當有其他人對你的遊戲感興趣他們會給出offer,你則需要從眾多offer中選出一個最喜歡的,然後和他交換。 同樣使用的Python Django Mysql 和Bootstrap + Jquery

Team OCD —— Over Clocked Developers , 9人團隊 這是他們的最後網站BuyBox Final Presentation第一名的團隊,他們開發了Buybox網站,類似於一個微型的二手市場,你可以將自己閒置的,想賣的東西釋出到上面,感興趣的買家可以直接給你打款,最大的feature是和社交網路,二維碼的結合。 使用者釋出東西后,可以列印出帶有二維碼的傳單,在學校裡散發,當使用者掃描二維碼後,可以跳轉到buybox的網站,而且他們的結賬系統非常直接簡單,和itunes類似,首先設定後信用卡資訊,然後每次決定購買時,一步了當,簡單明瞭,系統非常易於上手,前端的介面也是經過細心雕琢,也適配移動終端。他們下一步打算在UCSD嘗試讓大家使用,很有可能作為創業的專案。 他們的團隊也是強手雲集,Team member,product manager是HP的工程師,大四學生,一個ruby on rail高手,Quality Assurance Lead是管理科學專業,cs minor,他策劃的所有商業方案,並打算明天以他們的網站去做business課程的final presentation。 他們的database specialist 和software architect分別是Carefusion 和 Northrop Grumman的軟體實習生,另外一名db specialist是graduate student,ruby高手。兩名女生是ui design,每個人都投入了大量的時間和精力在這個專案上,其中一個ui女生和我一開始上cse135課,本來我想和她組隊做cs135的專案,但後來她drop了,說要投入精力在她們的網站。 他們使用Ruby on Rails +Mysql + Bootstrap,使用Heroku作為hosting platform

Team WAIT – Wonderful Amazing Inventory Tracking, 他們也有一個真實客戶,其中一個組員的媽媽是一個賣眼鏡的公司的CIO,他們需要一個Inventory Tracking system來跟蹤所有的貨物,但因為他們使用的非常過時的資料庫,但希望逐步切換到新的技術,於是WAIT team建立了一個Inventory Tracking Website,幫助他們的客戶來做這個過渡,功能很強大,可以上傳excel表格,並轉換格式,呈現在網站上,並能在google map上跟蹤所有seller資訊,他們的客戶非常滿意,並打算讓他們繼續做下去,他們很有可能把系統作為產品,買給這個公司。

用的技術同樣是Python Django + Mysql + Bootstrap,Jquery

Team SOL – Software Optimization Logistics 7人團隊,做的類似於OCD,也是一個小型的電商系統,但沒有很多的創新點,也沒有很吸引眼球的feature,SOL Website 可以看到他們所有的Artifect,但網站的server SOL Team 無法訪問。 他們最大的亮點是他們的Artifect,所有的文件都是以網頁的形式釋出到網上,他們的一個組員是php大牛,寫了一個工具來管理這些文件,我是非常佩服。 他們用的技術是Jsp + Mysql + Bootstrap,Jquery

雖然最後大家投票,我們組排名第二,但我自己認為第一當之無愧是OCD,第二是WTF,第三是WAIT,我們排第四,因為論UI,我覺得我們做的一般,網站的功能也非常簡單,實現的也是中規中矩的小型電商網站,而WTF有非常好的商業方案和功能實現,如果上線,感覺會發展很快。 WAIT沒有絢麗的UI,但很樸實,為它們的客戶提供最好的解決方案,專注解決問題。

在UCSD 的這個quarter感觸最深的就是這門課,和我在北郵上過的課徹底不同,Gary上課基本不怎麼講太細的理論,他在Xerox和SAIC工作了有20多年,是一個Senior Software Engineer,UCSD的本科和研究生,退休後回到UCSD做全職Lecturer,他第一節課就說,

I hate teaching Software Engineering, Because you can’t learn it unless you actually do it, so I have no idea how to teach at all.

所以真正的課堂就比較奇葩,一般上來他就講他工作時的一些故事,講他身邊的奇葩工程師,特別二逼的manager,特別照顧他的mentor等等,然後就開始講Head First Design Pattern,用了三週時間過完了一本書,有用了兩週時間過完了Head First Software Development,上課基本沒有講義,直接維基百科,無比飄逸,quiz和midterm都很簡單,甚至允許你自己出題,如果題目出的好還給你加分,但真正學東西的是當你做project的時候,和所有隊友溝通,交流,分配任務。我的隊友Brian,他也是Software Development Lead,一個Chinese,但從來不說中文,開始的兩週基本不怎麼參與開發,第一次peer review結束後,被Gary單獨聯絡後,開始輸出,但往往不能令人十分滿意的完成任務,總是給你殘缺的東西,然後自己去忙別的,我們的manager cory很負責,他是Cognitive Science的學生,修了Cs的minor,非常喜歡Game Industry,打算以後去暴雪工作做game desiger,Ryan是我們的UI Specialist,非常負責,獨自完成了很多design的任務,Josh是Quality Assurance Expert, 這個週末連續工作了兩天,測試網站,提出bug,編寫測試用例,非常認真,我從一開始就非常認真,投入了很多時間精力在專案上,基本每個週末都在lab裡coding,我寫了80%的後端系統,和很多前端的頁面,我的隊友也很信任我,認可我的貢獻,兩次peer review都給了我滿分,對於整個team,最大的問題是能夠輸出程式碼的人太少,包括我也是參考著一本Python電子商務實戰的書在寫,我雖然學過一段時間python,在微軟實習的時候也做的web development,但因為對Django不熟,很難完全自己實現一個模組,更何況我的隊友了,Steven更偏向硬體,而且手還骨折了,平時所有的文件formatting都交給他,也很難輸出,樂哥修了四門課,也沒時間精力。好在最後系統成功上線,雖然在交付前有很多bug要調,但畢竟是一個完整的專案,雖然沒有OCD的Buybox那麼牛逼,但畢竟人家是全員參與,而且很多有經驗的developer,我們能拿第二已經很欣慰了。

昨天去聽了UCSD在Facebook的實習生的經驗交流會,印象最深的就是Facebook不管你的學歷和學校或著gpa,他們找的是對網際網路有極高熱情且聰明的人,有了熱情和興趣,你便願意投入時間和精力去做某件事,而聰明的人能更快的掌握工具,更短的學習週期和更好的學習效果,加快完成的時間

經過一個學期的專案,有太多的東西要學,html css js還有後端的技術,包括資料庫,回國後要靜下心來認真學了。下週final week,快回國了! 爭取再找份實習 加油少年!

Posted in Uncategorized 9 Replies

----

回憶學習:

美國的大學教育和中國的區別很大,就電腦科學專業來說,來了以後能強烈的感受到這邊對實踐的重視,比如我這學期的java課,總共有180多學生,程式設計作業佔了40%的分數,每天機房都會有好幾個tutor和 Teaching Assistant 幫忙答疑解惑,可別小瞧這些 TA 和tutor,很多都是 Google 或者 Facebook的實習生,在 UCSD,  TA 和tutor的制度非常完善,在全美也是數一數二的,前段時間有機會和老師聊了聊天,他說他們花了很多時間和精力在 tutor和 TA 計劃上,每年都有大量的優秀高年級本科生被招募作為低年級學生的 TA 和tutor,他們每週有一定的work time,每個quarter會拿到computer science and engineering department給他們的工資,而且加州的這些大公司比如Facebook,Google,傾向於要UCSD有 TA 或者tutor經歷的同學,因為他們瞭解UCSD的這個傳統,tutor和 TA都是優秀的同學,而且在tutoring的過程中,他們也學到了很多如何和人打交道,如何換位思考,這些都是在大公司的團隊工作時必不可少的。另外這邊的美國學生都很勤奮,努力,我的軟體工程課是一個團隊專案,我們的團隊有8名同學,絕大部分是美國學生,和他們做project的這三個月來感觸也很多,他們會為了一個介面的細節和你爭論到臉紅耳赤,也會因為自己的一個錯誤一再向你道歉,會為了趕進度在週末主動熬夜,有太多的細節和難忘的回憶。

相關文章