Coding

If you use command line to perform your work, you will realize that it is much easier to automate repetitive tasks by writing small scripts. That script is a function which saves you writing repeated commands. And that is all about programming, making functions to save time.

As there is a lot of programming languages, you need to choose one to start with, therefore you will choose one that you can create any other sort of functions with! This is the first building block of programming. However you are not going to start from scratch as there is already many functions created by other people that you can use to build your own functions. We are not in the stone age anymore to start from zero! I suggest starting with Python as you can automate almost everything with it. You can automate your own tasks and use APIs, databases, files, etc to produce your desired result and send/receive messages to/from other services. And create your own APIs to be used by other people. Python is a very flexible language fitting to various programming paradigms (procedural, object-oriented, functional, etc) that you can choose from. There are many libraries available to help you achieve your goals faster. And it is easy to learn and read as it copes rather with your paradigm of thinking than forcing you to think in a certain way.

But you can not create all sort of APIs with Python! For example if you want to create a mobile app, you will need to learn Swift (for iOS) or Kotlin/Java (for Android). If you want to create a web front-end, you will need to learn JavaScript (or TypeScript) along with HTML and CSS. If you want to create a game, you might want to learn C# (with Unity) or C++ (with Unreal Engine). Each programming language has its own strengths and weaknesses, and is suited for different tasks.

We apparently do not need to learn 100 languages for the same task, preferably one language that can do it all. But in reality, each language has its own ecosystem and community, and some tasks are better suited for certain languages. Therefore, it is good to have a basic understanding of multiple languages, at least not being limited to Python! But how many programming languages should one learn? It depends on your goals and interests. But what should be the goal and the interest for the purpose of UseCode .Dev? And how to choose the right languages?

The goal of UseCode .Dev is to empower you to create your own solutions and tools and contribute to a single branch of code. As we do not have any limitation over what is part of UseCode .Dev, we need to choose a set of programming languages that can cover a wide range of tasks and use cases and minimize the number of languages to learn. This reduces the barrier to entry as a developer. To minimize the number of languages we learn, we can prefer one eco system over another. For example if we prefer web over mobile, we can choose JavaScript/TypeScript as our main language as it can be used for both front-end and back-end development. We can release our work on the web earlier than other platforms and fund further development on other platforms. Or even use Terminal which eliminates the need for a graphical user interface!

AI is UI (and should be). Entering structured information is still difficult, but you can ask AI to generate a form to enter information! And share the form with others to use the same format. And we shouldn’t need anything further than a simple unified UI to interact with AI. Preferably browser based to support languages and terminal based if the userbase is developers. Preferably all serverside so we can use Python without adding a new client stack. To have them two we need to aim to use MCP. We still need MCP and API even if we target our own UI. As we are developers, we can start with a simple TUI to use the app and leave the browser after getting users! So we can start with Tool/API development using Python and release with server generated HTML/CSS pages with minimized JavaScript. We do not need to wait for web front or mobile apps to get users!

As we minimize JavaScript usage, we do not need TypeScript. To get advantage of quick UI updates and server pushed events, we use Turbo. There is a Python reference implementation named evgnomon/steam to start with. No need to mess up with CSS, just use Scss and seprate languages and themes on its own output CSS file. No need to care abour reusability of your components once writing your Scss, instead give a unique name to each component. For repeated values, use mixins like quantized sizes. No need to framework like Tailwind, React, Vue, Angular or Svelte etc. Just write simple server generated HTML pages with Python and Scss styling and Turbo for interactivity. Prefer Vanilla JavaScript for minimal client side logic where needed. No need for complex build systems, just use simple scripts to compile Scss to CSS and serve HTML pages with Python and Jinja2 templates.

But what is left that we can not do with Python? I would say everything that C is suited for. Low level programming, operating systems, demanding embedded systems, high performance applications, and such. Therefore we can choose C as our second language to cover those use cases. C is a powerful language that gives you low level access to memory and hardware, making it suitable for system programming and performance-critical applications. But as we are not going to assume the stone age, we can use existing libraries and frameworks to get the first user. These two should be enough to solve all problems. But there is certail problem domains which might end up reinventing the wheel in C. For example async and concurrency is not well covered in C standard library. C does not handle memory for you while memory could be the least important part of your application. This is offered by Python but Python is not competent in performance and concurrency. Go and JavaScript may fill the gap. But Go is more performant and and more flexible for concurrency. It is statically typed and compiled language, no need for TypeScript. So We add Go as our third language to cover those use cases.

Therefore, C/Go/Python should be enough for any task. We also have JavaScript for client side interactivity where needed and we minimize its usage. So C/Go/Python/JavaScript should be the languages to master in UseCode .Dev.

For single core performance optimization, C is more competent compared to Go. But using C is not as convenient as Go. We need another language to fill this gap. I think Zig is the best fit to fill this gap. It reduces the need to use C for performance critical tasks. Therefore, C/Zig/Go/Python/JavaScript should be enough for any task that we minimize C and JavaScript usage. So Zig/Go/Python + C/JavaScript should be languages to master in UseCode .Dev.

There would be one question left! How if to use Rust to replace C/Zig/Go/Python/JavaScript? We still need JavaScript for DOM manipulation in the browser. Python’s ecosystem still prefer using Python instead of Rust, Python is more readable for more users than Rust. We are going to need C to maintain existing C libraries and C is more flexible for low level programming. Go is way easier to use for the purpose we added to the stack compared to Rust and efficient enough for IO bound tasks. The only candidate to use Rust is a replacement for Zig. But Zig is closer to C and leaner compared to Rust for the purpose added to the stack. Therefore, Rust is not a good fit for UseCode .Dev stack. We typically do not need to wait for libraries being available using Zig, C libraries are typically ready to bind to Zig and many of them are stable enough to use directly. Therefore, C/Zig/Go/Python/JavaScript should be the languages to master in UseCode .Dev.