Każde łączenie dwóch języków (za pomocą sieci lub FFI (foreign function interface)) powinno się odbywać przy użyciu dobrze zdefiniowanego i opisanego API w danym języku. Przykładowo łącząc kod C++ i Python'a w projekcie powinien być zdefiniowany poprawny interfejs Pythonowy do kontaktu z C++, a biblioteka C++ powinna mieć swój własny interfejs, na podstawie którego stworzony zostanie interfejs dla Python'a.
Aplikacja (łącznie z interfejsem użytkownika) może być napisana albo w języku polskim albo angielskim, przy czym preferowany jest język angielski
Projekt powinien zostać napisany w jednym, konkretnym stylu. Dobrym pomysłem jest użycie narzędzia do formatowania kodu, np. black dla Python'a, rustfmt dla Rust'a i clang-format dla C++.
Ostrzeżenia przy kompilacji/wykonaniu będą karane punktowo. Dla C++ proszę użyć przynajmniej tych flag: -Wall -Wextra -pedantic -Werror.
Dobrym pomysłem jest użycie narzędzi do statycznej analizy kodu (ang. linters), przykładami takich narzędzi są ruff dla Python'a, clippy dla Rust i cppcheck dla C++.
Kod aplikacji powinien być stworzony zgodnie z dobrą praktyką programistyczną, m.in.:
Brak 'magicznych' wartości zaszytych w kodzie
Podział na moduły/klasy/metody zgodnie z paradygmatem danego języka
Dokumentacja obejmująca cały kod
Stosowanie jednolitej konwencji nazewnictwa
Konsekwentne używanie jednego języka naturalnego przy nazewnictwie (albo polski albo angielski)
Kod zawierający niezdefiniowane zachowanie (ang. undefined behavior) jest niedopuszczalny - w celu sprawdzenia swojego kodu pod tym kątem w C++ można użyć tzw. 'Undefined Behavior Sanitizer', podając przy kompilacji flagę -fsanitize=undefined i uruchamiając aplikację (ubsan raportuje błędy podczas działania programu, a nie na etapie kompilacji).