Hey guys,
It's Lincoln Yan here - or more formally known as Yijun Yan. I'm one of the two students who got FIC (First in Course) for SDD in HSC 2021.
BoS helped me quite a lot during my HSC revision, especially for SDD - and I don't think I would have achieved FIC without the help of the forum. That's why, as a give back to the community, I'm writing this thread to kinda summarise my SDD journey and I hope this thread will help someone in the future.
Before I start, I would like to say thanks to @🍑 this is a peach (https://boredofstudies.org/members/🍑-this-is-a-peach.1611367390/) and @Drdusk (https://boredofstudies.org/members/drdusk.1611277308). Thank you so much for answering my SDD questions & giving me SDD past papers the night before my SDD exam. I would also like to pay tribute to my SDD teachers, especially Mr. P who tragically passed away right before our trials. You are excellent teachers & you really helped me a lot and I will remember you guys.
Disclaimer:
- I can not guarantee the accuracy of this post nor can I ensure the validity of my method of studying. Some of the contents I'll talk about might not be in the HSC syllabus but I do think they will be helpful (if you have extra time of course, or if you are very comfortable with coding). Everybody is different so you might need to take my advice with a grain of salt.
Let's get started.
My thoughts about HSC 2021 SDD Exam:
"Well, the exam isn't that hard". That was what I thought when I first opened the paper. It turned out to be more difficult than I had expected and I nearly ran out of time, but hey it turned out to be fine.
I'll kinda comment a bit on the harder ones (at least the ones I thought was hard):
[Well I've already spent four hours writing this post so I'm gonna leave this part out for now.]
Improving your debug/problem-solving skills:
Write code and debug them.
If you have time & if you really like coding, try and make your own project using whatever language you like. Your coding skills get better from coding. Maybe a project that addresses an issue that bothers you. For me, as I digitized all my work since Year 10, I realized that there wasn't an easy way to manage all my paper documents & scans. So I made a document management system, DocumentX (Linked below) and through that project alone, I practiced my Python skills (and relevant frameworks such as Flask & learned a whole bunch of new stuff such as MongoDB, how to properly store passwords, etc). That really helped my major work.
If you don't - well you're gonna need to do a whole bunch of coding anyway and that helps you with your debug/problem-solving skills.
Understand the algorithms. Code them. Debug them. Mess around with them.
It's important that you understand the intuitions behind a certain question/algorithm. Don't just memorize the implementation of an algorithm without truly understanding them - memorization does not always work as you'll need to understand the intuitions to adapt them to the question.
For me, I think a good way to learn algorithms is to:
1. Look at the problem. Try and work out a solution/algorithm. It might be dumb, it might be inefficient, it might take 20 seconds to sort an array, but it doesn't matter so much. What matters is that - it's yours. You designed the algorithm.
2. Look at how the algorithm works (but don't look at its implementation). Compare the idea with your idea, and ask yourself:
---- How is it different from my algorithm?
---- If the idea is basically the same, how can I try and optimize my algorithm? For example, for bubble sort, adding a (bool) has_changed flag can reduce the number of useless comparisons.
---- If the data is large (for example, 100 items), is my algorithm still efficient enough? What about 100000 items? Can I avoid using a loop inside a loop?
3. Implement the algorithm based on its idea. Once you're done with the above steps, you might want to try and implement the algorithm using its ideas. For example, for bubble sort, you can try and implement the "loop and compare & swap if necessary" logic.
4. Finally, look at the implementation and compare it with yours.
If you follow those steps, you'll likely be able to truly understand each and every line of code as well as intuitions behind them - e.g. Why do I need to add a (bool) has_changed flag & how it can dramatically reduce the run time if the array is very long.
For most other concepts:
They are usually quite intuitive and can be related to our daily life. For example, if you look at this question (Question 25):
- Describe ONE compatibility issue and ONE performance issue relevant to {a mobile app}.
Well... You can't just install an android app on an iPhone. Considering that this is a translation app, we do want to ensure that the app works on both iOS & android so we can get lots of users (so iOS users can communicate with android ones). Here you go - the compatibility issue.
Also, imagine opening Instagram and it takes 1 minute to load - you're not getting many users with a slow app. Especially with translation apps - you don't want to awkwardly wait for like 2 minutes for your app to load before starting a conversation in real life. So that's the performance issue.
You see - it's kinda intuitive. Just bring yourself into the situation - look from the user's perspective. It should be intuitive.
Remember: You need to provide sufficient reasoning. Justify why that's important, just like what I did above.
Stuff that you do need to memorize & practice:
- EBNF - practice a lot.
- CPU Fetch-Decode-Execute Cycle and the role of each register.
- Development approaches, to a certain extent.
- The IDEAS behind those algorithms and their implementation, but only after you understand them.
- ASCII (Option 2)
- Other stuff
The major work:
Well, another huge part.
Some context first. I'm not sure about your school's assessment schedule, but here's ours (KHHS):
- AT1: Major work planning + Idea generation
- AT2: Option topic exam
- AT3: Major work is due
- AT4: Trial
Due to COVID, our AT3 deadline was extended to 2 weeks before our Trials (Term 4) as some students weren't able to access their project on school computers. It turns out that source management is quite important - more below.
What should I do?
It depends.
If you're already very good at coding (I had 7+ years of experience) - then yeah go wild. But do keep in mind that you will also need to focus on the theory component, docs, and other projects. Ask your teacher before using open source code/frameworks/other requirements. Our teacher was nice and I was able to use Flask and Vue as long as I wrote most of the code and I could explain every single line of my code.
If you're new to coding: Experiment with some smaller projects. Give it a try.
Can't give much advice here - read other threads on BoS or consult with your teacher.
My Major Work
https://nowask.me/ (*)
An anonymous Q&A platform. The project is too huge for major work and I didn't want to spend too long on it so I submitted the authentication system.
WARNING: DO NOT USE THE SEND EMAIL API TO SPAM OTHERS. I WILL REMOVE THE API KEY IF YOU SPAM & THEN YOU WILL HAVE TO DEPLOY IT YOURSELF TO TRY IT OUT.
Source Code:
Backend: https://github.com/yyjlincoln/NowAskMe-Server (**)
Frontend: https://github.com/yyjlincoln/NowAskMe-Frontend
Documentations:
https://docs.yyjlincoln.app/nowaskme (***)
I got:
- Project: Full mark
- Docs: -1 or something but tbh the teacher's explanation isn't convenicing. He doesn't like to give full marks so I reckon that's fair.
- Rank: First.
(*) If the above link doesn't work (as I will not be renewing the domain after 2022), try:
Or deploy the code yourself
(**) Switch to the master branch. I adapted the whole thing to RequestMap, my other project after the HSC so the current default branch may not be too relevant
(***) It's like 200+ pages. It's really comprehensive.
Highly recommended tools that you really should look into:
- Git (Source Management)
- Github (The must-have platform for a hacker. Back up your code online & collaborate with other people)
Some useful tools/stuff that you should look into if you have extra time to spare to become a better hacker:
- Linux basics
- Terminal/Shell
- Protocols such as HTTP, DNS, TCP (What happens when you open up a web page?)
Which Tech Stack should I use?
Depends on your skillset.
If you're already comfortable with at least one language:
Web:
- If you're comfortable with Web, probably try React/Vue/TailwindCSS. To enhance web experience, you can look into Framer Motion or GSAP
- To communicate with other clients, you might need an API server (or use stuff like Firebase). If you choose to go down this track, then Flask (Python), Django (Python), Express.JS (Node) might be some choices.
- For the database, I will recommend MongoDB + mongoengine (Python ORM) or Prisma (Node, Javascript) + lots of supported dbs. Use an ORM library!
Machine Learning:
- If you're comfortable with Python, then you can try TensorFlow & make something related to machine learning.
Game:
- I'm not an expert. Probably try Unreal / Unity?
Otherwise, you can:
- Try learning a new language and making a text-based game. Probably Python?
- Do stuff like Visual Basic
- Use some easier languages
- Maybe a static website?
Don't worry - You don't need much to make a successful major work. If you're not that comfortable with coding, try doing something else! What I've listed above are for those that are really comfortable with coding & who need direction. I really don't want to scare you
<Message too long. Continues...>
It's Lincoln Yan here - or more formally known as Yijun Yan. I'm one of the two students who got FIC (First in Course) for SDD in HSC 2021.
BoS helped me quite a lot during my HSC revision, especially for SDD - and I don't think I would have achieved FIC without the help of the forum. That's why, as a give back to the community, I'm writing this thread to kinda summarise my SDD journey and I hope this thread will help someone in the future.
Before I start, I would like to say thanks to @🍑 this is a peach (https://boredofstudies.org/members/🍑-this-is-a-peach.1611367390/) and @Drdusk (https://boredofstudies.org/members/drdusk.1611277308). Thank you so much for answering my SDD questions & giving me SDD past papers the night before my SDD exam. I would also like to pay tribute to my SDD teachers, especially Mr. P who tragically passed away right before our trials. You are excellent teachers & you really helped me a lot and I will remember you guys.
Disclaimer:
- I can not guarantee the accuracy of this post nor can I ensure the validity of my method of studying. Some of the contents I'll talk about might not be in the HSC syllabus but I do think they will be helpful (if you have extra time of course, or if you are very comfortable with coding). Everybody is different so you might need to take my advice with a grain of salt.
Let's get started.
My thoughts about HSC 2021 SDD Exam:
"Well, the exam isn't that hard". That was what I thought when I first opened the paper. It turned out to be more difficult than I had expected and I nearly ran out of time, but hey it turned out to be fine.
I'll kinda comment a bit on the harder ones (at least the ones I thought was hard):
[Well I've already spent four hours writing this post so I'm gonna leave this part out for now.]
Improving your debug/problem-solving skills:
Write code and debug them.
If you have time & if you really like coding, try and make your own project using whatever language you like. Your coding skills get better from coding. Maybe a project that addresses an issue that bothers you. For me, as I digitized all my work since Year 10, I realized that there wasn't an easy way to manage all my paper documents & scans. So I made a document management system, DocumentX (Linked below) and through that project alone, I practiced my Python skills (and relevant frameworks such as Flask & learned a whole bunch of new stuff such as MongoDB, how to properly store passwords, etc). That really helped my major work.
If you don't - well you're gonna need to do a whole bunch of coding anyway and that helps you with your debug/problem-solving skills.
Understand the algorithms. Code them. Debug them. Mess around with them.
It's important that you understand the intuitions behind a certain question/algorithm. Don't just memorize the implementation of an algorithm without truly understanding them - memorization does not always work as you'll need to understand the intuitions to adapt them to the question.
For me, I think a good way to learn algorithms is to:
1. Look at the problem. Try and work out a solution/algorithm. It might be dumb, it might be inefficient, it might take 20 seconds to sort an array, but it doesn't matter so much. What matters is that - it's yours. You designed the algorithm.
2. Look at how the algorithm works (but don't look at its implementation). Compare the idea with your idea, and ask yourself:
---- How is it different from my algorithm?
---- If the idea is basically the same, how can I try and optimize my algorithm? For example, for bubble sort, adding a (bool) has_changed flag can reduce the number of useless comparisons.
---- If the data is large (for example, 100 items), is my algorithm still efficient enough? What about 100000 items? Can I avoid using a loop inside a loop?
3. Implement the algorithm based on its idea. Once you're done with the above steps, you might want to try and implement the algorithm using its ideas. For example, for bubble sort, you can try and implement the "loop and compare & swap if necessary" logic.
4. Finally, look at the implementation and compare it with yours.
If you follow those steps, you'll likely be able to truly understand each and every line of code as well as intuitions behind them - e.g. Why do I need to add a (bool) has_changed flag & how it can dramatically reduce the run time if the array is very long.
For most other concepts:
They are usually quite intuitive and can be related to our daily life. For example, if you look at this question (Question 25):
- Describe ONE compatibility issue and ONE performance issue relevant to {a mobile app}.
Well... You can't just install an android app on an iPhone. Considering that this is a translation app, we do want to ensure that the app works on both iOS & android so we can get lots of users (so iOS users can communicate with android ones). Here you go - the compatibility issue.
Also, imagine opening Instagram and it takes 1 minute to load - you're not getting many users with a slow app. Especially with translation apps - you don't want to awkwardly wait for like 2 minutes for your app to load before starting a conversation in real life. So that's the performance issue.
You see - it's kinda intuitive. Just bring yourself into the situation - look from the user's perspective. It should be intuitive.
Remember: You need to provide sufficient reasoning. Justify why that's important, just like what I did above.
Stuff that you do need to memorize & practice:
- EBNF - practice a lot.
- CPU Fetch-Decode-Execute Cycle and the role of each register.
- Development approaches, to a certain extent.
- The IDEAS behind those algorithms and their implementation, but only after you understand them.
- ASCII (Option 2)
- Other stuff
The major work:
Well, another huge part.
Some context first. I'm not sure about your school's assessment schedule, but here's ours (KHHS):
- AT1: Major work planning + Idea generation
- AT2: Option topic exam
- AT3: Major work is due
- AT4: Trial
Due to COVID, our AT3 deadline was extended to 2 weeks before our Trials (Term 4) as some students weren't able to access their project on school computers. It turns out that source management is quite important - more below.
What should I do?
It depends.
If you're already very good at coding (I had 7+ years of experience) - then yeah go wild. But do keep in mind that you will also need to focus on the theory component, docs, and other projects. Ask your teacher before using open source code/frameworks/other requirements. Our teacher was nice and I was able to use Flask and Vue as long as I wrote most of the code and I could explain every single line of my code.
If you're new to coding: Experiment with some smaller projects. Give it a try.
Can't give much advice here - read other threads on BoS or consult with your teacher.
My Major Work
https://nowask.me/ (*)
An anonymous Q&A platform. The project is too huge for major work and I didn't want to spend too long on it so I submitted the authentication system.
WARNING: DO NOT USE THE SEND EMAIL API TO SPAM OTHERS. I WILL REMOVE THE API KEY IF YOU SPAM & THEN YOU WILL HAVE TO DEPLOY IT YOURSELF TO TRY IT OUT.
Source Code:
Backend: https://github.com/yyjlincoln/NowAskMe-Server (**)
Frontend: https://github.com/yyjlincoln/NowAskMe-Frontend
Documentations:
https://docs.yyjlincoln.app/nowaskme (***)
I got:
- Project: Full mark
- Docs: -1 or something but tbh the teacher's explanation isn't convenicing. He doesn't like to give full marks so I reckon that's fair.
- Rank: First.
(*) If the above link doesn't work (as I will not be renewing the domain after 2022), try:
yyjlincoln > projects > Nowask.me
Anonymous Q&A Platform SDD HSC Major Work Python3 & Vue PWA
nowaskme.yyjlincoln.app
(**) Switch to the master branch. I adapted the whole thing to RequestMap, my other project after the HSC so the current default branch may not be too relevant
(***) It's like 200+ pages. It's really comprehensive.
Highly recommended tools that you really should look into:
- Git (Source Management)
- Github (The must-have platform for a hacker. Back up your code online & collaborate with other people)
Some useful tools/stuff that you should look into if you have extra time to spare to become a better hacker:
- Linux basics
- Terminal/Shell
- Protocols such as HTTP, DNS, TCP (What happens when you open up a web page?)
Which Tech Stack should I use?
Depends on your skillset.
If you're already comfortable with at least one language:
Web:
- If you're comfortable with Web, probably try React/Vue/TailwindCSS. To enhance web experience, you can look into Framer Motion or GSAP
- To communicate with other clients, you might need an API server (or use stuff like Firebase). If you choose to go down this track, then Flask (Python), Django (Python), Express.JS (Node) might be some choices.
- For the database, I will recommend MongoDB + mongoengine (Python ORM) or Prisma (Node, Javascript) + lots of supported dbs. Use an ORM library!
Machine Learning:
- If you're comfortable with Python, then you can try TensorFlow & make something related to machine learning.
Game:
- I'm not an expert. Probably try Unreal / Unity?
Otherwise, you can:
- Try learning a new language and making a text-based game. Probably Python?
- Do stuff like Visual Basic
- Use some easier languages
- Maybe a static website?
Don't worry - You don't need much to make a successful major work. If you're not that comfortable with coding, try doing something else! What I've listed above are for those that are really comfortable with coding & who need direction. I really don't want to scare you
<Message too long. Continues...>
Attachments
-
1.2 MB Views: 354
-
1.9 MB Views: 279