The trouble with the coding academy kids is they don't understand interoperability and they don't understand the basic principles of computer programming. The conversations I had with them always opened with them asking "What's your stack?" in the hopes we were using whatever 6-month old framework they learned abut. Several of them asked if we would consider porting our 10 year-old codebase to whatever JS framework their class was about (no). It's rote learning and a scam.
Web applications are dirt simple now, the language hardly matters because as long as you have a MVC framework and a database abstraction layer it's going to be pretty much the same regardless.
Oh yeah, no, they have no clue what they're doing. It's cargo cult programming. If they bang on the drum, the money will flow like rain or some shit.
A lot of python's machine learning modules are implemented in C, and sometimes it's easer to just code in C when you want something to execute quickly. That said, even if it isn't as widely used as it used to be, I'm pretty sure it'll still be able to kill Rust.
Writing things in C unnecessarily is a bad idea. While it's technically true that "C == go vroom fast", if I had a programmer working for me wanting to write something in C, I'd really grill them over why.
Like you shouldn't do anything particularly complicated in C. At best, you should whip up a few, extremely simple routines that are hard to fuck up, and then wrap them to be used in your scripting language.
If there's any recursion, any trees, allocating any structures that need additional allocations of their own. Any of that fuckery, and you better have a damn good reason to be using C. Like it better be costing us a fortune to run an interpreted language.
The reason is is because allocations between libraries is a nightmare to deal with. Every library needs to define how memory is allocated and how memory is passed back and forth. And they all have different policies, and furthermore, they adapt their policies differently in different situations.
"Oh NewBignum_alloc will free its memory itself, but NewBignum_allocUnmanaged won't (but they both take pointers that the client is expected to free). Now if you pass them to BigNum_add, they both get freed (unless the dontfree global is set to TRUE)." It's just a mess of landmines.
Heh, if I was teaching a C class, I'd assign a project that involved manipulating trees. Something simple like turning a tree into a list of nodes. And they'd have to GET/POST the data from a web server using curl.
And then I'd link their programs up to
Boehm GC. If their program showed any memory leaks, they immediately fail the assignment.
How do you keep up the will to push forward with it when you get confused or frustrated by it?
It's helpful to know whether a project is possible or not.
Some problems out there are computationally infeasible. But that's pretty rare.
So if you can figure out ahead of time that a project is possible, then it's easy to keep moving forward. If you know for a fact that it's possible, then at the very least, you can just try literally everything you can think of. Eventually you'll hit upon the solution. And that's a learning exercise for what to start with next time.