Tutor profile: Jack W.
Questions
Subject: Web Development
What are some of the challenges of developing a scalable web application that you would not encounter if you were developing a stand alone desktop application that does not require internet?
One of the main challenges of developing large scalable web applications is the fact that you're building a distributed system. Distributed systems is basically a system of computers all working together to accomplish a goal/task but it appears to the end user as if it's just a single computer (e.g. the user simple go to a website such as Airbnb and interact with it as if it's just running on their local computer). Distributed systems has many challenges that does not exists if the program simply runs on a single computer. The famous 8 fallacies of distributed system describes these issues and challenges. Therefore a backend web developer must be familiar with these in order to build reliable and scalable web applications.
Subject: Java Programming
What are some of the reasons why the creators of Java decided to create a new language instead of using say C or C++?
One of the main goals of Java is to "build once and run everywhere". The creators wanted to solve the problem of having to compile your program with different compilers based on which platform (i.e., different CPU architectures) your code will execute. This requires extra developer effort to get familiar with the various configuration options of the compiler being used for a particular platform. Java resolves this issue by compiling Java programs into Java "bytecode" which is essentially a set of instructions that will be executed by the Java Virtual Machine.
Subject: Computer Science (General)
What metric should you use to compare the 2 different algorithms that solve the same problem (e.g. sorting an array of integer values) and how to decide which to use?
When comparing algorithms, we can use time and space complexity to help use determine which algorithm is best for the particular use case. Time complexity tells us how well the algorithm scales in time as the size of the input data increases. Space complexity tells us how well the algorithm scales with respect to the amount of memory it uses as the input data increases. Another important metric is the simplicity of the algorithm. If the use case does not deal with large size of input, then it may be better to use a simpler algorithm since it leads to better developer understanding and easier to maintain.