Ask HN: Which systems programming language(s) is/are beginner friendly?
17 comments
Maybe Nim. It is not a small language, but the syntax is more beginner-friendly than Rust.
Unlike Rust, Nim has far fewer learning resources (tutorials, books, courses) which may or not be important to you.
Unlike Rust, Nim has far fewer learning resources (tutorials, books, courses) which may or not be important to you.
Never done any professional systems programming. C is what comes to mind. But don't let the simplicity fool you. It's pretty easy to shoot yourself in the foot with C.
Recently I've been coming across ML family of languages. I see compiler books in OCaml. Atleast in the academic discussions I see the need to get away from C in terms of building reliable computer systems. Maybe it's a bit of a stretch to call it a systems programming language but maybe something to consider.
Recently I've been coming across ML family of languages. I see compiler books in OCaml. Atleast in the academic discussions I see the need to get away from C in terms of building reliable computer systems. Maybe it's a bit of a stretch to call it a systems programming language but maybe something to consider.
Depends a lot on what you call "system": do you want to program embedded systems? write device drivers? write a database server? compilers?
What if a programmer wants to lean a language and not a domain? Devoid of domain, which systems programming language is easy for beginners? It will be quite an ask of a beginner to either work on embedded systems, write device driver, DB driver or compiler. So for beginners, forcing a domain from the start would be counter productive I think.
Beginners tend to overestimate the differences between programming languages and pay attention to superficial things as opposed to things that matter. A good chunk of computer science is a branch of math which is eternal: if there are aliens who live under some the ice on some moon and they have computers they are going to know about the results of Turing and Gödel.
A language like Java or C# is perfectly fine for "systems" tasks such as compilers, database engines, etc. You don't need to interact with memory on a low level and you can afford to pay the cost of automated memory management for some guarantee that you don't get use-after-free and similar problems.
For that matter if performance doesn't matter you can do a lot in Python, Javascript, and other languages that people think of as "applications" languages.
For some other "systems" tasks, such as embedded, you are going to have a choice between C/C--, Assembly and maybe Ada or a Pascal variant if you're adventurous. In that case you need absolute control over memory layout. C has the particular advantage of portability. I think it's an atrocious language to program the AVR-8 arduino but your code is portable to a more powerful board and your skills are portable.
Rust has the "borrowing" model that is potentially more efficient than the garbage collection model of languages like Java and gives you some control over the layout. You might like it or you might learn to hate fighting with the borrow checker.
What domain you are in absolutely determines what languages you can use.
A language like Java or C# is perfectly fine for "systems" tasks such as compilers, database engines, etc. You don't need to interact with memory on a low level and you can afford to pay the cost of automated memory management for some guarantee that you don't get use-after-free and similar problems.
For that matter if performance doesn't matter you can do a lot in Python, Javascript, and other languages that people think of as "applications" languages.
For some other "systems" tasks, such as embedded, you are going to have a choice between C/C--, Assembly and maybe Ada or a Pascal variant if you're adventurous. In that case you need absolute control over memory layout. C has the particular advantage of portability. I think it's an atrocious language to program the AVR-8 arduino but your code is portable to a more powerful board and your skills are portable.
Rust has the "borrowing" model that is potentially more efficient than the garbage collection model of languages like Java and gives you some control over the layout. You might like it or you might learn to hate fighting with the borrow checker.
What domain you are in absolutely determines what languages you can use.
There are 3 types of programming languages you can learn: Modular programming, Object oriented, and Functional programming
Python- it has a very simple syntax and it’s easy to learn. It can be used for modular programming and object oriented and it is forgiving if you don’t strictly follow the best practices. Therefore it can help to make thing working while you’re learning
Python- it has a very simple syntax and it’s easy to learn. It can be used for modular programming and object oriented and it is forgiving if you don’t strictly follow the best practices. Therefore it can help to make thing working while you’re learning
Disclaimer: Never did any sys programming
I think C is pretty friendly as long as you can get through the basics of arrays and pointers. It's friendly in the sense that there is not a lot of grammar to learn.
But each field of system programming requires a deep understanding of something other than the language itself so overall I'd say it's difficult to get in.
I think C is pretty friendly as long as you can get through the basics of arrays and pointers. It's friendly in the sense that there is not a lot of grammar to learn.
But each field of system programming requires a deep understanding of something other than the language itself so overall I'd say it's difficult to get in.
Plain old C is pretty beginner friendly. Programming an Arduino is a good introduction (similar to C, forgive me I'm a bit ignorant here). A good systems project would be writing a simple shell.
Excel formulas probably have more beginner-level users than anything else.
Is Excel a systems programming language :)
Sure, it's where you write the high-level orchestration code for things that haven't been made sufficiently repeatable yet. :)
Personally I tend to use it for light one-off database metaprogramming. Get a lit of objects that need to be maintenanced, generate the appropriate commands with a column of identical formulas, and then paste that back into the sql utility. (For more complex or long-lived things I'll use a more traditional language of course.)
(Why yes, I am going to pretend I didn't accidentally a word.)
Personally I tend to use it for light one-off database metaprogramming. Get a lit of objects that need to be maintenanced, generate the appropriate commands with a column of identical formulas, and then paste that back into the sql utility. (For more complex or long-lived things I'll use a more traditional language of course.)
(Why yes, I am going to pretend I didn't accidentally a word.)
I've seen other people do that. I think it's better to use a language like Python, but I have seen people do SQL scripts and many other kinds of code gen with Excel.
Num and C are very beginner friendly. Red may soon get there eventually.
Adding a bit of C to your tool belt will give you success wherever you go. The concepts it teaches are invaluable in understanding why things are built the way they are today. Everything from memory management, to trying to solve all these vulnerabilities, to why new languages have these crazy constructs.