Can Slackware help me improve my programming skills?
SlackwareThis Forum is for the discussion of Slackware Linux.
Notices
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
Can Slackware help me improve my programming skills?
Hi there,
Last year, I've completely changed lanes switching from the 10th incarnation of the well-known bloated environment called an operating system to Linux, and I regret of wasting so many hours tweaking that thing. But I must also admit that it was that thing that's kindled my interest in almost everything related to computers and programming for them for years. Anyway, I'm currently on PopOS and do enjoy it.
In parallel, I spare at least 1-2 hrs daily to program on C - either through Harvard's CS50 program or learning from books and video tutorials. I'm really into that language!
So, I wonder if I can use the potentials of both Slackware (or similar DIY distros) and C - the native language of Linux - to practice my programming skills while assembling the system. I'm not in a hurry, as I use my notebook for my daily needs, so I can invest some time on this. Plus I'd like to improve my skills to the level I could give back to the FOSS community (a dream for now)...
Slackware is a developer environment by default. It comes with all the tools and libraries needed to rebuild itself, and has a high probability of compiling new programs with little or no additional tools and libraries.
That being said, the only way to learn programming is to write programs. That is orthogonal to the choice of distro, but it is easiest to start with a distro intended for development.
Ed
Been a programmer for 30-odd years (fortran, assembly, c).
It mostly depends what/who you are programming for - if you want to 'add' to the linux-suite, that's fine but it doesn't really matter which distro you use.
If you want to do programming for your (potential) employer - again - your choice of distro doesn't really matter. My employer was a Centos-shop, but I used a lot of different distros (slackware, mint, whatever - and yes (chuckles) even Centos).
Basically, what you need is a terminal, editor (vi), compiler(s) and a make-system and the rest doesn't matter one iota - and every distro in sight has it (or you can get it)
Oh and I digress - depending on what you are doing, a source control management system would come in handy - in particular if there are several contributors.
Oh and by-the-way - if you are looking to the future, I do believe I would look at 'rust' rather than 'c'.
I just l-o-v-e 'c' and (to my knowledge - any c I have ever written has never caused a memory fault (like forgetting to free allocated memory on abnormal exits). However, it doesn't mean I can't appreciate newer things surfacing. I am too old to go that route, but for any newbie (which you appear to be) - I would suggest to learn 'rust'
Just my 2c-worth
In parallel, I spare at least 1-2 hrs daily to program on C - either through Harvard's CS50 program or learning from books and video tutorials. I'm really into that language!
So, I wonder if I can use the potentials of both Slackware (or similar DIY distros) and C - the native language of Linux - to practice my programming skills while assembling the system. I'm not in a hurry, as I use my notebook for my daily needs, so I can invest some time on this. Plus I'd like to improve my skills to the level I could give back to the FOSS community (a dream for now)...
Thank you!
By building any system you don't learn how to program the system, really. You learn how to build it. From my point of view it is more effective to understand how to program a simple interpreter first (so, read SICP, and yes, there is guile in Slackware, which is quite helpful when you read the book), and then Aho-Ullman-Sethi plus a good chunk of flex and bison to learn C (both flex and bison are also available in Slackware).
I wish I did all of that I was a student instead of compiling Gentoo...
Basically, what you need is a terminal, editor (vi), compiler(s) and a make-system and the rest doesn't matter one iota - and every distro in sight has it (or you can get it)
lol - nah, could never be bothered with emacs, but hey - it's what you produce that matters - not HOW you produce it!
I have absolutely zilch/zero problems with emacs, if that's what you want - you use it!
FWIW. I once had to do a Java programming course on Windows 98, using a GUI (did I know anything at that time about computers? or editors? Nah, zilch, only used them for making pictures or writing reports). This JBuilder made the computer hang more often than my little calculating program crashed. And in that time, on 98, it was the 4 sec power button press, that determined the work-flow.... (That was more time-wasting than compiling programs when you have something in the end).
Then someone, I think a member in the band I was playing in, told me that on linux one program would not kill or hang the whole lot....
So yes, to do (some) programming brought me, to linux. More because of the stability than because of the learning.. that came a bit later.
So, I wonder if I can use the potentials of both Slackware (or similar DIY distros) and C
A distro is an OS, an OS bundled with applications. It may support programming environments, but it doesn't require programming as such. Having said that, Unix-related OSs can be configured by shell scripts, which is a turing-complete programming language. But if you create non-trivial software in that arcane environment you're doing it wrong.
If you're looking for an opportunity to practise programming, consider contributing to an existing project (a software that you use and like), or create your own open source project on github or similar.
Regarding C: C is a great language and every software-professional should at least have an inkling how machine code works and how C code relates to machine code. However. If you want to write great software (even in C) you need to get the bigger picture of algorithms and data structures and patterns that you only get by practising higher level languages as well.
To give an example, a single high-level declaration of a "concurrent double-ended priority queue" (and I'm not making this up) can save you hundreds of lines of C-code while at the same time provide mental clarity for the problem at hand.
I haven't even mentioned the complex data type "string".
Slackware is an excellent development system particularly for newbies, with a few caveats.
+ It comes with a wide selection of up-to-date compilers, interpreters, build tools and libraries.
+ All of these automatically come with header files so you can use the libraries too (no separate -devel package)
+ All of these automatically come with all their documentation (no separate -man or -doc or -info packages).
- All libraries are 'stripped' of debugging information and there are no debug packages.
- Some more complex projects/tools might only track 'some ubuntu LTS' so can be harder to build and install.
- For a nascent C programmer valgrind can be a great help but is not included (but can be gotten from slackbuilds)
This is in contrast to debian based systems which don't include most of this by default, and where some of the package names can be hard to determine or they are hidden away in separate repositories (e.g. GNU FDL docs).
C is by far my favourite 'relaxing and fun' language to play with and a good way to lean how computers work. While you can do anything with it certain problems are more easily tackled in other languages - but that is a separate issue from learning. What I particularly enjoy about it is it's simplicity - the syntax quite basic and there's only a small number of keywords and statements to learn and not much boilerplate required to get programming.
The best way to learn is to do it and the best motivator is enjoyment so if you're enjoying C just run with it and see how far you get. Having said that if you can't grok pointers don't get hung up over it.
Quote:
Regarding C: C is a great language and every software-professional should at least have an inkling how machine code works and how C code relates to machine code. However. If you want to write great software (even in C) you need to get the bigger picture of algorithms and data structures and patterns that you only get by practising higher level languages as well.
I find this assertion a little puzzling since data structures and algorithms are how you do anything and everything in C or most other common programming languages and you certainly don't need to use any other 'higher level' language to learn about them. All my data structures and algorithms subjects at uni were in C apart from some introductory stuff in PASCAL (IIRC all other programming subjects for the degree where in C in-fact). And if you don't want to write your own abstract data types (ADTs) there's plenty of production-grade libraries for them in C just like there are in Java or other languages that come bundled with them as part of their platform. But just using an existing library wont help you learn how they work - if that's what you're interested in rather than just using them.
As an aside Java isn't much higher level than C just because it comes with ArrayList, algorithm implementation is still fundamentally based on sub-routines, control-flow, allocation, arithmetic, and assignment. For example the bundled ADT implementations are just written in Java and not a special language feature, cf. Perl's hashes.
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.