https://eugeneyan.com/rss 09月30日 19:15
OMSCS软件开发过程课程体验分享
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

作者分享了在乔治亚理工学院完成的OMSCS软件开发过程(CS6300)课程体验。课程涵盖Java和Android应用开发,包括团队项目和个人项目。作者强调了课程对非计算机科学背景学员的价值,特别是在软件工程实践和工具方面的收获。课程包括构建Android解密字谜应用和命令行文本替换工具,并采用测试驱动开发方法。作者还讨论了课程难度、讲师支持以及个人成长,建议其他学员利用在线资源和同学互助。

💻 课程重点介绍了Java和Android应用开发,学员通过团队项目和独立项目实践软件工程原则,例如构建解密字谜应用和文本替换工具。

🛠️ 课程强调了软件工程实践,包括测试驱动开发(TDD)、白盒和黑盒测试、面向对象设计、敏捷开发方法以及文档最佳实践,这些通常非计算机科学学生不会在大学学到。

🤝 作者提到讲师和助教热情支持,同学间互助网络丰富,尤其是在Piazza和Slack上分享的Java和Android指导对初学者很有帮助。

🌐 团队项目让学员在异步分布式环境中合作,体验不同角色(测试、开发、管理),并学习跨时区协作和多元化技能团队的效率。

📚 课程不仅提升了技术能力,也增强了作者对软件开发的认知,计划将所学实践应用于工作和个人项目,如创建代码分支、加强测试覆盖和文档编写。

You might also be interested in this OMSCS FAQ I wrote after graduation. Or view all OMSCS related writing here: omscs.

Recently, I completed the Georgia Tech OMSCS Software Development Process (CS6300) course over the summer. It was very enriching—I learnt about proper software engineering practices and created apps in Java and Android. Here’s an overview of my experience, for those who are considering taking it.

Why did I take this course?

Since entering the data and technology industry a couple of years ago, I’ve always felt the need to improve my skills in software engineering. This is compounded by my lack of (i) a computer science degree (I studied psychology) and (ii) hardcore software industry experience.

Via online course and work experience (at IBM and Lazada), I picked up decent coding and engineering skills. While I’m able to build robust and maintainable data products in Python and Scala (Spark), I felt the need for a formal class on software engineering fundamentals so as to develop more sophisticated applications with greater efficiency. This includes learning about good architecture design, software development cycles, etc.

What did we build during the course?

For the summer 2017 run of SDP6300, the bulk of the work revolved around two main projects and multiple smaller individual assignments:

Team project: Teams of 3 - 4 built an Android App where users could login and solve cryptogram puzzles. Solutions and scores for each puzzle were to be persisted locally as well as updated on an external web service. Users can then view a global leaderboard with top player scores. It also required functionality for administrative users to add new players and cryptograms. This had to be built over 3 weeks—many teams found this barely enough.

View: Screens of our Android App

Player features and schttps://eugeneyan.com/assets/software-development-process-admin-screen.webpess-admin-screen.webp" title="Software Development Process Admin Screen" loading="lazy" alt="Software Development Process Admin Screen">

Admin features and screens

Individual project: The objective was to build a command line Java program to replace words in a text file. Normally, this shouldn’t be too difficult but it included the requirement to have five separate options that could be combined (e.g., replace even occurrences only, maintain case of original word, etc.). This was built via a test-driven development (TDD) approach, by writing multiple test cases before building any functionality. The instructor also provided fiendish test cases to ensure our app was up to snuff. There was also a black-box testing task that required achieving 100% statement coverage and identifying at least 3 bugs. This project took 3 weeks.

Individual assignments: This included an Android development task (to prepare the class for the Android team project), developing a UML (Unified Modelling Language) diagram for an App, white-box test case creation, etc.

What’s the course like?

Compared to Computer Vision (which I took last semester), I found the workload to be slightly lighter.

There were approximately 30 minutes of lectures, as well as a deliverable, every week. On some weeks, there were deliverables for both the team project and the individual assignments (tough!).

All the assignments were based on Java and Android, and are obviously easier if one has prior experience. If not, expect to spend 2 - 3x more time on each assignment picking up the required Java and Android along the way. I found this Lynda course on Java Essentials helpful. Nonetheless, developing the apps in Java and Android remained challenging.

Professor Alex Orso is very enthusiastic, responsive on Piazza, and held helpful office hours sessions weekly, even when he’s travelling. Together with the TAs, they provided prompt support on the forums. Classmates with Java background were also forthcoming with Java and Android guidance on Piazza and Slack. Most questions on Piazza were answered promptly.

Assignments wise, it was satisfying to build an Android App with multiple screens, local persistence, and a connection to an external web service. I gained experience developing software across multiple timezones, with team members having very diverse skill sets. In our team of four, we had one experienced Java programmer, one intermediate Python developer, one PM, and myself.

Thankfully, there were no exams (I was getting burnt out towards the end).

What did I learn?

First and foremost, how to develop applications in Java and Android. Though I probably won’t get to practice much (my work’s tech stack is largely Scala/Python), it was good mental exercise to learn a new language. Personally, I derived a great sense of achievement building a fully functional Android app with basic UI.

I also gained knowledge and experience in software engineering tools and practices that non-CS students wouldn’t learn in college. This includes TDD, testing and coverage, white-box and black-box testing, object oriented design, agile development methods, documentation best practices (e.g., requirements, test cases, use cases), etc.

From the team project, I gain experience with software engineering in an asynchronous, distributed environment that involved shifting roles. I started as the test engineer, writing test specs and unit tests. Then, I moved to being an Android dev, building the functionality and screens for the Admin users. After that, I switched back to testing and fixing critical bugs.

So what’s next?

I intend to actively apply the software development practices gained, in both my work and personal projects. This includes:

    Creating separate branches for each jira ticket, before merging into the development and master branches Being more rigorous with testing, test coverage, and documentation Developing code that is (hopefully) easier to maintain via object oriented design

If you found this useful, please cite this write-up as:

Yan, Ziyou. (Aug 2017). OMSCS CS6300 (Software Development Process) Review and Tips. eugeneyan.com. https://eugeneyan.com/writing/omscs-cs6300-software-development-process/.

or

@article{yan2017software,  title   = {OMSCS CS6300 (Software Development Process) Review and Tips},  author  = {Yan, Ziyou},  journal = {eugeneyan.com},  year    = {2017},  month   = {Aug},  url     = {https://eugeneyan.com/writing/omscs-cs6300-software-development-process/}}
Share on:

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

OMSCS 软件工程 Java Android开发 测试驱动开发
相关文章