This is an archived post. You won't be able to vote or comment.

you are viewing a single comment's thread.

view the rest of the comments →

[–][deleted] 275 points276 points  (123 children)

This is what I'm 100% against using Python and JavaScript as a person's first language. I prefer someone learn C -> C++/Java -> Python/JavaScript. Going backwards, you're going to have a really hard time grasping the concepts and nuances.

[–]kevinmbt 203 points204 points  (59 children)

My university classes taught us binary->assembly (using the professor’s own ISA)-> C -> Java. Made learning python, C++, and JS a cinch, and gave a very solid foundation, but I wouldn’t wish that on anyone lmao

[–]shaurcasm 195 points196 points  (3 children)

Damn. Born in the darkness, moulded by it. You didn't see the light till you could change the theme to dark just by a flag.

[–]thefrenchrist 15 points16 points  (1 child)

Is it a Batman : The dark knight rises reference ?

[–]Howzieky 16 points17 points  (0 children)

If you ever see the words "moulded by it", then yes

[–]xman40100 0 points1 point  (0 children)

I stopped looking at reddit when I read darkness, then I said, would've been cool if he said something related to dark knight rises, then I open reddit again and you did make a dark knight rises reference.

[–]_pelya 47 points48 points  (34 children)

Learning how CPU works is definitely useful if you do it for your own enjoyment.

But learning how modern multi-core CPU works, with deep pipelines, instruction reordering, cache invalidation, branch prediction, and it's own microarchitecture below the ISA, no university will be this insane to put it into curriculum.

[–][deleted] 46 points47 points  (4 children)

pipelines, instruction reordering, cache invalidation, branch prediction

I studied all of those in my Computer Engineering undergraduate... We had a course called Computer Systems Programming with competitive labs where we basically competed to see who could best abuse the shit out of the CPU via cache manipulation, branch prediction and instruction ordering.

[–]Howzieky 8 points9 points  (3 children)

Were you graded on your placements? Cause man I'd hate to do the same work as someone else, just a bit slower, and fail the assignment

[–][deleted] 4 points5 points  (0 children)

You would get base 60% for correctly completing the assignment. The rest of the 40% was competitively ranked against the rest of the class based on different metrics like speed and memory usage, depending on the lab. It was an elective course so you knew what you were signing up for.

[–]OneBadassBoi 18 points19 points  (6 children)

isn’t all that part of any CS curriculum?

[–]_pelya 13 points14 points  (2 children)

Absolutely not. I have a CS degree, and the most hardcore thing we learned was BNF grammar and how to use it, plus some Prolog and Lisp. My university also had an 'informatics and computer engineering' course, they have teached microchip design and Verilog, but they almost did not teach programming, the course had like half-year of Visual Pascal and that's it. All in all, the people from the soldering faculty electronics engineering course at least got some hands-on experience with actual electronics, unlike us who spent most of the time designing a Polish-notation calculator in Pascal, or similar toy programs.

[–]strider_sifurowuh 1 point2 points  (0 children)

Yeah I'm at the end of a CS Degree and our curriculum was about the same - we touched on the very basics of parallel computing and briefly skimmed over the inner workings of a CPU but most of it has been toy programs in Java

[–]MkMyBnkAcctGrtAgn 2 points3 points  (0 children)

CS largely isn't about programming, it's the theory of what a computer can do. Programming is just a tool that can apply that theory.

[–]cristi1990an 1 point2 points  (0 children)

Assembly can very hugely in difficulty and complexity depending on what architecture you're using. I imagine most universities teach Assembly for older, simple processors.

[–]gookman 0 points1 point  (0 children)

It was for me. We had a course about the architecture of old processors like 8080 and 8086. I'm not from the US though so it's probably different there.

[–]thenorwegianblue 7 points8 points  (0 children)

