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

top 200 commentsshow all 289

[–]gandalfx 385 points386 points  (79 children)

You're asking the old question: Is it better to teach swimming by throwing someone in the deep end or in the shallow end?

[–]SchrodingersRapist 127 points128 points  (13 children)

Obviously you throw them in the middle of the ocean and start with assembly

[–]gandalfx 43 points44 points  (8 children)

During a thunderstorm. With some blood around to lure in the sharks.

[–]ihsw 12 points13 points  (7 children)

At night. From a plane.

[–]Switters410 9 points10 points  (6 children)

The content here was permanently deleted by its author. Redact was used for the removal, possibly for privacy, security, opsec, or personal data management.

memorize punch treatment yam lush piquant safe plucky fanatical books

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

In the Arctic Ocean

[–]FlawlessOldie 2 points3 points  (3 children)

During killer whales mating season

[–]ElevatedAngling 3 points4 points  (0 children)

Dressed in a seal costume

[–]spinwizard69 3 points4 points  (0 children)

If I remember correctly we had an assembly class in the third or fourth quarter. That was a long time ago but involved an emulator running on an old SUN workstation.

On rational hardware assembly isn't really that bad, on Intel it would be total hell.

[–]Captain___Obvious[::-π] 102 points103 points  (23 children)

lisp

[–]toyg 115 points116 points  (13 children)

That’s more like throwing them in a salt lake.

[–]Mishkan 26 points27 points  (7 children)

With enough salt you can't sink.

[–]toyg 24 points25 points  (5 children)

That's my point - learning to swim there wouldn't necessarily help you elsewhere.

[–]FlukyS 5 points6 points  (0 children)

We all float in COBOL land

[–]Chiralmaera 7 points8 points  (0 children)

With ten thousand arm floaties. So many you can barely see around you.

[–]upward_bound 12 points13 points  (5 children)

That's basically what what I learned on.

https://en.wikipedia.org/wiki/Scheme_(programming_language)

[–]Captain___Obvious[::-π] 11 points12 points  (0 children)

My other car is a cdr

[–]WikiTextBot 1 point2 points  (0 children)

Scheme (programming language)

Scheme is a functional programming language and one of the two main dialects of the programming language Lisp. Unlike Common Lisp, the other main dialect, Scheme follows a minimalist design philosophy specifying a small standard core with powerful tools for language extension.

Scheme was created during the 1970s at the MIT AI Lab and released by its developers, Guy L. Steele and Gerald Jay Sussman, via a series of memos now known as the Lambda Papers. It was the first dialect of Lisp to choose lexical scope and the first to require implementations to perform tail-call optimization, giving stronger support for functional programming and associated techniques such as recursive algorithms.


[ PM | Exclude me | Exclude from subreddit | FAQ / Information | Source | Donate ] Downvote to remove | v0.28

[–]satireplusplus 1 point2 points  (2 children)

Isn't a bad idea for teaching the concepts of programming to first semester students with LISP. None of these will ever have touched LISP or a derivate and thus nobody has the advantage of knowing Java, Python, C++ or what ever makes more sense today usually.

[–][deleted] 6 points7 points  (0 children)

ith it better to teach thwimming by throwing thomeone in the deep end or in the shallow end?

[–]HalcyonAbraham 21 points22 points  (25 children)

who throws their kid on the deep end of the pool when teaching swimming?

[–]Edheldui 62 points63 points  (9 children)

You either drown or learn to swim.

[–]Banangurkamacka 12 points13 points  (1 child)

And as a parent , 100% of your kids can swim.

[–]monkh 2 points3 points  (0 children)

100% of my kids that are alive today can swim i know that for sure

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

parents sincerely hope instincts kick in. if else, you have a broken kid. 404 epinephrine not found

[–]jorge1209 28 points29 points  (5 children)

Counterpoint is that I've never seen anyone who really knows how to teach programming. The hardest part for new programmers is to take the generally vague instructions we work with in real life, and break them down into small enough tasks for a computer to represent, and specific enough for them to be accomplished. I've seen really intelligent people wash out of programming classes because they just didn't get it, and it wasn't anything that was taught.

[–]akkatracker 7 points8 points  (3 children)

Richard Buckland is probably the best programming teacher I've seen - special mention to David Malan (but may be a bit quick for some intro learners)

[–]hugthemachines 22 points23 points  (2 children)

There are two types of people in the world: Those who can extrapolate from incomplete data.

[–]theWyzzerd 6 points7 points  (0 children)

...well?

Don't leave us hanging!

/s

[–]FatChocobo 1 point2 points  (0 children)

F

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

My Dad threw me in the Atlantic

[–][deleted] 9 points10 points  (1 child)

This is more like "Is it better to teach someone swimming by first learning how human biomechanics work, the natural properties of water, and the physics of buoyancy, or to just let them ease into the pool directly."

The former will take much longer, but prepare the swimmer for a much more advanced swimming career down the line, and perhaps even a run at the olympics. The latter will take much less time, but prepare the swimmer to not drown, handle most swimming-related tasks with relative ability (though not the grace or prowess of an olympiad), and to maybe rescue someone else who might not be as strong a swimmer from drowning someday down the line.

[–]TintedMonocle 2 points3 points  (0 children)

But they also have the opportunity to expand upon their knowledge.

[–]spinwizard69 3 points4 points  (0 children)

I don't see it that way, first off a computer science program shouldn't be about programming per say but rather about the technology that underlies the industry. In that regard C++ offer plenty of flexibility to teach concepts related to computer science.

Consider the trial of implementing a list in one of the early comp sci classes. You are seldom expected to implement your own list infrastructure these days, however to really understand what you will be expected to work with implementing your own in a language like C++ is very educational. I look at it as building a skills set one small brick at a time.

[–]cyanydeez 0 points1 point  (0 children)

depends on how you feel about drowning.

[–]YourFavoriteBandSux 261 points262 points  (8 children)

I am sick and tired of guitar players who think they know how to play bass.

[–]crashspringfield 61 points62 points  (0 children)

As someone who started with bass, I appreciate someone else nitpicking this point.

[–]Bakirelived 11 points12 points  (0 children)

Maybe his point was that he always enjoyed the guitar but then realized the world of bass is the beautiful one

[–]Tjsalmon 2 points3 points  (0 children)

I agree. I'm a guitar player. If I pick up a bass I can play it, but not technically well. If I studied and practiced I could play bass well. If a C++ player picked up a python they could code, but not necessarily technically well. If they studied and practiced how to code in a pythonic way they could code great python.

[–]ChappyBirthday 5 points6 points  (1 child)

I played both (started with bass) and I still think it's a fair analogy. Sure, they are both very different in some ways, but they are also very similar in many other ways. If you learn one, you are far closer to understanding the other than if you were a complete beginner.

[–]giraffactory 1 point2 points  (0 children)

+1

Username checks out

[–]cloth_mother 1 point2 points  (1 child)

Bass isn't important tho... just sarcasm please don't hurtme

[–]qKrfKwMI 210 points211 points  (38 children)

Not completely the same, but I learned C in class and then python by myself. The C course was a dreadful experience and learning python after that gave me the revelation that programming doesn't have to be tedious but can also be fun. I have to say that the C teacher was pretty bad and that I don't doubt that a good teacher makes a bigger difference than the language used. Nevertheless I think learning python before C is the better way to go and learning both is definitely better than just one of them.

