Programming Language Expert Challenge: System Design 101
Description
Programming languages are often considered trivial given their ease of availability. Also, since most programmers are used to choosing frameworks, they take programming language selection for granted.
Before getting started, answering “Why do you need to learn a programming language?” is crucial. There is no correct answer. But a specific one. Based on your goals, you need to decide the value of the venture.
Why so few questions?
The course intends to assist you in becoming self-dependent. The seemingly few questions are enough for you to test the waters and get going on your journey to command line mastery.
----------------------------- SAMPLE ----------------------------
Q: As someone selecting a language for a project in a software company, would you consider the number of open source projects using the language as a primary factor?
Answer: As mentioned earlier, everyday use cases often take the form of libraries. Therefore, the open-source frameworks and libraries ecosystem is critical for building products quickly without compromising stability. Furthermore, the active OSS projects are a good indicator of a thriving developer community around a language.
For languages like C++ that do not have networking built in, third-party frameworks like seastar, boost, POCO, etc., provide a good fallback. Some organizations are big enough to invest in writing their implementations which they may choose to make open source later. The advantage of open source is constant testing of the framework with various use cases. But the language must be accessible enough for new developers to allow this kind of project ecosystem. Without new developers joining the community continuously, stagnation is imminent. Using a stagnated language in production can soon become a performance bottleneck.
HTTP servers are specific examples of library requirements that became dominant with microservice architecture. Languages like C++ and Python do not have the implicit package HTTP servers in the core language installer packages. So one has to pull the framework using the language package manager. But newer languages like GoLang and Rust or the latest versions of Java have built-in classes in the default language package.
*************************************************************************
Under normal circumstances, one has to memorize such answers, but the course focuses on the process of you getting to the answer and not the answer itself! Of course, you are welcome to suggest additions; remember, you have lifetime access to content. Your suggestion will benefit everyone in the community.
This course takes a deep dive into this language learning process. The set of questions is finite, and the architect must discover the permutation based on the use cases.
For example, a student handed an assignment in Java has no reason to ask any language selection question. A researcher using a framework like Apache Spark has no reason to select a new language other than Scala. But if the research project has data processing and ML backends in python, then the researchers must decide if pySpark is needed. A software engineer working in an IT services company on a maintenance project doesn’t have the luxury of choosing a new language since the product code is already in production. On the other hand, a principal engineer in a product company has all the right reasons to pick a new language for a new service that would be doing something completely different compared to the existing codebase.
Hence language selection is circumstantial. Therefore, the tests focus on a generic decision framework to help you select the suitable language.
The course will guide your curiosity around questions like
Why databases are not written in Javascript?
Why are browsers written in C++?
Why do big-data frameworks use Java?
When to Scala instead of Python?
Why are functional programming languages necessary?
Why C++ is considered a high-performance language?
Why were Rust and GoLang invented?
Should one choose Perl or Python?
Are you an aspiring polyglot?
If yes, let’s get started!
Reviews:
- "Some of the questions are subjective. There is no background of what book or reference material one must take before signing up for this course. I would rate this course for intermediate level programmers/developers who have had about 6-10 years under their belt, because some of them would not have the context of the questions being asked. Regardless, once you review the test answers, there's enough and adequate detail with lucid explanations provided that will enrich one's knowledge. So despite the context not being present, the course is worth taking to enhance your knowledge on language selection, test frameworks and other considerations for your software projects."
- "Amazing course, good feedback with explanations when reviewing questions. I recommend it."
Who this course is for:
- C++, Java, Python,Scala, Rust, Golang programmers curious to learn a new language for upskilling
- Software developers making decision about stack in their projects.
- Beginner programmers curious about language selection for projects.
- Job aspirants learning new language only in hope of getting a job.
- Students from all streams curious to know about how language selection needs to be done.
Instructor
About Instructor
=============
Subodh is a programmer with an MS in Electrical Engineering and 17+ years of experience in the software industry. Subodh has held roles of principal engineer across multiple organizations, building products that serve billions.
Subodh has been designing and implementing software solutions for Digital Cinema Distribution, Distributed Systems, Embedded Systems, Map Making, Insurance, Email Servers, and Data acquisition systems for a problem in the Astrophysics domain (master's thesis) since 2005.
Subodh finds peace in exploring the connection between the "How" and "Why" of any technical problem. Over the years, he has realized that research is a lifestyle and engineering is an attitude.
Mission
======
Helping people build burnout-free careers in the software industry. The primary uncertainties happen to be the following three questions.
WHY are you pursuing your current profession?
How long do you WANT to pursue the current profession/job?
How long do you HAVE to pursue the current profession/job?
The intent of all courses will be practical implementation and a long-term career perspective.