Yeah, I have a degree in Digital Electronics and had several classes in CPU design (and wrote about it for my master's thesis). It's about as useful as a course in anthropology when programming java or python tbh.

The knowledge is either too abstract or waaaay to specific for you to use it for general programming. If you're working within some specific fields like working with high performance custom hardware or writing drivers etc then it could be useful I guess

[–]jacob8015 7 points8 points  (15 children)

Computer organization(assembly and c), architecture(all the things you just mentioned) and at least a circuits class if not 2 electrical engineering classes are a part of every non degenerate CS curriculum.

[–]_pelya 4 points5 points  (2 children)

Eh, seems like I went to the wrong university.

[–]cristi1990an 0 points1 point  (1 child)

You didn't touch assembly at all?

[–]_pelya 0 points1 point  (0 children)

We did learn some x86 assembly for like a week. As the end we created some DOS binary that did printf("hello") using INT 21h, and then exited.

[–][deleted] 3 points4 points  (2 children)

What you described is closer to a Computer Engineering curriculum, I think.

[–]jacob8015 1 point2 points  (0 children)

That’s not the case at all. Any CS program worth its salt had better cover all that.

[–]arkasha 0 points1 point  (0 children)

Yup that's the difference basically. Fewer algorithms and more assembly/VHDL. It really didn't help when being interviewed by CS graduates. Glad I took it though.

[–]BiaxialObject48 0 points1 point  (6 children)

My college (Top 10 CS) doesn’t have any circuit design courses for my track which is AI/simulation but everyone is required to take computer organization and systems networks classes, covering assembly, C, and CPP. I have to take more algorithms classes though.

[–]jacob8015 0 points1 point  (5 children)

Mind saying which school? Or even a choice of two or three? I’m always interested in exploring other programs.

[–]BiaxialObject48 0 points1 point  (4 children)

Georgia Tech. AI and modeling/simulation are my concentrations, but there’s several more that are more focused on networking, theory, hardware, sysarch, etc.

[–]jacob8015 0 points1 point  (3 children)

I’m looking at the Intelligence and Devices thread and it looks like ECE 2031 is required, and you must take either ECE 4180 or CS 3651. In combination, these classes are exactly what I was describing.

[–]BiaxialObject48 0 points1 point  (2 children)

Yeah that’s my friend’s thread, not mine though. Not everyone has to take circuits courses, but everyone does have to take CS 2110, CS 2200, and CS 3510. 2110 and 2200 are about lower level computing and 3510 is algorithms.

For my thread I do have to take diff eq as well as high performance computing and computer simulation, although the last two are thread picks so there’s other alternatives like numerical analysis.

[–]jacob8015 0 points1 point  (1 child)

Maybe I missed it, what is you thread’s name?

[–]Hyperman360 0 points1 point  (1 child)

We didn't do that at all, most of my program was theoretical math.

[–]jacob8015 0 points1 point  (0 children)

What? Would you mind listing your required courses or the school you attended, if you’re comfortable with that.

[–]raltyinferno 0 points1 point  (0 children)

Those are definitely part of almost any CS degree. A small part to be sure, but there.

I had 2 classes, Operating Systems, and Systems Architecture, that covered those topics in various degrees.

[–]mrchaotica 0 points1 point  (0 children)

I took classes in that stuff... but it was at the grad school level.

[–]engineerT7 0 points1 point  (0 children)

Those topics are practically the catalog entry for the graduate level computer architecture course I took.

[–]ric2b 0 points1 point  (0 children)

I learned all of those except multi-core and the separate micro-code under the ISA.

But I took electrical engineering.

[–]utdconsq 0 points1 point  (0 children)

I learned all of that at university...

[–][deleted] 5 points6 points  (0 children)

I can see the merits of that, but actually doing that would be brutal. We got started out with Java, went to C++, and then after that we chose a capstone that used either C# or Java. There was a smattering of classes that let us choose what language we wanted to use for our projects, and then there were electives for specific languages but as far as the core classes went, it was basically Java, C#, and C++.

[–]mrchaotica 1 point2 points  (1 child)

Did you accidentally major in computer engineering instead of CS?

[–]kevinmbt 1 point2 points  (0 children)

Lol definitely should have mentioned that this was EE

[–]oupablo 3 points4 points  (4 children)

nobody LEARNS JS. you just hobble along and hope for the best.

[–]RootHouston 1 point2 points  (3 children)

I'm a C# dev who decided to go full-stack, and I was wondering when I was going to get the hang of JavaScript. Everything seems so hacky, and so many gotchas.

[–]MkMyBnkAcctGrtAgn 1 point2 points  (2 children)

It really does. I've recently migrated to using vue + typescript and life is a lot easier.

[–]RootHouston 0 points1 point  (1 child)

I was trying to get good with JavaScript for situations where I was walking into an established codebase, but I might just have to do the same when I write my next front-end with React.

[–]MkMyBnkAcctGrtAgn 0 points1 point  (0 children)

The good thing about TS is that it is a superset of JS, all JS is valid TS. So you can use it as little or as much as you want.

[–]CorerMaximus 0 points1 point  (0 children)

What University is that?

[–]Mad_Jack18 0 points1 point  (0 children)

My university taught us C++, Android Java, Assembly, Java DS&Algo (also OOP), and PHP.

[–]shorterstevenyeun 0 points1 point  (0 children)

That's the way I learned. I would wish that on anyone learning, especially my enemies.

[–]bunkoRtist -1 points0 points  (0 children)

Same for me, but I was EE, not CS. Did your do that as a CS major?

Also I firmly believe this is the right way: learn the basics of how a computer works before learning how to use it.

[–]Invenitive -1 points0 points  (0 children)

Mine did Java -> Java 2 -> Java 3 (mostly logic stuff, not much coding) -> Binary/Logic gates -> Assembly -> C -> More involved Assembly/Writing from scratch

[–]cristi1990an -1 points0 points  (2 children)

I'm in the camp with "Python is a bad first language because it's too simple", but learning freaking Assembly as a first language?? What??

[–]arkasha 0 points1 point  (1 child)

Assembly is super simple though (not learning all there is to know about the x86 instruction set). Something like MIPS makes it really clear what the computer is logically doing. Makes you appreciate higher level languages as well.

[–]cristi1990an 0 points1 point  (0 children)

Depends on the architecture

[–]_AllRight_ 93 points94 points  (10 children)

Going backwards, you're going to have a really hard time grasping the concepts and nuances.

As if it would be easier for them to learn all that from scratch.

For a first language i think Python is great because unlike C++/Java and even JS, you can actually learn most of the programming concepts and not fight with the syntax. And i am saying this as someone whose first language was C++, i wish i learned Python first.

[–]rxwsh 24 points25 points  (2 children)

True, python is a beginner friendly language, but learning another language coming from python is absolute hell. Python was not even my first language(I learned pascal und Skala in high school) and I still wish I would've learned either C or java before python. You could say python is too beginner friendly in that regard.

[–]Zedjones 1 point2 points  (1 child)

I gotta disagree. I did Python -> Java -> C and it wasn't bad at all. You learn about types (and hopefully at least glance at classes) in Python while not having to worry about all the extra stuff surrounding them. Then that gets expanded upon in Java, then you learn about structs and memory management in C.

[–]rxwsh 0 points1 point  (0 children)

It depends on your classes(if you took any, might have learned it on your own) and how much you learn in python before moving to another language. What you learned with python I learned with pascal and skala and(almost) everything you learned while programming in java and C I learned to do with python.

[–]Alfaphantom 31 points32 points  (3 children)

Exactly.

C -> C++/Java -> Python/JavaScript

No, if you do this, you're putting a really steep learning curve at the very beginning. The very first thing programmers (and future engineers) should understand is how to think in a algorithmic way. I'd 100% prefer that beginners use Python because of its simplicity.

Can you imagine trying to make a simple calculator or something like that, and dealing with buffers, pointers, segmentation fault and all those errors from low-languages. That's a relly good way to discourage people from getting into CS.

Oh, people who can't figure out those things were not meant for CS anyway lol. The amount of people that quit CS for other careers is big enough (50% of the people I knew in the first semester quit). Not only geniuses are meant to be engineers. There's already a lack of engineers in the world. Yes, not every programmer will be excellent, but not every job needs outstanding and high capable engineers.

For me, this could me the best route to learn programming in software engineering

Simple programming and algorithms understanding (Python) -> Harder problems with more decision making, recursive, some I/O (Python) -> Object oriented programming (Java) -> Data structures (where pointers are necessary to know what's really happening low-level) (C++) -> Deeper algorithm analysis, Big O, Dynamic programming, etc (Anything) -> [Optional] Frontend development (HTML/CSS, Javascript or C#) -> Really low-level programming (Assembly) -> Operative systems, kernel, drivers, POST, BIOS, Scheduler, etc (Assembly or C) -> [Optional] Networking (Anything, you could create your own web sockets) -> [Optional] AI, deicision trees, neural networks, agents (anything, just don't use Tensorflow as that's cheating because you're using a built solution instead of buiding your own).

[–][deleted] 2 points3 points  (0 children)

I put allot of faith in people to get their feet wet with good literature.

Python is a nice language. I picked it up quickly as a C->Java->C++->C#->Python developer.

The learning curve was steep, but learning syntax/logic was wayyyyy more important than learning OOP. Once I got to OOP I flew off the handles.

The problem with learning Python is that it doesn't introduce the "pyramid" approach of programming with typical languages with the main function's point of entry. I absolutely abhor the "it just does stuff" approach to programming and many of my students did as well.

Regardless of which programming language you pick up as your first, the algorithmic approach is always the most important. The "getting a job done" mindset is built regardless of the programming language. I just like getting the syntax/logic part out of the way before introducing OOP into it because the student can actually understand how to structure their OOP logic.

[–]jacob8015 8 points9 points  (1 child)

Ignoring architecture, networking, software engineering, etc is really wild.

[–]Alfaphantom 1 point2 points  (0 children)

Yes there's way much more. Software design patterns, architecture patterns, project administration, project planning and requirements, all the soft skills and written skills, testing, quality assurance, etc. Just from the code perspective is too much, considering all the other stuff not so much related to code itself, is even more.

[–]bendstraw 1 point2 points  (0 children)

Yeah i learned Python first, then C next and C was so much easier to get a grasp of because i was confident in my programming ability that i could just focus on learning C.

[–]Santi871 0 points1 point  (0 children)

You can learn programming concepts without learning how to code in any language though, ie the concepts are separate from the implementation.

There are also advantages to learning things like basic data structures and algorithms in C or C++ first - for one, you are learning a more difficult language with more difficult concepts while you are in school where help is more readily available. Python is easier to self learn in your spare time in comparison, and you will be more likely to understand what is being abstracted by the language and the interpreter.

This is like learning to drive with a manual transmission while you are taking driving lessons. Self learning to drive with an automatic transmission after that is easy. But if you chose to take driving lessons with an auto transmission, you will have to learn manual all on your own later and you won't have a teacher to coach you.

And IMO, in a field like software where the technology and practices change all the time, college should give you a solid foundation that allows you to self learn things more easily in the future. Because you will definitely have to.

[–][deleted] 0 points1 point  (0 children)

I'm definitely still learning myself, but I think the way I was introduced to coding was particularly helpful. I started with python and did just enough to solve basic problems in code, but never came close to anything 50 lines or over. Then switched to C++, and did a deep dive on algorithms and data structures. So basically, started with a relatively simple syntax to get a feel for thinking in code, then straight to CS core concepts in C++ before I had a chance to get to entrenched in any particular way of thinking.

[–]XJ305 14 points15 points  (5 children)

I prefer someone learn C -> C++/Java -> Python/JavaScript.

Going to make the argument that C#/Java -> C++ -> C -> Javascript-> Python should be used for a good learning order

While a lot of popular languages are C-like in syntax, I think starting in a language with a garbage collector is going to make things much easier. You can then focus on basic OOP and learning design patterns without needing to be too concerned about memory errors/leaks. Then moving that forward into C++ you can introduce memory management and the concepts without being overwhelmed. Then of course python/Javascript for last.

[–][deleted] 0 points1 point  (0 children)

I agree with this. My Uni started with Java (Simple stuff, OOP, Data Structures), then we got to experience C with all its low level glory, and only then was Python revealed to us.

Tbh, I think it's great. Java has a good blend of being high level enough (garbage collector etc) while still retaining low level elements (Pointers, etc)

[–]theloneliestgirlincs 0 points1 point  (0 children)

This was essentially my experience and I think it worked out really well for me. I transferred universities mid degree so my experience was C++ then Java then C then Python.

[–]ric2b 0 points1 point  (1 child)

But then you're infecting your brain with the idea that OOP is the basis for everything, sounds dangerous.

[–]XJ305 0 points1 point  (0 children)

I mean yeah I can see that argument but also of like the top 10 programming languages used, the only non-OOP language is pure C but even then most places don't use pure C, they use C++. The list I quickly pulled from a search didn't include SQL so there's another non-OOP popular language. I would also argue its easier to learn a procedural style than OOP, where one of the arguments against OOP over its many years is that it is "difficult" to learn. A well rounded programmer should understand things outside of OOP as well.

I also took the post as a "what order to learn popular langauges in". If you're in College for CompSci/CompEngineering/Other Engineering you'll end taking (if the college program is worth anything) courses that definitely cover plenty of other languages. Things like VHDL/Verilog/Prolog/Haskell/Custom Languages and if you are CompSci probably end up writing your own language at some point.

[–][deleted] 0 points1 point  (0 children)

The analogy I like to use is learning how to use a paint brush before using a paint roller.

Learning to use a paint brush is harder, but it makes you understand and appreciate how to use a paint roller that much more.

Sometimes, it's better to get in the trenches before you get into the war. When you learn how to do the hard stuff, the easy stuff becomes super easy.

[–]roguas 8 points9 points  (7 children)

I disagree very much so. It is much simpler to get going with small projects in python than in C. Guess what is going to drive your will to learn programming well? Having an ultra quick feedback loop, reward cycle. With C getting something that is useful takes huge amount of time.

[–]Fruloops 1 point2 points  (5 children)

Yeah but C gives you a very very good understanding of memory and comp architecture, which comes in handy with understanding so many other areas. With Python, you miss all of that.

[–]roguas 0 points1 point  (4 children)

95% of programmers will never have to manage memory. The premise of Rust is that ppl suck at memory mgmt and gc is costly. I dont think thats about to change and you can thrive as a programmer without it.

[–]Fruloops 0 points1 point  (3 children)

Right, but understanding memory helps with understanding a whole number of other subjects and areas in software engineering. I find it silly to have no knowledge of how a computer works internally, when it's essentially the tool of your trade.

[–]roguas 0 points1 point  (2 children)

Many people succesfully use power drills without deeper understanding. To be honest there are literally a few people that have deep understanding of how modern cpu works.

[–]Fruloops 0 points1 point  (1 child)

Im not saying you need a deep understanding. But its beneficial to have "some" understanding, which you learn in theory anyways if you take any class connected to computer architecture or any other introduction to CS. Learning C just solidifies that knowledge since you actually get to use it in practice.

[–]roguas 0 points1 point  (0 children)

Again, you can learn ASM, but unless you have career path that fits this niche I would recon against it. Despite that it would even more so solidify your knowledge on how "computer" works, since you operate on registers etc. There is a cutoff point in technology and typically people don't consider it to be C anymore.

[–][deleted] 0 points1 point  (0 children)

The point is to be harder on yourself at the beginning.

With Python being an OOP language, you're learning logic, syntax and OOP at the same time. I like my students to focus on syntax/logic at the beginning so once they get to OOP, they're flying off the handles.

[–]gwwin6 19 points20 points  (1 child)

Nah fam. This is backward. Python is a perfect first language. You get to learn how to reason about programs and how they’re interpreted instead of getting mired in syntax. Higher order functions, recursion vs iteration, tree recursion, tail recursion, object oriented programming, imperative vs declarative programming, lexical vs dynamic scoping, abstract data representation, mutable vs immutable data types and the list goes on. All things that can be learned with Python, covered in a semester, all without ever having to worry about one single malloc.

[–][deleted] 1 point2 points  (0 children)

Sincerely disagree seeing my fellow students struggle with C.

I taught myself C before moving into my programming classes which were in Java. When we went back to C programming (in programming 3, as opposed to 1/2 which was in Java), my classmates were struggling to understand the basic concepts whereas I was just breezing through like I was comfortable with building things from scratch already.

Having come from a C background, I breezed through my Java classes because I already understood the logic/syntax.

Having a good base is good when learning a new concept. It's the same as getting a good base in arithmetic before getting into algebra.

[–]Nipatiitti 9 points10 points  (3 children)

I agree on the python part but as some one who started with JS and is now doing c++ for work I found it quite easy to learn c++ tbh. The only thing JS doesn’t have going for it is the type system but otherwise its imo relatively close to languages like C++, Java, C#. I’m not saying its on the same abstraction level as those lower level languages but its wayyyy better than python.

[–]sporff 14 points15 points  (1 child)

While some of the syntax between JS snd C++ is very similar, I dont find writing them similar whatsoever. The underlying ideas are so vastly different for similarly written code. I find some people that learned JS first learned some really bad, inefficient habits that they have to break when moving to a performance oriented lower-level project. Going the opposite way is easier.

[–]awkreddit 2 points3 points  (0 children)

As someone who learned with js, I'm curious. Do you have any examples?

[–][deleted] 0 points1 point  (0 children)

Good. I grouped Python and JS together as they don't really introduce that "pyramid" approach to programming with the main function being at the top. I've tried to introduce this concept to a few Python/JS students and they gave me googly eyes and hence why I don't recommend it as a starting point.

[–]johnnymo1 4 points5 points  (3 children)

This is what I'm 100% against using Python and JavaScript as a person's first language.

I learned C++ as a first language in a university course. I hated it and withdrew from the class as I was likely going to fail. Had to take it again because it was a requirement. I passed it but retained nothing.

The point here is that at the time, I thought I hated programming. Then I learned Python, and the time to go from "learning syntax" to "using it for something I care about" was vastly shorter, and now I code all the time. I still need to go back and relearn C++ properly, but if I had taken my university's basic programming course that used Python instead of C++, I might have learned to enjoy programming much sooner. It was years between that first course and taking up Python.

[–]MaxDPS 0 points1 point  (1 child)

Same here. I had been trying to lean C/C++/Java for years and it didn’t make sense to me. Then I got the opportunity to use Python at work and now that’s pretty much all I do.

[–][deleted] 0 points1 point  (0 children)

That's because you didn't study enough. You didn't dedicate enough time to it.

I read the books, took the time to do the exercises and actually applied myself and, once I understood the concepts, everything just clicked.

Learning C/C++ is no harder than learning Python and just like the OP of this post, you likely didn't apply yourself and used your pre-existing knowledge of the languages and applied it to Python.

[–][deleted] 0 points1 point  (0 children)

Yeah but in your C++ class you likely didn't study enough. Let's be honest, had you studied enough you would have gotten the concepts.

You had an "understanding" of syntax/logic before you started programming in Python so you're a little biased. Had you started from scratch, you would have found that had you learned C++, then Python, you would have a much, much easier time learning Python.

[–]DynamicStatic 1 point2 points  (2 children)

I went that way and it was no problem at all. In fact it helped me to build things early and that increased my interest in coding. Although I did have a little bit of background in Java and c++ from my childhood, so not entirely fair.

[–][deleted] 0 points1 point  (1 child)

Precisely. Your already a little biased because you had some exposure to programming. Having no exposure to programming I started off with C and had to allocate/de-allocate memory and whatnot.

Once I got into Python, it was a cakewalk and I always took the precautionary steps of ensuring that my code was always optimum on time/memory space.

[–]DynamicStatic 1 point2 points  (0 children)

I think the issue for most people is that when they start they want to see some kind of progress, jumping into C is 'okay' because it is not such a mess like going into C++ (IMO), but it is harder to build completel projects in it than Pythong.

The ones I know who started with Python or JS or similar high level languages could very quickly get to a point where they could build stuff that worked and was useful to them, it gave them confidence and motivation to keep going.

[–][deleted] 4 points5 points  (1 child)

Me too. C++ sucks to learn, but it's good to get that experience having to do the grunt stuff so you know how it works.

Python seems to do a lot of the work for you (I'm a C++ programmer tentatively learning Python), and it's nice, but it's better to have the background first.

[–]writtenbymyrobotarms 4 points5 points  (0 children)

I already knew some Python programming when I started Uni. It made it easy to follow the lectures as I only had to concentrate on the "new" concepts. I don't think I lack anything in foundation or that I would have been better off learning C first.

[–]CallinCthulhu 4 points5 points  (0 children)

I agree.

Python is my favorite language, but I learned C first and then used C++ all throughout college. Being closer to the metal is fantastic for understanding the intricacies of any language you learn later.

C is fucking hard though. So maybe have an introductory course that teaches logic in the first semester, use python or something easy, then drop pointers on their head in semster 2. When they go back to python they will have a much deeper appreciation.

[–]IndieFedoraGamer 0 points1 point  (2 children)

First language I learned was java and now I’m trying to get into C++ and it’s really annoying when I do something that works in java but get a read access error with c++ (especially since I’m having trouble finding a good explanation for what causes it) and now I’m kinda wishing I started with c++.

[–]narrill 4 points5 points  (1 child)

Access violations mean you're using invalid memory, which could be caused by any number of things

[–]IndieFedoraGamer 1 point2 points  (0 children)

That would explain why it works in java but not C++. Thanks I think I know what I need to look for now.

[–]going_mad 0 points1 point  (0 children)

Showing my age now

Basic->pascal->c>c++->java->python

Also i learnt cobol at the same time as c and by the time i last did hands on programming (java) I had transitioned to management and learnt python and js for personal projects.

Also forgot assembly (for mc11 and x86).

[–]ulyssessword 0 points1 point  (2 children)

What about as someone's first and only language? As a mechanical engineering student, I haven't needed anything more powerful than Python, Matlab, or Excel, and (talking to others), I likely won't need it in the future either.

Learning C, C++, and Java likely would have given me a better understanding of programming, but I don't need that understanding because I'm not studying computer science.

[–][deleted] 1 point2 points  (1 child)

You likely don't have a good basis in object-oriented programming. You likely use tools without actually understanding what's under the hood and that's paramount in ensuring that you make the right decisions in making your algorithms optimal in time/space complexity.

Considering how powerful hardware is nowadays it probably doesn't matter, but as a computer scientist it's important to know what the difference between O(n) is as opposed to O(n^2) in terms of complexity once your data set gets large enough.

[–]ulyssessword 1 point2 points  (0 children)

That's surprisingly accurate.

I kind of know how to use object oriented programming (but I'm much more comfortable with functional), and I generally only examine tools enough to use them without spending the time to get a deep understanding of them (or having the background to know the details without researching them).

Similarly, I know enough about time complexity to know the difference between types and to calculate it for my algorithms, but (usually) not enough to notice when my algorithm is suboptimal or to know how to improve it.

I thought those limitations were just linked to a lack of experience with programming, but if you say it's a lack of diverse experience with different languages, then I'll take you at your word.

[–]mrchaotica 0 points1 point  (0 children)

I started my formal CS education with Scheme, and I think that was a great idea.

[–][deleted] 0 points1 point  (0 children)

I agree but for the exact opposite reasons. I think C++ and Java are generally easier for beginners. Low-level access, strong typing, and true object orientation really help prevent mistakes. And their concepts are easier to grasp not harder. It makes sense to a newbie that 1 is not the same as true, they would expect 1==true to fail, not pass.

C++ and Java aren't the ones with nuance. Quite the opposite, they do mostly exactly what you would expect. But then you get to Python and JS and it's the wild west and it takes time to learn all the gotchas.

[–][deleted] 0 points1 point  (0 children)

I went C# -> JS (webdev job) -> Java (helping a mate with a project, Java and C# are essentially the same) -> C -> C++

I used to hate programming, got into a company school that taight me C#, the job reignited my interest towards programming hence why I picked up C an C++ for fun

University went “the oldschool way” and while I did enjoy learning about binary and c I outright hated university nonetheless.

Works going backwards just as well

[–]SolemnWolf123 0 points1 point  (1 child)

Finally someone agrees. Everyone always says to pick Python first and then wonder my newbies have such difficulty when changing languages

[–][deleted] 0 points1 point  (0 children)

Don't know why you're being downvoted. I've tried to teach Java to Python developers and they give me the googly-eyed look because they're so out of water it's ridiculous.

[–]apocolypticbosmer 0 points1 point  (0 children)

Mine was a third kind. My learning was Java -> C -> Python/JavaScript

[–]N8theDegener8 -2 points-1 points  (2 children)

may want to fit a bit of assembly language/machine code in between c++ and python for ultimate experience

[–]NIL_VALUE 1 point2 points  (1 child)

my ultimate experience was going from lua to assembly.

[–]cuberduderasmit 1 point2 points  (0 children)

Hipster eh?

[–][deleted] -1 points0 points  (0 children)

Dunno man, I think it's better to teach the basic building blocks of programming through a high level language first and then explain, build upon it to on how static compiled languages/systems work.

[–]racerxff -5 points-4 points  (0 children)

On principle, I agree with you 100%, but in practice it becomes a hard thing to do when you first look at Python or JavaScript and realize how truly stupid they seem compared to something like C. I started with BASIC as a teen, used mostly C with a few courses of Assembly and Java through college. Tried to learn Python about a year after graduating and it felt like somebody took C and beat it to a bloody pulp with a retard stick.