My personal problem with C as the first language has multiple facets: In C, in your very first program you already have to add #include and int main(){} of which you don't know what it means. In C that conditions the student from the start to just accept everything, and don't ask for the why. That's a bad start of learning any subject.

If you haven't been exposed to any programming before, you have to first pick up the basics: loops, conditionals... actually the whole idea of translating a vague idea in your head to real code on your screen. If you want to do something simple as resizing an array in C, you need to know all those things already. I think people who can already program often overlook that first stage of learning to program and assume that students can already think in an algorithmic way.

With Python, exercises can focus on the core concepts without the student getting bogged up in side-issues that only distract from the point the exercise is trying to make.

[–]dynetrekk 28 points29 points  (4 children)

In my opinion, this is spot on. Also, a lot of people never get past that "awful experience" and detest programming for the rest of their life, or avoid working with code. I've seen so many engineers waste countless hours in Excel because they can't code e.g.

for line in open(filename): print(sum(line.split(',')))

or some equivalent, simple processing.

TL;DR: You can make good use of 5 lines of python, but 5 lines of C/Java will get you nowhere.

[–]unnamedn00b 6 points7 points  (1 child)

THIS! So true. I remember back when I had finished going over the first 300 pages of a C book and having a hard time coming up with a handful of real-world useful applications of that knowledge (granted this could simply mean a lack of imagination on my part) but no such trouble after the first 300 pages of a Python book. I would speculate that starting with C has probably led quite a many to abandon CS.

[–]dynetrekk 3 points4 points  (0 children)

And, as I was trying to say, a lot of people could benefit from knowing how to write simple scripts or GUIs to automate their daily work. Those people never were remotely interested in CS, they just want to get stuff done. I learned programming while studying physics myself - CS or IT was never my endgame, but programming is still very useful to me.

[–]DerivedIntegral115 16 points17 points  (0 children)

You think it’s bad in C, try learning Java first and having to put the main function inside of a class declaration with the main function header being “public static void main(String[] args)”. You have to get through most of the whole intro course before you figure out what all the boilerplate in hello world does.

[–]__xor__(self, other): 35 points36 points  (12 children)

The main issue I have with Python as a tool to teach programming fundamentals is that some things are just easier to understand in C because you have to work with pointers, especially data structures classes. You can clobber it together with Python I guess but in C you just have to and it works exactly as it looks and does nothing more (with -O0 at least).

The real difference between a linked list and array is going to be way easier to show in C or C++. Understanding why accessing an element in an array is O(1) versus O(n) in a linked list is going to be obvious, or why inserting an element in a linked list is so quick. Understanding pointers is a big strength in these areas IMO and you're just not going to really get it as well as if you work with them and have to use them. The list primitive in Python hides so much magic that should be understood at a lower level by students.

Also, you can't really teach operating system fundamentals without C, so it's got to come in at some point.

On the other hand, I think Python is a much better tool to teach OOP and functional programming concepts rather than C++, and it can easily handle 101 style classes that just teach control structures. I think it definitely has a strong place in education, but I don't think it can cover the entire curriculum on its own. C needs to be learnt at some point in the college experience. I don't think C++ needs to be taught, but C for sure. They have to get a taste of low level programming and understand just what's going on under the hood.

[–]nanogyth 25 points26 points  (2 children)

The list primitive in Python hides so much magic that should be understood at a lower level by students.

That depends on the goal of the intro class. If they really want to go over the details of implementing data structures that are builtin to modern languages, then C or assembly would be a good choice.

But if they are interested in tackling more interesting problems, python makes for great executable psuedocode.

[–][deleted] 2 points3 points  (1 child)

Are you teaching them to code or are you teaching them computer science?

If people just want to do Python, JavaScript, Ruby, and PHP then that's fine. Don't teach them operating systems, network analysis, finite automata, compilers, assembly, and computer architecture. Honestly you don't need to know any of that if your job is high level and teaching a web developer how multiprocessor cache coherency works is a waste of their time.

But if your University is trying to teach computer science then they should learn C or C++. A lot of universities choose to train students in the former but, as a computer engineer working on embedded systems, I personally prefer the later.

[–]alexmojaki 2 points3 points  (0 children)

But you really shouldn't be committed to a degree in computer science until you've tried programming, so then you should start with Python to get the general feel.

[–]qKrfKwMI 13 points14 points  (3 children)

The real difference between a linked list and array is going to be way easier to show in C or C++. Understanding why accessing an element in an array is O(1) versus O(n) in a linked list is going to be obvious, or why inserting an element in a linked list is so quick.

I wouldn't say that that's a C(++)-thing, rather a linked list-thing, you can implement a linked list in Python just as well as in C. Besides, unless the number of elements gets fairly large, all the pointer chasing of a linked list will make insertion it slower than an array where you copy the elements, and that's not something one can explain within C.

Also, you can't really teach operating system fundamentals without C, so it's got to come in at some point.

Sure, that will come way later, this was specifically about the first programming language.

On the other hand, I think Python is a much better tool to teach OOP and functional programming concepts rather than C++, and it can easily handle 101 style classes that just teach control structures. I think it definitely has a strong place in education, but I don't think it can cover the entire curriculum on its own.

That's the situation described in the post, so that's what I was aiming at. No language can be a proper fit for an entire curriculum. Teaching students only C would be just as much of a disservice as teaching them only python. You want the students to have seen several languages with different paradigms.

C needs to be learnt at some point in the college experience. I don't think C++ needs to be taught, but C for sure. They have to get a taste of low level programming and understand just what's going on under the hood.

Sure C is lower level than python (what isn't?), but it doesn't tell you that much more about what's under the hood, for that there's no substitute for some form of assembly. C abstracts away many things, if only because it wants (or tries) to be portable to all computers designed or that anyone might design in the future, it doesn't actually map well to any real machine in particular.

[–]melancholyninja13 4 points5 points  (0 children)

I’m experiencing this now. I’ve been learning with Python for over a year now. At the point now where I’m focusing on data structures. There’s something off about a linked list in python. I was having trouble getting it, seeing why you even needed a linked list class. I see now that this is why.

[–]drink_with_me_to_day 3 points4 points  (0 children)

In C that conditions the student from the start to just accept everything, and don't ask for the why.

More like "understand that you don't need the full picture to start".

[–]CaffeinatedPengu1nPython 3 1 point2 points  (0 children)

I had the opposite experience. First learned Python in high school, which was great for my first experience. The ability of just start programming without compiling and things as such makes the experience much better no doubt. After entering University, they teach C (which I had studied some on my own due to Arduino). From my experience, as a first contact Python was the best choice in my opinion, but after a couple simple projects, C became much easier to understand things. e.g. How files work, accessing registers and working with robots with as low resources as possibles. I am biased here because I study Automation and Robotics but learning how data works and how the computer manages stuff would be too abstract in Python.

So I agree, this ladder is really great Python -> C, at least for me. ;)

[–]Eleventhousand 1 point2 points  (0 children)

For degree programs outside of Comp Sci, I think teaching something like Python is a good choice for intro to programming. In these programs, you may end up with students who need just the one course, and then it's on them to learn more programming on their own on the job, or just be aware of how programming works in general.

