Hacker News new | past | comments | ask | show | jobs | submit login

[flagged]



I'd say C is actually a pretty good choice for an educational project like this. Having to write out all of your data structures by hand and manage your memory manually is a good learning experience, and since you're not writing serious production code, you don't have to worry too much about making mistakes.


_someone_ has to learn to build runtimes


_someone_ “else” :)


Given OP's (presumed) age, curiosity and enthusiasm, my advice to OP would be to not worry about what language you are going to specialize in at all. That can come later. In fact, do the opposite: learn every language under the sun and prioritize weird languages with unique ideas that are outside of the mainstream. Learn Rust, Haskell, Lisp (OP is already learning Racket so that's covered), Prolog, Forth, assembly, Smalltalk, ... (admittedly I haven't learned every language on this list; there are some that I wished I learned when I had more time for it).

OP is at a stage in life where fluid intelligence is still very high and crystallized intelligence is growing rapidly. This is the time in your life where you are perhaps most able to absorb new ideas and ways of thinking, before you get set in your ways and less receptive to different ways of thinking.


C is a very popular language to use in undergrad courses, all our entry classes (intro to programming, data structures and algorithms, OS fundamentals, etc.) were in pure C - exactly because you have to deal with memory from the get-go.

If that's the case at the Uni OP is studying at, then he should be come fluent in C - because from experience as a TA, it's not necessarily the CS knowledge/fundamentals that tend to be lacking when people struggle with classes, but rather that they're fighting a new language. Even if they have years of previous experience...especially in these days, when Python or JS tend to be the first (and only) language to many freshmen.


This is bad advice.

> several better options these days

Every other option requires you to buy into some additional paradigm-of-the-day.

You can easily lose decades going down the wrong programming rabbit holes.


No. Paradigms are few (OO/logic/functional/procedural/a few more) and learning those is essential and very transferrable.

> You can easily lose decades going down the wrong programming rabbit holes

total rubbish.


Why do you think the industry keep circling back on old stuff?

Look at how much time we lost with OO. I am only recently coming to grips with how bad it is. C++ was the "thing you are interested in today" back then. And it wasn't well thought through.

What were people doing before Rust?

C is great.


C is great, agreed. That's the procedural paradigms I mentioned. But the others work very well if used appropriately.

> Why do you think the industry keep circling back on old stuff?

What does this even mean? Can you give some examples?

> Look at how much time we lost with OO

Okay, what do you mean by 'lost' because I find OO to be extremely useful (if used appropriately). Ditto functional, ditto logic.

Are you suggesting we should scrap all of these and just use code procedurally and nothing else? Because that would be a massive step backwards in my view, and I do have decades of experience so I can't understand why you're so negative about anything else but procedural. And maybe C++ was just a bad implementation in hindsight. But it took us a long way.


> What does this even mean?

There is a lot of good wisdom from the 60s, 70s, 80s that people forget and end up re-inventing. I don't think I'm the first person to make this comment.

> OO

It's very subjective I'll admit. But I don't like OO, and it took me along time to realize why. There are many people who feel the same way. The difficulty is in explaining it. Because you have to look at large systems, explore the evolution of these systems, and pluck enough examples where things don't work.


You say so but give no actual evidence against it.

I can't learn from that.


There are a ton of resources online about "why OO is bad". I think knowing that this viewpoint exists is a good lesson in itself.


You don't consider the fact that I've worked successfully with OO many times on various systems of various sizes to be of any significance, then tell me "there are a ton of resources online" which translates to "now go and google for viewpoints that support grumblingdev" instead of actually giving me any data.

You've given me nothing to work on, nothing to learn from, nothing I can even oppose because your objection is so nebulous. I can't even knock down your claims because you haven't really made any except "muh, OOP baaad". I haven't learnt anything, equally you haven't learnt anything... what was the bloody point in you saying anything at all?

> I think knowing that this viewpoint exists is a good lesson in itself

I'll skip the sarcastic reply and just say I draw rather different conclusions.


They built an interpreted language in C over a summer, I think they are beyond “getting into programming” - they’ve clearly been programming for years.


This kid has plenty of time to dive into other languages. C is a great choice.


C is like a high level assembly language. It maps very closely to how the computer actually runs programs. That, and it’s simplicity, make it a great way to learn.

It’s not usually a great idea for production code anymore, but for learning it’s fantastic.


That old chestnut. C is nothing remotely like an assembly language, of any kind. It is a low-level programming language, but only compared to most languages. Disassemble some compiled C code sometime -- it's another world entirely.


I’ve programmed in both assembly and C, among other things. I stand by it, C is much closer to the machine than most languages.


I think Lisp won that battle. The core syntax was named after actual cpu registers (cdr/car).


Seriously? :)

Is lambda calculus or the PDP instructions set a closer match to which language?


C may not be the same as assembly language but the value of learning it is that in general it is the lowest level that we get to for most software. So, most programming languages are either compiled to C or have a virtual machine that is written in C. Many of the things our programs rely on are written in C, for example operating systems and databases. So in a way we can say that "the metal" is C and by understanding it we can potentially understand how our software works from top to bottom.


Maybe it is on a PDP-11 . . .




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: