2

I know this is too late to ask this question, but am a final year computer science student, average in all core subjects with 0 knowledge of web development (except a few html tags, but not enough to make a wikipedia like website) or other professional streams.

I know java and python enough to make oop classes and understand code written in them.

Should i
A)study more about web dev/ml-ai/testing/other "professional" stuff
B) learn more and strengthen my core subjects , like operating system, algorithms, data structures, etc or
C) learn another core language like C/c++/assembly?

Comments
  • 1
    Depends, do you like money?
  • 2
    What do YOU want to do or work on? That will determine what you need.
  • 4
    Uhm... how would you strengthen OS knowledge with just Java and Python under the belt? These languages have their place, but they abstract away the very layer that the OS is supposed to deal with. You can't make a pilot licence by booking flight tickets.

    You will need C, and at least one assembly set. For learning, I can't recommend x86 - but there are nice and affordable Cortex-M boards to toy around with.
  • 3
    @Fast-Nop did you just assume all OS's are built in C 😏

    @StopWastingTime πŸ‘€name checks out,
    don't go into web, it's a shiny little ball of beauty until you look under the hood and have to deal with more "standards" then you can throw a stick at from design, UX, accessibility, PCI, markup, and everyone's "standards" are different and forever changing.

    If your into kinky but sex though, web could be for you... it'll fuck you at some point.
    Ps: I'm a web dev.

    Your best bet is to identify a niche that interests you and pursue it.
  • 3
    @C0D4 Nah there are of course a few that are not in C, like Symbian in C++ or the really old Apple OS in Pascal. But it's mostly C for good reasons, and without the C kind of knowledge (in whatever language), plus some assembly, there's no way to understand an OS.
  • 2
    I second @Fast-Nop here
    C, assembly, and systems programming concepts are heavily used in basically every significant OS. I would argue that those are more vital than just learning a new language. Eg. Learn how to write cache efficient code, virtual memory, how security and isolation in OSes work, filesystems, network stacks, drivers, compilers, linkers, loaders, etc.

    The language you use is irrelevant as long there's a way to do decently low level stuff in it, but C is a great choice because you then focus on the concepts because of how simple the language itself is. And if you can write cache-efficient matrix multiplies in C you can do it in C++/Rust/Go/etc. too.
  • 0
    @Fast-Nop @C0D4 @RememberMe thanks . I also like learning about the core workings of a system, though it was difficult to find resource when i was studying those as college subjects.

    what is its use in financial growth besides job interviews? Are there any jobs in it as a fresher? Companies are hiring for very specific works these days and all i see around is web/mobile "developers developers developers..."
  • 0
    @yellow-dog of course i do. But i think i can take it off as my #1 priority, if i have to chose between learning and earning

    (Not literally , i do want πŸ’°, but what am saying is, if a company gives me enough money to cover my living and commute costs without giving me stress, then am okay with it)
  • 0
    Learn React or Vue and learn Rust for backend and maybe someday frontend with WASM.
  • 0
    Also Rust is relevant for OS development.
  • 1
    @simulate No, it isn't. It may become relevant.
  • 0
    @Fast-Nop Redox OS is an OS entirely written in Rust..
  • 1
    @simulate Which is at version 0.5.0, which nobody is using as of now, and which therefore is irrelevant. That may change in the future, but that's what I said.

    Or how many job ads do you see with Redox OS?
  • 0
    @Fast-Nop Well I did not realize you only consider things relevant which are used by a major share of people and for which there are jobs available.
    Rust is an emerging language and has a long way ahead of it, and it's doing great so far. Future operating systems will most likely be written using a language like Rust instead of C or C++ because it is simply safer.
    I don't see how Rust is not relevant for OS development as of today. If we only label established technology as relevant we will never make progress, because no one will use the modern technology.
  • 1
    @simulate Rust may make it, or it may not. Right now, it has NOT made it, that's a fact. It's irrelevant how cool you think it would be if Rust were to make it. There were a whole lot of cool, promising technologies that never made it.
  • 0
    @Fast-Nop I am not pushing anyone to use it, I am just saying that in my estimation, Rust is a relevant language for operating systems. If you want to keep time-testing it, that is completely reasonable. But if everyone just waitd for something to happen, nothing will improve.
  • 1
    @simulate I think it's unreasonable to recommend Rust as OS dev language for the OP who hasn't even C/C++ and assembly under the belt, and who isn't looking into some future R&D, but wants to find a job in one year.
  • 0
    @Fast-Nop Learning C has already been recommended, and it is probably useful to be out in the wild for some time and learn how it all works under the hood. But how useful it ultimately is, entirely depends on what @StopWastingTime is wanting to work on. Naturally there are more job offers for C developers, but most of those are for senior developers anyways. From my perspective, Rust will not mature unless people are willing to learn it. C is fine to learn but it's not the future of software.
  • 1
    @simulate C has been said dead so many times, but not all development goes by coolness and hype.

    And I'm not sure whether a puzzle language will actually make it. What will happen in reality is that people will say "fuck this shit", go via the unsafe escape hatch, and you're right where you were before.
  • 0
    @Fast-Nop I'm not saying C is dead, or will die any time soon, it maps very well to the internals of a computer and will therefore always have its place.

    Have you used Rust at all? You wouldn't call it puzzle language if you had used it. It is simpler. It takes care of bugs for you, so that they don't happen. There is no undefined behaviour. The object oriented features are minimal. The generic type system uses composition over inheritance. You have a proper macro sub-language which basically allows you to build your own programming language using macros. References can not be invalid and have the lifetime of their pointee associated with them. You can still opt in for raw pointers using unsafe { ... }. Multithreading is inherently data race safe.
    Instead of run time errors you get compile time errors educating you about why something is not allowed. It just saves you so much time. It is not just another new language, it actually completely changed programming for me.
  • 1
    @simulate Try doing something as trivial as a double linked list in Rust without unsafe. Data races are safe because data aren't shared due to the borrowing concept - but if you don't share, then C is just as safe.

    Early adopters love solving puzzles where they tinker with the language and not the actual problem, but later users don't. See Ada as cautionary tale. In real usage, I can already tell you that "unsafe" will be the single most used feature whenever the language gets in the way.
  • 0
    @Fast-Nop Just use the standard library implementation and done.

    I get your point but it is much better to have one proper implementation of something than to code it over and over by yourself and always be running into the same problems. And it's not like it is impossible to do certain things in Rust, only more difficult. However you generate much less technical debt by doing it properly.

    In my projects I found that I am completely detatched from most language problems, except for some features which are not stable yet unfortunately, like existential types or async/await syntax. But generally, I can focus better because I don't have to worry about null pointers, double frees, memory leaks, or dangling pointers. The compiler just tells me and I immediately notice if my design is flawed. And the only bugs I have to worry about are logical bugs which make me miss my specifications. But testing in Rust is also quite simple. And cargo is the best build and package managing tool ever.
  • 1
    Rust will never replace C/C++. C is mature and used everywhere, especially in OS where C++ ABI would cause issues. C++ is becoming a multi-paradigm language that will be used for everything else. Rust is interesting, but imperative rules the roost and will for a long time. Functional approach is interesting and can make some types of programming better, but it is not a silver bullet. This is where a multi-paradigm language shines. If I need a particular approach for a particular project I don't have to change languages. C++ gets a lot of shit from other programmers. The arguments made are usually about really old versions. Modern C++ is a vibrant and efficient language. Yes it takes an expert to not fuck it up. Once you gain that expertise everything is easy as pie. You learn to understand object lifetime, you get to abstract things as much as you want with almost zero overhead, and if you need to you can drop down the abstraction layers. The last part is important.
  • 1
    @simulate I'm wary of languages that are restricted enough to have problems writing their own simple standard features. That was already a downer with Pascal.

    On the other hand, I do write pointer heavy code and don't have issues with dangling pointers, double free or memory leaks. That's because when allocating, I go immediately for the deallocation path and code that, plus that I zero freed pointers so that I'd have immediate crashes with use-after-free.

    And see, the tech debt feature won't be solved in practice, I already stated that people won't solve language puzzles when they have real stuff to do.

    The one thing that irritates me most with C is the tons of undefined behaviour that should instead have been made implementation defined, like signed integer overflow.
  • 0
    @Demolishun Rust is imperative, not functional, it just takes scope and mutable/immutable access seriously.
  • 1
    @simulate I dunno wtf I am talking about then.

    https://en.wikipedia.org/wiki/...

    Didn't realize it was multi-paradigm too. Damn it! I guess time will tell. I have had my head up my FP ass so much that everything was starting to look like FP. Thanks for your patience.
  • 1
    At some point you have to switch your focus from learning to build something to building and learning in the process. Else you are never going to be applying your current knowledge to your own benefit
Add Comment