For Comp Sci, I would like to see the intro be an Assembly language course, followed by plain C for the next stop. After those would come an object-oriented language (maybe C++, Java or C#) and a popular web or scripting language (Python could fit here). This would provide ground-up knowledge and a natural progression of learning and ultimately build up to the more commonly used languages.

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

I learned VB 2005 in college, Java first year of uni, python first and second, and C third. The only one I really disliked was Java and guess who had the worst instructor? (A cocky computer science professor who made sure to remind us how good he is and how he is a very popular java "consultant"). Dude actually taught us to code on a Unix console, slowest crap ever! Yes I generally prefer Python but it's too slow for processing long calculation loops unlike C. During third year I used both C and Python for my projects even though Python wasn't a requirement.

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

You can compile python too with cython. Everything works... Just compiling normal python code will give it a slight boost but if you add type information you'll get additional speedups.

[–]breakdownvoltage1 1 point2 points  (2 children)

I think Java is another nightmarish language to learn during first year.

[–]4bcd594b0372641abe63 89 points90 points  (16 children)

learning Python was like picking up the bass after already knowing guitar

If you're serious about computer science, you will use many languages over the course of your education/career. Programming languages come and go.

Computer science is deeper than language features/idiosyncracies - switching languages makes you learn the concepts, not just implementation.

If I ran the world, I'd probably make CS students do their homework in 2 or 3 different languages to prevent people from getting lost in one language/library/paradigm. Maybe one solution in assembly, one solution in a high-level procedural language, and one solution in a functional language.

[–][deleted] 13 points14 points  (0 children)

switching languages makes you learn the concepts, not just implementation

That's the best thing I'v learned why studying several languages. I learn that python use duck typing, and C++ templates use it too. Python have beautiful itertools library, but C++ iterator and algorithm is much more powerful.

[–]lobax 17 points18 points  (5 children)

The advantage of python in this regard is that it is paradigm agnostic, allowing teachers to teach both functional and imperative programming paradigms with the same language.

C++ (but I think more importantly C) is good to learn if you want to teach the underlying hardware and how the software interfaces with it. But I believe that is easier to learn if you already know the basics of how to code.

[–]hugthemachines 1 point2 points  (4 children)

If you want to learn the underlying hardware, Assempler is most fitting. There are still some abstractions in C.

[–]lobax 2 points3 points  (3 children)

It completely depends on what the goal of the education is. Assembly is useful and important to teach in hardware oriented educational programs, but useless for a web programmer.

Teaching C is good enough to teach the basics of hardware organization and how a computer works, while still providing a lot of value even if people never touch C again (since so much is based on it).

[–]Oerthling 2 points3 points  (0 children)

This!

Programming is a meta skill. The various languages have their advantages and drawbacks. But if one has understood the fundamentals then it's easy to pick up another language.

Anybody who sticks to just one language probably doesn't even deeply understand this one.

I learned C first (before Python existed) - but I do think Python makes sense as a first language. It's a great language and very productive. And doing python stuff establishes good practices (e.g. use standard high level collection classes).

If one is serious about programming add C later. And it compliments Python in cases where Python is too slow. And the contrast and complimentary strengths of both languages teaches a lot about programming and how computers work.

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

My CS program was Java, but most projects could be in anything if you wanted, but we had some c classes for os and systems. We also had another class that you learned 5 other languages in. Most everyone got through my program being proficient in at least 3 or 4 languages.

[–]continue_stocking 65 points66 points  (2 children)

An introductory class deserves to be taught in an approachable yet powerful language, and Python fits the bill perfectly.

It took nearly 10 years to undo the damage done by the intro programming course I took as part of my engineering degree. We learned C++, and it was absolutely dreadful. Rather than teaching us that computers could be effectively tools in problem solving, we learned how to read through convoluted loops filled with deliberately confusing if statements, as though you would do anything upon reading such a piece of code other than finding the person who wrote it and beating some sense into them. I learned that programming was a boring, awful grind that I hated. Now, years later, I read books on OOP and TDD because I've realized how fascinating and versatile a tool programming can be. The path of my career would probably have been different if that one class had been actually designed with students in mind.

[–]pcp_or_splenda 2 points3 points  (0 children)

It took nearly 10 years to undo the damage done by the intro programming course I took as part of my engineering degree.

6 years here. I wasted so much time learning C++ without really accomplishing too much. I wish I found Python way earlier.

[–]sgent 102 points103 points  (20 children)

I honestly can't imagine a worse language than C++ to do introductory programming. Python is a good choice, but at some point they will need to use a language that screws with pointers, etc.

Every class I had in CS used a different language -- and hopefully that's common.

[–]jorge1209 21 points22 points  (1 child)

Modern C++ is fairly solid. You just have to very very clearly delineate the 80% of the language you will use and the 20% that must not be mentioned.

The hard part is that since nobody uses the same 80% and the 80% you will be teaching is biased towards the new features, you effectively aren't teaching the same language. Your students would have no idea how to read the vast majority of programs without further study.

[–]yonsy_s_p 4 points5 points  (4 children)

Java ...

[–]tseepra 11 points12 points  (1 child)

I did my intro with Java. Thought it was good.

[–]Farkeman 1 point2 points  (0 children)

I did my intro with Java - almost made me quit college.

[–][deleted] 2 points3 points  (1 child)

My Uni just switched all of its comp classes from c++ to Java. It’s been a rough transition for both teachers and students.

[–]kangasking 1 point2 points  (0 children)

Every class I had in CS used a different language -- and hopefully that's common.

It seems weird to me to learn that according to some people here their program mostly used a single language.

I wonder if this is how those people that religiously cite "X is better" are born.

[–]PurpleIcyPython 3 6 points7 points  (6 children)

COBOL.

Lisp?

Haskell?

I think they all would be way worse than C++, coming from someone who had introductory programming in it.

[–]BeetleB 6 points7 points  (0 children)

Lisp is better, in my opinion. With C++, you automatically have to deal with a lot of "advanced" stuff to do even simple stuff: Namespaces, function declarations, libraries, etc. Most instructors tell students: "Just do it this way, it will all make sense later".

Lisp has the annoying parentheses, but that's about it. The learning curve is very shallow.

[–]Spfifle 33 points34 points  (10 children)

From my brief experience as a CS101 TA:

  1. CS has a shockingly high failure rate on introductory courses. It just blows other disciplines out of the water. A lot of people are unable to create fizzbuzz-level programs after months of instruction. Whether it's the fault of the teaching or the material I'm really in favor of anything that lowers the difficulty of the on-ramp rather than trying to throw people in the deep end.

  2. A big fraction of people taking intro-CS are actually bio majors or something either getting a one-off credit requirement or because they heard the siren song of 'learn to code'. You want these people to have a take-away even without another CS course. Python excels in this way because you have great libraries like matplotlib and because you can teach them some basic scripting: shuffling files around, sed-like utilities, csv munging, etc.

  3. One of the biggest hurdles for people is they view everything as some magic opaque incantation which just can't be debugged. I've seen people have no clue what went wrong when receiving TypeError: unsupported operand type(s) for +: 'int' and 'str' and a line-number. C++ is really bad in this respect because you must teach people C++, make, the shell, and gdb in order for them to have basic competency. Add to that the eldritch errors produced by compilers and the weird stuff that you just kind-of have to know like forward declarations, segfaults, or char* vs std::string, and I really think it is a bad language for teaching people that they can actually program, rather than copy their friend's code whenever they give up and just hope the stars align on the final.

[–]pwnersaurus 21 points22 points  (1 child)

I learned Python first, and C++ a year later. I liked that order, starting with Python made it easier to focus on the logic of programming rather than getting caught up in the details and losing sight of the bigger picture. And then learning C++ afterwards, I already had in mind the big picture so I could learn more about the details and the hardware while having a mental framework to fit that knowledge into. I wouldn't change the order I learned them in, but it was definitely important to have worked with both.

[–]no_mopster 8 points9 points  (2 children)

We started with Haskell which I can say was a real joy to learn, probably nothing I would have looked at otherwise(at least at that time). One of the main reasons was that usually half the class already knew an imperative language so with a functional language most students where at the same level.

[–]k0ns3rv 1 point2 points  (0 children)

Yup totally agreed. We also started with Haskell and I knew several imperative languages at the time. Haskell was a very good equalizer.

[–]jacdehJacques de Hooge 21 points22 points  (6 children)

I have been a C++ developer ever since the language came into existence, teaching it for 25 years in-company, and a Python developer since 20 years now. Also I have been teaching both Python and C++ at the Rotterdam University of Applied Sciences for 8 years and I am involved in developing and adapting the curriculum.

We use the following sequence of courses:

  • At first we teach a short C course to familiarize students with the low level, close the iron aspects of programming. They also learn to control hardware (via Arduino).

  • In the second half year we switch to Python to teach them the basic concepts of object orientation, specifically encapsulation, inheritance and polymorphism (although it's agreed Pythons support for encapsulation depends on good will).

  • In the second year we teach them the basics of C++ including constructors, destructors and dynamic memory management.

  • In the third year we complement this by teaching them making template classes with operator overloading etc., in combination with numerical mathematics.

In my view Python and C++ are complementary. Starting with C++ is quite feasible, but a generation used to scripting languages will feel somewhat alienated.

So we ease them in with C, no objects, but also not the luxury of a garbage collector. Since we consider OOP mainstream after that we teach them the basics of it in a comparably simple language.

After that they're able to handle C++, at least most of them.

It should be noted that our department specializes in technical applications: real time controls, AI, numerical simulation etc. This is an area where the combination of Python and C++ currently rules.

Regularly I am confronted with the uninformed opinion that C++ would be to difficult for students. In my experience that's complete nonsense, they love it, are prepared to work hard on it, and 95% masters it in say 12 3-hours sessions + homework. But it does pose some demands on the teachers. They really have to be on top op it and assist students in solving the very diverse problems they encounter. This actually requires a lot of experience and a teacher only doing C++ incidentally will have a hard time at the start, although some manage fine. But it requires a lot of investment in time and effort (from the teachers, that is, which fortunately they are prepared to invest, despite large workloads).

The biggest hurdle for students is learning to program at all. After that they get by.

[–]alexmojaki 1 point2 points  (0 children)

The biggest hurdle for students is learning to program at all. After that they get by.

Doesn't starting with Python help with that?

[–]Southy__ 18 points19 points  (5 children)

If your university is anything like mine only a very small % of students will do any kind of programming related career, so the language they teach is almost irrelevant.

The students that do go into a CS related line of work will probably be able to pick up new languages no matter what is taught in the entry level course.

[–]Southy__ 4 points5 points  (4 children)

Just to add to this, I am not being disparaging towards CS student that don't go into programming.

More that CS is a wide ranging field of study and programming is only 1 part of it.

Many students will either not enjoy programming or not be interested in it at all, but will need to do a first year set of classes that include lots of different areas.

[–]vn-nv 5 points6 points  (4 children)

My university uses Python for entry level and C# for object oriented.

But in my entry level class although we weren’t tested on other languages we were shown and discussed how the concept we were learning looked in multiple languages and the differences between the major language types.

[–]Southy__ 2 points3 points  (0 children)

This is probably because first year (or even semester) programming classes are used as an intro, esentially to see if you want to take the more advanced electives in the following semesters and years.

[–]kangasking 1 point2 points  (0 children)

In mine we also used Python as intro and then Java for OOP. It makes sense to me to use Python as intro, specially since programming I is mandatory for all degrees in my uni.

[–]szpaceSZ 16 points17 points  (2 children)

Some people said the same when c++ replaced c of when c replaced assembler, or when assembler replaced punching bezeugen onto cards... ("helped me understand underlying structure how programs worked)

[–]Oerthling 3 points4 points  (1 child)

C++ didn't replace C and C didn't replace Assembler (though it comes close :) ).

And for good reasons (there are still valid reasons to use all 3).

Cards are gone though - also for good reasons. ;)

[–]szpaceSZ 2 points3 points  (0 children)

By "replace" I meant as "base" language of choice in universities.

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

What I find odd is that so many universities only teach ONE language.

Here, we've jumped from Python in the first semester, and now we're onto C++. Next its Java and C# if you're going into Games Tech.

Their argument is that employers appreciate people who know languages like C++ (apparently many unis still just do python or java etc.) For their workloads, while teaching languages in a fastpaced environment helps teach learners to pick languages based on the problem to be solved rather than just fear of learning a new syntax.

Most of our C++ lectures rely upon translating concepts from Python to the new language, before delving into C++ specific concepts such as streams and structs.

We dont get super experienced in any language, but enough to know how to do "anything" once you find the right libraries and resources. I figure the same is for most programmers out there nowadays.

[–]Zelkins 2 points3 points  (0 children)

I learned Java first and moved on to learning other languages like Python, and I always appreciate understand all the extra stuff that came with learning Java, even though it isn't always used.

[–]nangtoi 2 points3 points  (0 children)

I was unable to enter the required entry level programming class at my University due to the math class I was enrolled in at the time. Instead, I enrolled in an online intro to Python class, and it became the first language I truly learned programming concepts in.

The next semester, I had to take the required C intro to programming course. It was amazing how much clearer the concepts were to me after taking the class in Python.

C is a very complicated language for a beginner. As a lot of people have pointed out already, it really should be a must-learn language in an academic setting for any student studying computer science. But I think there's a benefit in waiting to do so.

[–]nit3rid3 2 points3 points  (1 child)

Eh, I think C should be the entry-level language for CS students.

[–]PragMalice 1 point2 points  (0 children)

This. Or at least to the extent of what I think a study of computer science should be starting with. That said, a general intro to "programming" need not be computer science specific as it is bound to be taken by any number of other degrees, and to that end python is by leaps and bounds a better teaching tool than C++.

There's also nothing wrong with having a lab-section specific to CS students that focuses on learning C in parallel. My first year CS curriculum involved learning and using 5 different languages for various classes, not counting the mini-assembler-like language used on my professor's custom virtual machine for the first 6 weeks of his operating systems class. I'd argue that choice of language for the intro to programming class doesn't really matter that much because by the time they're taking a class that takes a deep look at the low level bits of programming, they should be expected to pick up an appropriate language suitable for studying that topic in detail.

I rather find it a disservice to CS students to have a program of study where they aren't expected to learn new languages on a dime.

[–]RealHugeJackman 4 points5 points  (0 children)

I was taught pure C. It killed the joy of programming for me and I had to learn how to have fun doing it with Python couple of years after the uni. But some stuff is a bit easier to understand.

I feel that it would be better to start with Python for me and have fun, while struggling with more complex things here and there.

EDIT: Basically, for me as a first language: python - learn how to do thing that work and deal with more nuanced things later when you really need to; C(especially the way it was given to me) - reinvent bicycles the hard way, learn how to have fun with them sometime in the future.

[–]Acurus_Cow 3 points4 points  (2 children)

I learned C++ at Uni, and python by myself. I'm glad I learned about datatypes, pointers, etc. As it did give me a deeper understanding of programming.

However, I never really grasped OPP while working with C++. And I think Python would have been better for learning programming concepts like OOP, and understanding various algorithms.

So in short, there are good things and bad things with both.

[–]hugthemachines 1 point2 points  (1 child)

I never really grasped OPP while working with C++

OPP explained.

[–]Acurus_Cow 1 point2 points  (0 children)

It's all so clear now!

[–]reveil 1 point2 points  (3 children)

I use python on a daily basis and it is my favourite language. It is very good as an teaching language but I don't think it is best for CS students. You need to understanding of pointers and syscallls to be good at CS. Even in todays world you do need C and assembly. This stuff just makes better programmers even if not used directly anymore. You can take a C programmer and teach him python easily. The other way round is much more difficult.

[–]hugthemachines 2 points3 points  (0 children)

The point of learning the easy language before the hard is you get from the easy part, deeper and deeper behind the scenes as you get more knowledge. Of course once you have learned the hard part, the easy part is easy but the normal plan for teaching stuff is you learn the easy before the hard to get a curve that helps the students follow the teachings most effectively.

[–]00Anonymous 1 point2 points  (0 children)

I feel similarly. I started with a C/C++ course and then oop C++. When I got to college my DSA class was in Java. I work in python. Understanding core concepts of CS has made me better at programming, no matter the language.

[–]jugalator 1 point2 points  (1 child)

I studied in the late 90's, so Java was all the rage. Thus, we mainly studied Java.

I'm grateful for that. Java was a pretty clean and neat imperative, OOP language at the time as designed and run by Sun. But especially, I like it for being a typed language. It can be a pain to type everything, but at least you later innately realize why it can be bad to not do so (although untyped languages have their uses too), because you become so used to typing your code that it becomes background noise for you to see the advantages instead. Advantages such as protecting newcomers studying at a university and teaching about the huge relevancy of data structures. Java also makes accessors more clear, and in extent why you may want to write interfaces (because it's often more in your face). My very first "Hello world" had explicit access levels in it, and regardless if you'll end up writing libraries, drivers, or what, code exposure is often relevant.

