ProgrammingPro #13: EmbedChain for LLM Bots, Collection Literals New Feature in C# 12, and FAANG Interviews
Bite-sized actionable content, practical tutorials, and resources for programmers.
Hi,
“AI and software development are now inextricably linked for the rest of our lives”
You’ll likely accept just under 30% of code suggestions when using an AI coding assistant but it’s constantly getting better with time. AI is truly democratizing software development.
I hope you’ve been doing well. Welcome to another exciting issue of the ProgrammingPro newsletter where we detail the most relevant industry insights, practical tutorials, and useful resources for developers and software engineers. Let’s jump straight into it!
In this edition, we’ll talk about React Native 0.72 with Symlink support and better error handling, Apple’s release of the visionOS SDK, Microsoft Research’s launch of phi-1 LLM specialized in Python coding, and a new GitHub study estimating that programmers using AI tools will boost global GDP by over $1.5 trillion.
We’ve packed in a bunch of great programming resources, secret knowledge, tutorials, and trending research papers on strings in Rust, developing modular monolith vs. traditional monolith in software engineering, and the new C# 12: Collection Literals feature.
Also, in today’s issue:
TechWave: News and Analysis
Secret Knowledge: Learning Resources
HackerHub: Tools and Launches
Tutorials and Guides
Concept of the Week: Inheritance
My promise with this newsletter is to act as your personal assistant and help you navigate and keep up-to-date with what's happening in the world of software development. What did you think of today's newsletter? Please consider taking the short survey below to share your thoughts and you will get a free PDF of the “The Python Workshop” eBook upon completion.
Thanks for reading.
Kartikey Pandey, Vidhu Jain
Editor-in-Chiefs
Tell Us What You Think, Get a Packt eBook Free!
⚡ TechWave: News and Analysis
React Native 0.72 - Symlink Support, Better Errors: React Native 0.72 introduces new features for Metro, improves error handling, and enhances the developer experience. The release includes highly requested features like symlink support and package exports support in Metro. Developer experience improvements include better error readability for Hermes, improved error output of the React Native CLI, faster compilation and JSON parsing in Hermes, and increased ECMAScript support. The new architecture updates are now moved to a dedicated working group. There are also deprecated component removals and package renames.
Apple Releases visionOS SDK for Crafting ‘all-new experiences’: Apple has released the visionOS SDK, enabling developers to create augmented reality (AR) and virtual reality (VR) experiences for Vision Pro. The SDK provides powerful frameworks and tools like Reality Composer Pro for designing innovative experiences. Apple plans to establish developer labs in key locations and offer developer kits for hands-on testing. The visionOS SDK includes updated Xcode, Simulator, and tools like SwiftUI, RealityKit, and ARKit to create powerful AR and VR experiences with Apple Vision Pro.
Microsoft Research Introduces phi-1: A LLM Specialized in Python Coding with Significant Smaller Size than Competing Models: Microsoft Research has introduced phi-1, a new large language model (LLM) specialized in Python coding. The model demonstrates that high-quality data can improve LLM performance while significantly reducing the dataset size and training computation. Despite being much smaller than competing models, phi-1 achieved high accuracy on evaluation benchmarks, surpassing previous self-reported numbers. Read the paper here.
Programmers Using AI Tools to Boost Global GDP by Over $1.5 Trillion: A study by GitHub suggests that the productivity of software developers using AI tools, such as GitHub Copilot, could boost the global gross domestic product (GDP) by over $1.5 trillion by 2030. The study indicates that Generative AI developer tools could add the productivity of an additional 15 million "effective developers" by 2030. The findings highlight how AI tools are reshaping the developer experience, democratizing software development, and driving economic growth. The study predicts a surge in demand for software developers as AI augments their potential.
Six More companies competing with OpenAI: Six AI companies are competing with OpenAI: Adept AI, Inflection AI, Runway, Aleph Alpha, AI21 Labs, and Beijing Academy of Artificial Intelligence (BAAI). These companies are developing innovative AI technologies, ranging from AI assistants and creative tools to large language models and AI platforms.
Vention Opens its Cloud Platform to Python Programmers: Vention, the company behind the cloud-based Manufacturing Automation Platform (MAP), has introduced an enhanced code-free and Python programming environment called MachineLogic. The code-free environment simplifies automation through improved navigability and editing, while the native Python integration allows programmers to seamlessly automate systems within the integrated MAP environment.
📚 Secret Knowledge: Learning Resources
Useful DevTools Tips and Tricks: This article presents 15 popular browser DevTools tips aimed at boosting productivity and improving debugging workflows. Some of the technical tips include disabling event listeners, detecting unused code, and editing/resending network requests. There are also some cool tips such as changing the playback speed of a video and identifying the fonts used in a page.
A Deep Dive Into Strings in Rust: This article dives deep into the topic of strings in the Rust programming language. It covers various aspects of strings, including basic string representation, string literals, string slices, raw strings, byte strings, raw byte strings, escaping in raw strings, multiline raw strings, Unicode strings, and character escapes. Explore these concepts to gain a comprehensive understanding of how strings are handled in Rust and leverage the language's powerful features to manipulate and work with strings effectively.
Developing Modular Monolith vs. Traditional Monolith in Software Engineering: This article explores the pros and cons of developing a modular monolith versus a traditional monolith in software engineering. Traditional monoliths are characterized by tightly-coupled modules deployed and scaled as a single unit, while modular monoliths split the application into loosely-coupled modules. Read the post to know how modular monoliths accelerate simplified development, easier deployment and scalability, and improved maintainability but also have limitations in terms of limited independence and complexity with scaling.
The Difference Between Micro-Partitioning vs. Indexing and a Better Way: This post discusses the difference between micro-partitioning and indexing as approaches for optimizing analytics database performance in big data analytics engines. Micro-partitioning involves dividing a table into small blocks based on a partitioning key, while indexing creates separate files to quickly identify data retrieval locations. Learn the major differences between the two approaches and explore nanoblock indexing as an optimized solution.
The Economics of Engineering Blogs: Normally, companies hide the practices that give them an edge over others. This is often the opposite in software companies, which often share their practices publicly. This article explains the reason software companies do this - blogs can intimidate competitors, invite feedback, and provide a lot of recruiting advantages.
IKEA-Oriented Development: The article suggests adopting an IKEA-oriented approach to code development. Just as IKEA eliminates air from their furniture packages, code should be packaged efficiently to reduce space and delivery costs. Pre-packaged dependencies and readily available tools simplify development. Composability and disposability encourage experimentation and flexibility in code. Learn how to make their codebases hackable, efficient, and adaptable, drawing inspiration from IKEA's approach to furniture.
A Senior Engineer’s Guide to FAANG Interviews: This article gives a detailed breakdown on Microsoft’s software engineer interview process. It offers valuable insights, tips, and tricks that can help you prepare for any technical interview.
🔍 HackerHub: Tools & Launches
tauri-apps/tauri: Build smaller, faster, and more secure desktop applications with a web frontend.
django-waffle/django-waffle: Django Waffle is (yet another) feature flipper for Django. You can define the conditions for which a flag should be active, and use it in a number of ways.
embedchain: embedchain is a framework for creating LLM-powered bots over any dataset. It abstracts the entire process of loading a dataset, chunking it, creating embeddings, and then storing it in a vector database. Users can create bots by linking to media like videos, PDFs, blog posts, or websites. The project aims to make it easy for anyone to get a chatbot running over any dataset in less than a minute.
treykeown/arguably: arguably turns functions and docstrings into command line interfaces (CLIs). arguably has a tiny API and is extremely easy to integrate.
hionay/tailer: tailer is a CLI tool to insert lines when command output stops.
https://github.com/janpfeifer/gonb: GoNB, a Go Notebook Kernel for Jupyter. GoNB leverages Go’s compilation speed to implement a full-featured Jupyter notebook kernel. It works with packages that use CGO although it won't parse C code in the cells, so it can't be used as a C kernel.
kysely-org/kysely: Kysely (pronounced “Key-Seh-Lee”) is a type-safe and autocompletion-friendly typescript SQL query builder inspired by knex. It is mainly developed for node.js but also runs on all other javascript environments like deno.
✨ Tutorials and Guides
Learn About the New C# 12: Collection Literals Feature: C# 12 introduces Collection literals, a new feature that provides a concise syntax for creating common collection values. The motivation behind this feature is to have a unified and simple API for interacting with collections. The feature may undergo changes before the final release, and there are plans to enable custom collections to support this syntax as well. Learn more about the original proposal here.
Building Search DSLs With Django: A Domain Specific Language is a small language for a particular application domain. GitHub has a simple example within their issue tracker allowing constraints like “is:open” to specify searching only for open tickets. This article shows you how to build your own search DSL in Django using PyParsing.
How to Use RuntimeHelpers.IsReferenceOrContainsReferences to Micro-optimize Collections: The tutorial introduces the RuntimeHelpers.IsReferenceOrContainsReferences<T>() method, which determines if a type T is a reference type or contains a reference type. If T is a reference type, the reference to the item must be removed to allow garbage collection. If T is a value type, this step can be skipped, resulting in improved memory access. The JIT compiler optimizes the code by replacing the statement with a constant and removing unnecessary branches. Read the post to see an example of a custom list implementation utilizing this method.
Python’s raise: Raising Exceptions in Your Code: In this tutorial, you’ll learn how to raise exceptions in Python, which will improve your ability to efficiently handle errors and exceptional situations in your code. This way, you’ll write more reliable, robust, and maintainable code.
Why and How to Hide the Python Stack Trace: In production software you shouldn’t crash, but if you do, showing your users the stack trace can be disconcerting. This tutorial covers how to hide the stack trace and what other information to provide.
🔖 Concept of the Week: Inheritance
What is it? Inheritance is a mechanism that allows one class to inherit the attributes and methods of another class. The class that inherits is called the child class, while the class whose attributes and methods are inherited is called the parent class.
Why do you need it? Inheritance enables code reusability and promotes a hierarchical relationship between classes.
Types of Inheritance:
Single Inheritance: Child class inherits properties from a single parent class.
Multiple Inheritance: Child class inherits properties from two or more parent classes.
Multilevel Inheritance: Child class inherits properties from a parent class, which itself inherits from another parent class.
Hierarchical Inheritance: Multiple child classes inherit properties from a single parent class.
Hybrid Inheritance: Combination of multiple types of inheritance (not supported in some languages).
Advantages of Inheritance:
Code reusability and prevention of duplicity.
Efficient use of time and space.
Creation of dominant objects.
Reduction of data redundancy.
Inheritance in Programming Languages: Each programming language has its specific syntax for implementing inheritance.
C++: Syntax: class childclass : visibility-mode superclass { //code to do }
Java: Syntax: class Derivedclass_name extends Baseclass_name { //code to do }
Python: Syntax: class subclass_name(superclass_name): <class-suite>
C#: Syntax: class childclass_name : superclass_name { //code to do }