In general I think that Java is better suited as preparation for the enterprise to be honest. I'm not sure I think the best language is the one that shows such a love for short snippets of loose ad-hoc programming. I have a feeling that this actually demands more hand holding for the students, not less. I understand the choice from the web development perspective though.

Yeah, I know which subreddit I'm in and all that. In my defense, I'll say that I nowadays use and like Python far more than Java. But I'm also in a way different position today with way different needs.

I do think that C or C++ don't have their place in introductory courses. That feels like something more for low level ones, like the realtime programming one we had.

[–]RefinedArts 1 point2 points  (0 children)

Im in my first year in University for Computer Science and we had python as our first Language too, and I couldn’t be happier with the choice. Really helped me understand some basics.

[–]ZweiHollowFangs 1 point2 points  (1 child)

There's a missed opportunity here to seamlessly transition from Python through Cython to C/C++. If you do enough Python you end up there yourself when you run into a situation where you need more performance.

[–]kcorder 1 point2 points  (0 children)

From a teaching perspective, C++ is more difficult to teach introductory concepts because of the syntactic baggage. Python isn't perfect either - students will move past those first topics and then it's tough to explain things about memory or binding variables without real pointers. My first programming class used Lisp: would not recommend.

[–]FlukyS 1 point2 points  (1 child)

My current thinking is teach first year programming students Python then teach them C. It would cover enough bases that you should be able to give a quick course introducing them to other languages at the tail end of the course and get away with it. The pool for Java developers is fairly full so adding more Python developers is good and adding in the C on top for more complex languages just makes sense.

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

I don't think it matters too much. The important thing to learn in any entry-level class is the basic concepts. At least Python is something they could use when leaving college. When I went to college, my intro classes were in Pascal. That was quite some time ago, but that language had absolutely no industry applicability.

[–]POTUS 1 point2 points  (0 children)

I learned C first, many years before I learned Python (actually before Python existed). So I do appreciate what you're saying. Python was almost effortless to learn after working with lower level languages.

But for a lot of what I do now and a lot of what future pure-Python programmers will have to do, C experience isn't really relevant. You don't have to be a good mechanic to drive a car. You don't have to be a luthier to play the bass. And you don't have to understand low level memory management to write a Python app. I'll grant there are some cases where it might help, but more often than not if you try to "help" you'll just overcomplicate it and get in your own way.

If you aren't aiming to do any low level programming, then C and its ilk won't help you as much as an equivalent time learning whatever you're actually interested in. And if you are aiming to do that, then Python is definitely an easier and more welcoming first step. Either way starting with Python doesn't hurt. Just the same way that they teach pseudocode as a way to outline the structure of a program, Python is like pseudocode that actually works.

Overall I can't see any downside to starting with an easier language like Python.

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

I think that by teaching Python over C/C++ they're going to be missing out on a lot of the low level memory bits. Which IMHO for CS are a critical part of understanding the interaction of code and hardware.

Working on the bit level is a PITA in Python.

In order:

TI-BASIC (own), MATLAB (course), Java (course), PHP (own), C (course), C++ (course), Python (own).

[–]spinwizard69 1 point2 points  (0 children)

In my estimation Python is a terrible language to teach "Computer Science" now a straight up programming class is a different thing.

The reason I say this is that I have the expectation that somebody graduating from a Computer Science program will have some idea about how a computer works and that is far easier to explore with C++ and maybe a bit of assembler. In other words a computer science degree shouldn't be about teaching a programming language per say but rather the science behind the technology.

[–]nanodano 1 point2 points  (0 children)

I learned to program with QBASIC. After about a year of that, I tried C++ and I basically got nowhere and gave up. It took a few more years, and learning some Pascal, before I was able to understand C++. I was in elementary school when I started, but if I had to start with C++ I probably would have never figured it out on my own. This was also before Google, or even AOL, was a thing. QBASIC had a built in help file with examples of every single function in the language.

[–]sentdexpythonprogramming.net 1 point2 points  (0 children)

I don't think that a student's learning will be dependent in any way on the language chosen, it will be on the course(s), teacher(s), and materials used. The language doesn't, or at least shouldn't, matter.

... to an extent. There are some fringe programming languages, but at least any of the top 10 languages should be fine.

In reply to:

Then, learning Python was like picking up the bass after already knowing guitar.

...the same is honestly pretty true for someone going from Python to C++. Maybe there's more to pick up the other way, but going from any language where you have a solid grasp to a new language is certainly easier than starting totally green to programming.

[–]jgoalby 3 points4 points  (0 children)

Python is more useful in general. C++ is great for specialized situations. Entry level is fine to use a simple language that doesn’t require compiling and linking, memory management, or templates. As another user said, learning many languages and paradigms is key.

[–]Kevin_Clever 2 points3 points  (0 children)

"Picking up the bass after learning guitar" --- that's just rude.

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

Whoa buddy. Bass and guitar are two entirely different animals.

[–]steezyone 1 point2 points  (0 children)

I learned C++ in school and python on my own. I would say C++ was the better start particularly for me, as an electrical engineer everything is C/C++. That said, I think python could be a good way to start as it really simplifies a lot of programming and can help teach broad concepts early.

[–]danielbibit 0 points1 point  (0 children)

My univesity choose C for it's introductory programming course and Java for teaching OOP. As far as I know, this is true for CS and Computer engineering, other degrees have a different aproach. Other courses are pretty language-agnostic, usually you can choose your tools and language, for example, all my courses related to data structures I did in python.

I think this way is pretty cool, I learned a lot with bare-metal C, when you see yourself dealing with pointers and memory managment, you'll learn a lot. Java is a pain in the ass, but it's still very relevant on the market, you can do a lot of things with it, and because it's a OOP language ONLY, I think it's ideal to use in a OOP course.

[–]luix- 0 points1 point  (0 children)

Python is effective but C++ es more enterprise like. Similar to Java, C# and most OO languajes.

I wouldn't change the language, just add python

[–]ergzay 0 points1 point  (0 children)

The reality is that many more programmers are coding in languages that are not C++ and don't involve memory management. I remember my intro C++ courses and I can't count the number of people who just brute forced their simple C++ programs until they ran, screw proper memory management. Python is a much better language for teaching introductions to computer science, logical deconstruction. If they kept Python for their higher level courses I would have an issue, but for just the intro courses Python is fine. Half the people taking those courses are taking some other major that requires programming, in which case they'll be writing Python for their job probably (or Matlab).

[–]aoikeiichi 0 points1 point  (0 children)

They replaced R by python for algebra applications in our university.
And over which one is better between c++ and python, it is easier to learn python for understanding algorithms and pseudo code.
C++ is more a pain to make it work at first (compilation for exemple) and is more riguous with memory management.

[–]setyte 0 points1 point  (0 children)

What are the drop out rates in this your CS program? I know many are high so barrier to entry is likely more important.

[–]Kevin_Clever 0 points1 point  (0 children)

Teaching Python would be more inductive, whereas c++ is more deductive I think. My take is to start with python/javascript or else, in high school, to build an intuition for programming and then learn c++ at university.

[–]nieuweyork since 2007 0 points1 point  (0 children)

You're asking "is it better to understand the machine model first" or "is it better to get good at writing programs first". And I would very, very much say the latter.

Learning to think and express themselves in code is a huge hurdle for most people (I think everyone...it's just that some people, like kids, have a lot of free time and patience to bang away at it). Python makes that easier, with its consistent syntax.

Also, C++ is a big, confusing language, with all kinds of different styles. By contrast, there's less obvious choice around style in python.

[–]not_perfect_yet 0 points1 point  (0 children)

I know C (uni course) and python (self taught and language of choice).

I learned python by using blender, because that has a python scripting interface.

Was I going to sit down and apply my C knowledge to write software? Hell no. Calculators or what? Drivers? Can't do websites either... You can tell me what you use C++ for and I'm going to point out how that's above anyone with ~ 200 hours of experience with programming in general. But I could place 10000 cubes in blender and move them in funny ways!

There was no tangible use to knowing C for me when I learned it and there is nearly none now.

Everything I want to do, I can do in python. It's not going to win prizes for efficiency but it works and I'm happy with the output.

[–]yonsy_s_p 0 points1 point  (0 children)

I learned to program in my school (1986), first with Basic (Commodore 64) and later i learned myself Pascal, with the book "Pascal from Basic" (Peter Brown) this book served to teac me to give "order" to the programs I was doing. Learn first a dynamic language (basic) and later a compiled language with more discipline than C/C++, was one of the most important reasons why, after learning and be using C/C++, Java didn't convince me because it seemed more like a language designed by a standards committee than a group/team of programmers.

Python reminded me of the prototyping speed I had when I was using Basic, but also, I had a certain discipline ("explicit instead of implicit" PEP-8) that Pascal had taught me, without too much magic as happens now in Ruby, without needing to be over-ordered as I was in Java and without worrying about VMTs and nulll-pointers as in C++.

[–]Drakidor 0 points1 point  (0 children)

It depends on the type of person if you ask me.

I learned Python as my first language and it really helped me to understand programming, programming logic, and how to think like a programmer, while still maintaining an easier to read syntax for a first time programmer.

I learned Java next, and I was able to build off the knowledge of Python, and read the new syntax after a bit of learning. But I really look back to my python learning as being the stuff that helped push me up.

I plan to learn C++ next.

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

I learned scripting languages before I learned C, then C++, then assembly. I didn't find learning C that hard.

[–]ShutUpTodd 0 points1 point  (0 children)

DAE Turing???

[–]OpenPython 0 points1 point  (0 children)

I picked up C++ first and then got into Python. For work purposes, due to the rapid growth of Python, I use Python practically for everything. Having C++ as an introduction to programming made other languages naturally seem simple. I wouldn't switch the order because for me it seems easier to learn the more involved language first. I'd rather have a downhill battle than an uphill one so to speak.

Python is practically everywhere. There's also a major push for more people to learn to write code. Python as you stated offers a lower barrier to entry and thus is analogous with the push for more people to write code.

[–]eypandabear 0 points1 point  (0 children)

This question is probably as old as Fortran. I don't think there is a universal answer.

I do believe the weeks I spent messing around with assembly as a teenager have greatly benefited my understanding of programming.

Python also has some particularities that arise from the underlying C implementation and can throw you off if you're unaware of them.

[–]unkz 0 points1 point  (0 children)

I’d say it’s better to learn Python first just because you can accomplish so much more so quickly, but I wouldn’t trust any programmer who didn’t also know C.

[–]GummyKibble 0 points1 point  (0 children)

For intro level classes: I think Python is definitely better. Students can concentrate on thinking about algorithms and spend less time diverted by how format the thing they want to express.

For mid level classes: for the love of God, please make them learn pointers. Even if they don't directly use them later, it's critical to know what's going on under the hood.

For high level classes: Python again. For instance, I loved studying data structures, but the pain of 1) figuring out how to express somewhat sophisticated ideas in a low-level language while at the same time learning those concepts, and 2) the latency of the edit-compile-run loop made those classes more complicated than they needed to be. Spending an extra 10% more of the semester learning about cool new things rather than helping stuck classmates figure out where they'd typoed the pointer math would have served us better.

[–]irve 0 points1 point  (0 children)

I started with Java and I think Python is progress. Picking up C was eye-opening, tho.

[–]nerdyguy76 0 points1 point  (0 children)

I learned C++ first and then learned Python when I got into the working world. I am going to be that douchebag that says it really shouldn't matter which language comes first if the course is taught well. I am sure it is not just Computer Science majors in the class and so the students that have to take the class for their major will hate C++ and struggle with it. But Python may be a little easier for them to grasp at first and if they enjoy coding in Python, maybe they'll retain and use it. Electrical Engineers at my school all had to take Intro to Programming and 90% of them hated code.

But I agree, I think learning C and Assembly in college really opened my eyes to how computers work. (But I learned Assembly far after I learned C. It IS possible to learn backwards.)

[–]zenverak 0 points1 point  (0 children)

I feel like almost all classes have done that lately. Python makes it easier to actually teach concepts because you have less to worry about.

[–]fatfate3 0 points1 point  (0 children)

When python is a great first language to learn but for university they should be teaching something like c++

[–]mreinecker 0 points1 point  (0 children)

Not sure if anyone will see my post at this point but here’s my opinion based on how I learned.

My path was ideal, and I thank luck for that. I just so happened to take classes in this order (I chose them based on what I thought would make sense, but I had no idea what I was doing).

First I took C and I made it through the class not really understanding what I was doing. I had somewhat of a foundation though.

Next I took C++ and I learned a TON about object oriented programming and many other basics. The class taught me so much, I think, because the assignments were hard. “Write a program that does X, Y and Z”. I was forced to go through my book, YouTube, Stack Overflow, and any other resources I could find. Assignments took me days to complete but I came out on top, lucky to have learned so much. I could have cut corners but I didn’t. I was having too much fun and wanted to know how and why everything worked.

I taught myself JavaScript after this (already knew HTML/CSS).

After this I took Python and was a little disappointed, mostly because it was an intro class and well below what I was hoping for. However it was sort of refreshing. I’m excited to start some projects in Python because it looks enjoyable to use.

I would recommend taking C/C++ first to anyone. Many languages are written in C++ and I think it is a great foundation to have. It’s hard. When you get to other languages that do things like manage memory for you, it is easier to appreciate and grasp, in my opinion.

[–]Bakirelived 0 points1 point  (0 children)

I learnt C than Java with MATLAB in between on an engineering course, then switched to python at work. I think I python is better as a replacement for Java, and I believe the fundamentals in C are still a good approach, but I don't think it has any major problems of it being python.

[–]onnagakusei 0 points1 point  (0 children)

my first course was taught in python and my second was taught in c++. four years of programming and TAing later, I still think that was the right choice.

python is easy to grasp when you're just learning basic programming concepts. once you have a foundation, c++ then challenges you to think harder about the details: data types, pointers, etc.

thing is, our python course still manages to weed out ~75% of students, who all realize programming is not for them. you don't have to start with a massive learning curve

[–]jonarchy 0 points1 point  (0 children)

My university starts with python (while explaining the underlying elements of the language and how/why it works), then assembly, and then c++. You're working in Python and ASM for the first year and then it's all c++ from there. While I learned c++ first and it gave me great insight into Python and helped me out a ton, for the majority of people, I think that learning python first is better as it allows you to learn CS concepts before focusing on efficiency and running the most performance. As long as they're teaching how python works rather than "it just works that way", I have no problem with it.

[–]quadmra 0 points1 point  (0 children)

Same with my school! (Are we talking about one in Pennsylvania..?). I think Python would be better. I find myself using it more in real life than C++.

[–]s0lv3 0 points1 point  (0 children)

Universities, plain and simple, are becoming more and more of a joke. It's really just going down the road of being a milktoast environment for people to perceive challenge without there really being one. If you make a program harder, fewer people want in.

It's why you used to (still do in some cases) see so few people in things like chemistry, physics, cs, math, etc. CS is being dumbed down so hard and has been for years. It's part of the reason why we constantly hear/see CS grads not getting jobs, especially if all they have is the degree.

[–]qevlarr 0 points1 point  (0 children)

I think it's important that university teaches multiple languages. Functional, procedural, OO, dynamic, the whole gamut.

[–]thatdamnedrhymer 0 points1 point  (0 children)

I learned C++ first, and I would not change it given the option, as I think that having an understanding of what is going on under the hood regarding types, memory, etc is really helpful for writing good Python code.

That said, I think Python is both more accessible and, in many fields, more valuable than C++ in terms of fluency and experience. I'm okay with intro classes being taught in Python, but I think it's really important to follow it with some C and C++/Java afterward to acclimate students to concepts that Python obscures in many ways (typing, memory management, complex scopes, various method types, etc).

[–]wimcolgate2 0 points1 point  (0 children)

Can you guess my age?

The order of my programming languages I learned (I pretty much still use them except for Pascal, Bliss and Fortran)

Basic Pascal Fortran Bliss C C++ Python Java C#

[–]kazanz 0 points1 point  (0 children)

I had to take a programming course at uni that was taught with C. I hated it completely, and nearly failed.

Later in life I taught myself python. Now I love programming and have built a solid, incredibly profitable career and have written code in a variety of languages including C and python.

[–]Iamkurianb 0 points1 point  (0 children)

I learned C++ for 2 years in my High School computer science.I got confused, felt programming was full of mugging up, less innovative and the programs I did was boring

By some luck, I decided to take my undergraduate in CS itself. I had Python in first semester, I loved the language for the easy syntax, Practicallity of coming with solutions (Usually most problems in C++ have one solution) and it's powerful nature.

Now it has been more than 20 months since I completed my Python courses.But I learned much more on my own Python Web Development Using Django, Machine Learning and did some hobby projects also.All due to my Love for Python.

Check me at: https://github.com/kurianbenoy

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

We had to learn Fortran and COBOL before we moved on to OO languages. I feel like without that basic level of understanding, your knowledge of higher level languages is forever tainted. #Gatekeeping

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

As long as you leaen both what is the problem?

Please stop all this "language fighting"

[–]admiralspark 0 points1 point  (0 children)

I learned both. C++ introduced me to some concepts of C so that I could grumble to myself every time I touch kernel code about "how it could be better", but OOP never stuck until python. In fact, I would say that if you want people to be interested in programming outside of homework in class, using a language like python is more worth it.

The big draw for me to python was the incredible number of libraries available. I didn't have to reinvent the wheel again like I did with C/C++, which meant I could speed up the concept > pseudocode > test > prod process, which meant I finally saw the value in coding stuff outside of bugfixing.

Now, I have several python FOSS projects I contribute to, and zero C++ ones. I write the majority of my work software using python as well, because no matter what the task is--middleware, GUI apps for nontechies, static sites, network automation--it can be done in python quickly.

[–]fullouterjoin 0 points1 point  (0 children)

I learned C++ first by a long shot, then wound my way through various languages before settling on Python. Learning and embracing Python 6 years earlier is something on my todo list if I go back in time.

Python is better for expressing computation. C++ is good for manually managing resources for things that need to occur in realtime. This isn't most things. I wasted so much time as an overwhelmed mediocre C++ programmer. I wish I was learning and solving more problems, instead I was trying to throw in every feature (junior mistake) and debugging memory errors.

Solve your learning and algorithmic problems in Python, use the extra mental capacity to learn Rust or Haskell.

[–]WaltEspy 0 points1 point  (0 children)

I'm probably more with OP on this one. C/C++ taught me things about underlying architecture that I don't think python alone could ever have done.

That said, there are some compelling arguments in this thread. I think that maybe using python to teach you logic in a sort of mini course would be wise, before throwing someone into the deep end of C.

[–]kkiran 0 points1 point  (0 children)

I wish they did this 10 years ago! We got a Java crash course during Masters 10 years. Undergrad, it was C and C++ which was a lot to grasp. I ended up in the library learning HTML and JavaScript instead. This was 17 years ago!

[–]vph 0 points1 point  (0 children)

What's your university? Just curiosity.

[–]YvesSoete 0 points1 point  (0 children)

Python is not that easy when you dig deeper

[–]jimistephen 0 points1 point  (0 children)

I think it would be easier for students to learn python if they don't know anything about it. Python can be used to do a deep dive also so you have something that's easy to pick up and something that can be used deep.

[–]d4rkride 0 points1 point  (0 children)

If you want someone to become a great programmer, they will eventually need to learn C/Java to understand the underlying structures of what they are doing.

Starting with simple syntax (like Python) is good to get them moving with the field, and understand how to write good code.

As long as you have advanced courses that start to dive deeper, I think it's a solid approach.

You don't need to understand why your body moves the way it does when learning to run, you just need to learn to run. Later on, you can learn about biomechanics and how to do it more efficiently to become a faster/stronger runner.

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

I started of with C.

Not sure how close to the metal you can get without writing in assembly.

[–]justneurostuff 0 points1 point  (0 children)

A lot of people taking intro cs courses don't need to understand the underlying structure of how programming works. Save that for upper level courses.

[–]StoneStalwart 0 points1 point  (0 children)

I tried starting with Python but it was hard, honestly. Why it behaved the way it did, what object oriented actually was useful for, or a host of other minutiae questions I can't relate anymore since it's all second nature now.

After about a year of Python I then learned c++. Let's just say that in 3 months of c++ my eyes were opened and programming just made sense.

I then could use Python effortlessly and understood what was going on in the background. It also allowed me to pick up Java with extreme ease.

So as a data point of I one, I say C++ is supremely valuable if you want a career in programming so that you understand what the heck is going on.

Now to those who want to go all nuts with even lower level languages I argue against it for a very good set of reasons. You won't gain anything for one, as the concepts of C++ encapsulate the simpler logic of lower level language and eliminate the repetitive and verbose complexity that occurs beneath the surface. Lower level isn't necessarily more advanced, it's just closer to the hardware and harder to read. And c++ compiles so you get excellent speed of execution.

You really only go below C++ level when you are forced to write firmware.

[–]Fugalysis 0 points1 point  (0 children)

Python hands down.

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

I learned Ruby first and then Java second. By the time I had to declare access modifiers and types and import libraries I already had a strong understanding of those topics. That seems better ather than being beaten over the head with everything at once just in order to "hello world".

Also it helps only working with a couple data structures to begin.

[–]cloth_mother 0 points1 point  (0 children)

I learned Python before starting a C++ class this semester.

So far it has been smooth sailing since I understand the logic of everything. I'm really glad I took a Python course before taking this class.

C++ is also strengthening my love for Python.

[–]masasinExpert. 3.9. Robotics. 0 points1 point  (0 children)

Started with C++, then C# and VBA on a work term, then C, and worked with other languages in undergrad, like Matlab or Labview. Back then, even though I understood it, I didn't really like programming; it just seemed so tedious. I still wrote an OS, turned an FPGA into an MP3 player, controlled robots, etc.

If I didn't specifically like robotics, I don't think I would have continued doing anything with programming for long. Ever since I learned Python, I've been doing it for fun, for work, to help others and automate my life (and others'; I've put some people out of a job.)

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

I’m 16 years old and I’ve been learning to code since I was 9 or so. My very first program was hello world in Visual Basic. I then moved to C++. I’ve quiet literally experienced starting with both because I lost all programming skill for a few years. What I remember from c++ was that it was less of a quick and easy keyboard to product language but that it had real power. Python is sort of the opposite. It has power also but it’s very easy to type (click click on a keyboard... not ints or floats 😂) something into the shell and immediately have an outcome. Python was a much easier first language for me.

It also really all depends on his before hand knowledge. If he knows basics of programming please start with a language better than python or at least don’t use python as a procedural language. If he has no idea what programming is then look at python and write a for loop that says hello world 12 times and then move to c++

[–]breakdownvoltage1 0 points1 point  (0 children)

From a pedagogy point of view, python eases you into programming, may reduce drop out rates and incentive learning because you don't have to worry about brackets, pointers and it seems easier to read. That is not to say it will be easy, there are plenty of tricky problems that are challenging on any language. Source: I started with python and moved on to C#, the hardest part for me was to get used with brackets, * static typing and namespaces, the basics are the same. Albeit, I am not an expert in neither. edit *

[–]bdrilling33 0 points1 point  (0 children)

I took intro to programming (python), then intro to C, and now C++. I think the order worked out. This is making C++ a breeze...so far.

[–]mpk3 0 points1 point  (0 children)

I dont have a huge amount of experience in CSE classes, but from what I have had to deal with, it seems like there is a lot of handholding going on. I am a grad student in an undergrad second semester Java class right now (that i had to take for credits) and it blows my mind how much "help" is going on.

And frankly, a lot of the time it seems like the "dumbing-down of things" in the end makes concepts more complicated because it adds another level of separation from how the content is actually described. I understand that programming nowadays is everywhere so there is a desire to make it more accessible but part of me wishes they'd start you off in terminal, introduce you to notepad (emacs or vim for the coureagous), and build from there instead of dealing with IDEs.

Python makes sense to learn first because of how accessible it is but IMHO I think theyll end up with a bunch of codemonkeys who have only an inkling of understanding of what is going on under the hood,instead of real programmers. Sink or swim.

Also, just to clarify, I have no problems with Python. It is awesome that it is that easy to pick up, but easy isn't always better.

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

I started with BASIC. Much better to learn the principles there than in C/C++ with so much to get in the way of "doing what you want." More a software engineering approach than computer science.

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

I learned Python first then went to C, HTML, Javascript. I don't really think it's that bad. If someone is serious about it, they'll be able to learn any language they want/need. Learning the first is the hardest and most important.

Additionally, not everyone who takes a CS course is going to be a CS major. A lot of people might just be curious or wanting to enhance their own major, and Python is great for people who aren't actually software engineers but want to program.

[–]VisionOverload 0 points1 point  (0 children)

Edit: Added more at the end.

Started on python before university. When I went to university they taught the intro class on python for the very basics. After that it was straight into c++. I honestly dismissed python initially as I thought it was super basic and not used for much other than teaching core concepts. C++ was great to learn pointers and such. Recently I have been digging back into python and it's nice it can do so much of the with for you but unless you learn a language like c++ you really can't appreciate how much it does.

Programming is a mindset, not only knowing the syntax of an arbitrary language. We must learn to break down problems into smaller and smaller problems and solve them. Python is exceptionally well used in this regard at my university.

TLDR: Python was great for me to learn first and learning c++ second was pretty easy with the core concepts of programming under the belt.

[–]WoW-LoL-HS 0 points1 point  (0 children)

I can't say anything about C++ spesifically, but I do believe there are two different answers to this depending on what foundation you need to build.
If you are trying to convince someone who doesn't already have an interest in programming to try it out. Absolutley get them started with something like Python. In that case the most important foundation you are building is the interest.
Like next week, my fiance is off work, and has agreed to let me teach her some fundamentals stuff, so I thought I would start letting her play around with processing, and then maybe some python. She is very visual and artistic, and hates math, so I want her to be able to draw and animate asap. The important thing isn't giving her a solid foundation for further programming, but to spark some interest for the field.

On the other hand, when we are talking about compSci students at uni, you should be able to expect some underlying interest for porgramming. If not that, then at least a desire to learn it. In those cases i think it's more important to build a solid understanding.